Fish: Difference between revisions
imported>Legendofmiracles m fixed the small mess i created ;-; |
imported>Legendofmiracles fish plugins in nixkpgs |
||
Line 1: | Line 1: | ||
{{DISPLAYTITLE:fish}} | {{DISPLAYTITLE:fish}} | ||
fish is the [http://fishshell.com/ Friendly Interactive | fish is the [http://fishshell.com/ Friendly Interactive Shell]. | ||
==Setting fish as the login shell== | ==Setting fish as the login shell== | ||
Line 21: | Line 21: | ||
In order to manage fish with home manager you also have to enable it in your <code>home.nix</code>. | In order to manage fish with home manager you also have to enable it in your <code>home.nix</code>. | ||
Then you can add new ones by adding them to the list of submodules of <code>programs.fish.plugins</code>. So for example for the plugin <code>z</code> from jethrokuan on github. | Then you can add new ones by adding them to the list of submodules of <code>programs.fish.plugins</code>. | ||
=== Manual === | |||
So for example for the plugin <code>z</code> from jethrokuan on github. | |||
<syntaxhighlight lang="nix"> | <syntaxhighlight lang="nix"> | ||
Line 35: | Line 38: | ||
}]; | }]; | ||
</syntaxhighlight> | </syntaxhighlight> | ||
=== nixpkgs === | |||
Or you can use some of the [https://search.nixos.org/packages?channel=unstable&from=0&size=50&buckets=%7B%22package_attr_set%22%3A%5B%22fishPlugins%22%5D%2C%22package_license_set%22%3A%5B%5D%2C%22package_maintainers_set%22%3A%5B%5D%2C%22package_platforms%22%3A%5B%5D%7D&sort=relevance&query=fishPlugins packaged plugins], by just adding them to the list. | |||
== Useful scripts == | == Useful scripts == |
Revision as of 11:16, 26 April 2021
fish is the Friendly Interactive Shell.
Setting fish as the login shell
The following /etc/nixos/configuration.nix fragment demonstrates how to enable fish and set it as the default shell for user foo.
{
...
programs.fish.enable = true;
users.users.foo = {
shell = pkgs.fish;
};
...
}
Managing fish plugins with Home Manager
In order to manage fish with home manager you also have to enable it in your home.nix
.
Then you can add new ones by adding them to the list of submodules of programs.fish.plugins
.
Manual
So for example for the plugin z
from jethrokuan on github.
programs.fish.enable = true;
programs.fish.plugins = [{
name = "z";
src = pkgs.fetchFromGitHub {
owner = "jethrokuan";
repo = "z";
rev = "e0e1b9dfdba362f8ab1ae8c1afc7ccf62b89f7eb";
sha256 = "0dbnir6jbwjpjalz14snzd3cgdysgcs3raznsijd6savad3qhijc";
};
}];
nixpkgs
Or you can use some of the packaged plugins, by just adding them to the list.
Useful scripts
Show that you are in a nix-shell
Add this to the fish_prompt
function (usually placed in ~/.config/fish/functions/fish_prompt.fish
):
set -l nix_shell_info (
if test -n "$IN_NIX_SHELL"
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.
You can either put these in programs.fish.functions
with home-manager or in ~/.config/fish/functions/fish_prompt.fish
without.
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 ..