summaryrefslogtreecommitdiffstats
path: root/lass/3modules/per-user.nix
diff options
context:
space:
mode:
authortv <tv@shackspace.de>2015-08-28 21:54:35 +0200
committertv <tv@shackspace.de>2015-08-28 21:54:35 +0200
commite5ecd75ac266a77c31790e52c2ea000574be9e22 (patch)
treeeecdc35c4a8f257d86178f6eb864c9404a2f1aa7 /lass/3modules/per-user.nix
parent62865ae6ae46e006cea7ee80b931fc5be27d3449 (diff)
parentecae9b59753c13ea5bff57a6f7c44086c77844d6 (diff)
Merge remote-tracking branch 'uriel/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