From cba561d1a8b71d5bd9eb6d600feddfe106620eea Mon Sep 17 00:00:00 2001 From: Bobby Rong Date: Thu, 1 Jul 2021 19:35:48 +0800 Subject: [PATCH] nixos: nixos/doc/manual/configuration/adding-custom-packages.xml to CommonMark --- .../adding-custom-packages.section.md | 74 +++++++++++++++++ .../configuration/adding-custom-packages.xml | 73 ----------------- .../configuration/declarative-packages.xml | 2 +- .../adding-custom-packages.section.xml | 81 +++++++++++++++++++ 4 files changed, 156 insertions(+), 74 deletions(-) create mode 100644 nixos/doc/manual/configuration/adding-custom-packages.section.md delete mode 100644 nixos/doc/manual/configuration/adding-custom-packages.xml create mode 100644 nixos/doc/manual/from_md/configuration/adding-custom-packages.section.xml diff --git a/nixos/doc/manual/configuration/adding-custom-packages.section.md b/nixos/doc/manual/configuration/adding-custom-packages.section.md new file mode 100644 index 00000000000..14370c89126 --- /dev/null +++ b/nixos/doc/manual/configuration/adding-custom-packages.section.md @@ -0,0 +1,74 @@ +# Adding Custom Packages {#sec-custom-packages} + +It's possible that a package you need is not available in NixOS. In that +case, you can do two things. First, you can clone the Nixpkgs +repository, add the package to your clone, and (optionally) submit a +patch or pull request to have it accepted into the main Nixpkgs repository. +This is described in detail in the [Nixpkgs manual](https://nixos.org/nixpkgs/manual). +In short, you clone Nixpkgs: + +```ShellSession +$ git clone https://github.com/NixOS/nixpkgs +$ cd nixpkgs +``` + +Then you write and test the package as described in the Nixpkgs manual. +Finally, you add it to [`environment.systemPackages`](options.html#opt-environment.systemPackages), e.g. + +```nix +environment.systemPackages = [ pkgs.my-package ]; +``` + +and you run `nixos-rebuild`, specifying your own Nixpkgs tree: + +```ShellSession +# nixos-rebuild switch -I nixpkgs=/path/to/my/nixpkgs +``` + +The second possibility is to add the package outside of the Nixpkgs +tree. For instance, here is how you specify a build of the +[GNU Hello](https://www.gnu.org/software/hello/) package directly in +`configuration.nix`: + +```nix +environment.systemPackages = + let + my-hello = with pkgs; stdenv.mkDerivation rec { + name = "hello-2.8"; + src = fetchurl { + url = "mirror://gnu/hello/${name}.tar.gz"; + sha256 = "0wqd8sjmxfskrflaxywc7gqw7sfawrfvdxd9skxawzfgyy0pzdz6"; + }; + }; + in + [ my-hello ]; +``` + +Of course, you can also move the definition of `my-hello` into a +separate Nix expression, e.g. + +```nix +environment.systemPackages = [ (import ./my-hello.nix) ]; +``` + +where `my-hello.nix` contains: + +```nix +with import {}; # bring all of Nixpkgs into scope + +stdenv.mkDerivation rec { + name = "hello-2.8"; + src = fetchurl { + url = "mirror://gnu/hello/${name}.tar.gz"; + sha256 = "0wqd8sjmxfskrflaxywc7gqw7sfawrfvdxd9skxawzfgyy0pzdz6"; + }; +} +``` + +This allows testing the package easily: + +```ShellSession +$ nix-build my-hello.nix +$ ./result/bin/hello +Hello, world! +``` diff --git a/nixos/doc/manual/configuration/adding-custom-packages.xml b/nixos/doc/manual/configuration/adding-custom-packages.xml deleted file mode 100644 index 19eb2429d0a..00000000000 --- a/nixos/doc/manual/configuration/adding-custom-packages.xml +++ /dev/null @@ -1,73 +0,0 @@ -
- Adding Custom Packages - - - It’s possible that a package you need is not available in NixOS. In that - case, you can do two things. First, you can clone the Nixpkgs repository, add - the package to your clone, and (optionally) submit a patch or pull request to - have it accepted into the main Nixpkgs repository. This is described in - detail in the Nixpkgs - manual. In short, you clone Nixpkgs: - -$ git clone https://github.com/NixOS/nixpkgs -$ cd nixpkgs - - Then you write and test the package as described in the Nixpkgs manual. - Finally, you add it to environment.systemPackages, e.g. - - = [ pkgs.my-package ]; - - and you run nixos-rebuild, specifying your own Nixpkgs - tree: - -# nixos-rebuild switch -I nixpkgs=/path/to/my/nixpkgs - - - - The second possibility is to add the package outside of the Nixpkgs tree. For - instance, here is how you specify a build of the - GNU Hello - package directly in configuration.nix: - - = - let - my-hello = with pkgs; stdenv.mkDerivation rec { - name = "hello-2.8"; - src = fetchurl { - url = "mirror://gnu/hello/${name}.tar.gz"; - sha256 = "0wqd8sjmxfskrflaxywc7gqw7sfawrfvdxd9skxawzfgyy0pzdz6"; - }; - }; - in - [ my-hello ]; - - Of course, you can also move the definition of my-hello - into a separate Nix expression, e.g. - - = [ (import ./my-hello.nix) ]; - - where my-hello.nix contains: - -with import <nixpkgs> {}; # bring all of Nixpkgs into scope - -stdenv.mkDerivation rec { - name = "hello-2.8"; - src = fetchurl { - url = "mirror://gnu/hello/${name}.tar.gz"; - sha256 = "0wqd8sjmxfskrflaxywc7gqw7sfawrfvdxd9skxawzfgyy0pzdz6"; - }; -} - - This allows testing the package easily: - -$ nix-build my-hello.nix -$ ./result/bin/hello -Hello, world! - - -
diff --git a/nixos/doc/manual/configuration/declarative-packages.xml b/nixos/doc/manual/configuration/declarative-packages.xml index cd84d1951d2..648bb76cf3b 100644 --- a/nixos/doc/manual/configuration/declarative-packages.xml +++ b/nixos/doc/manual/configuration/declarative-packages.xml @@ -50,5 +50,5 @@ nixos.firefox firefox-23.0 Mozilla Firefox - the browser, reloaded - + diff --git a/nixos/doc/manual/from_md/configuration/adding-custom-packages.section.xml b/nixos/doc/manual/from_md/configuration/adding-custom-packages.section.xml new file mode 100644 index 00000000000..80e3aa69212 --- /dev/null +++ b/nixos/doc/manual/from_md/configuration/adding-custom-packages.section.xml @@ -0,0 +1,81 @@ +
+ Adding Custom Packages + + It’s possible that a package you need is not available in NixOS. In + that case, you can do two things. First, you can clone the Nixpkgs + repository, add the package to your clone, and (optionally) submit a + patch or pull request to have it accepted into the main Nixpkgs + repository. This is described in detail in the + Nixpkgs + manual. In short, you clone Nixpkgs: + + +$ git clone https://github.com/NixOS/nixpkgs +$ cd nixpkgs + + + Then you write and test the package as described in the Nixpkgs + manual. Finally, you add it to + environment.systemPackages, + e.g. + + +environment.systemPackages = [ pkgs.my-package ]; + + + and you run nixos-rebuild, specifying your own + Nixpkgs tree: + + +# nixos-rebuild switch -I nixpkgs=/path/to/my/nixpkgs + + + The second possibility is to add the package outside of the Nixpkgs + tree. For instance, here is how you specify a build of the + GNU + Hello package directly in + configuration.nix: + + +environment.systemPackages = + let + my-hello = with pkgs; stdenv.mkDerivation rec { + name = "hello-2.8"; + src = fetchurl { + url = "mirror://gnu/hello/${name}.tar.gz"; + sha256 = "0wqd8sjmxfskrflaxywc7gqw7sfawrfvdxd9skxawzfgyy0pzdz6"; + }; + }; + in + [ my-hello ]; + + + Of course, you can also move the definition of + my-hello into a separate Nix expression, e.g. + + +environment.systemPackages = [ (import ./my-hello.nix) ]; + + + where my-hello.nix contains: + + +with import <nixpkgs> {}; # bring all of Nixpkgs into scope + +stdenv.mkDerivation rec { + name = "hello-2.8"; + src = fetchurl { + url = "mirror://gnu/hello/${name}.tar.gz"; + sha256 = "0wqd8sjmxfskrflaxywc7gqw7sfawrfvdxd9skxawzfgyy0pzdz6"; + }; +} + + + This allows testing the package easily: + + +$ nix-build my-hello.nix +$ ./result/bin/hello +Hello, world! + +