Skip to content

Latest commit

 

History

History
202 lines (146 loc) · 5.79 KB

README.md

File metadata and controls

202 lines (146 loc) · 5.79 KB

Snowfall Drift

Nix Flakes Ready Built With Snowfall

  

Update Nix Flake package sources.

Installation

Nix Profile

You can install this package imperatively with the following command.

nix profile install github:snowfallorg/drift

Nix Configuration

You can install this package by adding it as an input to your Nix Flake.

{
	description = "My system flake";

	inputs = {
		nixpkgs.url = "github:nixos/nixpkgs/nixos-23.05";
		unstable.url = "github:nixos/nixpkgs/nixos-unstable";

		# Snowfall Lib is not required, but will make configuration easier for you.
		snowfall-lib = {
			url = "github:snowfallorg/lib";
			inputs.nixpkgs.follows = "nixpkgs";
		};

		snowfall-drift = {
			url = "github:snowfallorg/drift";
			inputs.nixpkgs.follows = "nixpkgs";
		};
	};

	outputs = inputs:
		inputs.snowfall-lib.mkFlake {
			inherit inputs;
			src = ./.;

			overlays = with inputs; [
				# Use the default overlay provided by this flake.
				snowfall-drift.overlays.default

				# There is also a named overlay, though the output is the same.
				snowfall-drift.overlays."package/drift"
			];
		};
}

If you've added the overlay from this flake, then in your system configuration you can add the snowfallorg.drift package.

{ pkgs }:

{
	environment.systemPackages = with pkgs; [
		snowfallorg.drift
	];
}

Usage

Add an update script

Drift processes packages that contain an update attribute. To add an update script, specify a script derivation in the package's passthru.

# packages/my-package/default.nix
{ pkgs, ... }:
let
    name = "my-package";
    version = "1.0.0";
    hash = "sha256-hash-here";
in
pkgs.stdenv.mkDerivation {
    inherit name version;

    src = pkgs.fetchFromGitHub {
        owner = "my-org";
        repo = "my-repo";
        rev = "v${version}";
        sha256 = hash;
    };

    passthru.update = pkgs.writeShellScriptBin "update-my-package" ''
        set -euo pipefail

        latest="$(${pkgs.curl}/bin/curl -s "https://api.github.com/repos/my-org/my-repo/releases?per_page=1" | ${pkgs.jq}/bin/jq -r ".[0].tag_name" | ${pkgs.gnused}/bin/sed 's/^v//')"

        drift rewrite --auto-hash --new-version "$latest"
    '';
}

Drift is made available to update scripts in addition to some environment variables:

Name Description
DRIFT_NAME The name of the package.
DRIFT_FILE The path to the package's Nix file if available.
DRIFT_CURRENT_VERSION The current version of the package.
DRIFT_CURRENT_HASH The current hash of the package.

drift update

DESCRIPTION

    Update a package.

USAGE

    $ drift update [...package] [options]

OPTIONS

    --flake, -f               The flake to get package information from
    --src                     The source attribute to use for hash information

    --help, -h                Show this help message
    --verbose, -v             Set logging verbosity

EXAMPLE

    $ # Update all packages with update scripts.
    $ drift update --flake /my/flake/dir

    $ # Update specific packages with update scripts.
    $ drift update --flake /my/flake/dir my-package my-other-package

    $ # Update using the hash of a specific package attribute.
    $ drift update --flake /my/flake/dir --src my-upstream-src my-package`

drift rewrite

DESCRIPTION

    Replace a package's source version and hash.

USAGE

    $ drift rewrite [...package] [options]

OPTIONS

    --file                    The file to rewrite (defaults to package file with Snowfall Lib)
    --name                    The name of the package output (defaults to current package)
    --flake                   The flake to get package information from (defaults to current flake)
    --current-version         The current version of the package (defaults to current version)
    --new-version             The current version of the package
    --current-hash            The current hash of the package
    --new-hash                The current hash of the package
    --auto-hash               Automatically calculate the new hash
    --src                     The source attribute to use for hash information

    --help, -h                Show this help message
    --verbose, -v             Set logging verbosity

EXAMPLE

    > Note: If you are using Snowfall Lib then you do not need to specify "--file".

    $ # Update the version of a package.
    $ drift rewrite --file ./packages/my-package.nix --current-version $DRIFT_CURRENT_VERSION --new-version 10.0.0

    $ # Update the hash of a package.
    $ drift rewrite --file ./packages/my-package.nix --current-hash $DRIFT_CURRENT_HASH --new-hash my-hash-here

    $ # Automatically update the hash of a package using its new version.
    $ drift rewrite --file ./packages/my-package.nix --new-version 10.0.0 --auto-hash

    $ # Calculate hashes using a different source attribute.
    $ drift rewrite --file ./packages/my-package.nix --new-version 10.0.0 --auto-hash --src my-upstream-src

    $ # Update arbitrary text.
    $ drift rewrite --file ./packages/my-package.nix --from my-text --to my-new-text