about summary refs log tree commit diff
path: root/nixpkgs/doc
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/doc')
-rw-r--r--nixpkgs/doc/languages-frameworks/idris.section.md18
-rw-r--r--nixpkgs/doc/languages-frameworks/java.xml9
-rw-r--r--nixpkgs/doc/languages-frameworks/python.section.md1
-rw-r--r--nixpkgs/doc/languages-frameworks/qt.xml225
-rw-r--r--nixpkgs/doc/languages-frameworks/vim.section.md168
-rw-r--r--nixpkgs/doc/package-specific-user-notes.xml51
-rw-r--r--nixpkgs/doc/stdenv.xml12
7 files changed, 330 insertions, 154 deletions
diff --git a/nixpkgs/doc/languages-frameworks/idris.section.md b/nixpkgs/doc/languages-frameworks/idris.section.md
index 3025172b5c98..e88015f08e3f 100644
--- a/nixpkgs/doc/languages-frameworks/idris.section.md
+++ b/nixpkgs/doc/languages-frameworks/idris.section.md
@@ -124,3 +124,21 @@ in another file (say `default.nix`) to be able to build it with
 ```
 $ nix-build -A yaml
 ```
+
+## Passing options to `idris` commands
+
+The `build-idris-package` function provides also optional input values to set additional options for the used `idris` commands.
+
+Specifically, you can set `idrisBuildOptions`, `idrisTestOptions`, `idrisInstallOptions` and `idrisDocOptions` to provide additional options to the `idris` command respectively when building, testing, installing and generating docs for your package.
+
+For example you could set
+
+```
+build-idris-package {
+  idrisBuildOptions = [ "--log" "1" "--verbose" ]
+
+  ...
+}
+```
+
+to require verbose output during `idris` build phase.
diff --git a/nixpkgs/doc/languages-frameworks/java.xml b/nixpkgs/doc/languages-frameworks/java.xml
index 287f63e685c4..68a1a097984d 100644
--- a/nixpkgs/doc/languages-frameworks/java.xml
+++ b/nixpkgs/doc/languages-frameworks/java.xml
@@ -10,7 +10,7 @@ stdenv.mkDerivation {
   name = "...";
   src = fetchurl { ... };
 
-  buildInputs = [ jdk ant ];
+  nativeBuildInputs = [ jdk ant ];
 
   buildPhase = "ant";
 }
