Bash Config
I wanted to setup my runtime configuration in a way that was reasonably portable and consistent across a variety of operating systems, bash versions, and terminal emulators, while allowing for additional configurations and overrides specific to each environment.
OLD README WARNING
I have updated this setup a lot and haven't kept up with the README, so a lot of this is probably out-of-date. It's on my list of things to do but since this is mostly for personal use it's low-priority.
TODO:
- Ensure docs are up-to-date
- git stuff (plugins + local)
- Better variable scoping for configurations
Installation
Clone repo as ~/.bash_config and run install script:
git clone https://github.com/connordelacruz/bash_config.git ~/.bash_config
~/.bash_config/install.sh
Updating
To pull changes from the remote repository and initialize any new submodules, run:
~/.bash_config/update.sh
If you're using my vim runtime repo (or a fork of it), you can run the following script to update it as well:
~/.bash_config/update_all.sh
Submodules
This repo includes a few useful submodules. These are stored in the modules/
directory.
Included Modules
- base16-shell is included as a submodule for quickly setting the terminal colorscheme.
- iterm2-tab-color adds functions for setting the tab color in iTerm2.
- chicago-ascii.sh used to display Chicago skyline or flag on startup
Enabling, Disabling, and Configuring Modules
Enabled submodules can be configured in modules/config.sh
. To
disable a submodule, set the corresponding variable to 0
. E.g. if you wanted
to disable iterm2-tab-color:
modules/config.sh
:
ENABLE_IT2_TAB_COLOR=0
Some additional configurations can be found in
modules/config.sh
. See comments for more information.
PS1 Prompt
Configurations for the PS1 prompt can be found in globalrc.d/prompt/config.sh
.
This repo uses bash-powerline by
default.
If POWERLINE_ENABLE
is set to 1
, globalrc.d/prompt/powerline.sh
will be
sourced to set the PS1 prompt to a modified version of
bash-powerline (this is the default
configuration).
If POWERLINE_ENABLE
is set to 0
, globalrc.d/prompt/ps1.sh
will be sourced
to set the PS1 prompt to a vanilla PS1.
See globalrc.d/prompt/config.sh
for additional
options.
Aliases
The following aliases are declared in globalrc.d/bashrc.sh
. Some of these will
only be included depending on OS and what command line utilities are installed.
ls
aliases:
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'
Color prompt aliases:
# grep
alias grep='grep --color=auto'
alias fgrep='fgrep --color=auto'
alias egrep='egrep --color=auto'
# If colordiff command exists, alias diff
alias diff=colordiff
# If tree command exists, alias tree -C
alias tree="tree -CF"
MacOS aliases:
# Copy previous command to clipboard
alias copy-last-cmd="fc -ln -1 | awk '{\$1=\$1}1' | pbcopy"
# MacOS doesn't have --color option (color prompt only)
alias ls='ls --color=auto'
Misc aliases:
alias md='mkdir'
alias cls='clear'
Functions
The following convenience functions are included from globalrc.d/functions.sh
.
todo
- Recursively searches files for TODO
or FIXME
comments using grep
and prints them out. Optionally takes a positional argument for the directory to
search. If no arguments are specified, it will search the current directory.
todo-less
- Like todo
but pipes output into less
to keep terminal history
less cluttered.
cdl
(alias: c
) - Shorthand function that changes into a directory and lists
its contents. Equivalent to:
cd <directory>
l
mkcd
- Shorthand function that creates a directory and changes into it.
Equivalent to:
mkdir <directory>
cd <directory>
le
- If used on a file, will run less <file>
. If used on a directory, will
run ls <directory>
.
Directory Structure
install.sh
- Backs up the existing~/.bashrc
(if one exists) and creates a one-line.bashrc
that sources~/.bash_config/init.sh
update.sh
- Pulls updates to main repo and submodulesinit.sh
- Sourcesglobalrc.d/init.sh
andlocalrc.d/init.sh
, thenglobalrc.d/after.sh
andlocalrc.d/after.sh
globalrc.d/
- Shared runtime configuration filesinit.sh
- Sources all bash configuration files in directorybashrc.sh
- Bash runtime configurationsinputrc
- Input configurationsfunctions.sh
- Declarations of bash functionsafter.sh
- Sourced after all otherinit.sh
scripts are sourcedprompt/
- Configurations for PS1 promptconfig.sh
- Configuration variables for PS1/powerline promptsinit.sh
- Sourcesconfig.sh
and one of the following scriptspowerline.sh
- IfPOWERLINE_ENABLE
is set to1
, this file will be sourced to set the PS1 prompt to a modified version of powerlineps1.sh
- IfPOWERLINE_ENABLE
is set to0
, this file will be sourced to set the PS1 prompt to a vanilla PS1
localrc.d/
- Additional configurations specific to the machine. These are ignored by git.bin/
- Local directory added toPATH
, add any scripts you want accessible hereinit.sh
- Looks for any of the following files inlocalrc.d/
and sources them if they exist:bashrc.sh
inputrc
variables.sh
config.sh
aliases.sh
functions.sh
after.sh
- Sourced after all otherinit.sh
scripts andglobalrc.d/after.sh
are sourced
modules/
- git submodulesconfig.sh
- Configurations for enabled/disabled submodulesinit.sh
- Sourcesconfig.sh
and all enabled modulesbase16-shell
iterm2-tab-color