# nix-exprs
[](https://garnix.io)
## how to use
### enabling the binary cache
all packages are built with [garnix](https://garnix.io/), and cached on their servers. you can use this
yourself by following the instructions [here](https://garnix.io/docs/caching). i would also recommend
[donating](https://opencollective.com/garnix_io) if you can!
example
```nix
{pkgs, ...}: {
nix.settings = {
trusted-substituters = ["https://cache.garnix.io"];
trusted-public-keys = ["cache.garnix.io:CTFPyKSLcx5RMJKfLo5EEPUObbA78b0YQ2DTCJXqr9g="];
};
}
```
### flake-based
flakes are the primary supported method to use this repository - and in my opinion, can offer a much
nicer user experience :)
#### installing packages
you can add this repository as an input, and optionally override the nixpkgs input to build against
your own revision of nixpkgs
```nix
{
inputs = {
nixpkgs.url = "nixpkgs/nixos-unstable";
darwin = {
url = "github:LnL7/nix-darwin";
inputs.nixpkgs.follows = "nixpkgs";
};
getchoo = {
url = "github:getchoo/nix-exprs";
# this will break reproducibility, but lower the instances of nixpkgs
# in flake.lock and possibly duplicated dependencies
# inputs.nixpkgs.follows = "nixpkgs";
};
};
outputs = {
nixpkgs,
getchoo,
...
}: {
nixosConfigurations.hostname = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
modules = [
./configuration.nix
({pkgs, ...}: {
environment.systemPackages = with getchoo.packages.${pkgs.system}; [
treefetch
];
})
];
};
};
}
```
using the overlay
the overlay (though not preferred for the sake of reproducibility) is also an
option for those who want to avoid the verbosity of installing packages directly,
a "plug-n-play" solution to using the packages, and/or a reduction in duplicated dependencies.
```nix
{
inputs = {
nixpkgs.url = "nixpkgs/nixos-unstable";
darwin = {
url = "github:LnL7/nix-darwin";
inputs.nixpkgs.follows = "nixpkgs";
};
getchoo = {
url = "github:getchoo/nix-exprs";
# this should probably be used in this scenario as reproducibility is
# already broken by using an overlay
inputs.nixpkgs.follows = "nixpkgs";
};
};
outputs = {
nixpkgs,
getchoo,
...
}: {
nixosConfigurations.hostname = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
modules = [
./configuration.nix
({pkgs, ...}: {
nixpkgs.overlays = [getchoo.overlays.default];
environment.systemPackages = with pkgs; [
treefetch
];
})
];
};
};
}
```
#### ad-hoc installation
this flake can also be used in the base nix package manager!
> **Note**
> for nixos/nix-darwin users, `nixpkgs.overlays` does not configure
> overlays for tools such as `nix(-)run`, `nix(-)shell`, etc. so this
> will also be required for you
the best way to make this overlay available for you is to
add it to your flake registry like so.
```sh
nix registry add getchoo github:getchoo/nix-exprs
nix profile install getchoo#treefetch
nix shell getchoo#cfspeedtest
```
### standard nix
this repository uses [flake-compat](https://github.com/edolstra/flake-compat) to allow for non-flake environments to use the packages provided.
there are two ways to do this: through channels or `fetchTarball` (or similar functions). i personally recommend
channels as they are the easiest to update - though if you want to pin a specific revision of this repository,
`fetchTarball` would probably be a better alternative.
to add the channel, run:
```sh
nix-channel --add https://github.com/getchoo/nix-exprs/archive/main.tar.gz getchoo
nix-channel --update getchoo
```
to use `fetchTarball`, please view the [documentation](https://nixos.org/manual/nix/stable/language/builtins.html?highlight=fetchtarball#builtins-fetchTarball) as there are a fair number of ways to use it.
at it's most basic, you could use this:
```nix
{
getchoo = import (builtins.fetchTarball "https://github.com/getchoo/nix-exprs/archive/main.tar.gz");
}
```
#### installing packages
```nix
{pkgs, ...}: let
# if you use channels
getchoo = import ;
# or if you use `fetchTarball`
# getchoo = import (builtins.fetchTarball "https://github.com/getchoo/nix-exprs/archive/main.tar.gz");
in {
environment.systemPackages = [getchoo.packages.${pkgs.system}.treefetch];
}
```
with the overlay
```nix
{pkgs, ...}: let
# if you use channels
getchoo = import ;
# or if you use `fetchTarball`
# getchoo = import (builtins.fetchTarball "https://github.com/getchoo/nix-exprs/archive/main.tar.gz");
in {
nixpkgs.overlays = [getchoo.overlays.default];
environment.systemPackages = [pkgs.treefetch];
}
```
#### ad-hoc installation
there are two ways to use ad-hoc commands: through channels or `overlays.nix`.
channels are again then the preferred method here, where once it's added it can be used
like so:
```sh
nix-env -f '' -iA getchoo.packages.x86_64-linux.treefetch # replace x86_64-linux with your system
nix-shell '' -p treefetch
```
overlays.nix
for those who don't want to use this flake's revision of nixpkgs - or have the verbosity
of the `flake-compat` provided commands - `overlays.nix` is a good option.
in `~/.config/nixpkgs/overlays.nix`:
```nix
let
# if you use channels
getchoo = import ;
# or if you use `fetchTarball`
# getchoo = import (builtins.fetchTarball "https://github.com/getchoo/nix-exprs/archive/main.tar.gz");
in [getchoo.overlays.default]
```