]> glassweightruler.freedombox.rocks Git - xdg-ninja.git/blob - src/xdgnj.hs
Added edit program command
[xdg-ninja.git] / src / xdgnj.hs
1 module Main where
2
3
4 import qualified AddProgram as PA
5 import Data.Semigroup ((<>))
6 import qualified EditProgram as PE
7 import Options.Applicative
8
9 data Args = AddProgram
10 | EditProgram String
11 | PreviewProgram String
12 | LintProgram String
13 | Lint
14 deriving Show
15
16 editProgram :: Parser Args
17 editProgram = EditProgram <$> argument str (metavar "PROGRAM")
18
19 previewProgram :: Parser Args
20 previewProgram = PreviewProgram <$> argument str (metavar "PROGRAM")
21
22 lintProgram :: Parser Args
23 lintProgram = LintProgram <$> argument str (metavar "PROGRAM")
24
25 argsParser :: Parser Args
26 argsParser = subparser
27 (command "add" (info (pure AddProgram) (progDesc "Add program"))
28 <> command "edit" (info editProgram (progDesc "Edit program config"))
29 <> command "prev" (info previewProgram (progDesc "Preview program config"))
30 <> command "lintp" (info lintProgram (progDesc "Lint program config"))
31 <> command "lint" (info (pure Lint) (progDesc "Lint all program configs")))
32
33 args :: ParserInfo Args
34 args = info (argsParser <**> helper)
35 ( fullDesc
36 <> progDesc "xdg-ninja utilities")
37
38 main :: IO ()
39 main = do
40 args <- execParser args
41 case args of
42 AddProgram -> PA.saveProgram
43 EditProgram filename -> PE.editProgram filename
44 _ -> print args