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