Repository: mathiasbynens/dotfiles Branch: main Commit: b7c7894e7bb2 Files: 35 Total size: 139.3 KB Directory structure: gitextract_ojlo6cwm/ ├── .aliases ├── .bash_profile ├── .bash_prompt ├── .bashrc ├── .curlrc ├── .editorconfig ├── .exports ├── .functions ├── .gdbinit ├── .gitattributes ├── .gitconfig ├── .gitignore ├── .gvimrc ├── .hgignore ├── .hushlogin ├── .inputrc ├── .macos ├── .osx ├── .screenrc ├── .tmux.conf ├── .vim/ │ ├── backups/ │ │ └── .gitkeep │ ├── colors/ │ │ └── solarized.vim │ ├── swaps/ │ │ └── .gitkeep │ ├── syntax/ │ │ └── json.vim │ └── undo/ │ └── .gitkeep ├── .vimrc ├── .wgetrc ├── LICENSE-MIT.txt ├── README.md ├── bootstrap.sh ├── brew.sh └── init/ ├── Preferences.sublime-settings ├── Solarized Dark xterm-256color.terminal ├── Solarized Dark.itermcolors └── spectacle.json ================================================ FILE CONTENTS ================================================ ================================================ FILE: .aliases ================================================ #!/usr/bin/env bash # Easier navigation: .., ..., ...., ....., ~ and - alias ..="cd .." alias ...="cd ../.." alias ....="cd ../../.." alias .....="cd ../../../.." alias ~="cd ~" # `cd` is probably faster to type though alias -- -="cd -" # Shortcuts alias d="cd ~/Documents/Dropbox" alias dl="cd ~/Downloads" alias dt="cd ~/Desktop" alias p="cd ~/projects" alias g="git" # Detect which `ls` flavor is in use if ls --color > /dev/null 2>&1; then # GNU `ls` colorflag="--color" export LS_COLORS='no=00:fi=00:di=01;31: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:' else # macOS `ls` colorflag="-G" export LSCOLORS='BxBxhxDxfxhxhxhxhxcxcx' fi # List all files colorized in long format alias l="ls -lF ${colorflag}" # List all files colorized in long format, excluding . and .. alias la="ls -lAF ${colorflag}" # List only directories alias lsd="ls -lF ${colorflag} | grep --color=never '^d'" # Always use color output for `ls` alias ls="command ls ${colorflag}" # Always enable colored `grep` output # Note: `GREP_OPTIONS="--color=auto"` is deprecated, hence the alias usage. alias grep='grep --color=auto' alias fgrep='fgrep --color=auto' alias egrep='egrep --color=auto' # Enable aliases to be sudo’ed alias sudo='sudo ' # Get week number alias week='date +%V' # Get macOS Software Updates, and update installed Ruby gems, Homebrew, npm, and their installed packages alias update='sudo softwareupdate -i -a; brew update; brew upgrade; brew cleanup; npm install npm -g; npm update -g; sudo gem update --system; sudo gem update; sudo gem cleanup' # Google Chrome alias chrome='/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome' alias canary='/Applications/Google\ Chrome\ Canary.app/Contents/MacOS/Google\ Chrome\ Canary' # IP addresses alias ip="dig +short myip.opendns.com @resolver1.opendns.com" alias localip="ipconfig getifaddr en0" alias ips="ifconfig -a | grep -o 'inet6\? \(addr:\)\?\s\?\(\(\([0-9]\+\.\)\{3\}[0-9]\+\)\|[a-fA-F0-9:]\+\)' | awk '{ sub(/inet6? (addr:)? ?/, \"\"); print }'" # Show active network interfaces alias ifactive="ifconfig | pcregrep -M -o '^[^\t:]+:([^\n]|\n\t)*status: active'" # Flush Directory Service cache alias flush="dscacheutil -flushcache && killall -HUP mDNSResponder" # Clean up LaunchServices to remove duplicates in the “Open With” menu alias lscleanup="/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -kill -r -domain local -domain system -domain user && killall Finder" # Canonical hex dump; some systems have this symlinked command -v hd > /dev/null || alias hd="hexdump -C" # macOS has no `md5sum`, so use `md5` as a fallback command -v md5sum > /dev/null || alias md5sum="md5" # macOS has no `sha1sum`, so use `shasum` as a fallback command -v sha1sum > /dev/null || alias sha1sum="shasum" # JavaScriptCore REPL jscbin="/System/Library/Frameworks/JavaScriptCore.framework/Versions/A/Resources/jsc"; [ -e "${jscbin}" ] && alias jsc="${jscbin}"; unset jscbin; # Trim new lines and copy to clipboard alias c="tr -d '\n' | pbcopy" # Recursively delete `.DS_Store` files alias cleanup="find . -type f -name '*.DS_Store' -ls -delete" # Empty the Trash on all mounted volumes and the main HDD. # Also, clear Apple’s System Logs to improve shell startup speed. # Finally, clear download history from quarantine. https://mths.be/bum alias emptytrash="sudo rm -rfv /Volumes/*/.Trashes; sudo rm -rfv ~/.Trash; sudo rm -rfv /private/var/log/asl/*.asl; sqlite3 ~/Library/Preferences/com.apple.LaunchServices.QuarantineEventsV* 'delete from LSQuarantineEvent'" # Show/hide hidden files in Finder alias show="defaults write com.apple.finder AppleShowAllFiles -bool true && killall Finder" alias hide="defaults write com.apple.finder AppleShowAllFiles -bool false && killall Finder" # Hide/show all desktop icons (useful when presenting) alias hidedesktop="defaults write com.apple.finder CreateDesktop -bool false && killall Finder" alias showdesktop="defaults write com.apple.finder CreateDesktop -bool true && killall Finder" # URL-encode strings alias urlencode='python -c "import sys, urllib as ul; print ul.quote_plus(sys.argv[1]);"' # Merge PDF files, preserving hyperlinks # Usage: `mergepdf input{1,2,3}.pdf` alias mergepdf='gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=_merged.pdf' # Disable Spotlight alias spotoff="sudo mdutil -a -i off" # Enable Spotlight alias spoton="sudo mdutil -a -i on" # PlistBuddy alias, because sometimes `defaults` just doesn’t cut it alias plistbuddy="/usr/libexec/PlistBuddy" # Airport CLI alias alias airport='/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport' # Intuitive map function # For example, to list all directories that contain a certain file: # find . -name .gitattributes | map dirname alias map="xargs -n1" # One of @janmoesen’s ProTip™s for method in GET HEAD POST PUT DELETE TRACE OPTIONS; do alias "${method}"="lwp-request -m '${method}'" done # Stuff I never really use but cannot delete either because of http://xkcd.com/530/ alias stfu="osascript -e 'set volume output muted true'" alias pumpitup="osascript -e 'set volume output volume 100'" # Kill all the tabs in Chrome to free up memory # [C] explained: http://www.commandlinefu.com/commands/view/402/exclude-grep-from-your-grepped-output-of-ps-alias-included-in-description alias chromekill="ps ux | grep '[C]hrome Helper --type=renderer' | grep -v extension-process | tr -s ' ' | cut -d ' ' -f2 | xargs kill" # Lock the screen (when going AFK) alias afk="/System/Library/CoreServices/Menu\ Extras/User.menu/Contents/Resources/CGSession -suspend" # Reload the shell (i.e. invoke as a login shell) alias reload="exec ${SHELL} -l" # Print each PATH entry on a separate line alias path='echo -e ${PATH//:/\\n}' ================================================ FILE: .bash_profile ================================================ # 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. for file in ~/.{path,bash_prompt,exports,aliases,functions,extra}; do [ -r "$file" ] && [ -f "$file" ] && source "$file"; done; unset file; # Case-insensitive globbing (used in pathname expansion) shopt -s nocaseglob; # Append to the Bash history file, rather than overwriting it shopt -s histappend; # 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 which brew &> /dev/null && [ -r "$(brew --prefix)/etc/profile.d/bash_completion.sh" ]; then # Ensure existing Homebrew v1 completions continue to work export BASH_COMPLETION_COMPAT_DIR="$(brew --prefix)/etc/bash_completion.d"; source "$(brew --prefix)/etc/profile.d/bash_completion.sh"; elif [ -f /etc/bash_completion ]; then source /etc/bash_completion; fi; # Enable tab completion for `g` by marking it as an alias for `git` if type _git &> /dev/null; then complete -o default -o nospace -F _git g; 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; # Add tab completion for `defaults read|write NSGlobalDomain` # You could just use `-g` instead, but I like being explicit complete -W "NSGlobalDomain" defaults; # Add `killall` tab completion for common apps complete -o "nospace" -W "Contacts Calendar Dock Finder Mail Safari iTunes SystemUIServer Terminal Twitter" killall; ================================================ FILE: .bash_prompt ================================================ #!/usr/bin/env bash # 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. git rev-parse --is-inside-work-tree &>/dev/null || return; # Check for what branch we’re on. # Get the short symbolic ref. If HEAD isn’t a symbolic ref, get a # tracking remote branch or tag. Otherwise, get the # short SHA for the latest commit, or give up. branchName="$(git symbolic-ref --quiet --short HEAD 2> /dev/null || \ git describe --all --exact-match HEAD 2> /dev/null || \ git rev-parse --short HEAD 2> /dev/null || \ echo '(unknown)')"; # Early exit for Chromium & Blink repo, as the dirty check takes too long. # Thanks, @paulirish! # https://github.com/paulirish/dotfiles/blob/dd33151f/.bash_prompt#L110-L123 repoUrl="$(git config --get remote.origin.url)"; if grep -q 'chromium/src.git' <<< "${repoUrl}"; then s+='*'; else # 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; [ -n "${s}" ] && s=" [${s}]"; echo -e "${1}${branchName}${2}${s}"; } 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 and prompt. PS1="\[\033]0;\W\007\]"; # working directory base name PS1+="\[${bold}\]\n"; # newline PS1+="\[${userStyle}\]\u"; # username PS1+="\[${white}\] at "; PS1+="\[${hostStyle}\]\h"; # host PS1+="\[${white}\] in "; PS1+="\[${green}\]\w"; # working directory full path PS1+="\$(prompt_git \"\[${white}\] on \[${violet}\]\" \"\[${blue}\]\")"; # Git repository details PS1+="\n"; PS1+="\[${white}\]\$ \[${reset}\]"; # `$` (and reset color) export PS1; PS2="\[${yellow}\]→ \[${reset}\]"; export PS2; ================================================ FILE: .bashrc ================================================ [ -n "$PS1" ] && source ~/.bash_profile; ================================================ FILE: .curlrc ================================================ # 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 ================================================ FILE: .editorconfig ================================================ root = true [*] charset = utf-8 indent_style = tab end_of_line = lf insert_final_newline = true trim_trailing_whitespace = true ================================================ FILE: .exports ================================================ #!/usr/bin/env bash # Make vim the default editor. export EDITOR='vim'; # Enable persistent REPL history for `node`. export NODE_REPL_HISTORY=~/.node_history; # Allow 32³ entries; the default is 1000. export NODE_REPL_HISTORY_SIZE='32768'; # Use sloppy mode by default, matching web browsers. export NODE_REPL_MODE='sloppy'; # Make Python use UTF-8 encoding for output to stdin, stdout, and stderr. export PYTHONIOENCODING='UTF-8'; # Increase Bash history size. Allow 32³ entries; the default is 500. export HISTSIZE='32768'; export HISTFILESIZE="${HISTSIZE}"; # 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'; # Avoid issues with `gpg` as installed via Homebrew. # https://stackoverflow.com/a/42265848/96656 export GPG_TTY=$(tty); # Hide the “default interactive shell is now zsh” warning on macOS. export BASH_SILENCE_DEPRECATION_WARNING=1; ================================================ FILE: .functions ================================================ #!/usr/bin/env bash # Create a new directory and enter it function mkd() { 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)')"; } # Create a .tar.gz archive, using `zopfli`, `pigz` or `gzip` for compression function targz() { local tmpFile="${@%/}.tar"; tar -cvf "${tmpFile}" --exclude=".DS_Store" "${@}" || return 1; size=$( stat -f"%z" "${tmpFile}" 2> /dev/null; # macOS `stat` stat -c"%s" "${tmpFile}" 2> /dev/null; # GNU `stat` ); local cmd=""; if (( size < 52428800 )) && hash zopfli 2> /dev/null; then # the .tar file is smaller than 50 MB and Zopfli is available; use it cmd="zopfli"; else if hash pigz 2> /dev/null; then cmd="pigz"; else cmd="gzip"; fi; fi; echo "Compressing .tar ($((size / 1000)) kB) using \`${cmd}\`…"; "${cmd}" -v "${tmpFile}" || return 1; [ -f "${tmpFile}" ] && rm "${tmpFile}"; zippedSize=$( stat -f"%z" "${tmpFile}.gz" 2> /dev/null; # macOS `stat` stat -c"%s" "${tmpFile}.gz" 2> /dev/null; # GNU `stat` ); echo "${tmpFile}.gz ($((zippedSize / 1000)) kB) created successfully."; } # Determine size of a file or total size of a directory function fs() { 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; # Create a data URL from a file function dataurl() { local mimeType=$(file -b --mime-type "$1"); if [[ $mimeType == text/* ]]; then mimeType="${mimeType};charset=utf-8"; fi echo "data:${mimeType};base64,$(openssl base64 -in "$1" | tr -d '\n')"; } # Start an HTTP server from a directory, optionally specifying the port function server() { local port="${1:-8000}"; sleep 1 && open "http://localhost:${port}/" & # Set the default Content-Type to `text/plain` instead of `application/octet-stream` # And serve everything as UTF-8 (although not technically correct, this doesn’t break anything for binary files) python -c $'import SimpleHTTPServer;\nmap = SimpleHTTPServer.SimpleHTTPRequestHandler.extensions_map;\nmap[""] = "text/plain";\nfor key, value in map.items():\n\tmap[key] = value + ";charset=UTF-8";\nSimpleHTTPServer.test();' "$port"; } # Start a PHP server from a directory, optionally specifying the port # (Requires PHP 5.4.0+.) function phpserver() { local port="${1:-4000}"; local ip=$(ipconfig getifaddr en1); sleep 1 && open "http://${ip}:${port}/" & php -S "${ip}:${port}"; } # Compare original and gzipped file size function gz() { local origsize=$(wc -c < "$1"); local gzipsize=$(gzip -c "$1" | wc -c); local ratio=$(echo "$gzipsize * 100 / $origsize" | bc -l); printf "orig: %d bytes\n" "$origsize"; printf "gzip: %d bytes (%2.2f%%)\n" "$gzipsize" "$ratio"; } # Run `dig` and display the most useful info function digga() { dig +nocmd "$1" any +multiline +noall +answer; } # Show all the names (CNs and SANs) listed in the SSL certificate # for a given domain function getcertnames() { if [ -z "${1}" ]; then echo "ERROR: No domain specified."; return 1; fi; local domain="${1}"; echo "Testing ${domain}…"; echo ""; # newline local tmp=$(echo -e "GET / HTTP/1.0\nEOT" \ | openssl s_client -connect "${domain}:443" -servername "${domain}" 2>&1); if [[ "${tmp}" = *"-----BEGIN CERTIFICATE-----"* ]]; then local certText=$(echo "${tmp}" \ | openssl x509 -text -certopt "no_aux, no_header, no_issuer, no_pubkey, \ no_serial, no_sigdump, no_signame, no_validity, no_version"); echo "Common Name:"; echo ""; # newline echo "${certText}" | grep "Subject:" | sed -e "s/^.*CN=//" | sed -e "s/\/emailAddress=.*//"; echo ""; # newline echo "Subject Alternative Name(s):"; echo ""; # newline echo "${certText}" | grep -A 1 "Subject Alternative Name:" \ | sed -e "2s/DNS://g" -e "s/ //g" | tr "," "\n" | tail -n +2; return 0; else echo "ERROR: Certificate not found."; return 1; fi; } # Normalize `open` across Linux, macOS, and Windows. # This is needed to make the `o` function (see below) cross-platform. if [ ! $(uname -s) = 'Darwin' ]; then if grep -q Microsoft /proc/version; then # Ubuntu on Windows using the Linux subsystem alias open='explorer.exe'; else alias open='xdg-open'; fi fi # `o` with no arguments opens the current directory, otherwise opens the given # location function o() { if [ $# -eq 0 ]; then open .; else open "$@"; 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 tre() { tree -aC -I '.git|node_modules|bower_components' --dirsfirst "$@" | less -FRNX; } ================================================ FILE: .gdbinit ================================================ set disassembly-flavor intel ================================================ FILE: .gitattributes ================================================ # Automatically normalize line endings for all text-based files #* text=auto # Disabled because of https://github.com/mathiasbynens/dotfiles/issues/149 :( ================================================ FILE: .gitconfig ================================================ [alias] # View abbreviated SHA, description, and history graph of the latest 20 commits. l = log --pretty=oneline -n 20 --graph --abbrev-commit # View the current working tree status using the short format. s = status -s # Show the diff between the latest commit and the current state. d = !"git diff-index --quiet HEAD -- || clear; git --no-pager diff --patch-with-stat" # `git di $number` shows the diff between the state `$number` revisions ago and the current state. di = !"d() { git diff --patch-with-stat HEAD~$1; }; git diff-index --quiet HEAD -- || clear; d" # Pull in remote changes for the current repository and all its submodules. p = pull --recurse-submodules # Clone a repository including all submodules. c = clone --recursive # Commit all changes. ca = !git add ':(exclude,attr:builtin_objectmode=160000)' && git commit -av # Switch to a branch, creating it if necessary. go = "!f() { git checkout -b \"$1\" 2> /dev/null || git checkout \"$1\"; }; f" # Show verbose output about tags, branches or remotes tags = tag -l branches = branch --all remotes = remote --verbose # List aliases. aliases = config --get-regexp alias # Amend the currently staged files to the latest commit. amend = commit --amend --reuse-message=HEAD # Credit an author on the latest commit. credit = "!f() { git commit --amend --author \"$1 <$2>\" -C HEAD; }; f" # Interactive rebase with the given number of latest commits. reb = "!r() { git rebase -i HEAD~$1; }; r" # Remove the old tag with this name and tag the latest commit with it. retag = "!r() { git tag -d $1 && git push origin :refs/tags/$1 && git tag $1; }; r" # Find branches containing commit fb = "!f() { git branch -a --contains $1; }; f" # Find tags containing commit ft = "!f() { git describe --always --contains $1; }; f" # Find commits by source code fc = "!f() { git log --pretty=format:'%C(yellow)%h %Cblue%ad %Creset%s%Cgreen [%cn] %Cred%d' --decorate --date=short -S$1; }; f" # Find commits by commit message fm = "!f() { git log --pretty=format:'%C(yellow)%h %Cblue%ad %Creset%s%Cgreen [%cn] %Cred%d' --decorate --date=short --grep=$1; }; f" # Remove branches that have already been merged with main. # a.k.a. ‘delete merged’ dm = "!git branch --merged | grep -v '\\*' | xargs -n 1 git branch -d" # List contributors with number of commits. contributors = shortlog --summary --numbered # Show the user email for the current repository. whoami = config user.email [apply] # Detect whitespace errors when applying a patch. whitespace = fix [branch] # Show most recently changed branches first. sort = -committerdate [core] # Use custom `.gitignore` and `.gitattributes`. excludesfile = ~/.gitignore attributesfile = ~/.gitattributes # Treat spaces before tabs and all kinds of trailing whitespace as an error. # [default] trailing-space: looks for spaces at the end of a line # [default] space-before-tab: looks for spaces before tabs at the beginning of a line whitespace = space-before-tab,-indent-with-non-tab,trailing-space # Make `git rebase` safer on macOS. # More info: trustctime = false # Prevent showing files whose names contain non-ASCII symbols as unversioned. # http://michael-kuehnel.de/git/2014/11/21/git-mac-osx-and-german-umlaute.html precomposeunicode = false # Speed up commands involving untracked files such as `git status`. # https://git-scm.com/docs/git-update-index#_untracked_cache untrackedCache = true [color] # Use colors in Git commands that are capable of colored output when # outputting to the terminal. (This is the default setting in Git ≥ 1.8.4.) ui = auto [color "branch"] current = yellow reverse local = yellow remote = green [color "diff"] meta = yellow bold frag = magenta bold # line info old = red # deletions new = green # additions [color "status"] added = yellow changed = green untracked = cyan [commit] # https://help.github.com/articles/signing-commits-using-gpg/ gpgsign = true [diff] # Detect copies as well as renames. renames = copies [diff "bin"] # Use `hexdump` to diff binary files. textconv = hexdump -v -C [help] # Automatically correct and execute mistyped commands. autocorrect = 1 [merge] # Include summaries of merged commits in newly created merge commit messages log = true [push] # https://git-scm.com/docs/git-config#git-config-pushdefault default = simple # Make `git push` push relevant annotated tags when pushing branches out. followTags = true # URL shorthands [url "git@github.com:"] insteadOf = "gh:" pushInsteadOf = "github:" pushInsteadOf = "git://github.com/" [url "git://github.com/"] insteadOf = "github:" [url "git@gist.github.com:"] insteadOf = "gst:" pushInsteadOf = "gist:" pushInsteadOf = "git://gist.github.com/" [url "git://gist.github.com/"] insteadOf = "gist:" [init] defaultBranch = main ================================================ FILE: .gitignore ================================================ # Compiled Python files *.pyc # Folder view configuration files .DS_Store Desktop.ini # Thumbnail cache files ._* Thumbs.db # Files that might appear on external disks .Spotlight-V100 .Trashes ================================================ FILE: .gvimrc ================================================ " 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 ================================================ FILE: .hgignore ================================================ # Use shell-style glob syntax syntax: glob # Compiled Python files *.pyc # Folder view configuration files .DS_Store Desktop.ini # Thumbnail cache files ._* Thumbs.db # Files that might appear on external disks .Spotlight-V100 .Trashes ================================================ FILE: .hushlogin ================================================ # The mere presence of this file in the home directory disables the system # copyright notice, the date and time of the last login, the message of the # day as well as other information that may otherwise appear on login. # See `man login`. ================================================ FILE: .inputrc ================================================ # 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 # Use Alt/Meta + Delete to delete the preceding word "\e[3;3~": kill-word ================================================ FILE: .macos ================================================ #!/usr/bin/env bash # ~/.macos — https://mths.be/macos # Close any open System Preferences panes, to prevent them from overriding # settings we’re about to change osascript -e 'tell application "System Preferences" to quit' # Ask for the administrator password upfront sudo -v # Keep-alive: update existing `sudo` time stamp until `.macos` has finished while true; do sudo -n true; sleep 60; kill -0 "$$" || exit; done 2>/dev/null & ############################################################################### # General UI/UX # ############################################################################### # Set computer name (as done via System Preferences → Sharing) #sudo scutil --set ComputerName "0x6D746873" #sudo scutil --set HostName "0x6D746873" #sudo scutil --set LocalHostName "0x6D746873" #sudo defaults write /Library/Preferences/SystemConfiguration/com.apple.smb.server NetBIOSName -string "0x6D746873" # Disable the sound effects on boot sudo nvram SystemAudioVolume=" " # Disable transparency in the menu bar and elsewhere on Yosemite defaults write com.apple.universalaccess reduceTransparency -bool true # Set highlight color to green defaults write NSGlobalDomain AppleHighlightColor -string "0.764700 0.976500 0.568600" # Set sidebar icon size to medium defaults write NSGlobalDomain NSTableViewDefaultSizeMode -int 2 # Always show scrollbars defaults write NSGlobalDomain AppleShowScrollBars -string "Always" # Possible values: `WhenScrolling`, `Automatic` and `Always` # Disable the over-the-top focus ring animation defaults write NSGlobalDomain NSUseAnimatedFocusRing -bool false # Adjust toolbar title rollover delay defaults write NSGlobalDomain NSToolbarTitleViewRolloverDelay -float 0 # Disable smooth scrolling # (Uncomment if you’re on an older Mac that messes up the animation) #defaults write NSGlobalDomain NSScrollAnimationEnabled -bool false # Increase window resize speed for Cocoa applications defaults write NSGlobalDomain NSWindowResizeTime -float 0.001 # Expand save panel by default defaults write NSGlobalDomain NSNavPanelExpandedStateForSaveMode -bool true defaults write NSGlobalDomain NSNavPanelExpandedStateForSaveMode2 -bool true # Expand print panel by default defaults write NSGlobalDomain PMPrintingExpandedStateForPrint -bool true defaults write NSGlobalDomain PMPrintingExpandedStateForPrint2 -bool true # Save to disk (not to iCloud) by default defaults write NSGlobalDomain NSDocumentSaveNewDocumentsToCloud -bool false # Automatically quit printer app once the print jobs complete defaults write com.apple.print.PrintingPrefs "Quit When Finished" -bool true # Disable the “Are you sure you want to open this application?” dialog defaults write com.apple.LaunchServices LSQuarantine -bool false # Remove duplicates in the “Open With” menu (also see `lscleanup` alias) /System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -kill -r -domain local -domain system -domain user # Display ASCII control characters using caret notation in standard text views # Try e.g. `cd /tmp; unidecode "\x{0000}" > cc.txt; open -e cc.txt` defaults write NSGlobalDomain NSTextShowsControlCharacters -bool true # Disable Resume system-wide defaults write com.apple.systempreferences NSQuitAlwaysKeepsWindows -bool false # Disable automatic termination of inactive apps defaults write NSGlobalDomain NSDisableAutomaticTermination -bool true # Disable the crash reporter #defaults write com.apple.CrashReporter DialogType -string "none" # Set Help Viewer windows to non-floating mode defaults write com.apple.helpviewer DevMode -bool true # Fix for the ancient UTF-8 bug in QuickLook (https://mths.be/bbo) # Commented out, as this is known to cause problems in various Adobe apps :( # See https://github.com/mathiasbynens/dotfiles/issues/237 #echo "0x08000100:0" > ~/.CFUserTextEncoding # Reveal IP address, hostname, OS version, etc. when clicking the clock # in the login window sudo defaults write /Library/Preferences/com.apple.loginwindow AdminHostInfo HostName # Disable Notification Center and remove the menu bar icon launchctl unload -w /System/Library/LaunchAgents/com.apple.notificationcenterui.plist 2> /dev/null # Disable automatic capitalization as it’s annoying when typing code defaults write NSGlobalDomain NSAutomaticCapitalizationEnabled -bool false # Disable smart dashes as they’re annoying when typing code defaults write NSGlobalDomain NSAutomaticDashSubstitutionEnabled -bool false # Disable automatic period substitution as it’s annoying when typing code defaults write NSGlobalDomain NSAutomaticPeriodSubstitutionEnabled -bool false # Disable smart quotes as they’re annoying when typing code defaults write NSGlobalDomain NSAutomaticQuoteSubstitutionEnabled -bool false # Disable auto-correct defaults write NSGlobalDomain NSAutomaticSpellingCorrectionEnabled -bool false # Set a custom wallpaper image. `DefaultDesktop.jpg` is already a symlink, and # all wallpapers are in `/Library/Desktop Pictures/`. The default is `Wave.jpg`. #rm -rf ~/Library/Application Support/Dock/desktoppicture.db #sudo rm -rf /System/Library/CoreServices/DefaultDesktop.jpg #sudo ln -s /path/to/your/image /System/Library/CoreServices/DefaultDesktop.jpg ############################################################################### # Trackpad, mouse, keyboard, Bluetooth accessories, and input # ############################################################################### # Trackpad: enable tap to click for this user and for the login screen defaults write com.apple.driver.AppleBluetoothMultitouch.trackpad Clicking -bool true defaults -currentHost write NSGlobalDomain com.apple.mouse.tapBehavior -int 1 defaults write NSGlobalDomain com.apple.mouse.tapBehavior -int 1 # Trackpad: map bottom right corner to right-click defaults write com.apple.driver.AppleBluetoothMultitouch.trackpad TrackpadCornerSecondaryClick -int 2 defaults write com.apple.driver.AppleBluetoothMultitouch.trackpad TrackpadRightClick -bool true defaults -currentHost write NSGlobalDomain com.apple.trackpad.trackpadCornerClickBehavior -int 1 defaults -currentHost write NSGlobalDomain com.apple.trackpad.enableSecondaryClick -bool true # Disable “natural” (Lion-style) scrolling defaults write NSGlobalDomain com.apple.swipescrolldirection -bool false # Increase sound quality for Bluetooth headphones/headsets defaults write com.apple.BluetoothAudioAgent "Apple Bitpool Min (editable)" -int 40 # Enable full keyboard access for all controls # (e.g. enable Tab in modal dialogs) defaults write NSGlobalDomain AppleKeyboardUIMode -int 3 # Use scroll gesture with the Ctrl (^) modifier key to zoom defaults write com.apple.universalaccess closeViewScrollWheelToggle -bool true defaults write com.apple.universalaccess HIDScrollZoomModifierMask -int 262144 # Follow the keyboard focus while zoomed in defaults write com.apple.universalaccess closeViewZoomFollowsFocus -bool true # Disable press-and-hold for keys in favor of key repeat defaults write NSGlobalDomain ApplePressAndHoldEnabled -bool false # Set a blazingly fast keyboard repeat rate defaults write NSGlobalDomain KeyRepeat -int 1 defaults write NSGlobalDomain InitialKeyRepeat -int 10 # Set language and text formats # Note: if you’re in the US, replace `EUR` with `USD`, `Centimeters` with # `Inches`, `en_GB` with `en_US`, and `true` with `false`. defaults write NSGlobalDomain AppleLanguages -array "en" "nl" defaults write NSGlobalDomain AppleLocale -string "en_GB@currency=EUR" defaults write NSGlobalDomain AppleMeasurementUnits -string "Centimeters" defaults write NSGlobalDomain AppleMetricUnits -bool true # Show language menu in the top right corner of the boot screen sudo defaults write /Library/Preferences/com.apple.loginwindow showInputMenu -bool true # Set the timezone; see `sudo systemsetup -listtimezones` for other values sudo systemsetup -settimezone "Europe/Brussels" > /dev/null # Stop iTunes from responding to the keyboard media keys #launchctl unload -w /System/Library/LaunchAgents/com.apple.rcd.plist 2> /dev/null ############################################################################### # Energy saving # ############################################################################### # Enable lid wakeup sudo pmset -a lidwake 1 # Restart automatically on power loss sudo pmset -a autorestart 1 # Restart automatically if the computer freezes sudo systemsetup -setrestartfreeze on # Sleep the display after 15 minutes sudo pmset -a displaysleep 15 # Disable machine sleep while charging sudo pmset -c sleep 0 # Set machine sleep to 5 minutes on battery sudo pmset -b sleep 5 # Set standby delay to 24 hours (default is 1 hour) sudo pmset -a standbydelay 86400 # Never go into computer sleep mode sudo systemsetup -setcomputersleep Off > /dev/null # Hibernation mode # 0: Disable hibernation (speeds up entering sleep mode) # 3: Copy RAM to disk so the system state can still be restored in case of a # power failure. sudo pmset -a hibernatemode 0 # Remove the sleep image file to save disk space sudo rm /private/var/vm/sleepimage # Create a zero-byte file instead… sudo touch /private/var/vm/sleepimage # …and make sure it can’t be rewritten sudo chflags uchg /private/var/vm/sleepimage ############################################################################### # Screen # ############################################################################### # Require password immediately after sleep or screen saver begins defaults write com.apple.screensaver askForPassword -int 1 defaults write com.apple.screensaver askForPasswordDelay -int 0 # Save screenshots to the desktop defaults write com.apple.screencapture location -string "${HOME}/Desktop" # Save screenshots in PNG format (other options: BMP, GIF, JPG, PDF, TIFF) defaults write com.apple.screencapture type -string "png" # Disable shadow in screenshots defaults write com.apple.screencapture disable-shadow -bool true # Enable subpixel font rendering on non-Apple LCDs # Reference: https://github.com/kevinSuttle/macOS-Defaults/issues/17#issuecomment-266633501 defaults write NSGlobalDomain AppleFontSmoothing -int 1 # Enable HiDPI display modes (requires restart) sudo defaults write /Library/Preferences/com.apple.windowserver DisplayResolutionEnabled -bool true ############################################################################### # Finder # ############################################################################### # Finder: allow quitting via ⌘ + Q; doing so will also hide desktop icons defaults write com.apple.finder QuitMenuItem -bool true # Finder: disable window animations and Get Info animations defaults write com.apple.finder DisableAllAnimations -bool true # Set Desktop as the default location for new Finder windows # For other paths, use `PfLo` and `file:///full/path/here/` defaults write com.apple.finder NewWindowTarget -string "PfDe" defaults write com.apple.finder NewWindowTargetPath -string "file://${HOME}/Desktop/" # Show icons for hard drives, servers, and removable media on the desktop defaults write com.apple.finder ShowExternalHardDrivesOnDesktop -bool true defaults write com.apple.finder ShowHardDrivesOnDesktop -bool true defaults write com.apple.finder ShowMountedServersOnDesktop -bool true defaults write com.apple.finder ShowRemovableMediaOnDesktop -bool true # Finder: show hidden files by default #defaults write com.apple.finder AppleShowAllFiles -bool true # Finder: show all filename extensions defaults write NSGlobalDomain AppleShowAllExtensions -bool true # Finder: show status bar defaults write com.apple.finder ShowStatusBar -bool true # Finder: show path bar defaults write com.apple.finder ShowPathbar -bool true # Display full POSIX path as Finder window title defaults write com.apple.finder _FXShowPosixPathInTitle -bool true # Keep folders on top when sorting by name defaults write com.apple.finder _FXSortFoldersFirst -bool true # When performing a search, search the current folder by default defaults write com.apple.finder FXDefaultSearchScope -string "SCcf" # Disable the warning when changing a file extension defaults write com.apple.finder FXEnableExtensionChangeWarning -bool false # Enable spring loading for directories defaults write NSGlobalDomain com.apple.springing.enabled -bool true # Remove the spring loading delay for directories defaults write NSGlobalDomain com.apple.springing.delay -float 0 # Avoid creating .DS_Store files on network or USB volumes defaults write com.apple.desktopservices DSDontWriteNetworkStores -bool true defaults write com.apple.desktopservices DSDontWriteUSBStores -bool true # Disable disk image verification defaults write com.apple.frameworks.diskimages skip-verify -bool true defaults write com.apple.frameworks.diskimages skip-verify-locked -bool true defaults write com.apple.frameworks.diskimages skip-verify-remote -bool true # Automatically open a new Finder window when a volume is mounted defaults write com.apple.frameworks.diskimages auto-open-ro-root -bool true defaults write com.apple.frameworks.diskimages auto-open-rw-root -bool true defaults write com.apple.finder OpenWindowForNewRemovableDisk -bool true # Show item info near icons on the desktop and in other icon views /usr/libexec/PlistBuddy -c "Set :DesktopViewSettings:IconViewSettings:showItemInfo true" ~/Library/Preferences/com.apple.finder.plist /usr/libexec/PlistBuddy -c "Set :FK_StandardViewSettings:IconViewSettings:showItemInfo true" ~/Library/Preferences/com.apple.finder.plist /usr/libexec/PlistBuddy -c "Set :StandardViewSettings:IconViewSettings:showItemInfo true" ~/Library/Preferences/com.apple.finder.plist # Show item info to the right of the icons on the desktop /usr/libexec/PlistBuddy -c "Set DesktopViewSettings:IconViewSettings:labelOnBottom false" ~/Library/Preferences/com.apple.finder.plist # Enable snap-to-grid for icons on the desktop and in other icon views /usr/libexec/PlistBuddy -c "Set :DesktopViewSettings:IconViewSettings:arrangeBy grid" ~/Library/Preferences/com.apple.finder.plist /usr/libexec/PlistBuddy -c "Set :FK_StandardViewSettings:IconViewSettings:arrangeBy grid" ~/Library/Preferences/com.apple.finder.plist /usr/libexec/PlistBuddy -c "Set :StandardViewSettings:IconViewSettings:arrangeBy grid" ~/Library/Preferences/com.apple.finder.plist # Increase grid spacing for icons on the desktop and in other icon views /usr/libexec/PlistBuddy -c "Set :DesktopViewSettings:IconViewSettings:gridSpacing 100" ~/Library/Preferences/com.apple.finder.plist /usr/libexec/PlistBuddy -c "Set :FK_StandardViewSettings:IconViewSettings:gridSpacing 100" ~/Library/Preferences/com.apple.finder.plist /usr/libexec/PlistBuddy -c "Set :StandardViewSettings:IconViewSettings:gridSpacing 100" ~/Library/Preferences/com.apple.finder.plist # Increase the size of icons on the desktop and in other icon views /usr/libexec/PlistBuddy -c "Set :DesktopViewSettings:IconViewSettings:iconSize 80" ~/Library/Preferences/com.apple.finder.plist /usr/libexec/PlistBuddy -c "Set :FK_StandardViewSettings:IconViewSettings:iconSize 80" ~/Library/Preferences/com.apple.finder.plist /usr/libexec/PlistBuddy -c "Set :StandardViewSettings:IconViewSettings:iconSize 80" ~/Library/Preferences/com.apple.finder.plist # Use list view in all Finder windows by default # Four-letter codes for the other view modes: `icnv`, `clmv`, `glyv` defaults write com.apple.finder FXPreferredViewStyle -string "Nlsv" # Disable the warning before emptying the Trash defaults write com.apple.finder WarnOnEmptyTrash -bool false # Enable AirDrop over Ethernet and on unsupported Macs running Lion defaults write com.apple.NetworkBrowser BrowseAllInterfaces -bool true # Show the ~/Library folder chflags nohidden ~/Library && xattr -d com.apple.FinderInfo ~/Library # Show the /Volumes folder sudo chflags nohidden /Volumes # Remove Dropbox’s green checkmark icons in Finder file=/Applications/Dropbox.app/Contents/Resources/emblem-dropbox-uptodate.icns [ -e "${file}" ] && mv -f "${file}" "${file}.bak" # Expand the following File Info panes: # “General”, “Open with”, and “Sharing & Permissions” defaults write com.apple.finder FXInfoPanesExpanded -dict \ General -bool true \ OpenWith -bool true \ Privileges -bool true ############################################################################### # Dock, Dashboard, and hot corners # ############################################################################### # Enable highlight hover effect for the grid view of a stack (Dock) defaults write com.apple.dock mouse-over-hilite-stack -bool true # Set the icon size of Dock items to 36 pixels defaults write com.apple.dock tilesize -int 36 # Change minimize/maximize window effect defaults write com.apple.dock mineffect -string "scale" # Minimize windows into their application’s icon defaults write com.apple.dock minimize-to-application -bool true # Enable spring loading for all Dock items defaults write com.apple.dock enable-spring-load-actions-on-all-items -bool true # Show indicator lights for open applications in the Dock defaults write com.apple.dock show-process-indicators -bool true # Wipe all (default) app icons from the Dock # This is only really useful when setting up a new Mac, or if you don’t use # the Dock to launch apps. #defaults write com.apple.dock persistent-apps -array # Show only open applications in the Dock #defaults write com.apple.dock static-only -bool true # Don’t animate opening applications from the Dock defaults write com.apple.dock launchanim -bool false # Speed up Mission Control animations defaults write com.apple.dock expose-animation-duration -float 0.1 # Don’t group windows by application in Mission Control # (i.e. use the old Exposé behavior instead) defaults write com.apple.dock expose-group-by-app -bool false # Disable Dashboard defaults write com.apple.dashboard mcx-disabled -bool true # Don’t show Dashboard as a Space defaults write com.apple.dock dashboard-in-overlay -bool true # Don’t automatically rearrange Spaces based on most recent use defaults write com.apple.dock mru-spaces -bool false # Remove the auto-hiding Dock delay defaults write com.apple.dock autohide-delay -float 0 # Remove the animation when hiding/showing the Dock defaults write com.apple.dock autohide-time-modifier -float 0 # Automatically hide and show the Dock defaults write com.apple.dock autohide -bool true # Make Dock icons of hidden applications translucent defaults write com.apple.dock showhidden -bool true # Don’t show recent applications in Dock defaults write com.apple.dock show-recents -bool false # Disable the Launchpad gesture (pinch with thumb and three fingers) #defaults write com.apple.dock showLaunchpadGestureEnabled -int 0 # Reset Launchpad, but keep the desktop wallpaper intact find "${HOME}/Library/Application Support/Dock" -name "*-*.db" -maxdepth 1 -delete # Add iOS & Watch Simulator to Launchpad sudo ln -sf "/Applications/Xcode.app/Contents/Developer/Applications/Simulator.app" "/Applications/Simulator.app" sudo ln -sf "/Applications/Xcode.app/Contents/Developer/Applications/Simulator (Watch).app" "/Applications/Simulator (Watch).app" # Add a spacer to the left side of the Dock (where the applications are) #defaults write com.apple.dock persistent-apps -array-add '{tile-data={}; tile-type="spacer-tile";}' # Add a spacer to the right side of the Dock (where the Trash is) #defaults write com.apple.dock persistent-others -array-add '{tile-data={}; tile-type="spacer-tile";}' # Hot corners # Possible values: # 0: no-op # 2: Mission Control # 3: Show application windows # 4: Desktop # 5: Start screen saver # 6: Disable screen saver # 7: Dashboard # 10: Put display to sleep # 11: Launchpad # 12: Notification Center # 13: Lock Screen # Top left screen corner → Mission Control defaults write com.apple.dock wvous-tl-corner -int 2 defaults write com.apple.dock wvous-tl-modifier -int 0 # Top right screen corner → Desktop defaults write com.apple.dock wvous-tr-corner -int 4 defaults write com.apple.dock wvous-tr-modifier -int 0 # Bottom left screen corner → Start screen saver defaults write com.apple.dock wvous-bl-corner -int 5 defaults write com.apple.dock wvous-bl-modifier -int 0 ############################################################################### # Safari & WebKit # ############################################################################### # Privacy: don’t send search queries to Apple defaults write com.apple.Safari UniversalSearchEnabled -bool false defaults write com.apple.Safari SuppressSearchSuggestions -bool true # Press Tab to highlight each item on a web page defaults write com.apple.Safari WebKitTabToLinksPreferenceKey -bool true defaults write com.apple.Safari com.apple.Safari.ContentPageGroupIdentifier.WebKit2TabsToLinks -bool true # Show the full URL in the address bar (note: this still hides the scheme) defaults write com.apple.Safari ShowFullURLInSmartSearchField -bool true # Set Safari’s home page to `about:blank` for faster loading defaults write com.apple.Safari HomePage -string "about:blank" # Prevent Safari from opening ‘safe’ files automatically after downloading defaults write com.apple.Safari AutoOpenSafeDownloads -bool false # Allow hitting the Backspace key to go to the previous page in history defaults write com.apple.Safari com.apple.Safari.ContentPageGroupIdentifier.WebKit2BackspaceKeyNavigationEnabled -bool true # Hide Safari’s bookmarks bar by default defaults write com.apple.Safari ShowFavoritesBar -bool false # Hide Safari’s sidebar in Top Sites defaults write com.apple.Safari ShowSidebarInTopSites -bool false # Disable Safari’s thumbnail cache for History and Top Sites defaults write com.apple.Safari DebugSnapshotsUpdatePolicy -int 2 # Enable Safari’s debug menu defaults write com.apple.Safari IncludeInternalDebugMenu -bool true # Make Safari’s search banners default to Contains instead of Starts With defaults write com.apple.Safari FindOnPageMatchesWordStartsOnly -bool false # Remove useless icons from Safari’s bookmarks bar defaults write com.apple.Safari ProxiesInBookmarksBar "()" # Enable the Develop menu and the Web Inspector in Safari defaults write com.apple.Safari IncludeDevelopMenu -bool true defaults write com.apple.Safari WebKitDeveloperExtrasEnabledPreferenceKey -bool true defaults write com.apple.Safari com.apple.Safari.ContentPageGroupIdentifier.WebKit2DeveloperExtrasEnabled -bool true # Add a context menu item for showing the Web Inspector in web views defaults write NSGlobalDomain WebKitDeveloperExtras -bool true # Enable continuous spellchecking defaults write com.apple.Safari WebContinuousSpellCheckingEnabled -bool true # Disable auto-correct defaults write com.apple.Safari WebAutomaticSpellingCorrectionEnabled -bool false # Disable AutoFill defaults write com.apple.Safari AutoFillFromAddressBook -bool false defaults write com.apple.Safari AutoFillPasswords -bool false defaults write com.apple.Safari AutoFillCreditCardData -bool false defaults write com.apple.Safari AutoFillMiscellaneousForms -bool false # Warn about fraudulent websites defaults write com.apple.Safari WarnAboutFraudulentWebsites -bool true # Disable plug-ins defaults write com.apple.Safari WebKitPluginsEnabled -bool false defaults write com.apple.Safari com.apple.Safari.ContentPageGroupIdentifier.WebKit2PluginsEnabled -bool false # Disable Java defaults write com.apple.Safari WebKitJavaEnabled -bool false defaults write com.apple.Safari com.apple.Safari.ContentPageGroupIdentifier.WebKit2JavaEnabled -bool false defaults write com.apple.Safari com.apple.Safari.ContentPageGroupIdentifier.WebKit2JavaEnabledForLocalFiles -bool false # Block pop-up windows defaults write com.apple.Safari WebKitJavaScriptCanOpenWindowsAutomatically -bool false defaults write com.apple.Safari com.apple.Safari.ContentPageGroupIdentifier.WebKit2JavaScriptCanOpenWindowsAutomatically -bool false # Disable auto-playing video #defaults write com.apple.Safari WebKitMediaPlaybackAllowsInline -bool false #defaults write com.apple.SafariTechnologyPreview WebKitMediaPlaybackAllowsInline -bool false #defaults write com.apple.Safari com.apple.Safari.ContentPageGroupIdentifier.WebKit2AllowsInlineMediaPlayback -bool false #defaults write com.apple.SafariTechnologyPreview com.apple.Safari.ContentPageGroupIdentifier.WebKit2AllowsInlineMediaPlayback -bool false # Enable “Do Not Track” defaults write com.apple.Safari SendDoNotTrackHTTPHeader -bool true # Update extensions automatically defaults write com.apple.Safari InstallExtensionUpdatesAutomatically -bool true ############################################################################### # Mail # ############################################################################### # Disable send and reply animations in Mail.app defaults write com.apple.mail DisableReplyAnimations -bool true defaults write com.apple.mail DisableSendAnimations -bool true # Copy email addresses as `foo@example.com` instead of `Foo Bar ` in Mail.app defaults write com.apple.mail AddressesIncludeNameOnPasteboard -bool false # Add the keyboard shortcut ⌘ + Enter to send an email in Mail.app defaults write com.apple.mail NSUserKeyEquivalents -dict-add "Send" "@\U21a9" # Display emails in threaded mode, sorted by date (oldest at the top) defaults write com.apple.mail DraftsViewerAttributes -dict-add "DisplayInThreadedMode" -string "yes" defaults write com.apple.mail DraftsViewerAttributes -dict-add "SortedDescending" -string "yes" defaults write com.apple.mail DraftsViewerAttributes -dict-add "SortOrder" -string "received-date" # Disable inline attachments (just show the icons) defaults write com.apple.mail DisableInlineAttachmentViewing -bool true # Disable automatic spell checking defaults write com.apple.mail SpellCheckingBehavior -string "NoSpellCheckingEnabled" ############################################################################### # Spotlight # ############################################################################### # Hide Spotlight tray-icon (and subsequent helper) #sudo chmod 600 /System/Library/CoreServices/Search.bundle/Contents/MacOS/Search # Disable Spotlight indexing for any volume that gets mounted and has not yet # been indexed before. # Use `sudo mdutil -i off "/Volumes/foo"` to stop indexing any volume. sudo defaults write /.Spotlight-V100/VolumeConfiguration Exclusions -array "/Volumes" # Change indexing order and disable some search results # Yosemite-specific search results (remove them if you are using macOS 10.9 or older): # MENU_DEFINITION # MENU_CONVERSION # MENU_EXPRESSION # MENU_SPOTLIGHT_SUGGESTIONS (send search queries to Apple) # MENU_WEBSEARCH (send search queries to Apple) # MENU_OTHER defaults write com.apple.spotlight orderedItems -array \ '{"enabled" = 1;"name" = "APPLICATIONS";}' \ '{"enabled" = 1;"name" = "SYSTEM_PREFS";}' \ '{"enabled" = 1;"name" = "DIRECTORIES";}' \ '{"enabled" = 1;"name" = "PDF";}' \ '{"enabled" = 1;"name" = "FONTS";}' \ '{"enabled" = 0;"name" = "DOCUMENTS";}' \ '{"enabled" = 0;"name" = "MESSAGES";}' \ '{"enabled" = 0;"name" = "CONTACT";}' \ '{"enabled" = 0;"name" = "EVENT_TODO";}' \ '{"enabled" = 0;"name" = "IMAGES";}' \ '{"enabled" = 0;"name" = "BOOKMARKS";}' \ '{"enabled" = 0;"name" = "MUSIC";}' \ '{"enabled" = 0;"name" = "MOVIES";}' \ '{"enabled" = 0;"name" = "PRESENTATIONS";}' \ '{"enabled" = 0;"name" = "SPREADSHEETS";}' \ '{"enabled" = 0;"name" = "SOURCE";}' \ '{"enabled" = 0;"name" = "MENU_DEFINITION";}' \ '{"enabled" = 0;"name" = "MENU_OTHER";}' \ '{"enabled" = 0;"name" = "MENU_CONVERSION";}' \ '{"enabled" = 0;"name" = "MENU_EXPRESSION";}' \ '{"enabled" = 0;"name" = "MENU_WEBSEARCH";}' \ '{"enabled" = 0;"name" = "MENU_SPOTLIGHT_SUGGESTIONS";}' # Load new settings before rebuilding the index killall mds > /dev/null 2>&1 # Make sure indexing is enabled for the main volume sudo mdutil -i on / > /dev/null # Rebuild the index from scratch sudo mdutil -E / > /dev/null ############################################################################### # Terminal & iTerm 2 # ############################################################################### # Only use UTF-8 in Terminal.app defaults write com.apple.terminal StringEncodings -array 4 # Use a modified version of the Solarized Dark theme by default in Terminal.app osascript < /dev/null && sudo tmutil disablelocal ############################################################################### # Activity Monitor # ############################################################################### # Show the main window when launching Activity Monitor defaults write com.apple.ActivityMonitor OpenMainWindow -bool true # Visualize CPU usage in the Activity Monitor Dock icon defaults write com.apple.ActivityMonitor IconType -int 5 # Show all processes in Activity Monitor defaults write com.apple.ActivityMonitor ShowCategory -int 0 # Sort Activity Monitor results by CPU usage defaults write com.apple.ActivityMonitor SortColumn -string "CPUUsage" defaults write com.apple.ActivityMonitor SortDirection -int 0 ############################################################################### # Address Book, Dashboard, iCal, TextEdit, and Disk Utility # ############################################################################### # Enable the debug menu in Address Book defaults write com.apple.addressbook ABShowDebugMenu -bool true # Enable Dashboard dev mode (allows keeping widgets on the desktop) defaults write com.apple.dashboard devmode -bool true # Enable the debug menu in iCal (pre-10.8) defaults write com.apple.iCal IncludeDebugMenu -bool true # Use plain text mode for new TextEdit documents defaults write com.apple.TextEdit RichText -int 0 # Open and save files as UTF-8 in TextEdit defaults write com.apple.TextEdit PlainTextEncoding -int 4 defaults write com.apple.TextEdit PlainTextEncodingForWrite -int 4 # Enable the debug menu in Disk Utility defaults write com.apple.DiskUtility DUDebugMenuEnabled -bool true defaults write com.apple.DiskUtility advanced-image-options -bool true # Auto-play videos when opened with QuickTime Player defaults write com.apple.QuickTimePlayerX MGPlayMovieOnOpen -bool true ############################################################################### # Mac App Store # ############################################################################### # Enable the WebKit Developer Tools in the Mac App Store defaults write com.apple.appstore WebKitDeveloperExtras -bool true # Enable Debug Menu in the Mac App Store defaults write com.apple.appstore ShowDebugMenu -bool true # Enable the automatic update check defaults write com.apple.SoftwareUpdate AutomaticCheckEnabled -bool true # Check for software updates daily, not just once per week defaults write com.apple.SoftwareUpdate ScheduleFrequency -int 1 # Download newly available updates in background defaults write com.apple.SoftwareUpdate AutomaticDownload -int 1 # Install System data files & security updates defaults write com.apple.SoftwareUpdate CriticalUpdateInstall -int 1 # Automatically download apps purchased on other Macs defaults write com.apple.SoftwareUpdate ConfigDataInstall -int 1 # Turn on app auto-update defaults write com.apple.commerce AutoUpdate -bool true # Allow the App Store to reboot machine on macOS updates defaults write com.apple.commerce AutoUpdateRestartRequired -bool true ############################################################################### # Photos # ############################################################################### # Prevent Photos from opening automatically when devices are plugged in defaults -currentHost write com.apple.ImageCapture disableHotPlug -bool true ############################################################################### # Messages # ############################################################################### # Disable automatic emoji substitution (i.e. use plain text smileys) defaults write com.apple.messageshelper.MessageController SOInputLineSettings -dict-add "automaticEmojiSubstitutionEnablediMessage" -bool false # Disable smart quotes as it’s annoying for messages that contain code defaults write com.apple.messageshelper.MessageController SOInputLineSettings -dict-add "automaticQuoteSubstitutionEnabled" -bool false # Disable continuous spell checking defaults write com.apple.messageshelper.MessageController SOInputLineSettings -dict-add "continuousSpellCheckingEnabled" -bool false ############################################################################### # Google Chrome & Google Chrome Canary # ############################################################################### # Disable the all too sensitive backswipe on trackpads defaults write com.google.Chrome AppleEnableSwipeNavigateWithScrolls -bool false defaults write com.google.Chrome.canary AppleEnableSwipeNavigateWithScrolls -bool false # Disable the all too sensitive backswipe on Magic Mouse defaults write com.google.Chrome AppleEnableMouseSwipeNavigateWithScrolls -bool false defaults write com.google.Chrome.canary AppleEnableMouseSwipeNavigateWithScrolls -bool false # Use the system-native print preview dialog defaults write com.google.Chrome DisablePrintPreview -bool true defaults write com.google.Chrome.canary DisablePrintPreview -bool true # Expand the print dialog by default defaults write com.google.Chrome PMPrintingExpandedStateForPrint2 -bool true defaults write com.google.Chrome.canary PMPrintingExpandedStateForPrint2 -bool true ############################################################################### # GPGMail 2 # ############################################################################### # Disable signing emails by default defaults write ~/Library/Preferences/org.gpgtools.gpgmail SignNewEmailsByDefault -bool false ############################################################################### # Opera & Opera Developer # ############################################################################### # Expand the print dialog by default defaults write com.operasoftware.Opera PMPrintingExpandedStateForPrint2 -boolean true defaults write com.operasoftware.OperaDeveloper PMPrintingExpandedStateForPrint2 -boolean true ############################################################################### # SizeUp.app # ############################################################################### # Start SizeUp at login defaults write com.irradiatedsoftware.SizeUp StartAtLogin -bool true # Don’t show the preferences window on next start defaults write com.irradiatedsoftware.SizeUp ShowPrefsOnNextStart -bool false ############################################################################### # Sublime Text # ############################################################################### # Install Sublime Text settings cp -r init/Preferences.sublime-settings ~/Library/Application\ Support/Sublime\ Text*/Packages/User/Preferences.sublime-settings 2> /dev/null ############################################################################### # Spectacle.app # ############################################################################### # Set up my preferred keyboard shortcuts cp -r init/spectacle.json ~/Library/Application\ Support/Spectacle/Shortcuts.json 2> /dev/null ############################################################################### # Transmission.app # ############################################################################### # Use `~/Documents/Torrents` to store incomplete downloads defaults write org.m0k.transmission UseIncompleteDownloadFolder -bool true defaults write org.m0k.transmission IncompleteDownloadFolder -string "${HOME}/Documents/Torrents" # Use `~/Downloads` to store completed downloads defaults write org.m0k.transmission DownloadLocationConstant -bool true # Don’t prompt for confirmation before downloading defaults write org.m0k.transmission DownloadAsk -bool false defaults write org.m0k.transmission MagnetOpenAsk -bool false # Don’t prompt for confirmation before removing non-downloading active transfers defaults write org.m0k.transmission CheckRemoveDownloading -bool true # Trash original torrent files defaults write org.m0k.transmission DeleteOriginalTorrent -bool true # Hide the donate message defaults write org.m0k.transmission WarningDonate -bool false # Hide the legal disclaimer defaults write org.m0k.transmission WarningLegal -bool false # IP block list. # Source: https://giuliomac.wordpress.com/2014/02/19/best-blocklist-for-transmission/ defaults write org.m0k.transmission BlocklistNew -bool true defaults write org.m0k.transmission BlocklistURL -string "http://john.bitsurge.net/public/biglist.p2p.gz" defaults write org.m0k.transmission BlocklistAutoUpdate -bool true # Randomize port on launch defaults write org.m0k.transmission RandomPort -bool true ############################################################################### # Twitter.app # ############################################################################### # Disable smart quotes as it’s annoying for code tweets defaults write com.twitter.twitter-mac AutomaticQuoteSubstitutionEnabled -bool false # Show the app window when clicking the menu bar icon defaults write com.twitter.twitter-mac MenuItemBehavior -int 1 # Enable the hidden ‘Develop’ menu defaults write com.twitter.twitter-mac ShowDevelopMenu -bool true # Open links in the background defaults write com.twitter.twitter-mac openLinksInBackground -bool true # Allow closing the ‘new tweet’ window by pressing `Esc` defaults write com.twitter.twitter-mac ESCClosesComposeWindow -bool true # Show full names rather than Twitter handles defaults write com.twitter.twitter-mac ShowFullNames -bool true # Hide the app in the background if it’s not the front-most window defaults write com.twitter.twitter-mac HideInBackground -bool true ############################################################################### # Tweetbot.app # ############################################################################### # Bypass the annoyingly slow t.co URL shortener defaults write com.tapbots.TweetbotMac OpenURLsDirectly -bool true ############################################################################### # Kill affected applications # ############################################################################### for app in "Activity Monitor" \ "Address Book" \ "Calendar" \ "cfprefsd" \ "Contacts" \ "Dock" \ "Finder" \ "Google Chrome Canary" \ "Google Chrome" \ "Mail" \ "Messages" \ "Opera" \ "Photos" \ "Safari" \ "SizeUp" \ "Spectacle" \ "SystemUIServer" \ "Terminal" \ "Transmission" \ "Tweetbot" \ "Twitter" \ "iCal"; do killall "${app}" &> /dev/null done echo "Done. Note that some of these changes require a logout/restart to take effect." ================================================ FILE: .osx ================================================ # 301 https://github.com/mathiasbynens/dotfiles/blob/main/.macos ================================================ FILE: .screenrc ================================================ # Disable the startup message startup_message off # Set a large scrollback buffer defscrollback 32000 # Always start `screen` with UTF-8 enabled (`screen -U`) defutf8 on ================================================ FILE: .tmux.conf ================================================ # Use Ctrl+A as the prefix key set -g prefix C-a unbind C-b bind C-a send-prefix # Use Vim shortcuts setw -g mode-keys vi # Make `Ctrl+A R` reload the config file unbind r bind r source-file ~/.tmux.conf ================================================ FILE: .vim/backups/.gitkeep ================================================ ================================================ FILE: .vim/colors/solarized.vim ================================================ " Name: Solarized vim colorscheme " Author: Ethan Schoonover " URL: http://ethanschoonover.com/solarized " (see this url for latest release & screenshots) " License: OSI approved MIT license (see end of this file) " Created: In the middle of the night " Modified: 2011 Apr 14 " " Usage "{{{ " " --------------------------------------------------------------------- " ABOUT: " --------------------------------------------------------------------- " Solarized is a carefully designed selective contrast colorscheme with dual " light and dark modes that runs in both GUI, 256 and 16 color modes. " " See the homepage above for screenshots and details. " " --------------------------------------------------------------------- " INSTALLATION: " --------------------------------------------------------------------- " " Two options for installation: manual or pathogen " " MANUAL INSTALLATION OPTION: " --------------------------------------------------------------------- " " 1. Put the files in the right place! " 2. Move `solarized.vim` to your `.vim/colors` directory. " " RECOMMENDED PATHOGEN INSTALLATION OPTION: " --------------------------------------------------------------------- " " 1. Download and install Tim Pope's Pathogen from: " https://github.com/tpope/vim-pathogen " " 2. Next, move or clone the `vim-colors-solarized` directory so that it is " a subdirectory of the `.vim/bundle` directory. " " a. **clone with git:** " " $ cd ~/.vim/bundle " $ git clone git://github.com/altercation/vim-colors-solarized.git " " b. **or move manually into the pathogen bundle directory:** " In the parent directory of vim-colors-solarized: " " $ mv vim-colors-solarized ~/.vim/bundle/ " " MODIFY VIMRC: " " After either Option 1 or Option 2 above, put the following two lines in your " .vimrc: " " syntax enable " set background=dark " colorscheme solarized " " or, for the light background mode of Solarized: " " syntax enable " set background=light " colorscheme solarized " " I like to have a different background in GUI and terminal modes, so I can use " the following if-then. However, I find vim's background autodetection to be " pretty good and, at least with MacVim, I can leave this background value " assignment out entirely and get the same results. " " if has('gui_running') " set background=light " else " set background=dark " endif " " See the Solarized homepage at http://ethanschoonover.com/solarized for " screenshots which will help you select either the light or dark background. " " Other options are detailed below. " " IMPORTANT NOTE FOR TERMINAL USERS: " " If you are going to use Solarized in Terminal mode (i.e. not in a GUI version " like gvim or macvim), **please please please** consider setting your terminal " emulator's colorscheme to used the Solarized palette. I've included palettes " for some popular terminal emulator as well as Xdefaults in the official " Solarized download available from [Solarized homepage]. If you use " Solarized *without* these colors, Solarized will need to be told to degrade " its colorscheme to a set compatible with the limited 256 terminal palette " (whereas by using the terminal's 16 ansi color values, you can set the " correct, specific values for the Solarized palette). " " If you do use the custom terminal colors, solarized.vim should work out of " the box for you. If you are using a terminal emulator that supports 256 " colors and don't want to use the custom Solarized terminal colors, you will " need to use the degraded 256 colorscheme. To do so, simply add the following " line *before* the `colorschem solarized` line: " " let g:solarized_termcolors=256 " " Again, I recommend just changing your terminal colors to Solarized values " either manually or via one of the many terminal schemes available for import. " " --------------------------------------------------------------------- " TOGGLE BACKGROUND FUNCTION: " --------------------------------------------------------------------- " " Solarized comes with a Toggle Background plugin that by default will map to " if that mapping is available. If it is not available you will need to " either map the function manually or change your current mapping to " something else. If you wish to map the function manually, enter the following " lines in your .vimrc: " " nmap ToggleBackground " imap ToggleBackground " vmap ToggleBackground " " Note that it is important to *not* use the noremap map variants. The plugin " uses noremap internally. You may run `:help togglebg` for more information. " " --------------------------------------------------------------------- " OPTIONS " --------------------------------------------------------------------- " " Set these in your vimrc file prior to calling the colorscheme. " " option name default optional " ------------------------------------------------ " g:solarized_termcolors= 16 | 256 " g:solarized_termtrans = 0 | 1 " g:solarized_degrade = 0 | 1 " g:solarized_bold = 1 | 0 " g:solarized_underline = 1 | 0 " g:solarized_italic = 1 | 0 " g:solarized_contrast = "normal"| "high" or "low" " g:solarized_visibility= "normal"| "high" or "low" " ------------------------------------------------ " " OPTION DETAILS " " ------------------------------------------------ " g:solarized_termcolors= 256 | 16 " ------------------------------------------------ " The most important option if you are using vim in terminal (non gui) mode! " This tells Solarized to use the 256 degraded color mode if running in a 256 " color capable terminal. Otherwise, if set to `16` it will use the terminal " emulators colorscheme (best option as long as you've set the emulators colors " to the Solarized palette). " " If you are going to use Solarized in Terminal mode (i.e. not in a GUI " version like gvim or macvim), **please please please** consider setting your " terminal emulator's colorscheme to used the Solarized palette. I've included " palettes for some popular terminal emulator as well as Xdefaults in the " official Solarized download available from: " http://ethanschoonover.com/solarized . If you use Solarized without these " colors, Solarized will by default use an approximate set of 256 colors. It " isn't bad looking and has been extensively tweaked, but it's still not quite " the real thing. " " ------------------------------------------------ " g:solarized_termtrans = 0 | 1 " ------------------------------------------------ " If you use a terminal emulator with a transparent background and Solarized " isn't displaying the background color transparently, set this to 1 and " Solarized will use the default (transparent) background of the terminal " emulator. *urxvt* required this in my testing; iTerm2 did not. " " Note that on Mac OS X Terminal.app, solarized_termtrans is set to 1 by " default as this is almost always the best option. The only exception to this " is if the working terminfo file supports 256 colors (xterm-256color). " " ------------------------------------------------ " g:solarized_degrade = 0 | 1 " ------------------------------------------------ " For test purposes only; forces Solarized to use the 256 degraded color mode " to test the approximate color values for accuracy. " " ------------------------------------------------ " g:solarized_bold = 1 | 0 " ------------------------------------------------ " ------------------------------------------------ " g:solarized_underline = 1 | 0 " ------------------------------------------------ " ------------------------------------------------ " g:solarized_italic = 1 | 0 " ------------------------------------------------ " If you wish to stop Solarized from displaying bold, underlined or " italicized typefaces, simply assign a zero value to the appropriate " variable, for example: `let g:solarized_italic=0` " " ------------------------------------------------ " g:solarized_contrast = "normal"| "high" or "low" " ------------------------------------------------ " Stick with normal! It's been carefully tested. Setting this option to high " or low does use the same Solarized palette but simply shifts some values up " or down in order to expand or compress the tonal range displayed. " " ------------------------------------------------ " g:solarized_visibility = "normal"| "high" or "low" " ------------------------------------------------ " Special characters such as trailing whitespace, tabs, newlines, when " displayed using ":set list" can be set to one of three levels depending on " your needs. " " --------------------------------------------------------------------- " COLOR VALUES " --------------------------------------------------------------------- " Download palettes and files from: http://ethanschoonover.com/solarized " " L\*a\*b values are canonical (White D65, Reference D50), other values are " matched in sRGB space. " " SOLARIZED HEX 16/8 TERMCOL XTERM/HEX L*A*B sRGB HSB " --------- ------- ---- ------- ----------- ---------- ----------- ----------- " base03 #002b36 8/4 brblack 234 #1c1c1c 15 -12 -12 0 43 54 193 100 21 " base02 #073642 0/4 black 235 #262626 20 -12 -12 7 54 66 192 90 26 " base01 #586e75 10/7 brgreen 240 #4e4e4e 45 -07 -07 88 110 117 194 25 46 " base00 #657b83 11/7 bryellow 241 #585858 50 -07 -07 101 123 131 195 23 51 " base0 #839496 12/6 brblue 244 #808080 60 -06 -03 131 148 150 186 13 59 " base1 #93a1a1 14/4 brcyan 245 #8a8a8a 65 -05 -02 147 161 161 180 9 63 " base2 #eee8d5 7/7 white 254 #d7d7af 92 -00 10 238 232 213 44 11 93 " base3 #fdf6e3 15/7 brwhite 230 #ffffd7 97 00 10 253 246 227 44 10 99 " yellow #b58900 3/3 yellow 136 #af8700 60 10 65 181 137 0 45 100 71 " orange #cb4b16 9/3 brred 166 #d75f00 50 50 55 203 75 22 18 89 80 " red #dc322f 1/1 red 160 #d70000 50 65 45 220 50 47 1 79 86 " magenta #d33682 5/5 magenta 125 #af005f 50 65 -05 211 54 130 331 74 83 " violet #6c71c4 13/5 brmagenta 61 #5f5faf 50 15 -45 108 113 196 237 45 77 " blue #268bd2 4/4 blue 33 #0087ff 55 -10 -45 38 139 210 205 82 82 " cyan #2aa198 6/6 cyan 37 #00afaf 60 -35 -05 42 161 152 175 74 63 " green #859900 2/2 green 64 #5f8700 60 -20 65 133 153 0 68 100 60 " " --------------------------------------------------------------------- " COLORSCHEME HACKING " --------------------------------------------------------------------- " " Useful commands for testing colorschemes: " :source $VIMRUNTIME/syntax/hitest.vim " :help highlight-groups " :help cterm-colors " :help group-name " " Useful links for developing colorschemes: " http://www.vim.org/scripts/script.php?script_id=2937 " http://vimcasts.org/episodes/creating-colorschemes-for-vim/ " http://www.frexx.de/xterm-256-notes/" " " " }}} " Default option values"{{{ " --------------------------------------------------------------------- if !exists("g:solarized_termtrans") if ($TERM_PROGRAM ==? "apple_terminal" && &t_Co < 256) let g:solarized_termtrans = 1 else let g:solarized_termtrans = 0 endif endif if !exists("g:solarized_degrade") let g:solarized_degrade = 0 endif if !exists("g:solarized_bold") let g:solarized_bold = 1 endif if !exists("g:solarized_underline") let g:solarized_underline = 1 endif if !exists("g:solarized_italic") let g:solarized_italic = 1 endif if !exists("g:solarized_termcolors") let g:solarized_termcolors = 16 endif if !exists("g:solarized_contrast") let g:solarized_contrast = "normal" endif if !exists("g:solarized_visibility") let g:solarized_visibility = "normal" endif "}}} " Colorscheme initialization "{{{ " --------------------------------------------------------------------- hi clear if exists("syntax_on") syntax reset endif let colors_name = "solarized" "}}} " GUI & CSApprox hexadecimal palettes"{{{ " --------------------------------------------------------------------- " " Set both gui and terminal color values in separate conditional statements " Due to possibility that CSApprox is running (though I suppose we could just " leave the hex values out entirely in that case and include only cterm colors) " We also check to see if user has set solarized (force use of the " neutral gray monotone palette component) if (has("gui_running") && g:solarized_degrade == 0) let s:vmode = "gui" let s:base03 = "#002b36" let s:base02 = "#073642" let s:base01 = "#586e75" let s:base00 = "#657b83" let s:base0 = "#839496" let s:base1 = "#93a1a1" let s:base2 = "#eee8d5" let s:base3 = "#fdf6e3" let s:yellow = "#b58900" let s:orange = "#cb4b16" let s:red = "#dc322f" let s:magenta = "#d33682" let s:violet = "#6c71c4" let s:blue = "#268bd2" let s:cyan = "#2aa198" let s:green = "#859900" elseif (has("gui_running") && g:solarized_degrade == 1) " These colors are identical to the 256 color mode. They may be viewed " while in gui mode via "let g:solarized_degrade=1", though this is not " recommened and is for testing only. let s:vmode = "gui" let s:base03 = "#1c1c1c" let s:base02 = "#262626" let s:base01 = "#4e4e4e" let s:base00 = "#585858" let s:base0 = "#808080" let s:base1 = "#8a8a8a" let s:base2 = "#d7d7af" let s:base3 = "#ffffd7" let s:yellow = "#af8700" let s:orange = "#d75f00" let s:red = "#af0000" let s:magenta = "#af005f" let s:violet = "#5f5faf" let s:blue = "#0087ff" let s:cyan = "#00afaf" let s:green = "#5f8700" elseif g:solarized_termcolors != 256 && &t_Co >= 16 let s:vmode = "cterm" let s:base03 = "8" let s:base02 = "0" let s:base01 = "10" let s:base00 = "11" let s:base0 = "12" let s:base1 = "14" let s:base2 = "7" let s:base3 = "15" let s:yellow = "3" let s:orange = "9" let s:red = "1" let s:magenta = "5" let s:violet = "13" let s:blue = "4" let s:cyan = "6" let s:green = "2" elseif g:solarized_termcolors == 256 let s:vmode = "cterm" let s:base03 = "234" let s:base02 = "235" let s:base01 = "239" let s:base00 = "240" let s:base0 = "244" let s:base1 = "245" let s:base2 = "187" let s:base3 = "230" let s:yellow = "136" let s:orange = "166" let s:red = "124" let s:magenta = "125" let s:violet = "61" let s:blue = "33" let s:cyan = "37" let s:green = "64" else let s:vmode = "cterm" let s:bright = "* term=bold cterm=bold" let s:base03 = "0".s:bright let s:base02 = "0" let s:base01 = "2".s:bright let s:base00 = "3".s:bright let s:base0 = "4".s:bright let s:base1 = "6".s:bright let s:base2 = "7" let s:base3 = "7".s:bright let s:yellow = "3" let s:orange = "1".s:bright let s:red = "1" let s:magenta = "5" let s:violet = "13" let s:blue = "4" let s:cyan = "6" let s:green = "2" endif "}}} " Formatting options and null values for passthrough effect "{{{ " --------------------------------------------------------------------- let s:none = "NONE" let s:none = "NONE" let s:t_none = "NONE" let s:n = "NONE" let s:c = ",undercurl" let s:r = ",reverse" let s:s = ",standout" let s:ou = "" let s:ob = "" "}}} " Background value based on termtrans setting "{{{ " --------------------------------------------------------------------- if (has("gui_running") || g:solarized_termtrans == 0) let s:back = s:base03 else let s:back = "NONE" endif "}}} " Alternate light scheme "{{{ " --------------------------------------------------------------------- if &background == "light" let s:temp03 = s:base03 let s:temp02 = s:base02 let s:temp01 = s:base01 let s:temp00 = s:base00 let s:base03 = s:base3 let s:base02 = s:base2 let s:base01 = s:base1 let s:base00 = s:base0 let s:base0 = s:temp00 let s:base1 = s:temp01 let s:base2 = s:temp02 let s:base3 = s:temp03 if (s:back != "NONE") let s:back = s:base03 endif endif "}}} " Optional contrast schemes "{{{ " --------------------------------------------------------------------- if g:solarized_contrast == "high" let s:base01 = s:base00 let s:base00 = s:base0 let s:base0 = s:base1 let s:base1 = s:base2 let s:base2 = s:base3 let s:back = s:back endif if g:solarized_contrast == "low" let s:back = s:base02 let s:ou = ",underline" endif "}}} " Overrides dependent on user specified values"{{{ " --------------------------------------------------------------------- if g:solarized_bold == 1 let s:b = ",bold" else let s:b = "" endif if g:solarized_underline == 1 let s:u = ",underline" else let s:u = "" endif if g:solarized_italic == 1 let s:i = ",italic" else let s:i = "" endif "}}} " Highlighting primitives"{{{ " --------------------------------------------------------------------- exe "let s:bg_none = ' ".s:vmode."bg=".s:none ."'" exe "let s:bg_back = ' ".s:vmode."bg=".s:back ."'" exe "let s:bg_base03 = ' ".s:vmode."bg=".s:base03 ."'" exe "let s:bg_base02 = ' ".s:vmode."bg=".s:base02 ."'" exe "let s:bg_base01 = ' ".s:vmode."bg=".s:base01 ."'" exe "let s:bg_base00 = ' ".s:vmode."bg=".s:base00 ."'" exe "let s:bg_base0 = ' ".s:vmode."bg=".s:base0 ."'" exe "let s:bg_base1 = ' ".s:vmode."bg=".s:base1 ."'" exe "let s:bg_base2 = ' ".s:vmode."bg=".s:base2 ."'" exe "let s:bg_base3 = ' ".s:vmode."bg=".s:base3 ."'" exe "let s:bg_green = ' ".s:vmode."bg=".s:green ."'" exe "let s:bg_yellow = ' ".s:vmode."bg=".s:yellow ."'" exe "let s:bg_orange = ' ".s:vmode."bg=".s:orange ."'" exe "let s:bg_red = ' ".s:vmode."bg=".s:red ."'" exe "let s:bg_magenta = ' ".s:vmode."bg=".s:magenta."'" exe "let s:bg_violet = ' ".s:vmode."bg=".s:violet ."'" exe "let s:bg_blue = ' ".s:vmode."bg=".s:blue ."'" exe "let s:bg_cyan = ' ".s:vmode."bg=".s:cyan ."'" exe "let s:fg_none = ' ".s:vmode."fg=".s:none ."'" exe "let s:fg_back = ' ".s:vmode."fg=".s:back ."'" exe "let s:fg_base03 = ' ".s:vmode."fg=".s:base03 ."'" exe "let s:fg_base02 = ' ".s:vmode."fg=".s:base02 ."'" exe "let s:fg_base01 = ' ".s:vmode."fg=".s:base01 ."'" exe "let s:fg_base00 = ' ".s:vmode."fg=".s:base00 ."'" exe "let s:fg_base0 = ' ".s:vmode."fg=".s:base0 ."'" exe "let s:fg_base1 = ' ".s:vmode."fg=".s:base1 ."'" exe "let s:fg_base2 = ' ".s:vmode."fg=".s:base2 ."'" exe "let s:fg_base3 = ' ".s:vmode."fg=".s:base3 ."'" exe "let s:fg_green = ' ".s:vmode."fg=".s:green ."'" exe "let s:fg_yellow = ' ".s:vmode."fg=".s:yellow ."'" exe "let s:fg_orange = ' ".s:vmode."fg=".s:orange ."'" exe "let s:fg_red = ' ".s:vmode."fg=".s:red ."'" exe "let s:fg_magenta = ' ".s:vmode."fg=".s:magenta."'" exe "let s:fg_violet = ' ".s:vmode."fg=".s:violet ."'" exe "let s:fg_blue = ' ".s:vmode."fg=".s:blue ."'" exe "let s:fg_cyan = ' ".s:vmode."fg=".s:cyan ."'" exe "let s:fmt_none = ' ".s:vmode."=NONE". " term=NONE". "'" exe "let s:fmt_bold = ' ".s:vmode."=NONE".s:b. " term=NONE".s:b."'" exe "let s:fmt_bldi = ' ".s:vmode."=NONE".s:b. " term=NONE".s:b."'" exe "let s:fmt_undr = ' ".s:vmode."=NONE".s:u. " term=NONE".s:u."'" exe "let s:fmt_undb = ' ".s:vmode."=NONE".s:u.s:b. " term=NONE".s:u.s:b."'" exe "let s:fmt_undi = ' ".s:vmode."=NONE".s:u. " term=NONE".s:u."'" exe "let s:fmt_uopt = ' ".s:vmode."=NONE".s:ou. " term=NONE".s:ou."'" exe "let s:fmt_curl = ' ".s:vmode."=NONE".s:c. " term=NONE".s:c."'" exe "let s:fmt_ital = ' ".s:vmode."=NONE". " term=NONE". "'" exe "let s:fmt_revr = ' ".s:vmode."=NONE".s:r. " term=NONE".s:r."'" exe "let s:fmt_stnd = ' ".s:vmode."=NONE".s:s. " term=NONE".s:s."'" if has("gui_running") exe "let s:sp_none = ' guisp=".s:none ."'" exe "let s:sp_back = ' guisp=".s:back ."'" exe "let s:sp_base03 = ' guisp=".s:base03 ."'" exe "let s:sp_base02 = ' guisp=".s:base02 ."'" exe "let s:sp_base01 = ' guisp=".s:base01 ."'" exe "let s:sp_base00 = ' guisp=".s:base00 ."'" exe "let s:sp_base0 = ' guisp=".s:base0 ."'" exe "let s:sp_base1 = ' guisp=".s:base1 ."'" exe "let s:sp_base2 = ' guisp=".s:base2 ."'" exe "let s:sp_base3 = ' guisp=".s:base3 ."'" exe "let s:sp_green = ' guisp=".s:green ."'" exe "let s:sp_yellow = ' guisp=".s:yellow ."'" exe "let s:sp_orange = ' guisp=".s:orange ."'" exe "let s:sp_red = ' guisp=".s:red ."'" exe "let s:sp_magenta = ' guisp=".s:magenta."'" exe "let s:sp_violet = ' guisp=".s:violet ."'" exe "let s:sp_blue = ' guisp=".s:blue ."'" exe "let s:sp_cyan = ' guisp=".s:cyan ."'" else let s:sp_none = "" let s:sp_back = "" let s:sp_base03 = "" let s:sp_base02 = "" let s:sp_base01 = "" let s:sp_base00 = "" let s:sp_base0 = "" let s:sp_base1 = "" let s:sp_base2 = "" let s:sp_base3 = "" let s:sp_green = "" let s:sp_yellow = "" let s:sp_orange = "" let s:sp_red = "" let s:sp_magenta = "" let s:sp_violet = "" let s:sp_blue = "" let s:sp_cyan = "" endif "}}} " Basic highlighting"{{{ " --------------------------------------------------------------------- " note that link syntax to avoid duplicate configuration doesn't work with the " exe compiled formats exe "hi! Normal" .s:fmt_none .s:fg_base0 .s:bg_back exe "hi! Comment" .s:fmt_ital .s:fg_base01 .s:bg_none " *Comment any comment exe "hi! Constant" .s:fmt_none .s:fg_cyan .s:bg_none " *Constant any constant " String a string constant: "this is a string" " Character a character constant: 'c', '\n' " Number a number constant: 234, 0xff " Boolean a boolean constant: TRUE, false " Float a floating point constant: 2.3e10 exe "hi! Identifier" .s:fmt_none .s:fg_blue .s:bg_none " *Identifier any variable name " Function function name (also: methods for classes) " exe "hi! Statement" .s:fmt_none .s:fg_green .s:bg_none " *Statement any statement " Conditional if, then, else, endif, switch, etc. " Repeat for, do, while, etc. " Label case, default, etc. " Operator "sizeof", "+", "*", etc. " Keyword any other keyword " Exception try, catch, throw exe "hi! PreProc" .s:fmt_none .s:fg_orange .s:bg_none " *PreProc generic Preprocessor " Include preprocessor #include " Define preprocessor #define " Macro same as Define " PreCondit preprocessor #if, #else, #endif, etc. exe "hi! Type" .s:fmt_none .s:fg_yellow .s:bg_none " *Type int, long, char, etc. " StorageClass static, register, volatile, etc. " Structure struct, union, enum, etc. " Typedef A typedef exe "hi! Special" .s:fmt_none .s:fg_red .s:bg_none " *Special any special symbol " SpecialChar special character in a constant " Tag you can use CTRL-] on this " Delimiter character that needs attention " SpecialComment special things inside a comment " Debug debugging statements exe "hi! Underlined" .s:fmt_none .s:fg_violet .s:bg_none " *Underlined text that stands out, HTML links exe "hi! Ignore" .s:fmt_none .s:fg_none .s:bg_none " *Ignore left blank, hidden |hl-Ignore| exe "hi! Error" .s:fmt_bold .s:fg_red .s:bg_none " *Error any erroneous construct exe "hi! Todo" .s:fmt_bold .s:fg_magenta.s:bg_none " *Todo anything that needs extra attention; mostly the " keywords TODO FIXME and XXX " "}}} " Extended highlighting "{{{ " --------------------------------------------------------------------- if (g:solarized_visibility=="high") exe "hi! SpecialKey" .s:fmt_revr .s:fg_red .s:bg_none exe "hi! NonText" .s:fmt_bold .s:fg_base1 .s:bg_none elseif (g:solarized_visibility=="low") exe "hi! SpecialKey" .s:fmt_bold .s:fg_base02 .s:bg_none exe "hi! NonText" .s:fmt_bold .s:fg_base02 .s:bg_none else exe "hi! SpecialKey" .s:fmt_bold .s:fg_red .s:bg_none exe "hi! NonText" .s:fmt_bold .s:fg_base01 .s:bg_none endif if (has("gui_running")) || &t_Co > 8 exe "hi! StatusLine" .s:fmt_none .s:fg_base02 .s:bg_base1 exe "hi! StatusLineNC" .s:fmt_none .s:fg_base02 .s:bg_base00 "exe "hi! Visual" .s:fmt_stnd .s:fg_none .s:bg_base02 exe "hi! Visual" .s:fmt_none .s:fg_base03 .s:bg_base01 else exe "hi! StatusLine" .s:fmt_none .s:fg_base02 .s:bg_base2 exe "hi! StatusLineNC" .s:fmt_none .s:fg_base02 .s:bg_base2 exe "hi! Visual" .s:fmt_none .s:fg_none .s:bg_base2 endif exe "hi! Directory" .s:fmt_none .s:fg_blue .s:bg_none exe "hi! ErrorMsg" .s:fmt_revr .s:fg_red .s:bg_none exe "hi! IncSearch" .s:fmt_stnd .s:fg_orange .s:bg_none exe "hi! Search" .s:fmt_revr .s:fg_yellow .s:bg_none exe "hi! MoreMsg" .s:fmt_none .s:fg_blue .s:bg_none exe "hi! ModeMsg" .s:fmt_none .s:fg_blue .s:bg_none exe "hi! LineNr" .s:fmt_none .s:fg_base01 .s:bg_base02 exe "hi! Question" .s:fmt_bold .s:fg_cyan .s:bg_none exe "hi! VertSplit" .s:fmt_bold .s:fg_base00 .s:bg_base00 exe "hi! Title" .s:fmt_bold .s:fg_orange .s:bg_none exe "hi! VisualNOS" .s:fmt_stnd .s:fg_none .s:bg_base02 exe "hi! WarningMsg" .s:fmt_bold .s:fg_red .s:bg_none exe "hi! WildMenu" .s:fmt_none .s:fg_base2 .s:bg_base02 exe "hi! Folded" .s:fmt_undb .s:fg_base0 .s:bg_base02 .s:sp_base03 exe "hi! FoldColumn" .s:fmt_bold .s:fg_base0 .s:bg_base02 exe "hi! DiffAdd" .s:fmt_revr .s:fg_green .s:bg_none exe "hi! DiffChange" .s:fmt_revr .s:fg_yellow .s:bg_none exe "hi! DiffDelete" .s:fmt_revr .s:fg_red .s:bg_none exe "hi! DiffText" .s:fmt_revr .s:fg_blue .s:bg_none exe "hi! SignColumn" .s:fmt_none .s:fg_base0 .s:bg_base02 exe "hi! Conceal" .s:fmt_none .s:fg_blue .s:bg_none exe "hi! SpellBad" .s:fmt_curl .s:fg_none .s:bg_none .s:sp_red exe "hi! SpellCap" .s:fmt_curl .s:fg_none .s:bg_none .s:sp_violet exe "hi! SpellRare" .s:fmt_curl .s:fg_none .s:bg_none .s:sp_cyan exe "hi! SpellLocal" .s:fmt_curl .s:fg_none .s:bg_none .s:sp_yellow exe "hi! Pmenu" .s:fmt_none .s:fg_base0 .s:bg_base02 exe "hi! PmenuSel" .s:fmt_none .s:fg_base2 .s:bg_base01 exe "hi! PmenuSbar" .s:fmt_none .s:fg_base0 .s:bg_base2 exe "hi! PmenuThumb" .s:fmt_none .s:fg_base03 .s:bg_base0 exe "hi! TabLine" .s:fmt_undr .s:fg_base0 .s:bg_base02 .s:sp_base0 exe "hi! TabLineSel" .s:fmt_undr .s:fg_base2 .s:bg_base01 .s:sp_base0 exe "hi! TabLineFill" .s:fmt_undr .s:fg_base0 .s:bg_base02 .s:sp_base0 exe "hi! CursorColumn" .s:fmt_none .s:fg_none .s:bg_base02 exe "hi! CursorLine" .s:fmt_uopt .s:fg_none .s:bg_base02 .s:sp_base1 exe "hi! ColorColumn" .s:fmt_none .s:fg_none .s:bg_base02 exe "hi! Cursor" .s:fmt_none .s:fg_base03 .s:bg_base0 hi! link lCursor Cursor exe "hi! MatchParen" .s:fmt_bold .s:fg_red .s:bg_base01 "}}} " vim syntax highlighting "{{{ " --------------------------------------------------------------------- exe "hi! vimLineComment" . s:fg_base01 .s:bg_none .s:fmt_ital exe "hi! vimCommentString".s:fg_violet .s:bg_none .s:fmt_none hi! link vimVar Identifier hi! link vimFunc Function hi! link vimUserFunc Function exe "hi! vimCommand" . s:fg_yellow .s:bg_none .s:fmt_none exe "hi! vimCmdSep" . s:fg_blue .s:bg_none .s:fmt_bold exe "hi! helpExample" . s:fg_base1 .s:bg_none .s:fmt_none hi! link helpSpecial Special exe "hi! helpOption" . s:fg_cyan .s:bg_none .s:fmt_none exe "hi! helpNote" . s:fg_magenta.s:bg_none .s:fmt_none exe "hi! helpVim" . s:fg_magenta.s:bg_none .s:fmt_none exe "hi! helpHyperTextJump" .s:fg_blue .s:bg_none .s:fmt_undr exe "hi! helpHyperTextEntry".s:fg_green .s:bg_none .s:fmt_none exe "hi! vimIsCommand" . s:fg_base00 .s:bg_none .s:fmt_none exe "hi! vimSynMtchOpt" . s:fg_yellow .s:bg_none .s:fmt_none exe "hi! vimSynType" . s:fg_cyan .s:bg_none .s:fmt_none exe "hi! vimHiLink" . s:fg_blue .s:bg_none .s:fmt_none exe "hi! vimHiGroup" . s:fg_blue .s:bg_none .s:fmt_none exe "hi! vimGroup" . s:fg_blue .s:bg_none .s:fmt_undb "}}} " html highlighting "{{{ " --------------------------------------------------------------------- exe "hi! htmlTag" . s:fg_base01 .s:bg_none .s:fmt_none exe "hi! htmlEndTag" . s:fg_base01 .s:bg_none .s:fmt_none exe "hi! htmlTagN" . s:fg_base1 .s:bg_none .s:fmt_bold exe "hi! htmlTagName" . s:fg_blue .s:bg_none .s:fmt_bold exe "hi! htmlSpecialTagName". s:fg_blue .s:bg_none .s:fmt_ital exe "hi! htmlArg" . s:fg_base00 .s:bg_none .s:fmt_none exe "hi! javaScript" . s:fg_yellow .s:bg_none .s:fmt_none "}}} " perl highlighting "{{{ " --------------------------------------------------------------------- exe "hi! perlHereDoc" . s:fg_base1 .s:bg_back .s:fmt_none exe "hi! perlVarPlain" . s:fg_yellow .s:bg_back .s:fmt_none exe "hi! perlStatementFileDesc". s:fg_cyan.s:bg_back.s:fmt_none "}}} " tex highlighting "{{{ " --------------------------------------------------------------------- exe "hi! texStatement" . s:fg_cyan .s:bg_back .s:fmt_none exe "hi! texMathZoneX" . s:fg_yellow .s:bg_back .s:fmt_none exe "hi! texMathMatcher" . s:fg_yellow .s:bg_back .s:fmt_none exe "hi! texMathMatcher" . s:fg_yellow .s:bg_back .s:fmt_none exe "hi! texRefLabel" . s:fg_yellow .s:bg_back .s:fmt_none "}}} " ruby highlighting "{{{ " --------------------------------------------------------------------- exe "hi! rubyDefine" . s:fg_base1 .s:bg_back .s:fmt_bold "rubyInclude "rubySharpBang "rubyAccess "rubyPredefinedVariable "rubyBoolean "rubyClassVariable "rubyBeginEnd "rubyRepeatModifier "hi! link rubyArrayDelimiter Special " [ , , ] "rubyCurlyBlock { , , } "hi! link rubyClass Keyword "hi! link rubyModule Keyword "hi! link rubyKeyword Keyword "hi! link rubyOperator Operator "hi! link rubyIdentifier Identifier "hi! link rubyInstanceVariable Identifier "hi! link rubyGlobalVariable Identifier "hi! link rubyClassVariable Identifier "hi! link rubyConstant Type "}}} " haskell syntax highlighting"{{{ " --------------------------------------------------------------------- " For use with syntax/haskell.vim : Haskell Syntax File " http://www.vim.org/scripts/script.php?script_id=3034 " See also Steffen Siering's github repository: " http://github.com/urso/dotrc/blob/master/vim/syntax/haskell.vim " --------------------------------------------------------------------- " " Treat True and False specially, see the plugin referenced above let hs_highlight_boolean=1 " highlight delims, see the plugin referenced above let hs_highlight_delimiters=1 exe "hi! cPreCondit". s:fg_orange.s:bg_none .s:fmt_none exe "hi! VarId" . s:fg_blue .s:bg_none .s:fmt_none exe "hi! ConId" . s:fg_yellow .s:bg_none .s:fmt_none exe "hi! hsImport" . s:fg_magenta.s:bg_none .s:fmt_none exe "hi! hsString" . s:fg_base00 .s:bg_none .s:fmt_none exe "hi! hsStructure" . s:fg_cyan .s:bg_none .s:fmt_none exe "hi! hs_hlFunctionName" . s:fg_blue .s:bg_none exe "hi! hsStatement" . s:fg_cyan .s:bg_none .s:fmt_none exe "hi! hsImportLabel" . s:fg_cyan .s:bg_none .s:fmt_none exe "hi! hs_OpFunctionName" . s:fg_yellow .s:bg_none .s:fmt_none exe "hi! hs_DeclareFunction" . s:fg_orange .s:bg_none .s:fmt_none exe "hi! hsVarSym" . s:fg_cyan .s:bg_none .s:fmt_none exe "hi! hsType" . s:fg_yellow .s:bg_none .s:fmt_none exe "hi! hsTypedef" . s:fg_cyan .s:bg_none .s:fmt_none exe "hi! hsModuleName" . s:fg_green .s:bg_none .s:fmt_undr exe "hi! hsModuleStartLabel" . s:fg_magenta.s:bg_none .s:fmt_none hi! link hsImportParams Delimiter hi! link hsDelimTypeExport Delimiter hi! link hsModuleStartLabel hsStructure hi! link hsModuleWhereLabel hsModuleStartLabel " following is for the haskell-conceal plugin " the first two items don't have an impact, but better safe exe "hi! hsNiceOperator" . s:fg_cyan .s:bg_none .s:fmt_none exe "hi! hsniceoperator" . s:fg_cyan .s:bg_none .s:fmt_none "}}} " pandoc markdown syntax highlighting "{{{ " --------------------------------------------------------------------- "PandocHiLink pandocNormalBlock exe "hi! pandocTitleBlock" .s:fg_blue .s:bg_none .s:fmt_none exe "hi! pandocTitleBlockTitle" .s:fg_blue .s:bg_none .s:fmt_bold exe "hi! pandocTitleComment" .s:fg_blue .s:bg_none .s:fmt_bold exe "hi! pandocComment" .s:fg_base01 .s:bg_none .s:fmt_ital exe "hi! pandocVerbatimBlock" .s:fg_yellow .s:bg_none .s:fmt_none hi! link pandocVerbatimBlockDeep pandocVerbatimBlock hi! link pandocCodeBlock pandocVerbatimBlock hi! link pandocCodeBlockDelim pandocVerbatimBlock exe "hi! pandocBlockQuote" .s:fg_blue .s:bg_none .s:fmt_none exe "hi! pandocBlockQuoteLeader1" .s:fg_blue .s:bg_none .s:fmt_none exe "hi! pandocBlockQuoteLeader2" .s:fg_cyan .s:bg_none .s:fmt_none exe "hi! pandocBlockQuoteLeader3" .s:fg_yellow .s:bg_none .s:fmt_none exe "hi! pandocBlockQuoteLeader4" .s:fg_red .s:bg_none .s:fmt_none exe "hi! pandocBlockQuoteLeader5" .s:fg_base0 .s:bg_none .s:fmt_none exe "hi! pandocBlockQuoteLeader6" .s:fg_base01 .s:bg_none .s:fmt_none exe "hi! pandocListMarker" .s:fg_magenta.s:bg_none .s:fmt_none exe "hi! pandocListReference" .s:fg_magenta.s:bg_none .s:fmt_undr " Definitions " --------------------------------------------------------------------- let s:fg_pdef = s:fg_violet exe "hi! pandocDefinitionBlock" .s:fg_pdef .s:bg_none .s:fmt_none exe "hi! pandocDefinitionTerm" .s:fg_pdef .s:bg_none .s:fmt_stnd exe "hi! pandocDefinitionIndctr" .s:fg_pdef .s:bg_none .s:fmt_bold exe "hi! pandocEmphasisDefinition" .s:fg_pdef .s:bg_none .s:fmt_ital exe "hi! pandocEmphasisNestedDefinition" .s:fg_pdef .s:bg_none .s:fmt_bldi exe "hi! pandocStrongEmphasisDefinition" .s:fg_pdef .s:bg_none .s:fmt_bold exe "hi! pandocStrongEmphasisNestedDefinition" .s:fg_pdef.s:bg_none.s:fmt_bldi exe "hi! pandocStrongEmphasisEmphasisDefinition" .s:fg_pdef.s:bg_none.s:fmt_bldi exe "hi! pandocStrikeoutDefinition" .s:fg_pdef .s:bg_none .s:fmt_revr exe "hi! pandocVerbatimInlineDefinition" .s:fg_pdef .s:bg_none .s:fmt_none exe "hi! pandocSuperscriptDefinition" .s:fg_pdef .s:bg_none .s:fmt_none exe "hi! pandocSubscriptDefinition" .s:fg_pdef .s:bg_none .s:fmt_none " Tables " --------------------------------------------------------------------- let s:fg_ptable = s:fg_blue exe "hi! pandocTable" .s:fg_ptable.s:bg_none .s:fmt_none exe "hi! pandocTableStructure" .s:fg_ptable.s:bg_none .s:fmt_none hi! link pandocTableStructureTop pandocTableStructre hi! link pandocTableStructureEnd pandocTableStructre exe "hi! pandocTableZebraLight" .s:fg_ptable.s:bg_base03.s:fmt_none exe "hi! pandocTableZebraDark" .s:fg_ptable.s:bg_base02.s:fmt_none exe "hi! pandocEmphasisTable" .s:fg_ptable.s:bg_none .s:fmt_ital exe "hi! pandocEmphasisNestedTable" .s:fg_ptable.s:bg_none .s:fmt_bldi exe "hi! pandocStrongEmphasisTable" .s:fg_ptable.s:bg_none .s:fmt_bold exe "hi! pandocStrongEmphasisNestedTable" .s:fg_ptable.s:bg_none .s:fmt_bldi exe "hi! pandocStrongEmphasisEmphasisTable" .s:fg_ptable.s:bg_none .s:fmt_bldi exe "hi! pandocStrikeoutTable" .s:fg_ptable.s:bg_none .s:fmt_revr exe "hi! pandocVerbatimInlineTable" .s:fg_ptable.s:bg_none .s:fmt_none exe "hi! pandocSuperscriptTable" .s:fg_ptable.s:bg_none .s:fmt_none exe "hi! pandocSubscriptTable" .s:fg_ptable.s:bg_none .s:fmt_none " Headings " --------------------------------------------------------------------- let s:fg_phead = s:fg_orange exe "hi! pandocHeading" .s:fg_phead .s:bg_none.s:fmt_bold exe "hi! pandocHeadingMarker" .s:fg_yellow.s:bg_none.s:fmt_bold exe "hi! pandocEmphasisHeading" .s:fg_phead .s:bg_none.s:fmt_bldi exe "hi! pandocEmphasisNestedHeading" .s:fg_phead .s:bg_none.s:fmt_bldi exe "hi! pandocStrongEmphasisHeading" .s:fg_phead .s:bg_none.s:fmt_bold exe "hi! pandocStrongEmphasisNestedHeading" .s:fg_phead .s:bg_none.s:fmt_bldi exe "hi! pandocStrongEmphasisEmphasisHeading".s:fg_phead .s:bg_none.s:fmt_bldi exe "hi! pandocStrikeoutHeading" .s:fg_phead .s:bg_none.s:fmt_revr exe "hi! pandocVerbatimInlineHeading" .s:fg_phead .s:bg_none.s:fmt_bold exe "hi! pandocSuperscriptHeading" .s:fg_phead .s:bg_none.s:fmt_bold exe "hi! pandocSubscriptHeading" .s:fg_phead .s:bg_none.s:fmt_bold " Links " --------------------------------------------------------------------- exe "hi! pandocLinkDelim" .s:fg_base01 .s:bg_none .s:fmt_none exe "hi! pandocLinkLabel" .s:fg_blue .s:bg_none .s:fmt_undr exe "hi! pandocLinkText" .s:fg_blue .s:bg_none .s:fmt_undb exe "hi! pandocLinkURL" .s:fg_base00 .s:bg_none .s:fmt_undr exe "hi! pandocLinkTitle" .s:fg_base00 .s:bg_none .s:fmt_undi exe "hi! pandocLinkTitleDelim" .s:fg_base01 .s:bg_none .s:fmt_undi .s:sp_base00 exe "hi! pandocLinkDefinition" .s:fg_cyan .s:bg_none .s:fmt_undr .s:sp_base00 exe "hi! pandocLinkDefinitionID" .s:fg_blue .s:bg_none .s:fmt_bold exe "hi! pandocImageCaption" .s:fg_violet .s:bg_none .s:fmt_undb exe "hi! pandocFootnoteLink" .s:fg_green .s:bg_none .s:fmt_undr exe "hi! pandocFootnoteDefLink" .s:fg_green .s:bg_none .s:fmt_bold exe "hi! pandocFootnoteInline" .s:fg_green .s:bg_none .s:fmt_undb exe "hi! pandocFootnote" .s:fg_green .s:bg_none .s:fmt_none exe "hi! pandocCitationDelim" .s:fg_magenta.s:bg_none .s:fmt_none exe "hi! pandocCitation" .s:fg_magenta.s:bg_none .s:fmt_none exe "hi! pandocCitationID" .s:fg_magenta.s:bg_none .s:fmt_undr exe "hi! pandocCitationRef" .s:fg_magenta.s:bg_none .s:fmt_none " Main Styles " --------------------------------------------------------------------- exe "hi! pandocStyleDelim" .s:fg_base01 .s:bg_none .s:fmt_none exe "hi! pandocEmphasis" .s:fg_base0 .s:bg_none .s:fmt_ital exe "hi! pandocEmphasisNested" .s:fg_base0 .s:bg_none .s:fmt_bldi exe "hi! pandocStrongEmphasis" .s:fg_base0 .s:bg_none .s:fmt_bold exe "hi! pandocStrongEmphasisNested" .s:fg_base0 .s:bg_none .s:fmt_bldi exe "hi! pandocStrongEmphasisEmphasis" .s:fg_base0 .s:bg_none .s:fmt_bldi exe "hi! pandocStrikeout" .s:fg_base01 .s:bg_none .s:fmt_revr exe "hi! pandocVerbatimInline" .s:fg_yellow .s:bg_none .s:fmt_none exe "hi! pandocSuperscript" .s:fg_violet .s:bg_none .s:fmt_none exe "hi! pandocSubscript" .s:fg_violet .s:bg_none .s:fmt_none exe "hi! pandocRule" .s:fg_blue .s:bg_none .s:fmt_bold exe "hi! pandocRuleLine" .s:fg_blue .s:bg_none .s:fmt_bold exe "hi! pandocEscapePair" .s:fg_red .s:bg_none .s:fmt_bold exe "hi! pandocCitationRef" .s:fg_magenta.s:bg_none .s:fmt_none exe "hi! pandocNonBreakingSpace" . s:fg_red .s:bg_none .s:fmt_revr hi! link pandocEscapedCharacter pandocEscapePair hi! link pandocLineBreak pandocEscapePair " Embedded Code " --------------------------------------------------------------------- exe "hi! pandocMetadataDelim" .s:fg_base01 .s:bg_none .s:fmt_none exe "hi! pandocMetadata" .s:fg_blue .s:bg_none .s:fmt_none exe "hi! pandocMetadataKey" .s:fg_blue .s:bg_none .s:fmt_none exe "hi! pandocMetadata" .s:fg_blue .s:bg_none .s:fmt_bold hi! link pandocMetadataTitle pandocMetadata "}}} " Utility autocommand "{{{ " --------------------------------------------------------------------- " In cases where Solarized is initialized inside a terminal vim session and " then transferred to a gui session via the command `:gui`, the gui vim process " does not re-read the colorscheme (or .vimrc for that matter) so any `has_gui` " related code that sets gui specific values isn't executed. " " Currently, Solarized sets only the cterm or gui values for the colorscheme " depending on gui or terminal mode. It's possible that, if the following " autocommand method is deemed excessively poor form, that approach will be " used again and the autocommand below will be dropped. " " However it seems relatively benign in this case to include the autocommand " here. It fires only in cases where vim is transferring from terminal to gui " mode (detected with the script scope s:vmode variable). It also allows for " other potential terminal customizations that might make gui mode suboptimal. " autocmd GUIEnter * if (s:vmode != "gui") | exe "colorscheme " . g:colors_name | endif "}}} " License "{{{ " --------------------------------------------------------------------- " " Copyright (c) 2011 Ethan Schoonover " " 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. " " vim:foldmethod=marker:foldlevel=0 "}}} ================================================ FILE: .vim/swaps/.gitkeep ================================================ ================================================ FILE: .vim/syntax/json.vim ================================================ " Vim syntax file " Language: JSON " Maintainer: Jeroen Ruigrok van der Werven " Last Change: 2009-06-16 " Version: 0.4 " {{{1 " Syntax setup {{{2 " For version 5.x: Clear all syntax items " For version 6.x: Quit when a syntax file was already loaded if !exists("main_syntax") if version < 600 syntax clear elseif exists("b:current_syntax") finish endif let main_syntax = 'json' endif " Syntax: Strings {{{2 syn region jsonString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=jsonEscape " Syntax: JSON does not allow strings with single quotes, unlike JavaScript. syn region jsonStringSQ start=+'+ skip=+\\\\\|\\"+ end=+'+ " Syntax: Escape sequences {{{3 syn match jsonEscape "\\["\\/bfnrt]" contained syn match jsonEscape "\\u\x\{4}" contained " Syntax: Strings should always be enclosed with quotes. syn match jsonNoQuotes "\<\a\+\>" " Syntax: Numbers {{{2 syn match jsonNumber "-\=\<\%(0\|[1-9]\d*\)\%(\.\d\+\)\=\%([eE][-+]\=\d\+\)\=\>" " Syntax: An integer part of 0 followed by other digits is not allowed. syn match jsonNumError "-\=\<0\d\.\d*\>" " Syntax: Boolean {{{2 syn keyword jsonBoolean true false " Syntax: Null {{{2 syn keyword jsonNull null " Syntax: Braces {{{2 syn match jsonBraces "[{}\[\]]" " Define the default highlighting. {{{1 " For version 5.7 and earlier: only when not done already " For version 5.8 and later: only when an item doesn't have highlighting yet if version >= 508 || !exists("did_json_syn_inits") if version < 508 let did_json_syn_inits = 1 command -nargs=+ HiLink hi link else command -nargs=+ HiLink hi def link endif HiLink jsonString String HiLink jsonEscape Special HiLink jsonNumber Number HiLink jsonBraces Operator HiLink jsonNull Function HiLink jsonBoolean Boolean HiLink jsonNumError Error HiLink jsonStringSQ Error HiLink jsonNoQuotes Error delcommand HiLink endif let b:current_syntax = "json" if main_syntax == 'json' unlet main_syntax endif ================================================ FILE: .vim/undo/.gitkeep ================================================ ================================================ FILE: .vimrc ================================================ " 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 " 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 ================================================ FILE: .wgetrc ================================================ # 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. # Does anyone know how to conditionally configure a wget setting? # http://unix.stackexchange.com/q/34730/6040 #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) ================================================ FILE: LICENSE-MIT.txt ================================================ Copyright Mathias Bynens 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. ================================================ FILE: README.md ================================================ # Mathias’s dotfiles ![Screenshot of my shell prompt](https://i.imgur.com/EkEtphC.png) ## Installation **Warning:** If you want to give these dotfiles a try, you should first fork this repository, review the code, and remove things you don’t want or need. Don’t blindly use my settings unless you know what that entails. Use at your own risk! ### Using Git and the bootstrap script You can clone the repository wherever you want. (I like to keep it in `~/Projects/dotfiles`, with `~/dotfiles` as a symlink.) The bootstrapper script will pull in the latest version and copy the files to your home folder. ```bash git clone https://github.com/mathiasbynens/dotfiles.git && cd dotfiles && source bootstrap.sh ``` To update, `cd` into your local `dotfiles` repository and then: ```bash source bootstrap.sh ``` Alternatively, to update while avoiding the confirmation prompt: ```bash set -- -f; source bootstrap.sh ``` ### Git-free install To install these dotfiles without Git: ```bash cd; curl -#L https://github.com/mathiasbynens/dotfiles/tarball/main | tar -xzv --strip-components 1 --exclude={README.md,bootstrap.sh,.osx,LICENSE-MIT.txt} ``` To update later on, just run that command again. ### Specify the `$PATH` If `~/.path` exists, it will be sourced along with the other files, before any feature testing (such as [detecting which version of `ls` is being used](https://github.com/mathiasbynens/dotfiles/blob/aff769fd75225d8f2e481185a71d5e05b76002dc/.aliases#L21-L26)) takes place. Here’s an example `~/.path` file that adds `/usr/local/bin` to the `$PATH`: ```bash export PATH="/usr/local/bin:$PATH" ``` ### Add custom commands without creating a new fork If `~/.extra` exists, it will be sourced along with the other files. You can use this to add a few custom commands without the need to fork this entire repository, or to add commands you don’t want to commit to a public repository. My `~/.extra` looks something like this: ```bash # Git credentials # Not in the repository, to prevent people from accidentally committing under my name GIT_AUTHOR_NAME="Mathias Bynens" GIT_COMMITTER_NAME="$GIT_AUTHOR_NAME" git config --global user.name "$GIT_AUTHOR_NAME" GIT_AUTHOR_EMAIL="mathias@mailinator.com" GIT_COMMITTER_EMAIL="$GIT_AUTHOR_EMAIL" git config --global user.email "$GIT_AUTHOR_EMAIL" ``` You could also use `~/.extra` to override settings, functions and aliases from my dotfiles repository. It’s probably better to [fork this repository](https://github.com/mathiasbynens/dotfiles/fork) instead, though. ### Sensible macOS defaults When setting up a new Mac, you may want to set some sensible macOS defaults: ```bash ./.macos ``` ### Install Homebrew formulae When setting up a new Mac, you may want to install some common [Homebrew](https://brew.sh/) formulae (after installing Homebrew, of course): ```bash ./brew.sh ``` Some of the functionality of these dotfiles depends on formulae installed by `brew.sh`. If you don’t plan to run `brew.sh`, you should look carefully through the script and manually install any particularly important ones. A good example is Bash/Git completion: the dotfiles use a special version from Homebrew. ## Feedback Suggestions/improvements [welcome](https://github.com/mathiasbynens/dotfiles/issues)! ## Author | [![twitter/mathias](http://gravatar.com/avatar/24e08a9ea84deb17ae121074d0f17125?s=70)](http://twitter.com/mathias "Follow @mathias on Twitter") | |---| | [Mathias Bynens](https://mathiasbynens.be/) | ## Thanks to… * @ptb and [his _macOS Setup_ repository](https://github.com/ptb/mac-setup) * [Ben Alman](http://benalman.com/) and his [dotfiles repository](https://github.com/cowboy/dotfiles) * [Cătălin Mariș](https://github.com/alrra) and his [dotfiles repository](https://github.com/alrra/dotfiles) * [Gianni Chiappetta](https://butt.zone/) for sharing his [amazing collection of dotfiles](https://github.com/gf3/dotfiles) * [Jan Moesen](http://jan.moesen.nu/) and his [ancient `.bash_profile`](https://gist.github.com/1156154) + [shiny _tilde_ repository](https://github.com/janmoesen/tilde) * Lauri ‘Lri’ Ranta for sharing [loads of hidden preferences](https://web.archive.org/web/20161104144204/http://osxnotes.net/defaults.html) * [Matijs Brinkhuis](https://matijs.brinkhu.is/) and his [dotfiles repository](https://github.com/matijs/dotfiles) * [Nicolas Gallagher](http://nicolasgallagher.com/) and his [dotfiles repository](https://github.com/necolas/dotfiles) * [Sindre Sorhus](https://sindresorhus.com/) * [Tom Ryder](https://sanctum.geek.nz/) and his [dotfiles repository](https://sanctum.geek.nz/cgit/dotfiles.git/about) * [Kevin Suttle](http://kevinsuttle.com/) and his [dotfiles repository](https://github.com/kevinSuttle/dotfiles) and [macOS-Defaults project](https://github.com/kevinSuttle/macOS-Defaults), which aims to provide better documentation for [`~/.macos`](https://mths.be/macos) * [Haralan Dobrev](https://hkdobrev.com/) * Anyone who [contributed a patch](https://github.com/mathiasbynens/dotfiles/contributors) or [made a helpful suggestion](https://github.com/mathiasbynens/dotfiles/issues) ================================================ FILE: bootstrap.sh ================================================ #!/usr/bin/env bash cd "$(dirname "${BASH_SOURCE}")"; git pull origin main; function doIt() { rsync --exclude ".git/" \ --exclude ".DS_Store" \ --exclude ".osx" \ --exclude "bootstrap.sh" \ --exclude "README.md" \ --exclude "LICENSE-MIT.txt" \ -avh --no-perms . ~; source ~/.bash_profile; } if [ "$1" == "--force" -o "$1" == "-f" ]; then doIt; else read -p "This may overwrite existing files in your home directory. Are you sure? (y/n) " -n 1; echo ""; if [[ $REPLY =~ ^[Yy]$ ]]; then doIt; fi; fi; unset doIt; ================================================ FILE: brew.sh ================================================ #!/usr/bin/env bash # Install command-line tools using Homebrew. # Make sure we’re using the latest Homebrew. brew update # Upgrade any already-installed formulae. brew upgrade # Save Homebrew’s installed location. BREW_PREFIX=$(brew --prefix) # Install GNU core utilities (those that come with macOS are outdated). # Don’t forget to add `$(brew --prefix coreutils)/libexec/gnubin` to `$PATH`. brew install coreutils ln -s "${BREW_PREFIX}/bin/gsha256sum" "${BREW_PREFIX}/bin/sha256sum" # Install some other useful utilities like `sponge`. brew install moreutils # Install GNU `find`, `locate`, `updatedb`, and `xargs`, `g`-prefixed. brew install findutils # Install GNU `sed`, overwriting the built-in `sed`. brew install gnu-sed --with-default-names # Install a modern version of Bash. brew install bash brew install bash-completion2 # Switch to using brew-installed bash as default shell if ! fgrep -q "${BREW_PREFIX}/bin/bash" /etc/shells; then echo "${BREW_PREFIX}/bin/bash" | sudo tee -a /etc/shells; chsh -s "${BREW_PREFIX}/bin/bash"; fi; # Install `wget` with IRI support. brew install wget --with-iri # Install GnuPG to enable PGP-signing commits. brew install gnupg # Install more recent versions of some macOS tools. brew install vim --with-override-system-vi brew install grep brew install openssh brew install screen brew install php brew install gmp # Install font tools. brew tap bramstein/webfonttools brew install sfnt2woff brew install sfnt2woff-zopfli brew install woff2 # Install some CTF tools; see https://github.com/ctfs/write-ups. brew install aircrack-ng brew install bfg brew install binutils brew install binwalk brew install cifer brew install dex2jar brew install dns2tcp brew install fcrackzip brew install foremost brew install hashpump brew install hydra brew install john brew install knock brew install netpbm brew install nmap brew install pngcheck brew install socat brew install sqlmap brew install tcpflow brew install tcpreplay brew install tcptrace brew install ucspi-tcp # `tcpserver` etc. brew install xpdf brew install xz # Install other useful binaries. brew install ack #brew install exiv2 brew install git brew install git-lfs brew install gs brew install imagemagick --with-webp brew install lua brew install lynx brew install p7zip brew install pigz brew install pv brew install rename brew install rlwrap brew install ssh-copy-id brew install tree brew install vbindiff brew install zopfli # Remove outdated versions from the cellar. brew cleanup ================================================ FILE: init/Preferences.sublime-settings ================================================ { "color_scheme": "Packages/Color Scheme - Default/Solarized (Dark).tmTheme", "default_encoding": "UTF-8", "default_line_ending": "unix", "detect_indentation": false, "draw_white_space": "all", "ensure_newline_at_eof_on_save": false, "file_exclude_patterns": [ ".DS_Store", "Desktop.ini", "*.pyc", "._*", "Thumbs.db", ".Spotlight-V100", ".Trashes" ], "folder_exclude_patterns": [ ".git", "node_modules" ], "font_face": "Monaco", "font_size": 13, "highlight_modified_tabs": true, "hot_exit": false, "line_padding_bottom": 5, "match_brackets": true, "match_brackets_angle": true, "remember_open_files": false, "rulers": [ 80 ], "show_encoding": true, "show_line_endings": true, "tab_size": 2, "translate_tabs_to_spaces": false, "trim_trailing_white_space_on_save": true, "word_wrap": true } ================================================ FILE: init/Solarized Dark xterm-256color.terminal ================================================ BackgroundColor YnBsaXN0MDDUAQIDBAUGFRZYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3AS AAGGoKMHCA9VJG51bGzTCQoLDA0OVU5TUkdCXE5TQ29sb3JTcGFjZVYkY2xhc3NPECgw LjAxNTkyNDQwNTMxIDAuMTI2NTIwOTE2OCAwLjE1OTY5NjAxMjcAEAGAAtIQERITWiRj bGFzc25hbWVYJGNsYXNzZXNXTlNDb2xvcqISFFhOU09iamVjdF8QD05TS2V5ZWRBcmNo aXZlctEXGFRyb290gAEIERojLTI3O0FITltijY+RlqGqsrW+0NPYAAAAAAAAAQEAAAAA AAAAGQAAAAAAAAAAAAAAAAAAANo= BlinkText CursorColor YnBsaXN0MDDUAQIDBAUGFRZYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3AS AAGGoKMHCA9VJG51bGzTCQoLDA0OVU5TUkdCXE5TQ29sb3JTcGFjZVYkY2xhc3NPECcw LjQ0MDU4MDI0ODggMC41MDk2MjkzMDkyIDAuNTE2ODU3OTgxNwAQAYAC0hAREhNaJGNs YXNzbmFtZVgkY2xhc3Nlc1dOU0NvbG9yohIUWE5TT2JqZWN0XxAPTlNLZXllZEFyY2hp dmVy0RcYVHJvb3SAAQgRGiMtMjc7QUhOW2KMjpCVoKmxtL3P0tcAAAAAAAABAQAAAAAA AAAZAAAAAAAAAAAAAAAAAAAA2Q== Font YnBsaXN0MDDUAQIDBAUGGBlYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3AS AAGGoKQHCBESVSRudWxs1AkKCwwNDg8QVk5TU2l6ZVhOU2ZGbGFnc1ZOU05hbWVWJGNs YXNzI0AqAAAAAAAAEBCAAoADXU1lbmxvLVJlZ3VsYXLSExQVFlokY2xhc3NuYW1lWCRj bGFzc2VzVk5TRm9udKIVF1hOU09iamVjdF8QD05TS2V5ZWRBcmNoaXZlctEaG1Ryb290 gAEIERojLTI3PEJLUltiaXJ0dniGi5afpqmyxMfMAAAAAAAAAQEAAAAAAAAAHAAAAAAA AAAAAAAAAAAAAM4= FontAntialias FontHeightSpacing 1.1000000000000001 FontWidthSpacing 1 ProfileCurrentVersion 2.02 SelectionColor YnBsaXN0MDDUAQIDBAUGFRZYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3AS AAGGoKMHCA9VJG51bGzTCQoLDA0OVU5TUkdCXE5TQ29sb3JTcGFjZVYkY2xhc3NPECgw LjAzOTM4MDczNjY1IDAuMTYwMTE2NDYzOSAwLjE5ODMzMjc1NjgAEAGAAtIQERITWiRj bGFzc25hbWVYJGNsYXNzZXNXTlNDb2xvcqISFFhOU09iamVjdF8QD05TS2V5ZWRBcmNo aXZlctEXGFRyb290gAEIERojLTI3O0FITltijY+RlqGqsrW+0NPYAAAAAAAAAQEAAAAA AAAAGQAAAAAAAAAAAAAAAAAAANo= ShowWindowSettingsNameInTitle TerminalType xterm-256color TextBoldColor YnBsaXN0MDDUAQIDBAUGFRZYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3AS AAGGoKMHCA9VJG51bGzTCQoLDA0OVU5TUkdCXE5TQ29sb3JTcGFjZVYkY2xhc3NPECYw LjUwNTk5MTkzNTcgMC41NjQ4NTgzNzcgMC41NjM2MzY1NDE0ABABgALSEBESE1okY2xh c3NuYW1lWCRjbGFzc2VzV05TQ29sb3KiEhRYTlNPYmplY3RfEA9OU0tleWVkQXJjaGl2 ZXLRFxhUcm9vdIABCBEaIy0yNztBSE5bYouNj5SfqLCzvM7R1gAAAAAAAAEBAAAAAAAA ABkAAAAAAAAAAAAAAAAAAADY TextColor YnBsaXN0MDDUAQIDBAUGFRZYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3AS AAGGoKMHCA9VJG51bGzTCQoLDA0OVU5TUkdCXE5TQ29sb3JTcGFjZVYkY2xhc3NPECcw LjQ0MDU4MDI0ODggMC41MDk2MjkzMDkyIDAuNTE2ODU3OTgxNwAQAYAC0hAREhNaJGNs YXNzbmFtZVgkY2xhc3Nlc1dOU0NvbG9yohIUWE5TT2JqZWN0XxAPTlNLZXllZEFyY2hp dmVy0RcYVHJvb3SAAQgRGiMtMjc7QUhOW2KMjpCVoKmxtL3P0tcAAAAAAAABAQAAAAAA AAAZAAAAAAAAAAAAAAAAAAAA2Q== UseBrightBold blackColour BAtzdHJlYW10eXBlZIHoA4QBQISEhAdOU0NvbG9yAISECE5TT2JqZWN0AIWEAWMBhARm ZmZmg7JNIT2DkvUjPoO+F0s+AYY= blueColour BAtzdHJlYW10eXBlZIHoA4QBQISEhAdOU0NvbG9yAISECE5TT2JqZWN0AIWEAWMBhARm ZmZmgyqcAj6DtOHsPoO+RUg/AYY= brightBlackColour BAtzdHJlYW10eXBlZIHoA4QBQISEhAdOU0NvbG9yAISECE5TT2JqZWN0AIWEAWMBhARm ZmZmg+ZzgjyDs44BPoNahyM+AYY= brightBlueColour BAtzdHJlYW10eXBlZIHoA4QBQISEhAdOU0NvbG9yAISECE5TT2JqZWN0AIWEAWMBhARm ZmZmg7yT4T6DEXcCP4POUAQ/AYY= brightCyanColour BAtzdHJlYW10eXBlZIHoA4QBQISEhAdOU0NvbG9yAISECE5TT2JqZWN0AIWEAWMBhARm ZmZmg7CIAT+Dj5oQP4N8ShA/AYY= brightGreenColour BAtzdHJlYW10eXBlZIHoA4QBQISEhAdOU0NvbG9yAISECE5TT2JqZWN0AIWEAWMBhARm ZmZmgzyujT6DFZy2PoOYFsQ+AYY= brightMagentaColour BAtzdHJlYW10eXBlZIHoA4QBQISEhAdOU0NvbG9yAISECE5TT2JqZWN0AIWEAWMBhARm ZmZmgxMjsj6D+uazPoNkyTc/AYY= brightRedColour BAtzdHJlYW10eXBlZIHoA4QBQISEhAdOU0NvbG9yAISECE5TT2JqZWN0AIWEAWMBhARm ZmZmgyfkPT+D/15aPoMgl5Y9AYY= brightWhiteColour BAtzdHJlYW10eXBlZIHoA4QBQISEhAdOU0NvbG9yAISECE5TT2JqZWN0AIWEAWMBhARm ZmZmg49LfT+D0Dt1P4MGM10/AYY= brightYellowColour BAtzdHJlYW10eXBlZIHoA4QBQISEhAdOU0NvbG9yAISECE5TT2JqZWN0AIWEAWMBhARm ZmZmg1MTpj6DeHnQPoPQg+A+AYY= cyanColour BAtzdHJlYW10eXBlZIHoA4QBQISEhAdOU0NvbG9yAISECE5TT2JqZWN0AIWEAWMBhARm ZmZmg4VRFj6DfyESP4PkZwY/AYY= greenColour BAtzdHJlYW10eXBlZIHoA4QBQISEhAdOU0NvbG9yAISECE5TT2JqZWN0AIWEAWMBhARm ZmZmg9lI5j6DIYkKP4PVjKU8AYY= magentaColour BAtzdHJlYW10eXBlZIHoA4QBQISEhAdOU0NvbG9yAISECE5TT2JqZWN0AIWEAWMBhARm ZmZmg/4CRz+DBTzdPYMgzt4+AYY= name Solarized Dark xterm-256color redColour BAtzdHJlYW10eXBlZIHoA4QBQISEhAdOU0NvbG9yAISECE5TT2JqZWN0AIWEAWMBhARm ZmZmg6i7UT+DUATePYMl2hA+AYY= type Window Settings whiteColour BAtzdHJlYW10eXBlZIHoA4QBQISEhAdOU0NvbG9yAISECE5TT2JqZWN0AIWEAWMBhARm ZmZmgzqGaj+D2tdjP4NYPUw/AYY= yellowColour BAtzdHJlYW10eXBlZIHoA4QBQISEhAdOU0NvbG9yAISECE5TT2JqZWN0AIWEAWMBhARm ZmZmg0DAJT+DB17vPoM4Y8A8AYY= ================================================ FILE: init/Solarized Dark.itermcolors ================================================ Ansi 0 Color Blue Component 0.19370138645172119 Green Component 0.15575926005840302 Red Component 0.0 Ansi 1 Color Blue Component 0.14145714044570923 Green Component 0.10840655118227005 Red Component 0.81926977634429932 Ansi 10 Color Blue Component 0.38298487663269043 Green Component 0.35665956139564514 Red Component 0.27671992778778076 Ansi 11 Color Blue Component 0.43850564956665039 Green Component 0.40717673301696777 Red Component 0.32436618208885193 Ansi 12 Color Blue Component 0.51685798168182373 Green Component 0.50962930917739868 Red Component 0.44058024883270264 Ansi 13 Color Blue Component 0.72908437252044678 Green Component 0.33896297216415405 Red Component 0.34798634052276611 Ansi 14 Color Blue Component 0.56363654136657715 Green Component 0.56485837697982788 Red Component 0.50599193572998047 Ansi 15 Color Blue Component 0.86405980587005615 Green Component 0.95794391632080078 Red Component 0.98943418264389038 Ansi 2 Color Blue Component 0.020208755508065224 Green Component 0.54115492105484009 Red Component 0.44977453351020813 Ansi 3 Color Blue Component 0.023484811186790466 Green Component 0.46751424670219421 Red Component 0.64746475219726562 Ansi 4 Color Blue Component 0.78231418132781982 Green Component 0.46265947818756104 Red Component 0.12754884362220764 Ansi 5 Color Blue Component 0.43516635894775391 Green Component 0.10802463442087173 Red Component 0.77738940715789795 Ansi 6 Color Blue Component 0.52502274513244629 Green Component 0.57082360982894897 Red Component 0.14679534733295441 Ansi 7 Color Blue Component 0.79781103134155273 Green Component 0.89001238346099854 Red Component 0.91611063480377197 Ansi 8 Color Blue Component 0.15170273184776306 Green Component 0.11783610284328461 Red Component 0.0 Ansi 9 Color Blue Component 0.073530435562133789 Green Component 0.21325300633907318 Red Component 0.74176257848739624 Background Color Blue Component 0.15170273184776306 Green Component 0.11783610284328461 Red Component 0.0 Bold Color Blue Component 0.56363654136657715 Green Component 0.56485837697982788 Red Component 0.50599193572998047 Cursor Color Blue Component 0.51685798168182373 Green Component 0.50962930917739868 Red Component 0.44058024883270264 Cursor Text Color Blue Component 0.19370138645172119 Green Component 0.15575926005840302 Red Component 0.0 Foreground Color Blue Component 0.51685798168182373 Green Component 0.50962930917739868 Red Component 0.44058024883270264 Selected Text Color Blue Component 0.56363654136657715 Green Component 0.56485837697982788 Red Component 0.50599193572998047 Selection Color Blue Component 0.19370138645172119 Green Component 0.15575926005840302 Red Component 0.0 ================================================ FILE: init/spectacle.json ================================================ [ { "shortcut_key_binding": null, "shortcut_name": "RedoLastMove" }, { "shortcut_key_binding": null, "shortcut_name": "MakeSmaller" }, { "shortcut_key_binding": null, "shortcut_name": "MoveToUpperLeft" }, { "shortcut_key_binding": null, "shortcut_name": "MoveToUpperRight" }, { "shortcut_key_binding": null, "shortcut_name": "MoveToBottomHalf" }, { "shortcut_key_binding": null, "shortcut_name": "MoveToNextDisplay" }, { "shortcut_key_binding": null, "shortcut_name": "MoveToTopHalf" }, { "shortcut_key_binding": null, "shortcut_name": "MoveToLowerLeft" }, { "shortcut_key_binding": null, "shortcut_name": "MakeLarger" }, { "shortcut_key_binding": null, "shortcut_name": "UndoLastMove" }, { "shortcut_key_binding": null, "shortcut_name": "MoveToPreviousDisplay" }, { "shortcut_key_binding": "ctrl+alt+cmd+m", "shortcut_name": "MoveToFullscreen" }, { "shortcut_key_binding": null, "shortcut_name": "MoveToNextThird" }, { "shortcut_key_binding": "ctrl+alt+cmd+left", "shortcut_name": "MoveToLeftHalf" }, { "shortcut_key_binding": null, "shortcut_name": "MoveToCenter" }, { "shortcut_key_binding": "ctrl+alt+cmd+right", "shortcut_name": "MoveToRightHalf" }, { "shortcut_key_binding": null, "shortcut_name": "MoveToPreviousThird" }, { "shortcut_key_binding": null, "shortcut_name": "MoveToLowerRight" } ]