about summary refs log tree commit diff
path: root/nixos/modules/programs
diff options
context:
space:
mode:
authorRaphael Borun Das Gupta <git@raphael.dasgupta.ch>2020-04-21 23:43:37 +0200
committerRaphael Borun Das Gupta <git@raphael.dasgupta.ch>2020-04-21 23:43:37 +0200
commit347e2512613b08d68909226f2f23763e818857d0 (patch)
tree74a287dfec857e539380aa04487360395055c42e /nixos/modules/programs
parentf601ab37c2fb7e5f65989a92df383bcd6942567a (diff)
downloadnixlib-347e2512613b08d68909226f2f23763e818857d0.tar
nixlib-347e2512613b08d68909226f2f23763e818857d0.tar.gz
nixlib-347e2512613b08d68909226f2f23763e818857d0.tar.bz2
nixlib-347e2512613b08d68909226f2f23763e818857d0.tar.lz
nixlib-347e2512613b08d68909226f2f23763e818857d0.tar.xz
nixlib-347e2512613b08d68909226f2f23763e818857d0.tar.zst
nixlib-347e2512613b08d68909226f2f23763e818857d0.zip
nixos/xonsh: source NixOS environment
Without doing that, xonsh is unusable as login shell
Diffstat (limited to 'nixos/modules/programs')
-rw-r--r--nixos/modules/programs/xonsh.nix27
1 files changed, 26 insertions, 1 deletions
diff --git a/nixos/modules/programs/xonsh.nix b/nixos/modules/programs/xonsh.nix
index 1590020f7b64..c06fd1655c20 100644
--- a/nixos/modules/programs/xonsh.nix
+++ b/nixos/modules/programs/xonsh.nix
@@ -45,7 +45,32 @@ in
 
   config = mkIf cfg.enable {
 
-    environment.etc.xonshrc.text = cfg.config;
+    environment.etc.xonshrc.text = ''
+      # /etc/xonshrc: DO NOT EDIT -- this file has been generated automatically.
+
+
+      if not ''${...}.get('__NIXOS_SET_ENVIRONMENT_DONE'):
+          # The NixOS environment and thereby also $PATH
+          # haven't been fully set up at this point. But
+          # `source-bash` below requires `bash` to be on $PATH,
+          # so add an entry with bash's location:
+          $PATH.add('${pkgs.bash}/bin')
+
+          # Stash xonsh's ls alias, so that we don't get a collision
+          # with Bash's ls alias from environment.shellAliases:
+          _ls_alias = aliases.pop('ls', None)
+
+          # Source the NixOS environment config.
+          source-bash "${config.system.build.setEnvironment}"
+
+          # Restore xonsh's ls alias, overriding that from Bash (if any).
+          if _ls_alias is not None:
+              aliases['ls'] = _ls_alias
+          del _ls_alias
+
+
+      ${cfg.config}
+    '';
 
     environment.systemPackages = [ cfg.package ];