komorebiを導入してみる
komorebiを導入してみる
筆者は普段manjaro/i3wmで開発をしている。
しかし、Windowsを使わざるを得なくなってしまったので、Windowsで使えるTiling WMを探した所、komorebiを見つけた。
この記事はkomorebiの導入と個人的に詰まった所をまとめたものである。
インストール
筆者はWindowsのアプリケーション管理にwingetを使っている。
komorebiは2022/08/26現在wingetを使ったインストールに対応していないのでGithub Releaseからダウンロードする。
以下はpowershellを使ってダウンロードするスクリプトである。
$UserProfile = $env:USERPROFILE
$MyAppDir = (Join-Path -Path $HOME -ChildPath "apps")
$komorebiRelease = Invoke-RestMethod -uri "https://api.github.com/repos/LGUG2Z/komorebi/releases/latest"
$komorebiReleaseInfo = $komorebiRelease.assets | Where { $_.browser_download_url.EndsWith(".zip") } | Select -First 1
$outFile = (Join-Path -Path $UserProfile -ChildPath "downloads" | Join-Path -ChildPath $komorebiReleaseInfo.name)
Invoke-WebRequest -Uri $komorebiReleaseInfo.browser_download_url -OutFile $outFile
Expand-Archive -LiteralPath $outFile -Destination (Join-Path -Path $MyAppDir -ChildPath "komorebi")
Remove-Item $outFile -Recurse
起動
インストール先にPATHを通した上でkomorebic start
でkomorebiが起動する。
終了はkomorebic stop
でできる。
ログイン時に自動でkomorebiが起動するように、筆者は次のようなスクリプトを書いている。
function Create-ShortCut {
param([string]$Source, [string[]]$Arguments, [string]$Destination, [int]$WindowStyle)
$WScriptShell = New-Object -ComObject WScript.Shell
$executableName = Split-Path $Source -Leaf
$name = $executableName.SubString(0, $executableName.LastIndexOf("."))
$dst = Join-Path -Path (Resolve-Path -Path $Destination) -ChildPath ($name + ".lnk")
$Shortcut = $WScriptShell.CreateShortcut($dst)
$Shortcut.Targetpath = $Source
if ($Arguments.count -gt 0) {
$Shortcut.Arguments = $Arguments -join " "
}
if ($WindowStyle -gt 0) {
# 1: normal
# 3: maximize
# 7: minimize
$Shortcut.WindowStyle = $WindowStyle
}
$Shortcut.Save()
Write-Host "Generate shortcut as $dst"
}
Create-ShortCut -Source (Join-Path -Path $MyAppDir -ChildPath "komorebi" | Join-Path -ChildPath "komorebic.exe")`
-Arguments "start" `
-Destination (Get-ItemProperty 'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders').StartUp `
-WindowStyle 7
設定
komorebiのキーバインドはすべてAutoHotKeyを使って設定する。
komorebiのインストール時にAutoHotKeyがインストールされるわけではないので、これもwingetでインストールする。
winget install --exact --id Lexikos.AutoHotKey
設定ファイルはデフォルトだとkomorebi.exe
やkomorebic.exe
と同階層にあるkomorebi.ahk
であることが期待される。
これを変更するには環境変数KOMOREBI_CONFIG_HOME
にディレクトリへのパスを設定し、そのディレクトリの下にkomorebi.ahk
を置くことでkomorebic start
の実行時に自動でファイルが読み込まれる。
komorebi.ahk
の雛形はkomorebic.exe
と同じ階層にkomorebi.sample.ahk
があるので、これを参考にするとよさそう。
筆者のkomorebi.ahk
はgithubのdotfilesリポジトリで管理している。
詰まったところ
- wingetでインストールしたAutoHotKeyにパスが通っていない
筆者の環境ではwingetでインストールしたアプリにパスが通っていないことがある。
そのため、必要に応じて以下のコマンドでPATHを追加する。
[Environment]::SetEnvironmentVariable("PATH", $Env:PATH + ";" + (Join-Path -Path $Env:ProgramW6432 -ChildPath "AutoHotKey"), [EnvironmentVariableTarget]::Machine)
-
PowerToysのkeyboard managerとの同時使用
PowerToys keyboard managerとkomorebi(AutoHotKey)を同時に使うとPowerToys側が優先される。
そのため、同じキーに対してマッピングをする際には注意が必要。 -
Win+lにマッピングしたい
デフォルトのwindowsの挙動ではWin+lのキーにはスクリーンのロックがマッピングされている。
これはPowerToysでも上書きできないので、レジストリを書き換えて無効化する。
reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\system" /v "DisableLockWorkstation" /t REG_DWORD /d "1" /f
これを他のキーにリマップするには若干面倒な手順を踏まないと実現できない。
1. キー押下時にLockWorkStationを有効化する
2. DllCall("user32\LockWorkStation")
3. 再度無効化する
のような手順が必要だが、komorebiのプロセスが管理者権限のあるプロンプトで起動されていない場合はキー押下時に確認が入るのでなんとかしたい。(まだ解決策を見つけられていない)
環境
エディション Windows 10 Pro
バージョン 21H1
$ komorebi --version
komorebi 0.1.12
$ winget --version
v1.3.2091
Discussion