{"id":13737229,"url":"https://github.com/disruptek/nimph","last_synced_at":"2025-07-17T18:04:47.568Z","repository":{"id":36518701,"uuid":"218347685","full_name":"disruptek/nimph","owner":"disruptek","description":"Nim package hierarchy manager from the future 🧚","archived":false,"fork":false,"pushed_at":"2024-02-07T04:04:14.000Z","size":1088,"stargazers_count":158,"open_issues_count":44,"forks_count":9,"subscribers_count":6,"default_branch":"master","last_synced_at":"2025-04-09T16:18:20.662Z","etag":null,"topics":["handler","hierarchy","manager","modules","nim","package","packages","projects"],"latest_commit_sha":null,"homepage":"","language":"Nim","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/disruptek.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-10-29T17:44:16.000Z","updated_at":"2025-01-25T00:16:44.000Z","dependencies_parsed_at":"2023-01-17T02:15:29.771Z","dependency_job_id":"9b5e61fb-41f3-4c1e-8fa2-b7544c806ce4","html_url":"https://github.com/disruptek/nimph","commit_stats":null,"previous_names":[],"tags_count":133,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/disruptek%2Fnimph","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/disruptek%2Fnimph/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/disruptek%2Fnimph/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/disruptek%2Fnimph/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/disruptek","download_url":"https://codeload.github.com/disruptek/nimph/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248065281,"owners_count":21041872,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["handler","hierarchy","manager","modules","nim","package","packages","projects"],"created_at":"2024-08-03T03:01:38.080Z","updated_at":"2025-04-09T16:18:29.582Z","avatar_url":"https://github.com/disruptek.png","language":"Nim","readme":"# nimph\n\n[![Test Matrix](https://github.com/disruptek/nimph/workflows/CI/badge.svg)](https://github.com/disruptek/nimph/actions?query=workflow%3ACI)\n[![GitHub release (latest by date)](https://img.shields.io/github/v/release/disruptek/nimph?style=flat)](https://github.com/disruptek/nimph/releases/latest)\n![Minimum supported Nim version](https://img.shields.io/badge/nim-1.2.14%2B-informational?style=flat\u0026logo=nim)\n![Maximum supported Nim version](https://img.shields.io/badge/nim-1.6.7%2B-informational?style=flat\u0026logo=nim)\n[![License](https://img.shields.io/github/license/disruptek/nimph?style=flat)](#license)\n\nnim package hierarchy manager from the future\n\nor: _How I Learned to Stop Worrying and Love the Search Path_\n\n## Features\n\n- truly path-agnostic dependencies\n- native git integration for speed\n- github api integration for comfort\n- reproducible builds via lockfiles\n- immutable cloud-based distributions\n- wildcard, tilde, and caret semver\n- absolutely zero configuration\n- total interoperability with Nimble\n- full-featured choosenim replacement\n\n## Usage\n\nYou can run `nimph` from anywhere in your project tree; it will simply search\nupwards until it finds a `.nimble` file and act as if you ran it there.\n\nMost operations do require that you be within a project, but `nimph` is\nflexible enough to operate on local dependencies, global packages, and anything\nin-between. You can run it on any package, anywhere, and it will provide useful\noutput (and optional repair) of the environment it finds itself in.\n\n- [Searching for New Nim Packages](https://github.com/disruptek/nimph#search)\n- [Adding Packages to the Environment](https://github.com/disruptek/nimph#clone)\n- [Checking the Environment for Errors](https://github.com/disruptek/nimph#doctor)\n- [Quickly Forking an Installed Package](https://github.com/disruptek/nimph#fork)\n- [Finding a Path via Nim Import Name](https://github.com/disruptek/nimph#path)\n- [Locking the Dependency Tree by Name](https://github.com/disruptek/nimph#lock)\n- [Specifying Arbitrary Package Versions](https://github.com/disruptek/nimph#roll)\n- [Upgrading Dependencies Automatically](https://github.com/disruptek/nimph#upgrade)\n- [Downgrading Dependencies Automatically](https://github.com/disruptek/nimph#downgrade)\n- [Cutting New Release Versions+Tags](https://github.com/disruptek/nimph#bump)\n- [Adding Any Missing Tags Automatically](https://github.com/disruptek/nimph#tag)\n- [Running Commands on All Dependencies](https://github.com/disruptek/nimph#run)\n- [Outputting the Dependency Graph](https://github.com/disruptek/nimph#graph)\n- [Git Subcommand Auto-Integration](https://github.com/disruptek/nimph#git-subcommands)\n- [Nimble Subcommand Auto-Integration](https://github.com/disruptek/nimph#nimble-subcommands)\n- [Tweaking Nimph Behavior Constants](https://github.com/disruptek/nimph#hacking)\n- [Using `choosenim` to Select Nim Toolchains](https://github.com/disruptek/nimph#choose-nimph-choose-nim)\n- [Nimph Module Documentation](https://github.com/disruptek/nimph#documentation)\n\n## Demonstration\n\nThis is a demo screencast of using Nimph to setup a project for development.\nStarting with nothing more than the project's repository, we'll...\n\n1. show the `bot.nimble` that specifies varied dependencies\n1. show the `nim.cfg` that specifies compilation options\n1. edit the `nim.cfg` to configure a directory to hold local dependencies\n1. create a `deps` directory to hold those packages\n1. run `nimph` to evaluate the state of the environment -- verdict: 😦\n1. run `nimph doctor` to converge the environment to our specifications\n1. run `nimph` to confirm the environment state -- verdict: 😊\n1. show the `nim.cfg` to reveal any changes made by `nimph doctor`\n\n[![asciicast](https://asciinema.org/a/aoDAm39yjoKenepl15L3AyfzN.svg)](https://asciinema.org/a/aoDAm39yjoKenepl15L3AyfzN)\n\n## Installation\n\nA `bootstrap-nonimble.sh` script is provided which retrieves the dependencies\nand builds Nimph without requiring `nimble`.\n\n### Windows\n\nI no longer test Windows via the CI because I have no way to debug it.\nThat said, Windows builds may work just fine for you using the older\n`bootstrap.ps1` which relies upon `nimble` to install dependencies.\n\n### OS X\n\nI no longer test OS X via the CI because I cannot be bothered to debug\nlibgit2/libssh behavior there.  The tests for nim-1.2 do pass, however.\n\n### GitHub Integration\n\nYou may want to [create a new GitHub personal access token\nhere](https://github.com/settings/tokens) and then add it to your environment\nas `NIMPH_TOKEN` or `GITHUB_TOKEN`.\n\nIf you skip this step, Nimph will try to use a Nimble token for **search**es,\nand it will also try to read any `hub` or `ghi` credentials.  Notably, the\n**fork** subcommand will not work without adequate scope authorization.\n\n## Subcommand Usage\n\n### Search\n\nThe `search` subcommand is used to query GitHub for\npackages. Arguments should match [GitHub search syntax for\nrepositories](https://help.github.com/en/github/searching-for-information-on-github/searching-for-repositories) and for convenience, a `language:nim`\nqualifier will be included.\n\nResults are output in **increasing order of relevance** to reduce scrolling;\n_the last result is the best_.\n\n```\n$ nimph search pegs\n\nhttps://github.com/GlenHertz/peg                                  pushed 2017-11-19\n  645 kb            0 issues        0 stars         0 forks      created 2017-11-18\n  PEG version of grep\n\nhttps://github.com/lguzzon-NIM/simplePEG                          pushed 2019-09-05\n   82 kb            0 issues        0 stars         0 forks      created 2017-09-05\n  Simple Peg\n\nhttps://github.com/zevv/npeg                                      pushed 2019-11-27\n 9125 kb            2 issues       66 stars         2 forks      created 2019-03-08\n  PEGs for Nim, another take\n```\n\n### Clone\n\nThe `clone` subcommand performs git clones to add packages to your environment.\nPass this subcommand some GitHub search syntax and it will download the best\nmatching package, or you can supply a URL directly.  Local URLs are fine, too.\n\nWhere the package ends up is a function of your existing compiler settings\nas recorded in relevant `nim.cfg` files; we'll search all `--nimblePath`\nstatements, but according to a convention also adopted by Nimble...\n\n_The last specified --nimblePath, as processed by the `nim.cfg` files, is the\n\"default\" for the purposes of new package additions._\n\n```\n$ nimph clone npeg\n👭cloning git://github.com/zevv/npeg.git...\n👌cloned git://github.com/zevv/npeg.git\n```\n\n### Doctor\n\nThe interesting action happens in the `doctor` subcommand.  When run without any\narguments, `nimph` effectively runs the `doctor` with a `--dry-run` option, to\nperform non-destructive evaluation of your environment and report any issues.\nIn this mode, logging is elevated to report package versions and a summary of\ntheir last commit or tag.\n\n```\n$ nimph\n✔️  8a7114          bot   cleanups\n✔️  775047      swayipc   we can remove this notice now\n✔️  v0.4.5         nesm   Version 0.4.5\n✔️  5186f4       cligen   Add a test program and update release notes as per last commit to fix https://github.com/c-blake/cligen/issues/120\n✔️  c7ba0f         dbus   Merge pull request #3 from SolitudeSF/case\n✔️  57f244        c2nim   new option: annotate procs with `{.noconv.}`\n✔️  54ed41         npeg   Added section about non-consuming operators and captures to the README. Fixes #17\n✔️  183eaa    unittest2   remove redundant import\n✔️  v0.3.0          irc   v0.3.0\n✔️  fe276f         rest   add generated docs\n✔️  5d72a4      foreach   clarify example\n✔️  5493b2           xs   add some docs about google\n✔️   1.0.1      cutelog   ladybug easier to see\n✔️  9d75fe         bump   update docs\n✔️   1.0.2       github   fix nimble again\n✔️  6830ae        nimph   add asciinema demo\n✔️  b6b8d5     compiler   [backport] always set `fileInfoIdx.isKnownFile` (#12773)\n✔️  v0.3.3     nimterop   v0.3.3\n✔️ v0.13.0        regex   bump 0.13.0 (#52)\n✔️  2afc38    unicodedb   improve decomposition performance (#11)\n✔️  v0.5.1  unicodeplus   Fix ascii range (#2)\n✔️  v0.1.1      nimgit2   v0.1.1\n✔️  v0.5.0    parsetoml   Update to version 0.5.0\n👌bot version 0.0.11 lookin' good\n```\nWhen run as `nimph doctor`, any problems discovered will be fixed, if possible.\nThis includes cloning missing packages for which we can determine a URL,\nadjusting path settings in the project's `nim.cfg`, and similar housekeeping.\n\n```\n$ nimph doctor\n👌bot version 0.0.11 lookin' good\n```\n\n### Fork\n\nThe `fork` subcommand is used to fork an installed dependency in your GitHub\naccount and add a new git `origin` remote pointing at your new fork. The\noriginal `origin` remote is renamed to `upstream` by default. These constants\nmay be easily changed; see **Hacking** below.\n\nThis allows you to quickly move from merely testing a package to improving it\nand sharing your work upstream.\n\n```\n$ nimph fork npeg\n🍴forking npeg-#54ed418e80f1e1b14133ed383b9c585b320a66cf\n🔱https://github.com/disruptek/npeg\n```\n\n### Path\n\nThe `path` subcommand is used to retrieve the filesystem path to a package\ngiven the Nim symbol you might use to import it. For consistency, the package\nmust be installed.\n\nIn contrast to Nimble, you can specify multiple symbols to search for, and the\nsymbols are matched without regard to underscores or capitalization.\n```\n$ nimph path nimterop irc\n/home/adavidoff/git/bot/deps/pkgs/nimterop-#v0.3.3\n/home/adavidoff/git/bot/deps/pkgs/irc-#v0.3.0\n```\n\nIf you want to limit your search to packages that are part of your project's\ndependency tree, add the `--strict` switch:\n\n```\n$ nimph path coco\n/home/adavidoff/git/nimph/deps/pkgs/coco-#head\n\n$ nimph path --strict coco\ncouldn't find a dependency importable as `coco`\n```\n\nIt's useful to create a shell function to jump into dependency directories so\nyou can quickly hack at them.\n\n```bash\n#!/bin/bash\nfunction goto { pushd `nimph path $1`; }\n```\n\nor\n\n```fish\n#!/bin/fish\nfunction goto; pushd (nimph path $argv); end\n```\n\n### Lock\n\nThe `lock` subcommand writes the current dependency tree to a JSON file; see\n**Hacking** below to customize its name. You pass arguments to give this record\na name that you can use to retrieve the dependency tree later. Multiple such\n_lockfiles_ may be cached in a single file.\n\n```\n$ nimph lock works with latest npeg\n👌locked nimph-#0.0.26 as `works with latest npeg`\n```\n\n### Unlock\n\nThe `unlock` subcommand reads a dependency tree previously saved with `lock`\nand adjusts the environment to match, installing any missing dependencies and\nrolling repositories to the versions that were recorded previously.\n\n```\n$ nimph unlock goats\nunsafe lock of `regex` for regex\u003e=0.10.0 as #ff6ab8297c72f30e4da34daa9e8a60075ce8df7b\n👭cloning https://github.com/zevv/npeg...\nrolled to #e3243f6ff2d05290f9c6f1e3d3f1c725091d60ab to meet git://github.com/disruptek/cutelog.git##1.1.1\n```\n\n### Roll\n\nThe `roll` subcommand lets you supply arbitrary requirements which are\nevaluated exactly as if they appeared in your package specification file. For\nshell escaping reasons, each such requirement should be a quoted string.\n\n```\n$ nimph roll \"nimterop == 0.3.4\"\nrolled to #v0.3.4 to meet nimterop\u003e=0.3.3\n👌nimph is lookin' good\n```\n\nNimph will ensure that the new requirement doesn't break any existing\nrequirements of the project or any of its dependencies.\n\n```\n$ nimph roll \"nimterop \u003e 6\"\nnimterop*6 unmet by nimterop-#v0.3.4\nfailed to fix all dependencies\n👎nimph is not where you want it\n```\n\nAs Nimble does not yet support caret (`^`), tilde (`~`), or wildcard (`*`),\n`roll` is the only way to experiment with these operators in requirements.\n\n```\n$ nimph roll \"nimterop 0.3.*\"\nrolled to #v0.3.6 to meet nimterop\u003e=0.3.3\n👌nimph is lookin' good\n```\n\nYou can also use `roll` to resolve packages that are named in Nimble's official\npackage directory but aren't hosted on GitHub.\n\n```\n$ nimph roll nesm\n👭cloning https://gitlab.com/xomachine/NESM.git...\nrolled to #v0.4.5 to meet nesm**\n👌xs is lookin' good\n```\n\n### Upgrade\n\nThe `upgrade` subcommand resolves the project's dependencies and attempts to\nupgrade any git clones to the latest release tag that matches the project's\nrequirements.\n\nThe `outdated` subcommand is an alias equivalent to `upgrade --dry-run`:\n\n```\n$ nimph outdated\nwould upgrade bump from 1.8.16 to 1.8.17\nwould upgrade nimph from 0.3.2 to 0.4.1\nwould upgrade nimterop from 0.3.3 to v0.3.5\n👎bot is not where you want it\n```\n\nUpgrade individual packages by specifying the _import name_.\n\n```\n$ nimph upgrade swayipc\nrolled swayipc from 3.1.0 to 3.1.3\nthe latest swayipc release of 3.1.4 is masked\n👌bot is up-to-date\n```\n\nUpgrade all dependencies at once by omitting any module names.\n\n```\n$ nimph upgrade\nthe latest swayipc release of 3.1.4 is masked\nrolled foreach from 1.0.0 to 1.0.2\nrolled cutelog from 1.0.1 to 1.1.1\nrolled bump from 1.8.11 to 1.8.16\nrolled github from 1.0.1 to 1.0.2\nrolled nimph from 0.1.0 to 0.2.1\nrolled regex from 0.10.0 to v0.13.0\nrolled unicodedb from 0.6.0 to v0.7.2\n👌bot is up-to-date\n```\n\n### Downgrade\n\nThe `downgrade` subcommand performs the opposite action to the upgrade\nsubcommand.\n\n```\n$ nimph downgrade\nrolled swayipc from 3.1.4 to 3.1.0\nrolled cligen from 0.9.41 to v0.9.40\nrolled foreach from 1.0.2 to 1.0.0\nrolled cutelog from 1.1.1 to 1.0.1\nrolled bump from 1.8.16 to 1.8.11\nrolled github from 1.0.2 to 1.0.1\nrolled nimph from 0.3.2 to 0.3.0\nrolled regex from 0.13.0 to v0.10.0\nrolled unicodeplus from 0.5.1 to v0.5.0\n👌bot is lookin' good\n```\n\n### Bump\n\nThe `bump` tool is included as a dependency; it provides easy version and tag incrementing.\n\n```\n$ bump fixed a bug\n🎉1.0.3: fixed a bug\n🍻bumped\n```\n\nFor complete `bump` documentation, see https://github.com/disruptek/bump\n\n### Tag\n\nThe `tag` subcommand operates on a clean project and will roll the repository\nas necessary to examine any changes to your package configuration, noting any\ncommits that:\n\n- introduced a new version of the package but aren't pointed to by a tag, _and_\n- introduced a new version for which there exists no tag parsable as that version\n\n```\n$ nimph tag --dry-run --log-level=lvlInfo\nbump is missing a tag for version 1.1.0\nversion 1.1.0 arrived in commit-009d45a977a688d22a9f1b14a21b6bd1a064760e\nuse the `tag` subcommand to add missing tags\nrun without --dry-run to fix these\n```\n\nThe above conditions suggest that if you don't want to use this particular\ncommit for your tag, you can simply point the tag at a different commit; Nimph\nwon't change it on you.\n\n```\n$ git tag -a \"re-release_of_1.1.0_just_in_time_for_the_holidays\" 0abe7a9f0b5a05f2dd709f2b120805cc0cdd9668\n```\n\nAlternatively, if you don't want a version tag to be used by package managers,\nyou can give the tag a name that won't parse as a version. Having found a tag\nfor the commit, Nimph won't warn you that the commit needs tagging.\n\n```\n$ git tag -a \"oops_this_was_compromised\" 0abe7a9f0b5a05f2dd709f2b120805cc0cdd9668\n```\n\nWhen run without `--dry-run`, any missing tags are added automatically.\n\n```\n$ nimph tag --log-level=lvlInfo\ncreated new tag 1.1.0 for 009d45a977a688d22a9f1b14a21b6bd1a064760e\n👌bump tags are lookin' good\n```\n\nIncidentally, these command-line examples demonstrate adjusting the log-level\nto increase verbosity.\n\n### Run\n\nThe `run` subcommand lets you invoke arbitrary programs in the root of each\ndependency of your project.\n\n```\n$ nimph run pwd\n/home/adavidoff/git/Nim\n/home/adavidoff/git/nimph/deps/pkgs/github-1.0.2\n/home/adavidoff/git/nimph/deps/pkgs/npeg-0.20.0\n/home/adavidoff/git/nimph/deps/pkgs/rest-#head\n/home/adavidoff/git/nimph/deps/pkgs/foreach-#head\n/home/adavidoff/git/nimph/deps/pkgs/cligen-#head\n/home/adavidoff/git/nimph/deps/pkgs/bump-1.8.15\n/home/adavidoff/git/nimph/deps/pkgs/cutelog-1.1.1\n/home/adavidoff/git/nimph/deps/pkgs/nimgit2-0.1.1\n/home/adavidoff/git/nimph/deps/pkgs/nimterop-0.3.3\n/home/adavidoff/git/nimph/deps/pkgs/regex-#v0.13.0\n/home/adavidoff/git/nimph/deps/pkgs/unicodedb-0.7.2\n/home/adavidoff/git/nimph/deps/pkgs/unicodeplus-0.5.0\n/home/adavidoff/git/nimph/deps/pkgs/unittest2-#head\n```\n\nTo pass switches to commands `run` in your dependencies, use the `--` as a stopword.\n\n```\n$ nimph run -- head -1 LICENSE\n/bin/head: cannot open 'LICENSE' for reading: No such file or directory\nhead -1 LICENSE\nhead didn't like that in /home/adavidoff/git/Nim\nMIT License\nCopyright 2019 Ico Doornekamp \u003cnpeg@zevv.nl\u003e\nMIT License\nMIT License\nCopyright (c) 2015,2016,2017,2018,2019 Charles L. Blake.\nMIT License\nMIT License\nMIT License\nMIT License\nMIT License\nMIT License\nMIT License\n/bin/head: cannot open 'LICENSE' for reading: No such file or directory\nhead -1 LICENSE\nhead didn't like that in /home/adavidoff/git/nimph/deps/pkgs/unittest2-#head\n```\n\nFinally, you can use the `--git` switch to limit `run` to dependencies with\nGit repositories; see [Git Subcommands](https://github.com/disruptek/nimph#git-subcommands) for examples.\n\n### Graph\n\nThe `graph` subcommand dumps some _very basic_ details about discovered\ndependencies and their associated packages and projects.\n\n```\n$ nimph graph\n\nrequirement: swayipc\u003e=3.1.4 from xs\n    package: https://github.com/disruptek/swayipc\n\nrequirement: cligen\u003e=0.9.41 from xs\nrequirement: cligen\u003e=0.9.40 from bump\n    package: https://github.com/c-blake/cligen.git\n  directory: /home/adavidoff/.nimble/pkgs/cligen-0.9.41\n    project: cligen-#b144d5b3392bac63ed49df3e1f176becbbf04e24\n\nrequirement: dbus** from xs\n    package: https://github.com/zielmicha/nim-dbus\n\nrequirement: irc\u003e=0.2.1 from xs\n    package: https://github.com/nim-lang/irc\n\nrequirement: https://github.com/disruptek/cutelog.git\u003e=1.0.1 from xs\nrequirement: git://github.com/disruptek/cutelog.git\u003e=1.1.0 from bump\n    package: git://github.com/disruptek/cutelog.git\n\nrequirement: bump\u003e=1.8.11 from xs\n    package: file:///home/adavidoff/.nimble/pkgs/bump-1.8.13\n  directory: /home/adavidoff/.nimble/pkgs/bump-1.8.13\n    project: bump-1.8.13\n```\n\nLike other subcommands, you can provide _import names_ to retrieve the detail\nfor only those dependencies, or omit any additional arguments to display all\ndependencies.\n\n```\n$ nimph graph cligen\n\nrequirement: cligen\u003e=0.9.41 from xs\nrequirement: cligen\u003e=0.9.40 from bump\n    package: https://github.com/c-blake/cligen.git\n  directory: /home/adavidoff/.nimble/pkgs/cligen-0.9.41\n    project: cligen-#b144d5b3392bac63ed49df3e1f176becbbf04e24\n```\n\nRaising the log level of the `graph` command will cause retrieval and display\nreleases and any _other_ commits at which the package changed versions.\n\n```\n$ nimph graph --log=lvlInfo nimterop\n\nrequirement: nimterop\u003e=0.3.3 from nimgit2\n    package: https://github.com/genotrance/nimterop.git\n  directory: /home/adavidoff/git/nimph/deps/pkgs/nimterop-0.4.0\n    project: nimterop-#v0.4.0\ntagged release commits:\n    tag: v0.1.0               commit-c3734587a174ea2fc7e19943e6d11d024f06e091\n    tag: v0.2.0               commit-3e9dc2fb0fd6257fd86897c1b13f10ed2a5279b4\n    tag: v0.2.1               commit-e9120eee7840851bda8113afbc71062b29fff872\n    tag: v0.3.0               commit-37f5faa43d446a415e8934cc1a713bb7f5c5564f\n    tag: v0.3.1               commit-1bca308ac472796329c212410ae198c0e31d3acb\n    tag: v0.3.2               commit-12cc08900d1bfd39579164567acad75ca021a86b\n    tag: v0.3.3               commit-751128e75859de66e07be9888c8341fe3b553816\n    tag: v0.3.4               commit-c878a4be05cadd512db2182181b187de2a566ce8\n    tag: v0.3.5               commit-c4b6a01878f0f72d428a24c26153723c60f6695f\n    tag: v0.3.6               commit-d032a2c107d7f342df79980e01a3cf35194764de\n    tag: v0.4.0               commit-f71cf837d297192f8cddfa136e8c3cd84bbc81eb\nuntagged version commits:\n    ver: 0.2.0                commit-3a2395360712d2c6f27221e0887b7e3cad0be7a1\n    ver: 0.1.0                commit-9787797d15d281ce1dd792d247fac043c72dc769\n```\n\n### Git Subcommands\n\nThere are a couple shortcuts for running common git commands inside your\ndependencies:\n\n- `nimph fetch` is an alias for `nimph run -- git fetch`; ie. it runs `git fetch` in each dependency package directory.\n- `nimph pull` is an alias for `nimph run -- git pull`; ie. it runs `git pull` in each dependency package directory.\n\n### Nimble Subcommands\n\nAny commands not mentioned above are passed directly to an instance of `nimble`\nwhich is run with the appropriate `nimbleDir` environment to ensure that it will\noperate upon the project it should.\n\nYou can use this to, for example, **refresh** the official packages list, run **test**s, or build **doc**umentation for a project.\n\n```\n$ nimph refresh\nDownloading Official package list\n    Success Package list downloaded.\n```\n\n## Hacking\n\nVirtually all constants in Nimph are recorded in a single `spec` file where\nyou can perform quick behavioral tweaks. Additionally, these constants may be\noverridden via `--define:key=value` statements during compilation.\n\nNotably, compiling `nimph` outside `release` or `danger` modes will increase\nthe default log-level baked into the executable. Use a `debug` define for even\nmore spam.\n\nInteresting procedures are exported so that you can exploit them in your own\nprojects.\n\nCompilation flags to adjust output colors/styling/emojis are found in the\nproject's `nimph.nim.cfg`.\n\n## Choose Nimph, Choose Nim!\n\nThe `choosenim` tool included in Nimph allows you to easily switch a symbolic\nlink between adjacent Nim distributions, wherever you may have installed them.\n\n### Installing `choosenim`\n1. Install [jq](https://stedolan.github.io/jq/) from GitHub or wherever.\n1. Add the `chosen` toolchain to your `$PATH`.\n1. Run `choosenim` against any of your toolchains.\n```\n# after installing jq however you please...\n$ set --export PATH=/directory/for/all-my-nim-installations/chosen:$PATH\n$ ./choosenim 1.0\nNim Compiler Version 1.0.7 [Linux: amd64]\nCompiled at 2020-04-05\nCopyright (c) 2006-2019 by Andreas Rumpf\n\ngit hash: b6924383df63c91f0ad6baf63d0b1aa84f9329b7\nactive boot switches: -d:release\n```\n\n### Using `choosenim`\nTo list available toolchains, run `choosenim`.\n```\n$ choosenim\n.\n├── 1.0\n├── 1.2\n├── chosen -\u003e 1.2\n├── devel\n└── stable -\u003e 1.0\n```\nSwitch toolchains by supplying a name or alias.\n```\n$ choosenim 1.2\nNim Compiler Version 1.2.0 [Linux: amd64]\nCompiled at 2020-04-05\nCopyright (c) 2006-2020 by Andreas Rumpf\n\ngit hash: 7e83adff84be5d0c401a213eccb61e321a3fb1ff\nactive boot switches: -d:release\n```\n```\n$ choosenim devel\nNim Compiler Version 1.3.1 [Linux: amd64]\nCompiled at 2020-04-05\nCopyright (c) 2006-2020 by Andreas Rumpf\n\ngit hash: b6814be65349d22fd12944c7c3d19fd8eb44683d\nactive boot switches: -d:release\n```\n```\n$ choosenim stable\nNim Compiler Version 1.0.7 [Linux: amd64]\nCompiled at 2020-04-05\nCopyright (c) 2006-2019 by Andreas Rumpf\n\ngit hash: b6924383df63c91f0ad6baf63d0b1aa84f9329b7\n```\n\n### Hacking `choosenim`\nIt's a 20-line shell script, buddy; go nuts.\n\n## Documentation\n\nSee [the documentation for the nimph module](https://disruptek.github.io/nimph/nimph.html) as generated directly from the source.\n\n## License\nMIT\n","funding_links":[],"categories":["Development Tools"],"sub_categories":["Build Systems / Package Management"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdisruptek%2Fnimph","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdisruptek%2Fnimph","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdisruptek%2Fnimph/lists"}