:리눅스 :커맨드라인 :유틸리티

:리눅스 :커맨드라인 :유틸리티

2023-11-14 Note commandline dotenv linux mcfly notes starship utility

Junghanacs’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
  • * 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
      1. bat

      2. exa

      3. lsd

      4. delta

      5. dust

      6. duf

      7. broot

      8. fd

      9. rg: ripgrep

      10. ag

      11. fzf

      12. mcfly

      13. choose

      14. jq

      15. sd

      16. cheat

      17. tldr

      18. bottom

      19. glances

      20. gtop

      21. hyperfine

      22. gping

      23. procs

      24. httpie

      25. curlie

      26. xh

      27. zoxide

      28. dog

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 로 동기화가 된다. 이렇게 동기화 하는게 드랍박스를 사용하는 것 보다 나에게 편하다. 히스토리 관리 기능이 있긴 하지만 그 부분은 크게 기대를 안한다. 그냥 심리스하게 데스크탑과 노트북 간의 데이터를 동기화하고 싶은 것 뿐이다. 코드나 문서나 똑같이 각 목적에 따라서 깃허브를 사용하면 된다. 그게 문제될 일은 없었다. 물론 마치 서버 역할을 할 리눅스 머신이 하나 있으면 좋다. 크로스 플랫폼을 지원하긴 하지만 윈도우에서는 리눅스 파일 시스템의 메타 데이터가 제대로 반영이 안된다. 어떻게 하는 방법이 있을지도 모르겠지만, 그렇게 하면 언제나 문제가 발생하더라. 그래서 나는 리눅스로 다 통일했다.

Related-Notes

References

마지막 수정일자