いい感じに設定できて嬉しいのでkarabinerについてだけ記事を書いたなのです。Macのカスタマイズまとめはまた後日書くなのです。

Karabiner 最強なのです

JSONを直接書くのはしんどいのでkarabiner.tsというライブラリを用いてTypeScriptで設定を書き、ビルドしてコンフィグを生成します。

あらかじめGUIで権限周りの許可や、キーボードタイプを内部的にANSIにする必要があります。まだ途中ですが、かなりいい感じです。

ちなみにyabaiというタイル型ウィンドウマネージャーを使用しています(ヤバい)。

  • かな → IME切替
  • 英数 + hjkl → ウィンドウのフォーカス移動
  • 英数 + shift + hjkl → ウィンドウの移動
  • 英数 + q → ウィンドウを閉じる
  • 英数 + 任意のキー → 任意のアプリケーション起動
  • 英数単押し → ランチャー起動(Raycast)
  • Capslock → Command

また、Chrome限定で

  • Ctrl + w → Command + w
  • Ctrl + t → Command + t
  • Ctrl + l → Command + l

を当てています。TypeScriptはこんな感じです。

const yabai = "/run/current-system/sw/bin/yabai ";

writeToProfile("Default profile", [
	rule("IME-toggle").manipulators([
		map("japanese_kana")
			.to("japanese_eisuu")
			.condition(ifInputSource({ language: "ja" })),
	]),
	rule("Modifiers").manipulators([
		map("caps_lock").to("left_command"),
		map("left_control").to("left_control").toIfAlone("escape"),
	]),

	// Disable system shortcuts
	rule("Disable-system").manipulators([map("q", "command").toNone()]),

	layer("japanese_eisuu", "super")
		.configKey((v) => v.toIfAlone("spacebar", "command"), true)
		.manipulators([
			// focus window
			map("h").to$(yabai + "-m window --focus west"),
			map("j").to$(yabai + "-m window --focus south"),
			map("k").to$(yabai + "-m window --focus north"),
			map("l").to$(yabai + "-m window --focus east"),
			// move wndow
			map("h", "shift").to$(yabai + "-m window --warp west"),
			map("j", "shift").to$(yabai + "-m window --warp south"),
			map("k", "shift").to$(yabai + "-m window --warp north"),
			map("l", "shift").to$(yabai + "-m window --warp east"),
			
			// other window operations
			map("tab").to$(yabai + "-m window --focus recent"),
			map("q").to$(yabai + "-m window --close"),
			//  applications
			map("f", "shift").to$(
				yabai + "-m window --toggle float --grid 4:4:1:1:2:2",
			),
			map("w").to$(
				yabai +
					"-m window --toggle float;" +
					yabai +
					"-m window --grid 1:1:0:0:1:1",
			),
			map("return_or_enter").to$("/usr/bin/open -a kitty ~"),
			map("o").to$(
				"$HOME/.nix-profile/bin/google-chrome-stable --profile-directory=Default",
			),
		]),
  ...

おわりに

既存の修飾キーを一切潰すことなく「英数」で修飾キーを増やせたような形になるなので、Hyprland時代よりもキーマップの自由度が高くなったなのです!

あとはSIP(Security Integration Protection)を一部無効化しないとワークスペース(デスクトップ)をまたぐ操作ができないのが悩みどころなのです……。