Nixpkgs: Difference between revisions

imported>Equirosa
m Updated version of latest stable channel
imported>Artturin
move contributing to its own subpage
Line 13: Line 13:


For more information on channels and how to select the appropriate channel for your purposes, see the [[Nix Channels]] article.
For more information on channels and how to select the appropriate channel for your purposes, see the [[Nix Channels]] article.
== Contributing ==
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 [[Editor Modes for Nix Files]].
=== 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, then build the package from the root of the <code>nixpkgs</code> directory with: <syntaxhighlight lang="bash">nix-build -A $yourpackage</syntaxhighlight>
The output of your build will be located under the <code>result/</code> subdirectory. Try running the freshly built binaries in <code>result/bin</code> and check that everything is OK.
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 # use git add --patch as needed
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.
==== Manage your local repository ====
Tips & tricks for managing your <code>nixpkgs</code> checkout are kept in the [[Git#Management_of_the_nixpkgs_git_repository|page on git]].
=== 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 therefore 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/maintainers/maintainer-list.nix maintainer-list.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.
=== Building all of the packages you maintain ===
<syntaxhighlight lang="bash">
nix-build maintainers/scripts/build.nix --argstr maintainer your-nick
</syntaxhighlight>


== Alternatives ==
== Alternatives ==