summaryrefslogtreecommitdiffstats
path: root/nixos/modules
diff options
context:
space:
mode:
authorzimbatm <zimbatm@zimbatm.com>2016-06-19 23:36:45 +0100
committerGitHub <noreply@github.com>2016-06-19 23:36:45 +0100
commit31c158ad453547993095b9425a60697738fdac5d (patch)
tree6b7239b1cab6571b745050a5e4ccd70045037f52 /nixos/modules
parentb0f8416c5c0e5345897832ae0cce139ed85c7fdb (diff)
parent2974b6f4c8224ab1097e9386d6b3a0d570f95531 (diff)
Merge pull request #16189 from zimbatm/usershell-config
User shell config
Diffstat (limited to 'nixos/modules')
-rw-r--r--nixos/modules/config/shells-environment.nix8
-rw-r--r--nixos/modules/config/users-groups.nix25
-rw-r--r--nixos/modules/programs/bash/bash.nix2
-rw-r--r--nixos/modules/programs/shadow.nix18
4 files changed, 33 insertions, 20 deletions
diff --git a/nixos/modules/config/shells-environment.nix b/nixos/modules/config/shells-environment.nix
index 9642981803bf..f458bc39adaa 100644
--- a/nixos/modules/config/shells-environment.nix
+++ b/nixos/modules/config/shells-environment.nix
@@ -1,7 +1,7 @@
# This module defines a global environment configuration and
# a common configuration for all shells.
-{ config, lib, pkgs, ... }:
+{ config, lib, utils, pkgs, ... }:
with lib;
@@ -135,13 +135,13 @@ in
environment.shells = mkOption {
default = [];
- example = [ "/run/current-system/sw/bin/zsh" ];
+ example = literalExample "[ pkgs.bashInteractive pkgs.zsh ]";
description = ''
A list of permissible login shells for user accounts.
No need to mention <literal>/bin/sh</literal>
here, it is placed into this list implicitly.
'';
- type = types.listOf types.path;
+ type = types.listOf (types.either types.shellPackage types.path);
};
};
@@ -158,7 +158,7 @@ in
environment.etc."shells".text =
''
- ${concatStringsSep "\n" cfg.shells}
+ ${concatStringsSep "\n" (map utils.toShellPath cfg.shells)}
/bin/sh
'';
diff --git a/nixos/modules/config/users-groups.nix b/nixos/modules/config/users-groups.nix
index 8231907d7999..277a4264137b 100644
--- a/nixos/modules/config/users-groups.nix
+++ b/nixos/modules/config/users-groups.nix
@@ -1,9 +1,8 @@
-{ config, lib, pkgs, ... }:
+{ config, lib, utils, pkgs, ... }:
with lib;
let
-
ids = config.ids;
cfg = config.users;
@@ -103,7 +102,7 @@ let
};
home = mkOption {
- type = types.str;
+ type = types.path;
default = "/var/empty";
description = "The user's home directory.";
};
@@ -118,8 +117,10 @@ let
};
shell = mkOption {
- type = types.str;
- default = "/run/current-system/sw/bin/nologin";
+ type = types.either types.shellPackage types.path;
+ default = pkgs.nologin;
+ defaultText = "pkgs.nologin";
+ example = literalExample "pkgs.bashInteractive";
description = "The path to the user's shell.";
};
@@ -359,11 +360,12 @@ let
spec = pkgs.writeText "users-groups.json" (builtins.toJSON {
inherit (cfg) mutableUsers;
- users = mapAttrsToList (n: u:
+ users = mapAttrsToList (_: u:
{ inherit (u)
- name uid group description home shell createHome isSystemUser
+ name uid group description home createHome isSystemUser
password passwordFile hashedPassword
initialPassword initialHashedPassword;
+ shell = utils.toShellPath u.shell;
}) cfg.users;
groups = mapAttrsToList (n: g:
{ inherit (g) name gid;
@@ -373,6 +375,12 @@ let
}) cfg.groups;
});
+ systemShells =
+ let
+ shells = mapAttrsToList (_: u: u.shell) cfg.users;
+ in
+ filter types.shellPackage.check shells;
+
in {
###### interface
@@ -477,6 +485,9 @@ in {
};
};
+ # Install all the user shells
+ environment.systemPackages = systemShells;
+
users.groups = {
root.gid = ids.gids.root;
wheel.gid = ids.gids.wheel;
diff --git a/nixos/modules/programs/bash/bash.nix b/nixos/modules/programs/bash/bash.nix
index e4e264ec0036..c09bcfb70e24 100644
--- a/nixos/modules/programs/bash/bash.nix
+++ b/nixos/modules/programs/bash/bash.nix
@@ -200,7 +200,7 @@ in
# Configuration for readline in bash.
environment.etc."inputrc".source = ./inputrc;
- users.defaultUserShell = mkDefault "/run/current-system/sw/bin/bash";
+ users.defaultUserShell = mkDefault pkgs.bashInteractive;
environment.pathsToLink = optionals cfg.enableCompletion [
"/etc/bash_completion.d"
diff --git a/nixos/modules/programs/shadow.nix b/nixos/modules/programs/shadow.nix
index 566398d839fd..6398509357a6 100644
--- a/nixos/modules/programs/shadow.nix
+++ b/nixos/modules/programs/shadow.nix
@@ -1,6 +1,6 @@
# Configuration for the pwdutils suite of tools: passwd, useradd, etc.
-{ config, lib, pkgs, ... }:
+{ config, lib, utils, pkgs, ... }:
with lib;
@@ -43,13 +43,13 @@ in
users.defaultUserShell = lib.mkOption {
description = ''
This option defines the default shell assigned to user
- accounts. This must not be a store path, since the path is
+ accounts. This can be either a full system path or a shell package.
+
+ This must not be a store path, since the path is
used outside the store (in particular in /etc/passwd).
- Rather, it should be the path of a symlink that points to the
- actual shell in the Nix store.
'';
- example = "/run/current-system/sw/bin/zsh";
- type = types.path;
+ example = literalExample "pkgs.zsh";
+ type = types.either types.path types.shellPackage;
};
};
@@ -60,7 +60,9 @@ in
config = {
environment.systemPackages =
- lib.optional config.users.mutableUsers pkgs.shadow;
+ lib.optional config.users.mutableUsers pkgs.shadow ++
+ lib.optional (types.shellPackage.check config.users.defaultUserShell)
+ config.users.defaultUserShell;
environment.etc =
[ { # /etc/login.defs: global configuration for pwdutils. You
@@ -74,7 +76,7 @@ in
''
GROUP=100
HOME=/home
- SHELL=${config.users.defaultUserShell}
+ SHELL=${utils.toShellPath config.users.defaultUserShell}
'';
target = "default/useradd";
}