4 import Data.Semigroup ((<>))
5 import Options.Applicative
9 | PreviewProgram String
14 editProgram :: Parser Args
15 editProgram = EditProgram <$> argument str (metavar "PROGRAM")
17 previewProgram :: Parser Args
18 previewProgram = PreviewProgram <$> argument str (metavar "PROGRAM")
20 lintProgram :: Parser Args
21 lintProgram = LintProgram <$> argument str (metavar "PROGRAM")
23 argsParser :: Parser Args
24 argsParser = subparser
25 (command "add" (info (pure AddProgram) (progDesc "Add program"))
26 <> command "edit" (info editProgram (progDesc "Edit program config"))
27 <> command "prev" (info previewProgram (progDesc "Preview program config"))
28 <> command "lintp" (info lintProgram (progDesc "Lint program config"))
29 <> command "lint" (info (pure Lint) (progDesc "Lint all program configs")))
31 args :: ParserInfo Args
32 args = info (argsParser <**> helper)
34 <> progDesc "xdg-ninja utilities")
38 args <- execParser args
40 AddProgram -> saveProgram