40 releases (11 breaking)

0.12.1 Nov 13, 2024
0.11.1 Oct 21, 2024
0.8.1 Jul 30, 2024
0.1.12 Mar 23, 2024

#61 in Development tools

Download history 227/week @ 2024-08-18 126/week @ 2024-08-25 205/week @ 2024-09-01 278/week @ 2024-09-08 416/week @ 2024-09-15 311/week @ 2024-09-22 238/week @ 2024-09-29 175/week @ 2024-10-06 466/week @ 2024-10-13 380/week @ 2024-10-20 147/week @ 2024-10-27 194/week @ 2024-11-03 342/week @ 2024-11-10 214/week @ 2024-11-17 213/week @ 2024-11-24 209/week @ 2024-12-01

978 downloads per month

MIT and maybe CC-PDDC

84KB
2K SLoC

Rust 1.5K SLoC // 0.0% comments Nushell 298 SLoC // 0.1% comments BASH 40 SLoC Zsh 29 SLoC JavaScript 3 SLoC

nur - a taskrunner based on nu shell

nur is a simple, yet very powerful task runner. It borrows ideas from b5 and just, but uses nu shell scripting to define the tasks. This allows for well-structured tasks while being able to use the super-powers of nu in your tasks.

Quick overview and example

nur allows you to execute tasks defined in a file called nurfile. It will look through your current working directory and all its parents to look for this file. When it has found the nurfile it will change to the directory the file was found in and then source the file into nu script. You can define tasks like this:

# Just tell anybody or the "world" hello
def "nur hello" [
    name: string = "world"  # The name to say hello to
] {
    print $"hello ($name)"
}

The important bit is that you define your tasks as subcommands for "nur". If you then execute nur hello it will print "hello world", meaning it did execute the task hello in your nurfile. You can also use nur --help to get some details on how to use nur and nur --help hello to see what this hello task accepts as parameters.

You may also pass arguments to your nur tasks, like using nur hello bob to pass "bob" as the name to the "hello" task. This supports all parameter variants normal nu scripts could also handle. You may use nur --help <task-name> to see the help for an available command.

Your tasks then can do whatever you want them to do in nu script. This allows for very structured usage of for example docker to run/manage your project needs. But it can also execute simple commands like you would normally do in your shell (like npm ci or something). nur is not tied to any programming language, packaging system or anything. As in the end the nurfile is basically a normal nu script you can put into this whatever you like.

I recommend reading working with nur to get an overview how to use nur. Also I recommend reading the nu documentation about custom commands for details on how to define nu commands (and nur tasks) and at least read through the nu quick tour to understand some basics and benefits about nu scripting.

Installing nur

You may use cargo to quickly install nur for your current user:

> cargo install nur

The nur binary will be added in $HOME/.cargo/bin (or $"($env.HOME)/.cargo/bin" in nu shell). Make sure to add this to $PATH (or $env.PATH in nu shell).

For more details see the nur installation docs. This also includes MacOS (using homebrew) and Windows (using .msi installer) installation methods.

Working with nur

nur uses a file called nurfile to define your tasks. This file is a normal nu script and may include any nur tasks defined as sub commands to "nur". nur tasks may use the normal nu command features to define required arguments, their types and more.

See the working with nur documentation for more details.

Switching to nur

Switching to nur on a large project or when having many projects can be some hassle. The recommended workflow is to create a nurfile that only calls the old task runner and then gradually convert your tasks to be rewritten as nur tasks.

To simplify this process you may use the script nurify to generate a nurfile from many existing task runners.

For more details see the switching to nur documentation.

Contributing

See the contributing documentation for more details.

Dependencies

~78–115MB
~2M SLoC