fh is a scrappy CLI for searching FlakeHub and adding new inputs to your Nix flakes.
Using fh from FlakeHub:
nix shell "https://flakehub.com/f/DeterminateSystems/fh/*.tar.gz"Note: This builds
fhlocally on your computer. Pre-built binaries aren't yet available.
To make the fh CLI readily available on a NixOS system:
{
description = "My NixOS config.";
inputs.fh.url = "https://flakehub.com/f/DeterminateSystems/fh/*.tar.gz";
inputs.nixpkgs.url = "https://flakehub.com/f/NixOS/nixpkgs/0.2305.*.tar.gz";
outputs = { nixpkgs, fh, ... } @ inputs: {
nixosConfigurations.nixos = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
modules = [
{
environment.systemPackages = [ fh.packages.x86_64-linux.default ];
}
# ... the rest of your modules here ...
];
};
};
}fh init generates a new flake.nix file for you using a combination of:
- Your responses to interactive questions
- The contents of the repository in which you run the command.
To create a flake.nix, navigate to the directory where you want to create it and run fh init (or specify a different directory using the --root option).
Respond to the prompts it provides you and at the end fh will write a flake.nix to disk.
fh init has built-in support for the following languages:
Note:
fh initoperates on a best-guess basis and is opinionated in its suggestions. It's intended less as a comprehensive flake creation solution and more as a helpful kickstarter.
fh add adds the most current release of the specified flake to your flake.nix and updates the outputs function to accept it.
This would add the current release of Nixpkgs to your flake:
fh add nixos/nixpkgsThe resulting flake.nix would look something like this:
{
description = "My new flake.";
inputs.nixpkgs.url = "https://flakehub.com/f/NixOS/nixpkgs/0.2305.490449.tar.gz";
outputs = { nixpkgs, ... } @ inputs: {
# Fill in your outputs here
};
}You can search publicly listed flakes using the fh search command and passing in a search query.
Here's an example:
fh search rust+---------------------------------------------------------------------------------+
| Flake FlakeHub URL |
+---------------------------------------------------------------------------------+
| astro/deadnix https://flakehub.com/flake/astro/deadnix |
| carlthome/ml-runtimes https://flakehub.com/flake/carlthome/ml-runtimes |
| ipetkov/crane https://flakehub.com/flake/ipetkov/crane |
| kamadorueda/alejandra https://flakehub.com/flake/kamadorueda/alejandra |
| nix-community/fenix https://flakehub.com/flake/nix-community/fenix |
| nix-community/lanzaboote https://flakehub.com/flake/nix-community/lanzaboote |
| nix-community/nix-init https://flakehub.com/flake/nix-community/nix-init |
| nix-community/nixpkgs-fmt https://flakehub.com/flake/nix-community/nixpkgs-fmt |
| nix-community/patsh https://flakehub.com/flake/nix-community/patsh |
| ryanccn/nyoom https://flakehub.com/flake/ryanccn/nyoom |
+---------------------------------------------------------------------------------+fh search supports arbitrary search strings.
An example:
fh search "rust nixos"fh list releases provides a list of a flake's releases.
fh list releases nixos/nixpkgs+------------------------------------------------------------+
| Version |
+------------------------------------------------------------+
| 0.1.428801+rev-2788904d26dda6cfa1921c5abb7a2466ffe3cb8c |
| 0.1.429057+rev-42337aad353c5efff4382d7bf99deda491459845 |
| 0.1.429304+rev-27ccd29078f974ddbdd7edc8e38c8c8ae003c877 |
| 0.1.429553+rev-5dc7114b7b256d217fe7752f1614be2514e61bb8 |
| 0.1.429868+rev-a115bb9bd56831941be3776c8a94005867f316a7 |
| ... |
+------------------------------------------------------------+fh list flakes, fh list orgs, and fh list versions enumerate flakes, organizations, and flake versions on FlakeHub, respectively.
fh list flakes+---------------------------------------------------------------------------------------------------------------+
| Flake FlakeHub URL |
+---------------------------------------------------------------------------------------------------------------+
| ajaxbits/audiobookshelf https://flakehub.com/flake/ajaxbits/audiobookshelf |
| ajaxbits/tone https://flakehub.com/flake/ajaxbits/tone |
| astro/deadnix https://flakehub.com/flake/astro/deadnix |
| ... ... |
+---------------------------------------------------------------------------------------------------------------+fh list orgs+-------------------------------------------------------------------------+
| Organization FlakeHub URL |
+-------------------------------------------------------------------------+
| ajaxbits https://flakehub.com/org/ajaxbits |
| astro https://flakehub.com/org/astro |
| ... ... |
+-------------------------------------------------------------------------+Your can list versions of a flake by passing the flake name and a version requirement to fh list versions:
fh list versions <flake> <version_req>Here's an example:
fh list versions DeterminateSystems/flake-checker "0.1.*"+------------------------------------------------------------------------------------------------------+
| Simplified version FlakeHub URL Full version |
+------------------------------------------------------------------------------------------------------+
| 0.1.0 https://flakehub.com/flake/DeterminateSystems/flake-checker/0.1.0 0.1.0 |
| 0.1.1 https://flakehub.com/flake/DeterminateSystems/flake-checker/0.1.1 0.1.1 |
| 0.1.2 https://flakehub.com/flake/DeterminateSystems/flake-checker/0.1.2 0.1.2 |
| ... ... ... |
+------------------------------------------------------------------------------------------------------+You can list flakes by label using the fh list label comand:
fh list label <label>Here's an example:
fh list label python+-------------------------------------------------------------------------------+
| Flake FlakeHub URL |
+-------------------------------------------------------------------------------+
| nix-community/poetry2nix https://flakehub.com/flake/nix-community/poetry2nix |
+-------------------------------------------------------------------------------+You can generate shell completion scripts using the fh completion command:
fh completion <shell>Here's an example:
fh completion bashThese shells are supported:
Piping fh list commands to another program emits CSV instead of the stylized table.
You can apply the --json flag to each list command to produce JSON output.
For support, email support@flakehub.com or join our Discord.