{ config, pkgs, lib, ... }: let psCfg = config.pub-solar; wlroots = psCfg.graphical.wayland; xdg = config.home-manager.users."${psCfg.user.name}".xdg; globalVariables = { EDITOR = "/run/current-system/sw/bin/nvim"; VISUAL = "/run/current-system/sw/bin/nvim"; # Make sure virsh runs without root LIBVIRT_DEFAULT_URI = "qemu:///system"; }; userVariables = { XDG_CONFIG_HOME = xdg.configHome; XDG_CACHE_HOME = xdg.cacheHome; XDG_DATA_HOME = xdg.dataHome; XDG_CURRENT_DESKTOP = "sway"; QT_QPA_PLATFORM = "wayland"; # Wayland fixes ECORE_EVAS_ENGINE = "wayland_egl"; ELM_ENGINE = "wayland_egl"; SDL_VIDEODRIVER = "wayland"; WLR_RENDERER = if wlroots.software-renderer.enable then "pixman" else "gles2"; # fix "xdg-open fork-bomb" your preferred browser from here BROWSER = "firefox"; # node NODE_REPL_HISTORY = "${xdg.dataHome}/node_repl_history"; NVM_DIR = "${xdg.dataHome}/nvm"; PKG_CACHE_PATH = "${xdg.cacheHome}/pkg-cache"; # npm NPM_CONFIG_USERCONFIG = "${xdg.configHome}/npm/config"; NPM_CONFIG_CACHE = "${xdg.configHome}/npm"; # TODO: used to be XDG_RUNTIME_DIR NPM_CONFIG_TMP = "/tmp/npm"; # wine WINEPREFIX = "${xdg.dataHome}/wineprefixes/default"; # z _Z_DATA = "${xdg.dataHome}/z"; # wget WGETRC = "${xdg.configHome}/wgetrc"; # rust RUSTUP_HOME = "${xdg.dataHome}/rustup"; CARGO_HOME = "${xdg.dataHome}/cargo"; # Java _JAVA_OPTIONS = "-Djava.util.prefs.userRoot='${xdg.configHome}/java'"; _JAVA_AWT_WM_NONREPARENTING = "1"; # docker DOCKER_CONFIG = "${xdg.configHome}/docker"; # experimental wayland in firefox/thunderbird MOZ_ENABLE_WAYLAND = "1"; # chromium / electron on wayland: enable ozone (native wayland mode) NIXOS_OZONE_WL = "1"; # Vagrant VAGRANT_HOME = "${xdg.dataHome}/vagrant"; VAGRANT_DEFAULT_PROVIDER = "libvirt"; # Android ANDROID_SDK_ROOT = "${xdg.configHome}/android"; ANDROID_AVD_HOME = "${xdg.dataHome}/android"; ANDROID_EMULATOR_HOME = "${xdg.dataHome}/android"; ADB_VENDOR_KEY = "${xdg.configHome}/android"; # TELEMETRY BS VUEDX_TELEMETRY = "off"; }; envListNames = lib.attrsets.mapAttrsToList (name: value: name) userVariables; # Here we merge an extra variable into the attrset called FULL_ENV_LIST. # It's a list of the variable names defined above. # We can use this to tell `systemctl import-environment` to import the full list above. variablesWithMeta = lib.attrsets.zipAttrsWith (name: values: builtins.head values) [ variables {IMPORT_ENVIRONMENT_ENV_LIST = lib.lists.foldl (a: b: a + " " + b) "IMPORT_ENVIRONMENT_ENV_LIST" envListNames;} ]; in { home-manager = pkgs.lib.setAttrByPath ["users" psCfg.user.name] { home.sessionVariables = variablesWithMeta; systemd.user.sessionVariables = variablesWithMeta; }; environment.variables = globalVariables; }