The nemesis package

[Tags:bsd3, library]

Organize common shell tasks into a meaningful tree like structure with dependency tracking

[Skip to Readme]


Versions 2009.6.12, 2009.6.13, 2009.6.13.1, 2009.6.13.2, 2009.6.14, 2009.6.14.1, 2009.6.14.2, 2009.6.14.3, 2009.6.24, 2009.6.25, 2009.8.4, 2009.8.16, 2009.8.17, 2009.8.18, 2009.10.7, 2010.10.4, 2010., 2011.6.12, 2011.6.19, 2011.10.12, 2012.5.24, 2012.5.24.1, 2012.12.18, 2013.6.13, 2013.6.16, 2013.6.22, 2013.7.27, 2014.5.19, 2015.5.4, 2016.3.19
Change log
Dependencies base (>4 && <=6), containers, directory, dlist, Glob, lens, mtl, process, time [details]
License BSD3
Author Jinjing Wang
Maintainer Jinjing Wang <>
Stability Unknown
Category Tools
Home page
Source repository head: git clone
Uploaded Sat Mar 19 04:10:53 UTC 2016 by JinjingWang
Distributions NixOS:2016.3.19
Downloads 4795 total (44 in the last 30 days)
0 []
Status Docs pending
Build status unknown [no reports yet]


  • System
    • System.Nemesis
      • System.Nemesis.DSL
      • System.Nemesis.Driver
      • System.Nemesis.Env
      • System.Nemesis.Type
      • System.Nemesis.Utils


Maintainer's Corner

For package maintainers and hackage trustees

Readme for nemesis

Readme for nemesis-2016.3.19

Nemesis: a task management tool for Haskell


import System.Nemesis

main = run $ do

    [ "**/*.hi"
    , "**/*.o"
    , "manifest"

  task "dist" $ do
    sh "cabal clean"
    sh "cabal configure"
    sh "cabal sdist"

  task "i" (sh "ghci -isrc src/System/Nemesis.hs")

  task "manifest" $ do
    sh "find . | grep 'hs$' > manifest"



cabal update
cabal install nemesis


Create a file named Nemesis

import System.Nemesis
import System.Nemesis.Utils ((-))
import Prelude hiding ((-))

main = run - do

  -- desc is optional, it gives some description to the task
  -- task syntax: task "keyword: space seperated dependencies" io-action
  desc "Hunter attack macro"
  task "attack: pet-attack auto-attack" (putStrLn "attack macro done!")

  desc "Pet attack"
  task "pet-attack: mark" - do
    sh "echo 'pet attack'"

  desc "Hunter's mark"
  task "mark" - do
    sh "echo \"casting hunter's mark\""

  desc "Auto attack"
  task "auto-attack" - do
    sh "echo 'auto shoot'"


runghc Nemesis

attack          Hunter attack macro
auto-attack     Auto attack
mark            Hunter's mark
pet-attack      Pet attack

runghc Nemesis attack

casting hunter's mark
pet attack
auto shoot
attack macro done!


Create namespaces for tasks with the keyword namespace

import System.Nemesis
import System.Nemesis.Utils ((-))
import Prelude hiding ((-))

main = run - do

  namespace "eat" - do

    task "bread: salad" - putStrLn "eating bread"
    task "salad: /drink/coke" - putStrLn "eating salad"

  namespace "drink" - do

    task "coke" - putStrLn "drinking coke"

Namespaces are referenced as path components.

runghc Nemesis bread

Nemesis: bread does not exist!

runghc Nemesis eat/bread

drinking coke
eating salad
eating bread


  • alias runghc Nemesis to something sweeter, e.g. n