:리눅스 :커맨드라인 :유틸리티
2023-11-14 Note commandline dotenv linux mcfly notes starship utilityJunghanacs’s System Configure Files
from injae-dotfiles/env.org:1
샘플로 추후에 활용 방안 고민
DotEnv
~/.zshrc
#!/bin/zsh
export LANG="en_US.UTF-8"
export LANGUAGE="ko_KR.UTF-8"
source "$HOME/.local/share/zinit/zinit.git/zinit.zsh"
autoload -Uz _zinit
(( ${+_comps} )) && _comps[zinit]=_zinit
zicompinit
autoload -Uz compinit
compinit
autoload -U bashcompinit
bashcompinit
# Load a few important annexes, without Turbo
# (this is currently required for annexes)
ZSH_THEME="lambda"
setopt promptsubst
zinit light-mode for \
zdharma-continuum/zinit-annex-as-monitor \
zdharma-continuum/zinit-annex-bin-gem-node \
zdharma-continuum/zinit-annex-patch-dl \
zdharma-continuum/zinit-annex-rust
zinit snippet OMZP::git
zinit snippet OMZP::pip
zinit snippet OMZP::command-not-found
zinit snippet OMZP::colored-man-pages
zinit ice as"completion"
zinit snippet https://github.com/docker/cli/blob/master/contrib/completion/zsh/_docker
zinit light zsh-users/zsh-completions
zinit light djui/alias-tips
zinit light zsh-users/zsh-autosuggestions
zinit light zdharma-continuum/fast-syntax-highlighting
zinit light zsh-users/zsh-syntax-highlighting
zinit light zsh-users/zsh-history-substring-search
zinit light MichaelAquilina/zsh-you-should-use
zinit light iam4x/zsh-iterm-touchbar
zinit load agkozak/zsh-z
### End of Zinit's installer chunk
eval "$(starship init zsh)"
# rtx setting
eval "$(rtx activate zsh)"
# emacs setting
export EDITOR=emacsclient
alias edit=emacsclient
#export EDITOR=nvim
#export VISUAL=$EDITOR
# emacs vterm setting
#export TERM=xterm-256color
#unsetopt prompt_cr prompt_sp
autoload -U add-zsh-hook
add-zsh-hook -Uz chpwd (){ print -Pn "\e]2;%m:%2~\a" }
vterm_printf(){
if [ -n "$TMUX" ] && ([ "${TERM%%-*}" = "tmux" ] || [ "${TERM%%-*}" = "screen" ] ); then
# Tell tmux to pass the escape sequences through
printf "\ePtmux;\e\e]%s\007\e\\" "$1"
elif [ "${TERM%%-*}" = "screen" ]; then
# GNU screen (screen, screen-256color, screen-256color-bce)
printf "\eP\e]%s\007\e\\" "$1"
else
printf "\e]%s\e\\" "$1"
fi
}
if [[ "$INSIDE_EMACS" = 'vterm' ]]; then
alias clear='vterm_printf "51;Evterm-clear-scrollback";tput clear'
fi
# zsh-iterm-touchbar setting
TOUCHBAR_GIT_ENABLED=true
YARN_ENABLED=true
case "$OSTYPE" in
darwin*)
# c/cpp compiler
alias clang=clang-17
alias clang++=clang++-17
alias gcc=gcc-13
alias g++=g++-13
# vm controller
alias vmrun="/Applications/VMWare\ Fusion.app/Contents/Library/vmrun"
alias vmsee="vmrun list"
alias vmstart="vmrun start ~/Virtual\ Machines.localized/Windows\ 10\ x64.vmwarevm nogui"
alias vmstop="vmrun suspend ~/Virtual\ Machines.localized/Windows\ 10\ x64.vmwarevm"
# ruby open-ssl fix
export RUBY_CONFIGURE_OPTS="--with-openssl-dir=$(brew --prefix openssl@1.1)"
# llvm stable
export PATH="/usr/local/opt/llvm/bin:$PATH"
export LDFLAGS="-L/usr/local/opt/llvm/lib"
export PATH="/usr/local/opt/openjdk/bin:$PATH"
export PATH="/usr/local/sbin:$PATH"
export PATH=~/.local/bin:$PATH
;;
linux*)
# alias clang=clang-13
# alias clang++=clang++-13
# wsl vpn-kit start command
alias vpn-start="wsl.exe -d wsl-vpnkit --cd /app service wsl-vpnkit start"
;;
dragonfly*|freebsd*|netbsd*|openbsd*)
# ...
;;
esac
export GO111MODULE=on
export CC=clang
export CXX=clang++
export AR=llvm-ar
export RANLIB=llvm-ranlib
alias CC=$CC
alias CXX=$CXX
alias cc=$CC
alias ld=$LD
alias ar=$AR
alias ranlib=$RANLIB
# more fast system command , use rust base command
if [ -x "$(command -v exa)" ]; then
alias ls='exa -g --time-style=long-iso'
fi
if [ -x "$(command -v bat)" ]; then
alias cat='bat'
fi
if [ -x "$(command -v fd)" ]; then
alias find='fd'
fi
if [ -x "$(command -v rg)" ]; then
alias grep='rg'
fi
if [ -x "$(command -v procs)" ]; then
alias ps='procs'
fi
if [ -x "$(command -v ytop)" ]; then
alias top='ytop'
fi
if [ -x "$(command -v et)" ]; then
alias tree='et -I'
fi
if [ -x "$(command -v mcfly)" ]; then
eval "$(mcfly init zsh)"
fi
alias ppytest='poetry run pytest'
alias pr='poetry run python'
# kuberneties setting
# source "$(kubectl completion zsh)"
export PATH="$PATH:$HOME/.ghcup/bin"
export PATH="$PATH:$HOME/.cargo/bin"
export PATH="$PATH:$HOME/vcpkg"
export PATH="$PATH:$HOME/.local/bin"
export PATH="$PATH:$HOME/.cppm/bin"
export PKG_CONFIG_PATH="$PKG_CONFIG_PATH:$HOME/.cppm/local/lib/pkg-config:/usr/local/opt/libpq/lib/pkgconfig"
# openjdk setting
vterm_prompt_end() {
vterm_printf "51;A$(whoami)@$(hostname):$(pwd)";
}
setopt PROMPT_SUBST
PROMPT=$PROMPT'%{$(vterm_prompt_end)%}'
export SSH_AUTH_SOCK="$XDG_RUNTIME_DIR/ssh-agent.socket"
eval "$(register-python-argcomplete pipx)"
~/.zshenv
# telepresence kubectl 정보수집 비활성화
export SCOUT_DISABLE=1
# aseprite setting
export ASEPRITE_USER_FOLDER="$HOME/.config/aseprite/"
# rust sdl2 link setting
# export SDKROOT="/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk"
#export KUBECONFIG="$HOME/.config/kubernetes/admin.conf"
export KUBECONFIG="$HOME/.kube/config"
# helm local docker registry flag
export HELM_EXPERIMENTAL_OCI=1
export TF_PLUGIN_CACHE_DIR="$HOME/.terraform.d/plugin-cache"
# emacs lsp-mode
export LSP_USE_PLISTS=true
# enchant setting
export ENCHANT_CONFIG_DIR="$HOME/.config/enchant"
# rust sccache setting
export RUSTC_WRAPPER=sccache
export PATH="${KREW_ROOT:-$HOME/.krew}/bin:$PATH"
export PATH="$PATH:$HOME/.local/share/rtx/shims"
~/.config/starship.toml
/home/junghan/sync/man/dotsamples/desktop/thsu-brew-dotfiles/config/starship.toml:1
format = """
($username$hostname )\
$all\
$line_break\
$conda\
$jobs\
$battery\
$time\
$status\
$character"""
[character]
success_symbol = "[λ](bold green)"
error_symbol = "[λ](bold red)"
[battery]
format = "[$percentage]($style) "
[[battery.display]]
threshold = 10
style = "bold red"
[[battery.display]]
threshold = 30
style = "bold yellow"
[cmd_duration]
min_time = 60_000
[directory]
truncation_length = 5
truncate_to_repo = false
truncation_symbol = "…/"
style = "bold blue"
[git_branch]
format = "[$branch]($style) "
[git_status]
format = '([$ahead_behind$all_status]($style))'
conflicted = "= "
ahead = "⇡${ahead_count} "
behind = "⇣${behind_count} "
diverged = "⇡${ahead_count}⇣${behind_count} "
untracked = "?${count} "
stashed = "\\$${count} "
modified = "!${count} "
staged = "+${count} "
renamed = "»${count} "
deleted = "✘${count} "
style = "yellow"
[username]
format = "[$user]($style)"
style_user = "yellow"
[hostname]
format = "[@$hostname]($style)"
style = "yellow"
[python]
style = ""
[conda]
format = "[$environment]($style) "
style = "green"
~/.gitconfig
;; #+BEGIN_SRC gitconfig :tangle “~/.gitconfig”
[user]
name = injae
email = 8687lee@gmail.com
[core]
precomposeunicode = true
qutepath = false
[github]
user = injae
[filter "lfs"]
smudge = git-lfs smudge -- %f
process = git-lfs filter-process
required = true
Starship - 크로스-쉘 프롬프트 | GeekNews
https://news.hada.io/topic?id=13084
curl -sS https://starship.rs/install.sh | sh
toml
# curl -sS https://starship.rs/install.sh | sh
format = """
($username$hostname )\
$all\
$line_break\
$conda\
$jobs\
$battery\
$time\
$status\
$character"""
[character]
success_symbol = "[λ](bold green)"
error_symbol = "[λ](bold red)"
[battery]
format = "[$percentage]($style) "
[[battery.display]]
threshold = 10
style = "bold red"
[[battery.display]]
threshold = 30
style = "bold yellow"
[cmd_duration]
min_time = 60_000
[directory]
truncation_length = 5
truncate_to_repo = false
truncation_symbol = "…/"
style = "bold blue"
[git_branch]
format = "[$branch]($style) "
[git_status]
format = '([$ahead_behind$all_status]($style))'
conflicted = "= "
ahead = "⇡${ahead_count} "
behind = "⇣${behind_count} "
diverged = "⇡${ahead_count}⇣${behind_count} "
untracked = "?${count} "
stashed = "\\$${count} "
modified = "!${count} "
staged = "+${count} "
renamed = "»${count} "
deleted = "✘${count} "
style = "yellow"
[username]
format = "[$user]($style)"
style_user = "yellow"
[hostname]
format = "[@$hostname]($style)"
style = "yellow"
[python]
style = ""
[conda]
format = "[$environment]($style) "
style = "green"
cheat에 등록하라!
cheat
,mcfly
rg
ag
fzf
fd
tldr
choose
tree ->
broot
df ->
duf
du ->
dust
diff –>
delta
cat –>
bat
ls –>
exa
,lsd
Modern Unix
코드, 글, 커맨드 명령어 등 모든 기록은 검색이 용이해야 한다.
** References
:CUSTOM_ID: references
** 핵심 툴
:CUSTOM_ID: 핵심-툴
정보를 찾는 것이 핵심이다.
*
cheat
– Create and view interactive cheatsheets on the command-line:CUSTOM_ID: cheat-create-and-view-interactive-cheatsheets-on-the-command-line
- https://github.com/cheat/cheat
- mydotfiles/local/.config/cheat 에 personal cheat 을 기록하게 해놓음
- cheat tar 를 하면 community 에 있는 경우 화면에 출력이 된다. 여기에 내가 추가하고 싶다면, 아래와 같이 -e 를 주고 실행하면 된다.
- 수정을 하면, personal 폴더에 해당 파일이 복사 된다. community 폴더는 readonly 이다.
- 추가한 cmd 뿐만이 아니라 community 파일 내용이 복사되는 부분은 아쉽다. 효율성이 우선이 아닌가 싶다.
- 아래 =수정=하는 명령어 말고도 몇가지 옵션이 더 있는데 당장은 몰라도 될 것 같다.
- 내가 자주 사용하는 키를 모아두기 위한 것이 아닌가. auto completion 기능으로 어느 정도 커버가 되지만 그건 한계가 명확하다.
- 왜 cheat 를 맨 앞에 두었는가? 다음에 다룰 명령어들을 가장 쉽게 쓰기 위해서 cheat 기 필요하다. 안그래도 이런게 있을텐데 생각은 했었다.
shell # cheat modify ➜ cheat -e tar # opens the "tar" cheatsheet for editing, or creates it if it does not exist ➜ cheat -e foo/bar # nested cheatsheets are accessed like this
- 하나 더, -l -t 명령어로 해당 명령에 대한 cheat 가 있는지 확인해 볼 수 있다. ssh 키워드를 포함하는 녀석을 찾아볼 수 있으니 유용하다.
shell ➜ cheat -l -t ssh title: file: tags: ssh /home/junghan/.config/cheat/cheatsheets/community/ssh community,ssh ssh /home/junghan/mydotfiles/local/.config/cheat/cheatsheets/personal/ssh personal,ssh ssh-add /home/junghan/.config/cheat/cheatsheets/community/ssh-add community,ssh ssh-copy-id /home/junghan/.config/cheat/cheatsheets/community/ssh-copy-id community,ssh ssh-keygen /home/junghan/.config/cheat/cheatsheets/community/ssh-keygen community,ssh
- 맺으며…
*
mcfly
– Fly through your shell history. Great Scott!:CUSTOM_ID: mcfly-fly-through-your-shell-history.-great-scott
- https://github.com/cantino/mcfly
- mydotfiles 에 가끔 history.db 를 백업하면 되겠다.
- shell history 를 업그레이드하는 툴이다. 어디에서나 같은 히스토리를 사용할 수 있다.
- 히스토리를 기반으로 놓쳤던 기록을 문서화 하거나 –> cheat 으로 만들 수 있다.
- 커맨드라인에 제대로 입력하는 모든 정보가 기록되는 것이다.
- 설정도 몇가지 있는데 –> 확인이 필요하다.
shell # ~/.zshrc eval "$(mcfly init zsh)" # export MCFLY_LIGHT=TRUE export MCFLY_KEY_SCHEME=vim export MCFLY_FUZZY=2 export MCFLY_RESULTS=50 # export MCFLY_INTERFACE_VIEW=BOTTOM # export MCFLY_RESULTS_SORT=LAST_RUN
- 사용법
shell mcfly search
*
rg
– ripgrep An extremely fast alternative to grep that respects your gitignore:CUSTOM_ID: rg-ripgrep-an-extremely-fast-alternative-to-grep-that-respects-your-gitignore
- …
*
ag
:CUSTOM_ID: ag
- TOO ###
fzr
- … ###
tldr
- …
- TOO ###
*
choose
:CUSTOM_ID: choose
- A human-friendly and fast alternative to cut and (sometimes) awk
fd
A simple, fast and user-friendly alternative to find.- d
** All Lists
:CUSTOM_ID: all-lists
collapsed:: true
- Read! ./modern-unix.md
bat
exa
lsd
delta
dust
duf
broot
fd
rg: ripgrep
ag
fzf
mcfly
choose
jq
sd
cheat
tldr
bottom
glances
gtop
hyperfine
gping
procs
httpie
curlie
xh
zoxide
dog
- Read! ./modern-unix.md
mcfly
GitHub - cantino/mcfly: Fly through your shell history. Great Scott! 삼천포로 또 빠졌네?! 그래도 간만에 생각이 나서 기록하자. 최신 버전이 0.6.1 이네. 업데이트도 해주자. 참고로 나는 아래와 같이 .zshrc 를 사용하고 있다.
# if [ -f "$HOME"/.local/bin/mcfly ]; then
# eval "$(mcfly init zsh)"
# # export MCFLY_LIGHT=FALSE
# export MCFLY_KEY_SCHEME=vim
# export MCFLY_FUZZY=2
# export MCFLY_RESULTS=50
# # export MCFLY_INTERFACE_VIEW=BOTTOM
# # export MCFLY_RESULTS_SORT=LAST_RUN
# alias mc="mcfly"
# fi
히스토리 데이터베이스는 .local/share/mcfly 에 history.db 파일에 저장한다. 이게 기본이다. 이 파일 잘 관리하면 좋다. 나는 이 파일을 주기적으로 백업한다.
아래와 같이 history.db 는 심볼링 링크인데 syncthing 폴더에 넣어놨다. 여기에 넣어두면 나의 데스크탑에 P2P 로 동기화가 된다. 이렇게 동기화 하는게 드랍박스를 사용하는 것 보다 나에게 편하다. 히스토리 관리 기능이 있긴 하지만 그 부분은 크게 기대를 안한다. 그냥 심리스하게 데스크탑과 노트북 간의 데이터를 동기화하고 싶은 것 뿐이다. 코드나 문서나 똑같이 각 목적에 따라서 깃허브를 사용하면 된다. 그게 문제될 일은 없었다. 물론 마치 서버 역할을 할 리눅스 머신이 하나 있으면 좋다. 크로스 플랫폼을 지원하긴 하지만 윈도우에서는 리눅스 파일 시스템의 메타 데이터가 제대로 반영이 안된다. 어떻게 하는 방법이 있을지도 모르겠지만, 그렇게 하면 언제나 문제가 발생하더라. 그래서 나는 리눅스로 다 통일했다.