summaryrefslogtreecommitdiffstats
path: root/lass/3modules/per-user.nix
diff options
context:
space:
mode:
authormakefu <github@syntax-fehler.de>2015-08-31 10:47:29 +0200
committermakefu <github@syntax-fehler.de>2015-08-31 10:47:29 +0200
commit2eb8bcf9d1c293a8b28730c9a12d9a857c5a43a7 (patch)
treec8a1d55a148e59f51a400e0d5dc11780d4e4005c /lass/3modules/per-user.nix
parent0acd7f23e1e3adf4bf1427f186a7bf5505ff910d (diff)
parent83f06535de527c7470f8ff9c8b5e3a4632cf7cb9 (diff)
Merge remote-tracking branch 'cd/master'
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