zmk/nix/generate-pin.rb

34 lines
781 B
Ruby
Executable file

#!/usr/bin/env ruby
# frozen_string_literal: true
require 'json'
require 'net/http'
require 'shellwords'
def get_channel_url(channel)
uri = URI("https://channels.nixos.org/#{channel}")
res = Net::HTTP.get_response(uri)
raise 'Not a redirect' unless res.is_a?(Net::HTTPRedirection)
res['location']
end
def fetch_tarball(url)
hash = `nix-prefetch-url --unpack #{Shellwords.escape(url)}`
raise 'Prefetch failed' unless $?.success?
hash.chomp
end
def generate_pin(channel)
channel_url = get_channel_url(channel)
nixexprs = "#{channel_url}/nixexprs.tar.xz"
hash = fetch_tarball(nixexprs)
{ url: nixexprs, sha256: hash }
end
def main
channel = ENV.fetch('CHANNEL', 'nixpkgs-unstable')
pin = generate_pin(channel)
puts JSON.pretty_generate(pin)
end
main