[전자동]Mac 환경 구축 Tips

16932 단어 환경 구축BashZsh
이 문서는 알라타나 어드벤트 캘린더 2019 14일 문서입니다.



소개



수리에 나와 돌아오기까지 시간이 걸린다는 이유만으로 몇 년간 무시해 왔다배터리 교체 프로그램에, 마침내 애용해 온 Mac을 내기로 결정했습니다.


슬프게도, 교환 프로그램에 내놓으면 내장되어 있는 데이터는 모두 없어져 버립니다.
백업 디스크를 사용하여 데이터 복원해도 좋지만 좋은 기회이므로 출하 상태에서 돌아온 깨끗한 Mac에 현재 사용하고 있는 개발 환경만을 이식하기로 했습니다.

거기서, 이번 교환에 내기 전의 Mac의 개발 환경을 가능한 한 편하게 이식할 수 있는 쉘을 짜 보았습니다.
bash의 첫 견해가 충분하지 않은 경우

이번 코드를 정리한 리포지토리은 이쪽.

개요


シェル(zsh), エディタ(VSCode), GUIアプリ를 1명령으로 설치(일부 설정까지)까지 실시합니다.

마이그레이션하기 전에 먼저 zsh 관련 파일을 분할



앞으로 확장해 나갈 것도 생각해 파일 분할을 실시했습니다.

.zshrc
ZSHHOME="${HOME}/.zsh.d"

if [ -d $ZSHHOME -a -r $ZSHHOME -a \
     -x $ZSHHOME ]; then
    for i in $ZSHHOME/*; do
        [[ ${i##*/} = *.zsh ]] &&
            [ \( -f $i -o -h $i \) -a -r $i ] && . $i
    done
fi
.zshrc 내에서 .zsh.d 다음 파일의 내용을 호출하여 파일 분할을 실현하고 있습니다.
자세한 옵션은 여기을 참조하십시오.

출력 색칠



처리 결과에 의해 출력되는 캐릭터 라인의 색을 전환합니다.

lib/echos.sh
#!/bin/bash

readonly RED=$(tput setaf 1)
readonly GREEN=$(tput setaf 2; tput bold)
readonly YELLOW=$(tput setaf 3)
readonly CYAN=$(tput setaf 6)
readonly NORMAL=$(tput sgr0)

function ok() {
  printf "%s\n" "$GREEN$1$NORMAL"
}

function info() {
  printf "%s\n" "$CYAN$1$NORMAL"
}

function warn() {
  printf "%s\n" "$YELLOW$1$NORMAL"
}

function fail() {
  printf "%s\n" "$RED$1$NORMAL"
}

출력하면 이런 느낌


다양한 설치 및 설정



brew



setup.sh
#!/bin/bash
set -euo pipefail

function command_exists() {
  type "$1" &> /dev/null ;
}

: "install brew" && {
  if ! command_exists brew; then
    info "installing brew..."
    /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
  else
    warn "brew is already installed"
  fi
}

: "install zsh by brew" && {
  # Catalinaからは標準shellがzshになっているので分岐を用意
  if ! command_exists zsh; then
    info "installing zsh..."
    brew install zsh zsh-completions
    sudo sh -c 'echo $(brew --prefix)/bin/zsh >> /etc/shells'
    chsh -s $(brew --prefix)/bin/zsh
  else
    warn "zsh is already installed"
  fi
}

: "install other packages by brew" && {
  # 使用したいパッケージをスペース区切りで書きます (カンマ区切りにするとエラーになる)
  # 後述で使用するcaskもここでインストール対象とします
  packages=( caskroom/cask/brew-cask jq tree )
  for package in ${packages[@]}; do
    if ! brew list | grep $package &> /dev/null; then
      info "installing ${package}..."
      brew install ${package}
    else
      warn "${package} is already installed"
    fi
  done
  brew cleanup
}

brew-cask



homebrew-cask란?brew cask에 대한 자세한 내용은 위의 기사를 참조하십시오.

setup.sh
: "install brew cask" && {
  # 使用したいパッケージをスペース区切りで書きます (カンマ区切りにするとエラーになる)
  packages=( iterm2 visual-studio-code )
  for package in ${packages[@]}; do
    if ! brew cask list | grep $package &> /dev/null; then
      info "installing ${package}..."
      brew cask install ${package}
    else
      warn "${package} is already installed"
    fi
  done
}

oh-my-zsh



setup.sh
: "install oh-my-zsh" && {
  if [ ! -e $HOME/.oh-my-zsh ]; then
    info "installing oh-my-zsh..."
    curl -L https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh | sh
    git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
  else
    warn "oh-my-zsh is already installed"
  fi
  info "installing zsh theme..."
  git clone https://github.com/wesbos/Cobalt2-iterm.git
  cd Cobalt2-iterm && cp cobalt2.zsh-theme ~/.oh-my-zsh/themes/
  cd ../ && rm -rf Cobalt2-iterm
}

VSCode



setup.sh
: "setting vscode" && {
  info "create symbolic..."
  SCRIPT_DIR=$(cd $(dirname $0) && pwd)
  VSCODE_SETTING_DIR=~/Library/Application\ Support/Code/User

  rm "$VSCODE_SETTING_DIR/settings.json"
  ln -s "$SCRIPT_DIR/settings.json" "${VSCODE_SETTING_DIR}/settings.json"
}

원라이너로 설치



이대로는 git 를 사용할 수 없는 경우, 상기의 코드를 취득하는 방법이 한정되어 버리므로, HTTP 경유( curl, wget )로 환경을 구축할 수 있도록(듯이) 합니다.

install.sh
DOTPATH=~/dotfiles

function command_exists() {
  type "$1" &> /dev/null ;
}

: "install dotfiles" && {
  if command_exists git; then
    git clone "https://github.com/{your_github_name}/dotfiles.git" "$DOTPATH"

  elif command_exists curl || command_exists wget; then
    tarball="https://github.com/{your_github_name}/dotfiles/archive/master.tar.gz"

    if command_exists curl; then
        curl -L "$tarball"

    elif command_exists wget; then
        wget -O - "$tarball"

    fi | tar zxv -C ~/
    mkdir -p ~/dotfiles
    mv -i ~/dotfiles-master/* "$DOTPATH" && rm -rf ~/dotfiles-master
  else
    echo "curl or wget required"
  fi
}

: "deploy and setup" && {
  cd ~/dotfiles
  if [ $? -ne 0 ]; then
    echo "not found: $DOTPATH"
  else
    sh setup.sh
  fi
}

자신의 환경에서 사용할 수 있는 명령( git , curl , wget )에 의해 처리를 나누어, 로컬 환경에 소스를 배치합니다.
그런 다음 이전 setup.sh을 실행하기 만하면됩니다.

사용법



terminal
$ curl -L raw.github.com/{github_name}/dotfiles/master/install.sh | bash

결론



요전날, 수리에 내고 있던 PC도 무사히 수중에 돌아왔습니다.
출하 시의 상태로부터 1명령으로 이전까지의 개발 환경을 재현할 수 있었으므로 만족합니다!

참고


  • dotfiles 정리
  • 우수한 dotfiles를 설계하고 가장 빠른 환경 구축을위한 이야기
  • ymm1x/dotfiles
  • 좋은 웹페이지 즐겨찾기