NixOS switch実行後、既定のアプリケーションのウェブの設定が変わってしまう対処法
はじめに
NixOS の環境で、URLリンクをマウスでクリックした場合 Chrome ブラウザが開くように Budgie コントロールセンターで、既定のアプリケーションのウェブに Chrome ブラウザに設定したのに、
NixOS の設定変更反映、再起動後、URLをクリックすると、毎回、別途インストールしていた Obsidian が起動する症状に遭遇してしまいました。
煩わしかったので、対処方法をまとめておきます。
対処方法調査
How to set the default browser in NixOS? を参考にしました。
この解説では、qutebrowser での例です。
home-manager.users.<YOUR_USER_NAME>.xdg.mimeApps = {
enable = true;
defaultApplications = {
"text/html" = "org.qutebrowser.qutebrowser.desktop";
"x-scheme-handler/http" = "org.qutebrowser.qutebrowser.desktop";
"x-scheme-handler/https" = "org.qutebrowser.qutebrowser.desktop";
"x-scheme-handler/about" = "org.qutebrowser.qutebrowser.desktop";
"x-scheme-handler/unknown" = "org.qutebrowser.qutebrowser.desktop";
};
};
この設定と同様の設定するにあたり、
xdg.mimeApps.defaultApplications の設定に関して、xdg.mimeApps.defaultApplications に記述を参照します。
{
"mimetype1" = [ "default1.desktop" "default.desktop" ];
}
mimetype1 は、参考にしたページ中のをそのまま用いました。
"text/html"
"x-scheme-handler/http"
"x-scheme-handler/https"
"x-scheme-handler/about"
"x-scheme-handler/unknown"
default1.desktop は、既定のアプリケーション、
default.desktop は、default1.desktop がインストールされていない場合に用いられるアプリケーションを指定するとの説明です。
自分の環境では、Chrome ブラウザに設定したいのですが、default1.desktop に、どういった文字列を設定すれば良いのか分かりませんでしたが、
既定のアプリケーションは、 ~/.config/mimeapps.list で管理されているのを知りました。
~/.config/mimeapps.list を確認し、chrome ブラウザの場合は、chromium-browser.desktop を設定すれば良いことが分かりました。
yama@tnt ~/.config> cat ~/.config/mimeapps.list
[Default Applications]
x-scheme-handler/http=obsidian.desktop
x-scheme-handler/https=obsidian.desktop
x-scheme-handler/chrome=firefox.desktop
text/html=obsidian.desktop
application/x-extension-htm=firefox.desktop
application/x-extension-html=firefox.desktop
application/x-extension-shtml=firefox.desktop
application/xhtml+xml=chromium-browser.desktop
application/x-extension-xhtml=firefox.desktop
application/x-extension-xht=firefox.desktop
x-scheme-handler/about=obsidian.desktop
x-scheme-handler/unknown=obsidian.desktop
[Added Associations]
x-scheme-handler/http=firefox.desktop;chromium-browser.desktop;
x-scheme-handler/https=firefox.desktop;chromium-browser.desktop;
x-scheme-handler/chrome=firefox.desktop;
text/html=firefox.desktop;chromium-browser.desktop;
application/x-extension-htm=firefox.desktop;
application/x-extension-html=firefox.desktop;
application/x-extension-shtml=firefox.desktop;
application/xhtml+xml=firefox.desktop;
application/x-extension-xhtml=firefox.desktop;
application/x-extension-xht=firefox.desktop;
default.desktop には、NixOS をインストールした際に、インストールされるブラウザ firefox.desktop を設定しておくと良いでしょう。
NixOS での既定のアプリケーションの設定
ここから、NixOS での既定のアプリケーションの設定になります。
既定のアプリケーションは、個人設定の範疇にあたるので、Home Manager で管理するのが良いです。
xdg.mimeApps.defaultApplications は、xdg-mime-apps.nix で、Home Manager で定義されています。
設定に用いるNixのモジュールのファイル名を、定義ファイル名に合わせて xdg-mime-apps.nix とし、下記のように記述しました。
yama@tnt ~> cat ~/.config/nix/home-manager/xdg-mime-apps.nix
{ pkgs, ... }:
{
xdg.mimeApps = {
enable = true;
defaultApplications = {
"x-scheme-handler/http" = ["chromium-browser.desktop" "firefox.desktop"];
"x-scheme-handler/https" = ["chromium-browser.desktop" "firefox.desktop"];
"text/html" = ["chromium-browser.desktop" "firefox.desktop"];
"x-scheme-handler/about" = ["chromium-browser.desktop" "firefox.desktop"];
"x-scheme-handler/unknown" = ["chromium-browser.desktop" "firefox.desktop"];
};
};
}
このモジュールを home.nix などの imports リストに追加します。
# home.nix
imports = [
# ...
xdg-mime-apps.nix
# ...
];
システムへ反映(switch)を実行する際、すでに ~/.config/mimeapps.list が存在していると、
Home Manager のファイル生成に失敗しエラーとなるので、あらかじめファイルをリネームしておきます。
yama@tnt ~/.config> mv mimeapps.list mimeapps.list.org
利用環境に合わせて以下のコマンドで、システムに設定を反映します。
- Home Manager単独の場合
home-manager switch - Home Manager を NixOS モジュールとして利用している場合
sudo nixos-rebuild switch
yama@tnt ~/.c/n/nixos (main) [4]> sudo nixos-rebuild switch --flake ~/.config/nix/nixos#tnt
[sudo] yama のパスワード:
warning: Git tree '/home/yama/.config/nix' is dirty
building the system configuration...
warning: Git tree '/home/yama/.config/nix' is dirty
activating the configuration...
setting up /etc...
reloading user units for yama...
restarting sysinit-reactivation.target
the following new units were started: NetworkManager-dispatcher.service
Done. The new configuration is /nix/store/0z0hwjign6irmnmnivwhznrv1jlqhpii-nixos-system-tnt-26.05.20251228.c0b0e0f
ビルドが成功すると、~/.config/mimeapps.list が /nix/store/ 配下に配置され、設定した内容で更新されます。
yama@tnt ~> ls -l ~/.config/mimeapps.list
lrwxrwxrwx 1 yama users 84 1月 18 21:56 /home/yama/.config/mimeapps.list -> /nix/store/2lizwdpsxb8504ra146m8frb1vv523g6-home-manager-files/.config/mimeapps.list
yama@tnt ~/.config> cat mimeapps.list
[Added Associations]
[Default Applications]
text/html=chromium-browser.desktop;firefox.desktop
x-scheme-handler/about=chromium-browser.desktop;firefox.desktop
x-scheme-handler/http=chromium-browser.desktop;firefox.desktop
x-scheme-handler/https=chromium-browser.desktop;firefox.desktop
x-scheme-handler/unknown=chromium-browser.desktop;firefox.desktop
[Removed Associations]
yama@tnt ~>
これで、home-manager switch や sudo nixos-rebuild switch を実行しても、既定のアプリケーション設定が勝手に変ってしまうことはなくなります。
まとめ
Nix 管理外のファイル ~/.config/mimeapps.list が書き換えられる原因が、Nix のシステム反映によるものなのか? までの究明には至りませんでしたが、
Nix 管理下にした事で、この煩わしい症状に悩まされることから解放されました。
Discussion