Command Shell

From NixOS Wiki
Revision as of 01:10, 11 November 2023 by imported>Liassica (→‎Enable: Changed vague "home.nix" wording)

A shell is a program that translates text commands (like ls, vim, reboot etc) into instructions for your computer. The default shell on NixOS is bash, but it can be easily changed.

Note: Zsh is used here as an example. You can use other shells, e.g. fish or nushell.

Enable

Always enable the shell system-wide, even if it's already enabled in your Home Manager configuration, otherwise it won't source the necessary files.

 
/etc/nixos/configuration.nix
programs.zsh.enable = true;

Changing the default shell

defaultUserShell in the options search

useDefaultShell in the options search

To only change the default shell for one of the users, see

<name>.shell <name>.shell in the options search

Changing /bin/sh

Warning: Please note that NixOS assumes all over the place that the shell is bash, so override the default setting only if you know what you're doing.

/bin/sh is a symlink to your default POSIX-compliant shell. It's used when writing shell scripts, so that the script works on all machines independently of which shell the user is using. /bin/sh doesn't have to be the same as your interactive shell (i.e. the one you use in your terminal). For example, some people set their interactive shells to zsh/fish but set /bin/sh to dash, because it's fast and scripts don't need any of those fancy zsh/fish features.

To change your default POSIX shell on NixOS, use

# Dash is just an example, you can use whatever you want
environment.binsh = "${pkgs.dash}/bin/dash";

See also