flocon/shared/modules/hjem/collection/environment.nix

60 lines
1.6 KiB
Nix
Raw Normal View History

{
lib,
pkgs,
config,
...
}: let
inherit (lib.attrsets) mapAttrsToList;
inherit (lib.lists) isList;
inherit (lib.modules) mkIf;
inherit (lib.options) mkOption;
inherit (lib.strings) concatStringsSep;
inherit (lib.types) attrsOf listOf oneOf int path str;
inherit (pkgs) writeShellScript;
2025-02-18 13:19:11 +01:00
toEnv = env:
if isList env
then concatStringsSep ":" (map toString env)
else toString env;
2025-02-18 13:19:11 +01:00
mkEnvVars = vars: (concatStringsSep "\n"
(mapAttrsToList (name: value: "export ${name}=\"${toEnv value}\"") vars));
2025-02-18 13:19:11 +01:00
writeEnvScript = attrs:
writeShellScript "load-env"
(
''
# Only execute this file once per shell.
if [ -n "$__ETC_PROFILE_SOURCED" ]; then return; fi
__ETC_PROFILE_SOURCED=1
# Prevent this file from being sourced by interactive non-login child shells.
export __ETC_PROFILE_DONE=1
# Session variables
''
+ mkEnvVars attrs
);
in {
2025-02-18 13:19:11 +01:00
options.environment.sessionVariables = mkOption {
type = attrsOf (oneOf [(listOf (oneOf [int str path])) int str path]);
default = {};
example = {
EDITOR = "nvim";
VISUAL = "nvim";
};
description = ''
A set of environment variables used in the user environment.
If a list of strings is used, they will be concatenated with colon
characters.
'';
};
2025-02-18 13:19:11 +01:00
config = mkIf (config.environment.sessionVariables != {}) {
files = {
".profile".text = ''
. ${writeEnvScript config.environment.sessionVariables}
'';
2025-02-18 13:19:11 +01:00
".config/uwsm/env".text = mkEnvVars config.environment.sessionVariables;
};
};
}