pam: add module
Also make it possible to set session variables using PAM rather than Bash.
This commit is contained in:
parent
f35b9a9970
commit
5fbbbd1ea4
|
@ -8,6 +8,7 @@ let
|
||||||
modules = [
|
modules = [
|
||||||
./home-environment.nix
|
./home-environment.nix
|
||||||
./manual.nix
|
./manual.nix
|
||||||
|
./misc/pam.nix
|
||||||
./programs/bash.nix
|
./programs/bash.nix
|
||||||
./programs/beets.nix
|
./programs/beets.nix
|
||||||
./programs/eclipse.nix
|
./programs/eclipse.nix
|
||||||
|
|
|
@ -150,7 +150,24 @@ in
|
||||||
default = {};
|
default = {};
|
||||||
type = types.attrs;
|
type = types.attrs;
|
||||||
example = { EDITOR = "emacs"; GS_OPTIONS = "-sPAPERSIZE=a4"; };
|
example = { EDITOR = "emacs"; GS_OPTIONS = "-sPAPERSIZE=a4"; };
|
||||||
description = "Environment variables to always set at login.";
|
description = ''
|
||||||
|
Environment variables to always set at login.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
home.sessionVariableSetter = mkOption {
|
||||||
|
default = "pam";
|
||||||
|
type = types.enum [ "pam" "bash" ];
|
||||||
|
example = "bash";
|
||||||
|
description = ''
|
||||||
|
Identifies the module that should set the session variables.
|
||||||
|
</para><para>
|
||||||
|
If "bash" is set then <varname>config.bash.enable</varname>
|
||||||
|
must also be enabled.
|
||||||
|
</para><para>
|
||||||
|
If "pam" is set then PAM must be used to set the system
|
||||||
|
environment.
|
||||||
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
home.packages = mkOption {
|
home.packages = mkOption {
|
||||||
|
|
20
modules/misc/pam.nix
Normal file
20
modules/misc/pam.nix
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
{ config, lib, pkgs, ... }:
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
|
||||||
|
let
|
||||||
|
|
||||||
|
homeCfg = config.home;
|
||||||
|
|
||||||
|
in
|
||||||
|
|
||||||
|
{
|
||||||
|
options = {};
|
||||||
|
|
||||||
|
config = mkIf (homeCfg.sessionVariableSetter == "pam") {
|
||||||
|
home.file.".pam_environment".text =
|
||||||
|
concatStringsSep "\n" (
|
||||||
|
mapAttrsToList (n: v: "${n} OVERRIDE=${v}") homeCfg.sessionVariables
|
||||||
|
) + "\n";
|
||||||
|
};
|
||||||
|
}
|
|
@ -127,7 +127,8 @@ in
|
||||||
home.file.".profile".text = ''
|
home.file.".profile".text = ''
|
||||||
# -*- mode: sh -*-
|
# -*- mode: sh -*-
|
||||||
|
|
||||||
${envVarsStr}
|
${optionalString (config.home.sessionVariableSetter == "bash")
|
||||||
|
envVarsStr}
|
||||||
|
|
||||||
${cfg.profileExtra}
|
${cfg.profileExtra}
|
||||||
'';
|
'';
|
||||||
|
|
|
@ -72,8 +72,12 @@ in
|
||||||
home.file.".xsession" = {
|
home.file.".xsession" = {
|
||||||
mode = "555";
|
mode = "555";
|
||||||
text = ''
|
text = ''
|
||||||
# Rely on Bash to set session variables.
|
${
|
||||||
. "$HOME/.profile"
|
# If we want bash to set the session variables then we need
|
||||||
|
# to pull in .profile since that's where they are.
|
||||||
|
optionalString (config.home.sessionVariableSetter == "bash")
|
||||||
|
". \"$HOME/.profile\""
|
||||||
|
}
|
||||||
|
|
||||||
systemctl --user import-environment DBUS_SESSION_BUS_ADDRESS
|
systemctl --user import-environment DBUS_SESSION_BUS_ADDRESS
|
||||||
systemctl --user import-environment DISPLAY
|
systemctl --user import-environment DISPLAY
|
||||||
|
|
Loading…
Reference in a new issue