{-# LANGUAGE DataKinds #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE MonoLocalBinds #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TypeApplications #-}
module Aura.Commands.O ( displayOrphans, adoptPkg ) where
import Aura.Core (Env(..), liftEitherM, orphans, sudo)
import Aura.Pacman (pacman)
import Aura.Types
import BasePrelude
import Control.Effect (Carrier, Member)
import Control.Effect.Error (Error)
import Control.Effect.Reader (Reader)
import Control.Effect.Lift (Lift, sendM)
import Data.Generics.Product (field)
import Data.Set.NonEmpty (NESet)
import qualified Data.Text.IO as T
import Lens.Micro.Extras (view)
displayOrphans :: IO ()
displayOrphans = orphans >>= traverse_ (T.putStrLn . view (field @"name"))
adoptPkg :: (Carrier sig m, Member (Reader Env) sig, Member (Error Failure) sig, Member (Lift IO) sig) => NESet PkgName -> m ()
adoptPkg pkgs = sudo . liftEitherM . sendM . pacman $ ["-D", "--asexplicit"] <> asFlag pkgs