Dotfiles 紹介


https://github.com/zakuro9715/dotfiles

私の Dotfiles の気に入っている部分を紹介します。

Install & bootstrap

zsh bootstrap.zsh 一発ですべてがセットアップされます。

また、完全に新規の環境でも、'curl -sSL za.kuro.red/install.sh | sh' とするだけで環境が構築されます。

Installer

installers に入っているスクリプトが自動でインストーラとして実行されます。

Repo コマンド

概要

repo コマンドは、リポジトリ名から cd ディレクトリに cd し、ターミナルのタイトルをリポジトリ名にセットされます。

リポジトリは ghq で管理しています。ghq と peco を組み合わせるパターンも観られますが、その場合タイプ数が多くなるので、コマンドを自作しました。

機能

  • repo [cd] NAME でリポジトリに移動します
  • repo get URL で ghq get でリポジトリを移動した後、repo cd と同様の処理をします

使用例

$ repo dotfiles            # リポジトリ名だけ指定
$ repo zakuro9715/dotfiles # 名前が被る場合は github.com やユーザー名をつけて指定
$ repo get github.com/github/hub # ghq get してから hub のリポジトリに移動

コード

https://github.com/zakuro9715/dotfiles/blob/7943a1e95586c69eae6747d85d7bfc4754b8aa7b/home/.zsh/commands.zsh#L6-L61

set-title() {
  title=$@
  if [[ -z "$title" ]];
  then
    title="$(basename $(pwd))"
  fi
  echo -ne "\033]0;${title}\a"
}

find-repo() {
  target="$(echo "/$1" | sed 's/\/\+/\//g')"  # multi slash to single slash
  ghq list -p | grep --color=never -E "$target$" | head -n1
}

cd-repo() {
  repo=$1
  dir=$(find-repo $repo)
  if [[ "$dir" == "" ]]
  then
    echo "Repository $repo not found" >&2
    return 1
  fi

  set-title "$(basename $dir)"
  cd $dir
}


get-cd-repo() {
  repo="$1"
  dir="$(ghq get --silent -u $repo 2>&1 | grep -oE $(ghq root)/.+$)"
  set-title "$(basename $dir)"
  cd "$dir"
}

repo() {
  mode="cd"
  case "$1" in
    "cd"  ) shift ;;
    "get" )
      mode="get"
      shift ;;
  esac

  if [[ -z "$1" ]];
  then
    echo "Usage: repo [get|cd] NAME" >&2
    return 1
  fi


  case "$mode" in
    "cd"  ) cd-repo "$1" ;;
    "get" ) get-cd-repo "$1" ;;
  esac
}

微妙なところ

今のところ補完がありません。