Install and Setup Cygwin

I recently started a new job for part-time work while in school. As with any new tech job, I went through the process of customizing my Windows box with all the settings, configurations and programs I like. As part of this process I setup Cygwin.

If you aren’t familiar with Cygwin as a Windows user, I hope you will be some day. Cygwin is basically a command line interface (CLI) and set of tools that emulates a Linux environment on Windows. I prefer Cygwin over the basic CLI that comes with Windows because I can use the programs familiar to *Nix users in addition to the autocomplete functionality with Git. I can customize my shell and thank goodness for that! It definitely makes me more efficient and feel more at home. If you’re still using the command prompt for Windows, it’s time to branch out and try something new. It’s valuable to understand how to navigate and script in the Windows CLI, but it’s also worth looking into Cygwin.

As I was going through the process I took note of all the details for future reference. Here’s a list of the packages I suggest you include in your installation of Cygwin:

  • openssh
  • git
  • vim
  • curl
  • bash completion
  • xinit & X-start-menu-icons (if you plan on using gitk)

Cygwin will tell you to install their various dependencies. Just do what it says :).

Here’s what my .bash_profile looks like. It’s a little bit different from the .profile on my Mac:

##################
### MY ALIASES ###
##################

# git command autocompletion script
source ~/bin/git-completion.bash

# navigate to C:\
alias cdc='cd /cygdrive/c'

# navigate to C:\Source\Certus
alias certus='cd /cygdrive/c/Source/Certus'

# git commamands simplified
alias gst='git status'
alias gco='git checkout'
alias gci='git commit'
alias grb='git rebase'
alias gbr='git branch'
alias gpl='git pull'
alias gpu='git push'
alias gad='git add -A'
alias gmt='git mergetool'
alias bdf='git diff'
alias glg='git log --date-order --all --graph --format="%C(green)%h%Creset %C(yellow)%an%Creset %C(blue bold)%ar%Creset %C(red bold)%d%Creset%s"'
alias glg2='git log --date-order --all --graph --name-status --format="%C(green)%H%Creset %C(yellow)%an%Creset %C(blue bold)%ar%Creset %C(red bold)%d%Creset%s"'

# ls alias for color-mode
alias ls='ls -lha --color=always'

# up 'n' folders
alias ..='cd ..'
alias ...='cd ../..'
alias ....='cd ../../..'
alias .....='cd ../../../..'

# processes
#alias ps='ps -ax'

# refresh shell
alias reload='source ~/.bash_profile'

###############################
### ENVIRONMENTAL VARIABLES ###
###############################

# Update PATH with private bin
export PATH="${HOME}/bin:${PATH}"

# Show clean/dirty state for Git in prompt
export GIT_PS1_SHOWDIRTYSTATE=1

# Change prompt
PS1_OLD=${PS1}
export PS1='\[\033[1;34m\]\!\[\033[0m\] \[\033[1;35m\]\u\[\033[0m\]:\[\033[1;35m\]\W\[\033[0m\] \[\033[1;92m\]$(__git_ps1 "(%s)")\[\033[0m\]$ '

# Display variable for gitk
export DISPLAY=:0.0

#################
### PROCESSES ###
#################

# Run XWin Server
startxwin >/dev/null 2>&1 &

As an aside, while I was using Git I realized there was no color for my git status (aka gstat) commands, so I turned on the color: git config --global color.ui true. For a list of other useful configurations to explore, checkout Customizing Git.

I also installed the Perforce’s P4Merge visual merge tool for resolving conflicts when using Git. You can read about how to set that up with Git from the same link above.