Command Shell: Difference between revisions
imported>Artturin Link to options search. Remove unnecessary note which is already warned about in nix code. |
imported>Skylark m Minor copyedit throughout |
||
| Line 1: | Line 1: | ||
A shell is a program that translates text commands (like {{ic|ls}}, {{ic|vim}}, {{ic|reboot}} etc) into instructions for your computer. The default shell on NixOS is [[bash]], but it can be easily changed. | A shell is a program that translates text commands (like {{ic|ls}}, {{ic|vim}}, {{ic|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, | {{note|[[Zsh]] is used here as an example. You can use other shells, e.g. {{ic|fish}} or {{ic|nushell}}.}} | ||
== Enable == | == Enable == | ||
Always enable the shell system-wide, even if it's already enabled in your <code>home.nix</code>. Otherwise it | Always enable the shell system-wide, even if it's already enabled in your <code>home.nix</code>. Otherwise it won't source the necessary files. | ||
{{file|/etc/nixos/configuration.nix|nix|<nowiki> | {{file|/etc/nixos/configuration.nix|nix|<nowiki> | ||
programs.zsh.enable = true; | programs.zsh.enable = true; | ||
</nowiki>}} | </nowiki>}} | ||
== Changing default shell == | == Changing the default shell == | ||
[https://search.nixos.org/options?query=defaultUserShell <code>defaultUserShell</code> in the options search] | [https://search.nixos.org/options?query=defaultUserShell <code>defaultUserShell</code> in the options search] | ||
| Line 14: | Line 14: | ||
[https://search.nixos.org/options?query=useDefaultShell <code>useDefaultShell</code> in the options search] | [https://search.nixos.org/options?query=useDefaultShell <code>useDefaultShell</code> in the options search] | ||
To only change the default shell for one of the users, | To only change the default shell for one of the users, see | ||
[https://search.nixos.org/options?query=<name>.shell <code><name>.shell</code> in the options search] | [https://search.nixos.org/options?query=<name>.shell <code><name>.shell</code> in the options search] | ||
== Changing /bin/sh == | == Changing /bin/sh == | ||
{{Warning|Please note that NixOS assumes all over the place that shell is | {{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.}} | ||
{{ic|/bin/sh}} is a symlink to your default POSIX- | {{ic|/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 | To change your default POSIX shell on NixOS, use | ||
| Line 29: | Line 29: | ||
== See also == | == See also == | ||
* [[Fish]] | * [[Fish]] | ||
* [[Nushell]] | * [[Nushell]] | ||
* [[Zsh]] | |||
[[Category:Configuration]] | [[Category:Configuration]] | ||
[[Category:Software]] | [[Category:Software]] | ||
Revision as of 17:15, 16 October 2023
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.
Enable
Always enable the shell system-wide, even if it's already enabled in your home.nix. Otherwise it won't source the necessary files.
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
/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";