summaryrefslogtreecommitdiffstats
path: root/lass/3modules/per-user.nix
diff options
context:
space:
mode:
Diffstat (limited to 'lass/3modules/per-user.nix')
-rw-r--r--lass/3modules/per-user.nix54
1 files changed, 54 insertions, 0 deletions
diff --git a/lass/3modules/per-user.nix b/lass/3modules/per-user.nix
new file mode 100644
index 000000000..98d6339db
--- /dev/null
+++ b/lass/3modules/per-user.nix
@@ -0,0 +1,54 @@
+{ config, lib, pkgs, ... }:
+
+with builtins;
+with lib;
+let
+ cfg = config.lass.per-user;
+
+ out = {
+ options.lass.per-user = api;
+ config = imp;
+ };
+
+ api = mkOption {
+ type = with types; attrsOf (submodule {
+ options = {
+ packages = mkOption {
+ type = listOf path;
+ default = [];
+ };
+ };
+ });
+ default = {};
+ };
+
+ imp = {
+ #
+ # TODO only shellInit and use well-known paths
+ #
+ environment.shellInit = ''
+ if test -e ${user-profiles}/"$LOGNAME"; then
+ . ${user-profiles}/"$LOGNAME"
+ fi
+ '';
+ environment.interactiveShellInit = ''
+ if test -e ${user-profiles}/"$LOGNAME"; then
+ . ${user-profiles}/"$LOGNAME"
+ fi
+ '';
+ environment.profileRelativeEnvVars.PATH = mkForce [ "/bin" ];
+ };
+
+ user-profiles = pkgs.runCommand "user-profiles" {} ''
+ mkdir $out
+ ${concatStrings (mapAttrsToList (logname: { packages, ... }: ''
+ cat > $out/${logname} <<\EOF
+ ${optionalString (length packages > 0) (
+ let path = makeSearchPath "bin" packages; in
+ ''export PATH="$PATH":${escapeShellArg path}''
+ )}
+ EOF
+ '') cfg)}
+ '';
+
+in out