update-walker is an imperative semiautomated update helper. It runs the X.upstream file to find the freshest version of the package in the specified upstream source and updates the corresponding X.nix file. The simplest available commands: url: set the upstream source list URL equal to $1; the default is meta.downloadPage with meta.homepage fallback dl_url_re: set the regular expression used to select download links to $1; the default is meta.downloadURLRegexp or '[.]tar[.]([^./])+\$' if it is not set target: specify target expression; default is to replace .upstream extension with .nix extension name: specify the derivation name; default is the basename of the dirname of the .upstream file attribute_name: specify the attribute name to evaluate for getting the current version from meta.version; default is to use the derivation name minimize_overwrite: set config options that mean that only version= and sha256= have to be replaced; the default is to regenerate a full upstream description block with url, name, version, hash etc. A lot of packages can be updated in a pseudo-declarative style using only the commands from the previous paragraph. Some packages do not need any non-default settings, in these case just setting meta.updateWalker to true is enough, you can run update-walker directly on the .nix file afterwards. In this case minimize_overwrite it implied unless meta.fullRegenerate is set. The packages that require more fine-grained control than the described options allow, you need to take into account the default control flow of the tool. First, the definitions from update-walker script and additional definitions from update-walker-service-specific.sh are loaded. Then the config is executed as a shell script. Some of the commands it can use do remember whether they have been used. Afterwards the following steps happen: attribute_name is set to name unless it has been already set meta.version is read from the NixPkgs package called attribute_name download URL regexp is set to default unless it has been already set in the updater script the download page URL gets set to default value unless it has been set previously if the action of getting the download page and choosing the freshest link by version has not yet been taken, it happens if the version has not yet been extracted from the URL, it gets extracted target nix expression to update gets set to the default value unless it has been set explicitly if the URL version is fresher than the packaged version, the new file gets downloaded and its hash is calculated do_overwrite function is called; the default calculates a big upstream data block and puts it after the '# Generated upstream information' marker (the marker can be changed by the command marker) If the update needs some special logic, it is put into the updater script and the corresponding steps are skipped because the needed action has already been performed. For example: minimize_overwrite is exactly the same as do_overwrite() { do_overwrite_just_version; } redefinition. You can do a more complex do_overwrite redifinition, if needed. It can probably use ensure_hash to download the source and calculate the hash and set_var_value. set_var_value alters the $3-th instance of assigning the $1 name in the expression to the value $2. $3 defaults to 1. It can modify $4 instead of the current target, it can put the value without quotes if $5 is 1. Typical steps include: ensure_choice: download current URL and find the freshest version link on the page, it is now the new URL ensure_hash: download current URL and calculate the source package hash ensure_version: extract version from the URL SF_redirect: replace the current URL with a SourceForge.net mirror:// URL SF_version_dir: assume SourceForge.net layout and choose the freshest version-named subdirectory in the file catalog; you can optionally specify $1 as a directory name regexp (digits and periods will be required after it) SF_version_tarball: assume SourceForge.net layout and choose the freshest tarball download link version: apply replacement of $1 with $2 (extended regexp format) to extract the version from URL version_link: choose the freshest versioned link, $1 is the regexp of acceptable links