# nix-exprs [![built with garnix](https://img.shields.io/endpoint.svg?url=https%3A%2F%2Fgarnix.io%2Fapi%2Fbadges%2Fgetchoo%2Fnix-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] ```