Skip to content

Jxck/dotfiles

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2,105 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

dotfiles for jxck

Jxck の個人 dotfiles

  • Mac および Ubuntu で共用
  • どちらでも動くように分岐
  • スクリプトは基本 zsh, ruby, js

Setup

  • setup/setup.sh を実行
    • linux で依存インストール
    • 共通で homebrew の導入
    • brew bundle
    • slink.sh
    • linux で chsh
  • setup/setup-mac.sh
    • macOS の設定を defaults コマンドで適用

ディレクトリ構成

  • bin/: カスタムスクリプト
  • zsh/: zsh のモジュール別設定 (mac.zsh, common.zsh, fzf.zsh 等)
  • install/: ビルド・インストールスクリプト
  • setup/: OS 別セットアップスクリプト
  • conf/: 各種ツールの設定ファイル
  • tmux/: OS 別 tmux 設定
  • keys/: TLS 証明書・SSH 鍵 (読まない・変更しない)

主要ファイル

  • .zshrc: シェル設定のエントリポイント
  • .gitconfig: git 設定 (delta, GPG 署名, エイリアス)
  • .tmux.conf: tmux 設定 (prefix は C-s, vi モード)
  • .vimrc: vim 設定
  • .mise.toml: ツールバージョン管理 (node, deno, bun, go, rust 等)
  • Brewfile: Homebrew パッケージ一覧

1Password

まず 1Password で SSH Agent を有効にする。

1password > Settings > Developer > Set Up SSH Agent

cmux

ターミナルは cmux (内部で Ghostty を使用)。

  • brew install --cask cmux
  • TERM=xterm-ghostty を設定するため、SSH 先に terminfo が必要
  • SSH 先への terminfo インストール: infocmp -x xterm-ghostty | ssh <host> tic -x -
  • cmux のシェル内で実行すること (cmux が terminfo を持っている)

構成

  • .claude
    • Claude Code 設定 (CLAUDE.md, settings.json, skills/)
  • .codex
    • Codex CLI 設定 (AGENTS.md, config.toml, rules/)
  • .vscode
    • VS Code 用辞書ファイル (cspell.txt)
  • bin
    • 自作コマンド置き場
    • $PATH が通してある
    • 基本は ruby か shell で書く
  • conf
    • apt.conf, prh.yml など
  • ghostty
    • Ghostty ターミナル設定
    • ~/.config/ghostty/config にシンボリックリンク
    • cmux が内部で Ghostty を使うため、設定は引き続き有効
  • install
    • 自前ビルドするスクリプト
    • install-* で作る
  • keys
    • https コマンド用のローカル key/cert
  • linearmouse
    • LinearMouse 設定 (linearmouse.json)
  • local
    • install-* が pkg でビルドしたあと make install する先
    • --prefix などに指定する先
    • 個別に PATH を通す
  • misc
    • 昔作った bookmarklet の残骸
  • pkg
    • install-* がソースをダウンロードする場所
    • そのままビルドして PATH を通しても良い
  • setup
    • OS 別セットアップスクリプト (setup.sh, setup-mac.sh, setup-linux.sh)
  • skills
    • Claude Code スキル定義
  • swiftbar
    • SwiftBar プラグイン (SSID 表示, 時刻表示)
  • tmux
    • mac/linux 用 tmux.conf
  • zsh
    • .zshrc で読み込む個別設定

コマンド作成

  • alias
    • ./zsh/common.zsh
  • zsh function
    • ./zsh/common.zsh
  • shell
    • ./bin
    • #!/usr/bin/env zsh で書く
    • -h を作る
  • ruby
    • ./bin
    • #!/usr/bin/env ruby で書く
    • -h を作る
    • ./bin/template を参照

依存の追加

  • 基本は homebrew の bundle に追加
    • linux / mac で使えるように
    • 一時的なものは brew install して終わったら捨てる
  • 自前ビルド
    • ./install/install-xxx.sh を作る
    • ./pkg/xxx./local/xxx を削除
    • ./pkg/xxx にソースをダウンロード
    • そこでビルドして終わりなら PATH 追加して終わり
    • make install するなら --prefix=$DOTFILES/local/xxx を指定

update/upgrade

今となってはどっちもそこまで変わらなくなってきた。

$ update.sh
$ upgrade.sh

gnome settings

Ubuntu terminal

$ dconf dump /org/gnome/terminal/ > gnome-terminal-profiles.dconf
$ dconf reset -f /org/gnome/terminal/
$ dconf load /org/gnome/terminal/ < gnome-terminal-profiles.dconf

tips

zsh/http_status_codes.zsh

ステータスコードを打つとステータステキストが出る

$ 203
Non-Authoritative Information [RFC7231]

bin/http, bin/https

Webrick ベースの簡易 HTTP/HTTPS サーバ。その場を Root に起動する。

$ http
[2019-05-06 15:36:45] INFO  WEBrick 1.3.1
[2019-05-06 15:36:45] INFO  ruby 2.3.7 (2018-03-28) [universal.x86_64-darwin18]
[2019-05-06 15:36:45] INFO  WEBrick::HTTPServer#start: pid=33328 port=3000

HTTPS を使う場合は $DOTFILES/keys/privkey.pemfullchain.pem を使う。

  • /keys/gen.sh: ローカルで key/cert を作る
  • /keys/remote-copy.sh: サーバで Let's Encrypt で作った証明書をダウンロード
  • /keys/local-copy.sh: ローカルで証明書をコピー
  • /keys/use.sh: メインで使いたい証明書の symlink を作る

bin/l

Ruby で作った、痒いところを全部カバーした自作 ls

$ ls
# $DOTFILES/bin/l

$ \ls
# /bin/ls

Shell Coding

if / then / else

  • [test ではなく [[ を使う
  • 論理演算は &&, || を使う
if [[ `uname` == "Darwin" ]]; then
  echo "install via brew"
  exit 0
fi

変数の有無

  • 無い場合: -z で文字列長が 0 かどうかを比較
  • 有る場合: -n で文字列長が 1 以上かどうかを比較
if [[ -f "/opt/homebrew/bin/mise" ]]; then
  eval "$(mise activate zsh)"
  export MISE_GLOBAL_CONFIG_FILE=$DOTFILES/.mise.toml
fi

if [[ -n $DEV ]]; then
  echo "fetch jxck.io"
  cd $DEV/jxck.io
  git f
fi

文字列比較

  • [[ を使う場合、ダブルクオートの有無で完全一致かマッチを使い分けられる。
  • また =~ でもマッチが使える。
  • しかし、それだとややこしいので ==!=*"string"* 構文を組み合わせる。
## webp
if [[ -d "$DOTFILES/pkg/webp" && $PATH != *"/pkg/webp/bin"* ]]; then
  echo "webp"
  addToPath $DOTFILES/pkg/webp/bin
fi

コマンドの存在

if [[ -x "$(command -v brew)" ]]; then
  echo "brew exists"
fi

$PATH

パスの追加($PATH=/path/to/file:$PATH)をする関数 addToPath があるので使う。

zsh で typeset -U path PATH で重複を省いてある。

## openssl
[[ -d "$DOTFILES/local/openssl/bin" ]] && addToPath $DOTFILES/local/openssl/bin

## webp
if [[ -d "$DOTFILES/pkg/webp" && $PATH != *"/pkg/webp/bin"* ]]; then
  echo "webp"
  addToPath $DOTFILES/pkg/webp/bin
fi

for

基本はこの書き方

target_files="
a
b
c
"

for target in $target_files
do
  echo $target
done

About

dotfiles

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors