Let's add Cygwin into Windows Terminal and customize it for development looks
Tags: cygwin, windowsterminal, windows, development
Published: 2020-08-16 09:32:39

- Cygwin is good for people who want to have a similar experience as much as possible like macOS machine/Linux terminal. May be, you like Git Bash, but Cygwin could provide a lot of additional packages which has been ported to Windows by Windows its own API. (https://www.cygwin.com/)

- Windows Terminal is really nice, the big change that it uses GPU to render instead of CPU as basic cmd of Windows does. (https://github.com/microsoft/terminal)

I just curious to how to add Cygwin into Windows Terminal. After installed it successfully, I would like to customize its own look to more consistent with other Terminal in Windows

## Installation
I can get the executeable file for installing or just install it via `scoop` (http://scoop.sh/). Very simple, just `scoop install cygwin`

After install, I could use Linux common commands in cygwin. But, wait, I would like to have it in my Windows Terminal also.

## Add it into Windows Terminal
Here is my Windows Terminal config
```json
{
    "$schema": "https://aka.ms/terminal-profiles-schema",
    // make Cygwin become default one
    "defaultProfile": "{00000000-0000-0000-0000-000000000001}",

    "profiles": {
        // ...
        "list": [
            // just add this below item for Cygwin if you don't have any other
            {
                "guid": "{00000000-0000-0000-0000-000000000001}",
                "commandline": "%UserProfile%/scoop/apps/cygwin/current/root/Cygwin.bat",
                "icon": "%UserProfile%/scoop/apps/cygwin/current/root/Cygwin-Terminal.ico",
                "hidden": false,
                "name": "Cygwin"
            },
            //...
        ]
    },
    //...
}

```

## The original look
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/xjjd0lg4mprm3itgvs0w.PNG)
It is lack of:
* Shorten path
* Git branch name
* Emoji (lol~!)

## Customize it!
To fulfill all of lacks, I did a search on Google and found this topic https://gist.github.com/justintv/168835. Looks amazing 🥰. After try some kind of suggestions, I also added a bit of cygpath to customize the path look.

Pls have a look first before have a decision! 😂

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/ndxm3s9p2n26shdgbgdz.PNG)

```bash
// Just shorten the cygwin path
function __short_wd_cygwin() {
    num_dirs=3
    newPWD="${PWD/#$HOME/~}"
    if [ $(echo -n $newPWD | awk -F '/' '{print NF}') -gt $num_dirs ]; then
        newPWD=$(echo -n $newPWD | awk -F '/' '{print $1 "/.../" $(NF-1) "/" $(NF)}')
    fi

    echo -n $newPWD
}

// Convert shorten path and shorten the Windows path
function __short_wd_cygpath() {
    num_dirs=3
    newPWD=$(cygpath -C ANSI -w ${PWD/#$HOME/~})
    if [ $(echo -n $newPWD | awk -F '\\' '{print NF}') -gt $num_dirs ]; then
        newPWD=$(echo -n $newPWD | awk -F '\\' '{print $1 "\\...\\" $(NF-1) "\\" $(NF)}')
    fi

    echo -n $newPWD
}

FMT_BOLD="\e[1m"
FMT_RESET="\e[0m"
FMT_UNBOLD="\e[21m"
FG_BLACK="\e[36m"
FG_BLUE="\e[34m"
FG_CYAN="\e[36m"
FG_GREEN="\e[32m"
FG_MAGENTA="\e[35m"
FG_RED="\e[31m"
FG_WHITE="\e[97m"
BG_BLUE="\e[44m"
BG_GREEN="\e[42m"
BG_MAGENTA="\e[45m"

export PS1=\
"\n ${FG_BLUE}${FG_GREEN}${FMT_BOLD}\u${FMT_UNBOLD} @ ${FG_GREEN}\h "\
"${FG_BLACK}\$(__short_wd_cygpath) ${FMT_RESET}${FG_BLUE}"\
"\$(git branch 2> /dev/null | grep '^*' | colrm 1 2 | xargs -I BRANCH echo -n \"${FG_GREEN}BRANCH ${FMT_RESET}${FG_MAGENTA}\")"\
"\n ${FG_BLUE}🙈 ▶ ${FG_CYAN}\$ ${FMT_RESET}"
```

Oh, yes, you want to know where to put all above commands into, lah?

### Just do it step by step
Step 1. Backup the current setting
```bash
cp ~/.bashrc ~/.bashrc-bak
```
Step 2. Change the content of .bashrc
```bash
# Because I like VScode
code -n ~/.bashrc
```
Step 3. Put all above commands into bottom of your .bashrc file
Step 4. Store it then load it by this below command
```bash
source ~/.bashrc
```

Hope you can complete these steps smoothly! 😎

## Notes:
- The font of my terminal is 'IBM Plex Mono'
- The theme of Windows Terminal is 'Solarized Dark Higher Contrast'

Nice to hear any new tips in Cygwin from you all!!