Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/shonfeder/nomad

OCaml project situation tools: wander freely to find fertile ground
https://github.com/shonfeder/nomad

Last synced: about 1 month ago
JSON representation

OCaml project situation tools: wander freely to find fertile ground

Awesome Lists containing this project

README

        

#+TITLE: Nomad: Portable Habitations in OCaml's Dunes

A tiny, minimally-functional project management tool for OCaml.

*NOTE*: nomad is not published on opam and afaik I'm the only user, so it is likely
to be a bit brittle. Contributions to improve and harden the tool would be
welcome.

* Goal

=nomad='s goal is to automate repetitive aspects of managing OCaml projects by
coordinating the [[https://github.com/ocaml/dune][dune]] and [[https://opam.ocaml.org/doc/Install.html#Using-your-distribution-39-s-package-system][opam]].

* Ethos and comparison

=nomad= differs from [[https://github.com/ocamlpro/drom][drom]] and [[https://github.com/tmattio/spin][spin]] in its narrow focus and minimal ethos. I.e.:

- Just automate the most repetitive flows, but still expect users to use opam
and dune.
- Don't generate boilerplate and templates.
- Don't introduce a bunch of complex features.
- sexp is perfect: don't introduce new abstraction layers in the configuration format of the week.

* Install

Assuming you have installed [[https://opam.ocaml.org/doc/Install.html#Using-your-distribution-39-s-package-system][opam]] and [[https://github.com/ocaml/dune#installation][dune]]:

#+begin_src sh
opam pin [email protected]:shonfeder/nomad.git
#+end_src

* Usage

** Create a new project to build a binary

If you project's name is =dingus=

#+BEGIN_SRC sh
nomad new dingus
#+END_SRC

And a scaffold for building the dingus executable will be created in the
directory =./dingus=.

** Create a new project to build a library

If you project's name is =dingus=

#+BEGIN_SRC sh
nomad new --lib dingus
#+END_SRC

And a scaffold for building the dingus library will be created in the
directory =./dingus=.

** Add a dependency to your project

Suppose we're building a GUI with [[https://github.com/sanette/bogue][bogue]]. We can add the dependency with:

#+begin_src
nomad add bogue
#+end_src

** Then we can sync all the dependencies of a project

From the project root

#+begin_src
nomad sync
#+end_src

And the dependencies declared in your project's =dune-project= will be synced
using opam.

** Examples

For more examples of usage, see [[file:test/README.org][test/README.org]].

* Plans and ideas

See [[https://github.com/shonfeder/nomad/blob/master/project.org][project.org]].