#!/usr/bin/env nix-shell
#! nix-shell -i oil -p coreutils curl jq

# Generate the config with Duckduckgo bangs.
# Very useful if you really want just to search as you would in Duckduckgo.

const bang_url = "${BANGS_URL:-https://duckduckgo.com/bang.js}"
const config = {}

# We still have to use some external tools like jq since Oil doesn't support nested objects yet.
# For more information, see https://github.com/oilshell/oil/issues/741
curl --silent --location $bang_url | jq 'sort_by(.t) | .[]' --raw-output --compact-output --sort-keys | while read --line {
    write -- $_line | json read :bang
    var _data = {}
    var trigger = bang['t']

    setvar _data['name'] = bang['s']
    setvar _data['url'] = bang['u']
    setvar config[trigger] = _data
}

json write :config