mirror of
https://git.decapod.one/brethil/dotfiles
synced 2024-11-24 12:31:31 +01:00
1. New system to handle oh-my-zsh plugins (stored in the $plugins variable in brethil_dotfile.sh)
2. Added minimal zsh theme (brethil-minimal) 3. Misc improvements to install script 4. Autoupdate script (git pull) 5. New zsh plugins: syntax highlighting, history navigation, alias tips, sudo (type esc twice to add sudo before command) 6. Minor fixes
This commit is contained in:
commit
dcd53f33aa
39
README.md
39
README.md
|
@ -4,8 +4,8 @@
|
||||||
## Description ##
|
## Description ##
|
||||||
|
|
||||||
1. brethil_dotfile.sh: main file sourced by ~/.bash_profile
|
1. brethil_dotfile.sh: main file sourced by ~/.bash_profile
|
||||||
2. aliases.sh: contains alias definitions (sources ~/.bash_aliases)
|
2. aliases.sh: contains alias definitions (sources ~/.dotfiles_aliases)
|
||||||
3. functions.sh: contains function definitions (sources ~/.bash_functions)
|
3. functions.sh: contains function definitions (sources ~/.dotfiles_functions)
|
||||||
4. colors.sh: contains color definitions
|
4. colors.sh: contains color definitions
|
||||||
5. install.sh: run to install brethil's dotfiles
|
5. install.sh: run to install brethil's dotfiles
|
||||||
|
|
||||||
|
@ -15,37 +15,44 @@ Copy the dotfiles folder to the location where you want to keep it and then run
|
||||||
$ cd dotfiles && bash install.sh
|
$ cd dotfiles && bash install.sh
|
||||||
|
|
||||||
Installs oh-my-zsh and sources aliases.sh, functions.sh and colors.sh, as well as installing
|
Installs oh-my-zsh and sources aliases.sh, functions.sh and colors.sh, as well as installing
|
||||||
a a few utilities (see `install.sh`)
|
a a few utilities (see `install.sh`).
|
||||||
|
|
||||||
### Installed programs ###
|
### Installed ###
|
||||||
|
|
||||||
0. oh-my-zsh (zsh config)
|
0. oh-my-zsh (zsh config framework, lots of plugins available at https://github.com/robbyrussell/oh-my-zsh/wiki/Plugins)
|
||||||
|
Two zsh themes: brethil and brethil-minimal.
|
||||||
1. byobu (wrapper/config for tmux, a screen multiplexer)
|
1. byobu (wrapper/config for tmux, a screen multiplexer)
|
||||||
2. grc (generic colourizer, colours output of any command)
|
2. grc/ccze (output colorizers, color output of any command). Usage:
|
||||||
|
$ grc programname
|
||||||
|
$ programname | ccze
|
||||||
3. bmon (bandwidth monitor, shows graphs for bandwith usage)
|
3. bmon (bandwidth monitor, shows graphs for bandwith usage)
|
||||||
3. rmate remote for Textmate (can be called with `mate`/`rmate`)
|
4. rmate remote for Textmate (can be called with `mate`/`rmate`)
|
||||||
|
5. mtr (my traceroute, traceroute+ping network utility)
|
||||||
|
|
||||||
### Available Commands ###
|
### Available Functions ###
|
||||||
|
|
||||||
|
0. `cheat`, show cheat sheet for commands using cheat.sh (`cheat commandname`)
|
||||||
1. Quickly edit/reload profile (`esource`/`resource`)
|
1. Quickly edit/reload profile (`esource`/`resource`)
|
||||||
2. `ramdisk` (only on OSX) create a RAM disk. Default size: 1GB
|
2. `ramdisk` (only on OSX) create a RAM disk. Default size: 1GB
|
||||||
` ramdisk 4`
|
` ramdisk 4`
|
||||||
creates a 4GB RAM disk
|
creates a 4GB RAM disk
|
||||||
3. `color` to print colored text (see 3. in the Misc section):
|
3. `color` to print colored text (see 3. in the Misc section):
|
||||||
color red "This will be printed in red"
|
color $Red "This will be printed in red"
|
||||||
|
color $Yellow "This will be printed in red"
|
||||||
4. `mecp` to copy files back to the machine from wich you are ssh-ing.
|
4. `mecp` to copy files back to the machine from wich you are ssh-ing.
|
||||||
For this to work an ssh tunnel with Remoteforward is needed:
|
For this to work an ssh tunnel with Remoteforward is needed:
|
||||||
ssh -R 22:localhost:2222 YOURHOSTNAMEHERE
|
ssh -R 22:localhost:2222 YOURHOSTNAMEHERE
|
||||||
or specify this in ~/.ssh/config:
|
or specify this in ~/.ssh/config:
|
||||||
Host YOURHOSTNAMEHERE
|
Host YOURHOSTNAMEHERE
|
||||||
Remoteforward 2222 localhost:22
|
Remoteforward 2222 localhost:22
|
||||||
|
This can be enabled in ~/.ssh/config globally for all hosts by uncommenting the relevant `Host * Remoteforward`.
|
||||||
You might have to manually edit the username in the mecp definition in functions.sh if this is
|
You might have to manually edit the username in the mecp definition in functions.sh if this is
|
||||||
different between the two machines. mecp copies by default on the local machine on ~/Desktop/
|
different between the two machines. mecp copies by default on the local machine on ~/Desktop/
|
||||||
5. Many more. Type "list_functions" to list defined functions and a small description
|
5. Many more. Type "list_functions" to list defined functions and a small description
|
||||||
|
|
||||||
|
|
||||||
### Files/Folders ###
|
### Files/Folders ###
|
||||||
1. `~/bin`, `~/python`, `~/projects` folders
|
1. `~/bin`, `~/git`, `~/projects` folders
|
||||||
2. ssh config (`~/.ssh/config`):
|
2. ssh config (`~/.ssh/config`):
|
||||||
* Create ssh keys if not defined already
|
* Create ssh keys if not defined already
|
||||||
* Keep connections alive by increasing timeout time
|
* Keep connections alive by increasing timeout time
|
||||||
|
@ -53,14 +60,18 @@ creates a 4GB RAM disk
|
||||||
* (Optional: Compression, this should allow more responsive shells with slow connections,
|
* (Optional: Compression, this should allow more responsive shells with slow connections,
|
||||||
but will slow things down when copying large files. My suggestion is to have compression enabled
|
but will slow things down when copying large files. My suggestion is to have compression enabled
|
||||||
on a by-host basis in `~/.ssh/config`)
|
on a by-host basis in `~/.ssh/config`)
|
||||||
3. brethil.zsh-theme, theme for oh-my-zsh, installed in ~/.oh-my-zsh/themes/
|
3. brethil.zsh-theme, brethil-minimal.zsh-themes, themes for oh-my-zsh, symlinked in `$ZSH/custom/themes` ($ZSH=~/.oh-my-zsh)
|
||||||
4. ~/.dotfiles_functions, ~/.dotfiles_aliases are sourced by this dotfiles, allowing for custom functions/aliases
|
4. ~/.dotfiles_functions, ~/.dotfiles_aliases are sourced by this dotfiles, allowing for custom functions/aliases
|
||||||
5. useful_commands contains a list of useful commands (the first rule of the tautology club...)
|
5. useful_commands contains a list of useful commands (the first rule of the tautology club...)
|
||||||
|
|
||||||
### Misc ###
|
### Misc ###
|
||||||
|
|
||||||
1. Colored output for `ls`/`grep`/`man`
|
1. Colored output (via `grc`) for: `diff`, `configure`, `make`, `gcc`, `g`, `as`, `gas`, `ld`, `netstat`, `ping`, `traceroute`, `head`, `tail`, `dig`, `mount`, `ps`, `mtr`
|
||||||
2. Easy names for ANSI color escapes (Black, Red, Green, Yellow, Blue, Cyan, Purple, White, CLEAR),
|
2. Easy names for ANSI color escapes (Black, Red, Green, Yellow, Blue, Cyan, Purple, White, CLEAR),
|
||||||
for example:
|
for example:
|
||||||
`echo -e "${Green}This text will be green${CLEAR}"`
|
`echo -e "${Green}This text will be green${CLEAR}"`
|
||||||
will result in green text. Use `$CLEAR` to clear previous escale sequences add B before the variable
|
will result in green text. Use `$CLEAR` to clear previous escape sequences add B before the variable (check colors.sh)
|
||||||
name to use **bold** and U to underline (examples: $BRed, $UBlack for bold red and underlined black)
|
name to use **bold** and U to underline (examples: $BRed, $UBlack for bold red and underlined black)
|
||||||
|
3. Type `esc` twice to add `sudo` before the current command
|
||||||
|
4. Autoupdate script running every two weeks, autoupdate function: dotfiles_selfupdate (or `git pull` from `$DOTFILES` folder)
|
||||||
|
5.
|
72
aliases.sh
72
aliases.sh
|
@ -2,7 +2,6 @@
|
||||||
#### ALIAS #
|
#### ALIAS #
|
||||||
###########################
|
###########################
|
||||||
|
|
||||||
|
|
||||||
####
|
####
|
||||||
#### Easier life (MAC SPECIFIC)
|
#### Easier life (MAC SPECIFIC)
|
||||||
####
|
####
|
||||||
|
@ -11,21 +10,21 @@ if [[ "$(uname)" == "Darwin" ]]; then
|
||||||
alias ls="ls -G"
|
alias ls="ls -G"
|
||||||
## Colorize system.log contents (with grc), and inspect with less.
|
## Colorize system.log contents (with grc), and inspect with less.
|
||||||
alias console="grc cat /var/log/system.log | sort -r | less -R"
|
alias console="grc cat /var/log/system.log | sort -r | less -R"
|
||||||
|
|
||||||
## Quicklook shortcut
|
## Quicklook shortcut
|
||||||
alias quicklook='qlmanage -px 2>/dev/null'
|
alias quicklook='qlmanage -px 2>/dev/null'
|
||||||
alias ql='qlmanage -px'
|
alias ql='quicklook'
|
||||||
|
|
||||||
## Airport command line interface
|
## Airport command line interface
|
||||||
alias airport='/System/Library/PrivateFrameworks/Apple80211.framework/Resources/airport'
|
alias airport='/System/Library/PrivateFrameworks/Apple80211.framework/Resources/airport'
|
||||||
|
|
||||||
## Set an English locale to awk (default is italian, with commas as decimal separators)
|
## Set an English locale to awk (default is italian, with commas as decimal separators)
|
||||||
alias awk='LC_ALL=en_DK awk'
|
alias awk='LC_ALL=en_DK awk'
|
||||||
|
|
||||||
## Flush dns cache
|
## Flush dns cache
|
||||||
#alias dnsflushcache='sudo discoveryutil mdnsflushcache' # used to work until 10.6
|
#alias dnsflushcache='sudo discoveryutil mdnsflushcache' # used to work until 10.6
|
||||||
alias dnsflushcache='sudo killall -HUP mDNSResponder' # Works up until 10.9 and after 10.10.4
|
alias dnsflushcache='sudo killall -HUP mDNSResponder' # Works up until 10.9 and after 10.10.4
|
||||||
|
|
||||||
## Add opened files to Textmate's recent menu item
|
## Add opened files to Textmate's recent menu item
|
||||||
alias mate='mate --recent'
|
alias mate='mate --recent'
|
||||||
fi
|
fi
|
||||||
|
@ -36,11 +35,10 @@ fi
|
||||||
alias bell='echo -en "\007"'
|
alias bell='echo -en "\007"'
|
||||||
|
|
||||||
alias grep="grep --color=auto"
|
alias grep="grep --color=auto"
|
||||||
|
|
||||||
##############
|
##############
|
||||||
## ls aliases
|
## ls aliases
|
||||||
############
|
############
|
||||||
|
|
||||||
|
|
||||||
# ls -al, only show files that start with a dot
|
# ls -al, only show files that start with a dot
|
||||||
alias lsdot="ls -al | awk '\$9 ~ /^\./ {print \$0}'"
|
alias lsdot="ls -al | awk '\$9 ~ /^\./ {print \$0}'"
|
||||||
|
|
||||||
|
@ -58,12 +56,8 @@ alias upcd='. upcd.sh'
|
||||||
## Show the last 10 modified files
|
## Show the last 10 modified files
|
||||||
alias lsrt="ls -lrt | tail -10"
|
alias lsrt="ls -lrt | tail -10"
|
||||||
|
|
||||||
#####################
|
## List open connections, TCP and UDP
|
||||||
#### New features
|
alias listconnections="lsof -n -i TCP -i UDP"
|
||||||
#####################
|
|
||||||
|
|
||||||
## List open connections (+c flag is to show command name with 15 characters (what the system provides))
|
|
||||||
alias listconnections="lsof +c 15 -r -i TCP -i UDP"
|
|
||||||
## Stress (run stress &>/dev/null &)
|
## Stress (run stress &>/dev/null &)
|
||||||
alias stress='yes >> /dev/null'
|
alias stress='yes >> /dev/null'
|
||||||
|
|
||||||
|
@ -74,14 +68,50 @@ alias mdiff="mate -t source.diff"
|
||||||
#### SSH Tunnels #
|
#### SSH Tunnels #
|
||||||
###########################
|
###########################
|
||||||
# define ssh without controlmaster
|
# define ssh without controlmaster
|
||||||
alias ssh1="ssh -o ControlMaster=no"
|
alias ssh1="ssh -o ControlMaster=no"
|
||||||
|
|
||||||
# Colorizing aliases (using grc)
|
|
||||||
alias ps="grc ps"
|
|
||||||
alias ping="grc ping"
|
|
||||||
alias traceroute="grc traceroute"
|
|
||||||
alias mtr="grc mtr"
|
|
||||||
|
|
||||||
|
# Some colorizing options for grc
|
||||||
|
if [[ "$TERM" != dumb ]] && [[ -f $(which grc) ]] ; then
|
||||||
|
# Prevent grc aliases from overriding zsh completions.
|
||||||
|
setopt COMPLETE_ALIASES
|
||||||
|
|
||||||
|
# Supported commands
|
||||||
|
cmds=(
|
||||||
|
ls \
|
||||||
|
cc \
|
||||||
|
configure \
|
||||||
|
cvs \
|
||||||
|
df \
|
||||||
|
diff \
|
||||||
|
dig \
|
||||||
|
gcc \
|
||||||
|
gmake \
|
||||||
|
ifconfig \
|
||||||
|
last \
|
||||||
|
ldap \
|
||||||
|
make \
|
||||||
|
mount \
|
||||||
|
mtr \
|
||||||
|
netstat \
|
||||||
|
ping \
|
||||||
|
ping6 \
|
||||||
|
ps \
|
||||||
|
traceroute \
|
||||||
|
traceroute6 \
|
||||||
|
wdiff \
|
||||||
|
);
|
||||||
|
|
||||||
|
# Set alias for available commands.
|
||||||
|
for cmd in $cmds ; do
|
||||||
|
if [[ -f $(which $cmd) ]] ; then
|
||||||
|
alias $cmd="grc --colour=auto $cmd"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# Clean up variables
|
||||||
|
unset cmds cmd
|
||||||
|
fi
|
||||||
|
|
||||||
if [[ -f ~/.dotfiles_aliases ]];
|
if [[ -f ~/.dotfiles_aliases ]];
|
||||||
then
|
then
|
||||||
|
|
8
brethil-minimal.zsh-theme
Normal file
8
brethil-minimal.zsh-theme
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
ret_status="%(?:%{$fg_bold[green]%}➜%{$reset_color%}:%{$fg[red]%}➜%{$reset_color%})"
|
||||||
|
user="%(#:[root]:)"
|
||||||
|
PROMPT='%{$fg[red]%}${user}%{$reset_color%}[:%{$fg[green]%}%c%{$reset_color%}]$(git_prompt_info) ${ret_status} '
|
||||||
|
|
||||||
|
ZSH_THEME_GIT_PROMPT_PREFIX=" %{$fg[yellow]%}git:("
|
||||||
|
ZSH_THEME_GIT_PROMPT_SUFFIX="%{$fg[yellow]%})%{$reset_color%}"
|
||||||
|
ZSH_THEME_GIT_PROMPT_DIRTY="%{$fg[white]%} %{$fg[red]%}✗%{$reset_color%}"
|
||||||
|
ZSH_THEME_GIT_PROMPT_CLEAN="%{$fg[white]%} %{$fg[green]%}√%{$reset_color%}"
|
|
@ -1,57 +1,47 @@
|
||||||
if [[ "$SHELL" == *"bash" ]]; then
|
# Check for update, set DISABLE_UPDATE_PROMPT=yes to disable the prompt and automatically update
|
||||||
alias resource="source $HOME/.bash_profile"
|
env ZSH=$ZSH DISABLE_UPDATE_PROMPT=$DISABLE_UPDATE_PROMPT DOTFILES=$DOTFILES zsh -f $DOTFILES/check_for_update.sh
|
||||||
alias esource="mate -t source.shell $HOME/.bash_profile"
|
|
||||||
elif [[ "$SHELL" == *"/zsh" ]]; then
|
# oh-my-zsh plugins (some of these have to be installed by running install.sh or install_zsh_plugins, found in install.sh)
|
||||||
alias resource="source $HOME/.zshrc"
|
shared_plugins=(git alias-tips sudo common-aliases fast-syntax-highlighting zsh-autosuggestions colored-man-pages zsh-navigation-tools zsh_reload )
|
||||||
## zsh plugins, these can be installed easily with zplug
|
|
||||||
#if [[ "$(uname)" == "Darwin" ]]; then
|
uname=$(uname -a)
|
||||||
# plugins=(git common-aliases osx macports textmate anybar)
|
if [[ $uname == *"Darwin"* ]]; then
|
||||||
#else
|
if [[ $(which brew) ]]; then
|
||||||
# plugins=(git common-aliases)
|
os_extra=(osx brew)
|
||||||
#fi
|
elif [[ $(which port) ]]; then
|
||||||
|
os_extra=(osx macports)
|
||||||
alias esource="mate -t source.shell $HOME/.zshrc"
|
else
|
||||||
|
os_extra=(osx)
|
||||||
|
fi
|
||||||
|
elif [[ $uname == *"ARCH"* ]]; then
|
||||||
|
os_extra=(archlinux)
|
||||||
|
elif [[ $uname == *"Debian"* ]]; then
|
||||||
|
os_extra=(debian)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
alias dotedit="mate -t source.shell $DOTFILES/brethil_dotfile.sh"
|
|
||||||
alias funedit="mate -t source.shell $DOTFILES/functions.sh"
|
# https://www.xkcd.com/378/
|
||||||
alias aledit="mate -t source.shell $DOTFILES/aliases.sh"
|
export EDITOR="vim"
|
||||||
|
|
||||||
|
plugins=($shared_plugins $os_extra)
|
||||||
|
|
||||||
|
alias esource="$EDITOR $HOME/.zshrc"
|
||||||
|
alias resource="source $HOME/.zshrc"
|
||||||
|
alias dotedit="$EDITOR $DOTFILES/brethil_dotfile.sh"
|
||||||
|
# Custom definitions files
|
||||||
|
alias funedit="$EDITOR ~/.dotfiles_functions.sh"
|
||||||
|
alias aledit="$EDITOR ~/.dotfiles_aliases.sh"
|
||||||
|
|
||||||
# Extras
|
# Extras
|
||||||
functions_file=$DOTFILES/functions.sh # Function definitions
|
functions_file=$DOTFILES/functions.sh # Function definitions
|
||||||
aliases_file=$DOTFILES/aliases.sh # Aliases definitions
|
aliases_file=$DOTFILES/aliases.sh # Aliases definitions
|
||||||
colors_file=$DOTFILES/colors.sh # Colors definitions
|
colors_file=$DOTFILES/colors.sh # Colors definitions
|
||||||
|
|
||||||
|
|
||||||
# Source extras
|
# Source extras
|
||||||
if [ -f $functions_file ]; then source $functions_file; fi
|
if [ -f $functions_file ]; then source $functions_file; else echo "[brethil-dotfiles] Couldn't load functions: $functions_file"; fi
|
||||||
if [ -f $aliases_file ]; then source $aliases_file; fi
|
if [ -f $aliases_file ]; then source $aliases_file; else echo "[brethil-dotfiles] Couldn't load aliases: $aliases_file"; fi
|
||||||
if [ -f $colors_file ]; then source $colors_file; fi
|
if [ -f $colors_file ]; then source $colors_file; else echo "[brethil-dotfiles] Couldn't load colors: $colors_file";fi
|
||||||
|
|
||||||
########################
|
|
||||||
## Make prompt prettier
|
|
||||||
######################
|
|
||||||
if [[ -e $BASH ]]; then
|
|
||||||
export PROMPT_COMMAND='echo -ne "\033]0;${PWD/#$HOME/~}\007"'
|
|
||||||
## This prompt only contains date, username and path, prints a red 'x' when a commands fails
|
|
||||||
#export PS1='[\t][:\w]$(if [[ $? != 0 ]]; then printf "[\[\e[31m\]✗\[\e[0m\]] "; else printf " "; fi)'
|
|
||||||
promptred="\[\033[1;31m\]"
|
|
||||||
promptgreen="\[\033[1;32m\]"
|
|
||||||
promptclear="\[\033[m\]"
|
|
||||||
export PS1="[\t][$promptred\h$promptclear][:$promtgreen\w$promptclear] "
|
|
||||||
|
|
||||||
### Other prompt choices:
|
|
||||||
## This prompt includes includes host name
|
|
||||||
# export PS1='[\t][\h][\u:\w] '
|
|
||||||
## This prompt only includes username, date and path
|
|
||||||
#export PS1='[\t][\u:\w] '
|
|
||||||
fi
|
|
||||||
|
|
||||||
export EDITOR="mate -w"
|
|
||||||
|
|
||||||
### SETUP PATHS ####
|
### SETUP PATHS ####
|
||||||
export PATH=$PATH:$HOME/bin/
|
export PATH=$PATH:$HOME/bin
|
||||||
export PYTHONPATH=$PYTHONPATH:$HOME/python/:$HOME/bin
|
#export PYTHONPATH=$PYTHONPATH:$HOME/python/:$HOME/bin
|
||||||
|
|
||||||
## One can also use most pager instead of less to visualize man pages
|
|
||||||
#export PAGER="most"
|
|
63
check_for_update.sh
Executable file
63
check_for_update.sh
Executable file
|
@ -0,0 +1,63 @@
|
||||||
|
#!/usr/bin/env zsh
|
||||||
|
#
|
||||||
|
# brethil, brutally copied form https://github.com/robbyrussell/oh-my-zsh/blob/master/tools/check_for_upgrade.sh
|
||||||
|
# 14 July 2017
|
||||||
|
|
||||||
|
zmodload zsh/datetime
|
||||||
|
|
||||||
|
function _current_epoch() {
|
||||||
|
echo $(( $EPOCHSECONDS / 60 / 60 / 24 ))
|
||||||
|
}
|
||||||
|
|
||||||
|
function _update_dotfiles_update() {
|
||||||
|
echo "LAST_EPOCH=$(_current_epoch)" >! ~/.dotfiles-update
|
||||||
|
}
|
||||||
|
|
||||||
|
function _upgrade_dotfiles() {
|
||||||
|
(cd $DOTFILES; git pull)
|
||||||
|
# update the zsh file
|
||||||
|
_update_dotfiles_update
|
||||||
|
}
|
||||||
|
|
||||||
|
epoch_target=$UPDATE_ZSH_DAYS
|
||||||
|
if [[ -z "$epoch_target" ]]; then
|
||||||
|
# Default to old behavior
|
||||||
|
epoch_target=13
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Cancel upgrade if the current user doesn't have write permissions for the
|
||||||
|
# dotfiles directory.
|
||||||
|
[[ -w "$DOTFILES" ]] || return 0
|
||||||
|
|
||||||
|
# Cancel upgrade if git is unavailable on the system
|
||||||
|
whence git >/dev/null || return 0
|
||||||
|
|
||||||
|
if mkdir "$DOTFILES/update.lock" 2>/dev/null; then
|
||||||
|
if [ -f ~/.dotfiles-update ]; then
|
||||||
|
. ~/.dotfiles-update
|
||||||
|
|
||||||
|
if [[ -z "$LAST_EPOCH" ]]; then
|
||||||
|
_update_dotfiles_update && return 0;
|
||||||
|
fi
|
||||||
|
|
||||||
|
epoch_diff=$(($(_current_epoch) - $LAST_EPOCH))
|
||||||
|
if [ $epoch_diff -gt $epoch_target ]; then
|
||||||
|
if [ "$DISABLE_UPDATE_PROMPT" = "true" ]; then
|
||||||
|
_upgrade_dotfiles
|
||||||
|
else
|
||||||
|
echo "[brethil dotfiles] Would you like to check for updates? [Y/n]: \c"
|
||||||
|
read line
|
||||||
|
if [[ "$line" == Y* ]] || [[ "$line" == y* ]] || [ -z "$line" ]; then
|
||||||
|
_upgrade_dotfiles
|
||||||
|
else
|
||||||
|
_update_dotfiles_update
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
# create the dotfiles file
|
||||||
|
_update_dotfiles_update
|
||||||
|
fi
|
||||||
|
|
||||||
|
rmdir $DOTFILES/update.lock
|
||||||
|
fi
|
|
@ -73,14 +73,13 @@ On_ICyan='\e[0;106m' # Cyan
|
||||||
On_IWhite='\e[0;107m' # White
|
On_IWhite='\e[0;107m' # White
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# ANSI COLOR ESCAPES 2
|
# ANSI COLOR ESCAPES 2
|
||||||
## Clear all previous sequences
|
## Clear all previous sequences
|
||||||
# Bold text
|
# Bold text
|
||||||
BOLD="\e[1m"
|
BOLD="\e[1m"
|
||||||
# Colors: Black, Blue, Green, Cyan, Red, Purple, Brown, LightGray
|
# Colors: Black, Blue, Green, Cyan, Red, Purple, Brown, LightGray
|
||||||
BLACK="\e[30m"; BLUE="\e[34m"; GREEN="\e[32m"; CYAN="\e[36m";
|
BLACK="\e[30m"; BLUE="\e[34m"; GREEN="\e[32m"; CYAN="\e[36m";
|
||||||
RED="\e\[31m"; PURPLE="\e[35m"; BROWN="\e[33m"; LIGHTGRAY="\e[37m";
|
RED="\e[31m"; PURPLE="\e[35m"; BROWN="\e[33m"; LIGHTGRAY="\e[37m";
|
||||||
DARKGRAY="\e[30m"; LIGHTBLUE="\e[34m"; LIGHTGREEN="\e[32m";
|
DARKGRAY="\e[30m"; LIGHTBLUE="\e[34m"; LIGHTGREEN="\e[32m";
|
||||||
LIGHTCYAN="\e[36m"; LIGHTRED="\e[31m"; LIGHTPURPLE="\e[35m";
|
LIGHTCYAN="\e[36m"; LIGHTRED="\e[31m"; LIGHTPURPLE="\e[35m";
|
||||||
YELLOW="\e[33m"; WHITE="\e[37m"
|
YELLOW="\e[33m"; WHITE="\e[37m"
|
||||||
|
|
193
functions.sh
193
functions.sh
|
@ -1,31 +1,35 @@
|
||||||
###########################
|
###########################
|
||||||
#### Function Definitions #
|
#### Function Definitions #
|
||||||
###########################
|
###########################
|
||||||
|
## Selfupdate
|
||||||
|
function dotfiles_selfupdate
|
||||||
|
{
|
||||||
|
# Pull dotfiles
|
||||||
|
(cd $DOTFILES; git pull)
|
||||||
|
WD=$PWD
|
||||||
|
# Update all git repos in $ZSH/custom/plugins
|
||||||
|
cd $ZSH/custom/plugins
|
||||||
|
for folder in $(ls); do
|
||||||
|
if [[ -f "$folder/.git" ]]; then
|
||||||
|
(cd $folder; git pull)
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
# go back to previous working directory
|
||||||
|
cd $WD
|
||||||
|
}
|
||||||
|
|
||||||
|
## get cheat sheets for commands from cheat.sh. Usage: cheat commandname
|
||||||
|
function cheat
|
||||||
|
{
|
||||||
|
curl cheat.sh/$1
|
||||||
|
}
|
||||||
## Simple calculator. Usage: calc 1+1, calc 5/7, calc "sqrt(2)"
|
## Simple calculator. Usage: calc 1+1, calc 5/7, calc "sqrt(2)"
|
||||||
function calc {
|
function calc
|
||||||
awk "BEGIN { print "$*" }"
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
## Open Man in separate (good looking) window
|
|
||||||
function nman
|
|
||||||
{
|
{
|
||||||
if [ $# -eq 1 ] ;
|
awk "BEGIN { print "$*" }"
|
||||||
then open x-man-page://$1 ;
|
|
||||||
elif [ $# -eq 2 ] ;
|
|
||||||
then open x-man-page://$1/$2 ;
|
|
||||||
fi
|
|
||||||
}
|
}
|
||||||
|
|
||||||
## Open a pdf version of the man in Preview
|
## Make new directory and cd to that directory. Usage: mcd newfolder
|
||||||
function man2pdf
|
|
||||||
{
|
|
||||||
man -t "$1" | open -f -a Preview
|
|
||||||
}
|
|
||||||
|
|
||||||
## Make new directory and cd to that directory
|
|
||||||
function mcd
|
function mcd
|
||||||
{
|
{
|
||||||
mkdir -p $1
|
mkdir -p $1
|
||||||
|
@ -47,36 +51,38 @@ function color
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
## These functions return a colored version of the input string
|
## These functions return a colored version of the input string. Usage: red "string"
|
||||||
function red
|
function red
|
||||||
{
|
{
|
||||||
echo -e "$RED$@$CLEAR"
|
echo -e "$Red$@$CLEAR"
|
||||||
}
|
}
|
||||||
function green {
|
function green
|
||||||
echo -e "$GREEN$@$CLEAR"
|
{
|
||||||
|
echo -e "$Green$@$CLEAR"
|
||||||
}
|
}
|
||||||
function blue {
|
function blue
|
||||||
echo -e "$BLUE$1$CLEAR"
|
{
|
||||||
|
echo -e "$Blue@$CLEAR"
|
||||||
}
|
}
|
||||||
|
|
||||||
## Flashes the screen until user presses a key
|
## Flashes the screen until user presses a key
|
||||||
function flasher
|
function flasher
|
||||||
{
|
{
|
||||||
while true; do printf "\e[?5h\007"; sleep 0.25; printf "\e[?5l"; read -s -n1 -t1 && break; done;
|
while true; do printf "\e[?5h\007"; sleep 0.25; printf "\e[?5l"; read -s -n -t1 && break; done;
|
||||||
}
|
}
|
||||||
|
|
||||||
## Beep until user presses a key
|
## Beep until user presses a key
|
||||||
function beeper
|
function beeper
|
||||||
{
|
{
|
||||||
while true; do printf "\e[?5h\007"; sleep 0.25; printf "\e[?5l"; read -s -n1 -t1 && break; done;
|
while true; do printf "\e[?5h\007"; sleep 0.25; printf "\e[?5l"; read -s -n -t1 && break; done;
|
||||||
}
|
}
|
||||||
|
|
||||||
## Search youtube for string ($1) and play video
|
## Search youtube for string ($1) and play video (uses mplayer)
|
||||||
function pyt
|
function pyt
|
||||||
{
|
{
|
||||||
echo 'https://www.youtube.com/results?search_query='"$(sed 's/ /%20/g' <<< $(tr '\' '+' <<< "$@"))"; id=$(curl -s 'https://www.youtube.com/results?search_query='"$(sed 's/ /%20/g' <<< $(tr '\' '+' <<< "$@"))" | grep -om3 '"[[:alnum:]]\{11\}"' | awk NR==3 | tr -d \"); url='https://www.youtube.com/watch?v='"$id"; echo -e "URL:\t$url"; youtube-dl -q $url -o - | mplayer -vo corevideo -really-quiet /dev/fd/3 3<&0 </dev/tty;
|
echo 'https://www.youtube.com/results?search_query='"$(sed 's/ /%20/g' <<< $(tr '\' '+' <<< "$@"))"; id=$(curl -s 'https://www.youtube.com/results?search_query='"$(sed 's/ /%20/g' <<< $(tr '\' '+' <<< "$@"))" | grep -om3 '"[[:alnum:]]\{11\}"' | awk NR==3 | tr -d \"); url='https://www.youtube.com/watch?v='"$id"; echo -e "URL:\t$url"; youtube-dl -q $url -o - | mplayer -vo corevideo -really-quiet /dev/fd/3 3<&0 </dev/tty;
|
||||||
}
|
}
|
||||||
## Same as above, only play music
|
## Same as above, only play music (uses mplayer)
|
||||||
function pmusic
|
function pmusic
|
||||||
{
|
{
|
||||||
echo 'https://www.youtube.com/results?search_query=HD%20'"$(sed 's/ /%20/g' <<< $(tr '\' '+' <<< "$@"))"; id=$(curl -s 'https://www.youtube.com/results?search_query='HD%20"$(sed 's/ /%20/g' <<< $(tr '\' '+' <<< "$@"))" | grep -om3 '"[[:alnum:]]\{11\}"' | awk NR==3 | tr -d \"); url='https://www.youtube.com/watch?v='"$id"; echo -e "URL:\t$url"; youtube-dl -q $url -o - | mplayer -vo corevideo -really-quiet /dev/fd/3 3<&0 </dev/tty;
|
echo 'https://www.youtube.com/results?search_query=HD%20'"$(sed 's/ /%20/g' <<< $(tr '\' '+' <<< "$@"))"; id=$(curl -s 'https://www.youtube.com/results?search_query='HD%20"$(sed 's/ /%20/g' <<< $(tr '\' '+' <<< "$@"))" | grep -om3 '"[[:alnum:]]\{11\}"' | awk NR==3 | tr -d \"); url='https://www.youtube.com/watch?v='"$id"; echo -e "URL:\t$url"; youtube-dl -q $url -o - | mplayer -vo corevideo -really-quiet /dev/fd/3 3<&0 </dev/tty;
|
||||||
|
@ -99,37 +105,36 @@ function httpserver
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
## Upload something using the transfer.sh service
|
## Upload something using the transfer.sh service. Usage: transfer filename
|
||||||
function transfer
|
function transfer
|
||||||
{
|
{
|
||||||
basefile=$(basename "$1" | sed -e 's/[^a-zA-Z0-9._-]/-/g')
|
basefile=$(basename "$1" | sed -e 's/[^a-zA-Z0-9._-]/-/g')
|
||||||
out=$(curl --progress-bar --upload-file "$1" "https://transfer.sh/$basefile")
|
out=$(curl --progress-bar --upload-file "$1" "https://transfer.sh/$basefile")
|
||||||
echo -e "Done, file at:\t$out"
|
echo -e "Done, file at:\t$out"
|
||||||
echo "$out" | pbcopy
|
if [[ $(uname) == "Darwin" ]]; then
|
||||||
|
echo "$out" | pbcopy
|
||||||
|
else
|
||||||
|
echo "$out"
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
## List defined functions in $DOTFILES/functions.sh
|
## If connecting through ssh and reverse forwarding port 2222 (ssh -R 2222:localhost:22 ), this function allows to copy the files back to the machine one is connecting from by typing 'mecp filename' (configure the username for "localhost" in ~/.ssh/config or add an username)
|
||||||
function list_functions
|
|
||||||
{
|
|
||||||
cat $DOTFILES/functions.sh | grep --color=no -A 1 '^## ' | sed -E 's/function (.*)/\1()/g'
|
|
||||||
}
|
|
||||||
|
|
||||||
# If connecting through ssh and reverse forwarding port 2222 (ssh -R 2222:localhost:22 ), this function allows to copy the files back to the machine one is connecting from by typing 'mecp filename' (configure the username for "localhost" in ~/.ssh/config or add an username)
|
|
||||||
function mecp
|
function mecp
|
||||||
{
|
{
|
||||||
rsync -r -P -e "ssh -p 2222" -R "$@" localhost:~/Desktop/
|
rsync -r -P -e "ssh -p 2222" -R "$@" localhost:~/Desktop/
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
# generate a password using pwgen, generate_password 20 generates a 20 characters long password
|
## generate a password using pwgen, generate_password 20 generates a 20 characters long password
|
||||||
function generate_password
|
function generate_password
|
||||||
{
|
{
|
||||||
pwgen -1sycn $1
|
pwgen -1sycn $1
|
||||||
}
|
}
|
||||||
|
|
||||||
# Generate a password from dev urandom using only printable characters
|
## Generate a password from dev urandom using only printable characters
|
||||||
function genpwd {
|
function genpwd
|
||||||
if [[ -e $1 ]]; then
|
{
|
||||||
|
if [[ $1 ]]; then
|
||||||
strlen=$1
|
strlen=$1
|
||||||
else
|
else
|
||||||
strlen=32
|
strlen=32
|
||||||
|
@ -139,53 +144,79 @@ function genpwd {
|
||||||
|
|
||||||
|
|
||||||
if [[ "$(uname)" == "Darwin" ]]; then
|
if [[ "$(uname)" == "Darwin" ]]; then
|
||||||
# Copy output of previous command to termbin.com (command line pastebin) and put in in clipboard
|
## Copy output of previous command to termbin.com (command line pastebin) and put in in clipboard
|
||||||
function termbin {
|
function termbin
|
||||||
|
{
|
||||||
nc termbin.com 9999 | pbcopy && echo -n "$(pbpaste) --> in clipboard"
|
nc termbin.com 9999 | pbcopy && echo -n "$(pbpaste) --> in clipboard"
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
function termbin {
|
## Copy output of previous command to termbin.com (command line pastebin)
|
||||||
|
function termbin
|
||||||
|
{
|
||||||
nc termbin 9999
|
nc termbin 9999
|
||||||
}
|
}
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
## List defined functions in $DOTFILES/functions.sh
|
||||||
|
function list_functions
|
||||||
|
{
|
||||||
|
cat $DOTFILES/functions.sh | grep --color=no -A 1 '^##' | sed -E 's/function (.*)/\1/g'
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
###########################
|
###########################
|
||||||
## MAC SPECIFIC #
|
## MAC SPECIFIC #
|
||||||
###########################
|
###########################
|
||||||
|
|
||||||
if [[ "$(uname)" == "Darwin" ]];
|
if [[ "$(uname)" == "Darwin" ]]; then
|
||||||
then
|
## Create a RAM disk. Default size 1GB. If supplied, first argument defines the RAM disk size in GB
|
||||||
## Create a RAM disk. Default size 1GB. If supplied, first argument defines the RAM disk size in GB
|
function ramdisk
|
||||||
function ramdisk {
|
{
|
||||||
if [[ -e $1 ]];
|
if [[ -e $1 ]]; then
|
||||||
then
|
sizeingb=$1
|
||||||
sizeingb=$1
|
else
|
||||||
else
|
sizeingb=1
|
||||||
sizeingb=1
|
fi
|
||||||
fi
|
|
||||||
|
# Numsectors is size in bytes / 512 (sector size in bytes)
|
||||||
# Numsectors is size in bytes / 512 (sector size in bytes)
|
name='RAM_disk'
|
||||||
name='RAM_disk'
|
sizeinbytes=$(($sizeingb*1000**3))
|
||||||
sizeinbytes=$(($sizeingb*1000**3))
|
NUMSECTORS=$(($sizeinbytes/512))
|
||||||
NUMSECTORS=$(($sizeinbytes/512))
|
mydev=$(hdiutil attach -nomount ram://$NUMSECTORS )
|
||||||
mydev=$(hdiutil attach -nomount ram://$NUMSECTORS )
|
# strip whitespace (hdiutil outputs a lot of spaces/tabs along with the device name)
|
||||||
# strip whitespace (hdiutil outputs a lot of spaces/tabs along with the device name)
|
mydev=$(echo "$mydev"| xargs echo)
|
||||||
mydev=$(echo "$mydev"| xargs echo)
|
newfs_hfs $mydev
|
||||||
newfs_hfs $mydev
|
mkdir -p "/tmp/$name"
|
||||||
mkdir -p "/tmp/$name"
|
mount -t hfs $mydev "/tmp/$name"
|
||||||
mount -t hfs $mydev "/tmp/$name"
|
echo "RAM Disk mounted: /tmp/$name"
|
||||||
echo "RAM Disk mounted: /tmp/$name"
|
echo "To eject (destroy) RAM disk, use:"
|
||||||
echo "To eject (destroy) RAM disk, use:"
|
echo " $ diskutil eject $mydev"
|
||||||
echo " $ diskutil eject $mydev"
|
}
|
||||||
}
|
|
||||||
|
## Anybar support https://github.com/tonsky/AnyBar
|
||||||
# Anybar support https://github.com/tonsky/AnyBar
|
function anybar
|
||||||
function anybar { echo -n $1 | nc -4u -w0 localhost ${2:-1738}; }
|
{
|
||||||
|
echo -n $1 | nc -4u -w0 localhost ${2:-1738};
|
||||||
fi
|
}
|
||||||
|
|
||||||
|
## Open a pdf version of the man in Preview
|
||||||
|
function man2pdf
|
||||||
|
{
|
||||||
|
man -t "$1" | open -f -a Preview
|
||||||
|
}
|
||||||
|
|
||||||
|
## Open Man in separate (different-looking) window
|
||||||
|
function nman
|
||||||
|
{
|
||||||
|
if [ $# -eq 1 ] ; then
|
||||||
|
open x-man-page://$1 ;
|
||||||
|
elif [ $# -eq 2 ] ; then
|
||||||
|
open x-man-page://$1/$2 ;
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
fi # end of mac-specific functions
|
||||||
|
|
||||||
|
|
||||||
if [[ -f ~/.dotfiles_functions ]];
|
if [[ -f ~/.dotfiles_functions ]]; then
|
||||||
then
|
source ~/.dotfiles_functions
|
||||||
source ~/.dotfiles_functions
|
|
||||||
fi
|
fi
|
||||||
|
|
230
install.sh
230
install.sh
|
@ -5,38 +5,45 @@
|
||||||
# Get the location for the dotfiles
|
# Get the location for the dotfiles
|
||||||
DOTFILES=$PWD
|
DOTFILES=$PWD
|
||||||
|
|
||||||
echo -e "\n\n# Beginning of brethil's dotfiles:" >> ~/.zshrc
|
ZSHTMP="$HOME/.zshrctmp"
|
||||||
echo "DOTFILES=$DOTFILES" >> ~/.zshrc
|
echo -e "\n\n# brethil's dotfiles:" >> $ZSHTMP
|
||||||
echo "source \$DOTFILES/brethil_dotfile.sh" >> ~/.zshrc
|
echo "DOTFILES=$DOTFILES" >> $ZSHTMP
|
||||||
|
echo "source \$DOTFILES/brethil_dotfile.sh" >> $ZSHTMP
|
||||||
|
echo -e "# End of brethil's dotfiles\n\n"
|
||||||
function install_rmate {
|
function install_rmate {
|
||||||
## Ruby version:
|
# Install python version of the textmate rmate remote (from github)
|
||||||
#curl -Lo ~/bin/rmate https://raw.github.com/textmate/rmate/master/bin/rmate
|
|
||||||
## Python version:
|
|
||||||
echo "Installing rmate (python)..."
|
|
||||||
if [[ $(whoami) == "root" ]]; then
|
if [[ $(whoami) == "root" ]]; then
|
||||||
destpath="/usr/bin"
|
destpath="/usr/bin"
|
||||||
else
|
else
|
||||||
destpath="$HOME/bin"
|
destpath="$HOME/bin"
|
||||||
fi
|
fi
|
||||||
curl -sL https://raw.githubusercontent.com/sclukey/rmate-python/master/bin/rmate >> $destpath/rmate
|
if [[ -f $destpath/rmate ]]; then
|
||||||
chmod a+x $destpath/rmate
|
echo "rmate already exists: not installed"
|
||||||
ln -s $destpath/rmate $destpath/mate || "Could not create symbolic link to $destpath/mate (already exists?)"
|
return -1
|
||||||
echo "Installed rmate (and mate symlink) in $destpath"
|
else
|
||||||
|
curl -sL https://raw.githubusercontent.com/sclukey/rmate-python/master/bin/rmate > $destpath/rmate
|
||||||
|
chmod a+x $destpath/rmate
|
||||||
|
ln -s $destpath/rmate $destpath/mate || "Could not create symbolic link to $destpath/mate (already exists?)"
|
||||||
|
echo "Installed rmate (and mate symlink) in $destpath"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
function install_vimrc {
|
function install_vimrc {
|
||||||
git clone https://github.com/amix/vimrc.git $HOME/.vim_runtime
|
# Install vimrc from github.com/amix/vimrc
|
||||||
sh $HOME/.vim_runtime/install_awesome_vimrc.sh
|
git clone https://github.com/amix/vimrc.git $HOME/.vim_runtime && sh $HOME/.vim_runtime/install_awesome_vimrc.sh || return -1
|
||||||
}
|
}
|
||||||
|
|
||||||
function install_zsh_plugins {
|
function install_zsh_plugins {
|
||||||
# Install fast-syntax-highlighting zsh-autosuggestions
|
# Install fast-syntax-highlighting (git: zdharma), zsh-autosuggestions (git:zsh-users)
|
||||||
ZSH_PLUGINS="$HOME/.oh-my-zsh/custom/plugins"
|
ZSH_PLUGINS="$HOME/.oh-my-zsh/custom/plugins"
|
||||||
git clone https://github.com/zdharma/fast-syntax-highlighting.git ${ZSH_PLUGINS}/fast-syntax-highlighting
|
git clone https://github.com/zdharma/fast-syntax-highlighting.git ${ZSH_PLUGINS}/fast-syntax-highlighting || error=true
|
||||||
git clone git://github.com/zsh-users/zsh-autosuggestions ${ZSH_PLUGINS}/zsh-autosuggestions
|
git clone git://github.com/zsh-users/zsh-autosuggestions ${ZSH_PLUGINS}/zsh-autosuggestions || error=true
|
||||||
|
if [[ $error ]]; then
|
||||||
|
return -1
|
||||||
|
else
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# Add an ssh config file with:
|
# Add an ssh config file with:
|
||||||
|
@ -47,14 +54,22 @@ function create_ssh_config {
|
||||||
|
|
||||||
ssh_config="$HOME/.ssh/config"
|
ssh_config="$HOME/.ssh/config"
|
||||||
|
|
||||||
if [ ! -d $HOME/.ssh/id_rsa ]; then
|
if [ ! -f $HOME/.ssh/id_rsa ]; then
|
||||||
ssh-keygen -t rsa -b 4096
|
echo "Creating ssh key (4096bit)..."
|
||||||
|
|
||||||
|
echo "Enter ssh-key comment (leave empty for default: user@host)"
|
||||||
|
read comment
|
||||||
|
if [[ $comment ]]; then
|
||||||
|
ssh-keygen -t rsa -b 4096 -C $comment
|
||||||
|
else
|
||||||
|
ssh-keygen -t rsa -b 4096
|
||||||
|
fi
|
||||||
|
# fix permissions
|
||||||
chmod 0700 "$HOME/.ssh"
|
chmod 0700 "$HOME/.ssh"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ -f $ssh_config ]]; then
|
if [[ -f $ssh_config ]]; then
|
||||||
while [ "$modifyssh" != "y" ] && [ "$modifyssh" != "n" ]
|
until [[ $modifyssh == "y" || $modifyssh == "n" ]]; do
|
||||||
do
|
|
||||||
echo "Do you want to modify the existing ssh config? (New values will be appended) (y/n)"
|
echo "Do you want to modify the existing ssh config? (New values will be appended) (y/n)"
|
||||||
read modifyssh
|
read modifyssh
|
||||||
done
|
done
|
||||||
|
@ -62,118 +77,144 @@ function create_ssh_config {
|
||||||
|
|
||||||
if [[ "$modifyssh" != "n" ]]
|
if [[ "$modifyssh" != "n" ]]
|
||||||
then
|
then
|
||||||
echo "# brethil's dotfiles setup start" >> $ssh_config
|
echo "# brethil's dotfiles setup start" >> $ssh_config
|
||||||
echo 'TCPKeepAlive=yes' >> $ssh_config
|
echo 'TCPKeepAlive=yes' >> $ssh_config
|
||||||
echo 'ServerAliveCountMax=6' >> $ssh_config
|
echo 'ServerAliveCountMax=6' >> $ssh_config
|
||||||
|
|
||||||
## Compression will slow things down when copying large files, but improve
|
echo "## Uncomment to enable compression for all ssh sessions" >> $ssh_config
|
||||||
## speed if only using a shell, my reccommendation is to enable it on a by-host
|
echo '#Compression=yes' >> $ssh_config
|
||||||
## basis in ~/.ssh/config
|
|
||||||
#echo ' Compression=yes' >> $ssh_config
|
|
||||||
|
|
||||||
#echo 'ControlMaster auto' >> $ssh_config
|
echo '## Uncomment the following to enable ssh ControlMaster and ssh session persistence' >> $ssh_config
|
||||||
#echo 'ControlPath /tmp/%r@%h:%p' >> $ssh_config
|
echo '#ControlMaster auto' >> $ssh_config
|
||||||
#echo 'ControlPersist yes' >> $ssh_config
|
echo '#ControlPath /tmp/%r@%h:%p' >> $ssh_config
|
||||||
echo 'Host *' >> $ssh_config
|
echo '#ControlPersist yes' >> $ssh_config
|
||||||
echo 'ServerAliveInterval 300' >> $ssh_config
|
echo 'Host *' >> $ssh_config
|
||||||
echo '# end of brethil dotfiles setup #' >> $ssh_config
|
echo 'ServerAliveInterval 300' >> $ssh_config
|
||||||
|
echo '## Enable the following if you want to use the rmate textmate remote' >> $ssh_config
|
||||||
|
echo "#Host *" >> $ssh_config
|
||||||
|
echo "#RemoteForward 52698 localhost:52698" >> $ssh_config
|
||||||
|
echo '## Enable the following if you want to use a reverse ssh tunnel to use mecp command on remote hosts' >> $ssh_config
|
||||||
|
echo "Host *" >> $ssh_config
|
||||||
|
echo "Remoteforward 2222 localhost:22" >> $ssh_config
|
||||||
|
echo '# end of brethil dotfiles setup #' >> $ssh_config
|
||||||
|
|
||||||
## Enable the following if you want to use the rmate textmate remote
|
echo ".ssh/ssh_config configured check it to enable custom options:"
|
||||||
#echo "Host *" >> $ssh_config
|
echo "- Compression"
|
||||||
#echo "RemoteForward 52698 localhost:52698" >> $ssh_config
|
echo "- Remote forwarding port 52698->52698 (Textmate rmate remote)"
|
||||||
## Enable the following if you want to use a reverse ssh tunnel (mecp)
|
echo "- Remote forwarding remote:2222->localhost:22 (mecp)"
|
||||||
#echo "Host *" >> $ssh_config
|
|
||||||
#echo "Remoteforward 2222 localhost:22" >> $ssh_config
|
|
||||||
|
|
||||||
#
|
|
||||||
echo ".ssh folder configured, enabled ControlMaster for all connections."
|
|
||||||
echo "Compression disabled, enable by uncommenting 'Compression' in ~/.ssh/config"
|
|
||||||
echo "Remote forwarding port 52698->52698 (Textmate) and port 2222->22 (mecp) for all hosts."
|
|
||||||
else
|
else
|
||||||
echo "Did not modify $ssh_config."
|
echo "Did not modify $ssh_config."
|
||||||
fi
|
fi
|
||||||
echo "# End of ssh config."
|
echo "# End of ssh config."
|
||||||
}
|
}
|
||||||
|
|
||||||
# Run after first copying to a remote machine
|
# First setup
|
||||||
function brethil_dotfiles_setup {
|
function brethil_dotfiles_setup {
|
||||||
bin="$HOME/bin/"
|
bin="$HOME/bin"
|
||||||
#python="$HOME/python"
|
|
||||||
projects="$HOME/projects"
|
projects="$HOME/projects"
|
||||||
git="$HOME/git"
|
git="$HOME/git"
|
||||||
mkdir -p "$bin"
|
mkdir -p "$bin" "$projects" "$git" && echo "Created dirs $bin, $projects, $git"
|
||||||
mkdir -p "$projects"
|
|
||||||
mkdir -p "$git"
|
|
||||||
|
|
||||||
|
|
||||||
echo "Created dirs $bin, $projects, $git"
|
|
||||||
|
|
||||||
|
|
||||||
# Install packages
|
# Install packages
|
||||||
# zsh
|
# zsh
|
||||||
# byobu: configuration/wrapper for tmux
|
|
||||||
# grc: generic colourizer, colors output of any command
|
# grc: generic colourizer, colors output of any command
|
||||||
|
# ccze: similar to the above
|
||||||
|
# byobu: configuration/wrapper for tmux
|
||||||
# bmon: bandwidth monitor, monitors bandwith usage, shows graph
|
# bmon: bandwidth monitor, monitors bandwith usage, shows graph
|
||||||
# mtr: mytraceroute, traceroute tool
|
# mtr: mytraceroute, traceroute tool
|
||||||
# pv: pipe view, monitor the progress of data through a pipe
|
# pv: pipe view, monitor the progress of data through a pipe
|
||||||
# byobu: tmux wrapper
|
# byobu: tmux wrapper
|
||||||
packages="zsh git grc bmon mtr pv tmux byobu"
|
packages="zsh git grc ccze bmon mtr pv tmux byobu"
|
||||||
|
|
||||||
# Check if running as root, if not, quit.
|
# Check if running as root, if try using sudo to install packages.
|
||||||
if [[ ! $(id -g) == 0 ]]; then
|
# If sudo is not installed, launch a shell to try and install it
|
||||||
echo "This has to be run as root to install new software from the repos. Quitting..."
|
if [[ $(id -u) != 0 ]]; then
|
||||||
exit 0
|
if [[ ! -f $(which sudo) ]] ; then
|
||||||
|
unset yn
|
||||||
|
until [[ $yn == "y" || $yn == "n" ]]; do
|
||||||
|
echo "Cannot install new packages without root access. Do you want to try to manually install sudo? (yn) "
|
||||||
|
read yn
|
||||||
|
done
|
||||||
|
if [[ $yn == "y" ]]; then
|
||||||
|
echo "Launching an interactive shell. Type exit after installing sudo."
|
||||||
|
# Launch bash
|
||||||
|
$(which bash)
|
||||||
|
else
|
||||||
|
echo "Quitting."
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
elif [[ -f $(which sudo) ]]; then
|
||||||
|
sudo="sudo "
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ $(which apt-get ) ]]; then
|
if [[ $(which apt-get ) ]]; then
|
||||||
install_command="apt-get install"
|
install_command="${sudo}apt-get install"
|
||||||
elif [[ $(which pacman) ]]; then
|
elif [[ $(which pacman) ]]; then
|
||||||
install_command="pacman -Sy"
|
install_command="${sudo}pacman -Sy"
|
||||||
elif [[ $(which yum) ]]; then
|
elif [[ $(which yum) ]]; then
|
||||||
install_command="yum"
|
install_command="${sudo}yum"
|
||||||
elif [[ $(which port) ]]; then
|
elif [[ $(which port) ]]; then
|
||||||
install_command="port install"
|
install_command="${sudo}port install"
|
||||||
elif [[ $(which brew) ]]; then
|
elif [[ $(which brew) ]]; then
|
||||||
install_command="brew install"
|
install_command="${sudo}brew install"
|
||||||
else
|
else
|
||||||
echo "Could not install required packages"
|
echo "I do not know how to install the required packages. Quitting."
|
||||||
error=true
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ ! $error ]]; then
|
$install_command $packages
|
||||||
$install_command $packages
|
# Install oh-my-zsh
|
||||||
# Install oh-my-zsh
|
echo "Installing oh-my-zsh..."
|
||||||
echo "Installing oh-my-zsh..."
|
sh -c "$(curl -sL zsh.dioporc.one)"
|
||||||
sh -c "$(curl -sL zsh.dioporc.one)"
|
|
||||||
|
# oh-my-zsh's zshrc has been installed, prepend the dotfiles setup to it
|
||||||
## Fix scrolling in byobu
|
cat $HOME/.zshrc >> $ZSHTMP
|
||||||
|
mv $ZSHTMP $HOME/.zshrc
|
||||||
|
|
||||||
|
# Increase history size
|
||||||
|
echo "export HISTSIZE=100000" >> $HOME/.zshrc
|
||||||
|
|
||||||
|
## Fix scrolling in byobu
|
||||||
|
if [[ $(uname) == "Darwin" ]]; then
|
||||||
|
sed -i '' 's/set -g terminal-overrides/#set -g terminal-overrides/' /usr/share/byobu/profiles/tmux
|
||||||
|
else
|
||||||
sed -i 's/set -g terminal-overrides/#set -g terminal-overrides/' /usr/share/byobu/profiles/tmux
|
sed -i 's/set -g terminal-overrides/#set -g terminal-overrides/' /usr/share/byobu/profiles/tmux
|
||||||
|
|
||||||
echo "bind m setw -g mode-mouse on" >> ~/.tmux.conf
|
|
||||||
echo "bind M setw -g mode-mouse off" >> ~/.tmux.conf
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Set m and M to enable/disable mouse mode in tmux/byobu
|
||||||
|
echo 'bind-key m source $BYOBU_PREFIX/share/byobu/keybindings/mouse.tmux.enable \; display-message "Mouse: ON"' >> ~/.tmux.conf
|
||||||
|
echo 'bind-key M source $BYOBU_PREFIX/share/byobu/keybindings/mouse.tmux.disable \; display-message "Mouse: Off"' >> ~/.tmux.conf
|
||||||
|
|
||||||
# Install the rmate client for textmate
|
# Install the rmate client for textmate
|
||||||
install_rmate
|
inhstall_rmate && echo "Installed rmate Textmate remote "|| echo "Failed to install rmate Textmate remote"
|
||||||
|
|
||||||
# Install vim awesomerc (git amix/vimrc)
|
# Install vim awesomerc (git amix/vimrc)
|
||||||
install_vimrc
|
install_vimrc && echo "Installed vim awesome rc" || echo "Failed to install vim awesome rc"
|
||||||
# Create ssh config
|
# Create ssh config
|
||||||
create_ssh_config
|
create_ssh_config
|
||||||
|
|
||||||
# Install new zsh plugins in $ZSH/custom/plugins/
|
# Install new zsh plugins in $ZSH/custom/plugins/
|
||||||
install_zsh_plugins
|
install_zsh_plugins && echo "Installed custom zsh plugins in $ZSH/custom/plugins/" || echo "Failed to install custom zsh plugins"
|
||||||
|
|
||||||
# Comment enabled plugins in ~/.zshrc
|
# Source the plugins defined in brethil_dotfile.sh ($plugins)
|
||||||
sed -e '/plugins=\(\.*\)/ s/^#*/#/' -i $HOME/.zshrc
|
if [[ $(uname) == "Darwin" ]]; then # MacOS has a different syntax for sed
|
||||||
# Enable these plugins:
|
sed -i "" -e 's/plugins=.*/plugins=\( $plugins \)/' $HOME/.zshrc
|
||||||
plugins="plugins=(git common-aliases fast-syntax-highlighting zsh-autosuggestions colored-man-pages)"
|
else
|
||||||
echo $plugins >> $HOME/.zshrc
|
sed -i -e 's/plugins=.*/plugins=\( $plugins \)/' $HOME/.zshrc
|
||||||
|
fi
|
||||||
|
|
||||||
# Copy brethil.zsh-theme
|
# Symlink brethil.zsh-theme
|
||||||
ln -s $DOTFILES/brethil.zsh-theme $HOME/.oh-my-zsh/themes/
|
ln -s $DOTFILES/brethil.zsh-theme $HOME/.oh-my-zsh/themes/
|
||||||
|
# Symlink brethil-minimal.zsh-theme
|
||||||
|
ln -s $DOTFILES/brethil-minimal.zsh-theme $HOME/.oh-my-zsh/themes/
|
||||||
|
|
||||||
# Set brethil theme
|
# Set brethil theme
|
||||||
sed -i 's/ZSH_THEME=".*"/ZSH_THEME="brethil"/' $HOME/.zshrc
|
if [[ $(uname) == "Darwin" ]]; then # MacOS has a different syntax for sed
|
||||||
|
sed -i '' 's/ZSH_THEME=".*"/ZSH_THEME="brethil"/' $HOME/.zshrc
|
||||||
|
else
|
||||||
|
sed -i 's/ZSH_THEME=".*"/ZSH_THEME="brethil"/' $HOME/.zshrc
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -181,9 +222,8 @@ function brethil_dotfiles_setup {
|
||||||
# Setup
|
# Setup
|
||||||
brethil_dotfiles_setup
|
brethil_dotfiles_setup
|
||||||
|
|
||||||
echo "Functions are defined in $DOTFILES/functions.sh (you can add extra functions in ~/.dotfiles_functions)"
|
echo "Functions definitions in $DOTFILES/functions.sh (you can add your own functions in ~/.dotfiles_functions)"
|
||||||
echo "Aliases are defined in $DOTFILES/aliases.sh (you can add extra aliases in ~/.dotfiles_aliases)"
|
echo "Aliases definitions in $DOTFILES/aliases.sh (you can add your own aliases in ~/.dotfiles_aliases)"
|
||||||
echo "Colors are defined in $DOTFILES/colors.sh"
|
echo "Colors are defined in $DOTFILES/colors.sh"
|
||||||
echo "These 3 files are sourced by $DOTFILES/brethil_dotfile.sh, which is in turn sourced by ~/.zshrc"
|
|
||||||
|
|
||||||
echo "Type . ~/.zshrc to source the new dotfiles, or simply launch another shell."
|
echo "Type . ~/.zshrc to source the new dotfiles, or simply launch another shell. )"
|
||||||
|
|
Loading…
Reference in New Issue
Block a user