       else
         data =
           currentScheme: "default"
+          color: true
           schemes: {}
         initalizeScheme "default"
       currentScheme = data.currentScheme
+      chalk.enabled = colors = (if data.color? then data.color else true)
       fatalError("currentScheme property is missing in data.json") unless _.isString(currentScheme)
       scheme = data.schemes[currentScheme]
       fatalError("#{currentScheme} scheme object is missing in data.json") unless _.isObject(scheme)

        programDone() if name is currentScheme

        data.currentScheme = currentScheme = name
        console.log "changing scheme to #{chalk.cyan name}"
        if _.isObject(data.schemes[name])
          saveDataFile()
        else
          console.log chalk.grey "initializing empty scheme object"
          initalizeScheme name
        programDone()

      listSlots: () ->
        schemeMsg "listing slots"
        console.log "------------------------------"
        slots = _.sortBy(_.pairs(scheme.slots), (pair) -> parseInt(pair[0]))
        for pair in slots
          console.log "#{chalk.yellow pair[0]}\t#{chalk.grey pair[1]}"
        programDone()

      getSlot: (idx) ->
        idx = parseInt(idx)

  .version(require("../package.json").version)

commander
  .command("init")
  .action(runCommand("init"));

commander
  .command('scheme [name]')
  .description('changes schemes (prints current scheme if no name is given)')
  .action(runCommand("changeScheme"));

commander
  .command("schemes")
  .action(runCommand("listSchemes"));

commander
  .command("list")
  .action(runCommand("listSlots"));

commander
  .command("pick")
  .action(runCommand("pickSlot"));

commander
  .command("get <idx>")
  .action(runCommand("getSlot"));

commander
  .command("set <idx> [path]")
  .action(runCommand("saveSlot"));

commander
  .command("clear")
  .action(runCommand("clearSlots"));

commander
  .command("compact")
  .action(runCommand("compactSlots"));

commander
