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