mirror of
https://github.com/nix-community/home-manager
synced 2024-12-30 13:49:47 +01:00
8ec13d33b1
This commit appends system-wide icon and pixmap directory and the icon directory in the home-manager profile to the XCURSOR_PATH session variable for the generic linux target. This is necessary because the default prefix for libXcursor resolves to the Nix store which excludes the aforementioned directories from being searched for cursor themes. [1] [1] - https://github.com/nix-community/home-manager/pull/2891#issuecomment-1101064521.
105 lines
3.1 KiB
Nix
105 lines
3.1 KiB
Nix
{ config, lib, pkgs, ... }:
|
|
|
|
with lib;
|
|
|
|
let
|
|
|
|
cfg = config.targets.genericLinux;
|
|
|
|
profileDirectory = config.home.profileDirectory;
|
|
|
|
in {
|
|
imports = [
|
|
(mkRenamedOptionModule [ "targets" "genericLinux" "extraXdgDataDirs" ] [
|
|
"xdg"
|
|
"systemDirs"
|
|
"data"
|
|
])
|
|
];
|
|
|
|
options.targets.genericLinux = {
|
|
enable = mkEnableOption "" // {
|
|
description = ''
|
|
Whether to enable settings that make Home Manager work better on
|
|
GNU/Linux distributions other than NixOS.
|
|
'';
|
|
};
|
|
};
|
|
|
|
config = mkIf cfg.enable {
|
|
assertions = [
|
|
(hm.assertions.assertPlatform "targets.genericLinux" pkgs platforms.linux)
|
|
];
|
|
|
|
xdg.systemDirs.data = [
|
|
# Nix profiles
|
|
"\${NIX_STATE_DIR:-/nix/var/nix}/profiles/default/share"
|
|
"${profileDirectory}/share"
|
|
|
|
# Distribution-specific
|
|
"/usr/share/ubuntu"
|
|
"/usr/local/share"
|
|
"/usr/share"
|
|
"/var/lib/snapd/desktop"
|
|
];
|
|
|
|
# We need to append system-wide FHS directories due to the default prefix
|
|
# resolving to the Nix store.
|
|
# https://github.com/nix-community/home-manager/pull/2891#issuecomment-1101064521
|
|
home.sessionVariables = {
|
|
XCURSOR_PATH = "$XCURSOR_PATH\${XCURSOR_PATH:+:}" + concatStringsSep ":" [
|
|
"${config.home.profileDirectory}/share/icons"
|
|
"/usr/share/icons"
|
|
"/usr/share/pixmaps"
|
|
];
|
|
};
|
|
|
|
home.sessionVariablesExtra = ''
|
|
. "${pkgs.nix}/etc/profile.d/nix.sh"
|
|
|
|
# reset TERM with new TERMINFO available (if any)
|
|
export TERM="$TERM"
|
|
'';
|
|
|
|
# We need to source both nix.sh and hm-session-vars.sh as noted in
|
|
# https://github.com/nix-community/home-manager/pull/797#issuecomment-544783247
|
|
programs.bash.initExtra = ''
|
|
. "${pkgs.nix}/etc/profile.d/nix.sh"
|
|
. "${profileDirectory}/etc/profile.d/hm-session-vars.sh"
|
|
'';
|
|
|
|
programs.zsh.envExtra = ''
|
|
# Make system functions available to zsh
|
|
() {
|
|
setopt LOCAL_OPTIONS CASE_GLOB EXTENDED_GLOB
|
|
|
|
local system_fpaths=(
|
|
# Package default
|
|
/usr/share/zsh/site-functions(/-N)
|
|
|
|
# Debian
|
|
/usr/share/zsh/functions/**/*(/-N)
|
|
/usr/share/zsh/vendor-completions/(/-N)
|
|
/usr/share/zsh/vendor-functions/(/-N)
|
|
)
|
|
fpath=(''${fpath} ''${system_fpaths})
|
|
}
|
|
'';
|
|
|
|
systemd.user.sessionVariables = let
|
|
# https://github.com/archlinux/svntogit-packages/blob/packages/ncurses/trunk/PKGBUILD
|
|
# https://salsa.debian.org/debian/ncurses/-/blob/master/debian/rules
|
|
# https://src.fedoraproject.org/rpms/ncurses/blob/main/f/ncurses.spec
|
|
# https://gitweb.gentoo.org/repo/gentoo.git/tree/sys-libs/ncurses/ncurses-6.2-r1.ebuild
|
|
distroTerminfoDirs = concatStringsSep ":" [
|
|
"/etc/terminfo" # debian, fedora, gentoo
|
|
"/lib/terminfo" # debian
|
|
"/usr/share/terminfo" # package default, all distros
|
|
];
|
|
in {
|
|
NIX_PATH = "$HOME/.nix-defexpr/channels\${NIX_PATH:+:}$NIX_PATH";
|
|
TERMINFO_DIRS =
|
|
"${profileDirectory}/share/terminfo:$TERMINFO_DIRS\${TERMINFO_DIRS:+:}${distroTerminfoDirs}";
|
|
};
|
|
};
|
|
}
|