This document is for people who want to contribute to NGIpkgs. This involves interacting with changes proposed as pull requests on GitHub to the NGIpkgs repository (which you're in right now).
This document assumes that you already know:
In addition, a GitHub account is required, which you can create on the GitHub sign-up page.
Packagers are encouraged to contribute Nix packages of NGI projects to Nixpkgs, instead of to this repository. However, there may be reasons speaking against that, including:
- Making the package available more quickly.
- The package is not a good candidate for Nixpkgs.
- The package is a good candidate for Nixpkgs, but no one is willing to be a maintainer 😢.
In any case, it is encouraged to create a pull request to Nixpkgs, then to this repository, with a comment linking to the Nixpkgs pull request in the description and the Nix expressions.
When contributing documentation, do not split lines at arbitrary character lengths. Instead, write one sentence per line, as this makes it easier to review changes.
-
Set up a local version of NGIpkgs. If you don't have write access to NGIpkgs, create a fork of the repository and clone it.
git clone https://github.com/some-owner/ngipkgs.git cd ngipkgs
-
Create and switch to a new Git branch.
git checkout -b some-branch
-
To add a package, start by creating a
package.nix
file in the package directorypkgs/by-name/some-package
, wheresome-package
will be the package attribute name.mkdir -p pkgs/by-name/some-package $EDITOR pkgs/by-name/some-package/package.nix
Make sure to:
-
Test the package on
x86_64-linux
.git add pkgs/by-name/some-package nix build .#some-package
-
Format the Nix expressions with nix fmt.
nix fmt pkgs/by-name/some-package
An existing example is libgnunetchat.
-
-
To add a NixOS service module, start by creating a
default.nix
file in the directoryprojects/some-project
wheresome-project
is the project name corresponding to the last URL component in the NLnet project listing.mkdir -p projects/some-project $EDITOR projects/some-project/default.nix
Make sure to:
-
Add the module options in
service.nix
, and reference that file indefault.nix
. For example:nixos.modules = { services.some-project = ./service.nix; };
The module will then be accessible from
nixosModules.services.some-project
. -
Add the module tests in
test.nix
, or under a test directory, and reference that file indefault.nix
. For example:nixos.tests.some-test = import ./test.nix args;
The module tests will then be accessible from
nixosTests.some-project
. -
Test the module on
x86_64-linux
.git add pkgs/by-name/some-package projects/some-project nix build .#some-package.passthru.tests.some-test.driverInteractive ./result/bin/nixos-test-driver # Start a shell # Once in the spawned shell, start a VM that will execute the tests start_all() # Run the VM
-
Format the Nix expressions with nix fmt.
nix fmt projects/some-project
An existing example is Kbin.
-
-
Commit the changes and push the commits.
git commit -m "some-message" git push --set-upstream origin some-branch
-
Create a pull request to NGIpkgs. Respond to review comments, potential CI failures, and potential merge conflicts by updating the pull request. Always keep the pull request in a mergeable state.