dot ファイル 2022年版

現状の dot ファイルのたぐいをメモするついでに人に見せる形でまとめておこうと思う。

自分の思想として「フレームワークよりライブラリー」というのがあるので、プロシージャーの形で定型処理をまとめておいて実際の dot ファイルはプロシージャーを呼び出すようにしている。

github.com

Bash

Linux ではデフォルトのことが多い Bash を使っている。

リポジトリーをクローンしてきたところに各種 example を置いてあるので、それをコピーしてきて随時そのマシンに合わせて書き換える。

cd

mv .profile .profile.back
mv .bashrc .bashrc.back
mv .bash_logout .bash_logout.back

dot_files='path/to/this/repo'
cp "$dot_files/bash/.bash_profile.example" .bash_profile
cp "$dot_files/bash/.bashrc.example" .bashrc
cp "$dot_files/bash/.bash_logout.example" .bash_logout

# edit .bash_profile .bashrc .bash_logout

.bash_profile

.bash_profile はこんな感じ。

# dotfiles リポジトリーのディレクトリーを指定する
dot_files=.

# ここでプロシージャーを定義してあるライブラリーをロードする
# shellcheck source=/dev/null
source "$dot_files/sh/lib.sh"
# shellcheck source=/dev/null
source "$dot_files/bash/lib.bash"

# ~/.bin とかを PATH に追加
add_local_bin

# shellcheck source=/dev/null
source "$HOME/.bashrc"

# X 環境なら
setup_sands

# SSH エージェントを起動
# WSL2 の場合は Windows で起動してあるエージェントにつなぎに行くようにしてある(が、ちょっとバグってる
# くわしくは https://kakkun61.hatenablog.com/entry/2022/06/28/WSL2_%E3%81%AE_SSH_Agent_%E7%9B%86%E6%A0%BD
start_ssh_agent
# start_ssh_agent_wsl

# もろもろ設定のための環境変数の定義
setup_gpg

setup_git_env

setup_saml2aws

.bash_logoutSSH エージェントの後始末だけ。

.bashrc

.bashrc はこんな感じ。

# この辺は .bash_profile と一緒
dot_files=.

# shellcheck source=/dev/null
source "$dot_files/sh/lib.sh"
# shellcheck source=/dev/null
source "$dot_files/bash/lib.bash"

# もろもろ設定
# 環境変数の定義したり eval したり source したり
setup_nix

setup_less

setup_prompt "$dot_files"

setup_dircolors

setup_bashmarks "$dot_files"

setup_fuck

setup_bash_config

setup_ls

setup_shellcheck

setup_direnv

setup_git_completion "$dot_files"

使ってるツール

あんまり多くは使ってないが使ってるのは次のような感じ。

  • fuck
    • 「それはまちがいだからこう実行しなおしてね」というエラーのときに fuck と打てばよくなる
  • direnv
    • nix と連携してる
  • nix
    • バージョン違いの C ライブラリーとかインストールして管理できる
  • shellcheck

PowerShell

しごとでないときは WindowsPowerShell を使っている。

PowerShell には標準でパッケージマネージャーが付いてくるので外部ライブラリーを入れるのが簡単。

[Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSAvoidUsingInvokeExpression', '', Justification = 'For the fuck')]

param ()

# dotfiles リポジトリーのディレクトリーを指定する
$dotFiles = '.'

# 自前ライブラリーをインポート
. $dotFiles\pwsh\lib.ps1

# 外部ライブラリーをインポート
Import-Module Posh-Git
Import-Module posh-sshell
Import-Module PSBookmark
Import-Module psake
Import-Module ghcman
Import-Module path-switcher
Import-Module code-page

Import-DotenvModule

# SSH エージェントの起動
Start-SshAgent -Quiet

# 環境変数の設定とかローカルの ps1 ファイルのインポートとか
Initialize-Chocolatey
Initialize-Python

# the fuck
Invoke-Expression "$(thefuck --alias)"

# prompt
Set-Item -Path Function:\prompt -Value (Get-Prompt) -Options ReadOnly

# arduino
. $dotFiles\lib\arduino-cli\completion.ps1

使ってるツール

  • Posh-Git
    • プロンプトに Git の情報を表示したり
  • posh-sshell
    • SSH エージェントの管理
  • PSBookmark
  • psake
  • ghcman
    • GHC の管理(自作)
  • path-switcher
    • PATH の管理用ユーティリティー(自作)
  • code-page

NixOS

この年末年始に NixOS 機が1つできたのでそれは当然 /etc/nixos/configuration.nix で管理しているが、home-manager までは手が出ていない。

github.com