概要
Home Managerでhome.sessionVariablesを更新しても環境変数が反映されない。
解決方法
home.sessionVariables はログアウト後に反映
Environment variables to always set at login.
home.sessionVariablesを編集home-manager switchを実行- ログアウトして再ログイン
シェル起動時に環境変数を更新
programs.fish.shellInit で set -gx を直接設定する。
- 理由: 頻繁に環境変数を更新したく、ログアウト/ログインが面倒
疑似コード
let
env = with xdg; {
IDRIS2_PREFIX = "${XDG_DATA_HOME}/idris2";
PACK_DIR = "${XDG_DATA_HOME}/pack";
# ...
};
sessionVariables = builtins.concatStringsSep "\n"
(map (k: "set -gx ${k} ${env.${k}}") (builtins.attrNames env));
in
{
# ...
programs = {
fish = {
enable = true;
shellInit = ''
${sessionVariables}
# ...
''
# ...
};
};
}
実行結果
$ head -12 $HOME/.config/fish/config.fish
# ~/.config/fish/config.fish: DO NOT EDIT -- this file has been generated
# automatically by home-manager.
# Only execute this file once per shell.
set -q __fish_home_manager_config_sourced; and exit
set -g __fish_home_manager_config_sourced 1
source /nix/store/lkjzs012wpynhf3x2hnmcrm1im24ilcf-hm-session-vars.fish
set -gx ANDROID_HOME /home/scarf/.local/share/android
set -gx ASDF_CONFIG_FILE /home/scarf/.config/asdf/asdfrc
set -gx ASDF_DATA_DIR /home/scarf/.local/share/asdf