Command Shell: Difference between revisions
imported>Nix m add software and configuration categories |
m I added a small section helping users to fix a strange problem with the fish shell when using it alongside flakes. I think it was worth adding because I followed this page, but was suprised to find strange output when I ran a command that didn't exist. |
||
(15 intermediate revisions by 9 users not shown) | |||
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 [https://en.wikipedia.org/wiki/Unix_shell 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, e.g. [[Fish]] or [[Nushell]].}} | |||
== Enable == | == Enable == | ||
When adding a new shell, 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. | |||
For example, for [[Zsh]]: | |||
{{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 == | ||
=== For all users === | |||
To set a command shell as the default for all users, use the [https://search.nixos.org/options?query=defaultUserShell <code>defaultUserShell</code>] option. | |||
For example, to set Zsh as the default user shell for all users(including root): | |||
{{file|/etc/nixos/configuration.nix|nix|<nowiki> | {{file|/etc/nixos/configuration.nix|nix|<nowiki> | ||
users.defaultUserShell = pkgs.zsh; | users.defaultUserShell = pkgs.zsh; | ||
</nowiki>}} | </nowiki>}} | ||
To | === For a specific user === | ||
To set a command shell as the default for a particular user, use the [https://search.nixos.org/options?query=%3Cname%3E.shell <code><nowiki><name></nowiki>.shell</code>] option. | |||
For example, to set user "myuser"'s shell to [[fish]]: | |||
{{file|/etc/nixos/configuration.nix|nix|<nowiki> | {{file|/etc/nixos/configuration.nix|nix|<nowiki> | ||
users.users. | users.users.myuser.shell = pkgs.fish; | ||
</nowiki>}} | </nowiki>}} | ||
You can also choose whether or not a user should use the default shell: | |||
{{file|/etc/nixos/configuration.nix|nix|<nowiki> | |||
< | users.users.myuser.useDefaultShell = true; | ||
</nowiki>}} | |||
</ | == Using a different shell in nix-shell and nix develop == | ||
By default, both <code>nix develop</code> and <code>nix-shell</code> launch an interactive bash shell. However, it is possible to configure these environments to use an alternative shell. | |||
There are multiple approaches available: | |||
=== nix-your-shell === | |||
Refer to [https://github.com/MercuryTechnologies/nix-your-shell nix-your-shell] for installation and usage instructions. | |||
=== any-nix-shell === | |||
Refer to [https://github.com/haslersn/any-nix-shell any-nix-shell] for installation and usage instructions. | |||
=== Aliasing command === | |||
A simple, lightweight method is to alias the relevant commands to invoke the shell directly. For example: | |||
{{file|.bashrc|bash| | |||
<nowiki> | |||
alias nix-shell='nix-shell --run zsh' | |||
nix() { | |||
if [[ $1 == "develop" ]]; then | |||
shift | |||
command nix develop -c zsh "$@" | |||
else | |||
command nix "$@" | |||
fi | |||
} | |||
</nowiki> | |||
}} | |||
There are some caveats with this approach: | |||
* Nested shells will require you to type <code>exit</code> twice, once to leave the inner shell and once to exit the Nix shell environment itself. | |||
* Potential for alias conflicts as overriding commands can introduce unintended side effects in scripts or other tooling that expects the standard behavior. | |||
== Using Flakes == | |||
If you are using [[Flakes]] with fish, the 'command-not-found' error message will not work correctly, but can be fixed by disabling the builtin Nix <code>command-not-found</code> program:<ref>https://github.com/NixOS/nixpkgs/issues/425613#issuecomment-3076081921</ref> | |||
{{File|3=programs.command-not-found.enable = false;|name=/etc/nixos/configuration.nix|lang=nix}} | |||
== See also == | == See also == | ||
* [[Fish]] | |||
* [[Nushell]] | |||
* [[Zsh]] | * [[Zsh]] | ||
* [[ | * [[Flakes]] | ||
[[Category:Configuration]] | [[Category:Configuration]] | ||
[[Category:Software]] | [[Category:Software]] | ||
[[Category:Shell]] |