# Pinch

PIN CHannels - a simple drop-in replacement for `nix-channel --update`.

Example usage, being invoked on the example "channels" file included here:

    $ python3 pinch.py pin channels
    $ python3 pinch.py update channels


The first "pin" command will add these fields to the file:

     [nixos]
     channel_url = https://channels.nixos.org/nixos-20.03
     git_repo = https://github.com/NixOS/nixpkgs.git
     git_ref = nixos-20.03
    +release_name = nixos-20.03beta1155.29eddfc36d7
    +tarball_url = https://releases.nixos.org/nixos/20.03/nixos-20.03beta1155.29eddfc36d7/nixexprs.tar.xz
    +tarball_sha256 = 9c1d182af2af64e5e8799e256a4a6dc1fed324ba06cb5f76c938dc63b64f0959
    +git_revision = 29eddfc36d720dcc4822581175217543b387b1e8

     [nixos-hardware]
     git_repo = https://github.com/NixOS/nixos-hardware.git
     git_ref = master
    +release_name = nixos-hardware.git-1585241157-edb7199b5c4
    +git_revision = edb7199b5c4f1db34a7253d4cabf6cf690521a92

The second "update" command applies these changes to your nix channels, like `nix-channel --update` does.

Advantages over nix-channel:

    * Deploy the exact same channel content to multiple machines.
    * Store your pin file in revision control for more powerful rollback mechanism than `nix-channel --rollback`.
    * Chanel contents are verified by hash before being installed.