From fb41fe76c6fb0b460498228032f1fdbd7290ae46 Mon Sep 17 00:00:00 2001
From: lassulus <lass@aidsballs.de>
Date: Fri, 28 Aug 2015 16:30:11 +0200
Subject: [PATCH] lass 3: add per-user

---
 lass/3modules/per-user.nix | 54 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 54 insertions(+)
 create mode 100644 lass/3modules/per-user.nix

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