Open6

macでシゴトする環境を整える軌跡

douhashidouhashi

why

いままで自分のマシン(Windows)をBYODで使ってたんだけど、ISMSだなんだっていうカイシャっぽい色々が出てきたので、この際ちゃんと貸与マシン(mac)を活用してみよう、というモチベーション

なるべく、Windows(WSL)で使ってた資産をそのまま活用したいので、macらしさは薄めの構成になるかも

以下の方針で進める。

  • 設定ファイルを共有したいので、なるべくWindows + WSL環境と合わせる
  • タイル型のウィンドウマネージャにしたい
    • Windowsでも GlazeWM なので同じ感じにしたい
douhashidouhashi

とりあえず最低限

必要なアプリを入れる

  • Chrome
  • syncthing: 自宅NASとつないでSSH configとかの同期
  • 1password 8: SSH鍵の保管場所
  • Alacritty: Windowsと設定ファイル共存させたかったので

SSH関連の設定

  • この設定 を参考にさせていただいてすんなり動いた
douhashidouhashi

ターミナルの環境を整える

以下あたりを、brewやらなにやらでインストール。
dotfileはgit管理しているやつを持ってきていれたら、わりとすんなり動いた。

  • zsh
  • tmux
  • nvim
  • asdf
    • aws cli
    • ruby
    • node
    • direnv
douhashidouhashi

タイル型WM

選定

色々調べた感じ AeroSpaceyabai が良さげ。

Windowsでの環境が GlazeWM なので、構成が近いyabaiを採用。

Disabling System Integrity Protection

色々オフらないと便利に使えないよ、ってことらしいので手順通りオフにする

Install yabai

こちらの記事 を参考にインストール

scripting additionを有効にするためにsudoersを書かないといけないらしい

1ライナー

echo "$(whoami) ALL=(root) NOPASSWD: sha256:$(shasum -a 256 $(which yabai) | cut -d " " -f 1) $(which yabai) --load-sa" | sudo tee /private/etc/sudoers.d/yabai

これ、OSアプデしたときとかにもやらなあかん予感。

setting yabai

~/.config/yabai/yabairc

#!/usr/bin/env sh

yabai -m signal --add event=dock_did_restart action="sudo yabai --load-sa"
sudo yabai --load-sa

# global settings
yabai -m config                                 \
    external_bar                 off:40:0       \
    menubar_opacity              0.9            \
    mouse_follows_focus          on             \
    focus_follows_mouse          off            \
    display_arrangement_order    default        \
    window_origin_display        default        \
    window_placement             second_child   \
    window_zoom_persist          on             \
    window_shadow                on             \
    window_animation_duration    0.0            \
    window_animation_easing      ease_out_circ  \
    window_opacity_duration      0.0            \
    active_window_opacity        1.0            \
    normal_window_opacity        0.90           \
    window_opacity               on             \
    active_window_opacity        1.0            \
    normal_window_opacity        0.98           \
    insert_feedback_color        0xffd75f5f     \
    split_ratio                  0.50           \
    split_type                   auto           \
    auto_balance                 off            \
    top_padding                  20             \
    bottom_padding               20             \
    left_padding                 20             \
    right_padding                20             \
    window_gap                   20             \
    layout                       bsp            \
    window_border                on             \
    window_border_width          4              \
    mouse_modifier               fn             \
    mouse_action1                move           \
    mouse_action2                resize         \
    mouse_drop_action            swap           \
    external_bar                 all:40:0

###########################################################################################################
# Spaces
###########################################################################################################
for _ in $(yabai -m query --spaces | jq '.[].index | select(. > 6)'); do
  yabai -m space --destroy 7
done

function setup_space {
  local idx="$1"
  local name="$2"
  local space=
  echo "setup space $idx : $name"

  space=$(yabai -m query --spaces --space "$idx")
  if [ -z "$space" ]; then
    yabai -m space --create
  fi

  yabai -m space "$idx" --label "$name"
}

setup_space 1 primary
setup_space 2 secondary
setup_space 3 tertiary
setup_space 4 office
setup_space 5 meeting
setup_space 6 other

###########################################################################################################
# Rules
###########################################################################################################
# specify space
yabai -m rule --add app="^ovice$" space=4
yabai -m rule --add app="^Slack$" space=4
yabai -m rule --add app="^zoom.us$" space=5

# not manage in yabai
yabai -m rule --add app="^システム設定$" manage=off
yabai -m rule --add app="^krisp$" manage=off

# sticky
yabai -m rule --add app="^アクティビティモニタ$" sticky=on

echo "yabai configuration loaded.."

~/.config/skhd/skhdrc

# focus
alt - h : yabai -m window --focus west
alt - j : yabai -m window --focus south
alt - k : yabai -m window --focus north
alt - l : yabai -m window --focus east

# swap
shift + alt - h : yabai -m window --swap west
shift + alt - j : yabai -m window --swap south
shift + alt - k : yabai -m window --swap north
shift + alt - l : yabai -m window --swap east

# workspace
alt - 1 : yabai -m space --focus 1
alt - 2 : yabai -m space --focus 2
alt - 3 : yabai -m space --focus 3
alt - q : yabai -m space --focus 4
alt - w : yabai -m space --focus 5
alt - e : yabai -m space --focus 6

# move workspace
shift + alt - 1 : yabai -m window --space 1; yabai -m space --focus 1; yabai -m window --focus last
shift + alt - 2 : yabai -m window --space 2; yabai -m space --focus 2; yabai -m window --focus last 
shift + alt - 3 : yabai -m window --space 3; yabai -m space --focus 3; yabai -m window --focus last 
shift + alt - q : yabai -m window --space 4; yabai -m space --focus 4; yabai -m window --focus last 
shift + alt - w : yabai -m window --space 5; yabai -m space --focus 5; yabai -m window --focus last 
shift + alt - e : yabai -m window --space 6; yabai -m space --focus 6; yabai -m window --focus last 

Option + Q 押すつもりで、Cmd + Q押す悲劇が多発

Workspaceの移動の運指を Option + 1,2,3,q,w,e にしてみたが、間違えて Cmd + Qを押しまくる。

こちらの記事 を参考に Cmd + Q, Cmd + Hを無効化(というか無力化)してみた

追記
https://github.com/koekeishiya/yabai/issues/1701#issuecomment-1561133025
skhdでcmd + qを無効化するほうがキレイそうなので、そんな感じにしてみた。

# kill window
cmd + shift - q   : kill $(yabai -m query --windows --window | jq .pid)

# disable cmd + q / cmd + h
cmd - q : : "
cmd - h : : "
douhashidouhashi

SketchyBar

yabaiを設定する過程で、SketchyBarなるものを知る。
GlazeWMZebarの関係みたいな感じかなー

とりあえずセットアップ手順通り入れた。カスタマイズはまた今度考える。
標準のTopBarは常に隠すようにした。
yabaiの設定で完全にオフにすることもできるらしいけど、SketchyBarのカスタマイズがいい感じにいったら検討する。

douhashidouhashi

JankyBorders

JankyBordersを見つける。

SketchyBarの作者さん。
ウィンドウに枠線をつけるやつ。

とりあえずyabaircに以下の設定をしてみる

###########################################################################################################
# JankyBorders
###########################################################################################################

borders active_color=0xffa9a9a9 width=8.0 &