Skip to main content

Essential Environment Setup

iTerm

Let's start with installing iTerm.

Please visit https://iterm2.com then download and install it.

Install color themes

Visit https://iterm2colorschemes.com and download the zip or tar.gz and extract it. Follow the installation instruction.

e.g.)

iTerm color themes Example

Homebrew

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

zsh (Z shell)

Install latest zsh using brew.

brew install zsh 

Change Default Shell

Change the default shell to zsh

NOTE

You probably don't need it for the new macOS, but to use the latest version from brew, run the following command.

chsh -s /usr/local/bin/zsh

Make sure you're using zsh

echo $SHELL

Expected:

/usr/local/bin/zsh

Oh My Zsh

Install Oh My Zsh.

sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

Font for Coding

brew tap homebrew/cask-fonts

FiraCode

brew install --cask font-fira-code

For nerd font,

brew install --cask font-fira-code-nerd-font 

Fira Code Sample

Microsoft Cascadia Code

brew install font-cascadia-code-pl

For nerd font,

brew install --cask font-caskaydia-cove-nerd-font 

Cascadia Code Sample

JetBrains Mono

brew install font-jetbrains-mono

JetBrains Mono Sample

Dot Files (WIP)

You can keep all aliases, environment variables and functions in ~/.zshrc but as the file gets bigger, it would be hard to maintain it. So it would be a good idea to put them in to multiple files depending on their relevance.

mkdir -p ~/.my-dot-file
echo 'if [ -f ~/.my-dot-file/.all_my_rc ]; then
. ~/.my-dot-file/.all_my_rc
fi' >> ~/.zshrc

Now you can have multiple .some_rc files in ~/.my-dot-file and load them in the ~/.my-dot-file/.all_my_rc so that ~/.zshrc can load them all.

TBD

Other Tools

exa

exa is a modern replacement for ls written in Rust.

brew install exa 

Once installed, you can replace ls with exa by adding aliases like.

if type exa >/dev/null 2>&1; then
alias ls0='command ls -G'
alias ll0='ls0 -l'
alias l0='ls0 -al'
alias ls='exa'
alias ll='ls --color-scale -lh'
alias l='ls --color-scale -lah'
else
alias ls='ls -G'
fi

Now you ls is exa. ls -l can be done by ll and ls -a is just l.

You can still use ls by running ls0 (but why?! 🤔)

bat

bat (🦇) is an alternative to cat (🐈) with syntax highlighting and Git integration.

brew install bat 

Let's compare bat with cat.

First cat,

cat

Now, bat,

bat

delta

delta is a syntax-highlighting pager for git.

brew install git-delta 

Once installed, add delta to ~/.gitconfig

[core]
pager = delta

For more about delta configuration, please visit the delta user manual.

FYI, this is what I have in my ~/.gitconfig.

[core]
pager = delta

[interactive]
diffFilter = delta --color-only

[delta]
navigate = true
side-by-side = true
features = line-numbers decorations
syntax-theme = Monokai Extended Bright
plus-style = syntax "#003800"
minus-style = syntax "#3f0001"

[delta "decorations"]
commit-decoration-style = bold yellow box ul
file-style = bold yellow ul
file-decoration-style = none
hunk-header-decoration-style = cyan box ul

[delta "line-numbers"]
line-numbers-left-style = cyan
line-numbers-right-style = cyan
line-numbers-minus-style = 124
line-numbers-plus-style = 28

Now the result of git diff may look like this.

delta-example

procs

procs is a modern alternative to ps.

brew install procs 

e.g.)

$ procs
PID:▲ User │ TTY CPU MEM CPU Time │ Command
[%] [%]
1 root │ 0.0 0.3 00:06:14 │ /lib/systemd/systemd --system --deserialize 20
2 root │ 0.0 0.0 00:00:05 │ kthreadd
4 root │ 0.0 0.0 00:00:00 │ kworker/0:0H
6 root │ 0.0 0.0 00:00:00 │ mm_percpu_wq
7 root │ 0.0 0.0 00:00:42 │ ksoftirqd/0
8 root │ 0.0 0.0 00:19:13 │ rcu_sched
9 root │ 0.0 0.0 00:00:00 │ rcu_bh
10 root │ 0.0 0.0 00:00:00 │ migration/0
11 root │ 0.0 0.0 00:01:18 │ watchdog/0
12 root │ 0.0 0.0 00:00:00 │ cpuhp/0
13 root │ 0.0 0.0 00:00:00 │ kdevtmpfs
14 root │ 0.0 0.0 00:00:00 │ netns
15 root │ 0.0 0.0 00:00:00 │ rcu_tasks_kthre
16 root │ 0.0 0.0 00:00:00 │ kauditd
17 root │ 0.0 0.0 00:02:53 │ khungtaskd
18 root │ 0.0 0.0 00:00:00 │ oom_reaper
19 root │ 0.0 0.0 00:00:00 │ writeback
20 root │ 0.0 0.0 00:00:00 │ kcompactd0
21 root │ 0.0 0.0 00:00:00 │ ksmd
22 root │ 0.0 0.0 00:00:00 │ khugepaged
:

dust

dust is more intuitive du - display disk usage statistics

brew install dust 

e.g.)

$ dust
4.0K ┌── blah-b1a.txt│ ████████ │ 17%
4.0K ┌─┴ b1 │ ████████ │ 17%
4.0K ┌─┴ b │ ████████ │ 17%
0B │ ┌── c2 │ ░░░░░░░░░░░░░░█ │ 0%
4.0K │ ├── blah-c.txt │ ░░░░░░░████████ │ 17%
4.0K │ │ ┌── blah-c1a.txt│ ░░░░░░░████████ │ 17%
4.0K │ ├─┴ c1 │ ░░░░░░░████████ │ 17%
8.0K ├─┴ c │ ███████████████ │ 33%
0B │ ┌── a2 │ ░░░░░░░░░░░░░░░░░░░░░░█ │ 0%
0B │ ├── a3 │ ░░░░░░░░░░░░░░░░░░░░░░█ │ 0%
4.0K │ ├── blah-a.txt │ ░░░░░░░░░░░░░░░████████ │ 17%
4.0K │ │ ┌── blah-a1a.txt│ ░░░░░░░░▒▒▒▒▒▒▒████████ │ 17%
4.0K │ │ ├── blah-a1b.txt│ ░░░░░░░░▒▒▒▒▒▒▒████████ │ 17%
8.0K │ ├─┴ a1 │ ░░░░░░░░███████████████ │ 33%
12K ├─┴ a │ ███████████████████████ │ 50%
24K ┌─┴ . │████████████████████████████████████████████ │ 100%

fzf

fzf is a general-purpose command-line fuzzy finder.

brew install fzf
  • Optional
    # To install useful key bindings and fuzzy completion:
    $(brew --prefix)/opt/fzf/install

e.g.)

$ fzf
  b/b1/blah-b1a.txt
c/c1/blah-c1a.txt
c/blah-c.txt
a/a1/blah-a1a.txt
a/a1/blah-a1b.txt
> a/blah-a.txt
6/6
>
  c/c1/blah-c1a.txt
> c/blah-c.txt
2/6
> c
> c/c1/blah-c1a.txt
1/6
> c1

tokei

tokei is a tool to get statistics of a project source code.

brew install tokei

e.g.)

