code: func NewSource(opts ...source.Option) source.Source {
  	options := source.NewOptions(opts...)
  
  	var ctx *cli.Context
  
  	c, ok := options.Context.Value(contextKey{}).(*cli.Context)
  	if ok {
  		ctx = c
  	}
  
  	// no context
  	if ctx == nil {
  		// get the default app/flags
  		app := cmd.App()
  		flags := app.Flags
  
  		// create flagset
  		set := flag.NewFlagSet(app.Name, flag.ContinueOnError)
  
  		// apply flags to set
  		for _, f := range flags {
  			f.Apply(set)
  		}
  
  		// parse flags
  		set.SetOutput(ioutil.Discard)
  		set.Parse(os.Args[1:])
  
  		// normalise flags
  		normalizeFlags(app.Flags, set)
  
  		// create context
  		ctx = cli.NewContext(app, set, nil)
  	}
  
  	return &cliSource{
  		ctx:  ctx,
  		opts: options,
  	}
  }
docs: // NewSource returns a config source for integrating parsed flags from a micro/cli.Context.
  // Hyphens are delimiters for nesting, and all keys are lowercased. The assumption is that
  // command line flags have already been parsed.
  //
  // Example:
  //      cli.StringFlag{Name: "db-host"},
  //
  //
  //      {
  //          "database": {
  //              "host": "localhost"
  //          }
  //      }