module Propellor.Property.XFCE where
import Propellor.Base
import qualified Propellor.Property.Apt as Apt
import qualified Propellor.Property.File as File
import qualified Propellor.Property.User as User
installed :: Property DebianLike
installed :: Property DebianLike
installed = [Package] -> Property DebianLike
Apt.installed [Package
"task-xfce-desktop"]
forall p. IsProp p => p -> Package -> p
`describe` Package
"XFCE desktop installed"
installedMin :: Property DebianLike
installedMin :: Property DebianLike
installedMin = [Package] -> Property DebianLike
Apt.installedMin [Package
"xfce4", Package
"xfce4-terminal", Package
"task-desktop"]
forall p. IsProp p => p -> Package -> p
`describe` Package
"minimal XFCE desktop installed"
networkManager :: Property DebianLike
networkManager :: Property DebianLike
networkManager = [Package] -> Property DebianLike
Apt.installedMin [Package
"network-manager-gnome"]
defaultPanelFor :: User -> File.Overwrite -> Property DebianLike
defaultPanelFor :: User -> Overwrite -> Property DebianLike
defaultPanelFor u :: User
u@(User Package
username) Overwrite
overwrite = forall {k} (metatypes :: k).
SingI metatypes =>
Package
-> (OuterMetaTypesWitness metatypes -> Propellor Result)
-> Property (MetaTypes metatypes)
property' Package
desc forall a b. (a -> b) -> a -> b
$ \OuterMetaTypesWitness
'[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
w -> do
Package
home <- forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall a b. (a -> b) -> a -> b
$ User -> IO Package
User.homedir User
u
forall (inner :: [MetaType]) (outer :: [MetaType]).
EnsurePropertyAllowed inner outer =>
OuterMetaTypesWitness outer
-> Property (MetaTypes inner) -> Propellor Result
ensureProperty OuterMetaTypesWitness
'[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
w (Package -> Property DebianLike
go Package
home)
where
desc :: Package
desc = Package
"default XFCE panel for " forall a. [a] -> [a] -> [a]
++ Package
username
basecf :: Package
basecf = Package
".config" Package -> Package -> Package
</> Package
"xfce4" Package -> Package -> Package
</> Package
"xfconf"
Package -> Package -> Package
</> Package
"xfce-perchannel-xml" Package -> Package -> Package
</> Package
"xfce4-panel.xml"
defcf :: Package
defcf = Package
"/etc/xdg/xfce4/panel/default.xml"
go :: FilePath -> Property DebianLike
go :: Package -> Property DebianLike
go Package
home = forall (p :: * -> *) (untightened :: [MetaType])
(tightened :: [MetaType]).
(TightenTargets p, TightenTargetsAllowed untightened tightened,
SingI tightened) =>
p (MetaTypes untightened) -> p (MetaTypes tightened)
tightenTargets forall a b. (a -> b) -> a -> b
$
forall i.
Overwrite -> Package -> (Package -> Property i) -> Property i
File.checkOverwrite Overwrite
overwrite (Package
home Package -> Package -> Package
</> Package
basecf) forall a b. (a -> b) -> a -> b
$ \Package
cf ->
Package
cf Package
-> Package
-> Property
(MetaTypes
'[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
`File.isCopyOf` Package
defcf
forall x y. Combines x y => x -> y -> CombinedType x y
`before` forall metatypes.
Monoid (Property metatypes) =>
Package
-> Package -> (Package -> Property metatypes) -> Property metatypes
File.applyPath Package
home Package
basecf
(\Package
f -> Package
-> User
-> Group
-> Property
(MetaTypes
'[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
File.ownerGroup Package
f User
u (User -> Group
userGroup User
u))
forall x y. Combines x y => x -> y -> CombinedType x y
`requires` [Package] -> Property DebianLike
Apt.installed [Package
"xfce4-panel"]