config: prefer $SHELL over /etc/passwd

If the user hasn't configured a shell in footrc, use $SHELL. Only if
that variable isn't set do we use the shell from /etc/passwd.
This commit is contained in:
Daniel Eklöf 2020-03-02 18:45:38 +01:00
parent f235bfdfdf
commit 74175b5bd1
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F
3 changed files with 15 additions and 10 deletions

View file

@ -44,15 +44,19 @@ static const uint32_t default_bright[] = {
static char *
get_shell(void)
{
struct passwd *passwd = getpwuid(getuid());
if (passwd == NULL) {
LOG_ERRNO("failed to lookup user");
return NULL;
const char *shell = getenv("SHELL");
if (shell == NULL) {
struct passwd *passwd = getpwuid(getuid());
if (passwd == NULL) {
LOG_ERRNO("failed to lookup user");
return NULL;
}
shell = passwd->pw_shell;
}
const char *shell = passwd->pw_shell;
LOG_DBG("user's shell: %s", shell);
return strdup(shell);
}

View file

@ -41,9 +41,10 @@ in this order:
_XxY_ (-padding).
*shell*
Executable to launch. Typically a shell. Default: the user's
default shell (as specified in _/etc/passwd_). You can also pass
arguments. For example "/bin/bash --norc".
Executable to launch. Typically a shell. Default: _$SHELL_ if set,
otherwise the user's default shell (as specified in
_/etc/passwd_). You can also pass arguments. For example
"/bin/bash --norc".
*login-shell*
Start a login shell, by prepending a '-' to argv[0]. Default: _no_.

2
footrc
View file

@ -4,7 +4,7 @@
# scrollback=1000
# geometry=800x600
# pad=2x2
# shell=<user's default shell (from /etc/passwd)> (you may need to override if you need a login shell)
# shell=$SHELL (if set, otherwise user's default shell from /etc/passwd)
# term=foot
# login-shell=no
# workers=<number of logical CPUs>