@@ -30,7 +30,8 @@ stdenv.mkDerivation {
   <filename>foo.jar</filename> in its <filename>share/java</filename>
   directory, and another package declares the attribute
 <programlisting>
-buildInputs = [ jdk libfoo ];
+buildInputs = [ libfoo ];
+nativeBuildInputs = [ jdk ];
 </programlisting>
   then <envar>CLASSPATH</envar> will be set to
   <filename>/nix/store/...-libfoo/share/java/foo.jar</filename>.
@@ -46,7 +47,7 @@ buildInputs = [ jdk libfoo ];
   script to run it using the OpenJRE. You can use
   <literal>makeWrapper</literal> for this:
 <programlisting>
-buildInputs = [ makeWrapper ];
+nativeBuildInputs = [ makeWrapper ];
 
 installPhase =
   ''
@@ -76,7 +77,7 @@ installPhase =
   It is possible to use a different Java compiler than <command>javac</command>
   from the OpenJDK. For instance, to use the GNU Java Compiler:
 <programlisting>
-buildInputs = [ gcj ant ];
+nativeBuildInputs = [ gcj ant ];
 </programlisting>
   Here, Ant will automatically use <command>gij</command> (the GNU Java
   Runtime) instead of the OpenJRE.
diff --git a/nixpkgs/doc/languages-frameworks/python.section.md b/nixpkgs/doc/languages-frameworks/python.section.md
index 77b387dd3025..4963c97a6c9a 100644
--- a/nixpkgs/doc/languages-frameworks/python.section.md
+++ b/nixpkgs/doc/languages-frameworks/python.section.md
@@ -603,6 +603,7 @@ All parameters from `stdenv.mkDerivation` function are still supported. The foll
 * `preShellHook`: Hook to execute commands before `shellHook`.
 * `postShellHook`: Hook to execute commands after `shellHook`.
 * `removeBinByteCode ? true`: Remove bytecode from `/bin`. Bytecode is only created when the filenames end with `.py`.
+* `setupPyGlobalFlags ? []`: List of flags passed to `setup.py` command.
 * `setupPyBuildFlags ? []`: List of flags passed to `setup.py build_ext` command.
 
 The `stdenv.mkDerivation` function accepts various parameters for describing build inputs (see "Specifying dependencies"). The following are of special
diff --git a/nixpkgs/doc/languages-frameworks/qt.xml b/nixpkgs/doc/languages-frameworks/qt.xml
index b9b605b81da1..3332ce8c06e4 100644
--- a/nixpkgs/doc/languages-frameworks/qt.xml
+++ b/nixpkgs/doc/languages-frameworks/qt.xml
@@ -4,71 +4,182 @@
  <title>Qt</title>
 
  <para>
-  Qt is a comprehensive desktop and mobile application development toolkit for
-  C++. Legacy support is available for Qt 3 and Qt 4, but all current
-  development uses Qt 5. The Qt 5 packages in Nixpkgs are updated frequently to
-  take advantage of new features, but older versions are typically retained
-  until their support window ends. The most important consideration in
-  packaging Qt-based software is ensuring that each package and all its
-  dependencies use the same version of Qt 5; this consideration motivates most
-  of the tools described below.
+   This section describes the differences between Nix expressions for Qt
+   libraries and applications and Nix expressions for other C++ software. Some
+   knowledge of the latter is assumed. There are primarily two problems which
+   the Qt infrastructure is designed to address: ensuring consistent versioning
+   of all dependencies and finding dependencies at runtime.
  </para>
 
- <section xml:id="ssec-qt-libraries">
-  <title>Packaging Libraries for Nixpkgs</title>
+ <example xml:id='qt-default-nix'>
+   <title>Nix expression for a Qt package (<filename>default.nix</filename>)</title>
+   <programlisting>
+{ mkDerivation, lib, qtbase }: <co xml:id='qt-default-nix-co-1' />
 
-  <para>
-   Whenever possible, libraries that use Qt 5 should be built with each
-   available version. Packages providing libraries should be added to the
-   top-level function <varname>mkLibsForQt5</varname>, which is used to build a
-   set of libraries for every Qt 5 version. A special
-   <varname>callPackage</varname> function is used in this scope to ensure that
-   the entire dependency tree uses the same Qt 5 version. Import dependencies
-   unqualified, i.e., <literal>qtbase</literal> not
-   <literal>qt5.qtbase</literal>. <emphasis>Do not</emphasis> import a package
-   set such as <literal>qt5</literal> or <literal>libsForQt5</literal>.
-  </para>
+mkDerivation { <co xml:id='qt-default-nix-co-2' />
+  pname = "myapp";
+  version = "1.0";
 
-  <para>
-   If a library does not support a particular version of Qt 5, it is best to
-   mark it as broken by setting its <literal>meta.broken</literal> attribute. A
-   package may be marked broken for certain versions by testing the
-   <literal>qtbase.version</literal> attribute, which will always give the
-   current Qt 5 version.
-  </para>
- </section>
+  buildInputs = [ qtbase ]; <co xml:id='qt-default-nix-co-3' />
+}
+   </programlisting>
+ </example>
 
- <section xml:id="ssec-qt-applications">
-  <title>Packaging Applications for Nixpkgs</title>
+ <calloutlist>
+   <callout arearefs='qt-default-nix-co-1'>
+     <para>
+       Import <literal>mkDerivation</literal> and Qt (such as
+       <literal>qtbase</literal> modules directly. <emphasis>Do not</emphasis>
+       import Qt package sets; the Qt versions of dependencies may not be
+       coherent, causing build and runtime failures.
+     </para>
+   </callout>
+   <callout arearefs='qt-default-nix-co-2'>
+     <para>
+       Use <literal>mkDerivation</literal> instead of
+       <literal>stdenv.mkDerivation</literal>. <literal>mkDerivation</literal>
+       is a wrapper around <literal>stdenv.mkDerivation</literal> which
+       applies some Qt-specific settings.
+       This deriver accepts the same arguments as
+       <literal>stdenv.mkDerivation</literal>; refer to
+       <xref linkend='chap-stdenv' /> for details.
+     </para>
+     <para>
+       To use another deriver instead of
+       <literal>stdenv.mkDerivation</literal>, use
+       <literal>mkDerivationWith</literal>:
+<programlisting>
+mkDerivationWith myDeriver {
+  # ...
+}
+</programlisting>
+       If you cannot use <literal>mkDerivationWith</literal>, please refer to
+       <xref linkend='qt-runtime-dependencies' />.
+     </para>
+   </callout>
+   <callout arearefs='qt-default-nix-co-3'>
+     <para>
+       <literal>mkDerivation</literal> accepts the same arguments as
+       <literal>stdenv.mkDerivation</literal>, such as
+       <literal>buildInputs</literal>.
+     </para>
+   </callout>
+ </calloutlist>
 
-  <para>
-   Call your application expression using
-   <literal>libsForQt5.callPackage</literal> instead of
-   <literal>callPackage</literal>. Import dependencies unqualified, i.e.,
-   <literal>qtbase</literal> not <literal>qt5.qtbase</literal>. <emphasis>Do
-   not</emphasis> import a package set such as <literal>qt5</literal> or
-   <literal>libsForQt5</literal>.
-  </para>
+ <formalpara xml:id='qt-runtime-dependencies'>
+   <title>Locating runtime dependencies</title>
+   <para>
+     Qt applications need to be wrapped to find runtime dependencies.  If you
+     cannot use <literal>mkDerivation</literal> or
+     <literal>mkDerivationWith</literal> above, include
+     <literal>wrapQtAppsHook</literal> in <literal>nativeBuildInputs</literal>:
+<programlisting>
+stdenv.mkDerivation {
+  # ...
 
-  <para>
-   Qt 5 maintains strict backward compatibility, so it is generally best to
-   build an application package against the latest version using the
-   <varname>libsForQt5</varname> library set. In case a package does not build
-   with the latest Qt version, it is possible to pick a set pinned to a
-   particular version, e.g. <varname>libsForQt55</varname> for Qt 5.5, if that
-   is the latest version the package supports. If a package must be pinned to
-   an older Qt version, be sure to file a bug upstream; because Qt is strictly
-   backwards-compatible, any incompatibility is by definition a bug in the
-   application.
-  </para>
+  nativeBuildInputs = [ wrapQtAppsHook ];
+}
+</programlisting>
+   </para>
+ </formalpara>
+
+ <para>
+   Entries added to <literal>qtWrapperArgs</literal> are used to modify the
+   wrappers created by <literal>wrapQtAppsHook</literal>. The entries are
+   passed as arguments to <xref linkend='fun-wrapProgram' />.
+<programlisting>
+mkDerivation {
+  # ...
+
+  qtWrapperArgs = [ ''--prefix PATH : /path/to/bin'' ];
+}
+</programlisting>
+ </para>
+
+ <para>
+  Set <literal>dontWrapQtApps</literal> to stop applications from being
+  wrapped automatically. It is required to wrap applications manually with
+  <literal>wrapQtApp</literal>, using the syntax of
+  <xref linkend='fun-wrapProgram' />:
+<programlisting>
+mkDerivation {
+  # ...
 
+  dontWrapQtApps = true;
+  preFixup = ''
+      wrapQtApp "$out/bin/myapp" --prefix PATH : /path/to/bin
+  '';
+}
+</programlisting>
+ </para>
+
+ <note>
   <para>
-   When testing applications in Nixpkgs, it is a common practice to build the
-   package with <literal>nix-build</literal> and run it using the created
-   symbolic link. This will not work with Qt applications, however, because
-   they have many hard runtime requirements that can only be guaranteed if the
-   package is actually installed. To test a Qt application, install it with
-   <literal>nix-env</literal> or run it inside <literal>nix-shell</literal>.
+    <literal>wrapQtAppsHook</literal> ignores files that are non-ELF executables.
+    This means that scripts won't be automatically wrapped so you'll need to manually
+    wrap them as previously mentioned. An example of when you'd always need to do this
+    is with Python applications that use PyQT.
   </para>
- </section>
+ </note>
+
+ <para>
+  Libraries are built with every available version of Qt. Use the <literal>meta.broken</literal>
+  attribute to disable the package for unsupported Qt versions:
+<programlisting>
+mkDerivation {
+  # ...
+
+  # Disable this library with Qt &lt; 5.9.0
+  meta.broken = builtins.compareVersions qtbase.version "5.9.0" &lt; 0;
+}
+</programlisting>
+ </para>
+
+ <formalpara>
+   <title>Adding a library to Nixpkgs</title>
+   <para>
+     Add a Qt library to <filename>all-packages.nix</filename> by adding it to the
+     collection inside <literal>mkLibsForQt5</literal>. This ensures that the
+     library is built with every available version of Qt as needed.
+     <example xml:id='qt-library-all-packages-nix'>
+       <title>Adding a Qt library to <filename>all-packages.nix</filename></title>
+<programlisting>
+{
+  # ...
+
+  mkLibsForQt5 = self: with self; {
+    # ...
+
+    mylib = callPackage ../path/to/mylib {};
+  };
+
+  # ...
+}
+</programlisting>
+     </example>
+   </para>
+ </formalpara>
+
+ <formalpara>
+   <title>Adding an application to Nixpkgs</title>
+   <para>
+     Add a Qt application to <filename>all-packages.nix</filename> using
+     <literal>libsForQt5.callPackage</literal> instead of the usual
+     <literal>callPackage</literal>. The former ensures that all dependencies
+     are built with the same version of Qt.
+     <example xml:id='qt-application-all-packages-nix'>
+       <title>Adding a Qt application to <filename>all-packages.nix</filename></title>
+<programlisting>
+{
+  # ...
+
+  myapp = libsForQt5.callPackage ../path/to/myapp/ {};
+
+  # ...
+}
+</programlisting>
+     </example>
+   </para>
+ </formalpara>
+
 </section>
diff --git a/nixpkgs/doc/languages-frameworks/vim.section.md b/nixpkgs/doc/languages-frameworks/vim.section.md
index c450a09f7bd2..537e7b93e523 100644
--- a/nixpkgs/doc/languages-frameworks/vim.section.md
+++ b/nixpkgs/doc/languages-frameworks/vim.section.md
@@ -21,7 +21,7 @@ At the moment we support three different methods for managing plugins:
 
 Adding custom .vimrc lines can be done using the following code:
 
-```
+```nix
 vim_configurable.customize {
   # `name` specifies the name of the executable and package
   name = "vim-with-plugins";
@@ -32,11 +32,11 @@ vim_configurable.customize {
 }
 ```
 
-This configuration is used when vim is invoked with the command specified as name, in this case `vim-with-plugins`.
+This configuration is used when Vim is invoked with the command specified as name, in this case `vim-with-plugins`.
 
 For Neovim the `configure` argument can be overridden to achieve the same:
 
-```
+```nix
 neovim.override {
   configure = {
     customRC = ''
@@ -46,10 +46,10 @@ neovim.override {
 }
 ```
 
-If you want to use `neovim-qt` as a graphical editor, you can configure it by overriding neovim in an overlay
-or passing it an overridden neovimn:
+If you want to use `neovim-qt` as a graphical editor, you can configure it by overriding Neovim in an overlay
+or passing it an overridden Neovimn:
 
-```
+```nix
 neovim-qt.override {
   neovim = neovim.override {
     configure = {
@@ -63,16 +63,16 @@ neovim-qt.override {
 
 ## Managing plugins with Vim packages
 
-To store you plugins in Vim packages (the native vim plugin manager, see `:help packages`) the following example can be used:
+To store you plugins in Vim packages (the native Vim plugin manager, see `:help packages`) the following example can be used:
 
-```
+```nix
 vim_configurable.customize {
   vimrcConfig.packages.myVimPackage = with pkgs.vimPlugins; {
     # loaded on launch
     start = [ youcompleteme fugitive ];
     # manually loadable by calling `:packadd $plugin-name`
-    # however, if a vim plugin has a dependency that is not explicitly listed in
-	# opt that dependency will always be added to start to avoid confusion.
+    # however, if a Vim plugin has a dependency that is not explicitly listed in
+    # opt that dependency will always be added to start to avoid confusion.
     opt = [ phpCompletion elm-vim ];
     # To automatically load a plugin when opening a filetype, add vimrc lines like:
     # autocmd FileType php :packadd phpCompletion
@@ -83,7 +83,7 @@ vim_configurable.customize {
 `myVimPackage` is an arbitrary name for the generated package. You can choose any name you like.
 For Neovim the syntax is:
 
-```
+```nix
 neovim.override {
   configure = {
     customRC = ''
@@ -92,7 +92,7 @@ neovim.override {
     packages.myVimPackage = with pkgs.vimPlugins; {
       # see examples below how to use custom packages
       start = [ ];
-      # If a vim plugin has a dependency that is not explicitly listed in
+      # If a Vim plugin has a dependency that is not explicitly listed in
       # opt that dependency will always be added to start to avoid confusion.
       opt = [ ];
     };
@@ -102,7 +102,7 @@ neovim.override {
 
 The resulting package can be added to `packageOverrides` in `~/.nixpkgs/config.nix` to make it installable:
 
-```
+```nix
 {
   packageOverrides = pkgs: with pkgs; {
     myVim = vim_configurable.customize {
@@ -126,7 +126,7 @@ After that you can install your special grafted `myVim` or `myNeovim` packages.
 To use [vim-plug](https://github.com/junegunn/vim-plug) to manage your Vim
 plugins the following example can be used:
 
-```
+```nix
 vim_configurable.customize {
   vimrcConfig.packages.myVimPackage = with pkgs.vimPlugins; {
     # loaded on launch
@@ -137,7 +137,7 @@ vim_configurable.customize {
 
 For Neovim the syntax is:
 
-```
+```nix
 neovim.override {
   configure = {
     customRC = ''
@@ -161,89 +161,112 @@ assuming that "using latest version" is ok most of the time.
 
 First create a vim-scripts file having one plugin name per line. Example:
 
-    "tlib"
-    {'name': 'vim-addon-sql'}
-    {'filetype_regex': '\%(vim)$', 'names': ['reload', 'vim-dev-plugin']}
+```
+"tlib"
+{'name': 'vim-addon-sql'}
+{'filetype_regex': '\%(vim)$', 'names': ['reload', 'vim-dev-plugin']}
+```
 
 Such vim-scripts file can be read by VAM as well like this:
 
-    call vam#Scripts(expand('~/.vim-scripts'), {})
+```vim
+call vam#Scripts(expand('~/.vim-scripts'), {})
+```
 
 Create a default.nix file:
 
-    { nixpkgs ? import <nixpkgs> {}, compiler ? "ghc7102" }:
-    nixpkgs.vim_configurable.customize { name = "vim"; vimrcConfig.vam.pluginDictionaries = [ "vim-addon-vim2nix" ]; }
+```nix
+{ nixpkgs ? import <nixpkgs> {}, compiler ? "ghc7102" }:
+nixpkgs.vim_configurable.customize { name = "vim"; vimrcConfig.vam.pluginDictionaries = [ "vim-addon-vim2nix" ]; }
+```
 
 Create a generate.vim file:
 
-    ActivateAddons vim-addon-vim2nix
-    let vim_scripts = "vim-scripts"
-    call nix#ExportPluginsForNix({
-    \  'path_to_nixpkgs': eval('{"'.substitute(substitute(substitute($NIX_PATH, ':', ',', 'g'), '=',':', 'g'), '\([:,]\)', '"\1"',"g").'"}')["nixpkgs"],
-    \  'cache_file': '/tmp/vim2nix-cache',
-    \  'try_catch': 0,
-    \  'plugin_dictionaries': ["vim-addon-manager"]+map(readfile(vim_scripts), 'eval(v:val)')
-    \ })
+```vim
+ActivateAddons vim-addon-vim2nix
+let vim_scripts = "vim-scripts"
+call nix#ExportPluginsForNix({
+\  'path_to_nixpkgs': eval('{"'.substitute(substitute(substitute($NIX_PATH, ':', ',', 'g'), '=',':', 'g'), '\([:,]\)', '"\1"',"g").'"}')["nixpkgs"],
+\  'cache_file': '/tmp/vim2nix-cache',
+\  'try_catch': 0,
+\  'plugin_dictionaries': ["vim-addon-manager"]+map(readfile(vim_scripts), 'eval(v:val)')
+\ })
+```
 
 Then run
 
-    nix-shell -p vimUtils.vim_with_vim2nix --command "vim -c 'source generate.vim'"
+```bash
+nix-shell -p vimUtils.vim_with_vim2nix --command "vim -c 'source generate.vim'"
+```
 
 You should get a Vim buffer with the nix derivations (output1) and vam.pluginDictionaries (output2).
-You can add your vim to your system's configuration file like this and start it by "vim-my":
+You can add your Vim to your system's configuration file like this and start it by "vim-my":
 
-    my-vim =
-     let plugins = let inherit (vimUtils) buildVimPluginFrom2Nix; in {
-          copy paste output1 here
-     }; in vim_configurable.customize {
-       name = "vim-my";
-
-       vimrcConfig.vam.knownPlugins = plugins; # optional
-       vimrcConfig.vam.pluginDictionaries = [
-          copy paste output2 here
-       ];
-
-       # Pathogen would be
-       # vimrcConfig.pathogen.knownPlugins = plugins; # plugins
-       # vimrcConfig.pathogen.pluginNames = ["tlib"];
-     };
+```
+my-vim =
+  let plugins = let inherit (vimUtils) buildVimPluginFrom2Nix; in {
+    copy paste output1 here
+  }; in vim_configurable.customize {
+    name = "vim-my";
+
+    vimrcConfig.vam.knownPlugins = plugins; # optional
+    vimrcConfig.vam.pluginDictionaries = [
+       copy paste output2 here
+    ];
 
+    # Pathogen would be
+    # vimrcConfig.pathogen.knownPlugins = plugins; # plugins
+    # vimrcConfig.pathogen.pluginNames = ["tlib"];
+  };
+```
 
 Sample output1:
 
-    "reload" = buildVimPluginFrom2Nix { # created by nix#NixDerivation
-      name = "reload";
-      src = fetchgit {
-        url = "git://github.com/xolox/vim-reload";
-        rev = "0a601a668727f5b675cb1ddc19f6861f3f7ab9e1";
-        sha256 = "0vb832l9yxj919f5hfg6qj6bn9ni57gnjd3bj7zpq7d4iv2s4wdh";
-      };
-      dependencies = ["nim-misc"];
+```
+"reload" = buildVimPluginFrom2Nix { # created by nix#NixDerivation
+  name = "reload";
+  src = fetchgit {
+    url = "git://github.com/xolox/vim-reload";
+    rev = "0a601a668727f5b675cb1ddc19f6861f3f7ab9e1";
+    sha256 = "0vb832l9yxj919f5hfg6qj6bn9ni57gnjd3bj7zpq7d4iv2s4wdh";
+  };
+  dependencies = ["nim-misc"];
 
-    };
-    [...]
+};
+[...]
+```
 
 Sample output2:
 
-    [
-      ''vim-addon-manager''
-      ''tlib''
-      { "name" = ''vim-addon-sql''; }
-      { "filetype_regex" = ''\%(vim)$$''; "names" = [ ''reload'' ''vim-dev-plugin'' ]; }
-    ]
-
+```nix
+[
+  ''vim-addon-manager''
+  ''tlib''
+  { "name" = ''vim-addon-sql''; }
+  { "filetype_regex" = ''\%(vim)$$''; "names" = [ ''reload'' ''vim-dev-plugin'' ]; }
+]
+```
 
 ## Adding new plugins to nixpkgs
 
-In `pkgs/misc/vim-plugins/vim-plugin-names` we store the plugin names
-for all vim plugins we automatically generate plugins for.
-The format of this file `github username/github repository`:
-For example https://github.com/scrooloose/nerdtree becomes `scrooloose/nerdtree`.
-After adding your plugin to this file run the `./update.py` in the same folder.
-This will updated a file called `generated.nix` and make your plugin accessible in the
-`vimPlugins` attribute set (`vimPlugins.nerdtree` in our example).
-If additional steps to the build process of the plugin are required, add an
-override to the `pkgs/misc/vim-plugins/default.nix` in the same directory.
+Nix expressions for Vim plugins are stored in [pkgs/misc/vim-plugins](/pkgs/misc/vim-plugins). For the vast majority of plugins, Nix expressions are automatically generated by running [`./update.py`](/pkgs/misc/vim-plugins/update.py). This creates a [generated.nix](/pkgs/misc/vim-plugins/generated.nix) file based on the plugins listed in [vim-plugin-names](/pkgs/misc/vim-plugins/vim-plugin-names). Plugins are listed in alphabetical order in `vim-plugin-names` using the format `[github username]/[repository]`. For example https://github.com/scrooloose/nerdtree becomes `scrooloose/nerdtree`.
+
+Some plugins require overrides in order to function properly. Overrides are placed in [overrides.nix](/pkgs/misc/vim-plugins/overrides.nix). Overrides are most often required when a plugin requires some dependencies, or extra steps are required during the build process. For example `deoplete-fish` requires both `deoplete-nvim` and `vim-fish`, and so the following override was added:
+
+```
+deoplete-fish = super.deoplete-fish.overrideAttrs(old: {
+  dependencies = with super; [ deoplete-nvim vim-fish ];
+});
+```
+
+Sometimes plugins require an override that must be changed when the plugin is updated. This can cause issues when Vim plugins are auto-updated but the associated override isn't updated. For these plugins, the override should be written so that it specifies all information required to install the plugin, and running `./update.py` doesn't change the derivation for the plugin. Manually updating the override is required to update these types of plugins. An example of such a plugin is `LanguageClient-neovim`.
+
+To add a new plugin:
+
+  1. run `./update.py` and create a commit named "vimPlugins: Update",
+  2. add the new plugin to [vim-plugin-names](/pkgs/misc/vim-plugins/vim-plugin-names) and add overrides if required to [overrides.nix](/pkgs/misc/vim-plugins/overrides.nix),
+  3. run `./update.py` again and create a commit named "vimPlugins.[name]: init at [version]" (where `name` and `version` can be found in [generated.nix](/pkgs/misc/vim-plugins/generated.nix)), and
+  4. create a pull request.
 
 ## Important repositories
 
@@ -252,4 +275,3 @@ override to the `pkgs/misc/vim-plugins/default.nix` in the same directory.
 
 - [vim2nix](https://github.com/MarcWeber/vim-addon-vim2nix) which generates the
   .nix code
-
diff --git a/nixpkgs/doc/package-specific-user-notes.xml b/nixpkgs/doc/package-specific-user-notes.xml
index ef9198d1de29..196c760251f0 100644
--- a/nixpkgs/doc/package-specific-user-notes.xml
+++ b/nixpkgs/doc/package-specific-user-notes.xml
@@ -409,11 +409,19 @@ overrides = self: super: rec {
  </section>
 
  <section xml:id="sec-citrix">
-  <title>Citrix Receiver</title>
+  <title>Citrix Receiver &amp; Citrix Workspace App</title>
 
   <para>
-   The <link xlink:href="https://www.citrix.com/products/receiver/">Citrix
-   Receiver</link> is a remote desktop viewer which provides access to
+   <note>
+    <para>
+     Please note that the <literal>citrix_receiver</literal> package has been deprecated since its
+     development was <link xlink:href="https://docs.citrix.com/en-us/citrix-workspace-app.html">discontinued by upstream</link>
+     and will be replaced by <link xlink:href="https://www.citrix.com/products/workspace-app/">the citrix workspace app</link>.
+    </para>
+   </note>
+   <link xlink:href="https://www.citrix.com/products/receiver/">Citrix Receiver</link> and
+   <link xlink:href="https://www.citrix.com/products/workspace-app/">Citrix Workspace App</link>
+   are a remote desktop viewers which provide access to
    <link xlink:href="https://www.citrix.com/products/xenapp-xendesktop/">XenDesktop</link>
    installations.
   </para>
@@ -423,30 +431,35 @@ overrides = self: super: rec {
 
    <para>
     The tarball archive needs to be downloaded manually as the license
-    agreements of the vendor need to be accepted first. This is available at
-    the
-    <link xlink:href="https://www.citrix.com/downloads/citrix-receiver/">download
-    page at citrix.com</link>. Then run <literal>nix-prefetch-url
-    file://$PWD/linuxx64-$version.tar.gz</literal>. With the archive available
+    agreements of the vendor for
+    <link xlink:href="https://www.citrix.com/downloads/citrix-receiver/">Citrix Receiver</link>
+    or <link xlink:href="https://www.citrix.de/downloads/workspace-app/linux/workspace-app-for-linux-latest.html">Citrix Workspace</link>
+    need to be accepted first.
+    Then run <command>nix-prefetch-url file://$PWD/linuxx64-$version.tar.gz</command>.
+    With the archive available
     in the store the package can be built and installed with Nix.
    </para>
 
-   <para>
-    <emphasis>Note: it's recommended to install <literal>Citrix
-    Receiver</literal> using <literal>nix-env -i</literal> or globally to
-    ensure that the <literal>.desktop</literal> files are installed properly
-    into <literal>$XDG_CONFIG_DIRS</literal>. Otherwise it won't be possible to
-    open <literal>.ica</literal> files automatically from the browser to start
-    a Citrix connection.</emphasis>
-   </para>
+   <warning>
+    <title>Caution with <command>nix-shell</command> installs</title>
+    <para>
+     It's recommended to install <literal>Citrix Receiver</literal>
+     and/or <literal>Citrix Workspace</literal> using
+     <literal>nix-env -i</literal> or globally to
+     ensure that the <literal>.desktop</literal> files are installed properly
+     into <literal>$XDG_CONFIG_DIRS</literal>. Otherwise it won't be possible to
+     open <literal>.ica</literal> files automatically from the browser to start
+     a Citrix connection.
+    </para>
+   </warning>
   </section>
 
   <section xml:id="sec-citrix-custom-certs">
    <title>Custom certificates</title>
 
    <para>
-    The <literal>Citrix Receiver</literal> in <literal>nixpkgs</literal> trusts
-    several certificates
+    The <literal>Citrix Receiver</literal> and <literal>Citrix Workspace App</literal>
+    in <literal>nixpkgs</literal> trust several certificates
     <link xlink:href="https://curl.haxx.se/docs/caextract.html">from the
     Mozilla database</link> by default. However several companies using Citrix
     might require their own corporate certificate. On distros with imperative
@@ -459,7 +472,7 @@ overrides = self: super: rec {
 <programlisting>
 <![CDATA[with import <nixpkgs> { config.allowUnfree = true; };
 let extraCerts = [ ./custom-cert-1.pem ./custom-cert-2.pem /* ... */ ]; in
-citrix_receiver.override {
+citrix_workspace.override { # the same applies for `citrix_receiver` if used.
   inherit extraCerts;
 }]]>
 </programlisting>
diff --git a/nixpkgs/doc/stdenv.xml b/nixpkgs/doc/stdenv.xml
index fbb84b03a8d5..fe5929656565 100644
--- a/nixpkgs/doc/stdenv.xml
+++ b/nixpkgs/doc/stdenv.xml
@@ -786,7 +786,7 @@ passthru.updateScript = [ ../../update.sh pname "--requested-release=unstable" ]
         set, the default value is used, which is <literal>$prePhases
         unpackPhase patchPhase $preConfigurePhases configurePhase
         $preBuildPhases buildPhase checkPhase $preInstallPhases installPhase
-        fixupPhase $preDistPhases distPhase $postPhases</literal>.
+        fixupPhase installCheckPhase $preDistPhases distPhase $postPhases</literal>.
        </para>
        <para>
         Usually, if you just want to add a few phases, it’s more convenient
@@ -1601,6 +1601,16 @@ installTargets = "install-bin install-doc";</programlisting>
     <title>Variables controlling the fixup phase</title>
     <varlistentry>
      <term>
+      <varname>dontFixup</varname>
+     </term>
+     <listitem>
+      <para>
+        Set to true to skip the fixup phase.
+      </para>
+     </listitem>
+    </varlistentry>
+    <varlistentry>
+     <term>
       <varname>dontStrip</varname>
      </term>
      <listitem>