Fish: Difference between revisions
imported>Mic92 No edit summary |
imported>Mic92 No edit summary |
||
Line 3: | Line 3: | ||
== Fish as login shell == | == Fish as login shell == | ||
The following set up fish as a login shell for the user <code>myuser</code> | The following lines in <code>configuration.nix</code> set up fish as a login shell for the user <code>myuser</code> | ||
<syntaxhighlight lang="nix"> | <syntaxhighlight lang="nix"> | ||
Line 16: | Line 16: | ||
Add this to <code>fish/fish_prompt.fish</code>: | Add this to <code>fish/fish_prompt.fish</code>: | ||
<syntaxhighlight lang="fish"> | |||
set -l nix_shell_info ( | |||
if test "$IN_NIX_SHELL" = "1" | |||
echo -n "<nix-shell> " | |||
end | |||
) | |||
</syntaxhighlight> | |||
and <code>$nix_shell_info</code> to the echo in that function, e.g.: | and <code>$nix_shell_info</code> to the echo in that function, e.g.: | ||
<syntaxhighlight lang="fish"> | |||
echo -n -s "$nix_shell_info ~>" | |||
</syntaxhighlight> | |||
Now your prompt looks like this | Now your prompt looks like this | ||
Line 36: | Line 41: | ||
==== haskellEnv ==== | ==== haskellEnv ==== | ||
<syntaxhighlight lang="fish"> | |||
function haskellEnv | |||
nix-shell -p "haskellPackages.ghcWithPackages (pkgs: with pkgs; [ $argv ])" | |||
end | |||
</syntaxhighlight> | |||
# Invocation: haskellEnv package1 packages2 .. packageN | # Invocation: haskellEnv package1 packages2 .. packageN | ||
==== pythonEnv ==== | ==== pythonEnv ==== | ||
<syntaxhighlight lang="fish"> | |||
function pythonEnv --description 'start a nix-shell with the given python packages' --argument pythonVersion | |||
if set -q argv[2] | |||
set argv $argv[2..-1] | |||
end | |||
for el in $argv | |||
set ppkgs $ppkgs "python"$pythonVersion"Packages.$el" | |||
end | |||
nix-shell -p $ppkgs | |||
end | |||
# Invocation: pythonEnv 3 package1 package2 .. packageN | |||
# or: pythonEnv 2 .. | |||
</syntaxhighlight> |
Revision as of 22:06, 22 August 2017
Fish is the Friendly Interactive SHell.
Fish as login shell
The following lines in configuration.nix
set up fish as a login shell for the user myuser
programs.fish.enable = true;
users.extraUsers.myuser = {
shell = "/run/current-system/sw/bin/fish";
};
Useful scripts
Show that you are in a nix-shell
Add this to fish/fish_prompt.fish
:
set -l nix_shell_info (
if test "$IN_NIX_SHELL" = "1"
echo -n "<nix-shell> "
end
)
and $nix_shell_info
to the echo in that function, e.g.:
echo -n -s "$nix_shell_info ~>"
Now your prompt looks like this
- outside:
~>
- inside:
<nix-shell> ~>
btw. you can directly start nix-shell in fish with nix-shell --run fish
, but (FIXME) the normal build functions are not available there.
Environments
Helper functions that put you in a nix-shell with the given packages installed.
haskellEnv
function haskellEnv
nix-shell -p "haskellPackages.ghcWithPackages (pkgs: with pkgs; [ $argv ])"
end
# Invocation: haskellEnv package1 packages2 .. packageN
pythonEnv
function pythonEnv --description 'start a nix-shell with the given python packages' --argument pythonVersion
if set -q argv[2]
set argv $argv[2..-1]
end
for el in $argv
set ppkgs $ppkgs "python"$pythonVersion"Packages.$el"
end
nix-shell -p $ppkgs
end
# Invocation: pythonEnv 3 package1 package2 .. packageN
# or: pythonEnv 2 ..