Featured image of post NixOS環境に「EXWM」をインストールする

NixOS環境に「EXWM」をインストールする

2023年は個人的nixpkgs元年なのですが、nixpkgsを利用していく中で気がついたらNixOSをメイン環境として利用するようになっていました。

あけましておめでとうございます。 2023年気持ちも新たに、まずはdotfilesの見直しから開始しました。 これまでは、Emacs以外の fish や git
Nixとhome-managerにdotfiles管理を移行する

今回はNixOS環境のセットアップの一環としてEXWMを導入してみましたので、その内容についてまとめました。

EXWMのセットアップについては以下の記事を参照ください。

VMWare Workspaceが非商用利用の個人向けに無料で提供されていることもあり、最近はVMWare上のNixOSをメイン環境として利用しています
Emacsをウィンドウマネージャとして使う「EXWM」を導入する

EXWMを有効にする

/etc/nixos/configuration.nix にEXWMの設定を追加していきます。

最もシンプルな方法は、NixOSのderivationとしてEXWMが提供されているので、これを有効にすることです。

1
services.xserver.windowManager.exwm = true;

exwm-config-example も利用する場合は、 enableDefaultConfigtrue とします。

1
2
3
4
ervices.xserver.windowManager.exwm = {
  enable = true;
  enableDefaultConfig = true;
};

もし、 exwm-config-example を利用せずカスタムしたいときは、 loadScript にelispで必要な設定を記述します。

1
2
3
4
5
6
7
8
services.xserver.windowManager.exwm = {
  enable = true;
  enableDefaultConfig = false;
  loadScript = ''
  (requre 'exwm)
  (exwm-enable)
  '';
};

なお、ここでは詳細に触れませんが、ウィンドウマネージャの開始スクリプトそのものも変更したい場合は exwm では対応できません。 services.xserver.windowManager.session を直接編集し、その中で emacs を起動する必要があります。

カスタムビルドEmacsを利用する

NixOSではカスタムビルドしたEmacsを利用する方法として、 emacs-overlay がコミュニティによって提供されています。

Bleeding edge emacs overlay [maintainer=@adisbladis] - GitHub - nix-community/emacs-overlay: Bleeding edge emacs overlay [maintainer=@adisbladis]
GitHub - nix-community/emacs-overlay: Bleeding edge emacs overlay [maintainer=@adisbladis]

公式ガイドのとおり /etc/nixos/configuration.nix にオーバーレイを追記します。

1
2
3
4
5
nixpkgs.overlays = [
  (import (builtins.fetchTarball {
    url = https://github.com/nix-community/emacs-overlay/archive/master.tar.gz;
  }))
];

emacs-overlay では emacsGitemacsUnstable といった名前でパッケージを提供しており、直接nixpkgsやnixosのEmacsパッケージを上書きしません。 そのため、 exwm の内部で参照しているEmacsパッケージにはそのままでは影響を与えないので注意が必要です。

直接 emacs パッケージをオーバライドしてしまいたい場合は、そのためのオーバーレイを後段に追記します。 例えば、 emacsUnstable を利用したい場合は以下のようにします。

1
2
3
4
5
6
7
8
nixpkgs.overlays = [
  (import (builtins.fetchTarball {
    url = https://github.com/nix-community/emacs-overlay/archive/master.tar.gz;
  }))
  (final: prev: {
    emacs = prev.emacsUnstable; # override emacs with emacsUnstable
  })
];

まとめ

EXWMをNixOSで利用するための設定方法を紹介しました。

NixOSでは、initファイルの編集ができない代わりに、他のパッケージ同様 /etc/nixos/configuration.nix を編集することでインストールや設定をすることが可能です。 emacs-overlay を合わせることで、Emacsのカスタマイズにも対応できます。

EXWMはderivationが用意されていることもあって、導入は比較的簡単ですし、 loadScript を使うことでEXWM向けのelispと .emacs.d 以下のコンフィグを分離して設定、管理できるのもありがたいポイントでした。

Built with Hugo
テーマ StackJimmy によって設計されています。