Initial commit of very basic dotfiles

This commit is contained in:
Dave Lens
2012-04-26 11:55:03 +02:00
parent fc2a690f83
commit dd60bd7ba6
12 changed files with 3301 additions and 0 deletions
+1
View File
@@ -0,0 +1 @@
alias lsa='ls -hal --color=tty'
+7
View File
@@ -0,0 +1,7 @@
#!/bin/bash
# returns the active git branch - this is used in rewrite_prompt()
git_branch()
{
git branch --no-color 2>/dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(branch: \1)/'
}
+89
View File
@@ -0,0 +1,89 @@
#!/bin/bash
##################################################
# Fancy PWD display function
##################################################
# The home directory (HOME) is replaced with a ~
# The last pwdmaxlen characters of the PWD are displayed
# Leading partial directory names are striped off
# /home/me/stuff -> ~/stuff if username=me
# /usr/share/big_dir_name -> ../share/big_dir_name if pwdmaxlen=20
##################################################
rewrite_pwd()
{
# how many characters of the $PWD should be kept
local pwdmaxlen=25
# indicate that there has been dir truncation
local trunc_symbol=".."
local dir=${PWD##*/}
pwdmaxlen=$(( ( pwdmaxlen < ${#dir} ) ? ${#dir} : pwdmaxlen ))
NEW_PWD=${PWD/$HOME/~}
local pwdoffset=$(( ${#NEW_PWD} - pwdmaxlen ))
if [ ${pwdoffset} -gt "0" ]
then
NEW_PWD=${NEW_PWD:$pwdoffset:$pwdmaxlen}
NEW_PWD=${trunc_symbol}/${NEW_PWD#*/}
fi
}
# rewrites the PS1 bash prompt var
rewrite_prompt()
{
local NONE='\[\033[0m\]' # unsets color to term's fg color
# regular colors
local K='\[\033[0;30m\]' # black
local R='\[\033[0;31m\]' # red
local G='\[\033[0;32m\]' # green
local Y='\[\033[0;33m\]' # yellow
local B='\[\033[0;34m\]' # blue
local M='\[\033[0;35m\]' # magenta
local C='\[\033[0;36m\]' # cyan
local W='\[\033[0;37m\]' # white
# empahsized (bolded) colors
local EMK='\[\033[1;30m\]'
local EMR='\[\033[1;31m\]'
local EMG='\[\033[1;32m\]'
local EMY='\[\033[1;33m\]'
local EMB='\[\033[1;34m\]'
local EMM='\[\033[1;35m\]'
local EMC='\[\033[1;36m\]'
local EMW='\[\033[1;37m\]'
# background colors
local BGK='\[\033[40m\]'
local BGR='\[\033[41m\]'
local BGG='\[\033[42m\]'
local BGY='\[\033[43m\]'
local BGB='\[\033[44m\]'
local BGM='\[\033[45m\]'
local BGC='\[\033[46m\]'
local BGW='\[\033[47m\]'
local UC=$C # username's color
[ $UID -eq "0" ] && UC=$R # root's color
# rewrite prompt
PS1="${G}\u@\h> \${NEW_PWD} ${C}\$(git_branch)\${NONE}${NONE}\n$ "
}
# adds ~/.ssh/config to the ssh autocomplete
ssh_load_autocomplete()
{
complete -W "$(awk '/^\s*Host\s*/ { sub(/^\s*Host /, ""); print; }' ~/.ssh/config)" ssh
}
# adds Git autocompletion
if [ -f ~/.bin/git-completion.bash ]; then
. ~/.bin/git-completion.bash
fi
PROMPT_COMMAND=rewrite_pwd
rewrite_prompt
+19
View File
@@ -0,0 +1,19 @@
#!/bin/bash
# General settings
export EDITOR=vim
export CLICOLOR=1
# Prefer the Queen's English and use UTF-8.
export LC_ALL='en_GB.UTF-8';
export LANG='en_GB';
# don't put duplicate lines in the history
export HISTCONTROL=ignoredups
# let the history ignore the following commands
export HISTIGNORE="ls:ll:la:pwd:clear:h:j"
# append to the history file rather than overwriting
shopt -s histappend
shopt -s nocaseglob;
+8
View File
@@ -0,0 +1,8 @@
#!/bin/bash
# Source the files in the bash folder
for file in ~/.bash/{shell,commands,prompt,aliases}; do
[ -r "$file" ] && source "$file";
done;
unset file;
+28
View File
@@ -0,0 +1,28 @@
# This might seem backwards when you look at the "Bash startup files" reference
# <http://www.gnu.org/software/bash/manual/bashref.html#Bash-Startup-Files> or
# the "INVOCATION" section in the man page. However, my workflow typically is:
#
# * Open a terminal with four shells in tabs
# * Edit code in Vim, and shell out using ":sh"
#
# The initial four shells are login shells, so they source ~/.bash_profile.
# The shells spawned by Vim are not login shells, but they /are/ interactive.
# They look for .bashrc, but not .bash_profile. Because they are interactive,
# PS1 is set, so I know it is OK to run all the shell initialisation code.
#
# If I were to put the contents of ~/.bash_profile in ~/.bashrc and make the
# former source the latter, I would have to wrap the entire contents of the
# latter in a huge "if [ -n "$PS1" ]; then ... fi" block. That does not really
# help readability, does it?
#
# The difference between a login shell and an interactive non-login shell is
# moot for me, so I consider all interactive shells to be equal and wanting
# the same treatment.
#
# If you're wondering what a non-interactive shell might be, i.e. when PS1
# might not be set, try this:
#
# ssh localhost 'echo "PS1: >$PS1<"'
#
[ -n "$PS1" ] && source ~/.bash_profile;
File diff suppressed because it is too large Load Diff
+76
View File
@@ -0,0 +1,76 @@
[pretty]
concise = %C(yellow)%h%C(reset) %s %C(bold black)(%an, %ar)%C(reset)%C(bold blue)%d%C(reset)
[alias]
# When doing "git git log" or some such, do not complain about "git" not
# being a valid Git command. This happens when copy-pasting examples, for
# instance.
git = !git
# Show a concise status of the working directory, along with the branch
# and the number of commits behind and/or ahead.
st = status --short --branch
# Quickly push to the most common destination.
pom = push origin master
# Quickly push to the origin
po = push origin
# Quickly pull from the origin
pu = pull origin
# I know "pum" could just as well stand for "PUsh" instead of "PUll", but
# I am so used to "git pom" that "git pum" feels like a natural
# counterpart. I always try to rebase to prevent unnecessary merge
# commits.
pum = pull --rebase origin master
# Show the staged changes.
dc = diff --cached
# Commit
ci = commit
# Like "git show myfile", but uses the last commit that changed "myfile".
sl = log -n 1 -p
# Switch branches, creating them if necessary. I want to unlearn using
# "git checkout" for switching between branches because of the possible
# dataloss when not paying attention. (You could see the PEBKAC, but I
# could reply with another four letter acronym, slightly resembling TOFU.)
#
# Suppose I have modified a file named "password" and have two branches,
# "password-expiry-mechanism" and "password-reset-mail". If I want to
# switch to either branch, I would type "git checkout pass<Tab><Enter>",
# but the autocomplete would stop at "git checkout password" because of
# the ambiguity. Because I press <Enter> without really thinking, I have
# now reset my "password" file. With "git go pass<Tab><Enter>", I would
# simply have created a new branch called "password". (I would be forced
# to use "--" to separate paths from banch names, which is a Good Thing™.)
cob = checkout -B
co = checkout
# Make life easier, we only need git aa to add/remove git files
aa = add --all
# Show pretty log
ll = !git pgl --all
# Show only 20 git log items
l = !git pgl -20
# Show a git log with detailed log information.
pgl = "!source ~/.githelpers && pretty_git_log"
[core]
excludesfile = ~/.gitignore
autocrlf = input
safecrlf = true
[color]
ui = true
[merge]
tool = vimdiff
+147
View File
@@ -0,0 +1,147 @@
# History
# -----------------------------------------------------------------------------
# Use more intelligent Up/Down behaviour: use the text that has already been
# typed as the prefix for searching through commands, like in Vim.
"\e[B": history-search-forward
"\e[A": history-search-backward
# Remember the cursor position for each history line. Note that this only works
# for previous-history and next-history, and apparently not (or not so well)
# with my Up/Down key bindings history-search-{back,for}ward.
set history-preserve-point on
# Autocompletion
# -----------------------------------------------------------------------------
# Make Tab autocompletion case-insensitive (cd ~/dow<Tab> => cd ~/Downloads/).
set completion-ignore-case On
# When autocompleting symlinks to directories, immediately add a trailing "/".
set mark-symlinked-directories on
# Flip through autocompletion matches with Shift-Tab.
"\e[Z": menu-complete
# Do not autocomplete hidden files ("dot 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
# Immediately show all possible completions.
set show-all-if-ambiguous on
# 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
# Line editing
# -----------------------------------------------------------------------------
# Allow UTF-8 input and output, instead of showing them 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
# Delete for wonky terminals.
"\e[3~": delete-char
# Use Ctrl+␠and Ctrl+⒠(or Alt/Meta, or Esc) to move between words.
"\e[1;5D": backward-word
"\e[1;3D": backward-word
"\e[5D": backward-word
"\e\e[D": backward-word
"\e[1;5C": forward-word
"\e[1;3C": forward-word
"\e[5C": forward-word
"\e\e[C": forward-word
# Miscellaneous
# -----------------------------------------------------------------------------
# Neither sound a beep nor flash the screen when trying to ring the bell.
set bell-style none
# History
# -----------------------------------------------------------------------------
# Use more intelligent Up/Down behaviour: use the text that has already been
# typed as the prefix for searching through commands, like in Vim.
"\e[B": history-search-forward
"\e[A": history-search-backward
# Remember the cursor position for each history line. Note that this only works
# for previous-history and next-history, and apparently not (or not so well)
# with my Up/Down key bindings history-search-{back,for}ward.
set history-preserve-point on
# Autocompletion
# -----------------------------------------------------------------------------
# Make Tab autocompletion case-insensitive (cd ~/dow<Tab> => cd ~/Downloads/).
set completion-ignore-case On
# When autocompleting symlinks to directories, immediately add a trailing "/".
set mark-symlinked-directories on
# Flip through autocompletion matches with Shift-Tab.
"\e[Z": menu-complete
# Do not autocomplete hidden files ("dot 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
# Immediately show all possible completions.
set show-all-if-ambiguous on
# 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
# Line editing
# -----------------------------------------------------------------------------
# Allow UTF-8 input and output, instead of showing them 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
# Delete for wonky terminals.
"\e[3~": delete-char
# Use Alt+← and Alt+→ to move between words.
"\e[1;9D": backward-word
"\e[1;9C": forward-word
# Use Control+← and Control+→
"\e[1;5D": backward-word
"\e[1;5C": forward-word
# Miscellaneous
# -----------------------------------------------------------------------------
# Neither sound a beep nor flash the screen when trying to ring the bell.
set bell-style none
+11
View File
@@ -0,0 +1,11 @@
set encoding=utf-8
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" When editing a file, always jump to the last known cursor position.
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
autocmd BufReadPost * if line("'\"") > 0 && line("'\"") <= line("$") | exe "normal g`\"" | endif
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Delete trailing whitespaces on saving a file
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
autocmd BufWritePre * :%s/\s\+$//e
+2
View File
@@ -12,3 +12,5 @@ These files will replace any personal dotfiles to prevent unexpected behavior.
- Must show if we are on staging, test or production
- Must show the current branch we are on, in case of a git repo
- Aliases to show list of recursive folder -and dirsizes
- Git information with handy aliases and pretty= formats
- install/uninstall
Executable
+94
View File
@@ -0,0 +1,94 @@
#!/bin/bash
# Go trough all the files available in this folder.
commonFiles=();
for sourceFile in .*; do
# Exclude some files.
if [[ "$sourceFile" == "dotfiles-002.png" || "$sourceFile" == "dotfiles-001.png" || "$sourceFile" == "install.sh" ]] || [[ "$sourceFile" == "README.md" ]] || [[ "$sourceFile" == "." ]] || [[ "$sourceFile" == ".." ]] || [[ "$sourceFile" == ".git" ]]; then
continue;
fi;
# Set the target path for the source file.
# We'll port them to the ~/ (home) directory.
targetFile="$HOME/$sourceFile";
# The file already exists.
if [ -e "$targetFile" ]; then
# The source and target point to the same file, continue.
[ "$sourceFile" -ef "$targetFile" ] && continue;
# The content of the file is the same, continue.
diff -rq "$sourceFile" "$targetFile" > /dev/null 2>&1 && continue;
# The source file is another file than our dotfile.
# Store it in the commonFiles array so we can back it up.
commonFiles+=("$sourceFile");
fi;
done;
# Show the files that will be overwritten.
conflictCount=${#commonFiles[@]};
if [ $conflictCount -gt 0 ]; then
# Create a suffix with a timestamp so the user can see which
# files and when they've been backupped.
backupSuffix=".jsVimconfig-$(date +'%Y%m%d-%H%M%S')";
# Print some information about the replacement.
tput setaf 3;
printf "Warning: there are some files that will be overwritten.";
tput sgr0;
echo " Your files will be given the suffix $backupSuffix and will be" \
"replaced by symlinks to the Dotfiles:";
# Print the conflict files.
for sourceFile in "${commonFiles[@]}"; do
targetFile="$HOME/$sourceFile";
echo "Yours: $targetFile";
echo "Dotfiles: $sourceFile";
done;
# Make sure the user knows that we'll be replacing the old files.
read -p "Would you like to overwrite the current files? (yes|no): ";
case "$(tr '[:upper:]' '[:lower:]' <<< "$REPLY")" in
'yes'|'y')
# The user is sure, continue.
;;
'no'|'n')
# The user isn't sure, abort.
echo 'Aborting.';
exit 1;
;;
*)
# The user didn't type yes/no.
echo 'Invalid answer. Assumed "no". Installation aborted.';
exit 1;
esac;
fi;
# Rename the conflicting files as backup.
for sourceFile in "${commonFiles[@]}"; do
targetFile="$HOME/$sourceFile";
mv -v "$targetFile" "$targetFile$backupSuffix";
done;
# Symlink the files in the home dir by those in the dotfiles repo.
for sourceFile in .*; do
# Exclude some files.
if [[ "$sourceFile" == "dotfiles-002.png" || "$sourceFile" == "dotfiles-001.png" || "$sourceFile" == "install.sh" ]] || [[ "$sourceFile" == "README.md" ]] || [[ "$sourceFile" == "." ]] || [[ "$sourceFile" == ".." ]] || [[ "$sourceFile" == ".git" ]]; then
continue;
fi;
targetFile="$HOME/$sourceFile";
# Delete the old file and replace it by the symlink.
rm -rf "$targetFile" &&
ln -vs "$PWD/$sourceFile" "$targetFile";
done;
echo "Done.";