diff --git a/modules/misc/news.nix b/modules/misc/news.nix index b1d612cd5..7fdbdd69d 100644 --- a/modules/misc/news.nix +++ b/modules/misc/news.nix @@ -1649,6 +1649,21 @@ in A new module is available: 'programs.ncmpcpp' ''; } + + { + time = "2020-09-11T10:06:47+00:00"; + condition = hostPlatform.isLinux && config.targets.genericLinux.enable; + message = '' + A new option 'targets.genericLinux.extraXdgDataDirs' is available + to setup the user environment with the OS's data files. + + This is useful for example to get Bash completion for + 'systemctl' which shouldn't be installed through Home Manager. + + This is also useful to have non Home Manager applications + available in menus. + ''; + } ]; }; } diff --git a/modules/targets/generic-linux.nix b/modules/targets/generic-linux.nix index a2d4189f4..47fcc87b3 100644 --- a/modules/targets/generic-linux.nix +++ b/modules/targets/generic-linux.nix @@ -14,14 +14,24 @@ in { GNU/Linux distributions other than NixOS. ''; }; + + extraXdgDataDirs = mkOption { + type = types.listOf types.str; + default = [ ]; + example = [ "/usr/share" "/usr/local/share" ]; + description = '' + List of directory names to add to XDG_DATA_DIRS. + ''; + }; }; config = mkIf config.targets.genericLinux.enable { home.sessionVariables = let profiles = [ "\${NIX_STATE_DIR:-/nix/var/nix}/profiles/default" profileDirectory ]; - dataDirs = - concatStringsSep ":" (map (profile: "${profile}/share") profiles); + dataDirs = concatStringsSep ":" + (map (profile: "${profile}/share") profiles + ++ config.targets.genericLinux.extraXdgDataDirs); in { XDG_DATA_DIRS = "${dataDirs}\${XDG_DATA_DIRS:+:}$XDG_DATA_DIRS"; }; home.sessionVariablesExtra = '' diff --git a/tests/modules/targets-linux/generic-linux.nix b/tests/modules/targets-linux/generic-linux.nix index d9bb85b65..10481b5e9 100644 --- a/tests/modules/targets-linux/generic-linux.nix +++ b/tests/modules/targets-linux/generic-linux.nix @@ -4,13 +4,16 @@ with lib; { config = { - targets.genericLinux.enable = true; + targets.genericLinux = { + enable = true; + extraXdgDataDirs = [ "/foo" ]; + }; nmt.script = '' assertFileExists home-path/etc/profile.d/hm-session-vars.sh assertFileContains \ home-path/etc/profile.d/hm-session-vars.sh \ - 'export XDG_DATA_DIRS="''${NIX_STATE_DIR:-/nix/var/nix}/profiles/default/share:/home/hm-user/.nix-profile/share''${XDG_DATA_DIRS:+:}$XDG_DATA_DIRS"' + 'export XDG_DATA_DIRS="''${NIX_STATE_DIR:-/nix/var/nix}/profiles/default/share:/home/hm-user/.nix-profile/share:/foo''${XDG_DATA_DIRS:+:}$XDG_DATA_DIRS"' assertFileContains \ home-path/etc/profile.d/hm-session-vars.sh \ '. "${pkgs.nix}/etc/profile.d/nix.sh"'