# `installShellFiles` {#installshellfiles}
This hook adds helpers that install artifacts like executable files, manpages
and shell completions.
It exposes the following functions that can be used from your `postInstall`
hook:
## `installBin` {#installshellfiles-installbin}
The `installBin` function takes one or more paths to files to install as
executable files.
This function will place them into [`outputBin`](#outputbin).
### Example Usage {#installshellfiles-installbin-exampleusage}
```nix
{
nativeBuildInputs = [ installShellFiles ];
# Sometimes the file has an undesirable name. It should be renamed before
# being installed via installBin
postInstall = ''
mv a.out delmar
installBin foobar delmar
'';
}
```
## `installManPage` {#installshellfiles-installmanpage}
The `installManPage` function takes one or more paths to manpages to install.
The manpages must have a section suffix, and may optionally be compressed (with
`.gz` suffix). This function will place them into the correct
`share/man/man<section>/` directory in [`outputMan`](#outputman).
### Example Usage {#installshellfiles-installmanpage-exampleusage}
```nix
{
nativeBuildInputs = [ installShellFiles ];
# Sometimes the manpage file has an undersirable name; e.g., it conflicts with
# another software with an equal name. To install it with a different name,
# the installed name must be provided before the path to the file.
#
# Below install a manpage "foobar.1" from the source file "./foobar.1", and
# also installs the manpage "fromsea.3" from the source file "./delmar.3".
postInstall = ''
installManPage \
foobar.1 \
--name fromsea.3 delmar.3
'';
}
```
The manpage may be the result of a piped input (e.g. `<(cmd)`), in which
case the name must be provided before the pipe with the `--name` flag.
```nix
{
nativeBuildInputs = [ installShellFiles ];
postInstall = ''
installManPage --name foobar.1 <($out/bin/foobar --manpage)
'';
}
```
If no parsing of arguments is desired, pass `--` to opt-out of all subsequent
arguments.
```nix
{
nativeBuildInputs = [ installShellFiles ];
# Installs a manpage from a file called "--name"
postInstall = ''
installManPage -- --name
'';
}
```
## `installShellCompletion` {#installshellfiles-installshellcompletion}
The `installShellCompletion` function takes one or more paths to shell
completion files.