MacOS を快適に使うための設定
Yabai
mac の window manager の yabai。インストールがちょっとめんどいんだけど、一番安定しているので使っている。
sudo yabai --load-sa yabai -m signal --add event=dock_did_restart action="sudo yabai --load-sa" yabai -m config layout bsp yabai -m config window_gap 7 yabai -m config top_padding 5 yabai -m config bottom_padding 5 yabai -m config left_padding 5 yabai -m config right_padding 5 yabai -m config window_border on yabai -m config window_border_width 4 yabai -m config active_window_border_color 0xffffb454 yabai -m shadow off yabai -m config window_opacity on yabai -m config active_window_opacity 0.97 yabai -m config normal_window_opacity 0.90 yabai -m rule --add app="^System Preferences$" manage=off yabai -m rule --add app="^Spotify$" manage=off yabai -m rule --add app="^Finder$" manage=off yabai -m rule --add app="^Installer$" manage=off yabai -m rule --add app="^Steam$" manage=off yabai -m rule --add app="^Paradox Launcher$" manage=off
外部ディスプレイ対応
内蔵ディスプレイはノッチ部分を含めない設定でいけるので、(ノッチ下端からの padding) 上でいいんだけど、外部ディスプレイに接続すると、加味されないから、ウィンドウが sketchybar
とかぶる。その場合は、 yabai
に下記を送ってやれば良い。画面解像度の関係で、mac 本来のトップバーとあわなくなるけど、まあいいでしょう。
if [[ $(system_profiler SPDisplaysDataType | rg Internal | wc -l | tr -d " \t") == "0" ]] ; then #echo "clam" yabai -m config top_padding 29 fi
skhd
同じ作者による、key bind をいじる skhd。特に良く使うアプリケーション、ターミナルと emacs とブラウザに関しては、直接開くようにしてる。起動スクリプトは後述。
cmd - return : "$HOME"/.config/skhd/open_iterm2.sh rcmd - sound_up : "$HOME"/.config/skhd/open_emacsclient.sh rcmd - sound_down : "$HOME"/.config/skhd/open_safari.sh ralt - 0x2A : "$HOME"/.config/skhd/open_emacsclient.sh ralt - 0x18 : "$HOME"/.config/skhd/open_safari.sh
skhd -o
メインの機能は yabai を操作することになります。どの領域にフォーカスするのかは、 vim
に準じています。デスクトップの切り換えは、 ctrl
にしていて。今フォーカスしているアプリを別のデスクトップに飛したい場合は shift
cmd - l : yabai -m window --focus east cmd - k : yabai -m window --focus north cmd - j : yabai -m window --focus south cmd - h : yabai -m window --focus west ctrl - 1 : yabai -m space --focus 1 ctrl - 2 : yabai -m space --focus 2 ctrl - 3 : yabai -m space --focus 3 ctrl - 4 : yabai -m space --focus 4 ctrl - 5 : yabai -m space --focus 5 ctrl - 6 : yabai -m space --focus 6 shift + ctrl - 1 : yabai -m window --space 1 && yabai -m space --focus 1 shift + ctrl - 2 : yabai -m window --space 2 && yabai -m space --focus 2 shift + ctrl - 3 : yabai -m window --space 3 && yabai -m space --focus 3 shift + ctrl - 4 : yabai -m window --space 4 && yabai -m space --focus 4 shift + ctrl - 5 : yabai -m window --space 5 && yabai -m space --focus 5 shift + ctrl - 6 : yabai -m window --space 6 && yabai -m space --focus 6
フルスクリーンにする
alt - f : yabai -m window --toggle zoom-fullscreen
アプリの起動
沢山インスタンスを立ちあげて Dock が汚なくなったり、そもそも同じアプリの複数同時起動に制限がかかっていたりするらしいので、アプリ自体はひとつで、新しい window をつくるのには下記のスクリプトを使わないといけない。
#!/usr/bin/env bash # Detects if Safari is running if ! pgrep -f "Safari" > /dev/null 2>&1; then open -a "/Applications/Safari.app" else # Create a new window script='tell application "Safari" to make new document activate' ! osascript -e "${script}" > /dev/null 2>&1 && { while IFS="" read -r pid; do kill -15 "${pid}" done < <(pgrep -f "Safari") open -a "/Applications/Safari.app" } fi
iterm2
殆ど変らないんだけど、 script
ちょっとだけ変ってる。
#!/usr/bin/env bash # Detects if iTerm2 is running if ! pgrep -f "iTerm" > /dev/null 2>&1; then open -a "/Applications/iTerm.app" else # Create a new window script='tell application "iTerm2" to create window with default profile' ! osascript -e "${script}" > /dev/null 2>&1 && { # Get pids for any app with "iTerm" and kill while IFS="" read -r pid; do kill -15 "${pid}" done < <(pgrep -f "iTerm") open -a "/Applications/iTerm.app" } fi
iTerm 自分のウィンドウを消す
tell application "iTerm2" tell current window to close current session end tell
#!/bin/bash /opt/homebrew/bin/emacsclient -c -e \ "(select-frame-set-input-focus (selected-frame))" \ "(delete-other-windows)" \
sketchybar
上のバーの情報は出来るだけミニマルにしたい。mac の環境設定で、メニューバーは自動的に消えるようにしてる。こうすれば、元のメニューバーは情報てんこもりでもいいって事になる。
https://felixkratz.github.io/SketchyBar/config/bar に skechybar の設定項目がのっているのでかえたければ参考にする。
PLUGIN_DIR="$HOME/.config/sketchybar/plugins" sketchybar --bar height=40 \ blur_radius=5 \ position=top \ padding_left=17 \ padding_right=7 \ color=0xe80a0e14 if [[ $(system_profiler SPDisplaysDataType | rg Internal | wc -l | tr -d " \t") == "0" ]] ; then sketchybar --bar height=24 fi sketchybar --default updates=when_shown \ drawing=on \ icon.font="HackGen35Nerd:Regular:17.0" \ icon.color=0xddffffff \ label.font="SF Pro Rounded:Semibold:13" \ label.color=0xddffffff \ label.padding_left=4 \ label.padding_right=4 \ icon.padding_left=4 \ icon.padding_right=4
ねこちゃんマーク。犬派だけど。特に機能はない。
sketchybar --add item cat_icon left \ --set cat_icon icon= \ label.drawing=off \ icon.font="HackGen35Nerd:Regular:20.0" \ icon.color=0xffe0af68 \ icon.padding_right=40 \
スペース(デスクトップ) の表示と切り換え:
SPACE_ICONS=("" "" "" "" "" "" "7" "8" "9" "10") for i in "${!SPACE_ICONS[@]}" do sid=$(($i+1)) sketchybar --add space space.$sid left \ --set space.$sid associated_space=$sid \ icon=${SPACE_ICONS[i]} \ icon.padding_left=8 \ icon.padding_right=8 \ icon.color=0x44ffffff \ icon.highlight_color=0xddffffff \ label.drawing=off \ script="$PLUGIN_DIR/space.sh" \ click_script="yabai -m space --focus $sid" done
右は、時計と電池がなくなったら電池の残量表示
mail のチェックはデフォルトで 5 分になっているので、そんなに更新をする必要がない。
launchctl list | rg homebrew
sketchybar --add item clock right \ --set clock update_freq=10 \ script="$PLUGIN_DIR/clock.sh" \ \ --add alias "Control Center,Battery" right \ --set "Control Center,Battery" update_freq=30 \ label.drawing=off\ \ --add item mail right \ --set mail script="$PLUGIN_DIR/mail.sh" \ update_freq=30
設定の反映をさせるコマンド?らしい
sketchybar --update echo "sketchybar configuration loaded.."
plugins
どれも書く程ではないようみえるけど、毎回別に実行されるスクリプトは別に書いておかないといけない。
clock.sh
#!/usr/bin/env sh sketchybar --set $NAME label="$(date '+%H:%M')" label.padding_right=10
space.sh
#!/usr/bin/env sh sketchybar --set $NAME icon.highlight=$SELECTED icon.hightligh_color=0xffffffff
mail.sh
count mails in new
folder
fd -ptf /new/ ~/Mail/ -E 'Trash' -E 'All*' -E 'yasushi.accounts*' -E Archive | wc -l | tr -d ' \t'
NEWMAIL=$(fd -ptf /new/ ~/Mail/ -E 'Trash' -E 'All*' -E 'yasushi.accounts*' -E Archive | wc -l | tr -d ' \t') if [[ $NEWMAIL -ne "0" ]]; then sketchybar --set $NAME icon.font="SF Pro Rounded:Regular:13" icon.color=0xffffffff icon="" label.drawing=on label="$NEWMAIL" click_script="~/.config/sketchybar/open_mutt.sh" else sketchybar --set $NAME icon.font="SF Pro Rounded:Regular:13" icon="" label.drawing=off icon.color=0x33ffffff click_script="~/.config/sketchybar/open_mutt.sh" fi
open iterm2
and run a command.
#!/bin/bash osascript - "$@" <<EOF on run argv tell application "iTerm" activate set new_term to (create window with default profile) tell new_term tell the current session repeat with arg in argv write text arg end repeat end tell end tell end tell end run EOF
use above to open mutt
(aliased to neomutt
)
#!/usr/bin/env bash $HOME/.config/sketchybar/iterm_cmd.sh ~/.config/neomutt/open_close_neomutt.sh
おわったら、セッションごと消す
neomutt if [[ $! -eq "0" ]]; then osascript ~/.config/scripts/close_iterm.as fi
AquaSKK
日本語の入力は AquaSKK を使います。
元々 config は ~/Library/Application Support/AquaSKK/keymap.conf
英数モードにすると iTerm とか支障をきたすので、出来るだけそうならないようする。
### ### keymap.conf ### # ====================================================================== # event section # ====================================================================== SKK_JMODE ctrl::j SKK_ENTER group::hex::0x03,0x0a,0x0d||ctrl::m SKK_CANCEL ctrl::g||hex::0x1b SKK_BACKSPACE hex::0x08||ctrl::h SKK_DELETE hex::0x7f||ctrl::d SKK_TAB hex::0x09||ctrl::i SKK_PASTE ctrl::y SKK_LEFT hex::0x1c||ctrl::b||keycode::7b SKK_RIGHT hex::0x1d||ctrl::f||keycode::7c SKK_UP hex::0x1e||ctrl::a||keycode::7e SKK_DOWN hex::0x1f||ctrl::e||keycode::7d SKK_PING ctrl::l SKK_UNDO ctrl::/ # ====================================================================== # attribute section(for SKK_CHAR) # ====================================================================== ToggleKana q ToggleJisx0201Kana ctrl::q SwitchToAscii ctrl::shift::l SwitchToJisx0208Latin ctrl::shift::alt::l EnterAbbrev / EnterJapanese Q NextCompletion . PrevCompletion , NextCandidate hex::0x20||ctrl::n PrevCandidate x||ctrl::p RemoveTrigger X UpperCases group::A-K,M-P,R-Z Direct group::keycode::0x41,0x43,0x45,0x4b,0x4e,0x51-0x59,0x5b,0x5c,0x5f InputChars group::hex::0x20-0x7e CompConversion alt::hex::0x20||shift::hex::0x20 # ====================================================================== # handle option # ====================================================================== AlwaysHandled group::keycode::0x66,0x68 PseudoHandled ctrl::l
reboot
でウィンドウ一掃
reboot したい時は、大抵一回全部アプリを落したい時なのに、デフォルトで sudo reboot
すると、元々起動していたアプリが起動してうざい。
defaults write -g ApplePersistence -bool no
スクリプトを実行可能にしておく
上で書いた設定ファイルは実行可能にしておく必要があるので下記を実行する。
find ~/.config -type f | rg -v 'htop|.DS_Store' | rg 'rc$|.sh$' | xargs chmod u+x