Home

Awesome

<link href="./style.css" rel="stylesheet"></link>

dotfiles

v.1.0.1

🏴‍☠ budybye/dotfiles

初期設定

sh -c $(curl -fsLS https://chezmoi.io/get) -- -b ${HOME}/.local/bin init --apply budybye
# or
chezmoi init --apply budybye

# ~/dotfiles に配置する場合
cd ~
git clone git@github.com:budybye/dotfiles.git
cd dotfiles
make init

git グローバル設定

# 環境変数 を設定していたら
cat <<EOF >~/.config/git/user.conf
[user]
    name = ${GIT_AUTHOR_NAME}
    email = ${GIT_AUTHOR_EMAIL}
EOF
# or
git config --global user.name ${GIT_AUTHOR_NAME}
git config --global user.email ${GIT_AUTHOR_EMAIL}
# コミットメッセージのテンプレート
git config --global commit.template ~/.config/git/commit_template

概要

目次

  1. XDG ディレクトリ構成
  2. 管理方法
  3. Chezmoi
  4. Makefile
  5. Github Actions
  6. Mise
  7. 環境変数
  8. Docker
  9. Multipass
  10. 参考文献

XDG Base Directory

XDG Base Directory Specification

~/
├── .config                         # XDG ディレクトリ構成に基づく設定ファイル
│   ├── vscode
│   │   ├── extensions.json         # VSCode の拡張機能の設定ファイル
│   │   └── User
│   │       ├── setting.json        # VSCode の設定ファイル
│   │       └── keybindings.json    # VSCode のキーバインド設定ファイル
│   ├── git                         
│   │   ├── config                  # Git の設定ファイル
│   │   ├── ignore                  # Git の無視ファイルの設定ファイル
│   │   ├── commit.template         # Git のコミットメッセージのテンプレート
│   │   └── user.conf               # Git のユーザー設定ファイル
│   ├── mise                        
│   │   └── config.toml             # mise の設定ファイル
│   ├── chezmoi                     
│   │   └── config.yaml             # chezmoi の設定ファイル
│   ├── sheldon                    
│   │   └── plugins.toml            # sheldon のプラグインの設定ファイル
│   ├── aquaproj-aqua              
│   │   └── aqua.yaml               # aqua の設定ファイル
│   ├── byobu                      
│   │   └── .tmux.conf              # byobu の設定ファイル
│   ├── tabby                       
│   │   └── config.yaml             # tabby の設定ファイル
│   ├── vim                        
│   │   └── vimrc                   # vim の設定ファイル
│   ├── fcitx5                      
│   │   └── config                  # fcitx5 の設定ファイル
│   ├── fusuma                      
│   │   └── config.yml              # fusuma の設定ファイル
│   ├── neofetch                    
│   │   └── config.conf             # neofetch の設定ファイル
│   ├── fish
│   │   └── config.fish             # fish の設定ファイル
│   ├── mpd
│   │   └── mpd.conf                # mpd の設定ファイル
│   ├── ncmpcpp
│   │   └── config                  # ncmpcpp の設定ファイル
│   ├── .editorconfig               # editorconfig の設定ファイル
│   ├── Brewfile                    # Brewfile
│   └── starship.toml               # starship の設定ファイル
├── .local                          # ローカルユーザーディレクトリ
│   ├── share
│   │   ├── fonts                   # フォントのディレクトリ
│   │   ├── backgrounds             # 壁紙のディレクトリ
│   │   └── themes                  # テーマのディレクトリ
│   └── bin
│       ├── init.sh                 # Chezmoi の初期化スクリプト make init
│       ├── install.sh              # Ubuntu のインストールスクリプト make install
│       ├── setup.sh                # Ubuntu のセットアップスクリプト make setup
│       ├── bootstrap.sh            # MacOS のブートストラップスクリプト make bootstrap
│       ├── defaults.sh             # MacOS のデフォルトスクリプト make defaults
│       └── codex.sh                # VSCode のスクリプト make code
├── .devcontainer                   
│    ├── dev                        # Docker volume 用のディレクトリ
│    ├── .devcontainer.json         # devcontainer の設定ファイル
│    ├── Dockerfile                 # Dockerfile
│    └── docker-compose.yaml        # docker-compose の設定ファイル
├── .github                         
│    └── workflows                 
│       └── .test.yaml              # Github Actions のテストの設定ファイル
├── cloud-init                         
│    ├── multipass.yaml             # Multipass のcloud-init ファイル
│    └── user-data.yaml             # cloud-init の設定ファイル
├── .profile                        # ログインシェルに共通で読み込まれるファイル
├── .aliases                        # エイリアスの設定ファイル
├── .zshrc                          # zsh の設定ファイル
├── .zshenv                         # zsh の環境変数
├── .bashrc                         # bash の設定ファイル
├── .bash_profile                   # bash の環境変数
├── .Makefile                       # Make で シェルスクリプトを設定管理 make sense
├── .mise.toml                      # mise の設定ファイル .env を読み込む
├── .env                            # 環境変数の設定ファイル
├── .chezmoiignore                  # chezmoi の除外ファイル
├── .chemoi.yaml.tmpl               # ~/.local/share/chezmoi.yaml になる設定ファイル
├── run_once_update.sh.tmpl         # chezmoi の一度だけ実行するスクリプト
├── run_onchange_userconf.sh.tmpl   # chezmoi のapply時に実行するスクリプト
├── data                            # データのディレクトリ
├── Applications                    # AppImage 系のディレクトリ
├── etc...                          # その他

管理方法

1. Chezmoiの活用

2. Makeとの併用

3. .devcontainerとの統合

4. Github Actions でテスト

flowchart TD
    A[ドットファイル管理] --> B[Chezmoi]
    A --> C[Make]
    A --> D[Docker]
    A --> E[Multipass]
    
    B --> B1[初期化]
    B1 --> B2[設定ファイルを適用]
    B2 --> B3[環境変数を管理]
    
    C --> C1[Makefileを使用]
    C1 --> C2[シェルスクリプトを実行]
    C2 --> C3[環境ごとの設定を管理]
    
    D --> D1[Dockerイメージをビルド]
    D1 --> D2[コンテナを起動]
    D2 --> D3[環境を構築]
    
    E --> E1[MultipassでVMを起動]
    E1 --> E2[cloud-initを使用]
    E2 --> E3[カスタマイズされた環境を構築]
sequenceDiagram
    participant H as Home Directory
    participant W as Working Copy
    participant L as Local Repo
    participant R as Remote Repo

    H->>L: chezmoi init
    H->>W: chezmoi add <file>
    W->>W: chezmoi edit <file>
    W-->>H: chezmoi diff
    W->>H: chezmoi apply
    H-->>W: chezmoi cd
    W->>L: git add .
    W->>L: git commit
    L->>R: git push
    R->>H: chezmoi init --apply <repo>

管理方法

OS管理方法コメント
macOSMakeスクリプトの実行や環境設定に適している
UbuntuMake同上
WindowsChezmoiWindows特有の設定を管理するのに適している

メリットとデメリット

メリットデメリット
一貫性のある開発環境学習コストがかかる
環境の再現性リソースの消費
依存関係の管理複雑性の増加

ツールのインストール

MacOSUbuntuDocker
Chezmoibrewmisemise
Scriptmakemakemake
Makefilemakemakemake
Zshdefaultaptapt
Gitbrewaptapt
Github Actions
Github CLIbrewaptapt
Bitwarden CLIbrewsnap/npmsnap/npm
Dockerbrewaptapt
Dev Container
Multipassbrewsnapsnap
Homebrew
CLI ToolMacOSUbuntuDocker
Byobubrewaptapt
Vimbrewaptapt
Fishbrewaptapt
aqua VMbrewaptapt
MPDbrewaptapt
Ncmpcppbrewaptapt
fcitx5aptapt
Neofetchfastfetchaptapt
Rust ToolMacOSUbuntuDocker
Misebrewcurlcurl
Starshipbrewmise/cargomise/cargo
Sheldonbrewcargocargo
lsdbrewaptapt
batbrewaptapt
ripgrepbrewaptapt
fzfbrewaptapt
zoxidebrewaptapt
fd-findbrewaptapt
LanguageMacOSUbuntuDocker
Node.jsmisemisemise
Bunmisemisemise
Denomisemise/snapmise/snap
Gomisemise/snapmise/snap
Pythonmisemise/aptmise/apt
Javamisemise/aptmise/apt
Rustmisemise/aptmise/apt
Rubymisemise/aptmise/apt
DesktopMacOSUbuntuDocker
Xfce4aptapt
Xrdpaptapt
VSCodebrewapt
VSCodiumsnapsnap
CursorbrewAppImageAppImage
Github Desktopbrewaptapt
Tabbybrewaptapt
Bravebrewaptapt
Cloudflare Warpbrewaptapt
Wiresharkbrewaptapt
Fusumagemgem
Karabiner-Elementsbrew

Chezmoi の使用

Chezmoi を使用して Dotfiles を管理します。

# インストールされてない場合
curl -sfL https://chezmoi.io/get | sh -s -- init --apply budybye
# or
make init

# MacOS
brew install chezmoi

# 初期化 ~/.local/share/chezmoi が作成されて ~/ 以下に反映される
chezmoi init --apply budybye
# cd コマンドで移動 ~/.local/share/chezmoi
chezmoi cd
# ファイルを追加
chezmoi add < Filename >
# ファイルを追加(シンボリックリンク)
chezmoi add --follow < Filename >
# ファイルの差分を確認
chezmoi diff < option Filename >
# 変更を適用
chezmoi apply < option Filename >
# ファイルの属性を変更
chezmoi chattr < Filename >
# リモートからの状態を反映
chezmoi update
# .chezmoi.* から取得できる情報を表示
chezmoi data

Makefile

Makefile でシェルスクリプトを管理。

# 環境ごとに分けたシェルスクリプトを実行
make sense
# シェルスクリプトを実行
make init
make install
make setup
make bootstrap
make defaults
make code
make link
make keygen
ifeq ($(OS),Darwin  )
    # MacOS の場合
    sense: init bootstrap
else ifeq ($(OS),Linux)
    # Ubuntu の場合
    sense: init install setup
endif

# 環境ごとに分けたシェルスクリプトを指定
install:
    sh $(HOME)/.local/bin/install.sh
bootstrap:
    sh $(HOME)/.local/bin/bootstrap.sh
setup:
    sh $(HOME)/.local/bin/setup.sh
init:
    curl -sfL https://chezmoi.io/get | sh -s -- init --apply -S .
...

Github Actions

test.yaml でテスト


jobs:
  # ubuntu 24.04 でテスト
  ubuntu:
    runs-on: ubuntu-24.04
    steps:
      - uses: actions/checkout@v4
      # make 経由でシェルスクリプトを実行
      - run: make sense
    ...
  # macos sequoia でテスト
  macos:
    runs-on: macos-15
    ...
  # docker でテスト
  docker:
    runs-on: ubuntu-latest
    steps:
      # docker製のアクションを使用
      - uses: docker/login-action@v3
      - uses: docker/setup-buildx-action@v3
      - uses: docker/setup-qemu-action@v3 # クロスプラットフォーム対応 遅い?
      - uses: docker/build-push-action@v5
    ...
  # windows でテスト
  windows:
    runs-on: windows-latest
    ...

Mise

Mise を使用してプログラミングツールやCLIツールを管理します。

# ツールをインストール
mise use < tool@version >
# global にインストール
mise use -g < tool@version >
# インストールしたツールを確認
mise ls
# .mise.toml の指定ファイルを信頼
mise trust
# 環境変数を表示
mise set

環境変数

設定ファイルを作成

touch ./.mise.toml
touch ./.env

./.env に環境変数を記述

# .env 例
export VAR=hoge
# .gitignore で.env ファイルを除外

./.mise.toml で読み込むファイル名を指定

[env]
_.file = ".env*"

現在のディレクトリを信頼してファイルを読み込み

# 環境変数が反映される
mise trust
echo $VAR

# 出力 hoge

説明


Docker

cd .devcontainer
# コンテナをビルド
docker build -t ubuntu-dev .
# イメージをプッシュ
docker push ubuntu-dev
# コンテナを起動
docker compose up -d
# コンテナ内に入る
docker compose exec ubuntu /bin/bash

Multipass

Multipass で cloud-init を使用して Ubuntu を起動

# オプションでカスタマイズ
# -n VM 名
# -c コア数
# -m メモリ
# -d ディスク
# --timeout タイムアウト時間 3600秒 = 1時間
# --mount マウント  from:to
# --cloud-init cloud-init の設定ファイルを指定

multipass launch \
  -n ubuntu \
  -c 4 \
  -m 4G \
  -d 40G \
  --timeout 3600 \
  --mount ${HOME}/data:/home/ubuntu/mount \
  --cloud-init ${HOME}/cloud-init/multipass.yaml

参考文献