Nixpkgs: Difference between revisions

From NixOS Wiki
imported>Makefu
init
imported>Ixxie
Moved the contributing to Nixpkgs section from the Get Involved article.
Line 1: Line 1:
{{Expansion|This article is a stub.}}
{{Expansion|This article is a stub.}}


'''nixpkgs''' is the community maintained code repository for package descriptions as well as module descriptions for [[NixOS]]. The repository is maintained in https://github.com/nixos/nixpkgs and a number of core maintainers update nix expressions and module definitions.
'''Nixpkgs''' is the largest repository of [[Nix]] packages and [[NixOS]] modules. The repository is [https://github.com/nixos/nixpkgs hosted on GitHub] and maintained by the community, with official backing from the [https://nixos.org NixOS Foundation].
 
 
== Contributing to Nixpkgs ==
 
Development in NixOS primarily driven by the work in [https://github.com/nixos/nixpkgs nixpkgs on github]. This repository contains both all packages available in your NixOS channel and all the options you can use for configuring your system with your <code>configuration.nix</code>. To get your text editor to recognize Nix expressions, consider installing a Nix [https://github.com/nixos-users/wiki/wiki/Editor-Modes editor mode].
 
=== Report issues ===
 
Any issue can be reported in the nixpkgs issue-tracker [https://github.com/nixos/nixpkgs/issues on github]. Keep in mind that all work on nixpkgs is being done by volunteers and you cannot expect a quick response and solution for all problems you may face. In general Pull-Requests have a much shorter round-trip-time.
 
=== Create pull requests ===
 
If you want to see your package being provided by a channel, creating an issue will most likely not enough. It is up to you to create a [[Contributing to Nixpkgs|nix package description]] in Nixpkgs and create a pull request in the Nixpkgs repository. Pull requests are a way to tell a github project that you've created some changes, which maintainers can easily review, comment on and, and finally merge into the repository.
 
Here's how to create a pull request on GitHub:
 
==== Fork Nixpkgs on Github ====
 
Create a GitHub account and fork nixpkgs/nixos/... repository.
 
==== Add a remote ====
 
On your host, create a new remote location:
<syntaxhighlight lang="bash">
# add your github clone as remote location:
YOUR_GITHUB_NAME=fill-in
git remote add $YOUR_GITHUB_NAME git@github.com:$YOUR_GITHUB_NAME/nixpkgs.git
</syntaxhighlight>
 
==== Hack Nixpkgs ====
 
Make any modifications you want to your local copy of the repository. To test the changes on a NixOS machine, rebuild the system using your newly hacked Nixpkgs by executing:
 
<syntaxhighlight lang="bash">
sudo nixos-rebuild switch -I nixpkgs=/path/to/local/nixpkgs
</syntaxhighlight>
 
==== Commit your change locally ====
 
Commit your change to your local clone of the repository:
<syntaxhighlight lang="bash">
git add FILE_LIST # eventually use git add --patch
git commit
 
==== Check status ====
 
Verify everything is ok - no unexpected dangling files git does not know about yet:
git status
</syntaxhighlight>
 
==== Push to your remote repository ====
 
Submitting your change, push to your repository:
 
<syntaxhighlight lang="bash">
# recommended: create a topic branch, so that this change
# can be submitted independently from other patches:
git checkout -tb submit/your-topic-name
git push $YOUR_GITHUB_NAME submit/your-topic-name
</syntaxhighlight>
 
Why create your own branch? You can follow upstream (master) by running <code>git merge master</code>.
You can <code>git commit --amend</code> fixes and <code>git push -f</code> your branch.
You can always switch back to master by <code>git checkout master</code>.
 
==== Create a pull request on GitHub ====
 
Go to [https://github.com/nixos/nixpkgs the Nixpkgs repository] and push the ''create pull request'' button. Add a description of your work and submit.
 
=== Becoming a Nixpkgs maintainer ===
 
There are two types of maintainer: Members of the NixOS organization and package/module maintainer.
 
Members of the NixOS organization have direct access to the [https://github.com/Nixos/nixpkgs nixpkgs] and can therefor can merge [[Create-pull-requests|pull requests]].
 
Everybody can become a package maintainer by adding to <code>maintainers</code> attribute in the meta section of a package. First add your nick handle (preferable your GitHub username) to [https://github.com/NixOS/nixpkgs/blob/master/lib/maintainers.nix#L3 lib/maintainer.nix] and reference the said handle within the package:
 
<syntaxhighlight lang="nix">{ stdenv, fetchurl }:
stdenv.mkDerivation rec {
  name = "hello-2.10";
  # ....
  meta = with stdenv.lib; {
    # ...
    maintainers = with maintainers; [ eelco your-nick ]; # replace your-nick with your real nick
    platforms = platforms.all;
  };
}</syntaxhighlight>
There can be multiple maintainers per package. Maintainers will receive emails from [[Hydra|Hydra]] when package builds enters a failed state. They do not have special privileges as everybody can suggest updates and modifications to any package. However they might be consulted by NixOS members for testing and as a domain experts, when somebody else make a change to a package.


== Channels ==
== Channels ==
Channels in the Nix Ecosystem are tagged and tested revisions inside the nixpkgs repository. Every push of code towards the repository will be built by the official [https://nixos.org/hydra/manual/#idm140737315980672 nixos.org hydra] deployment. The [[Nix Channels]] article provides an overview of the  official channels which are currently available.
Channels in the Nix Ecosystem are tagged and tested revisions inside the Nixpkgs repository. Every push of code towards the repository will be built by the official [https://nixos.org/hydra/manual/#idm140737315980672 nixos.org hydra] deployment. The [[Nix Channels]] article provides an overview of the  official channels which are currently available.
 
== Pull Requests ==
Pull Requests are the primary way to get your changes into NixOS and nixpkgs. Pull Requests generally contain package updates or changes in the NixOS module system.
Use [[Get Involved#Create pull requests|Getting Involved ->Create pull requests]] as a Guide on how to create your first PR, all you need is a Github account.


== Alternatives ==
== Alternatives ==

Revision as of 09:25, 9 December 2017

Nixpkgs is the largest repository of Nix packages and NixOS modules. The repository is hosted on GitHub and maintained by the community, with official backing from the NixOS Foundation.


Contributing to Nixpkgs

Development in NixOS primarily driven by the work in nixpkgs on github. This repository contains both all packages available in your NixOS channel and all the options you can use for configuring your system with your configuration.nix. To get your text editor to recognize Nix expressions, consider installing a Nix editor mode.

Report issues

Any issue can be reported in the nixpkgs issue-tracker on github. Keep in mind that all work on nixpkgs is being done by volunteers and you cannot expect a quick response and solution for all problems you may face. In general Pull-Requests have a much shorter round-trip-time.

Create pull requests

If you want to see your package being provided by a channel, creating an issue will most likely not enough. It is up to you to create a nix package description in Nixpkgs and create a pull request in the Nixpkgs repository. Pull requests are a way to tell a github project that you've created some changes, which maintainers can easily review, comment on and, and finally merge into the repository.

Here's how to create a pull request on GitHub:

Fork Nixpkgs on Github

Create a GitHub account and fork nixpkgs/nixos/... repository.

Add a remote

On your host, create a new remote location:

# add your github clone as remote location:
YOUR_GITHUB_NAME=fill-in
git remote add $YOUR_GITHUB_NAME git@github.com:$YOUR_GITHUB_NAME/nixpkgs.git

Hack Nixpkgs

Make any modifications you want to your local copy of the repository. To test the changes on a NixOS machine, rebuild the system using your newly hacked Nixpkgs by executing:

sudo nixos-rebuild switch -I nixpkgs=/path/to/local/nixpkgs

Commit your change locally

Commit your change to your local clone of the repository:

git add FILE_LIST # eventually use git add --patch
git commit

==== Check status ====

Verify everything is ok - no unexpected dangling files git does not know about yet:
git status

Push to your remote repository

Submitting your change, push to your repository:

# recommended: create a topic branch, so that this change
# can be submitted independently from other patches:
git checkout -tb submit/your-topic-name
git push $YOUR_GITHUB_NAME submit/your-topic-name

Why create your own branch? You can follow upstream (master) by running git merge master. You can git commit --amend fixes and git push -f your branch. You can always switch back to master by git checkout master.

Create a pull request on GitHub

Go to the Nixpkgs repository and push the create pull request button. Add a description of your work and submit.

Becoming a Nixpkgs maintainer

There are two types of maintainer: Members of the NixOS organization and package/module maintainer.

Members of the NixOS organization have direct access to the nixpkgs and can therefor can merge pull requests.

Everybody can become a package maintainer by adding to maintainers attribute in the meta section of a package. First add your nick handle (preferable your GitHub username) to lib/maintainer.nix and reference the said handle within the package:

{ stdenv, fetchurl }:
stdenv.mkDerivation rec {
  name = "hello-2.10"; 
  # ....
  meta = with stdenv.lib; {
    # ...
    maintainers = with maintainers; [ eelco your-nick ]; # replace your-nick with your real nick
    platforms = platforms.all;
  };
}

There can be multiple maintainers per package. Maintainers will receive emails from Hydra when package builds enters a failed state. They do not have special privileges as everybody can suggest updates and modifications to any package. However they might be consulted by NixOS members for testing and as a domain experts, when somebody else make a change to a package.

Channels

Channels in the Nix Ecosystem are tagged and tested revisions inside the Nixpkgs repository. Every push of code towards the repository will be built by the official nixos.org hydra deployment. The Nix Channels article provides an overview of the official channels which are currently available.

Alternatives

Due to the fact that nixpkgs is only a nix expression it is possible to extend or replace the logic with your own sources. In fact, there are a number of extensions as well as complete replacements for Nixpkgs, see the Alternative Package Sets article.