Skip to content

Instantly share code, notes, and snippets.

@luislavena
Last active August 20, 2019 15:02
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save luislavena/358337e0a6b087d4671a1ddf1af0bc96 to your computer and use it in GitHub Desktop.
Save luislavena/358337e0a6b087d4671a1ddf1af0bc96 to your computer and use it in GitHub Desktop.
Quick setup of my Ubuntu (WSL)
#!/usr/bin/env aptfile
# NOTE:
# This script uses `bash-aptfile`, which can be obtained from GitHub:
# https://github.com/seatgeek/bash-aptfile
#
# Once `aptfile` has been installed (per instructions), you can invoke this
# script with `sudo`:
#
# $ sudo aptfile path/to/my_setup.aptfile
#
# trigger an apt-get update
update
# commong apt extensions
package "software-properties-common"
package "apt-transport-https"
package "ca-certificates"
# install build packages
package "build-essential"
package "git"
package "make"
package "pkg-config"
# install compilers
package "clang-8"
package "llvm-8-dev"
# install debuggers
package "gdb"
package "lldb-8"
# adjust alternatives
# update-alternatives --install /usr/bin/clang clang /usr/bin/clang-5.0 1000
# update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-5.0 1000
# update-alternatives --install /usr/bin/lldb lldb /usr/bin/lldb-5.0 1000
# fix lldb-server bug
# https://bugs.llvm.org/show_bug.cgi?id=33150
# if [[ ! -e /usr/lib/llvm-5.0/bin/lldb-server-5.0.0 ]]; then
# ln -s lldb-server /usr/lib/llvm-5.0/bin/lldb-server-5.0.0
# fi
# install dependencies for languages
package "bison"
package "libevent-dev"
package "libffi-dev"
package "libgc-dev"
package "libgdbm-dev"
package "libgmp-dev"
package "libncurses5-dev"
package "libpcre3-dev"
package "libreadline-dev"
package "libssl-dev"
package "libxml2-dev"
package "libyaml-dev"
package "zlib1g-dev"
# install other utilities
package "autojump"
package "curl"
package "htop"
package "pv"
package "unzip"
package "vim"
package "wget"
# pass and otp dependencies
package "gnupg2"
package "oathtool"
package "pwgen"
package "qrencode"
package "tree"
package "zbar-tools"
# dotfiles manager
package "yadm"
# With `yadm` installed you can now clone our dotfiles:
#
# $ yadm clone git@code.area17.com:luis/dotfiles.git
# $ yadm status
#
# install docker
log_info "Adding Docker's official GPG key"
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -
apt-key fingerprint 0EBFCD88
# adding repository manually
if [[ ! -e /etc/apt/sources.list.d/docker.list ]]; then
log_info "Adding Docker's repository"
echo "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" > /etc/apt/sources.list.d/docker.list
fi
update
# install only CLI under `wsl`
container=$(command -v systemd-detect-virt > /dev/null && systemd-detect-virt)
if [ "$container" = "wsl" ]; then
package "docker-ce-cli"
else
package "docker-ce"
fi
# installing local tools
if [[ ! -e /usr/local/bin/docker-compose ]]; then
log_info "Installing docker-compose"
mkdir -p /usr/local/bin/
curl -o /usr/local/bin/docker-compose -L https://github.com/docker/compose/releases/download/1.24.1/docker-compose-`uname -s`-`uname -m`
chmod +x /usr/local/bin/docker-compose
fi
if [[ ! -d $HOME/.asdf ]]; then
log_info "Installing asdf"
git clone https://github.com/asdf-vm/asdf.git $HOME/.asdf --branch v0.7.2
chown --recursive $USER:$USER $HOME/.asdf
fi
if [[ ! -d $HOME/.bash-git-prompt ]]; then
log_info "Installing bash-git-prompt"
git clone https://github.com/magicmonty/bash-git-prompt.git $HOME/.bash-git-prompt --depth=1
chown --recursive $USER:$USER $HOME/.asdf
fi
# done
log_info "ALL GOOD TO GO"
# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples
# If not running interactively, don't do anything
case $- in
*i*) ;;
*) return;;
esac
# don't put duplicate lines or lines starting with space in the history.
# See bash(1) for more options
HISTCONTROL=ignoreboth
# append to the history file, don't overwrite it
shopt -s histappend
# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
HISTSIZE=1000
HISTFILESIZE=2000
# check the window size after each command and, if necessary,
# update the values of LINES and COLUMNS.
shopt -s checkwinsize
# If set, the pattern "**" used in a pathname expansion context will
# match all files and zero or more directories and subdirectories.
#shopt -s globstar
# make less more friendly for non-text input files, see lesspipe(1)
[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)"
# set variable identifying the chroot you work in (used in the prompt below)
if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then
debian_chroot=$(cat /etc/debian_chroot)
fi
# set a fancy prompt (non-color, unless we know we "want" color)
case "$TERM" in
xterm-color|*-256color) color_prompt=yes;;
esac
# uncomment for a colored prompt, if the terminal has the capability; turned
# off by default to not distract the user: the focus in a terminal window
# should be on the output of commands, not on the prompt
#force_color_prompt=yes
if [ -n "$force_color_prompt" ]; then
if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
# We have color support; assume it's compliant with Ecma-48
# (ISO/IEC-6429). (Lack of such support is extremely rare, and such
# a case would tend to support setf rather than setaf.)
color_prompt=yes
else
color_prompt=
fi
fi
if [ "$color_prompt" = yes ]; then
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi
unset color_prompt force_color_prompt
# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm*|rxvt*)
PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
;;
*)
;;
esac
# enable color support of ls and also add handy aliases
if [ -x /usr/bin/dircolors ]; then
test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
alias ls='ls --color=auto'
#alias dir='dir --color=auto'
#alias vdir='vdir --color=auto'
alias grep='grep --color=auto'
alias fgrep='fgrep --color=auto'
alias egrep='egrep --color=auto'
fi
# colored GCC warnings and errors
#export GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'
# some more ls aliases
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'
# Add an "alert" alias for long running commands. Use like so:
# sleep 10; alert
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'
# Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.
if [ -f ~/.bash_aliases ]; then
. ~/.bash_aliases
fi
# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if ! shopt -oq posix; then
if [ -f /usr/share/bash-completion/bash_completion ]; then
. /usr/share/bash-completion/bash_completion
elif [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
fi
# ===
# User customization starts here
# Default EDITOR
export EDITOR=vim
# User's `bin` directory
if [ -d "${HOME}/bin" ]; then
export PATH="${HOME}/bin":$PATH
fi
# GnuPG - agent
if [ -f "${HOME}/.gpg-agent-info" ]; then
source "${HOME}/.gpg-agent-info"
export GPG_AGENT_INFO
export SSH_AUTH_SOCK
fi
GPG_TTY=$(tty)
export GPG_TTY
# ====
# ssh-agent
# Remember to add `AddKeysToAgent yes` to ~/.ssh/config
# (and ensure chmod 0600) ;-)
if [ -z "$(pgrep ssh-agent)" ]; then
rm -rf /tmp/ssh-*
eval $(ssh-agent -s) > /dev/null
else
export SSH_AGENT_PID=$(pgrep ssh-agent)
export SSH_AUTH_SOCK=$(find /tmp/ssh-* -name agent.*)
fi
# ===
# Show current user and path in GNOME Terminal
export PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}: ${PWD}\007"'
if [ -f ~/.bash-git-prompt/gitprompt.sh ]; then
# gitprompt configuration
GIT_PROMPT_ONLY_IN_REPO=1
GIT_PROMPT_FETCH_REMOTE_STATUS=0
GIT_PROMPT_THEME=Default_Ubuntu
source ~/.bash-git-prompt/gitprompt.sh
fi
# check if running within WSL (Bash on Windows) and change codepage
# TODO: do this to workaround codepage issues with docker-compose
# Ref: https://github.com/docker/compose/issues/2775
if [[ `uname -r` =~ Microsoft ]]; then
# chcp.com 1252
# also adjust terminal colors
LS_COLORS="ow=01;36;40"
export LS_COLORS
fi
# adjust project lookup directory for /c/Users/Luis/Code
# CDPATH=~/code:~/code
export CDPATH
# autojump
if [ -f /usr/share/autojump/autojump.sh ]; then
# load autojump package
source /usr/share/autojump/autojump.sh
fi
# asdf version manager
if [ -f ~/.asdf/asdf.sh ]; then
# adjust Ruby compilation options
export RUBY_EXTRA_CONFIGURE_OPTIONS="--disable-install-doc --enable-load-relative"
source ~/.asdf/asdf.sh
source ~/.asdf/completions/asdf.bash
fi
# yarn
if [ -d "$HOME/.yarn/bin" ]; then
export PATH="$HOME/.yarn/bin:$PATH"
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment