Skip to content

Instantly share code, notes, and snippets.

@shikelong
Last active April 11, 2024 01:26
Show Gist options
  • Save shikelong/cf2b9de9e9e18137ca9ceff9dd3e4274 to your computer and use it in GitHub Desktop.
Save shikelong/cf2b9de9e9e18137ca9ceff9dd3e4274 to your computer and use it in GitHub Desktop.
🐳 My MacOS Development Env Setup
# Enable Powerlevel10k instant prompt. Should stay close to the top of ~/.zshrc.
# Initialization code that may require console input (password prompts, [y/n]
# confirmations, etc.) must go above this block; everything else may go below.
if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then
source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh"
fi
# If you come from bash you might have to change your $PATH.
export PATH=$HOME/bin:/usr/local/bin:$PATH
# Path to your oh-my-zsh installation.
export ZSH="$HOME/.oh-my-zsh"
# Set name of the theme to load --- if set to "random", it will
# load a random theme each time oh-my-zsh is loaded, in which case,
# to know which specific one was loaded, run: echo $RANDOM_THEME
# See https://github.com/ohmyzsh/ohmyzsh/wiki/Themes
#ZSH_THEME="powerlevel10k/powerlevel10k"
# Set list of themes to pick from when loading at random
# Setting this variable when ZSH_THEME=random will cause zsh to load
# a theme from this variable instead of looking in ~/.oh-my-zsh/themes/
# If set to an empty array, this variable will have no effect.
# ZSH_THEME_RANDOM_CANDIDATES=( "robbyrussell" "agnoster" )
# Uncomment the following line to use case-sensitive completion.
# CASE_SENSITIVE="true"
# Uncomment the following line to use hyphen-insensitive completion.
# Case-sensitive completion must be off. _ and - will be interchangeable.
# HYPHEN_INSENSITIVE="true"
# Uncomment the following line to disable bi-weekly auto-update checks.
# DISABLE_AUTO_UPDATE="true"
# Uncomment the following line to automatically update without prompting.
# DISABLE_UPDATE_PROMPT="true"
# Uncomment the following line to change how often to auto-update (in days).
# export UPDATE_ZSH_DAYS=13
# Uncomment the following line if pasting URLs and other text is messed up.
# DISABLE_MAGIC_FUNCTIONS=true
# Uncomment the following line to disable colors in ls.
# DISABLE_LS_COLORS="true"
# Uncomment the following line to disable auto-setting terminal title.
# DISABLE_AUTO_TITLE="true"
# Uncomment the following line to enable command auto-correction.
# ENABLE_CORRECTION="true"
# Uncomment the following line to display red dots whilst waiting for completion.
# COMPLETION_WAITING_DOTS="true"
# Uncomment the following line if you want to disable marking untracked files
# under VCS as dirty. This makes repository status check for large repositories
# much, much faster.
# DISABLE_UNTRACKED_FILES_DIRTY="true"
# Uncomment the following line if you want to change the command execution time
# stamp shown in the history command output.
# You can set one of the optional three formats:
# "mm/dd/yyyy"|"dd.mm.yyyy"|"yyyy-mm-dd"
# or set a custom format using the strftime function format specifications,
# see 'man strftime' for details.
# HIST_STAMPS="mm/dd/yyyy"
# Would you like to use another custom folder than $ZSH/custom?
# ZSH_CUSTOM=/path/to/new-custom-folder
# Which plugins would you like to load?
# Standard plugins can be found in ~/.oh-my-zsh/plugins/*
# Custom plugins may be added to ~/.oh-my-zsh/custom/plugins/
# Example format: plugins=(rails git textmate ruby lighthouse)
# Add wisely, as too many plugins slow down shell startup.
plugins=(
git
zsh-z
zsh-autosuggestions
zsh-syntax-highlighting
macos
history
gh
zsh-interactive-cd
jira #if use jira, it's useful
alias-finder # for help and docs. eg. alias-find "git pull"
aliases # list aliase
colored-man-pages # colored git help clone
gitfast # autocomplete for git cli
copyfile # copy file content
copypath # copy path
frontend-search #
command-not-found
themes # change ZSH theme
fzf # cool, use alias pf
git-extras
)
source $ZSH/oh-my-zsh.sh
#source $(dirname $(gem which colorls))/tab_complete.sh
# User configuration
# export MANPATH="/usr/local/man:$MANPATH"
# You may need to manually set your language environment
# export LANG=en_US.UTF-8
# Preferred editor for local and remote sessions
# if [[ -n $SSH_CONNECTION ]]; then
# export EDITOR='vim'
# else
# export EDITOR='mvim'
# fi
# Compilation flags
# export ARCHFLAGS="-arch x86_64"
# Set personal aliases, overriding those provided by oh-my-zsh libs,
# plugins, and themes. Aliases can be placed here, though oh-my-zsh
# users are encouraged to define aliases within the ZSH_CUSTOM folder.
# For a full list of active aliases, run `alias`.
#
# Example aliases
# alias zshconfig="mate ~/.zshrc"
# alias ohmyzsh="mate ~/.oh-my-zsh"
#source ~/.oh-my-zsh/custom/plugins/zsh-autosuggestions.zsh
#source ~/.oh-my-zsh/custom/plugins/zsh-syntax-highlighting.zsh
alias proxy='export all_proxy=socks5://127.0.0.1:7890'
alias unproxy='unset all_proxy'
#alias lc='colorls -lA --sd'
#alias lt2='colorls --tree=2'
#alias lt3='colorls --tree=3'
#alias lt4='colorls --tree=4'
#alias ls='colorls'
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion
export PATH="/usr/local/opt/ruby/bin:$PATH"
export PATH=$PATH:$(ruby -e 'puts Gem.bindir')
export HOMEBREW_BOTTLE_DOMAIN=https://mirrors.aliyun.com/homebrew/homebrew-bottles
# To customize prompt, run `p10k configure` or edit ~/.p10k.zsh.
[[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh
# try to fix brew error - unknown or unsupported macOS version: :dunno (MacOSVersionError)
echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> $HOME/.zprofile
eval "$(/opt/homebrew/bin/brew shellenv)"
eval "$(rbenv init - zsh)"
eval "$(starship init zsh)"
# speed up rust download. https://zhuanlan.zhihu.com/p/126201430
export RUSTUP_DIST_SERVER=https://mirrors.ustc.edu.cn/rust-static
export RUSTUP_UPDATE_ROOT=https://mirrors.ustc.edu.cn/rust-static/rustup
# place this after nvm initialization!
autoload -U add-zsh-hook
load-nvmrc() {
local node_version="$(nvm version)"
local nvmrc_path="$(nvm_find_nvmrc)"
if [ -n "$nvmrc_path" ]; then
local nvmrc_node_version=$(nvm version "$(cat "${nvmrc_path}")")
if [ "$nvmrc_node_version" = "N/A" ]; then
nvm install
elif [ "$nvmrc_node_version" != "$node_version" ]; then
nvm use
fi
elif [ "$node_version" != "$(nvm version default)" ]; then
echo "Reverting to nvm default version"
nvm use default
fi
}
add-zsh-hook chpwd load-nvmrc
load-nvmrc
export GPG_TTY=$(tty)
#csharprepl
export PATH="$PATH:$HOME/.dotnet/tools"
export FZF_BASE="/opt/homebrew/bin/fzf"
# fzf preview
alias pf="fzf --preview='less {}' --bind shift-up:preview-page-up,shift-down:preview-page-down"

Install Brew and Brew-Related Apps/Fonts/CLIs

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

brew install

brew install 
asimov
diff-so-fancy 
cloc 
tree 
docker 
gh 
git 
p7zip 
autojump 
node 
wget 
yarn 
pkg-config
cairo 
uchardet 
git-extras 
highlight 
nvm 
smartmontools 
neofetch 
fzf 
tldr 
thefuck 
ydiff
htop

brew cask

brew install --cask 
google-chrome 
snipaste 
wechat 
firefox 
microsoft-edge 
microsoft-remote-desktop 
iterm2 
neteasemusic 
baidunetdisk 
visual-studio-code  
microsoft-office 
docker 
zoom 
adobe-acrobat-reader 
notion 
notion-enhanced 
remnote 
webstorm 
clashx 
tencent-lemon 
tencent-meeting 
tabby 
azure-data-studio
the-unarchiver 
scroll-reverser
cheatsheet 
monitorcontrol
raycast 
sleek 
rectangle

Install NPM Related

  • ni

Beauty Terminal

  • See Shell.md
  • Use oh-my-zsh and StarShip

Shell / Terminal

StarShip: Prompt

https://starship.rs/

install: curl -sS https://starship.rs/install.sh | sh

config: mkdir -p ~/.config && touch ~/.config/starship.toml

oh-my-zsh

sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"

install plugins: git clone https://github.com/agkozak/zsh-z $ZSH_CUSTOM/plugins/zsh-z git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting

Font

brew tap homebrew/cask-fonts

brew install font-fira-code

Install Others Manually.

Other tools (should have a license) should install via xclient.info:

  • xmind
  • moom
  • iStat Menus
  • Logi Options
  • BlackMagic Disk Speed Test
  • Motrix
  • OmniGraffle
  • Navicat
  • pap.er
Personal Mac:
brew list
==> Formulae
asimov libtermkey pkg-config
autoconf libtiff pyoxidizer
avro-tools libtool [email protected]
berkeley-db libuv rbenv
ca-certificates libvterm readline
cloc libyaml ronn
cmake lua ruby-build
cowsay luajit scala
erlang luajit-openresty sl
exa luv sqlite
fortune lz4 starship
gdbm m4 swi-prolog
gettext mpdecimal tig
gh msgpack tree
gmp nano tree-sitter
jpeg ncurses unibilium
libarchive neovim unixodbc
libb2 openjdk wxwidgets
libffi [email protected] xz
libiconv openssl@3 ydiff
libpng pcre zstd
==> Casks
monitorcontrol raycast sleek
# [aws]
# format = '\[[$symbol($profile)(\($region\))(\[$duration\])]($style)\]'
# [cmake]
# format = '\[[$symbol($version)]($style)\]'
# [cmd_duration]
# format = '\[[⏱ $duration ]($style)\]'
# [cobol]
# format = '\[[$symbol($version)]($style)\]'
# [conda]
# format = '\[[$symbol$environment]($style)\]'
# [crystal]
# format = '\[[$symbol($version)]($style)\]'
# [dart]
# format = '\[[$symbol($version)]($style)\]'
# [deno]
# format = '\[[$symbol($version)]($style)\]'
# [docker_context]
# format = '\[[$symbol$context]($style)\]'
# [dotnet]
# format = '\[[$symbol($version)(🎯 $tfm)]($style)\]'
# [elixir]
# format = '\[[$symbol($version \(OTP $otp_version\))]($style)\]'
# [elm]
# format = '\[[$symbol($version)]($style)\]'
# [erlang]
# format = '\[[$symbol($version)]($style)\]'
# [gcloud]
# format = '\[[$symbol$account(@$domain)(\($region\))]($style)\]'
# [git_branch]
# format = '\[[$symbol$branch]($style)\]'
# [git_status]
# format = '([\[$all_status$ahead_behind\]]($style))'
# [golang]
# format = '\[[$symbol($version)]($style)\]'
# [helm]
# format = '\[[$symbol($version)]($style)\]'
# [hg_branch]
# format = '\[[$symbol$branch]($style)\]'
# [java]
# format = '\[[$symbol($version)]($style)\]'
# [julia]
# format = '\[[$symbol($version)]($style)\]'
# [kotlin]
# format = '\[[$symbol($version)]($style)\]'
# [kubernetes]
# format = '\[[$symbol$context( \($namespace\))]($style)\]'
# [lua]
# format = '\[[$symbol($version)]($style)\]'
# [memory_usage]
# format = '\[$symbol[$ram( | $swap)]($style)\]'
# [nim]
# format = '\[[$symbol($version)]($style)\]'
# [nix_shell]
# format = '\[[$symbol$state( \($name\))]($style)\]'
# [nodejs]
# format = '\[[$symbol($version)]($style)\]'
# [ocaml]
# format = '\[[$symbol($version)(\($switch_indicator$switch_name\))]($style)\]'
# [openstack]
# format = '\[[$symbol$cloud(\($project\))]($style)\]'
# [package]
# format = '\[[$symbol$version]($style)\]'
# [perl]
# format = '\[[$symbol($version)]($style)\]'
# [php]
# format = '\[[$symbol($version)]($style)\]'
# [pulumi]
# format = '\[[$symbol$stack]($style)\]'
# [purescript]
# format = '\[[$symbol($version)]($style)\]'
# [python]
# format = '\[[${symbol}${pyenv_prefix}(${version})(\($virtualenv\))]($style)\]'
# [red]
# format = '\[[$symbol($version)]($style)\]'
# [ruby]
# format = '\[[$symbol($version)]($style)\]'
# [rust]
# format = '\[[$symbol($version)]($style)\]'
# [scala]
# format = '\[[$symbol($version)]($style)\]'
# [swift]
# format = '\[[$symbol($version)]($style)\]'
# [terraform]
# format = '\[[$symbol$workspace]($style)\]'
# [time]
# format = '\[[$time]($style)\]'
# [username]
# format = '\[[$user]($style)\]'
# [vagrant]
# format = '\[[$symbol($version)]($style)\]'
# [vlang]
# format = '\[[$symbol($version)]($style)\]'
# [zig]
# format = '\[[$symbol($version)]($style)\]'
# [battery]
# full_symbol = "🔋"
# charging_symbol = "🔌"
# discharging_symbol = "⚡"
# [[battery.display]]
# threshold = 30
# style = "bold red"
# [hostname]
# ssh_only = false
# format = "<[$hostname]($style)>"
# trim_at = "-"
# style = "bold dimmed white"
# disabled = false
format = """
[](#9A348E)\
$username\
[](bg:#DA627D fg:#9A348E)\
$directory\
[](fg:#DA627D bg:#FCA17D)\
$git_branch\
$git_status\
[](fg:#FCA17D bg:#86BBD8)\
$nodejs\
$rust\
[](fg:#86BBD8 bg:#33658A)\
$time\
[ ](fg:#33658A)\
"""
# Disable the blank line at the start of the prompt
# add_newline = false
# You can also replace your username with a neat symbol like  to save some space
[username]
show_always = true
style_user = "bg:#9A348E"
style_root = "bg:#9A348E"
format = '[$user ]($style)'
[directory]
style = "bg:#DA627D"
format = "[ $path ]($style)"
truncation_length = 3
truncation_symbol = "…/"
# Here is how you can shorten some long paths by text replacement
# similar to mapped_locations in Oh My Posh:
[directory.substitutions]
"Documents" = " "
"Downloads" = " "
"Music" = " "
"Pictures" = " "
# Keep in mind that the order matters. For example:
# "Important Documents" = "  "
# will not be replaced, because "Documents" was already substituted before.
# So either put "Important Documents" before "Documents" or use the substituted version:
# "Important  " = "  "
[git_branch]
symbol = ""
style = "bg:#FCA17D"
format = '[[ $symbol $branch ](bg:#FCA17D)]($style)'
[git_status]
style = "bg:#FCA17D"
format = '[[($all_status$ahead_behind )](bg:#FCA17D)]($style)'
[nodejs]
symbol = ""
style = "bg:#86BBD8"
format = '[[ $symbol ($version) ](bg:#86BBD8)]($style)'
[rust]
symbol = ""
style = "bg:#86BBD8"
format = '[[ $symbol ($version) ](bg:#86BBD8)]($style)'
[time]
disabled = false
time_format = "%R" # Hour:Minute Format
style = "bg:#33658A"
format = '[[ ♥ $time ](bg:#33658A)]($style)'
[character]
success_symbol = "[>](bold green)"
error_symbol = "[x](bold red)"
vimcmd_symbol = "[<](bold green)"
[git_commit]
tag_symbol = " tag "
[git_status]
ahead = ">"
behind = "<"
diverged = "<>"
renamed = "r"
deleted = "x"
[aws]
symbol = "aws "
[azure]
symbol = "az "
[bun]
symbol = "bun "
[c]
symbol = "C "
[cobol]
symbol = "cobol "
[conda]
symbol = "conda "
[crystal]
symbol = "cr "
[cmake]
symbol = "cmake "
[daml]
symbol = "daml "
[dart]
symbol = "dart "
[deno]
symbol = "deno "
[dotnet]
symbol = ".NET "
[directory]
read_only = " ro"
[docker_context]
symbol = "docker "
[elixir]
symbol = "exs "
[elm]
symbol = "elm "
[fennel]
symbol = "fnl "
[fossil_branch]
symbol = "fossil "
[gcloud]
symbol = "gcp "
[git_branch]
symbol = "git "
[golang]
symbol = "go "
[gradle]
symbol = "gradle "
[guix_shell]
symbol = "guix "
[hg_branch]
symbol = "hg "
[java]
symbol = "java "
[julia]
symbol = "jl "
[kotlin]
symbol = "kt "
[lua]
symbol = "lua "
[nodejs]
symbol = "nodejs "
[memory_usage]
symbol = "memory "
[meson]
symbol = "meson "
[nim]
symbol = "nim "
[nix_shell]
symbol = "nix "
[ocaml]
symbol = "ml "
[opa]
symbol = "opa "
[os.symbols]
Alpaquita = "alq "
Alpine = "alp "
Amazon = "amz "
Android = "andr "
Arch = "rch "
Artix = "atx "
CentOS = "cent "
Debian = "deb "
DragonFly = "dfbsd "
Emscripten = "emsc "
EndeavourOS = "ndev "
Fedora = "fed "
FreeBSD = "fbsd "
Garuda = "garu "
Gentoo = "gent "
HardenedBSD = "hbsd "
Illumos = "lum "
Linux = "lnx "
Mabox = "mbox "
Macos = "mac "
Manjaro = "mjo "
Mariner = "mrn "
MidnightBSD = "mid "
Mint = "mint "
NetBSD = "nbsd "
NixOS = "nix "
OpenBSD = "obsd "
OpenCloudOS = "ocos "
openEuler = "oeul "
openSUSE = "osuse "
OracleLinux = "orac "
Pop = "pop "
Raspbian = "rasp "
Redhat = "rhl "
RedHatEnterprise = "rhel "
Redox = "redox "
Solus = "sol "
SUSE = "suse "
Ubuntu = "ubnt "
Unknown = "unk "
Windows = "win "
[package]
symbol = "pkg "
[perl]
symbol = "pl "
[php]
symbol = "php "
[pijul_channel]
symbol = "pijul "
[pulumi]
symbol = "pulumi "
[purescript]
symbol = "purs "
[python]
symbol = "py "
[raku]
symbol = "raku "
[ruby]
symbol = "rb "
[rust]
symbol = "rs "
[scala]
symbol = "scala "
[spack]
symbol = "spack "
[solidity]
symbol = "solidity "
[status]
symbol = "[x](bold red) "
[sudo]
symbol = "sudo "
[swift]
symbol = "swift "
[terraform]
symbol = "terraform "
[zig]
symbol = "zig "
@kelong-shi-myob
Copy link

@kelong-shi-myob
Copy link

Powershell History and List View

Set-PSReadLineOption -PredictionSource History
Set-PSReadLineOption -PredictionViewStyle ListView

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment