This project provides templates for creating your own collection of custom
Nix expressions, similar to what is done in nixpkgs
. It includes a default
overlay that exposes all custom
packages, facilitating their integration into other projects.
While this custom repository provides a platform for developing, integrating and
sharing your own packages, we encourage contributors to also consider submitting
their packages directly to the official nixpkgs
repository. Contributing to
nixpkgs
helps to enrich the broader Nix community by making your work
available to a wider audience and benefiting from the collective expertise of
Nix developers. However, maintaining your own repository can be advantageous for
experimental, personal, or organization-specific packages that require specific
configurations or are not yet ready for broader adoption.
- Use the
my-own-nixpkgs
templatenix flake new --template git+https://github.com/drupol/my-own-nixpkgs#my-own-nixpkgs ./my-repo
as a starting point - Begin adding packages to the
pkgs/by-name
directory. Follow the same approach as adding packages innixpkgs
(similar to RFC140). Packages added in this directory will be automatically discovered.- Create a new directory for each package.
- Inside each directory, create a
package.nix
file.
- Optionally, you can add packages directly to the
pkgs/
directory and manually update the bindings in theimports/pkgs-all.nix
file.
Use the client
template nix flake new --template git+https://github.com/drupol/my-own-nixpkgs#client ./my-nix-project
as a starting point or follow the manual steps hereunder.
To use this repository as an overlay in another project, follow these steps:
-
Add the Repository as an Input:
Add the following to your
nix
file to include this repository as an input:inputs = { my-custom-nixpkgs.url = "repo-url"; # Replace "repo-url" with the actual URL to your repository };
-
Include the Overlay in
pkgs
:When constructing
pkgs
, include the overlay as follows:pkgs = import inputs.nixpkgs { overlays = [ inputs.my-custom-nixpkgs.overlays.default ]; };
-
Use Your Packages:
Access the packages in your project like this:
buildInputs = [ pkgs.example1 pkgs.example2 ];
Refer to the dummy projects example1
and example2
for practical examples of
how packages can be structured.
- Use the continuous integration service of your choice to build and test your packages
- Add a binary cache to your repository to speed up builds and avoid recompilation using Cachix
- This project uses a flake framework, we recommend to use flake-parts
Feel free to contribute by sending pull requests. We are a usually very responsive team and we will help you going through your pull request from the beginning to the end.
For some reasons, if you can't contribute to the code and willing to help, sponsoring is a good, sound and safe way to show us some gratitude for the hours we invested in this package.
Sponsor me on Github and/or any of the contributors.