-
-
Notifications
You must be signed in to change notification settings - Fork 17
Expand file tree
/
Copy pathshell.sh
More file actions
125 lines (105 loc) · 4.86 KB
/
Copy pathshell.sh
File metadata and controls
125 lines (105 loc) · 4.86 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
# shell.sh
#
# Setup shell enviroment suitable for Bash and Zsh.
# This file should be sourced at the end of ~/.bashrc or ~/.zshrc
# If we are not running interactively do not continue loading this file.
case $- in
*i*) ;;
*) return;;
esac
# Set our preferred editor (both visual and line mode to be safe).
export EDITOR="vi"
export VISUAL="vi"
# Setup the path. Add local bin folders.
export PATH="/usr/local/bin:/usr/local/sbin:$PATH"
# Set the local shell.
# Not good as it is not respecting what we use in setup.sh but still need a way
# to make this work (or fix the symlink issue).
if [ -e "/usr/local/bin/bash" ]; then
export SHELL="/usr/local/bin/bash"
fi
# If we have homebrew, update the PATH.
eval "$(/opt/homebrew/bin/brew shellenv)"
# Set a shell option but don't fail if it doesn't exist!
safe_set() { shopt -s "$1" >/dev/null 2>&1 || true; }
# Set some options to make working with folders a little easier. Note that we
# send all output to '/dev/null' as startup files should not write to the
# terminal and older shells might not have these options.
safe_set autocd # Enter a folder name to 'cd' to it.
safe_set cdspell # Fix minor spelling issues with 'cd'.
safe_set dirspell # Fix minor spelling issues for commands.
safe_set cdable_vars # Allow 'cd varname' to switch directory.
# Uncomment the below if you want to be able to 'cd' into directories that are
# not just relative to the current location. For example, if the below was
# uncommented we could 'cd my_project' from anywhere if 'my_project' is in
# the 'repos' folder.
# CDPATH="~:~/repos"
# Configure the history to make it large and support multi-line commands.
safe_set histappend # Don't overwrite the history file, append.
safe_set cmdhist # Multi-line commands are one entry only.
PROMPT_COMMAND='history -a' # Before we prompt, save the history.
HISTSIZE=10000 # A large number of commands per session.
HISTFILESIZE=100000 # A huge number of commands in the file.
# HISTCONTROL="ignorespace:ignoredup" # Ignore starting with space or duplicates?
# export HISTIGNORE="ls:history" # Any commands we want to not record?
# HISTTIMEFORMAT='%F %T ' # Do we want a timestamp for commands?
# Add support to the terminal for colours.
# See: https://github.com/nathanbuchar/atom-one-dark-terminal
export CLICOLOR=1
export LSCOLORS=ExFxBxDxCxegedabagacad
# We're an xterm 256bit colour terminal, just in case anyone asks...
export TERM="xterm-256color"
alias tmux="tmux -2"
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
# Set the language. This is required for some Python tools.
# Fix 'perl: warning: Setting locale failed.'
export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8
# tmux is started by the terminal profile's "Initial Text" (see
# terminal/iTerm2/*.json), not from here. Auto-starting tmux from the shell
# conflicted with profile-driven isolated sockets and caused nested sessions.
# Load auto-completions depending on our shell.
if [ -n "$BASH_VERSION" ]; then
# Source auto-completions from the Mac and Linux locations.
# Note that this is based on Bash Completion 2, which requires Bash 4 or onwards.
[[ -r "$HOMEBREW_PREFIX/etc/profile.d/bash_completion.sh" ]] && . "$HOMEBREW_PREFIX/etc/profile.d/bash_completion.sh"
[[ -f /etc/bash_completion ]] && . /etc/bash_completion
elif [ -n "$ZSH_VERSION" ]; then
# Source zsh auto-completions.
fpath=($HOME/.zsh/completion $fpath)
autoload -Uz compinit && compinit -i
fi
# Import all shell functions and shell.d files.
for file in $HOME/.shell.functions.d/*.sh $HOME/.shell.functions.d/*/*.sh; do
[ -e "$file" ] || continue
source "$file"
done
for file in $HOME/.shell.d/*; do
[ -e "$file" ] || continue
source "$file"
done
# Import everything from the .shell.private.d folder. Use find to avoid zsh's
# "no matches found" error when the glob matches nothing (e.g. when the only
# entry is a hidden file like .gitignore).
if [ -d "$HOME/.shell.private.d" ]; then
while IFS= read -r file; do
[ -f "$file" ] && source "$file"
done < <(find -L "$HOME/.shell.private.d" -maxdepth 1 -type f ! -name '.*' 2>/dev/null)
fi
# If we have a .private folder, source everything in it. This is useful for
# automatically loading things like project specific secrets.
if [[ -d $HOME/.shell-private.d ]]; then
for private in $HOME/.shell-private.d/*; do
[ -e "$private" ] || continue
source "$private"
done
fi
# If it exists, source my work in progress 'context' project.
context_path="${HOME}/repos/github/dwmkerr/context/context.sh"
if [ -e "${context_path}" ]; then
source "${context_path}"
fi
# Set my preferred prompt.
set_ps1 "dwmkerr" || true