$ tokei 
===============================================================================
Language Files Lines Code Comments Blanks
===============================================================================
CSS 2 84 58 13 13
JavaScript 4 277 267 0 10
JSON 4 11199 11199 0 0
Scala 150 74098 58383 952 14763
YAML 1 2 2 0 0
-------------------------------------------------------------------------------
Markdown 46 2725 0 1965 760
|- Scala 24 7733 6346 47 1340
(Total) 10458 6346 2012 2100
===============================================================================
Total 207 88385 69909 2930 15546
===============================================================================
$ tokei --exclude "*.json" 
===============================================================================
Language Files Lines Code Comments Blanks
===============================================================================
CSS 2 84 58 13 13
JavaScript 4 277 267 0 10
Scala 150 74098 58383 952 14763
YAML 1 2 2 0 0
-------------------------------------------------------------------------------
Markdown 46 2725 0 1965 760
|- Scala 24 7733 6346 47 1340
(Total) 10458 6346 2012 2100
===============================================================================
Total 203 77186 58710 2930 15546
===============================================================================

bottom

bottom is a customizable cross-platform graphical process/system monitor for the terminal. It is like htop with more graphical representation.

brew install bottom 

NOTE: to run bottom, the command is not bottom but btm.

$ btm

bottom example

bandwhich

bandwhich is a utility for displaying current network utilization.

brew install bandwhich 
# If bandwhich doesn't work,
$ sudo bandwhich
 Total Up / Down: 1.66KiBps / 910Bps
┌Utilization by process name─────────────────────┐┌Utilization by remote address──────────────────┐
│Process Connections Up / Down ││Remote Address Up / Down │
│ ││ │
│Abc[...]xyz 5 1.56KiBps / 231Bps ││syd1[..]net. 1.51KiBps / 181Bps │
│Someapp 6 102Bps / 462Bps ││PC-1. 0Bps / 576Bps │
<UNKNOWN> 1 0Bps / 216Bps ││PC-2. 0Bps / 102Bps │
│ ││192.168.123.255 51Bps / 0Bps │
│ ││255.255.255.255 51Bps / 0Bps │
│ ││syd1[..]net. 16Bps / 13Bps │
│ ││syd6[..]net. 16Bps / 13Bps │
│ ││ec2-[..]com. 4Bps / 6Bps │
│ ││cdn-[..]com. 4Bps / 6Bps │
│ ││cdn-[..]com. 4Bps / 6Bps │
│ ││1.2.3.200 4Bps / 4Bps │
│ ││ │
└────────────────────────────────────────────────┘└───────────────────────────────────────────────┘
┌Utilization by connection────────────────────────────────────────────────────────────────────────┐
│Connection Process Up / Down │
│ │
<en0>:49269 => syd15s20-in-f14.1e100.net.:443 (udp) Abc[...]xyz 1.51KiBps / 181Bps │
<en0>:12345 => PC-1.:12345 (udp) Someapp 0Bps / 315Bps │
<en0>:54915 => PC-1.:54915 (udp) <UNKNOWN> 0Bps / 216Bps │
<en0>:12345 => 255.255.255.255:12345 (udp) Someapp 51Bps / 0Bps │
<en0>:12345 => 192.168.2.255:12345 (udp) Someapp 51Bps / 0Bps │
<lo0>:12345 => PC-2.:12345 (udp) Someapp 0Bps / 51Bps │
<lo0>:12345 => PC-2.:12345 (udp) Someapp 0Bps / 51Bps │
<en0>:12345 => PC-1.:12345 (udp) Someapp 0Bps / 45Bps │
<en0>:51627 => syd12345-in-f14.1e100.net.:443 (udp) Abc[...]xyz 16Bps / 13Bps │
<en0>:62557 => syd67890-in-f10.1e100.net.:443 (udp) Abc[...]xyz 16Bps / 13Bps │
<en0>:56299 => cdn-111-222-333-444.github.com.:443 (tcp) Abc[...]xyz 4Bps / 6Bps │
<en0>:56312 => ec2-12-345-6[...]te.amazonaws.com.:443 (tcp) Abc[...]xyz 4Bps / 6Bps │
└─────────────────────────────────────────────────────────────────────────────────────────────────┘
Press <SPACE> to pause. Use <TAB> to rearrange tables. (DNS queries hidden).

grex

brew install grex 

TBD

jq

jq is a lightweight and flexible command-line JSON processor.

brew install jq 

TBD