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 = Apt.installed ["task-xfce-desktop"] `describe` "XFCE desktop installed" -- | Minimal install of XFCE, with a terminal emulator and panel, -- and X and network-manager, but not any of the extra apps. installedMin :: Property DebianLike installedMin = Apt.installedMin ["xfce4", "xfce4-terminal", "task-desktop"] `describe` "minimal XFCE desktop installed" -- | Installs network-manager-gnome, which is the way to get -- network-manager to manage networking in XFCE too. networkManager :: Property DebianLike networkManager = Apt.installedMin ["network-manager-gnome"] -- | Normally at first login, XFCE asks what kind of panel the user wants. -- This enables the default configuration noninteractively. defaultPanelFor :: User -> File.Overwrite -> Property DebianLike defaultPanelFor u@(User username) overwrite = property' desc $ \w -> do home <- liftIO $ User.homedir u ensureProperty w (go home) where desc = "default XFCE panel for " ++ username basecf = ".config" "xfce4" "xfconf" "xfce-perchannel-xml" "xfce4-panel.xml" -- This location is probably Debian-specific. defcf = "/etc/xdg/xfce4/panel/default.xml" go :: FilePath -> Property DebianLike go home = tightenTargets $ File.checkOverwrite overwrite (home basecf) $ \cf -> cf `File.isCopyOf` defcf `before` File.applyPath home basecf (\f -> File.ownerGroup f u (userGroup u)) `requires` Apt.installed ["xfce4-panel"]