なつねこメモ

主にプログラミング関連のメモ帳 ♪(✿╹ヮ╹)ノ 書いてあるコードは自己責任でご自由にどうぞ。記事本文の無断転載は禁止です。

Windows の Terminal 環境を整えたい

整えるというか、普段仕事で使っている macOS / Ubuntu に合わせるって言うのが近いけども。
Windows の環境をいろいろいじっていくメモ。

前提環境:

  • Windows 10 Pro
    • WSL2 じゃないよ!
  • Windows Terminal 1.1.2021.0
  • PowerShell Core 7.0.3 (x64)
  • Rust 1.44.1 (rustc -V)

ということでやっていきます。
基本的には、極力どの環境でも動く、かつデフォルトに近い設定で運用していくのをポリシーとしています。

ということで、まずは Starship を導入します。
シェル叩いてもいいのですが、私は Rust の環境を持っているので、 crates.io 経由で入れます。

$ cargo install starship

ビルド&インストールが完了したら、プロフィールに Starship の初期化スクリプトを追記します。
基本は %USERPROFILE%\Documents\PowerShell\Microsoft.PowerShell_profile.ps1 にあります。

// 下記を一番下に追記
Invoke-Expression (&starship init powershell)

そして再読み込み

. $PROFILE

何もしなくても良い感じですね。
あとはお好みの starship.toml を突っ込んであげましょう。
場所は %USERPROFILE%/.config/starship.toml です。

$ curl https://raw.githubusercontent.com/mika-f/dotfiles/master/.config/starship.toml -o ~/.config/starship.toml

次はコマンド類を入れていきます。
この辺は好みのものを入れておけばいいと思います。

$ cargo install fd-find
$ cargo install lsd
$ cargo install ripgrep

そして alias を貼っておきます。

Set-Alias ls lsd

このままだと lsd の表示が悲しいままなので、 Nerd Fonts 対応フォントをいれます。
私はお試しで白源フォントを入れてみました。

github.com

ただ、このままだと一部コマンドが PowerShell の Alias になっていて、使い勝手が違っていて面倒なので、
Rust でのクロスプラットフォーム実装である uutils/coreutils のものと置き換えます。
ただし、そのままインストールすると Multicall-Binary になっていて面倒なので、個別で入れます。
uutils/coreutils の各パッケージは uu_command の名前でレジストリに登録されているので、
必要なものを入れていきます。多いですね。

$ cargo install uu_cat
$ cargo install uu_cut
$ cargo install uu_cp
$ cargo install uu_date
$ cargo install uu_echo
$ cargo install uu_false
$ cargo install uu_head
$ cargo install uu_mkdir
$ cargo install uu_mv
$ cargo install uu_printenv
$ cargo install uu_pwd
$ cargo install uu_rm
$ cargo install uu_tail
$ cargo install uu_touch
$ cargo install uu_true
$ cargo install uu_uniq
$ cargo install uu_wc
$ cargo install uu_yes

ただ、このままだと PowerShell の alias だったり、 Windows のものだったりが呼ばれるので、
上記のもので置き換えるようにします。

# Replaced by Unix CoreUtils
function Replace-Alias($cmd) {
  Get-Alias $cmd *>1 && Remove-Alias $cmd
}

Replace-Alias cat
Replace-Alias cp
Replace-Alias echo
Replace-Alias mv
Replace-Alias pwd
Replace-Alias rm

# Call CoreUtils CLI instead of Windows System Commands
function Call-CoreUtils($cmd) {
  Set-Variable -name "CoreUtils_$cmd" -value "function $cmd() { $cmd.exe `$args }" -scope global
  Get-Variable "CoreUtils_$cmd" -ValueOnly | Invoke-Expression
}

Call-CoreUtils mkdir

あと、 PowerShell の where が気に入らないので、 where.exewhich で呼ぶようにします。

Set-Alias which where.exe

あとは便利ツールをいくつか
私は Golang の開発環境は持っていないので、おとなしく Scoop 経由で入れます。

$ scoop install gh
$ scoop install ghq
$ scoop install hub

こんな感じで、ある程度の動作は macOS / Ubuntu に合わせられました。
ということで今回は終わり。