Nixpkgs: Difference between revisions
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 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 | 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. | ||
== Alternatives == | == Alternatives == | ||