packages feed

swiss-army-knife-1.2.0.0: app/SwissArmyKnife.hs

-- | main for Swiss Army Knife, cli.

module Main where

import Options.Applicative
    ( (<**>)
    , fullDesc
    , header
    , info
    , progDesc
    , execParser
    , helper )
import CommandLine
    ( Command( SysNet
             , ExtIP
             , Kernel
             , Sleep
             , Version
             , ZfsCheck
             , WireGuard
             , NetMan
             , Gitit )
    , opts )

import Knives.ExtIP     ( knifeExtIP )
import Knives.Kernel    ( knifeKernel )
import Knives.NetMan    ( knifeNetMan )
import Knives.Sleep     ( knifeSleep )
import Knives.SysNet    ( knifeSysNet )
import Knives.Version   ( knifeVersion )
import Knives.WireGuard ( knifeWireGuard )
import Knives.ZfsCheck  ( knifeZfsCheck )
import Knives.Gitit     ( knifeGitit )

main :: IO ()
main = do
  (_, cmd) <- execParser $ info (opts <**> helper)
    ( fullDesc
      <> progDesc "Many useful utilities, such as getting your external IP address, installed kernel, controlling your WireGuard, etc."
      <> header "Swiss Army Knife -- Many useful functions for the hacker in all of us." )

  case cmd of
    ExtIP extipOpts     -> knifeExtIP     extipOpts
    Kernel kernelOpts   -> knifeKernel    kernelOpts
    Sleep sleepOpts     -> knifeSleep     sleepOpts
    Version versionOpts -> knifeVersion   versionOpts
    ZfsCheck zfsOpts    -> knifeZfsCheck  zfsOpts
    WireGuard wgOpts    -> knifeWireGuard wgOpts
    NetMan nmOpts       -> knifeNetMan    nmOpts
    SysNet snOpts       -> knifeSysNet    snOpts
    Gitit gititOpts     -> knifeGitit     gititOpts