-- | Specific configuration for Joey Hess's sites. Probably not useful to
-- others except as an example.

{-# LANGUAGE FlexibleContexts, TypeFamilies #-}

module Propellor.Property.SiteSpecific.JoeySites where

import Propellor.Base
import qualified Propellor.Property.Apt as Apt
import qualified Propellor.Property.File as File
import qualified Propellor.Property.ConfFile as ConfFile
import qualified Propellor.Property.Gpg as Gpg
import qualified Propellor.Property.Ssh as Ssh
import qualified Propellor.Property.Git as Git
import qualified Propellor.Property.Cron as Cron
import qualified Propellor.Property.Service as Service
import qualified Propellor.Property.User as User
import qualified Propellor.Property.Group as Group
import qualified Propellor.Property.Sudo as Sudo
import qualified Propellor.Property.Borg as Borg
import qualified Propellor.Property.Apache as Apache
import qualified Propellor.Property.Postfix as Postfix
import qualified Propellor.Property.Systemd as Systemd
import qualified Propellor.Property.Network as Network
import qualified Propellor.Property.Fail2Ban as Fail2Ban
import qualified Propellor.Property.LetsEncrypt as LetsEncrypt
import qualified Propellor.Property.Mount as Mount
import Utility.Split

import Data.List
import System.Posix.Files

kgbServer :: Property (HasInfo + DebianLike)
kgbServer :: Property (HasInfo + DebianLike)
kgbServer = [Char]
-> Props
     (MetaTypes
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
-> Property
     (MetaTypes
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
forall {k} (metatypes :: k).
SingI metatypes =>
[Char]
-> Props (MetaTypes metatypes) -> Property (MetaTypes metatypes)
propertyList [Char]
desc (Props
   (MetaTypes
      '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
 -> Property
      (MetaTypes
         '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
-> Props
     (MetaTypes
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
-> Property
     (MetaTypes
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
forall a b. (a -> b) -> a -> b
$ Props UnixLike
props
	Props UnixLike
-> Property DebianLike
-> Props
     (MetaTypes
        (Combine
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char] -> Property DebianLike
Apt.serviceInstalledRunning [Char]
"kgb-bot"
	Props DebianLike
-> Property DebianLike
-> Props
     (Sing
        (Combine
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char]
"/etc/default/kgb-bot" [Char] -> [Char] -> Property UnixLike
`File.containsLine` [Char]
"BOT_ENABLED=1"
		Property UnixLike -> [Char] -> Property UnixLike
forall p. IsProp p => p -> [Char] -> p
`describe` [Char]
"kgb bot enabled"
		Property UnixLike
-> Property DebianLike
-> CombinedType (Property UnixLike) (Property DebianLike)
forall x y. Combines x y => x -> y -> CombinedType x y
`onChange` [Char] -> Property DebianLike
Service.running [Char]
"kgb-bot"
	Props
  (Sing
     (Combine
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
-> CombinedType
     (Property
        (MetaTypes
           '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
     (Property DebianLike)
-> Props
     (MetaTypes
        (Combine
           (Combine
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char] -> Context -> Property (HasInfo + UnixLike)
forall c.
IsContext c =>
[Char] -> c -> Property (HasInfo + UnixLike)
File.hasPrivContent [Char]
"/etc/kgb-bot/kgb.conf" Context
anyContext
		Property
  (MetaTypes
     '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
        'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
-> Property DebianLike
-> CombinedType
     (Property
        (MetaTypes
           '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
     (Property DebianLike)
forall x y. Combines x y => x -> y -> CombinedType x y
`onChange` [Char] -> Property DebianLike
Service.restarted [Char]
"kgb-bot"
  where
	desc :: [Char]
desc = [Char]
"kgb.kitenet.net setup"

-- git.kitenet.net and git.joeyh.name
gitServer :: [Host] -> Property (HasInfo + DebianLike)
gitServer :: [Host] -> Property (HasInfo + DebianLike)
gitServer [Host]
hosts = [Char]
-> Props
     (MetaTypes
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
-> Property
     (MetaTypes
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
forall {k} (metatypes :: k).
SingI metatypes =>
[Char]
-> Props (MetaTypes metatypes) -> Property (MetaTypes metatypes)
propertyList [Char]
"git.kitenet.net setup" (Props
   (MetaTypes
      '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
 -> Property
      (MetaTypes
         '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
-> Props
     (MetaTypes
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
-> Property
     (MetaTypes
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
forall a b. (a -> b) -> a -> b
$ Props UnixLike
props
	Props UnixLike
-> CombinedType
     (CombinedType
        (Property DebianLike)
        (Property
           (MetaTypes
              '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])))
     (Property UnixLike)
-> Props
     (Sing
        (Combine
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
           '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char]
-> BorgRepo
-> Times
-> [[Char]]
-> [KeepPolicy]
-> Property DebianLike
Borg.backup [Char]
"/srv/git" BorgRepo
borgrepo
		([Char] -> Times
Cron.Times [Char]
"33 3 * * *")
		[]
		[Int -> KeepPolicy
Borg.KeepDays Int
30]
		Property DebianLike
-> Property
     (MetaTypes
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
-> CombinedType
     (Property DebianLike)
     (Property
        (MetaTypes
           '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
forall x y. Combines x y => x -> y -> CombinedType x y
`requires` Maybe [Char]
-> User
-> Context
-> (SshKeyType, [Char])
-> Property (HasInfo + UnixLike)
forall c.
IsContext c =>
Maybe [Char]
-> User
-> c
-> (SshKeyType, [Char])
-> Property (HasInfo + UnixLike)
Ssh.userKeyAt ([Char] -> Maybe [Char]
forall a. a -> Maybe a
Just [Char]
sshkey)
			([Char] -> User
User [Char]
"root")
			([Char] -> Context
Context [Char]
"git.kitenet.net")
			(SshKeyType
SshEd25519, [Char]
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOvgBVYP6srImGbJ+kg1K68HeUQqxHEBQswMWSqu9WOu root@kite")
		CombinedType
  (Property DebianLike)
  (Property
     (MetaTypes
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
-> Property UnixLike
-> CombinedType
     (CombinedType
        (Property DebianLike)
        (Property
           (MetaTypes
              '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])))
     (Property UnixLike)
forall x y. Combines x y => x -> y -> CombinedType x y
`requires` [Host] -> [Char] -> User -> Property UnixLike
Ssh.knownHost [Host]
hosts [Char]
"usw-s002.rsync.net" ([Char] -> User
User [Char]
"root")
	Props
  (Sing
     (Combine
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
-> Property
     (MetaTypes
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
-> Props
     (Sing
        (Combine
           (Combine
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
              '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& User -> Context -> Property (HasInfo + UnixLike)
forall c. IsContext c => User -> c -> Property (HasInfo + UnixLike)
Ssh.authorizedKeys ([Char] -> User
User [Char]
"family") ([Char] -> Context
Context [Char]
"git.kitenet.net")
	Props
  (Sing
     (Combine
        (Combine
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
           '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
-> Property DebianLike
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
                 '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& User -> Property DebianLike
User.accountFor ([Char] -> User
User [Char]
"family")
	Props
  (Sing
     (Combine
        (Combine
           (Combine
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
              '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
-> Property DebianLike
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 (Combine
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                       'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
                    '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [[Char]] -> Property DebianLike
Apt.installed [[Char]
"git", [Char]
"rsync", [Char]
"cgit"]
	Props
  (Sing
     (Combine
        (Combine
           (Combine
              (Combine
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
                 '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
-> Property DebianLike
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                          'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
                       '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                       'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [[Char]] -> Property DebianLike
Apt.installed [[Char]
"git-annex"]
	Props
  (Sing
     (Combine
        (Combine
           (Combine
              (Combine
                 (Combine
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                       'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
                    '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
-> Property DebianLike
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                             'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
                          '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                          'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [[Char]] -> Property DebianLike
Apt.installed [[Char]
"kgb-client"]
	Props
  (Sing
     (Combine
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                          'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
                       '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                       'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
-> CombinedType
     (Property
        (MetaTypes
           '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
     (Property UnixLike)
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
                             '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                          '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                             'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char] -> Context -> Property (HasInfo + UnixLike)
forall c.
IsContext c =>
[Char] -> c -> Property (HasInfo + UnixLike)
File.hasPrivContentExposed [Char]
"/etc/kgb-bot/kgb-client.conf" Context
anyContext
		Property
  (MetaTypes
     '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
        'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
-> Property UnixLike
-> CombinedType
     (Property
        (MetaTypes
           '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
     (Property UnixLike)
forall x y. Combines x y => x -> y -> CombinedType x y
`requires` [Char] -> Property UnixLike
File.dirExists [Char]
"/etc/kgb-bot/"
	Props
  (Sing
     (Combine
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                             'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
                          '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                          'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
-> RevertableProperty DebianLike DebianLike
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                   'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
                                '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                             '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char] -> RevertableProperty DebianLike DebianLike
Git.daemonRunning [Char]
"/srv/git"
	Props
  (Sing
     (Combine
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
                             '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                          '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                             'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
-> Property UnixLike
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                      'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
                                   '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                   'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char]
"/etc/cgitrc" [Char] -> [[Char]] -> Property UnixLike
`File.hasContent`
		[ [Char]
"clone-url=https://git.joeyh.name/git/$CGIT_REPO_URL git://git.joeyh.name/$CGIT_REPO_URL"
		, [Char]
"css=/cgit-css/cgit.css"
		, [Char]
"logo=/cgit-css/cgit.png"
		, [Char]
"enable-http-clone=1"
		, [Char]
"root-title=Joey's git repositories"
		, [Char]
"root-desc="
		, [Char]
"enable-index-owner=0"
		, [Char]
"snapshots=tar.gz"
		, [Char]
"enable-git-config=1"
		, [Char]
"scan-path=/srv/git"
		]
		Property UnixLike -> [Char] -> Property UnixLike
forall p. IsProp p => p -> [Char] -> p
`describe` [Char]
"cgit configured"
	-- I keep the website used for git.kitenet.net/git.joeyh.name checked into git..
	Props
  (Sing
     (Combine
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                   'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
                                '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                             '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
-> Property DebianLike
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                         'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
                                      '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                   '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                      'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                       'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& User -> [Char] -> [Char] -> Maybe [Char] -> Property DebianLike
Git.cloned ([Char] -> User
User [Char]
"joey") [Char]
"/srv/git/joey/git.kitenet.net.git" [Char]
"/srv/web/git.kitenet.net" Maybe [Char]
forall a. Maybe a
Nothing
	-- Don't need global apache configuration for cgit.
	Props
  (Sing
     (Combine
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                      'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
                                   '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                   'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
-> RevertableProperty DebianLike DebianLike
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      (Combine
                                         '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                            'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
                                         '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                      '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                         'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                          'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} {k} (x :: [a]) (z :: [a]) (y :: k).
CheckCombinableNote x z (NoteFor ('Text "!")) =>
Props (MetaTypes x)
-> RevertableProperty (MetaTypes y) (MetaTypes z)
-> Props (MetaTypes (Combine x z))
! [Char] -> RevertableProperty DebianLike DebianLike
Apache.confEnabled [Char]
"cgit"
	Props
  (Sing
     (Combine
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                         'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
                                      '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                   '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                      'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                       'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
-> RevertableProperty DebianLike DebianLike
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      (Combine
                                         (Combine
                                            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                               'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
                                            '[ 'WithInfo, 'Targeting 'OSDebian,
                                               'Targeting 'OSBuntish])
                                         '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                            'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                                      '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                          '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                             'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                       'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char] -> RevertableProperty DebianLike DebianLike
website [Char]
"git.kitenet.net"
	Props
  (Sing
     (Combine
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      (Combine
                                         '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                            'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
                                         '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                      '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                         'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                          'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
-> RevertableProperty DebianLike DebianLike
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      (Combine
                                         (Combine
                                            (Combine
                                               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                                  'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
                                               '[ 'WithInfo, 'Targeting 'OSDebian,
                                                  'Targeting 'OSBuntish])
                                            '[ 'WithInfo, 'Targeting 'OSDebian,
                                               'Targeting 'OSBuntish, 'Targeting 'OSArchLinux,
                                               'Targeting 'OSFreeBSD])
                                         '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                      '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                             '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                          'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char] -> RevertableProperty DebianLike DebianLike
website [Char]
"git.joeyh.name"
	Props
  (Sing
     (Combine
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      (Combine
                                         (Combine
                                            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                               'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
                                            '[ 'WithInfo, 'Targeting 'OSDebian,
                                               'Targeting 'OSBuntish])
                                         '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                            'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                                      '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                          '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                             'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                       'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
-> RevertableProperty DebianLike DebianLike
-> Props
     (MetaTypes
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      (Combine
                                         (Combine
                                            (Combine
                                               (Combine
                                                  '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                                     'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
                                                  '[ 'WithInfo, 'Targeting 'OSDebian,
                                                     'Targeting 'OSBuntish])
                                               '[ 'WithInfo, 'Targeting 'OSDebian,
                                                  'Targeting 'OSBuntish, 'Targeting 'OSArchLinux,
                                                  'Targeting 'OSFreeBSD])
                                            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                         '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                      '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                   'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                             'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char] -> RevertableProperty DebianLike DebianLike
Apache.modEnabled [Char]
"cgi"
  where
	sshkey :: [Char]
sshkey = [Char]
"/root/.ssh/git.kitenet.net.key"
	borgrepo :: BorgRepo
borgrepo = [Char] -> [BorgRepoOpt] -> BorgRepo
rsyncNetBorgRepo [Char]
"git.kitenet.net.borg" [[Char] -> BorgRepoOpt
Borg.UseSshKey [Char]
sshkey]
	website :: [Char] -> RevertableProperty DebianLike DebianLike
website [Char]
hn = [Char]
-> [Char]
-> AgreeTOS
-> [[Char]]
-> RevertableProperty DebianLike DebianLike
Apache.httpsVirtualHost' [Char]
hn [Char]
"/srv/web/git.kitenet.net/" AgreeTOS
letos
		[ [Char]
Apache.iconDir
		, [Char]
"  <Directory /srv/web/git.kitenet.net/>"
		, [Char]
"    Options Indexes ExecCGI FollowSymlinks"
		, [Char]
"    AllowOverride None"
		, [Char]
"    AddHandler cgi-script .cgi"
		, [Char]
"    DirectoryIndex index.cgi"
		,      [Char]
Apache.allowAll
		, [Char]
"  </Directory>"
		, [Char]
""
		, [Char]
"  ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/"
		, [Char]
"  <Directory /usr/lib/cgi-bin>"
		, [Char]
"    SetHandler cgi-script"
		, [Char]
"    Options ExecCGI"
		, [Char]
"  </Directory>"
		]

type AnnexUUID = String

-- | A website, with files coming from a git-annex repository.
annexWebSite :: Git.RepoUrl -> HostName -> AnnexUUID -> [(String, Git.RepoUrl)] -> Property (HasInfo + DebianLike)
annexWebSite :: [Char]
-> [Char]
-> [Char]
-> [([Char], [Char])]
-> Property (HasInfo + DebianLike)
annexWebSite [Char]
origin [Char]
hn [Char]
uuid [([Char], [Char])]
remotes = [Char]
-> Props
     (MetaTypes
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
-> Property
     (MetaTypes
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
forall {k} (metatypes :: k).
SingI metatypes =>
[Char]
-> Props (MetaTypes metatypes) -> Property (MetaTypes metatypes)
propertyList ([Char]
hn [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++[Char]
" website using git-annex") (Props
   (MetaTypes
      '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
 -> Property
      (MetaTypes
         '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
-> Props
     (MetaTypes
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
-> Property
     (MetaTypes
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
forall a b. (a -> b) -> a -> b
$ Props UnixLike
props
	Props UnixLike
-> Property DebianLike
-> Props
     (MetaTypes
        (Combine
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& User -> [Char] -> [Char] -> Maybe [Char] -> Property DebianLike
Git.cloned ([Char] -> User
User [Char]
"joey") [Char]
origin [Char]
dir Maybe [Char]
forall a. Maybe a
Nothing
		Property DebianLike
-> Property UnixLike
-> CombinedType (Property DebianLike) (Property UnixLike)
forall x y. Combines x y => x -> y -> CombinedType x y
`onChange` Property UnixLike
setup
	Props
  (MetaTypes
     (Combine
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
-> Property
     (MetaTypes
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
-> Props
     (Sing
        (Combine
           (Combine
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char] -> Property (HasInfo + UnixLike)
alias [Char]
hn
	Props
  (Sing
     (Combine
        (Combine
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
-> Property UnixLike
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char]
postupdatehook [Char] -> [[Char]] -> Property UnixLike
`File.hasContent`
		[ [Char]
"#!/bin/sh"
		, [Char]
"exec git update-server-info"
		] Property UnixLike
-> Property UnixLike
-> CombinedType (Property UnixLike) (Property UnixLike)
forall x y. Combines x y => x -> y -> CombinedType x y
`onChange`
			([Char]
postupdatehook [Char] -> FileMode -> Property UnixLike
`File.mode` ([FileMode] -> FileMode
combineModes (FileMode
ownerWriteModeFileMode -> [FileMode] -> [FileMode]
forall a. a -> [a] -> [a]
:[FileMode]
readModes [FileMode] -> [FileMode] -> [FileMode]
forall a. [a] -> [a] -> [a]
++ [FileMode]
executeModes)))
	Props
  (Sing
     (Combine
        (Combine
           (Combine
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
-> RevertableProperty DebianLike DebianLike
-> Props
     (MetaTypes
        (Combine
           (Combine
              (Combine
                 (Combine
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                       'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& RevertableProperty DebianLike DebianLike
setupapache
  where
	dir :: [Char]
dir = [Char]
"/srv/web/" [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
hn
	postupdatehook :: [Char]
postupdatehook = [Char]
dir [Char] -> [Char] -> [Char]
</> [Char]
".git/hooks/post-update"
	setup :: Property UnixLike
setup = User -> [[Char]] -> UncheckedProperty UnixLike
userScriptProperty ([Char] -> User
User [Char]
"joey") [[Char]]
setupscript
		UncheckedProperty UnixLike -> Result -> Property UnixLike
forall (p :: * -> *) i.
Checkable p i =>
p i -> Result -> Property i
`assume` Result
MadeChange
	setupscript :: [[Char]]
setupscript =
		[ [Char]
"cd " [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char] -> [Char]
shellEscape [Char]
dir
		, [Char]
"git annex reinit " [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char] -> [Char]
shellEscape [Char]
uuid
		] [[Char]] -> [[Char]] -> [[Char]]
forall a. [a] -> [a] -> [a]
++ (([Char], [Char]) -> [Char]) -> [([Char], [Char])] -> [[Char]]
forall a b. (a -> b) -> [a] -> [b]
map ([Char], [Char]) -> [Char]
addremote [([Char], [Char])]
remotes [[Char]] -> [[Char]] -> [[Char]]
forall a. [a] -> [a] -> [a]
++
		[ [Char]
"git annex get"
		, [Char]
"git update-server-info"
		]
	addremote :: ([Char], [Char]) -> [Char]
addremote ([Char]
name, [Char]
url) = [Char]
"git remote add " [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char] -> [Char]
shellEscape [Char]
name [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
" " [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char] -> [Char]
shellEscape [Char]
url
	setupapache :: RevertableProperty DebianLike DebianLike
setupapache = [Char]
-> [Char]
-> AgreeTOS
-> [[Char]]
-> RevertableProperty DebianLike DebianLike
Apache.httpsVirtualHost' [Char]
hn [Char]
dir AgreeTOS
letos
		[ [Char]
"  ServerAlias www."[Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++[Char]
hn
		,    [Char]
Apache.iconDir
		, [Char]
"  <Directory "[Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++[Char]
dir[Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++[Char]
">"
		, [Char]
"    Options Indexes FollowSymLinks ExecCGI"
		, [Char]
"    AllowOverride None"
		, [Char]
"    AddHandler cgi-script .cgi"
		, [Char]
"    DirectoryIndex index.html index.cgi"
		,      [Char]
Apache.allowAll
		, [Char]
"  </Directory>"
		]

letos :: LetsEncrypt.AgreeTOS
letos :: AgreeTOS
letos = Maybe [Char] -> AgreeTOS
LetsEncrypt.AgreeTOS ([Char] -> Maybe [Char]
forall a. a -> Maybe a
Just [Char]
"id@joeyh.name")

apacheSite :: HostName -> Apache.ConfigFile -> RevertableProperty DebianLike DebianLike
apacheSite :: [Char] -> [[Char]] -> RevertableProperty DebianLike DebianLike
apacheSite [Char]
hn [[Char]]
middle = [Char] -> [[Char]] -> RevertableProperty DebianLike DebianLike
Apache.siteEnabled [Char]
hn ([[Char]] -> RevertableProperty DebianLike DebianLike)
-> [[Char]] -> RevertableProperty DebianLike DebianLike
forall a b. (a -> b) -> a -> b
$ [Char] -> [[Char]] -> [[Char]]
apachecfg [Char]
hn [[Char]]
middle

apachecfg :: HostName -> Apache.ConfigFile -> Apache.ConfigFile
apachecfg :: [Char] -> [[Char]] -> [[Char]]
apachecfg [Char]
hn [[Char]]
middle =
	[ [Char]
"<VirtualHost *:" [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ Port -> [Char]
forall t. ConfigurableValue t => t -> [Char]
val Port
port [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
">"
	, [Char]
"  ServerAdmin grue@joeyh.name"
	, [Char]
"  ServerName "[Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++[Char]
hn[Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++[Char]
":" [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ Port -> [Char]
forall t. ConfigurableValue t => t -> [Char]
val Port
port
	]
	[[Char]] -> [[Char]] -> [[Char]]
forall a. [a] -> [a] -> [a]
++ [[Char]]
middle [[Char]] -> [[Char]] -> [[Char]]
forall a. [a] -> [a] -> [a]
++
	[ [Char]
""
	, [Char]
"  ErrorLog /var/log/apache2/error.log"
	, [Char]
"  LogLevel warn"
	, [Char]
"  CustomLog /var/log/apache2/access.log combined"
	, [Char]
"  ServerSignature On"
	, [Char]
"  "
	, [Char]
Apache.iconDir
	, [Char]
"</VirtualHost>"
	]
	  where
		port :: Port
port = Int -> Port
Port Int
80

gitAnnexDistributor :: Property (HasInfo + DebianLike)
gitAnnexDistributor :: Property (HasInfo + DebianLike)
gitAnnexDistributor = [Char]
-> Props
     (MetaTypes
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
-> Property
     (MetaTypes
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
forall {k} (metatypes :: k).
SingI metatypes =>
[Char]
-> Props (MetaTypes metatypes) -> Property (MetaTypes metatypes)
combineProperties [Char]
"git-annex distributor, including rsync server and signer" (Props
   (MetaTypes
      '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
 -> Property
      (MetaTypes
         '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
-> Props
     (MetaTypes
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
-> Property
     (MetaTypes
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
forall a b. (a -> b) -> a -> b
$ Props UnixLike
props
	Props UnixLike
-> Property DebianLike
-> Props
     (MetaTypes
        (Combine
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [[Char]] -> Property DebianLike
Apt.installed [[Char]
"rsync"]
	Props DebianLike
-> CombinedType
     (Property
        (MetaTypes
           '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
     (Property DebianLike)
-> Props
     (Sing
        (Combine
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
           '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char] -> Context -> Property (HasInfo + UnixLike)
forall c.
IsContext c =>
[Char] -> c -> Property (HasInfo + UnixLike)
File.hasPrivContent [Char]
"/etc/rsyncd.conf" ([Char] -> Context
Context [Char]
"git-annex distributor")
		Property
  (MetaTypes
     '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
        'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
-> Property DebianLike
-> CombinedType
     (Property
        (MetaTypes
           '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
     (Property DebianLike)
forall x y. Combines x y => x -> y -> CombinedType x y
`onChange` [Char] -> Property DebianLike
Service.restarted [Char]
"rsync"
	Props
  (Sing
     (Combine
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
-> CombinedType
     (Property
        (MetaTypes
           '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
     (Property DebianLike)
-> Props
     (Sing
        (Combine
           (Combine
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
              '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char] -> Context -> Property (HasInfo + UnixLike)
forall c.
IsContext c =>
[Char] -> c -> Property (HasInfo + UnixLike)
File.hasPrivContent [Char]
"/etc/rsyncd.secrets" ([Char] -> Context
Context [Char]
"git-annex distributor")
		Property
  (MetaTypes
     '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
        'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
-> Property DebianLike
-> CombinedType
     (Property
        (MetaTypes
           '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
     (Property DebianLike)
forall x y. Combines x y => x -> y -> CombinedType x y
`onChange` [Char] -> Property DebianLike
Service.restarted [Char]
"rsync"
	Props
  (Sing
     (Combine
        (Combine
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
           '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
-> Property DebianLike
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                 '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char]
"/etc/default/rsync" [Char] -> [Char] -> Property UnixLike
`File.containsLine` [Char]
"RSYNC_ENABLE=true"
		Property UnixLike
-> Property DebianLike
-> CombinedType (Property UnixLike) (Property DebianLike)
forall x y. Combines x y => x -> y -> CombinedType x y
`onChange` [Char] -> Property DebianLike
Service.running [Char]
"rsync"
	Props
  (Sing
     (Combine
        (Combine
           (Combine
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
              '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
-> Property Linux
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 (Combine
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                    '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char] -> Property Linux
Systemd.enabled [Char]
"rsync"
	Props
  (Sing
     (Combine
        (Combine
           (Combine
              (Combine
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                 '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux]))
-> Property UnixLike
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                       '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char] -> Property UnixLike
endpoint [Char]
"/srv/web/downloads.kitenet.net/git-annex/autobuild"
	Props
  (Sing
     (Combine
        (Combine
           (Combine
              (Combine
                 (Combine
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                    '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
-> Property UnixLike
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                          '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char] -> Property UnixLike
endpoint [Char]
"/srv/web/downloads.kitenet.net/git-annex/autobuild/x86_64-apple-yosemite"
	Props
  (Sing
     (Combine
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                       '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
-> Property UnixLike
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                             '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                          '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                       'Targeting 'OSArchLinux])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char] -> Property UnixLike
endpoint [Char]
"/srv/web/downloads.kitenet.net/git-annex/autobuild/windows"
	-- git-annex distribution signing key
	Props
  (Sing
     (Combine
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                          '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
-> Property
     (MetaTypes
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                                '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                             '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                          'Targeting 'OSArchLinux])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                       'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
           '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& GpgKeyId -> User -> Property (HasInfo + DebianLike)
Gpg.keyImported ([Char] -> GpgKeyId
Gpg.GpgKeyId [Char]
"89C809CB") ([Char] -> User
User [Char]
"joey")
	-- used for building rpms
	Props
  (Sing
     (Combine
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                             '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                          '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                       'Targeting 'OSArchLinux])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
-> Property DebianLike
-> Props
     (MetaTypes
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                                   '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                             'Targeting 'OSArchLinux])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                          'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                       'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
              '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [[Char]] -> Property DebianLike
Apt.installed [[Char]
"rpm", [Char]
"createrepo-c"]
  where
	endpoint :: [Char]
-> Property
     (MetaTypes
        (Combine
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
endpoint [Char]
d = [Char]
-> Props
     (MetaTypes
        (Combine
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
-> Property
     (MetaTypes
        (Combine
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
forall {k} (metatypes :: k).
SingI metatypes =>
[Char]
-> Props (MetaTypes metatypes) -> Property (MetaTypes metatypes)
combineProperties ([Char]
"endpoint " [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
d) (Props
   (MetaTypes
      (Combine
         '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
            'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
         '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
            'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
 -> Property
      (MetaTypes
         (Combine
            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
               'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
               'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])))
-> Props
     (MetaTypes
        (Combine
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
-> Property
     (MetaTypes
        (Combine
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
forall a b. (a -> b) -> a -> b
$ Props UnixLike
props
		Props UnixLike
-> Property UnixLike
-> Props
     (MetaTypes
        (Combine
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char] -> Property UnixLike
File.dirExists [Char]
d
		Props UnixLike
-> Property UnixLike
-> Props
     (MetaTypes
        (Combine
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char] -> User -> Group -> Property UnixLike
File.ownerGroup [Char]
d ([Char] -> User
User [Char]
"joey") ([Char] -> Group
Group [Char]
"joey")

downloads :: Property (HasInfo + DebianLike)
downloads :: Property (HasInfo + DebianLike)
downloads = [Char]
-> [Char]
-> [Char]
-> [([Char], [Char])]
-> Property (HasInfo + DebianLike)
annexWebSite [Char]
"/srv/git/downloads.git"
	[Char]
"downloads.kitenet.net"
	[Char]
"840760dc-08f0-11e2-8c61-576b7e66acfd"
	[]

tmp :: Property (HasInfo + DebianLike)
tmp :: Property (HasInfo + DebianLike)
tmp = [Char]
-> Props
     (MetaTypes
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
-> Property
     (MetaTypes
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
forall {k} (metatypes :: k).
SingI metatypes =>
[Char]
-> Props (MetaTypes metatypes) -> Property (MetaTypes metatypes)
propertyList [Char]
"tmp.joeyh.name" (Props
   (MetaTypes
      '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
 -> Property
      (MetaTypes
         '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
-> Props
     (MetaTypes
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
-> Property
     (MetaTypes
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
forall a b. (a -> b) -> a -> b
$ Props UnixLike
props
	Props UnixLike
-> Property
     (MetaTypes
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
-> Props
     (Sing
        (Combine
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
           '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char]
-> [Char]
-> [Char]
-> [([Char], [Char])]
-> Property (HasInfo + DebianLike)
annexWebSite [Char]
"/srv/git/joey/tmp.git"
		[Char]
"tmp.joeyh.name"
		[Char]
"26fd6e38-1226-11e2-a75f-ff007033bdba"
		[]
	Props
  (Sing
     (Combine
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
-> Property UnixLike
-> Props
     (MetaTypes
        (Combine
           (Combine
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
              '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char] -> Times -> Property UnixLike
Cron.jobDropped [Char]
"pump rss" ([Char] -> Times
Cron.Times [Char]
"15 * * * *")

ircBouncer :: Property (HasInfo + DebianLike)
ircBouncer :: Property (HasInfo + DebianLike)
ircBouncer = [Char]
-> Props
     (MetaTypes
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
-> Property
     (MetaTypes
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
forall {k} (metatypes :: k).
SingI metatypes =>
[Char]
-> Props (MetaTypes metatypes) -> Property (MetaTypes metatypes)
propertyList [Char]
"IRC bouncer" (Props
   (MetaTypes
      '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
 -> Property
      (MetaTypes
         '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
-> Props
     (MetaTypes
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
-> Property
     (MetaTypes
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
forall a b. (a -> b) -> a -> b
$ Props UnixLike
props
	Props UnixLike
-> Property DebianLike
-> Props
     (MetaTypes
        (Combine
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [[Char]] -> Property DebianLike
Apt.installed [[Char]
"znc"]
	Props DebianLike
-> Property DebianLike
-> Props
     (Sing
        (Combine
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& User -> Property DebianLike
User.accountFor ([Char] -> User
User [Char]
"znc")
	Props
  (Sing
     (Combine
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
-> Property UnixLike
-> Props
     (Sing
        (Combine
           (Combine
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char] -> Property UnixLike
File.dirExists ([Char] -> [Char]
takeDirectory [Char]
conf)
	Props
  (Sing
     (Combine
        (Combine
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
-> Property
     (MetaTypes
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
           '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char] -> Context -> Property (HasInfo + UnixLike)
forall c.
IsContext c =>
[Char] -> c -> Property (HasInfo + UnixLike)
File.hasPrivContent [Char]
conf Context
anyContext
	Props
  (Sing
     (Combine
        (Combine
           (Combine
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
-> Property UnixLike
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 (Combine
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
              '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char] -> User -> Group -> Property UnixLike
File.ownerGroup [Char]
conf ([Char] -> User
User [Char]
"znc") ([Char] -> Group
Group [Char]
"znc")
	Props
  (Sing
     (Combine
        (Combine
           (Combine
              (Combine
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
           '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
-> Property DebianLike
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                       'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                 '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char] -> Times -> User -> [Char] -> [Char] -> Property DebianLike
Cron.job [Char]
"znconboot" ([Char] -> Times
Cron.Times [Char]
"@reboot") ([Char] -> User
User [Char]
"znc") [Char]
"~" [Char]
"znc"
	-- ensure running if it was not already
	Props
  (Sing
     (Combine
        (Combine
           (Combine
              (Combine
                 (Combine
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
              '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
-> Property UnixLike
-> Props
     (MetaTypes
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                          'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                    '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                       'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& User -> [[Char]] -> UncheckedProperty UnixLike
userScriptProperty ([Char] -> User
User [Char]
"znc") [[Char]
"znc || true"]
		UncheckedProperty UnixLike -> Result -> Property UnixLike
forall (p :: * -> *) i.
Checkable p i =>
p i -> Result -> Property i
`assume` Result
NoChange
		Property UnixLike -> [Char] -> Property UnixLike
forall p. IsProp p => p -> [Char] -> p
`describe` [Char]
"znc running"
  where
	conf :: [Char]
conf = [Char]
"/home/znc/.znc/configs/znc.conf"

githubBackup :: Property (HasInfo + DebianLike)
githubBackup :: Property (HasInfo + DebianLike)
githubBackup = [Char]
-> Props
     (MetaTypes
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
-> Property
     (MetaTypes
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
forall {k} (metatypes :: k).
SingI metatypes =>
[Char]
-> Props (MetaTypes metatypes) -> Property (MetaTypes metatypes)
propertyList [Char]
"github-backup box" (Props
   (MetaTypes
      '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
 -> Property
      (MetaTypes
         '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
-> Props
     (MetaTypes
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
-> Property
     (MetaTypes
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
forall a b. (a -> b) -> a -> b
$ Props UnixLike
props
	Props UnixLike
-> Property DebianLike
-> Props
     (MetaTypes
        (Combine
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [[Char]] -> Property DebianLike
Apt.installed [[Char]
"github-backup", [Char]
"moreutils"]
	Props DebianLike
-> Property
     (MetaTypes
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
-> Props
     (Sing
        (Combine
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
           '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& Property
  (MetaTypes
     '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
        'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
Property (HasInfo + UnixLike)
githubKeys
	Props
  (Sing
     (Combine
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
-> Property DebianLike
-> Props
     (MetaTypes
        (Combine
           (Combine
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
              '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char] -> Times -> User -> [Char] -> [Char] -> Property DebianLike
Cron.niceJob [Char]
"github-backup run" ([Char] -> Times
Cron.Times [Char]
"30 4 * * *") ([Char] -> User
User [Char]
"joey")
		[Char]
"/home/joey/lib/backup" [Char]
backupcmd
  where
	backupcmd :: [Char]
backupcmd = [Char] -> [[Char]] -> [Char]
forall a. [a] -> [[a]] -> [a]
intercalate [Char]
"&&" ([[Char]] -> [Char]) -> [[Char]] -> [Char]
forall a b. (a -> b) -> a -> b
$
		[ [Char]
"mkdir -p github"
		, [Char]
"cd github"
		, [Char]
". $HOME/.github-keys"
		, [Char]
"github-backup joeyh"
		]

githubKeys :: Property (HasInfo + UnixLike)
githubKeys :: Property (HasInfo + UnixLike)
githubKeys =
	let f :: [Char]
f = [Char]
"/home/joey/.github-keys"
	in [Char] -> Context -> Property (HasInfo + UnixLike)
forall c.
IsContext c =>
[Char] -> c -> Property (HasInfo + UnixLike)
File.hasPrivContent [Char]
f Context
anyContext
		Property
  (MetaTypes
     '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
        'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
-> Property UnixLike
-> CombinedType
     (Property
        (MetaTypes
           '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
     (Property UnixLike)
forall x y. Combines x y => x -> y -> CombinedType x y
`onChange` [Char] -> User -> Group -> Property UnixLike
File.ownerGroup [Char]
f ([Char] -> User
User [Char]
"joey") ([Char] -> Group
Group [Char]
"joey")


rsyncNetBackup :: [Host] -> Property DebianLike
rsyncNetBackup :: [Host] -> Property DebianLike
rsyncNetBackup [Host]
hosts = [Char] -> Times -> User -> [Char] -> [Char] -> Property DebianLike
Cron.niceJob [Char]
"rsync.net copied in daily" ([Char] -> Times
Cron.Times [Char]
"30 5 * * *")
	([Char] -> User
User [Char]
"joey") [Char]
"/home/joey/lib/backup" [Char]
"mkdir -p rsync.net && rsync --delete -az 2318@usw-s002.rsync.net: rsync.net"
	Property DebianLike
-> Property UnixLike
-> CombinedType (Property DebianLike) (Property UnixLike)
forall x y. Combines x y => x -> y -> CombinedType x y
`requires` [Host] -> [Char] -> User -> Property UnixLike
Ssh.knownHost [Host]
hosts [Char]
"usw-s002.rsync.net" ([Char] -> User
User [Char]
"joey")

podcatcher :: Property DebianLike
podcatcher :: Property DebianLike
podcatcher = [Char] -> Times -> User -> [Char] -> [Char] -> Property DebianLike
Cron.niceJob [Char]
"podcatcher run hourly" ([Char] -> Times
Cron.Times [Char]
"55 * * * *")
	([Char] -> User
User [Char]
"joey") [Char]
"/home/joey/lib/sound/podcasts"
	[Char]
"timeout 2h xargs git-annex importfeed -c annex.genmetadata=true < feeds; mr --quiet update"
	Property DebianLike
-> Property DebianLike
-> CombinedType (Property DebianLike) (Property DebianLike)
forall x y. Combines x y => x -> y -> CombinedType x y
`requires` [[Char]] -> Property DebianLike
Apt.installed [[Char]
"git-annex", [Char]
"myrepos"]

spamdEnabled :: Property DebianLike
spamdEnabled :: Property DebianLike
spamdEnabled = [Char] -> Property DebianLike
Apt.serviceInstalledRunning [Char]
"spamd"

spamassassinConfigured :: Property DebianLike
spamassassinConfigured :: Property DebianLike
spamassassinConfigured = [Char] -> Props DebianLike -> Property DebianLike
forall {k} (metatypes :: k).
SingI metatypes =>
[Char]
-> Props (MetaTypes metatypes) -> Property (MetaTypes metatypes)
propertyList [Char]
"spamassassin configured" (Props DebianLike -> Property DebianLike)
-> Props DebianLike -> Property DebianLike
forall a b. (a -> b) -> a -> b
$ Props UnixLike
props
	Props UnixLike
-> Property DebianLike
-> Props
     (MetaTypes
        (Combine
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& Property DebianLike
spamdEnabled
	Props DebianLike
-> Property DebianLike
-> Props
     (Sing
        (Combine
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char]
"/etc/default/spamd" [Char] -> [[Char]] -> Property UnixLike
`File.containsLines`
		[ [Char]
"# Propellor deployed"
		, [Char]
"OPTIONS=\"--create-prefs --max-children 5 --helper-home-dir\""
		, [Char]
"NICE=\"--nicelevel 15\""
		] 
		Property UnixLike -> [Char] -> Property UnixLike
forall p. IsProp p => p -> [Char] -> p
`describe` [Char]
"spamd configured"
		Property UnixLike
-> Property DebianLike
-> CombinedType (Property UnixLike) (Property DebianLike)
forall x y. Combines x y => x -> y -> CombinedType x y
`onChange` [Char] -> Property DebianLike
Service.restarted [Char]
"spamd"
	Props
  (Sing
     (Combine
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
-> Property DebianLike
-> Props
     (MetaTypes
        (Combine
           (Combine
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char]
"/etc/default/spamassassin" [Char] -> [[Char]] -> Property UnixLike
`File.containsLines`
		[ [Char]
"# Propellor deployed"
		, [Char]
"CRON=1"
		]
		Property UnixLike -> [Char] -> Property UnixLike
forall p. IsProp p => p -> [Char] -> p
`describe` [Char]
"spamassassin configured"
		Property UnixLike
-> Property DebianLike
-> CombinedType (Property UnixLike) (Property DebianLike)
forall x y. Combines x y => x -> y -> CombinedType x y
`requires` [Char] -> Property DebianLike
Apt.serviceInstalledRunning [Char]
"cron"

kiteMailServer :: Property (HasInfo + DebianLike)
kiteMailServer :: Property (HasInfo + DebianLike)
kiteMailServer = [Char]
-> Props
     (MetaTypes
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
-> Property
     (MetaTypes
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
forall {k} (metatypes :: k).
SingI metatypes =>
[Char]
-> Props (MetaTypes metatypes) -> Property (MetaTypes metatypes)
propertyList [Char]
"kitenet.net mail server" (Props
   (MetaTypes
      '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
 -> Property
      (MetaTypes
         '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
-> Props
     (MetaTypes
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
-> Property
     (MetaTypes
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
forall a b. (a -> b) -> a -> b
$ Props UnixLike
props
	Props UnixLike
-> Property DebianLike
-> Props
     (MetaTypes
        (Combine
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& Property DebianLike
Postfix.installed
	Props DebianLike
-> Property DebianLike
-> Props
     (Sing
        (Combine
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [[Char]] -> Property DebianLike
Apt.installed [[Char]
"postfix-pcre"]
	Props
  (Sing
     (Combine
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
-> Property DebianLike
-> Props
     (MetaTypes
        (Combine
           (Combine
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char] -> Property DebianLike
Apt.serviceInstalledRunning [Char]
"postgrey"
	Props
  (MetaTypes
     (Combine
        (Combine
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
-> Property DebianLike
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& Property DebianLike
spamassassinConfigured
	Props
  (Sing
     (Combine
        (Combine
           (Combine
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
-> Property DebianLike
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 (Combine
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char] -> Property DebianLike
Apt.serviceInstalledRunning [Char]
"spamass-milter"
	-- Add -m to prevent modifying messages Subject or body.
	Props
  (Sing
     (Combine
        (Combine
           (Combine
              (Combine
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
-> Property DebianLike
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char]
"/etc/default/spamass-milter" [Char] -> [Char] -> Property UnixLike
`File.containsLine`
		[Char]
"OPTIONS=\"-m -u spamass-milter -i 127.0.0.1\""
		Property UnixLike
-> Property DebianLike
-> CombinedType (Property UnixLike) (Property DebianLike)
forall x y. Combines x y => x -> y -> CombinedType x y
`onChange` [Char] -> Property DebianLike
Service.restarted [Char]
"spamass-milter"
		Property DebianLike -> [Char] -> Property DebianLike
forall p. IsProp p => p -> [Char] -> p
`describe` [Char]
"spamass-milter configured"

	Props
  (Sing
     (Combine
        (Combine
           (Combine
              (Combine
                 (Combine
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
-> Property DebianLike
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char] -> Property DebianLike
Apt.serviceInstalledRunning [Char]
"amavisd-milter"
	Props
  (Sing
     (Combine
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
-> Property DebianLike
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char]
"/etc/default/amavisd-milter" [Char] -> [[Char]] -> Property UnixLike
`File.containsLines`
		[ [Char]
"# Propellor deployed"
		, [Char]
"MILTERSOCKET=/var/spool/postfix/amavis/amavis.sock"
		, [Char]
"MILTERSOCKETOWNER=\"postfix:postfix\""
		, [Char]
"MILTERSOCKETMODE=\"0660\""
		]
		Property UnixLike
-> Property DebianLike
-> CombinedType (Property UnixLike) (Property DebianLike)
forall x y. Combines x y => x -> y -> CombinedType x y
`onChange` [Char] -> Property DebianLike
Service.restarted [Char]
"amavisd-milter"
		Property DebianLike -> [Char] -> Property DebianLike
forall p. IsProp p => p -> [Char] -> p
`describe` [Char]
"amavisd-milter configured for postfix"
	Props
  (Sing
     (Combine
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
-> Property DebianLike
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char] -> Property DebianLike
Apt.serviceInstalledRunning [Char]
"clamav-freshclam"
	-- Workaround https://bugs.debian.org/569150
	Props
  (Sing
     (Combine
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
-> Property DebianLike
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char] -> Times -> User -> [Char] -> [Char] -> Property DebianLike
Cron.niceJob [Char]
"amavis-expire" Times
Cron.Daily ([Char] -> User
User [Char]
"root") [Char]
"/"
		[Char]
"find /var/lib/amavis/virusmails/ -type f -ctime +2 -delete"

	Props
  (Sing
     (Combine
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
-> Property
     (MetaTypes
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                                      '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& Property
  (MetaTypes
     '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
Property (HasInfo + DebianLike)
dkimInstalled

	Props
  (Sing
     (Combine
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
-> Property DebianLike
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      (Combine
                                         '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                                         '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                      '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& Property DebianLike
Postfix.saslAuthdInstalled
	Props
  (Sing
     (Combine
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                                      '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
-> Property DebianLike
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      (Combine
                                         (Combine
                                            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                                            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                         '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                      '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& Property DebianLike
Fail2Ban.installed
	Props
  (Sing
     (Combine
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      (Combine
                                         '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                                         '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                      '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
-> Property DebianLike
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      (Combine
                                         (Combine
                                            (Combine
                                               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                                               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                         '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                      '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char] -> Property DebianLike
Fail2Ban.jailEnabled [Char]
"postfix-sasl"
	Props
  (Sing
     (Combine
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      (Combine
                                         (Combine
                                            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                                            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                         '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                      '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
-> Property UnixLike
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      (Combine
                                         (Combine
                                            (Combine
                                               (Combine
                                                  '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                                                  '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                         '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                      '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char]
"/etc/default/saslauthd" [Char] -> [Char] -> Property UnixLike
`File.containsLine` [Char]
"MECHANISMS=sasldb"
	Props
  (Sing
     (Combine
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      (Combine
                                         (Combine
                                            (Combine
                                               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                                               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                         '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                      '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
-> Property
     (MetaTypes
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      (Combine
                                         (Combine
                                            (Combine
                                               (Combine
                                                  (Combine
                                                     '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                                                     '[ 'Targeting 'OSDebian,
                                                        'Targeting 'OSBuntish])
                                                  '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                         '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                      '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                          '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
           '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char] -> User -> Property (HasInfo + UnixLike)
Postfix.saslPasswdSet [Char]
"kitenet.net" ([Char] -> User
User [Char]
"errol")
	Props
  (Sing
     (Combine
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      (Combine
                                         (Combine
                                            (Combine
                                               (Combine
                                                  '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                                                  '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                         '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                      '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
-> Property
     (MetaTypes
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      (Combine
                                         (Combine
                                            (Combine
                                               (Combine
                                                  (Combine
                                                     (Combine
                                                        '[ 'Targeting 'OSDebian,
                                                           'Targeting 'OSBuntish]
                                                        '[ 'Targeting 'OSDebian,
                                                           'Targeting 'OSBuntish])
                                                     '[ 'Targeting 'OSDebian,
                                                        'Targeting 'OSBuntish])
                                                  '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                         '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                      '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                             '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
              '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
           '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char] -> User -> Property (HasInfo + UnixLike)
Postfix.saslPasswdSet [Char]
"kitenet.net" ([Char] -> User
User [Char]
"joey")

	Props
  (Sing
     (Combine
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      (Combine
                                         (Combine
                                            (Combine
                                               (Combine
                                                  (Combine
                                                     '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                                                     '[ 'Targeting 'OSDebian,
                                                        'Targeting 'OSBuntish])
                                                  '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                         '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                      '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                          '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
           '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
-> Property DebianLike
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      (Combine
                                         (Combine
                                            (Combine
                                               (Combine
                                                  (Combine
                                                     (Combine
                                                        (Combine
                                                           '[ 'Targeting 'OSDebian,
                                                              'Targeting 'OSBuntish]
                                                           '[ 'Targeting 'OSDebian,
                                                              'Targeting 'OSBuntish])
                                                        '[ 'Targeting 'OSDebian,
                                                           'Targeting 'OSBuntish])
                                                     '[ 'Targeting 'OSDebian,
                                                        'Targeting 'OSBuntish])
                                                  '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                         '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                      '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                       'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                 '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
              '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [[Char]] -> Property DebianLike
Apt.installed [[Char]
"maildrop"]
	Props
  (Sing
     (Combine
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      (Combine
                                         (Combine
                                            (Combine
                                               (Combine
                                                  (Combine
                                                     (Combine
                                                        '[ 'Targeting 'OSDebian,
                                                           'Targeting 'OSBuntish]
                                                        '[ 'Targeting 'OSDebian,
                                                           'Targeting 'OSBuntish])
                                                     '[ 'Targeting 'OSDebian,
                                                        'Targeting 'OSBuntish])
                                                  '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                         '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                      '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                             '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
              '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
           '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
-> Property UnixLike
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      (Combine
                                         (Combine
                                            (Combine
                                               (Combine
                                                  (Combine
                                                     (Combine
                                                        (Combine
                                                           (Combine
                                                              '[ 'Targeting 'OSDebian,
                                                                 'Targeting 'OSBuntish]
                                                              '[ 'Targeting 'OSDebian,
                                                                 'Targeting 'OSBuntish])
                                                           '[ 'Targeting 'OSDebian,
                                                              'Targeting 'OSBuntish])
                                                        '[ 'Targeting 'OSDebian,
                                                           'Targeting 'OSBuntish])
                                                     '[ 'Targeting 'OSDebian,
                                                        'Targeting 'OSBuntish])
                                                  '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                         '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                      '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                   '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                          'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                    '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                       'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                 '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char]
"/etc/maildroprc" [Char] -> [[Char]] -> Property UnixLike
`File.hasContent`
		[ [Char]
"# Global maildrop filter file (deployed with propellor)"
		, [Char]
"DEFAULT=\"$HOME/Maildir\""
		, [Char]
"MAILBOX=\"$DEFAULT/.\""
		, [Char]
"# Filter spam to a spam folder, unless .keepspam exists"
		, [Char]
"if (/^X-Spam-Status: Yes/)"
		, [Char]
"{"
		, [Char]
"  `test -e \"$HOME/.keepspam\"`"
		, [Char]
"  if ( $RETURNCODE != 0 )"
		, [Char]
"  to ${MAILBOX}spam"
		, [Char]
"}"
		]
		Property UnixLike -> [Char] -> Property UnixLike
forall p. IsProp p => p -> [Char] -> p
`describe` [Char]
"maildrop configured"

	Props
  (Sing
     (Combine
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      (Combine
                                         (Combine
                                            (Combine
                                               (Combine
                                                  (Combine
                                                     (Combine
                                                        (Combine
                                                           '[ 'Targeting 'OSDebian,
                                                              'Targeting 'OSBuntish]
                                                           '[ 'Targeting 'OSDebian,
                                                              'Targeting 'OSBuntish])
                                                        '[ 'Targeting 'OSDebian,
                                                           'Targeting 'OSBuntish])
                                                     '[ 'Targeting 'OSDebian,
                                                        'Targeting 'OSBuntish])
                                                  '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                         '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                      '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                       'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                 '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
              '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
-> CombinedType
     (Property
        (MetaTypes
           '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
     (Property UnixLike)
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      (Combine
                                         (Combine
                                            (Combine
                                               (Combine
                                                  (Combine
                                                     (Combine
                                                        (Combine
                                                           (Combine
                                                              (Combine
                                                                 '[ 'Targeting 'OSDebian,
                                                                    'Targeting 'OSBuntish]
                                                                 '[ 'Targeting 'OSDebian,
                                                                    'Targeting 'OSBuntish])
                                                              '[ 'Targeting 'OSDebian,
                                                                 'Targeting 'OSBuntish])
                                                           '[ 'Targeting 'OSDebian,
                                                              'Targeting 'OSBuntish])
                                                        '[ 'Targeting 'OSDebian,
                                                           'Targeting 'OSBuntish])
                                                     '[ 'Targeting 'OSDebian,
                                                        'Targeting 'OSBuntish])
                                                  '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                         '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                      '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                             'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                       '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                          'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                    '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                       'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
           '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char]
"/etc/aliases" [Char] -> Context -> Property (HasInfo + UnixLike)
forall c.
IsContext c =>
[Char] -> c -> Property (HasInfo + UnixLike)
`File.hasPrivContentExposed` Context
ctx
		Property
  (MetaTypes
     '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
        'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
-> Property UnixLike
-> CombinedType
     (Property
        (MetaTypes
           '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
     (Property UnixLike)
forall x y. Combines x y => x -> y -> CombinedType x y
`onChange` Property UnixLike
Postfix.newaliases
	Props
  (Sing
     (Combine
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      (Combine
                                         (Combine
                                            (Combine
                                               (Combine
                                                  (Combine
                                                     (Combine
                                                        (Combine
                                                           (Combine
                                                              '[ 'Targeting 'OSDebian,
                                                                 'Targeting 'OSBuntish]
                                                              '[ 'Targeting 'OSDebian,
                                                                 'Targeting 'OSBuntish])
                                                           '[ 'Targeting 'OSDebian,
                                                              'Targeting 'OSBuntish])
                                                        '[ 'Targeting 'OSDebian,
                                                           'Targeting 'OSBuntish])
                                                     '[ 'Targeting 'OSDebian,
                                                        'Targeting 'OSBuntish])
                                                  '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                         '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                      '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                   '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                          'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                    '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                       'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                 '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
-> Property
     (MetaTypes
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      (Combine
                                         (Combine
                                            (Combine
                                               (Combine
                                                  (Combine
                                                     (Combine
                                                        (Combine
                                                           (Combine
                                                              (Combine
                                                                 (Combine
                                                                    '[ 'Targeting 'OSDebian,
                                                                       'Targeting 'OSBuntish]
                                                                    '[ 'Targeting 'OSDebian,
                                                                       'Targeting 'OSBuntish])
                                                                 '[ 'Targeting 'OSDebian,
                                                                    'Targeting 'OSBuntish])
                                                              '[ 'Targeting 'OSDebian,
                                                                 'Targeting 'OSBuntish])
                                                           '[ 'Targeting 'OSDebian,
                                                              'Targeting 'OSBuntish])
                                                        '[ 'Targeting 'OSDebian,
                                                           'Targeting 'OSBuntish])
                                                     '[ 'Targeting 'OSDebian,
                                                        'Targeting 'OSBuntish])
                                                  '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                         '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                      '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                          '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                             'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                       '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                          'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
              '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
           '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& Context -> Property (HasInfo + UnixLike)
hasPostfixCert Context
ctx

	Props
  (Sing
     (Combine
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      (Combine
                                         (Combine
                                            (Combine
                                               (Combine
                                                  (Combine
                                                     (Combine
                                                        (Combine
                                                           (Combine
                                                              (Combine
                                                                 '[ 'Targeting 'OSDebian,
                                                                    'Targeting 'OSBuntish]
                                                                 '[ 'Targeting 'OSDebian,
                                                                    'Targeting 'OSBuntish])
                                                              '[ 'Targeting 'OSDebian,
                                                                 'Targeting 'OSBuntish])
                                                           '[ 'Targeting 'OSDebian,
                                                              'Targeting 'OSBuntish])
                                                        '[ 'Targeting 'OSDebian,
                                                           'Targeting 'OSBuntish])
                                                     '[ 'Targeting 'OSDebian,
                                                        'Targeting 'OSBuntish])
                                                  '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                         '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                      '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                             'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                       '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                          'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                    '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                       'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
           '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
-> Property DebianLike
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      (Combine
                                         (Combine
                                            (Combine
                                               (Combine
                                                  (Combine
                                                     (Combine
                                                        (Combine
                                                           (Combine
                                                              (Combine
                                                                 (Combine
                                                                    (Combine
                                                                       '[ 'Targeting 'OSDebian,
                                                                          'Targeting 'OSBuntish]
                                                                       '[ 'Targeting 'OSDebian,
                                                                          'Targeting 'OSBuntish])
                                                                    '[ 'Targeting 'OSDebian,
                                                                       'Targeting 'OSBuntish])
                                                                 '[ 'Targeting 'OSDebian,
                                                                    'Targeting 'OSBuntish])
                                                              '[ 'Targeting 'OSDebian,
                                                                 'Targeting 'OSBuntish])
                                                           '[ 'Targeting 'OSDebian,
                                                              'Targeting 'OSBuntish])
                                                        '[ 'Targeting 'OSDebian,
                                                           'Targeting 'OSBuntish])
                                                     '[ 'Targeting 'OSDebian,
                                                        'Targeting 'OSBuntish])
                                                  '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                            '[ 'WithInfo, 'Targeting 'OSDebian,
                                               'Targeting 'OSBuntish])
                                         '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                      '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                   'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                             '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                          '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                             'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                       'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                 '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
              '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char]
"/etc/postfix/mydomain" [Char] -> [[Char]] -> Property UnixLike
`File.containsLines`
		[ [Char]
"/.*\\.kitenet\\.net/\tOK"
		, [Char]
"/ikiwiki\\.info/\tOK"
		, [Char]
"/joeyh\\.name/\tOK"
		]
		Property UnixLike
-> Property DebianLike
-> CombinedType (Property UnixLike) (Property DebianLike)
forall x y. Combines x y => x -> y -> CombinedType x y
`onChange` Property DebianLike
Postfix.reloaded
		Property DebianLike -> [Char] -> Property DebianLike
forall p. IsProp p => p -> [Char] -> p
`describe` [Char]
"postfix mydomain file configured"
	Props
  (Sing
     (Combine
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      (Combine
                                         (Combine
                                            (Combine
                                               (Combine
                                                  (Combine
                                                     (Combine
                                                        (Combine
                                                           (Combine
                                                              (Combine
                                                                 (Combine
                                                                    '[ 'Targeting 'OSDebian,
                                                                       'Targeting 'OSBuntish]
                                                                    '[ 'Targeting 'OSDebian,
                                                                       'Targeting 'OSBuntish])
                                                                 '[ 'Targeting 'OSDebian,
                                                                    'Targeting 'OSBuntish])
                                                              '[ 'Targeting 'OSDebian,
                                                                 'Targeting 'OSBuntish])
                                                           '[ 'Targeting 'OSDebian,
                                                              'Targeting 'OSBuntish])
                                                        '[ 'Targeting 'OSDebian,
                                                           'Targeting 'OSBuntish])
                                                     '[ 'Targeting 'OSDebian,
                                                        'Targeting 'OSBuntish])
                                                  '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                         '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                      '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                          '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                             'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                       '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                          'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
              '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
           '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
-> Property DebianLike
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      (Combine
                                         (Combine
                                            (Combine
                                               (Combine
                                                  (Combine
                                                     (Combine
                                                        (Combine
                                                           (Combine
                                                              (Combine
                                                                 (Combine
                                                                    (Combine
                                                                       (Combine
                                                                          '[ 'Targeting 'OSDebian,
                                                                             'Targeting 'OSBuntish]
                                                                          '[ 'Targeting 'OSDebian,
                                                                             'Targeting 'OSBuntish])
                                                                       '[ 'Targeting 'OSDebian,
                                                                          'Targeting 'OSBuntish])
                                                                    '[ 'Targeting 'OSDebian,
                                                                       'Targeting 'OSBuntish])
                                                                 '[ 'Targeting 'OSDebian,
                                                                    'Targeting 'OSBuntish])
                                                              '[ 'Targeting 'OSDebian,
                                                                 'Targeting 'OSBuntish])
                                                           '[ 'Targeting 'OSDebian,
                                                              'Targeting 'OSBuntish])
                                                        '[ 'Targeting 'OSDebian,
                                                           'Targeting 'OSBuntish])
                                                     '[ 'Targeting 'OSDebian,
                                                        'Targeting 'OSBuntish])
                                                  '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                               '[ 'WithInfo, 'Targeting 'OSDebian,
                                                  'Targeting 'OSBuntish])
                                            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                         '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                      '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                      'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                                '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                   'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                             '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                          'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                    '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                       'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                 '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char]
"/etc/postfix/obscure_client_relay.pcre" [Char] -> [[Char]] -> Property UnixLike
`File.hasContent`
		-- Remove received lines for mails relayed from trusted
		-- clients. These can be a privacy violation, or trigger
		-- spam filters.
		[ [Char]
"/^Received: from ([^.]+)\\.kitenet\\.net.*using TLS.*by kitenet\\.net \\(([^)]+)\\) with (E?SMTPS?A?) id ([A-F[:digit:]]+)(.*)/ IGNORE"
		-- Munge local Received line for postfix running on a
		-- trusted client that relays through. These can trigger
		-- spam filters.
		, [Char]
"/^Received: by ([^.]+)\\.kitenet\\.net.*/ REPLACE X-Question: 42"
		]
		Property UnixLike
-> Property DebianLike
-> CombinedType (Property UnixLike) (Property DebianLike)
forall x y. Combines x y => x -> y -> CombinedType x y
`onChange` Property DebianLike
Postfix.reloaded
		Property DebianLike -> [Char] -> Property DebianLike
forall p. IsProp p => p -> [Char] -> p
`describe` [Char]
"postfix obscure_client_relay file configured"
	Props
  (Sing
     (Combine
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      (Combine
                                         (Combine
                                            (Combine
                                               (Combine
                                                  (Combine
                                                     (Combine
                                                        (Combine
                                                           (Combine
                                                              (Combine
                                                                 (Combine
                                                                    (Combine
                                                                       '[ 'Targeting 'OSDebian,
                                                                          'Targeting 'OSBuntish]
                                                                       '[ 'Targeting 'OSDebian,
                                                                          'Targeting 'OSBuntish])
                                                                    '[ 'Targeting 'OSDebian,
                                                                       'Targeting 'OSBuntish])
                                                                 '[ 'Targeting 'OSDebian,
                                                                    'Targeting 'OSBuntish])
                                                              '[ 'Targeting 'OSDebian,
                                                                 'Targeting 'OSBuntish])
                                                           '[ 'Targeting 'OSDebian,
                                                              'Targeting 'OSBuntish])
                                                        '[ 'Targeting 'OSDebian,
                                                           'Targeting 'OSBuntish])
                                                     '[ 'Targeting 'OSDebian,
                                                        'Targeting 'OSBuntish])
                                                  '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                            '[ 'WithInfo, 'Targeting 'OSDebian,
                                               'Targeting 'OSBuntish])
                                         '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                      '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                   'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                             '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                          '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                             'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                       'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                 '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
              '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
-> CombinedType (Property UnixLike) (Property DebianLike)
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      (Combine
                                         (Combine
                                            (Combine
                                               (Combine
                                                  (Combine
                                                     (Combine
                                                        (Combine
                                                           (Combine
                                                              (Combine
                                                                 (Combine
                                                                    (Combine
                                                                       (Combine
                                                                          (Combine
                                                                             '[ 'Targeting
                                                                                  'OSDebian,
                                                                                'Targeting
                                                                                  'OSBuntish]
                                                                             '[ 'Targeting
                                                                                  'OSDebian,
                                                                                'Targeting
                                                                                  'OSBuntish])
                                                                          '[ 'Targeting 'OSDebian,
                                                                             'Targeting 'OSBuntish])
                                                                       '[ 'Targeting 'OSDebian,
                                                                          'Targeting 'OSBuntish])
                                                                    '[ 'Targeting 'OSDebian,
                                                                       'Targeting 'OSBuntish])
                                                                 '[ 'Targeting 'OSDebian,
                                                                    'Targeting 'OSBuntish])
                                                              '[ 'Targeting 'OSDebian,
                                                                 'Targeting 'OSBuntish])
                                                           '[ 'Targeting 'OSDebian,
                                                              'Targeting 'OSBuntish])
                                                        '[ 'Targeting 'OSDebian,
                                                           'Targeting 'OSBuntish])
                                                     '[ 'Targeting 'OSDebian,
                                                        'Targeting 'OSBuntish])
                                                  '[ 'WithInfo, 'Targeting 'OSDebian,
                                                     'Targeting 'OSBuntish])
                                               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                         '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                      '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                         'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                                   '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                      'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                                '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                   'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                             'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                       '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                          'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                    '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                       'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char]
-> ([Char] -> Property UnixLike)
-> CombinedType (Property UnixLike) (Property UnixLike)
forall x.
Combines (Property x) (Property UnixLike) =>
[Char]
-> ([Char] -> Property x)
-> CombinedType (Property x) (Property UnixLike)
Postfix.mappedFile [Char]
"/etc/postfix/virtual"
		(([Char] -> [[Char]] -> Property UnixLike)
-> [[Char]] -> [Char] -> Property UnixLike
forall a b c. (a -> b -> c) -> b -> a -> c
flip [Char] -> [[Char]] -> Property UnixLike
File.containsLines
			[ [Char]
"# *@joeyh.name to joey"
			, [Char]
"@joeyh.name\tjoey"
			]
		) Property UnixLike -> [Char] -> Property UnixLike
forall p. IsProp p => p -> [Char] -> p
`describe` [Char]
"postfix virtual file configured"
		Property UnixLike
-> Property DebianLike
-> CombinedType (Property UnixLike) (Property DebianLike)
forall x y. Combines x y => x -> y -> CombinedType x y
`onChange` Property DebianLike
Postfix.reloaded
	Props
  (Sing
     (Combine
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      (Combine
                                         (Combine
                                            (Combine
                                               (Combine
                                                  (Combine
                                                     (Combine
                                                        (Combine
                                                           (Combine
                                                              (Combine
                                                                 (Combine
                                                                    (Combine
                                                                       (Combine
                                                                          '[ 'Targeting 'OSDebian,
                                                                             'Targeting 'OSBuntish]
                                                                          '[ 'Targeting 'OSDebian,
                                                                             'Targeting 'OSBuntish])
                                                                       '[ 'Targeting 'OSDebian,
                                                                          'Targeting 'OSBuntish])
                                                                    '[ 'Targeting 'OSDebian,
                                                                       'Targeting 'OSBuntish])
                                                                 '[ 'Targeting 'OSDebian,
                                                                    'Targeting 'OSBuntish])
                                                              '[ 'Targeting 'OSDebian,
                                                                 'Targeting 'OSBuntish])
                                                           '[ 'Targeting 'OSDebian,
                                                              'Targeting 'OSBuntish])
                                                        '[ 'Targeting 'OSDebian,
                                                           'Targeting 'OSBuntish])
                                                     '[ 'Targeting 'OSDebian,
                                                        'Targeting 'OSBuntish])
                                                  '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                               '[ 'WithInfo, 'Targeting 'OSDebian,
                                                  'Targeting 'OSBuntish])
                                            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                         '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                      '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                      'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                                '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                   'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                             '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                          'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                    '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                       'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                 '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
-> CombinedType
     (Property
        (MetaTypes
           '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
     (Property UnixLike)
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      (Combine
                                         (Combine
                                            (Combine
                                               (Combine
                                                  (Combine
                                                     (Combine
                                                        (Combine
                                                           (Combine
                                                              (Combine
                                                                 (Combine
                                                                    (Combine
                                                                       (Combine
                                                                          (Combine
                                                                             (Combine
                                                                                '[ 'Targeting
                                                                                     'OSDebian,
                                                                                   'Targeting
                                                                                     'OSBuntish]
                                                                                '[ 'Targeting
                                                                                     'OSDebian,
                                                                                   'Targeting
                                                                                     'OSBuntish])
                                                                             '[ 'Targeting
                                                                                  'OSDebian,
                                                                                'Targeting
                                                                                  'OSBuntish])
                                                                          '[ 'Targeting 'OSDebian,
                                                                             'Targeting 'OSBuntish])
                                                                       '[ 'Targeting 'OSDebian,
                                                                          'Targeting 'OSBuntish])
                                                                    '[ 'Targeting 'OSDebian,
                                                                       'Targeting 'OSBuntish])
                                                                 '[ 'Targeting 'OSDebian,
                                                                    'Targeting 'OSBuntish])
                                                              '[ 'Targeting 'OSDebian,
                                                                 'Targeting 'OSBuntish])
                                                           '[ 'Targeting 'OSDebian,
                                                              'Targeting 'OSBuntish])
                                                        '[ 'Targeting 'OSDebian,
                                                           'Targeting 'OSBuntish])
                                                     '[ 'WithInfo, 'Targeting 'OSDebian,
                                                        'Targeting 'OSBuntish])
                                                  '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                         '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                            'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                                      '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                         'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                                   '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                      'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                          '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                             'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                       '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                          'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char]
-> ([Char]
    -> Property
         (MetaTypes
            '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
               'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
-> CombinedType
     (Property
        (MetaTypes
           '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
     (Property UnixLike)
forall x.
Combines (Property x) (Property UnixLike) =>
[Char]
-> ([Char] -> Property x)
-> CombinedType (Property x) (Property UnixLike)
Postfix.mappedFile [Char]
"/etc/postfix/relay_clientcerts"
		(([Char]
 -> Context
 -> Property
      (MetaTypes
         '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
            'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
-> Context
-> [Char]
-> Property
     (MetaTypes
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
forall a b c. (a -> b -> c) -> b -> a -> c
flip [Char]
-> Context
-> Property
     (MetaTypes
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
[Char] -> Context -> Property (HasInfo + UnixLike)
forall c.
IsContext c =>
[Char] -> c -> Property (HasInfo + UnixLike)
File.hasPrivContentExposed Context
ctx)
	Props
  (Sing
     (Combine
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      (Combine
                                         (Combine
                                            (Combine
                                               (Combine
                                                  (Combine
                                                     (Combine
                                                        (Combine
                                                           (Combine
                                                              (Combine
                                                                 (Combine
                                                                    (Combine
                                                                       (Combine
                                                                          (Combine
                                                                             '[ 'Targeting
                                                                                  'OSDebian,
                                                                                'Targeting
                                                                                  'OSBuntish]
                                                                             '[ 'Targeting
                                                                                  'OSDebian,
                                                                                'Targeting
                                                                                  'OSBuntish])
                                                                          '[ 'Targeting 'OSDebian,
                                                                             'Targeting 'OSBuntish])
                                                                       '[ 'Targeting 'OSDebian,
                                                                          'Targeting 'OSBuntish])
                                                                    '[ 'Targeting 'OSDebian,
                                                                       'Targeting 'OSBuntish])
                                                                 '[ 'Targeting 'OSDebian,
                                                                    'Targeting 'OSBuntish])
                                                              '[ 'Targeting 'OSDebian,
                                                                 'Targeting 'OSBuntish])
                                                           '[ 'Targeting 'OSDebian,
                                                              'Targeting 'OSBuntish])
                                                        '[ 'Targeting 'OSDebian,
                                                           'Targeting 'OSBuntish])
                                                     '[ 'Targeting 'OSDebian,
                                                        'Targeting 'OSBuntish])
                                                  '[ 'WithInfo, 'Targeting 'OSDebian,
                                                     'Targeting 'OSBuntish])
                                               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                         '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                      '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                         'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                                   '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                      'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                                '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                   'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                             'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                       '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                          'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                    '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                       'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
-> CombinedType (Property UnixLike) (Property DebianLike)
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      (Combine
                                         (Combine
                                            (Combine
                                               (Combine
                                                  (Combine
                                                     (Combine
                                                        (Combine
                                                           (Combine
                                                              (Combine
                                                                 (Combine
                                                                    (Combine
                                                                       (Combine
                                                                          (Combine
                                                                             (Combine
                                                                                (Combine
                                                                                   '[ 'Targeting
                                                                                        'OSDebian,
                                                                                      'Targeting
                                                                                        'OSBuntish]
                                                                                   '[ 'Targeting
                                                                                        'OSDebian,
                                                                                      'Targeting
                                                                                        'OSBuntish])
                                                                                '[ 'Targeting
                                                                                     'OSDebian,
                                                                                   'Targeting
                                                                                     'OSBuntish])
                                                                             '[ 'Targeting
                                                                                  'OSDebian,
                                                                                'Targeting
                                                                                  'OSBuntish])
                                                                          '[ 'Targeting 'OSDebian,
                                                                             'Targeting 'OSBuntish])
                                                                       '[ 'Targeting 'OSDebian,
                                                                          'Targeting 'OSBuntish])
                                                                    '[ 'Targeting 'OSDebian,
                                                                       'Targeting 'OSBuntish])
                                                                 '[ 'Targeting 'OSDebian,
                                                                    'Targeting 'OSBuntish])
                                                              '[ 'Targeting 'OSDebian,
                                                                 'Targeting 'OSBuntish])
                                                           '[ 'Targeting 'OSDebian,
                                                              'Targeting 'OSBuntish])
                                                        '[ 'WithInfo, 'Targeting 'OSDebian,
                                                           'Targeting 'OSBuntish])
                                                     '[ 'Targeting 'OSDebian,
                                                        'Targeting 'OSBuntish])
                                                  '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                               'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                                         '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                            'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                                      '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                         'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                   'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                             '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                          '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                             'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char]
Postfix.mainCfFile [Char] -> [[Char]] -> Property UnixLike
`File.containsLines`
		[ [Char]
"myhostname = kitenet.net"
		, [Char]
"mydomain = $myhostname"
		, [Char]
"append_dot_mydomain = no"
		, [Char]
"myorigin = kitenet.net"
		, [Char]
"mydestination = $myhostname, localhost.$mydomain, $mydomain, kite.$mydomain., localhost, regexp:$config_directory/mydomain"
		, [Char]
"mailbox_command = maildrop"
		, [Char]
"virtual_alias_maps = hash:/etc/postfix/virtual"

		, [Char]
"# Allow clients with trusted certs to relay mail through."
		, [Char]
"relay_clientcerts = hash:/etc/postfix/relay_clientcerts"
		, [Char]
"smtpd_relay_restrictions = permit_mynetworks,permit_tls_clientcerts,permit_sasl_authenticated,reject_unauth_destination"

		, [Char]
"# Filter out client relay lines from headers."
		, [Char]
"header_checks = pcre:$config_directory/obscure_client_relay.pcre"

		, [Char]
"# Password auth for relaying"
		, [Char]
"smtpd_sasl_auth_enable = yes"
		, [Char]
"smtpd_sasl_security_options = noanonymous"
		, [Char]
"smtpd_sasl_local_domain = kitenet.net"

		, [Char]
"# Enable postgrey and sasl auth and client certs."
		, [Char]
"smtpd_recipient_restrictions = permit_tls_clientcerts,permit_sasl_authenticated,,permit_mynetworks,reject_unauth_destination,check_policy_service inet:127.0.0.1:10023"

		, [Char]
"# Enable spamass-milter, amavis-milter (opendkim is not enabled because it causes mails forwarded from eg gmail to be rejected)"
		, [Char]
"smtpd_milters = unix:/spamass/spamass.sock unix:amavis/amavis.sock"
		, [Char]
"# opendkim is used for outgoing mail"
		, [Char]
"non_smtpd_milters = inet:localhost:8891"
		, [Char]
"milter_connect_macros = j {daemon_name} v {if_name} _"
		, [Char]
"# If a milter is broken, fall back to just accepting mail."
		, [Char]
"milter_default_action = accept"

		, [Char]
"# TLS setup -- server"
		, [Char]
"smtpd_tls_CAfile = /etc/ssl/certs/joeyca.pem"
		, [Char]
"smtpd_tls_cert_file = /etc/ssl/certs/postfix.pem"
		, [Char]
"smtpd_tls_key_file = /etc/ssl/private/postfix.pem"
		, [Char]
"smtpd_tls_loglevel = 1"
		, [Char]
"smtpd_tls_received_header = yes"
		, [Char]
"smtpd_use_tls = yes"
		, [Char]
"smtpd_tls_ask_ccert = yes"
		, [Char]
"smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache"

		, [Char]
"# TLS setup -- client"
		, [Char]
"smtp_tls_CAfile = /etc/ssl/certs/joeyca.pem"
		, [Char]
"smtp_tls_cert_file = /etc/ssl/certs/postfix.pem"
		, [Char]
"smtp_tls_key_file = /etc/ssl/private/postfix.pem"
		, [Char]
"smtp_tls_loglevel = 1"
		, [Char]
"smtp_use_tls = yes"
		, [Char]
"smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache"

		, [Char]
"# Allow larger attachments, up to 200 mb."
		, [Char]
"# (Avoid setting too high; the postfix queue must have"
		, [Char]
"# 1.5 times this much space free, or postfix will reject"
		, [Char]
"# ALL mail!)"
		, [Char]
"message_size_limit = 204800000"
		, [Char]
"virtual_mailbox_limit = 20480000"
		]
		Property UnixLike
-> Property UnixLike
-> CombinedType (Property UnixLike) (Property UnixLike)
forall x y. Combines x y => x -> y -> CombinedType x y
`onChange` Property UnixLike
Postfix.dedupMainCf
		Property UnixLike
-> Property DebianLike
-> CombinedType (Property UnixLike) (Property DebianLike)
forall x y. Combines x y => x -> y -> CombinedType x y
`onChange` Property DebianLike
Postfix.reloaded
		CombinedType (Property UnixLike) (Property DebianLike)
-> [Char] -> CombinedType (Property UnixLike) (Property DebianLike)
forall p. IsProp p => p -> [Char] -> p
`describe` [Char]
"postfix configured"

	Props
  (Sing
     (Combine
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      (Combine
                                         (Combine
                                            (Combine
                                               (Combine
                                                  (Combine
                                                     (Combine
                                                        (Combine
                                                           (Combine
                                                              (Combine
                                                                 (Combine
                                                                    (Combine
                                                                       (Combine
                                                                          (Combine
                                                                             (Combine
                                                                                '[ 'Targeting
                                                                                     'OSDebian,
                                                                                   'Targeting
                                                                                     'OSBuntish]
                                                                                '[ 'Targeting
                                                                                     'OSDebian,
                                                                                   'Targeting
                                                                                     'OSBuntish])
                                                                             '[ 'Targeting
                                                                                  'OSDebian,
                                                                                'Targeting
                                                                                  'OSBuntish])
                                                                          '[ 'Targeting 'OSDebian,
                                                                             'Targeting 'OSBuntish])
                                                                       '[ 'Targeting 'OSDebian,
                                                                          'Targeting 'OSBuntish])
                                                                    '[ 'Targeting 'OSDebian,
                                                                       'Targeting 'OSBuntish])
                                                                 '[ 'Targeting 'OSDebian,
                                                                    'Targeting 'OSBuntish])
                                                              '[ 'Targeting 'OSDebian,
                                                                 'Targeting 'OSBuntish])
                                                           '[ 'Targeting 'OSDebian,
                                                              'Targeting 'OSBuntish])
                                                        '[ 'Targeting 'OSDebian,
                                                           'Targeting 'OSBuntish])
                                                     '[ 'WithInfo, 'Targeting 'OSDebian,
                                                        'Targeting 'OSBuntish])
                                                  '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                         '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                            'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                                      '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                         'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                                   '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                      'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                          '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                             'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                       '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                          'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
-> Property DebianLike
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      (Combine
                                         (Combine
                                            (Combine
                                               (Combine
                                                  (Combine
                                                     (Combine
                                                        (Combine
                                                           (Combine
                                                              (Combine
                                                                 (Combine
                                                                    (Combine
                                                                       (Combine
                                                                          (Combine
                                                                             (Combine
                                                                                (Combine
                                                                                   (Combine
                                                                                      '[ 'Targeting
                                                                                           'OSDebian,
                                                                                         'Targeting
                                                                                           'OSBuntish]
                                                                                      '[ 'Targeting
                                                                                           'OSDebian,
                                                                                         'Targeting
                                                                                           'OSBuntish])
                                                                                   '[ 'Targeting
                                                                                        'OSDebian,
                                                                                      'Targeting
                                                                                        'OSBuntish])
                                                                                '[ 'Targeting
                                                                                     'OSDebian,
                                                                                   'Targeting
                                                                                     'OSBuntish])
                                                                             '[ 'Targeting
                                                                                  'OSDebian,
                                                                                'Targeting
                                                                                  'OSBuntish])
                                                                          '[ 'Targeting 'OSDebian,
                                                                             'Targeting 'OSBuntish])
                                                                       '[ 'Targeting 'OSDebian,
                                                                          'Targeting 'OSBuntish])
                                                                    '[ 'Targeting 'OSDebian,
                                                                       'Targeting 'OSBuntish])
                                                                 '[ 'Targeting 'OSDebian,
                                                                    'Targeting 'OSBuntish])
                                                              '[ 'Targeting 'OSDebian,
                                                                 'Targeting 'OSBuntish])
                                                           '[ 'WithInfo, 'Targeting 'OSDebian,
                                                              'Targeting 'OSBuntish])
                                                        '[ 'Targeting 'OSDebian,
                                                           'Targeting 'OSBuntish])
                                                     '[ 'Targeting 'OSDebian,
                                                        'Targeting 'OSBuntish])
                                                  '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                                  'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                                            '[ 'WithInfo, 'Targeting 'OSDebian,
                                               'Targeting 'OSBuntish, 'Targeting 'OSArchLinux,
                                               'Targeting 'OSFreeBSD])
                                         '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                            'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                                      '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                      'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                                '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                   'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                             '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char] -> Property DebianLike
Apt.serviceInstalledRunning [Char]
"dovecot-imapd"
	Props
  (Sing
     (Combine
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      (Combine
                                         (Combine
                                            (Combine
                                               (Combine
                                                  (Combine
                                                     (Combine
                                                        (Combine
                                                           (Combine
                                                              (Combine
                                                                 (Combine
                                                                    (Combine
                                                                       (Combine
                                                                          (Combine
                                                                             (Combine
                                                                                (Combine
                                                                                   '[ 'Targeting
                                                                                        'OSDebian,
                                                                                      'Targeting
                                                                                        'OSBuntish]
                                                                                   '[ 'Targeting
                                                                                        'OSDebian,
                                                                                      'Targeting
                                                                                        'OSBuntish])
                                                                                '[ 'Targeting
                                                                                     'OSDebian,
                                                                                   'Targeting
                                                                                     'OSBuntish])
                                                                             '[ 'Targeting
                                                                                  'OSDebian,
                                                                                'Targeting
                                                                                  'OSBuntish])
                                                                          '[ 'Targeting 'OSDebian,
                                                                             'Targeting 'OSBuntish])
                                                                       '[ 'Targeting 'OSDebian,
                                                                          'Targeting 'OSBuntish])
                                                                    '[ 'Targeting 'OSDebian,
                                                                       'Targeting 'OSBuntish])
                                                                 '[ 'Targeting 'OSDebian,
                                                                    'Targeting 'OSBuntish])
                                                              '[ 'Targeting 'OSDebian,
                                                                 'Targeting 'OSBuntish])
                                                           '[ 'Targeting 'OSDebian,
                                                              'Targeting 'OSBuntish])
                                                        '[ 'WithInfo, 'Targeting 'OSDebian,
                                                           'Targeting 'OSBuntish])
                                                     '[ 'Targeting 'OSDebian,
                                                        'Targeting 'OSBuntish])
                                                  '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                               'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                                         '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                            'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                                      '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                         'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                   'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                             '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                          '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                             'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
-> Property DebianLike
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      (Combine
                                         (Combine
                                            (Combine
                                               (Combine
                                                  (Combine
                                                     (Combine
                                                        (Combine
                                                           (Combine
                                                              (Combine
                                                                 (Combine
                                                                    (Combine
                                                                       (Combine
                                                                          (Combine
                                                                             (Combine
                                                                                (Combine
                                                                                   (Combine
                                                                                      (Combine
                                                                                         '[ 'Targeting
                                                                                              'OSDebian,
                                                                                            'Targeting
                                                                                              'OSBuntish]
                                                                                         '[ 'Targeting
                                                                                              'OSDebian,
                                                                                            'Targeting
                                                                                              'OSBuntish])
                                                                                      '[ 'Targeting
                                                                                           'OSDebian,
                                                                                         'Targeting
                                                                                           'OSBuntish])
                                                                                   '[ 'Targeting
                                                                                        'OSDebian,
                                                                                      'Targeting
                                                                                        'OSBuntish])
                                                                                '[ 'Targeting
                                                                                     'OSDebian,
                                                                                   'Targeting
                                                                                     'OSBuntish])
                                                                             '[ 'Targeting
                                                                                  'OSDebian,
                                                                                'Targeting
                                                                                  'OSBuntish])
                                                                          '[ 'Targeting 'OSDebian,
                                                                             'Targeting 'OSBuntish])
                                                                       '[ 'Targeting 'OSDebian,
                                                                          'Targeting 'OSBuntish])
                                                                    '[ 'Targeting 'OSDebian,
                                                                       'Targeting 'OSBuntish])
                                                                 '[ 'Targeting 'OSDebian,
                                                                    'Targeting 'OSBuntish])
                                                              '[ 'WithInfo, 'Targeting 'OSDebian,
                                                                 'Targeting 'OSBuntish])
                                                           '[ 'Targeting 'OSDebian,
                                                              'Targeting 'OSBuntish])
                                                        '[ 'Targeting 'OSDebian,
                                                           'Targeting 'OSBuntish])
                                                     '[ 'Targeting 'OSDebian,
                                                        'Targeting 'OSBuntish])
                                                  '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                                     'Targeting 'OSArchLinux,
                                                     'Targeting 'OSFreeBSD])
                                               '[ 'WithInfo, 'Targeting 'OSDebian,
                                                  'Targeting 'OSBuntish, 'Targeting 'OSArchLinux,
                                                  'Targeting 'OSFreeBSD])
                                            '[ 'WithInfo, 'Targeting 'OSDebian,
                                               'Targeting 'OSBuntish, 'Targeting 'OSArchLinux,
                                               'Targeting 'OSFreeBSD])
                                         '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                      '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                         'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                                   '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                      'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                                '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                   'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                       'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char] -> Property DebianLike
Apt.serviceInstalledRunning [Char]
"dovecot-pop3d"
	Props
  (Sing
     (Combine
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      (Combine
                                         (Combine
                                            (Combine
                                               (Combine
                                                  (Combine
                                                     (Combine
                                                        (Combine
                                                           (Combine
                                                              (Combine
                                                                 (Combine
                                                                    (Combine
                                                                       (Combine
                                                                          (Combine
                                                                             (Combine
                                                                                (Combine
                                                                                   (Combine
                                                                                      '[ 'Targeting
                                                                                           'OSDebian,
                                                                                         'Targeting
                                                                                           'OSBuntish]
                                                                                      '[ 'Targeting
                                                                                           'OSDebian,
                                                                                         'Targeting
                                                                                           'OSBuntish])
                                                                                   '[ 'Targeting
                                                                                        'OSDebian,
                                                                                      'Targeting
                                                                                        'OSBuntish])
                                                                                '[ 'Targeting
                                                                                     'OSDebian,
                                                                                   'Targeting
                                                                                     'OSBuntish])
                                                                             '[ 'Targeting
                                                                                  'OSDebian,
                                                                                'Targeting
                                                                                  'OSBuntish])
                                                                          '[ 'Targeting 'OSDebian,
                                                                             'Targeting 'OSBuntish])
                                                                       '[ 'Targeting 'OSDebian,
                                                                          'Targeting 'OSBuntish])
                                                                    '[ 'Targeting 'OSDebian,
                                                                       'Targeting 'OSBuntish])
                                                                 '[ 'Targeting 'OSDebian,
                                                                    'Targeting 'OSBuntish])
                                                              '[ 'Targeting 'OSDebian,
                                                                 'Targeting 'OSBuntish])
                                                           '[ 'WithInfo, 'Targeting 'OSDebian,
                                                              'Targeting 'OSBuntish])
                                                        '[ 'Targeting 'OSDebian,
                                                           'Targeting 'OSBuntish])
                                                     '[ 'Targeting 'OSDebian,
                                                        'Targeting 'OSBuntish])
                                                  '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                                  'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                                            '[ 'WithInfo, 'Targeting 'OSDebian,
                                               'Targeting 'OSBuntish, 'Targeting 'OSArchLinux,
                                               'Targeting 'OSFreeBSD])
                                         '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                            'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                                      '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                      'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                                '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                   'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                             '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
-> Property DebianLike
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      (Combine
                                         (Combine
                                            (Combine
                                               (Combine
                                                  (Combine
                                                     (Combine
                                                        (Combine
                                                           (Combine
                                                              (Combine
                                                                 (Combine
                                                                    (Combine
                                                                       (Combine
                                                                          (Combine
                                                                             (Combine
                                                                                (Combine
                                                                                   (Combine
                                                                                      (Combine
                                                                                         (Combine
                                                                                            '[ 'Targeting
                                                                                                 'OSDebian,
                                                                                               'Targeting
                                                                                                 'OSBuntish]
                                                                                            '[ 'Targeting
                                                                                                 'OSDebian,
                                                                                               'Targeting
                                                                                                 'OSBuntish])
                                                                                         '[ 'Targeting
                                                                                              'OSDebian,
                                                                                            'Targeting
                                                                                              'OSBuntish])
                                                                                      '[ 'Targeting
                                                                                           'OSDebian,
                                                                                         'Targeting
                                                                                           'OSBuntish])
                                                                                   '[ 'Targeting
                                                                                        'OSDebian,
                                                                                      'Targeting
                                                                                        'OSBuntish])
                                                                                '[ 'Targeting
                                                                                     'OSDebian,
                                                                                   'Targeting
                                                                                     'OSBuntish])
                                                                             '[ 'Targeting
                                                                                  'OSDebian,
                                                                                'Targeting
                                                                                  'OSBuntish])
                                                                          '[ 'Targeting 'OSDebian,
                                                                             'Targeting 'OSBuntish])
                                                                       '[ 'Targeting 'OSDebian,
                                                                          'Targeting 'OSBuntish])
                                                                    '[ 'Targeting 'OSDebian,
                                                                       'Targeting 'OSBuntish])
                                                                 '[ 'WithInfo, 'Targeting 'OSDebian,
                                                                    'Targeting 'OSBuntish])
                                                              '[ 'Targeting 'OSDebian,
                                                                 'Targeting 'OSBuntish])
                                                           '[ 'Targeting 'OSDebian,
                                                              'Targeting 'OSBuntish])
                                                        '[ 'Targeting 'OSDebian,
                                                           'Targeting 'OSBuntish])
                                                     '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                                        'Targeting 'OSArchLinux,
                                                        'Targeting 'OSFreeBSD])
                                                  '[ 'WithInfo, 'Targeting 'OSDebian,
                                                     'Targeting 'OSBuntish, 'Targeting 'OSArchLinux,
                                                     'Targeting 'OSFreeBSD])
                                               '[ 'WithInfo, 'Targeting 'OSDebian,
                                                  'Targeting 'OSBuntish, 'Targeting 'OSArchLinux,
                                                  'Targeting 'OSFreeBSD])
                                            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                         '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                            'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                                      '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                         'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                                   '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                      'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                          'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char]
"/etc/dovecot/conf.d/10-mail.conf" [Char] -> [Char] -> Property UnixLike
`File.containsLine`
		[Char]
"mail_location = maildir:~/Maildir"
		Property UnixLike
-> Property DebianLike
-> CombinedType (Property UnixLike) (Property DebianLike)
forall x y. Combines x y => x -> y -> CombinedType x y
`onChange` [Char] -> Property DebianLike
Service.reloaded [Char]
"dovecot"
		Property DebianLike -> [Char] -> Property DebianLike
forall p. IsProp p => p -> [Char] -> p
`describe` [Char]
"dovecot mail.conf"
	Props
  (Sing
     (Combine
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      (Combine
                                         (Combine
                                            (Combine
                                               (Combine
                                                  (Combine
                                                     (Combine
                                                        (Combine
                                                           (Combine
                                                              (Combine
                                                                 (Combine
                                                                    (Combine
                                                                       (Combine
                                                                          (Combine
                                                                             (Combine
                                                                                (Combine
                                                                                   (Combine
                                                                                      (Combine
                                                                                         '[ 'Targeting
                                                                                              'OSDebian,
                                                                                            'Targeting
                                                                                              'OSBuntish]
                                                                                         '[ 'Targeting
                                                                                              'OSDebian,
                                                                                            'Targeting
                                                                                              'OSBuntish])
                                                                                      '[ 'Targeting
                                                                                           'OSDebian,
                                                                                         'Targeting
                                                                                           'OSBuntish])
                                                                                   '[ 'Targeting
                                                                                        'OSDebian,
                                                                                      'Targeting
                                                                                        'OSBuntish])
                                                                                '[ 'Targeting
                                                                                     'OSDebian,
                                                                                   'Targeting
                                                                                     'OSBuntish])
                                                                             '[ 'Targeting
                                                                                  'OSDebian,
                                                                                'Targeting
                                                                                  'OSBuntish])
                                                                          '[ 'Targeting 'OSDebian,
                                                                             'Targeting 'OSBuntish])
                                                                       '[ 'Targeting 'OSDebian,
                                                                          'Targeting 'OSBuntish])
                                                                    '[ 'Targeting 'OSDebian,
                                                                       'Targeting 'OSBuntish])
                                                                 '[ 'Targeting 'OSDebian,
                                                                    'Targeting 'OSBuntish])
                                                              '[ 'WithInfo, 'Targeting 'OSDebian,
                                                                 'Targeting 'OSBuntish])
                                                           '[ 'Targeting 'OSDebian,
                                                              'Targeting 'OSBuntish])
                                                        '[ 'Targeting 'OSDebian,
                                                           'Targeting 'OSBuntish])
                                                     '[ 'Targeting 'OSDebian,
                                                        'Targeting 'OSBuntish])
                                                  '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                                     'Targeting 'OSArchLinux,
                                                     'Targeting 'OSFreeBSD])
                                               '[ 'WithInfo, 'Targeting 'OSDebian,
                                                  'Targeting 'OSBuntish, 'Targeting 'OSArchLinux,
                                                  'Targeting 'OSFreeBSD])
                                            '[ 'WithInfo, 'Targeting 'OSDebian,
                                               'Targeting 'OSBuntish, 'Targeting 'OSArchLinux,
                                               'Targeting 'OSFreeBSD])
                                         '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                      '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                         'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                                   '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                      'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                                '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                   'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                       'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
-> Property DebianLike
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      (Combine
                                         (Combine
                                            (Combine
                                               (Combine
                                                  (Combine
                                                     (Combine
                                                        (Combine
                                                           (Combine
                                                              (Combine
                                                                 (Combine
                                                                    (Combine
                                                                       (Combine
                                                                          (Combine
                                                                             (Combine
                                                                                (Combine
                                                                                   (Combine
                                                                                      (Combine
                                                                                         (Combine
                                                                                            (Combine
                                                                                               '[ 'Targeting
                                                                                                    'OSDebian,
                                                                                                  'Targeting
                                                                                                    'OSBuntish]
                                                                                               '[ 'Targeting
                                                                                                    'OSDebian,
                                                                                                  'Targeting
                                                                                                    'OSBuntish])
                                                                                            '[ 'Targeting
                                                                                                 'OSDebian,
                                                                                               'Targeting
                                                                                                 'OSBuntish])
                                                                                         '[ 'Targeting
                                                                                              'OSDebian,
                                                                                            'Targeting
                                                                                              'OSBuntish])
                                                                                      '[ 'Targeting
                                                                                           'OSDebian,
                                                                                         'Targeting
                                                                                           'OSBuntish])
                                                                                   '[ 'Targeting
                                                                                        'OSDebian,
                                                                                      'Targeting
                                                                                        'OSBuntish])
                                                                                '[ 'Targeting
                                                                                     'OSDebian,
                                                                                   'Targeting
                                                                                     'OSBuntish])
                                                                             '[ 'Targeting
                                                                                  'OSDebian,
                                                                                'Targeting
                                                                                  'OSBuntish])
                                                                          '[ 'Targeting 'OSDebian,
                                                                             'Targeting 'OSBuntish])
                                                                       '[ 'Targeting 'OSDebian,
                                                                          'Targeting 'OSBuntish])
                                                                    '[ 'WithInfo,
                                                                       'Targeting 'OSDebian,
                                                                       'Targeting 'OSBuntish])
                                                                 '[ 'Targeting 'OSDebian,
                                                                    'Targeting 'OSBuntish])
                                                              '[ 'Targeting 'OSDebian,
                                                                 'Targeting 'OSBuntish])
                                                           '[ 'Targeting 'OSDebian,
                                                              'Targeting 'OSBuntish])
                                                        '[ 'Targeting 'OSDebian,
                                                           'Targeting 'OSBuntish,
                                                           'Targeting 'OSArchLinux,
                                                           'Targeting 'OSFreeBSD])
                                                     '[ 'WithInfo, 'Targeting 'OSDebian,
                                                        'Targeting 'OSBuntish,
                                                        'Targeting 'OSArchLinux,
                                                        'Targeting 'OSFreeBSD])
                                                  '[ 'WithInfo, 'Targeting 'OSDebian,
                                                     'Targeting 'OSBuntish, 'Targeting 'OSArchLinux,
                                                     'Targeting 'OSFreeBSD])
                                               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                               'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                                         '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                            'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                                      '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                         'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                          '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                             'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char]
"/etc/dovecot/conf.d/10-auth.conf" [Char] -> [Char] -> Property UnixLike
`File.containsLine`
		[Char]
"!include auth-passwdfile.conf.ext"
		Property UnixLike
-> Property DebianLike
-> CombinedType (Property UnixLike) (Property DebianLike)
forall x y. Combines x y => x -> y -> CombinedType x y
`onChange` [Char] -> Property DebianLike
Service.restarted [Char]
"dovecot"
		Property DebianLike -> [Char] -> Property DebianLike
forall p. IsProp p => p -> [Char] -> p
`describe` [Char]
"dovecot auth.conf"
	Props
  (Sing
     (Combine
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      (Combine
                                         (Combine
                                            (Combine
                                               (Combine
                                                  (Combine
                                                     (Combine
                                                        (Combine
                                                           (Combine
                                                              (Combine
                                                                 (Combine
                                                                    (Combine
                                                                       (Combine
                                                                          (Combine
                                                                             (Combine
                                                                                (Combine
                                                                                   (Combine
                                                                                      (Combine
                                                                                         (Combine
                                                                                            '[ 'Targeting
                                                                                                 'OSDebian,
                                                                                               'Targeting
                                                                                                 'OSBuntish]
                                                                                            '[ 'Targeting
                                                                                                 'OSDebian,
                                                                                               'Targeting
                                                                                                 'OSBuntish])
                                                                                         '[ 'Targeting
                                                                                              'OSDebian,
                                                                                            'Targeting
                                                                                              'OSBuntish])
                                                                                      '[ 'Targeting
                                                                                           'OSDebian,
                                                                                         'Targeting
                                                                                           'OSBuntish])
                                                                                   '[ 'Targeting
                                                                                        'OSDebian,
                                                                                      'Targeting
                                                                                        'OSBuntish])
                                                                                '[ 'Targeting
                                                                                     'OSDebian,
                                                                                   'Targeting
                                                                                     'OSBuntish])
                                                                             '[ 'Targeting
                                                                                  'OSDebian,
                                                                                'Targeting
                                                                                  'OSBuntish])
                                                                          '[ 'Targeting 'OSDebian,
                                                                             'Targeting 'OSBuntish])
                                                                       '[ 'Targeting 'OSDebian,
                                                                          'Targeting 'OSBuntish])
                                                                    '[ 'Targeting 'OSDebian,
                                                                       'Targeting 'OSBuntish])
                                                                 '[ 'WithInfo, 'Targeting 'OSDebian,
                                                                    'Targeting 'OSBuntish])
                                                              '[ 'Targeting 'OSDebian,
                                                                 'Targeting 'OSBuntish])
                                                           '[ 'Targeting 'OSDebian,
                                                              'Targeting 'OSBuntish])
                                                        '[ 'Targeting 'OSDebian,
                                                           'Targeting 'OSBuntish])
                                                     '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                                        'Targeting 'OSArchLinux,
                                                        'Targeting 'OSFreeBSD])
                                                  '[ 'WithInfo, 'Targeting 'OSDebian,
                                                     'Targeting 'OSBuntish, 'Targeting 'OSArchLinux,
                                                     'Targeting 'OSFreeBSD])
                                               '[ 'WithInfo, 'Targeting 'OSDebian,
                                                  'Targeting 'OSBuntish, 'Targeting 'OSArchLinux,
                                                  'Targeting 'OSFreeBSD])
                                            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                         '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                            'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                                      '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                         'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                                   '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                      'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                          'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
-> CombinedType
     (Property
        (MetaTypes
           '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
     (Property UnixLike)
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      (Combine
                                         (Combine
                                            (Combine
                                               (Combine
                                                  (Combine
                                                     (Combine
                                                        (Combine
                                                           (Combine
                                                              (Combine
                                                                 (Combine
                                                                    (Combine
                                                                       (Combine
                                                                          (Combine
                                                                             (Combine
                                                                                (Combine
                                                                                   (Combine
                                                                                      (Combine
                                                                                         (Combine
                                                                                            (Combine
                                                                                               (Combine
                                                                                                  '[ 'Targeting
                                                                                                       'OSDebian,
                                                                                                     'Targeting
                                                                                                       'OSBuntish]
                                                                                                  '[ 'Targeting
                                                                                                       'OSDebian,
                                                                                                     'Targeting
                                                                                                       'OSBuntish])
                                                                                               '[ 'Targeting
                                                                                                    'OSDebian,
                                                                                                  'Targeting
                                                                                                    'OSBuntish])
                                                                                            '[ 'Targeting
                                                                                                 'OSDebian,
                                                                                               'Targeting
                                                                                                 'OSBuntish])
                                                                                         '[ 'Targeting
                                                                                              'OSDebian,
                                                                                            'Targeting
                                                                                              'OSBuntish])
                                                                                      '[ 'Targeting
                                                                                           'OSDebian,
                                                                                         'Targeting
                                                                                           'OSBuntish])
                                                                                   '[ 'Targeting
                                                                                        'OSDebian,
                                                                                      'Targeting
                                                                                        'OSBuntish])
                                                                                '[ 'Targeting
                                                                                     'OSDebian,
                                                                                   'Targeting
                                                                                     'OSBuntish])
                                                                             '[ 'Targeting
                                                                                  'OSDebian,
                                                                                'Targeting
                                                                                  'OSBuntish])
                                                                          '[ 'Targeting 'OSDebian,
                                                                             'Targeting 'OSBuntish])
                                                                       '[ 'WithInfo,
                                                                          'Targeting 'OSDebian,
                                                                          'Targeting 'OSBuntish])
                                                                    '[ 'Targeting 'OSDebian,
                                                                       'Targeting 'OSBuntish])
                                                                 '[ 'Targeting 'OSDebian,
                                                                    'Targeting 'OSBuntish])
                                                              '[ 'Targeting 'OSDebian,
                                                                 'Targeting 'OSBuntish])
                                                           '[ 'Targeting 'OSDebian,
                                                              'Targeting 'OSBuntish,
                                                              'Targeting 'OSArchLinux,
                                                              'Targeting 'OSFreeBSD])
                                                        '[ 'WithInfo, 'Targeting 'OSDebian,
                                                           'Targeting 'OSBuntish,
                                                           'Targeting 'OSArchLinux,
                                                           'Targeting 'OSFreeBSD])
                                                     '[ 'WithInfo, 'Targeting 'OSDebian,
                                                        'Targeting 'OSBuntish,
                                                        'Targeting 'OSArchLinux,
                                                        'Targeting 'OSFreeBSD])
                                                  '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                                  'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                                            '[ 'WithInfo, 'Targeting 'OSDebian,
                                               'Targeting 'OSBuntish, 'Targeting 'OSArchLinux,
                                               'Targeting 'OSFreeBSD])
                                         '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                            'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                                      '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                             '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char] -> Context -> Property (HasInfo + UnixLike)
forall c.
IsContext c =>
[Char] -> c -> Property (HasInfo + UnixLike)
File.hasPrivContent [Char]
dovecotusers Context
ctx
		Property
  (MetaTypes
     '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
        'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
-> Property UnixLike
-> CombinedType
     (Property
        (MetaTypes
           '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
     (Property UnixLike)
forall x y. Combines x y => x -> y -> CombinedType x y
`onChange` ([Char]
dovecotusers [Char] -> FileMode -> Property UnixLike
`File.mode`
			[FileMode] -> FileMode
combineModes [FileMode
ownerReadMode, FileMode
groupReadMode])
	Props
  (Sing
     (Combine
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      (Combine
                                         (Combine
                                            (Combine
                                               (Combine
                                                  (Combine
                                                     (Combine
                                                        (Combine
                                                           (Combine
                                                              (Combine
                                                                 (Combine
                                                                    (Combine
                                                                       (Combine
                                                                          (Combine
                                                                             (Combine
                                                                                (Combine
                                                                                   (Combine
                                                                                      (Combine
                                                                                         (Combine
                                                                                            (Combine
                                                                                               '[ 'Targeting
                                                                                                    'OSDebian,
                                                                                                  'Targeting
                                                                                                    'OSBuntish]
                                                                                               '[ 'Targeting
                                                                                                    'OSDebian,
                                                                                                  'Targeting
                                                                                                    'OSBuntish])
                                                                                            '[ 'Targeting
                                                                                                 'OSDebian,
                                                                                               'Targeting
                                                                                                 'OSBuntish])
                                                                                         '[ 'Targeting
                                                                                              'OSDebian,
                                                                                            'Targeting
                                                                                              'OSBuntish])
                                                                                      '[ 'Targeting
                                                                                           'OSDebian,
                                                                                         'Targeting
                                                                                           'OSBuntish])
                                                                                   '[ 'Targeting
                                                                                        'OSDebian,
                                                                                      'Targeting
                                                                                        'OSBuntish])
                                                                                '[ 'Targeting
                                                                                     'OSDebian,
                                                                                   'Targeting
                                                                                     'OSBuntish])
                                                                             '[ 'Targeting
                                                                                  'OSDebian,
                                                                                'Targeting
                                                                                  'OSBuntish])
                                                                          '[ 'Targeting 'OSDebian,
                                                                             'Targeting 'OSBuntish])
                                                                       '[ 'Targeting 'OSDebian,
                                                                          'Targeting 'OSBuntish])
                                                                    '[ 'WithInfo,
                                                                       'Targeting 'OSDebian,
                                                                       'Targeting 'OSBuntish])
                                                                 '[ 'Targeting 'OSDebian,
                                                                    'Targeting 'OSBuntish])
                                                              '[ 'Targeting 'OSDebian,
                                                                 'Targeting 'OSBuntish])
                                                           '[ 'Targeting 'OSDebian,
                                                              'Targeting 'OSBuntish])
                                                        '[ 'Targeting 'OSDebian,
                                                           'Targeting 'OSBuntish,
                                                           'Targeting 'OSArchLinux,
                                                           'Targeting 'OSFreeBSD])
                                                     '[ 'WithInfo, 'Targeting 'OSDebian,
                                                        'Targeting 'OSBuntish,
                                                        'Targeting 'OSArchLinux,
                                                        'Targeting 'OSFreeBSD])
                                                  '[ 'WithInfo, 'Targeting 'OSDebian,
                                                     'Targeting 'OSBuntish, 'Targeting 'OSArchLinux,
                                                     'Targeting 'OSFreeBSD])
                                               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                               'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                                         '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                            'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                                      '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                         'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                          '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                             'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
-> Property UnixLike
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      (Combine
                                         (Combine
                                            (Combine
                                               (Combine
                                                  (Combine
                                                     (Combine
                                                        (Combine
                                                           (Combine
                                                              (Combine
                                                                 (Combine
                                                                    (Combine
                                                                       (Combine
                                                                          (Combine
                                                                             (Combine
                                                                                (Combine
                                                                                   (Combine
                                                                                      (Combine
                                                                                         (Combine
                                                                                            (Combine
                                                                                               (Combine
                                                                                                  (Combine
                                                                                                     '[ 'Targeting
                                                                                                          'OSDebian,
                                                                                                        'Targeting
                                                                                                          'OSBuntish]
                                                                                                     '[ 'Targeting
                                                                                                          'OSDebian,
                                                                                                        'Targeting
                                                                                                          'OSBuntish])
                                                                                                  '[ 'Targeting
                                                                                                       'OSDebian,
                                                                                                     'Targeting
                                                                                                       'OSBuntish])
                                                                                               '[ 'Targeting
                                                                                                    'OSDebian,
                                                                                                  'Targeting
                                                                                                    'OSBuntish])
                                                                                            '[ 'Targeting
                                                                                                 'OSDebian,
                                                                                               'Targeting
                                                                                                 'OSBuntish])
                                                                                         '[ 'Targeting
                                                                                              'OSDebian,
                                                                                            'Targeting
                                                                                              'OSBuntish])
                                                                                      '[ 'Targeting
                                                                                           'OSDebian,
                                                                                         'Targeting
                                                                                           'OSBuntish])
                                                                                   '[ 'Targeting
                                                                                        'OSDebian,
                                                                                      'Targeting
                                                                                        'OSBuntish])
                                                                                '[ 'Targeting
                                                                                     'OSDebian,
                                                                                   'Targeting
                                                                                     'OSBuntish])
                                                                             '[ 'Targeting
                                                                                  'OSDebian,
                                                                                'Targeting
                                                                                  'OSBuntish])
                                                                          '[ 'WithInfo,
                                                                             'Targeting 'OSDebian,
                                                                             'Targeting 'OSBuntish])
                                                                       '[ 'Targeting 'OSDebian,
                                                                          'Targeting 'OSBuntish])
                                                                    '[ 'Targeting 'OSDebian,
                                                                       'Targeting 'OSBuntish])
                                                                 '[ 'Targeting 'OSDebian,
                                                                    'Targeting 'OSBuntish])
                                                              '[ 'Targeting 'OSDebian,
                                                                 'Targeting 'OSBuntish,
                                                                 'Targeting 'OSArchLinux,
                                                                 'Targeting 'OSFreeBSD])
                                                           '[ 'WithInfo, 'Targeting 'OSDebian,
                                                              'Targeting 'OSBuntish,
                                                              'Targeting 'OSArchLinux,
                                                              'Targeting 'OSFreeBSD])
                                                        '[ 'WithInfo, 'Targeting 'OSDebian,
                                                           'Targeting 'OSBuntish,
                                                           'Targeting 'OSArchLinux,
                                                           'Targeting 'OSFreeBSD])
                                                     '[ 'Targeting 'OSDebian,
                                                        'Targeting 'OSBuntish])
                                                  '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                                     'Targeting 'OSArchLinux,
                                                     'Targeting 'OSFreeBSD])
                                               '[ 'WithInfo, 'Targeting 'OSDebian,
                                                  'Targeting 'OSBuntish, 'Targeting 'OSArchLinux,
                                                  'Targeting 'OSFreeBSD])
                                            '[ 'WithInfo, 'Targeting 'OSDebian,
                                               'Targeting 'OSBuntish, 'Targeting 'OSArchLinux,
                                               'Targeting 'OSFreeBSD])
                                         '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                      '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                   'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char] -> User -> Group -> Property UnixLike
File.ownerGroup [Char]
dovecotusers ([Char] -> User
User [Char]
"root") ([Char] -> Group
Group [Char]
"dovecot")

	Props
  (Sing
     (Combine
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      (Combine
                                         (Combine
                                            (Combine
                                               (Combine
                                                  (Combine
                                                     (Combine
                                                        (Combine
                                                           (Combine
                                                              (Combine
                                                                 (Combine
                                                                    (Combine
                                                                       (Combine
                                                                          (Combine
                                                                             (Combine
                                                                                (Combine
                                                                                   (Combine
                                                                                      (Combine
                                                                                         (Combine
                                                                                            (Combine
                                                                                               (Combine
                                                                                                  '[ 'Targeting
                                                                                                       'OSDebian,
                                                                                                     'Targeting
                                                                                                       'OSBuntish]
                                                                                                  '[ 'Targeting
                                                                                                       'OSDebian,
                                                                                                     'Targeting
                                                                                                       'OSBuntish])
                                                                                               '[ 'Targeting
                                                                                                    'OSDebian,
                                                                                                  'Targeting
                                                                                                    'OSBuntish])
                                                                                            '[ 'Targeting
                                                                                                 'OSDebian,
                                                                                               'Targeting
                                                                                                 'OSBuntish])
                                                                                         '[ 'Targeting
                                                                                              'OSDebian,
                                                                                            'Targeting
                                                                                              'OSBuntish])
                                                                                      '[ 'Targeting
                                                                                           'OSDebian,
                                                                                         'Targeting
                                                                                           'OSBuntish])
                                                                                   '[ 'Targeting
                                                                                        'OSDebian,
                                                                                      'Targeting
                                                                                        'OSBuntish])
                                                                                '[ 'Targeting
                                                                                     'OSDebian,
                                                                                   'Targeting
                                                                                     'OSBuntish])
                                                                             '[ 'Targeting
                                                                                  'OSDebian,
                                                                                'Targeting
                                                                                  'OSBuntish])
                                                                          '[ 'Targeting 'OSDebian,
                                                                             'Targeting 'OSBuntish])
                                                                       '[ 'WithInfo,
                                                                          'Targeting 'OSDebian,
                                                                          'Targeting 'OSBuntish])
                                                                    '[ 'Targeting 'OSDebian,
                                                                       'Targeting 'OSBuntish])
                                                                 '[ 'Targeting 'OSDebian,
                                                                    'Targeting 'OSBuntish])
                                                              '[ 'Targeting 'OSDebian,
                                                                 'Targeting 'OSBuntish])
                                                           '[ 'Targeting 'OSDebian,
                                                              'Targeting 'OSBuntish,
                                                              'Targeting 'OSArchLinux,
                                                              'Targeting 'OSFreeBSD])
                                                        '[ 'WithInfo, 'Targeting 'OSDebian,
                                                           'Targeting 'OSBuntish,
                                                           'Targeting 'OSArchLinux,
                                                           'Targeting 'OSFreeBSD])
                                                     '[ 'WithInfo, 'Targeting 'OSDebian,
                                                        'Targeting 'OSBuntish,
                                                        'Targeting 'OSArchLinux,
                                                        'Targeting 'OSFreeBSD])
                                                  '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                                  'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                                            '[ 'WithInfo, 'Targeting 'OSDebian,
                                               'Targeting 'OSBuntish, 'Targeting 'OSArchLinux,
                                               'Targeting 'OSFreeBSD])
                                         '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                            'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                                      '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                             '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
-> Property DebianLike
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      (Combine
                                         (Combine
                                            (Combine
                                               (Combine
                                                  (Combine
                                                     (Combine
                                                        (Combine
                                                           (Combine
                                                              (Combine
                                                                 (Combine
                                                                    (Combine
                                                                       (Combine
                                                                          (Combine
                                                                             (Combine
                                                                                (Combine
                                                                                   (Combine
                                                                                      (Combine
                                                                                         (Combine
                                                                                            (Combine
                                                                                               (Combine
                                                                                                  (Combine
                                                                                                     (Combine
                                                                                                        '[ 'Targeting
                                                                                                             'OSDebian,
                                                                                                           'Targeting
                                                                                                             'OSBuntish]
                                                                                                        '[ 'Targeting
                                                                                                             'OSDebian,
                                                                                                           'Targeting
                                                                                                             'OSBuntish])
                                                                                                     '[ 'Targeting
                                                                                                          'OSDebian,
                                                                                                        'Targeting
                                                                                                          'OSBuntish])
                                                                                                  '[ 'Targeting
                                                                                                       'OSDebian,
                                                                                                     'Targeting
                                                                                                       'OSBuntish])
                                                                                               '[ 'Targeting
                                                                                                    'OSDebian,
                                                                                                  'Targeting
                                                                                                    'OSBuntish])
                                                                                            '[ 'Targeting
                                                                                                 'OSDebian,
                                                                                               'Targeting
                                                                                                 'OSBuntish])
                                                                                         '[ 'Targeting
                                                                                              'OSDebian,
                                                                                            'Targeting
                                                                                              'OSBuntish])
                                                                                      '[ 'Targeting
                                                                                           'OSDebian,
                                                                                         'Targeting
                                                                                           'OSBuntish])
                                                                                   '[ 'Targeting
                                                                                        'OSDebian,
                                                                                      'Targeting
                                                                                        'OSBuntish])
                                                                                '[ 'Targeting
                                                                                     'OSDebian,
                                                                                   'Targeting
                                                                                     'OSBuntish])
                                                                             '[ 'WithInfo,
                                                                                'Targeting
                                                                                  'OSDebian,
                                                                                'Targeting
                                                                                  'OSBuntish])
                                                                          '[ 'Targeting 'OSDebian,
                                                                             'Targeting 'OSBuntish])
                                                                       '[ 'Targeting 'OSDebian,
                                                                          'Targeting 'OSBuntish])
                                                                    '[ 'Targeting 'OSDebian,
                                                                       'Targeting 'OSBuntish])
                                                                 '[ 'Targeting 'OSDebian,
                                                                    'Targeting 'OSBuntish,
                                                                    'Targeting 'OSArchLinux,
                                                                    'Targeting 'OSFreeBSD])
                                                              '[ 'WithInfo, 'Targeting 'OSDebian,
                                                                 'Targeting 'OSBuntish,
                                                                 'Targeting 'OSArchLinux,
                                                                 'Targeting 'OSFreeBSD])
                                                           '[ 'WithInfo, 'Targeting 'OSDebian,
                                                              'Targeting 'OSBuntish,
                                                              'Targeting 'OSArchLinux,
                                                              'Targeting 'OSFreeBSD])
                                                        '[ 'Targeting 'OSDebian,
                                                           'Targeting 'OSBuntish])
                                                     '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                                        'Targeting 'OSArchLinux,
                                                        'Targeting 'OSFreeBSD])
                                                  '[ 'WithInfo, 'Targeting 'OSDebian,
                                                     'Targeting 'OSBuntish, 'Targeting 'OSArchLinux,
                                                     'Targeting 'OSFreeBSD])
                                               '[ 'WithInfo, 'Targeting 'OSDebian,
                                                  'Targeting 'OSBuntish, 'Targeting 'OSArchLinux,
                                                  'Targeting 'OSFreeBSD])
                                            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                         '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                      '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                   '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                      'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [[Char]] -> Property DebianLike
Apt.installed [[Char]
"mutt", [Char]
"bsd-mailx", [Char]
"alpine"]

	Props
  (Sing
     (Combine
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      (Combine
                                         (Combine
                                            (Combine
                                               (Combine
                                                  (Combine
                                                     (Combine
                                                        (Combine
                                                           (Combine
                                                              (Combine
                                                                 (Combine
                                                                    (Combine
                                                                       (Combine
                                                                          (Combine
                                                                             (Combine
                                                                                (Combine
                                                                                   (Combine
                                                                                      (Combine
                                                                                         (Combine
                                                                                            (Combine
                                                                                               (Combine
                                                                                                  (Combine
                                                                                                     '[ 'Targeting
                                                                                                          'OSDebian,
                                                                                                        'Targeting
                                                                                                          'OSBuntish]
                                                                                                     '[ 'Targeting
                                                                                                          'OSDebian,
                                                                                                        'Targeting
                                                                                                          'OSBuntish])
                                                                                                  '[ 'Targeting
                                                                                                       'OSDebian,
                                                                                                     'Targeting
                                                                                                       'OSBuntish])
                                                                                               '[ 'Targeting
                                                                                                    'OSDebian,
                                                                                                  'Targeting
                                                                                                    'OSBuntish])
                                                                                            '[ 'Targeting
                                                                                                 'OSDebian,
                                                                                               'Targeting
                                                                                                 'OSBuntish])
                                                                                         '[ 'Targeting
                                                                                              'OSDebian,
                                                                                            'Targeting
                                                                                              'OSBuntish])
                                                                                      '[ 'Targeting
                                                                                           'OSDebian,
                                                                                         'Targeting
                                                                                           'OSBuntish])
                                                                                   '[ 'Targeting
                                                                                        'OSDebian,
                                                                                      'Targeting
                                                                                        'OSBuntish])
                                                                                '[ 'Targeting
                                                                                     'OSDebian,
                                                                                   'Targeting
                                                                                     'OSBuntish])
                                                                             '[ 'Targeting
                                                                                  'OSDebian,
                                                                                'Targeting
                                                                                  'OSBuntish])
                                                                          '[ 'WithInfo,
                                                                             'Targeting 'OSDebian,
                                                                             'Targeting 'OSBuntish])
                                                                       '[ 'Targeting 'OSDebian,
                                                                          'Targeting 'OSBuntish])
                                                                    '[ 'Targeting 'OSDebian,
                                                                       'Targeting 'OSBuntish])
                                                                 '[ 'Targeting 'OSDebian,
                                                                    'Targeting 'OSBuntish])
                                                              '[ 'Targeting 'OSDebian,
                                                                 'Targeting 'OSBuntish,
                                                                 'Targeting 'OSArchLinux,
                                                                 'Targeting 'OSFreeBSD])
                                                           '[ 'WithInfo, 'Targeting 'OSDebian,
                                                              'Targeting 'OSBuntish,
                                                              'Targeting 'OSArchLinux,
                                                              'Targeting 'OSFreeBSD])
                                                        '[ 'WithInfo, 'Targeting 'OSDebian,
                                                           'Targeting 'OSBuntish,
                                                           'Targeting 'OSArchLinux,
                                                           'Targeting 'OSFreeBSD])
                                                     '[ 'Targeting 'OSDebian,
                                                        'Targeting 'OSBuntish])
                                                  '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                                     'Targeting 'OSArchLinux,
                                                     'Targeting 'OSFreeBSD])
                                               '[ 'WithInfo, 'Targeting 'OSDebian,
                                                  'Targeting 'OSBuntish, 'Targeting 'OSArchLinux,
                                                  'Targeting 'OSFreeBSD])
                                            '[ 'WithInfo, 'Targeting 'OSDebian,
                                               'Targeting 'OSBuntish, 'Targeting 'OSArchLinux,
                                               'Targeting 'OSFreeBSD])
                                         '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                      '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                   'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
-> Property UnixLike
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      (Combine
                                         (Combine
                                            (Combine
                                               (Combine
                                                  (Combine
                                                     (Combine
                                                        (Combine
                                                           (Combine
                                                              (Combine
                                                                 (Combine
                                                                    (Combine
                                                                       (Combine
                                                                          (Combine
                                                                             (Combine
                                                                                (Combine
                                                                                   (Combine
                                                                                      (Combine
                                                                                         (Combine
                                                                                            (Combine
                                                                                               (Combine
                                                                                                  (Combine
                                                                                                     (Combine
                                                                                                        (Combine
                                                                                                           '[ 'Targeting
                                                                                                                'OSDebian,
                                                                                                              'Targeting
                                                                                                                'OSBuntish]
                                                                                                           '[ 'Targeting
                                                                                                                'OSDebian,
                                                                                                              'Targeting
                                                                                                                'OSBuntish])
                                                                                                        '[ 'Targeting
                                                                                                             'OSDebian,
                                                                                                           'Targeting
                                                                                                             'OSBuntish])
                                                                                                     '[ 'Targeting
                                                                                                          'OSDebian,
                                                                                                        'Targeting
                                                                                                          'OSBuntish])
                                                                                                  '[ 'Targeting
                                                                                                       'OSDebian,
                                                                                                     'Targeting
                                                                                                       'OSBuntish])
                                                                                               '[ 'Targeting
                                                                                                    'OSDebian,
                                                                                                  'Targeting
                                                                                                    'OSBuntish])
                                                                                            '[ 'Targeting
                                                                                                 'OSDebian,
                                                                                               'Targeting
                                                                                                 'OSBuntish])
                                                                                         '[ 'Targeting
                                                                                              'OSDebian,
                                                                                            'Targeting
                                                                                              'OSBuntish])
                                                                                      '[ 'Targeting
                                                                                           'OSDebian,
                                                                                         'Targeting
                                                                                           'OSBuntish])
                                                                                   '[ 'Targeting
                                                                                        'OSDebian,
                                                                                      'Targeting
                                                                                        'OSBuntish])
                                                                                '[ 'WithInfo,
                                                                                   'Targeting
                                                                                     'OSDebian,
                                                                                   'Targeting
                                                                                     'OSBuntish])
                                                                             '[ 'Targeting
                                                                                  'OSDebian,
                                                                                'Targeting
                                                                                  'OSBuntish])
                                                                          '[ 'Targeting 'OSDebian,
                                                                             'Targeting 'OSBuntish])
                                                                       '[ 'Targeting 'OSDebian,
                                                                          'Targeting 'OSBuntish])
                                                                    '[ 'Targeting 'OSDebian,
                                                                       'Targeting 'OSBuntish,
                                                                       'Targeting 'OSArchLinux,
                                                                       'Targeting 'OSFreeBSD])
                                                                 '[ 'WithInfo, 'Targeting 'OSDebian,
                                                                    'Targeting 'OSBuntish,
                                                                    'Targeting 'OSArchLinux,
                                                                    'Targeting 'OSFreeBSD])
                                                              '[ 'WithInfo, 'Targeting 'OSDebian,
                                                                 'Targeting 'OSBuntish,
                                                                 'Targeting 'OSArchLinux,
                                                                 'Targeting 'OSFreeBSD])
                                                           '[ 'Targeting 'OSDebian,
                                                              'Targeting 'OSBuntish])
                                                        '[ 'Targeting 'OSDebian,
                                                           'Targeting 'OSBuntish,
                                                           'Targeting 'OSArchLinux,
                                                           'Targeting 'OSFreeBSD])
                                                     '[ 'WithInfo, 'Targeting 'OSDebian,
                                                        'Targeting 'OSBuntish,
                                                        'Targeting 'OSArchLinux,
                                                        'Targeting 'OSFreeBSD])
                                                  '[ 'WithInfo, 'Targeting 'OSDebian,
                                                     'Targeting 'OSBuntish, 'Targeting 'OSArchLinux,
                                                     'Targeting 'OSFreeBSD])
                                               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                         '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                      '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                         'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                       'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char]
pinescript [Char] -> [[Char]] -> Property UnixLike
`File.hasContent`
		[ [Char]
"#!/bin/sh"
		, [Char]
"# deployed with propellor"
		, [Char]
"set -e"
		, [Char]
"exec alpine \"$@\""
		]
		Property UnixLike
-> Property UnixLike
-> CombinedType (Property UnixLike) (Property UnixLike)
forall x y. Combines x y => x -> y -> CombinedType x y
`onChange` ([Char]
pinescript [Char] -> FileMode -> Property UnixLike
`File.mode`
			[FileMode] -> FileMode
combineModes ([FileMode]
readModes [FileMode] -> [FileMode] -> [FileMode]
forall a. [a] -> [a] -> [a]
++ [FileMode]
executeModes))
		Property UnixLike -> [Char] -> Property UnixLike
forall p. IsProp p => p -> [Char] -> p
`describe` [Char]
"pine wrapper script"
	-- Make pine use dovecot pipe to read maildir.
	Props
  (Sing
     (Combine
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      (Combine
                                         (Combine
                                            (Combine
                                               (Combine
                                                  (Combine
                                                     (Combine
                                                        (Combine
                                                           (Combine
                                                              (Combine
                                                                 (Combine
                                                                    (Combine
                                                                       (Combine
                                                                          (Combine
                                                                             (Combine
                                                                                (Combine
                                                                                   (Combine
                                                                                      (Combine
                                                                                         (Combine
                                                                                            (Combine
                                                                                               (Combine
                                                                                                  (Combine
                                                                                                     (Combine
                                                                                                        '[ 'Targeting
                                                                                                             'OSDebian,
                                                                                                           'Targeting
                                                                                                             'OSBuntish]
                                                                                                        '[ 'Targeting
                                                                                                             'OSDebian,
                                                                                                           'Targeting
                                                                                                             'OSBuntish])
                                                                                                     '[ 'Targeting
                                                                                                          'OSDebian,
                                                                                                        'Targeting
                                                                                                          'OSBuntish])
                                                                                                  '[ 'Targeting
                                                                                                       'OSDebian,
                                                                                                     'Targeting
                                                                                                       'OSBuntish])
                                                                                               '[ 'Targeting
                                                                                                    'OSDebian,
                                                                                                  'Targeting
                                                                                                    'OSBuntish])
                                                                                            '[ 'Targeting
                                                                                                 'OSDebian,
                                                                                               'Targeting
                                                                                                 'OSBuntish])
                                                                                         '[ 'Targeting
                                                                                              'OSDebian,
                                                                                            'Targeting
                                                                                              'OSBuntish])
                                                                                      '[ 'Targeting
                                                                                           'OSDebian,
                                                                                         'Targeting
                                                                                           'OSBuntish])
                                                                                   '[ 'Targeting
                                                                                        'OSDebian,
                                                                                      'Targeting
                                                                                        'OSBuntish])
                                                                                '[ 'Targeting
                                                                                     'OSDebian,
                                                                                   'Targeting
                                                                                     'OSBuntish])
                                                                             '[ 'WithInfo,
                                                                                'Targeting
                                                                                  'OSDebian,
                                                                                'Targeting
                                                                                  'OSBuntish])
                                                                          '[ 'Targeting 'OSDebian,
                                                                             'Targeting 'OSBuntish])
                                                                       '[ 'Targeting 'OSDebian,
                                                                          'Targeting 'OSBuntish])
                                                                    '[ 'Targeting 'OSDebian,
                                                                       'Targeting 'OSBuntish])
                                                                 '[ 'Targeting 'OSDebian,
                                                                    'Targeting 'OSBuntish,
                                                                    'Targeting 'OSArchLinux,
                                                                    'Targeting 'OSFreeBSD])
                                                              '[ 'WithInfo, 'Targeting 'OSDebian,
                                                                 'Targeting 'OSBuntish,
                                                                 'Targeting 'OSArchLinux,
                                                                 'Targeting 'OSFreeBSD])
                                                           '[ 'WithInfo, 'Targeting 'OSDebian,
                                                              'Targeting 'OSBuntish,
                                                              'Targeting 'OSArchLinux,
                                                              'Targeting 'OSFreeBSD])
                                                        '[ 'Targeting 'OSDebian,
                                                           'Targeting 'OSBuntish])
                                                     '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                                        'Targeting 'OSArchLinux,
                                                        'Targeting 'OSFreeBSD])
                                                  '[ 'WithInfo, 'Targeting 'OSDebian,
                                                     'Targeting 'OSBuntish, 'Targeting 'OSArchLinux,
                                                     'Targeting 'OSFreeBSD])
                                               '[ 'WithInfo, 'Targeting 'OSDebian,
                                                  'Targeting 'OSBuntish, 'Targeting 'OSArchLinux,
                                                  'Targeting 'OSFreeBSD])
                                            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                         '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                      '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                   '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                      'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
-> Property UnixLike
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      (Combine
                                         (Combine
                                            (Combine
                                               (Combine
                                                  (Combine
                                                     (Combine
                                                        (Combine
                                                           (Combine
                                                              (Combine
                                                                 (Combine
                                                                    (Combine
                                                                       (Combine
                                                                          (Combine
                                                                             (Combine
                                                                                (Combine
                                                                                   (Combine
                                                                                      (Combine
                                                                                         (Combine
                                                                                            (Combine
                                                                                               (Combine
                                                                                                  (Combine
                                                                                                     (Combine
                                                                                                        (Combine
                                                                                                           (Combine
                                                                                                              '[ 'Targeting
                                                                                                                   'OSDebian,
                                                                                                                 'Targeting
                                                                                                                   'OSBuntish]
                                                                                                              '[ 'Targeting
                                                                                                                   'OSDebian,
                                                                                                                 'Targeting
                                                                                                                   'OSBuntish])
                                                                                                           '[ 'Targeting
                                                                                                                'OSDebian,
                                                                                                              'Targeting
                                                                                                                'OSBuntish])
                                                                                                        '[ 'Targeting
                                                                                                             'OSDebian,
                                                                                                           'Targeting
                                                                                                             'OSBuntish])
                                                                                                     '[ 'Targeting
                                                                                                          'OSDebian,
                                                                                                        'Targeting
                                                                                                          'OSBuntish])
                                                                                                  '[ 'Targeting
                                                                                                       'OSDebian,
                                                                                                     'Targeting
                                                                                                       'OSBuntish])
                                                                                               '[ 'Targeting
                                                                                                    'OSDebian,
                                                                                                  'Targeting
                                                                                                    'OSBuntish])
                                                                                            '[ 'Targeting
                                                                                                 'OSDebian,
                                                                                               'Targeting
                                                                                                 'OSBuntish])
                                                                                         '[ 'Targeting
                                                                                              'OSDebian,
                                                                                            'Targeting
                                                                                              'OSBuntish])
                                                                                      '[ 'Targeting
                                                                                           'OSDebian,
                                                                                         'Targeting
                                                                                           'OSBuntish])
                                                                                   '[ 'WithInfo,
                                                                                      'Targeting
                                                                                        'OSDebian,
                                                                                      'Targeting
                                                                                        'OSBuntish])
                                                                                '[ 'Targeting
                                                                                     'OSDebian,
                                                                                   'Targeting
                                                                                     'OSBuntish])
                                                                             '[ 'Targeting
                                                                                  'OSDebian,
                                                                                'Targeting
                                                                                  'OSBuntish])
                                                                          '[ 'Targeting 'OSDebian,
                                                                             'Targeting 'OSBuntish])
                                                                       '[ 'Targeting 'OSDebian,
                                                                          'Targeting 'OSBuntish,
                                                                          'Targeting 'OSArchLinux,
                                                                          'Targeting 'OSFreeBSD])
                                                                    '[ 'WithInfo,
                                                                       'Targeting 'OSDebian,
                                                                       'Targeting 'OSBuntish,
                                                                       'Targeting 'OSArchLinux,
                                                                       'Targeting 'OSFreeBSD])
                                                                 '[ 'WithInfo, 'Targeting 'OSDebian,
                                                                    'Targeting 'OSBuntish,
                                                                    'Targeting 'OSArchLinux,
                                                                    'Targeting 'OSFreeBSD])
                                                              '[ 'Targeting 'OSDebian,
                                                                 'Targeting 'OSBuntish])
                                                           '[ 'Targeting 'OSDebian,
                                                              'Targeting 'OSBuntish,
                                                              'Targeting 'OSArchLinux,
                                                              'Targeting 'OSFreeBSD])
                                                        '[ 'WithInfo, 'Targeting 'OSDebian,
                                                           'Targeting 'OSBuntish,
                                                           'Targeting 'OSArchLinux,
                                                           'Targeting 'OSFreeBSD])
                                                     '[ 'WithInfo, 'Targeting 'OSDebian,
                                                        'Targeting 'OSBuntish,
                                                        'Targeting 'OSArchLinux,
                                                        'Targeting 'OSFreeBSD])
                                                  '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                         '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                            'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                                      '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                          'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                       'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char]
"/etc/pine.conf" [Char] -> [[Char]] -> Property UnixLike
`File.hasContent`
		[ [Char]
"# deployed with propellor"
		, [Char]
"inbox-path={localhost}inbox"
		, [Char]
"rsh-command=" [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
imapalpinescript
		]
		Property UnixLike -> [Char] -> Property UnixLike
forall p. IsProp p => p -> [Char] -> p
`describe` [Char]
"pine configured to use local imap server"
	Props
  (Sing
     (Combine
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      (Combine
                                         (Combine
                                            (Combine
                                               (Combine
                                                  (Combine
                                                     (Combine
                                                        (Combine
                                                           (Combine
                                                              (Combine
                                                                 (Combine
                                                                    (Combine
                                                                       (Combine
                                                                          (Combine
                                                                             (Combine
                                                                                (Combine
                                                                                   (Combine
                                                                                      (Combine
                                                                                         (Combine
                                                                                            (Combine
                                                                                               (Combine
                                                                                                  (Combine
                                                                                                     (Combine
                                                                                                        (Combine
                                                                                                           '[ 'Targeting
                                                                                                                'OSDebian,
                                                                                                              'Targeting
                                                                                                                'OSBuntish]
                                                                                                           '[ 'Targeting
                                                                                                                'OSDebian,
                                                                                                              'Targeting
                                                                                                                'OSBuntish])
                                                                                                        '[ 'Targeting
                                                                                                             'OSDebian,
                                                                                                           'Targeting
                                                                                                             'OSBuntish])
                                                                                                     '[ 'Targeting
                                                                                                          'OSDebian,
                                                                                                        'Targeting
                                                                                                          'OSBuntish])
                                                                                                  '[ 'Targeting
                                                                                                       'OSDebian,
                                                                                                     'Targeting
                                                                                                       'OSBuntish])
                                                                                               '[ 'Targeting
                                                                                                    'OSDebian,
                                                                                                  'Targeting
                                                                                                    'OSBuntish])
                                                                                            '[ 'Targeting
                                                                                                 'OSDebian,
                                                                                               'Targeting
                                                                                                 'OSBuntish])
                                                                                         '[ 'Targeting
                                                                                              'OSDebian,
                                                                                            'Targeting
                                                                                              'OSBuntish])
                                                                                      '[ 'Targeting
                                                                                           'OSDebian,
                                                                                         'Targeting
                                                                                           'OSBuntish])
                                                                                   '[ 'Targeting
                                                                                        'OSDebian,
                                                                                      'Targeting
                                                                                        'OSBuntish])
                                                                                '[ 'WithInfo,
                                                                                   'Targeting
                                                                                     'OSDebian,
                                                                                   'Targeting
                                                                                     'OSBuntish])
                                                                             '[ 'Targeting
                                                                                  'OSDebian,
                                                                                'Targeting
                                                                                  'OSBuntish])
                                                                          '[ 'Targeting 'OSDebian,
                                                                             'Targeting 'OSBuntish])
                                                                       '[ 'Targeting 'OSDebian,
                                                                          'Targeting 'OSBuntish])
                                                                    '[ 'Targeting 'OSDebian,
                                                                       'Targeting 'OSBuntish,
                                                                       'Targeting 'OSArchLinux,
                                                                       'Targeting 'OSFreeBSD])
                                                                 '[ 'WithInfo, 'Targeting 'OSDebian,
                                                                    'Targeting 'OSBuntish,
                                                                    'Targeting 'OSArchLinux,
                                                                    'Targeting 'OSFreeBSD])
                                                              '[ 'WithInfo, 'Targeting 'OSDebian,
                                                                 'Targeting 'OSBuntish,
                                                                 'Targeting 'OSArchLinux,
                                                                 'Targeting 'OSFreeBSD])
                                                           '[ 'Targeting 'OSDebian,
                                                              'Targeting 'OSBuntish])
                                                        '[ 'Targeting 'OSDebian,
                                                           'Targeting 'OSBuntish,
                                                           'Targeting 'OSArchLinux,
                                                           'Targeting 'OSFreeBSD])
                                                     '[ 'WithInfo, 'Targeting 'OSDebian,
                                                        'Targeting 'OSBuntish,
                                                        'Targeting 'OSArchLinux,
                                                        'Targeting 'OSFreeBSD])
                                                  '[ 'WithInfo, 'Targeting 'OSDebian,
                                                     'Targeting 'OSBuntish, 'Targeting 'OSArchLinux,
                                                     'Targeting 'OSFreeBSD])
                                               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                         '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                      '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                         'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                       'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
-> Property UnixLike
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      (Combine
                                         (Combine
                                            (Combine
                                               (Combine
                                                  (Combine
                                                     (Combine
                                                        (Combine
                                                           (Combine
                                                              (Combine
                                                                 (Combine
                                                                    (Combine
                                                                       (Combine
                                                                          (Combine
                                                                             (Combine
                                                                                (Combine
                                                                                   (Combine
                                                                                      (Combine
                                                                                         (Combine
                                                                                            (Combine
                                                                                               (Combine
                                                                                                  (Combine
                                                                                                     (Combine
                                                                                                        (Combine
                                                                                                           (Combine
                                                                                                              (Combine
                                                                                                                 '[ 'Targeting
                                                                                                                      'OSDebian,
                                                                                                                    'Targeting
                                                                                                                      'OSBuntish]
                                                                                                                 '[ 'Targeting
                                                                                                                      'OSDebian,
                                                                                                                    'Targeting
                                                                                                                      'OSBuntish])
                                                                                                              '[ 'Targeting
                                                                                                                   'OSDebian,
                                                                                                                 'Targeting
                                                                                                                   'OSBuntish])
                                                                                                           '[ 'Targeting
                                                                                                                'OSDebian,
                                                                                                              'Targeting
                                                                                                                'OSBuntish])
                                                                                                        '[ 'Targeting
                                                                                                             'OSDebian,
                                                                                                           'Targeting
                                                                                                             'OSBuntish])
                                                                                                     '[ 'Targeting
                                                                                                          'OSDebian,
                                                                                                        'Targeting
                                                                                                          'OSBuntish])
                                                                                                  '[ 'Targeting
                                                                                                       'OSDebian,
                                                                                                     'Targeting
                                                                                                       'OSBuntish])
                                                                                               '[ 'Targeting
                                                                                                    'OSDebian,
                                                                                                  'Targeting
                                                                                                    'OSBuntish])
                                                                                            '[ 'Targeting
                                                                                                 'OSDebian,
                                                                                               'Targeting
                                                                                                 'OSBuntish])
                                                                                         '[ 'Targeting
                                                                                              'OSDebian,
                                                                                            'Targeting
                                                                                              'OSBuntish])
                                                                                      '[ 'WithInfo,
                                                                                         'Targeting
                                                                                           'OSDebian,
                                                                                         'Targeting
                                                                                           'OSBuntish])
                                                                                   '[ 'Targeting
                                                                                        'OSDebian,
                                                                                      'Targeting
                                                                                        'OSBuntish])
                                                                                '[ 'Targeting
                                                                                     'OSDebian,
                                                                                   'Targeting
                                                                                     'OSBuntish])
                                                                             '[ 'Targeting
                                                                                  'OSDebian,
                                                                                'Targeting
                                                                                  'OSBuntish])
                                                                          '[ 'Targeting 'OSDebian,
                                                                             'Targeting 'OSBuntish,
                                                                             'Targeting
                                                                               'OSArchLinux,
                                                                             'Targeting 'OSFreeBSD])
                                                                       '[ 'WithInfo,
                                                                          'Targeting 'OSDebian,
                                                                          'Targeting 'OSBuntish,
                                                                          'Targeting 'OSArchLinux,
                                                                          'Targeting 'OSFreeBSD])
                                                                    '[ 'WithInfo,
                                                                       'Targeting 'OSDebian,
                                                                       'Targeting 'OSBuntish,
                                                                       'Targeting 'OSArchLinux,
                                                                       'Targeting 'OSFreeBSD])
                                                                 '[ 'Targeting 'OSDebian,
                                                                    'Targeting 'OSBuntish])
                                                              '[ 'Targeting 'OSDebian,
                                                                 'Targeting 'OSBuntish,
                                                                 'Targeting 'OSArchLinux,
                                                                 'Targeting 'OSFreeBSD])
                                                           '[ 'WithInfo, 'Targeting 'OSDebian,
                                                              'Targeting 'OSBuntish,
                                                              'Targeting 'OSArchLinux,
                                                              'Targeting 'OSFreeBSD])
                                                        '[ 'WithInfo, 'Targeting 'OSDebian,
                                                           'Targeting 'OSBuntish,
                                                           'Targeting 'OSArchLinux,
                                                           'Targeting 'OSFreeBSD])
                                                     '[ 'Targeting 'OSDebian,
                                                        'Targeting 'OSBuntish])
                                                  '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                            '[ 'WithInfo, 'Targeting 'OSDebian,
                                               'Targeting 'OSBuntish, 'Targeting 'OSArchLinux,
                                               'Targeting 'OSFreeBSD])
                                         '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                      '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                          '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                             'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                          'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char]
imapalpinescript [Char] -> [[Char]] -> Property UnixLike
`File.hasContent`
		[ [Char]
"#!/bin/sh"
		, [Char]
"# deployed with propellor"
		, [Char]
"set -e"
		, [Char]
"exec /usr/lib/dovecot/imap 2>/dev/null"
		]
		Property UnixLike
-> Property UnixLike
-> CombinedType (Property UnixLike) (Property UnixLike)
forall x y. Combines x y => x -> y -> CombinedType x y
`onChange` ([Char]
imapalpinescript [Char] -> FileMode -> Property UnixLike
`File.mode`
			[FileMode] -> FileMode
combineModes ([FileMode]
readModes [FileMode] -> [FileMode] -> [FileMode]
forall a. [a] -> [a] -> [a]
++ [FileMode]
executeModes))
		Property UnixLike -> [Char] -> Property UnixLike
forall p. IsProp p => p -> [Char] -> p
`describe` [Char]
"imap script for pine"

	Props
  (Sing
     (Combine
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      (Combine
                                         (Combine
                                            (Combine
                                               (Combine
                                                  (Combine
                                                     (Combine
                                                        (Combine
                                                           (Combine
                                                              (Combine
                                                                 (Combine
                                                                    (Combine
                                                                       (Combine
                                                                          (Combine
                                                                             (Combine
                                                                                (Combine
                                                                                   (Combine
                                                                                      (Combine
                                                                                         (Combine
                                                                                            (Combine
                                                                                               (Combine
                                                                                                  (Combine
                                                                                                     (Combine
                                                                                                        (Combine
                                                                                                           (Combine
                                                                                                              '[ 'Targeting
                                                                                                                   'OSDebian,
                                                                                                                 'Targeting
                                                                                                                   'OSBuntish]
                                                                                                              '[ 'Targeting
                                                                                                                   'OSDebian,
                                                                                                                 'Targeting
                                                                                                                   'OSBuntish])
                                                                                                           '[ 'Targeting
                                                                                                                'OSDebian,
                                                                                                              'Targeting
                                                                                                                'OSBuntish])
                                                                                                        '[ 'Targeting
                                                                                                             'OSDebian,
                                                                                                           'Targeting
                                                                                                             'OSBuntish])
                                                                                                     '[ 'Targeting
                                                                                                          'OSDebian,
                                                                                                        'Targeting
                                                                                                          'OSBuntish])
                                                                                                  '[ 'Targeting
                                                                                                       'OSDebian,
                                                                                                     'Targeting
                                                                                                       'OSBuntish])
                                                                                               '[ 'Targeting
                                                                                                    'OSDebian,
                                                                                                  'Targeting
                                                                                                    'OSBuntish])
                                                                                            '[ 'Targeting
                                                                                                 'OSDebian,
                                                                                               'Targeting
                                                                                                 'OSBuntish])
                                                                                         '[ 'Targeting
                                                                                              'OSDebian,
                                                                                            'Targeting
                                                                                              'OSBuntish])
                                                                                      '[ 'Targeting
                                                                                           'OSDebian,
                                                                                         'Targeting
                                                                                           'OSBuntish])
                                                                                   '[ 'WithInfo,
                                                                                      'Targeting
                                                                                        'OSDebian,
                                                                                      'Targeting
                                                                                        'OSBuntish])
                                                                                '[ 'Targeting
                                                                                     'OSDebian,
                                                                                   'Targeting
                                                                                     'OSBuntish])
                                                                             '[ 'Targeting
                                                                                  'OSDebian,
                                                                                'Targeting
                                                                                  'OSBuntish])
                                                                          '[ 'Targeting 'OSDebian,
                                                                             'Targeting 'OSBuntish])
                                                                       '[ 'Targeting 'OSDebian,
                                                                          'Targeting 'OSBuntish,
                                                                          'Targeting 'OSArchLinux,
                                                                          'Targeting 'OSFreeBSD])
                                                                    '[ 'WithInfo,
                                                                       'Targeting 'OSDebian,
                                                                       'Targeting 'OSBuntish,
                                                                       'Targeting 'OSArchLinux,
                                                                       'Targeting 'OSFreeBSD])
                                                                 '[ 'WithInfo, 'Targeting 'OSDebian,
                                                                    'Targeting 'OSBuntish,
                                                                    'Targeting 'OSArchLinux,
                                                                    'Targeting 'OSFreeBSD])
                                                              '[ 'Targeting 'OSDebian,
                                                                 'Targeting 'OSBuntish])
                                                           '[ 'Targeting 'OSDebian,
                                                              'Targeting 'OSBuntish,
                                                              'Targeting 'OSArchLinux,
                                                              'Targeting 'OSFreeBSD])
                                                        '[ 'WithInfo, 'Targeting 'OSDebian,
                                                           'Targeting 'OSBuntish,
                                                           'Targeting 'OSArchLinux,
                                                           'Targeting 'OSFreeBSD])
                                                     '[ 'WithInfo, 'Targeting 'OSDebian,
                                                        'Targeting 'OSBuntish,
                                                        'Targeting 'OSArchLinux,
                                                        'Targeting 'OSFreeBSD])
                                                  '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                         '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                            'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                                      '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                          'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                       'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
-> RevertableProperty DebianLike DebianLike
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      (Combine
                                         (Combine
                                            (Combine
                                               (Combine
                                                  (Combine
                                                     (Combine
                                                        (Combine
                                                           (Combine
                                                              (Combine
                                                                 (Combine
                                                                    (Combine
                                                                       (Combine
                                                                          (Combine
                                                                             (Combine
                                                                                (Combine
                                                                                   (Combine
                                                                                      (Combine
                                                                                         (Combine
                                                                                            (Combine
                                                                                               (Combine
                                                                                                  (Combine
                                                                                                     (Combine
                                                                                                        (Combine
                                                                                                           (Combine
                                                                                                              (Combine
                                                                                                                 (Combine
                                                                                                                    '[ 'Targeting
                                                                                                                         'OSDebian,
                                                                                                                       'Targeting
                                                                                                                         'OSBuntish]
                                                                                                                    '[ 'Targeting
                                                                                                                         'OSDebian,
                                                                                                                       'Targeting
                                                                                                                         'OSBuntish])
                                                                                                                 '[ 'Targeting
                                                                                                                      'OSDebian,
                                                                                                                    'Targeting
                                                                                                                      'OSBuntish])
                                                                                                              '[ 'Targeting
                                                                                                                   'OSDebian,
                                                                                                                 'Targeting
                                                                                                                   'OSBuntish])
                                                                                                           '[ 'Targeting
                                                                                                                'OSDebian,
                                                                                                              'Targeting
                                                                                                                'OSBuntish])
                                                                                                        '[ 'Targeting
                                                                                                             'OSDebian,
                                                                                                           'Targeting
                                                                                                             'OSBuntish])
                                                                                                     '[ 'Targeting
                                                                                                          'OSDebian,
                                                                                                        'Targeting
                                                                                                          'OSBuntish])
                                                                                                  '[ 'Targeting
                                                                                                       'OSDebian,
                                                                                                     'Targeting
                                                                                                       'OSBuntish])
                                                                                               '[ 'Targeting
                                                                                                    'OSDebian,
                                                                                                  'Targeting
                                                                                                    'OSBuntish])
                                                                                            '[ 'Targeting
                                                                                                 'OSDebian,
                                                                                               'Targeting
                                                                                                 'OSBuntish])
                                                                                         '[ 'WithInfo,
                                                                                            'Targeting
                                                                                              'OSDebian,
                                                                                            'Targeting
                                                                                              'OSBuntish])
                                                                                      '[ 'Targeting
                                                                                           'OSDebian,
                                                                                         'Targeting
                                                                                           'OSBuntish])
                                                                                   '[ 'Targeting
                                                                                        'OSDebian,
                                                                                      'Targeting
                                                                                        'OSBuntish])
                                                                                '[ 'Targeting
                                                                                     'OSDebian,
                                                                                   'Targeting
                                                                                     'OSBuntish])
                                                                             '[ 'Targeting
                                                                                  'OSDebian,
                                                                                'Targeting
                                                                                  'OSBuntish,
                                                                                'Targeting
                                                                                  'OSArchLinux,
                                                                                'Targeting
                                                                                  'OSFreeBSD])
                                                                          '[ 'WithInfo,
                                                                             'Targeting 'OSDebian,
                                                                             'Targeting 'OSBuntish,
                                                                             'Targeting
                                                                               'OSArchLinux,
                                                                             'Targeting 'OSFreeBSD])
                                                                       '[ 'WithInfo,
                                                                          'Targeting 'OSDebian,
                                                                          'Targeting 'OSBuntish,
                                                                          'Targeting 'OSArchLinux,
                                                                          'Targeting 'OSFreeBSD])
                                                                    '[ 'Targeting 'OSDebian,
                                                                       'Targeting 'OSBuntish])
                                                                 '[ 'Targeting 'OSDebian,
                                                                    'Targeting 'OSBuntish,
                                                                    'Targeting 'OSArchLinux,
                                                                    'Targeting 'OSFreeBSD])
                                                              '[ 'WithInfo, 'Targeting 'OSDebian,
                                                                 'Targeting 'OSBuntish,
                                                                 'Targeting 'OSArchLinux,
                                                                 'Targeting 'OSFreeBSD])
                                                           '[ 'WithInfo, 'Targeting 'OSDebian,
                                                              'Targeting 'OSBuntish,
                                                              'Targeting 'OSArchLinux,
                                                              'Targeting 'OSFreeBSD])
                                                        '[ 'Targeting 'OSDebian,
                                                           'Targeting 'OSBuntish])
                                                     '[ 'Targeting 'OSDebian,
                                                        'Targeting 'OSBuntish])
                                                  '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                               '[ 'WithInfo, 'Targeting 'OSDebian,
                                                  'Targeting 'OSBuntish, 'Targeting 'OSArchLinux,
                                                  'Targeting 'OSFreeBSD])
                                            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                         '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                      '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                             '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                             'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                       'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& Service -> RevertableProperty DebianLike DebianLike
Postfix.service Service
ssmtp

	Props
  (Sing
     (Combine
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      (Combine
                                         (Combine
                                            (Combine
                                               (Combine
                                                  (Combine
                                                     (Combine
                                                        (Combine
                                                           (Combine
                                                              (Combine
                                                                 (Combine
                                                                    (Combine
                                                                       (Combine
                                                                          (Combine
                                                                             (Combine
                                                                                (Combine
                                                                                   (Combine
                                                                                      (Combine
                                                                                         (Combine
                                                                                            (Combine
                                                                                               (Combine
                                                                                                  (Combine
                                                                                                     (Combine
                                                                                                        (Combine
                                                                                                           (Combine
                                                                                                              (Combine
                                                                                                                 '[ 'Targeting
                                                                                                                      'OSDebian,
                                                                                                                    'Targeting
                                                                                                                      'OSBuntish]
                                                                                                                 '[ 'Targeting
                                                                                                                      'OSDebian,
                                                                                                                    'Targeting
                                                                                                                      'OSBuntish])
                                                                                                              '[ 'Targeting
                                                                                                                   'OSDebian,
                                                                                                                 'Targeting
                                                                                                                   'OSBuntish])
                                                                                                           '[ 'Targeting
                                                                                                                'OSDebian,
                                                                                                              'Targeting
                                                                                                                'OSBuntish])
                                                                                                        '[ 'Targeting
                                                                                                             'OSDebian,
                                                                                                           'Targeting
                                                                                                             'OSBuntish])
                                                                                                     '[ 'Targeting
                                                                                                          'OSDebian,
                                                                                                        'Targeting
                                                                                                          'OSBuntish])
                                                                                                  '[ 'Targeting
                                                                                                       'OSDebian,
                                                                                                     'Targeting
                                                                                                       'OSBuntish])
                                                                                               '[ 'Targeting
                                                                                                    'OSDebian,
                                                                                                  'Targeting
                                                                                                    'OSBuntish])
                                                                                            '[ 'Targeting
                                                                                                 'OSDebian,
                                                                                               'Targeting
                                                                                                 'OSBuntish])
                                                                                         '[ 'Targeting
                                                                                              'OSDebian,
                                                                                            'Targeting
                                                                                              'OSBuntish])
                                                                                      '[ 'WithInfo,
                                                                                         'Targeting
                                                                                           'OSDebian,
                                                                                         'Targeting
                                                                                           'OSBuntish])
                                                                                   '[ 'Targeting
                                                                                        'OSDebian,
                                                                                      'Targeting
                                                                                        'OSBuntish])
                                                                                '[ 'Targeting
                                                                                     'OSDebian,
                                                                                   'Targeting
                                                                                     'OSBuntish])
                                                                             '[ 'Targeting
                                                                                  'OSDebian,
                                                                                'Targeting
                                                                                  'OSBuntish])
                                                                          '[ 'Targeting 'OSDebian,
                                                                             'Targeting 'OSBuntish,
                                                                             'Targeting
                                                                               'OSArchLinux,
                                                                             'Targeting 'OSFreeBSD])
                                                                       '[ 'WithInfo,
                                                                          'Targeting 'OSDebian,
                                                                          'Targeting 'OSBuntish,
                                                                          'Targeting 'OSArchLinux,
                                                                          'Targeting 'OSFreeBSD])
                                                                    '[ 'WithInfo,
                                                                       'Targeting 'OSDebian,
                                                                       'Targeting 'OSBuntish,
                                                                       'Targeting 'OSArchLinux,
                                                                       'Targeting 'OSFreeBSD])
                                                                 '[ 'Targeting 'OSDebian,
                                                                    'Targeting 'OSBuntish])
                                                              '[ 'Targeting 'OSDebian,
                                                                 'Targeting 'OSBuntish,
                                                                 'Targeting 'OSArchLinux,
                                                                 'Targeting 'OSFreeBSD])
                                                           '[ 'WithInfo, 'Targeting 'OSDebian,
                                                              'Targeting 'OSBuntish,
                                                              'Targeting 'OSArchLinux,
                                                              'Targeting 'OSFreeBSD])
                                                        '[ 'WithInfo, 'Targeting 'OSDebian,
                                                           'Targeting 'OSBuntish,
                                                           'Targeting 'OSArchLinux,
                                                           'Targeting 'OSFreeBSD])
                                                     '[ 'Targeting 'OSDebian,
                                                        'Targeting 'OSBuntish])
                                                  '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                            '[ 'WithInfo, 'Targeting 'OSDebian,
                                               'Targeting 'OSBuntish, 'Targeting 'OSArchLinux,
                                               'Targeting 'OSFreeBSD])
                                         '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                      '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                          '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                             'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                          'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
-> Property DebianLike
-> Props
     (MetaTypes
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      (Combine
                                         (Combine
                                            (Combine
                                               (Combine
                                                  (Combine
                                                     (Combine
                                                        (Combine
                                                           (Combine
                                                              (Combine
                                                                 (Combine
                                                                    (Combine
                                                                       (Combine
                                                                          (Combine
                                                                             (Combine
                                                                                (Combine
                                                                                   (Combine
                                                                                      (Combine
                                                                                         (Combine
                                                                                            (Combine
                                                                                               (Combine
                                                                                                  (Combine
                                                                                                     (Combine
                                                                                                        (Combine
                                                                                                           (Combine
                                                                                                              (Combine
                                                                                                                 (Combine
                                                                                                                    (Combine
                                                                                                                       '[ 'Targeting
                                                                                                                            'OSDebian,
                                                                                                                          'Targeting
                                                                                                                            'OSBuntish]
                                                                                                                       '[ 'Targeting
                                                                                                                            'OSDebian,
                                                                                                                          'Targeting
                                                                                                                            'OSBuntish])
                                                                                                                    '[ 'Targeting
                                                                                                                         'OSDebian,
                                                                                                                       'Targeting
                                                                                                                         'OSBuntish])
                                                                                                                 '[ 'Targeting
                                                                                                                      'OSDebian,
                                                                                                                    'Targeting
                                                                                                                      'OSBuntish])
                                                                                                              '[ 'Targeting
                                                                                                                   'OSDebian,
                                                                                                                 'Targeting
                                                                                                                   'OSBuntish])
                                                                                                           '[ 'Targeting
                                                                                                                'OSDebian,
                                                                                                              'Targeting
                                                                                                                'OSBuntish])
                                                                                                        '[ 'Targeting
                                                                                                             'OSDebian,
                                                                                                           'Targeting
                                                                                                             'OSBuntish])
                                                                                                     '[ 'Targeting
                                                                                                          'OSDebian,
                                                                                                        'Targeting
                                                                                                          'OSBuntish])
                                                                                                  '[ 'Targeting
                                                                                                       'OSDebian,
                                                                                                     'Targeting
                                                                                                       'OSBuntish])
                                                                                               '[ 'Targeting
                                                                                                    'OSDebian,
                                                                                                  'Targeting
                                                                                                    'OSBuntish])
                                                                                            '[ 'WithInfo,
                                                                                               'Targeting
                                                                                                 'OSDebian,
                                                                                               'Targeting
                                                                                                 'OSBuntish])
                                                                                         '[ 'Targeting
                                                                                              'OSDebian,
                                                                                            'Targeting
                                                                                              'OSBuntish])
                                                                                      '[ 'Targeting
                                                                                           'OSDebian,
                                                                                         'Targeting
                                                                                           'OSBuntish])
                                                                                   '[ 'Targeting
                                                                                        'OSDebian,
                                                                                      'Targeting
                                                                                        'OSBuntish])
                                                                                '[ 'Targeting
                                                                                     'OSDebian,
                                                                                   'Targeting
                                                                                     'OSBuntish,
                                                                                   'Targeting
                                                                                     'OSArchLinux,
                                                                                   'Targeting
                                                                                     'OSFreeBSD])
                                                                             '[ 'WithInfo,
                                                                                'Targeting
                                                                                  'OSDebian,
                                                                                'Targeting
                                                                                  'OSBuntish,
                                                                                'Targeting
                                                                                  'OSArchLinux,
                                                                                'Targeting
                                                                                  'OSFreeBSD])
                                                                          '[ 'WithInfo,
                                                                             'Targeting 'OSDebian,
                                                                             'Targeting 'OSBuntish,
                                                                             'Targeting
                                                                               'OSArchLinux,
                                                                             'Targeting 'OSFreeBSD])
                                                                       '[ 'Targeting 'OSDebian,
                                                                          'Targeting 'OSBuntish])
                                                                    '[ 'Targeting 'OSDebian,
                                                                       'Targeting 'OSBuntish,
                                                                       'Targeting 'OSArchLinux,
                                                                       'Targeting 'OSFreeBSD])
                                                                 '[ 'WithInfo, 'Targeting 'OSDebian,
                                                                    'Targeting 'OSBuntish,
                                                                    'Targeting 'OSArchLinux,
                                                                    'Targeting 'OSFreeBSD])
                                                              '[ 'WithInfo, 'Targeting 'OSDebian,
                                                                 'Targeting 'OSBuntish,
                                                                 'Targeting 'OSArchLinux,
                                                                 'Targeting 'OSFreeBSD])
                                                           '[ 'Targeting 'OSDebian,
                                                              'Targeting 'OSBuntish])
                                                        '[ 'Targeting 'OSDebian,
                                                           'Targeting 'OSBuntish])
                                                     '[ 'Targeting 'OSDebian,
                                                        'Targeting 'OSBuntish])
                                                  '[ 'WithInfo, 'Targeting 'OSDebian,
                                                     'Targeting 'OSBuntish, 'Targeting 'OSArchLinux,
                                                     'Targeting 'OSFreeBSD])
                                               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                         '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                      '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                   'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                          'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                       'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [[Char]] -> Property DebianLike
Apt.installed [[Char]
"fetchmail"]
  where
	ctx :: Context
ctx = [Char] -> Context
Context [Char]
"kitenet.net"
	pinescript :: [Char]
pinescript = [Char]
"/usr/local/bin/pine"
	imapalpinescript :: [Char]
imapalpinescript = [Char]
"/usr/local/bin/imap-for-alpine"
	dovecotusers :: [Char]
dovecotusers = [Char]
"/etc/dovecot/users"

	ssmtp :: Service
ssmtp = ServiceType -> [Char] -> ServiceOpts -> Service
Postfix.Service
		(Maybe [Char] -> [Char] -> ServiceType
Postfix.InetService Maybe [Char]
forall a. Maybe a
Nothing [Char]
"ssmtp")
		[Char]
"smtpd" ServiceOpts
Postfix.defServiceOpts

-- Configures postfix to have the dkim milter, and no other milters.
dkimMilter :: Property (HasInfo + DebianLike)
dkimMilter :: Property (HasInfo + DebianLike)
dkimMilter = [Char]
Postfix.mainCfFile [Char] -> [[Char]] -> Property UnixLike
`File.containsLines`
	[ [Char]
"smtpd_milters = inet:localhost:8891"
	, [Char]
"non_smtpd_milters = inet:localhost:8891"
	, [Char]
"milter_default_action = accept"
	]
	Property UnixLike -> [Char] -> Property UnixLike
forall p. IsProp p => p -> [Char] -> p
`describe` [Char]
"postfix dkim milter"
	Property UnixLike
-> Property UnixLike
-> CombinedType (Property UnixLike) (Property UnixLike)
forall x y. Combines x y => x -> y -> CombinedType x y
`onChange` Property UnixLike
Postfix.dedupMainCf
	Property UnixLike
-> Property DebianLike
-> CombinedType (Property UnixLike) (Property DebianLike)
forall x y. Combines x y => x -> y -> CombinedType x y
`onChange` Property DebianLike
Postfix.reloaded
	CombinedType (Property UnixLike) (Property DebianLike)
-> Property
     (MetaTypes
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
-> CombinedType
     (CombinedType (Property UnixLike) (Property DebianLike))
     (Property
        (MetaTypes
           '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall x y. Combines x y => x -> y -> CombinedType x y
`requires` Property
  (MetaTypes
     '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
Property (HasInfo + DebianLike)
dkimInstalled
	CombinedType
  (CombinedType (Property UnixLike) (Property DebianLike))
  (Property
     (MetaTypes
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
-> Property DebianLike
-> CombinedType
     (CombinedType
        (CombinedType (Property UnixLike) (Property DebianLike))
        (Property
           (MetaTypes
              '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])))
     (Property DebianLike)
forall x y. Combines x y => x -> y -> CombinedType x y
`requires` Property DebianLike
Postfix.installed

-- This does not configure postfix to use the dkim milter,
-- nor does it set up domainkey DNS.
dkimInstalled :: Property (HasInfo + DebianLike)
dkimInstalled :: Property (HasInfo + DebianLike)
dkimInstalled = Property
  (MetaTypes
     '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
go Property
  (MetaTypes
     '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
-> Property DebianLike
-> CombinedType
     (Property
        (MetaTypes
           '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
     (Property DebianLike)
forall x y. Combines x y => x -> y -> CombinedType x y
`onChange` [Char] -> Property DebianLike
Service.restarted [Char]
"opendkim"
  where
	go :: Property
  (MetaTypes
     (Combine
        (Combine
           (Combine
              (Combine
                 (Combine
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                       'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                 '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
go = [Char]
-> Props
     (MetaTypes
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                          'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                    '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                       'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
-> Property
     (MetaTypes
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                          'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                    '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                       'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
forall {k} (metatypes :: k).
SingI metatypes =>
[Char]
-> Props (MetaTypes metatypes) -> Property (MetaTypes metatypes)
propertyList [Char]
"opendkim installed" (Props
   (MetaTypes
      (Combine
         (Combine
            (Combine
               (Combine
                  (Combine
                     '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                     '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                        'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                  '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                     'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                  'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
         '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
            'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
 -> Property
      (MetaTypes
         (Combine
            (Combine
               (Combine
                  (Combine
                     (Combine
                        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                           'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                     '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                        'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                  '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                     'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
               'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])))
-> Props
     (MetaTypes
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                          'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                    '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                       'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
-> Property
     (MetaTypes
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                          'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                    '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                       'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
forall a b. (a -> b) -> a -> b
$ Props UnixLike
props
		Props UnixLike
-> Property DebianLike
-> Props
     (MetaTypes
        (Combine
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char] -> Property DebianLike
Apt.serviceInstalledRunning [Char]
"opendkim"
		Props DebianLike
-> Property UnixLike
-> Props
     (Sing
        (Combine
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char] -> Property UnixLike
File.dirExists [Char]
"/etc/mail"
		Props
  (Sing
     (Combine
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
-> Property
     (MetaTypes
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
-> Props
     (Sing
        (Combine
           (Combine
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
           '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char] -> Context -> Property (HasInfo + UnixLike)
forall c.
IsContext c =>
[Char] -> c -> Property (HasInfo + UnixLike)
File.hasPrivContent [Char]
"/etc/mail/dkim.key" ([Char] -> Context
Context [Char]
"kitenet.net")
		Props
  (Sing
     (Combine
        (Combine
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
-> Property UnixLike
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
              '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char] -> User -> Group -> Property UnixLike
File.ownerGroup [Char]
"/etc/mail/dkim.key" ([Char] -> User
User [Char]
"root") ([Char] -> Group
Group [Char]
"root")
		Props
  (Sing
     (Combine
        (Combine
           (Combine
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
           '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
-> CombinedType (Property UnixLike) (Property DebianLike)
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 (Combine
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                       'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                 '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char]
"/etc/default/opendkim" [Char] -> [Char] -> Property UnixLike
`File.containsLine`
			[Char]
"SOCKET=\"inet:8891@localhost\""
			Property UnixLike
-> Property UnixLike
-> CombinedType (Property UnixLike) (Property UnixLike)
forall x y. Combines x y => x -> y -> CombinedType x y
`onChange` 
				([Char] -> [[Char]] -> UncheckedProperty UnixLike
cmdProperty [Char]
"/lib/opendkim/opendkim.service.generate" []
				UncheckedProperty UnixLike -> Result -> Property UnixLike
forall (p :: * -> *) i.
Checkable p i =>
p i -> Result -> Property i
`assume` Result
MadeChange)
			Property UnixLike
-> Property DebianLike
-> CombinedType (Property UnixLike) (Property DebianLike)
forall x y. Combines x y => x -> y -> CombinedType x y
`onChange` [Char] -> Property DebianLike
Service.restarted [Char]
"opendkim"
		Props
  (Sing
     (Combine
        (Combine
           (Combine
              (Combine
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
              '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
-> Property UnixLike
-> Props
     (MetaTypes
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                          'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                    '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                       'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char]
"/etc/opendkim.conf" [Char] -> [[Char]] -> Property UnixLike
`File.containsLines`
			[ [Char]
"KeyFile /etc/mail/dkim.key"
			, [Char]
"SubDomains yes"
			, [Char]
"Domain *"
			, [Char]
"Selector mail"
			]

-- This is the dkim public key, corresponding with /etc/mail/dkim.key
-- This value can be included in a domain's additional records to make
-- it use this domainkey.
domainKey :: (BindDomain, Record)
domainKey :: (BindDomain, Record)
domainKey = ([Char] -> BindDomain
RelDomain [Char]
"mail._domainkey", [Char] -> Record
TXT [Char]
"v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCc+/rfzNdt5DseBBmfB3C6sVM7FgVvf4h1FeCfyfwPpVcmPdW6M2I+NtJsbRkNbEICxiP6QY2UM0uoo9TmPqLgiCCG2vtuiG6XMsS0Y/gGwqKM7ntg/7vT1Go9vcquOFFuLa5PnzpVf8hB9+PMFdS4NPTvWL2c5xxshl/RJzICnQIDAQAB")

postfixSaslPasswordClient :: Property (HasInfo + DebianLike)
postfixSaslPasswordClient :: Property (HasInfo + DebianLike)
postfixSaslPasswordClient = [Char]
-> Props
     (MetaTypes
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
-> Property
     (MetaTypes
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
forall {k} (metatypes :: k).
SingI metatypes =>
[Char]
-> Props (MetaTypes metatypes) -> Property (MetaTypes metatypes)
combineProperties [Char]
"postfix uses SASL password to authenticate with smarthost" (Props
   (MetaTypes
      '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
 -> Property
      (MetaTypes
         '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
-> Props
     (MetaTypes
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
-> Property
     (MetaTypes
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
forall a b. (a -> b) -> a -> b
$ Props UnixLike
props
	Props UnixLike
-> CombinedType
     (Property
        (MetaTypes
           '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
     (Property UnixLike)
-> Props
     (Sing
        (Combine
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
           '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char]
-> ([Char]
    -> Property
         (MetaTypes
            '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
               'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
-> CombinedType
     (Property
        (MetaTypes
           '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
     (Property UnixLike)
forall x.
Combines (Property x) (Property UnixLike) =>
[Char]
-> ([Char] -> Property x)
-> CombinedType (Property x) (Property UnixLike)
Postfix.mappedFile [Char]
"/etc/postfix/sasl_passwd" 
		([Char] -> Context -> Property (HasInfo + UnixLike)
forall c.
IsContext c =>
[Char] -> c -> Property (HasInfo + UnixLike)
`File.hasPrivContent` ([Char] -> Context
Context [Char]
"kitenet.net"))
	Props
  (Sing
     (Combine
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
-> Property DebianLike
-> Props
     (Sing
        (Combine
           (Combine
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
              '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char]
Postfix.mainCfFile [Char] -> [[Char]] -> Property UnixLike
`File.containsLines`
		[ [Char]
"# TLS setup for SASL auth to kite"
		, [Char]
"smtp_sasl_auth_enable = yes"
		, [Char]
"smtp_tls_security_level = encrypt"
		, [Char]
"smtp_sasl_tls_security_options = noanonymous"
		, [Char]
"relayhost = kitenet.net:587"
		, [Char]
"smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd"
		]
		Property UnixLike
-> Property DebianLike
-> CombinedType (Property UnixLike) (Property DebianLike)
forall x y. Combines x y => x -> y -> CombinedType x y
`onChange` Property DebianLike
Postfix.reloaded
	-- Comes after so it does not set relayhost but uses the setting 
	-- above.
	Props
  (Sing
     (Combine
        (Combine
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
           '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
-> Property DebianLike
-> Props
     (MetaTypes
        (Combine
           (Combine
              (Combine
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
                 '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& Property DebianLike
Postfix.satellite

hasPostfixCert :: Context -> Property (HasInfo + UnixLike)
hasPostfixCert :: Context -> Property (HasInfo + UnixLike)
hasPostfixCert Context
ctx = [Char]
-> Props
     (MetaTypes
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
-> Property
     (MetaTypes
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
forall {k} (metatypes :: k).
SingI metatypes =>
[Char]
-> Props (MetaTypes metatypes) -> Property (MetaTypes metatypes)
combineProperties [Char]
"postfix tls cert installed" (Props
   (MetaTypes
      '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
         'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
 -> Property
      (MetaTypes
         '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
            'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
-> Props
     (MetaTypes
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
-> Property
     (MetaTypes
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
forall a b. (a -> b) -> a -> b
$ Props UnixLike
props
	Props UnixLike
-> Property
     (MetaTypes
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
-> Props
     (Sing
        (Combine
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
           '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char]
"/etc/ssl/certs/postfix.pem" [Char] -> Context -> Property (HasInfo + UnixLike)
forall c.
IsContext c =>
[Char] -> c -> Property (HasInfo + UnixLike)
`File.hasPrivContentExposed` Context
ctx
	Props
  (Sing
     (Combine
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
-> Property
     (MetaTypes
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
-> Props
     (MetaTypes
        (Combine
           (Combine
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
              '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
           '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char]
"/etc/ssl/private/postfix.pem" [Char] -> Context -> Property (HasInfo + UnixLike)
forall c.
IsContext c =>
[Char] -> c -> Property (HasInfo + UnixLike)
`File.hasPrivContent` Context
ctx

-- Legacy static web sites and redirections from kitenet.net to newer
-- sites.
legacyWebSites :: Property (HasInfo + DebianLike)
legacyWebSites :: Property (HasInfo + DebianLike)
legacyWebSites = [Char]
-> Props
     (MetaTypes
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
-> Property
     (MetaTypes
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
forall {k} (metatypes :: k).
SingI metatypes =>
[Char]
-> Props (MetaTypes metatypes) -> Property (MetaTypes metatypes)
propertyList [Char]
"legacy web sites" (Props
   (MetaTypes
      '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
 -> Property
      (MetaTypes
         '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
-> Props
     (MetaTypes
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
-> Property
     (MetaTypes
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
forall a b. (a -> b) -> a -> b
$ Props UnixLike
props
	Props UnixLike
-> Property DebianLike
-> Props
     (MetaTypes
        (Combine
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char] -> Property DebianLike
Apt.serviceInstalledRunning [Char]
"apache2"
	Props DebianLike
-> RevertableProperty DebianLike DebianLike
-> Props
     (Sing
        (Combine
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char] -> RevertableProperty DebianLike DebianLike
Apache.modEnabled [Char]
"rewrite"
	Props
  (Sing
     (Combine
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
-> RevertableProperty DebianLike DebianLike
-> Props
     (MetaTypes
        (Combine
           (Combine
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char] -> RevertableProperty DebianLike DebianLike
Apache.modEnabled [Char]
"cgi"
	Props
  (MetaTypes
     (Combine
        (Combine
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
-> RevertableProperty DebianLike DebianLike
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char] -> RevertableProperty DebianLike DebianLike
Apache.modEnabled [Char]
"speling"
	Props
  (Sing
     (Combine
        (Combine
           (Combine
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
-> Property DebianLike
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 (Combine
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& Property DebianLike
userDirHtml
	Props
  (Sing
     (Combine
        (Combine
           (Combine
              (Combine
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
-> RevertableProperty DebianLike DebianLike
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char]
-> [Char]
-> AgreeTOS
-> [[Char]]
-> RevertableProperty DebianLike DebianLike
Apache.httpsVirtualHost' [Char]
"kitenet.net" [Char]
"/var/www" AgreeTOS
letos [[Char]]
kitenetcfg
	Props
  (Sing
     (Combine
        (Combine
           (Combine
              (Combine
                 (Combine
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
-> Property
     (MetaTypes
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char] -> Property (HasInfo + UnixLike)
alias [Char]
"anna.kitenet.net"
	Props
  (Sing
     (Combine
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
-> RevertableProperty DebianLike DebianLike
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char] -> [[Char]] -> RevertableProperty DebianLike DebianLike
apacheSite [Char]
"anna.kitenet.net"
		[ [Char]
"DocumentRoot /home/anna/html"
		, [Char]
"<Directory /home/anna/html/>"
		, [Char]
"  Options Indexes ExecCGI"
		, [Char]
"  AllowOverride None"
		, [Char]
Apache.allowAll
		, [Char]
"</Directory>"
		]
	Props
  (Sing
     (Combine
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
-> Property
     (MetaTypes
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char] -> Property (HasInfo + UnixLike)
alias [Char]
"sows-ear.kitenet.net"
	Props
  (Sing
     (Combine
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
-> Property
     (MetaTypes
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                       'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
           '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char] -> Property (HasInfo + UnixLike)
alias [Char]
"www.sows-ear.kitenet.net"
	Props
  (Sing
     (Combine
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
-> RevertableProperty DebianLike DebianLike
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                                      '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                          'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
              '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char] -> [[Char]] -> RevertableProperty DebianLike DebianLike
apacheSite [Char]
"sows-ear.kitenet.net"
		[ [Char]
"ServerAlias www.sows-ear.kitenet.net"
		, [Char]
"DocumentRoot /srv/web/sows-ear.kitenet.net"
		, [Char]
"<Directory /srv/web/sows-ear.kitenet.net>"
		, [Char]
"  Options FollowSymLinks"
		, [Char]
"  AllowOverride None"
		, [Char]
Apache.allowAll
		, [Char]
"</Directory>"
		, [Char]
"RewriteEngine On"
		, [Char]
"RewriteRule .* http://www.sowsearpoetry.org/ [L]"
		]
	Props
  (Sing
     (Combine
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                       'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
           '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
-> Property
     (MetaTypes
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      (Combine
                                         '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                                         '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                      '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                          '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                             'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                       'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                 '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char] -> Property (HasInfo + UnixLike)
alias [Char]
"wortroot.kitenet.net"
	Props
  (Sing
     (Combine
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                                      '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                          'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
              '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
-> Property
     (MetaTypes
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      (Combine
                                         (Combine
                                            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                                            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                         '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                      '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                             '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                          'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                    '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                       'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
           '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char] -> Property (HasInfo + UnixLike)
alias [Char]
"www.wortroot.kitenet.net"
	Props
  (Sing
     (Combine
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      (Combine
                                         '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                                         '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                      '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                          '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                             'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                       'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                 '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
-> RevertableProperty DebianLike DebianLike
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      (Combine
                                         (Combine
                                            (Combine
                                               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                                               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                         '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                      '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                   'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                          '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                             'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                       '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                          'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
              '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char] -> [[Char]] -> RevertableProperty DebianLike DebianLike
apacheSite [Char]
"wortroot.kitenet.net"
		[ [Char]
"ServerAlias www.wortroot.kitenet.net"
		, [Char]
"DocumentRoot /srv/web/wortroot.kitenet.net"
		, [Char]
"<Directory /srv/web/wortroot.kitenet.net>"
		, [Char]
"  Options FollowSymLinks"
		, [Char]
"  AllowOverride None"
		, [Char]
Apache.allowAll
		, [Char]
"</Directory>"
		]
	Props
  (Sing
     (Combine
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      (Combine
                                         (Combine
                                            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                                            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                         '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                      '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                             '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                          'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                    '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                       'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
           '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
-> Property
     (MetaTypes
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      (Combine
                                         (Combine
                                            (Combine
                                               (Combine
                                                  '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                                                  '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                         '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                      '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                   '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                      'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                             '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                          '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                             'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                       'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                 '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char] -> Property (HasInfo + UnixLike)
alias [Char]
"creeksidepress.com"
	Props
  (Sing
     (Combine
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      (Combine
                                         (Combine
                                            (Combine
                                               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                                               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                         '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                      '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                   'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                          '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                             'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                       '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                          'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
              '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
-> RevertableProperty DebianLike DebianLike
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      (Combine
                                         (Combine
                                            (Combine
                                               (Combine
                                                  (Combine
                                                     '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                                                     '[ 'Targeting 'OSDebian,
                                                        'Targeting 'OSBuntish])
                                                  '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                         '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                      '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                         'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                   'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                             '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                          'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                    '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                       'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char] -> [[Char]] -> RevertableProperty DebianLike DebianLike
apacheSite [Char]
"creeksidepress.com"
		[ [Char]
"ServerAlias www.creeksidepress.com"
		, [Char]
"DocumentRoot /srv/web/www.creeksidepress.com"
		, [Char]
"<Directory /srv/web/www.creeksidepress.com>"
		, [Char]
"  Options FollowSymLinks"
		, [Char]
"  AllowOverride None"
		, [Char]
Apache.allowAll
		, [Char]
"</Directory>"
		]
	Props
  (Sing
     (Combine
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      (Combine
                                         (Combine
                                            (Combine
                                               (Combine
                                                  '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                                                  '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                         '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                      '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                   '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                      'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                             '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                          '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                             'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                       'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                 '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
-> Property
     (MetaTypes
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      (Combine
                                         (Combine
                                            (Combine
                                               (Combine
                                                  (Combine
                                                     (Combine
                                                        '[ 'Targeting 'OSDebian,
                                                           'Targeting 'OSBuntish]
                                                        '[ 'Targeting 'OSDebian,
                                                           'Targeting 'OSBuntish])
                                                     '[ 'Targeting 'OSDebian,
                                                        'Targeting 'OSBuntish])
                                                  '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                         '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                            'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                                      '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                   '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                      'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                                '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                   'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                          '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                             'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                       '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                          'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char] -> Property (HasInfo + UnixLike)
alias [Char]
"joey.kitenet.net"
	Props
  (Sing
     (Combine
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      (Combine
                                         (Combine
                                            (Combine
                                               (Combine
                                                  (Combine
                                                     '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                                                     '[ 'Targeting 'OSDebian,
                                                        'Targeting 'OSBuntish])
                                                  '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                         '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                      '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                         'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                   'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                             '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                          'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                    '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                       'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
-> RevertableProperty DebianLike DebianLike
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      (Combine
                                         (Combine
                                            (Combine
                                               (Combine
                                                  (Combine
                                                     (Combine
                                                        (Combine
                                                           '[ 'Targeting 'OSDebian,
                                                              'Targeting 'OSBuntish]
                                                           '[ 'Targeting 'OSDebian,
                                                              'Targeting 'OSBuntish])
                                                        '[ 'Targeting 'OSDebian,
                                                           'Targeting 'OSBuntish])
                                                     '[ 'Targeting 'OSDebian,
                                                        'Targeting 'OSBuntish])
                                                  '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                            '[ 'WithInfo, 'Targeting 'OSDebian,
                                               'Targeting 'OSBuntish, 'Targeting 'OSArchLinux,
                                               'Targeting 'OSFreeBSD])
                                         '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                      '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                         'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                                   '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                      'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                             '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                          '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                             'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                       'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char] -> [[Char]] -> RevertableProperty DebianLike DebianLike
apacheSite [Char]
"joey.kitenet.net"
		[ [Char]
"DocumentRoot /var/www"
		, [Char]
"<Directory /var/www/>"
		, [Char]
"  Options Indexes ExecCGI"
		, [Char]
"  AllowOverride None"
		, [Char]
Apache.allowAll
		, [Char]
"</Directory>"

		, [Char]
"RewriteEngine On"

		, [Char]
"# Old ikiwiki filenames for joey's wiki."
		, [Char]
"rewritecond $1 !.*/index$"
		, [Char]
"rewriterule (.+).html$ http://joeyh.name/$1/ [l]"

		, [Char]
"rewritecond $1 !.*/index$"
		, [Char]
"rewriterule (.+).rss$ http://joeyh.name/$1/index.rss [l]"

		, [Char]
"# Redirect all to joeyh.name."
		, [Char]
"rewriterule (.*) http://joeyh.name$1 [r]"
		]
	Props
  (Sing
     (Combine
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      (Combine
                                         (Combine
                                            (Combine
                                               (Combine
                                                  (Combine
                                                     (Combine
                                                        '[ 'Targeting 'OSDebian,
                                                           'Targeting 'OSBuntish]
                                                        '[ 'Targeting 'OSDebian,
                                                           'Targeting 'OSBuntish])
                                                     '[ 'Targeting 'OSDebian,
                                                        'Targeting 'OSBuntish])
                                                  '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                         '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                            'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                                      '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                   '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                      'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                                '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                   'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                          '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                             'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                       '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                          'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
-> Property
     (MetaTypes
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      (Combine
                                         (Combine
                                            (Combine
                                               (Combine
                                                  (Combine
                                                     (Combine
                                                        (Combine
                                                           (Combine
                                                              '[ 'Targeting 'OSDebian,
                                                                 'Targeting 'OSBuntish]
                                                              '[ 'Targeting 'OSDebian,
                                                                 'Targeting 'OSBuntish])
                                                           '[ 'Targeting 'OSDebian,
                                                              'Targeting 'OSBuntish])
                                                        '[ 'Targeting 'OSDebian,
                                                           'Targeting 'OSBuntish])
                                                     '[ 'Targeting 'OSDebian,
                                                        'Targeting 'OSBuntish])
                                                  '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                               '[ 'WithInfo, 'Targeting 'OSDebian,
                                                  'Targeting 'OSBuntish, 'Targeting 'OSArchLinux,
                                                  'Targeting 'OSFreeBSD])
                                            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                         '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                            'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                                      '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                         'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                   'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                             '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                          'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char] -> Property (HasInfo + UnixLike)
alias [Char]
"house.joeyh.name"
	Props
  (Sing
     (Combine
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      (Combine
                                         (Combine
                                            (Combine
                                               (Combine
                                                  (Combine
                                                     (Combine
                                                        (Combine
                                                           '[ 'Targeting 'OSDebian,
                                                              'Targeting 'OSBuntish]
                                                           '[ 'Targeting 'OSDebian,
                                                              'Targeting 'OSBuntish])
                                                        '[ 'Targeting 'OSDebian,
                                                           'Targeting 'OSBuntish])
                                                     '[ 'Targeting 'OSDebian,
                                                        'Targeting 'OSBuntish])
                                                  '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                            '[ 'WithInfo, 'Targeting 'OSDebian,
                                               'Targeting 'OSBuntish, 'Targeting 'OSArchLinux,
                                               'Targeting 'OSFreeBSD])
                                         '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                      '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                         'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                                   '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                      'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                             '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                          '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                             'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                       'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
-> RevertableProperty DebianLike DebianLike
-> Props
     (MetaTypes
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      (Combine
                                         (Combine
                                            (Combine
                                               (Combine
                                                  (Combine
                                                     (Combine
                                                        (Combine
                                                           (Combine
                                                              (Combine
                                                                 '[ 'Targeting 'OSDebian,
                                                                    'Targeting 'OSBuntish]
                                                                 '[ 'Targeting 'OSDebian,
                                                                    'Targeting 'OSBuntish])
                                                              '[ 'Targeting 'OSDebian,
                                                                 'Targeting 'OSBuntish])
                                                           '[ 'Targeting 'OSDebian,
                                                              'Targeting 'OSBuntish])
                                                        '[ 'Targeting 'OSDebian,
                                                           'Targeting 'OSBuntish])
                                                     '[ 'Targeting 'OSDebian,
                                                        'Targeting 'OSBuntish])
                                                  '[ 'WithInfo, 'Targeting 'OSDebian,
                                                     'Targeting 'OSBuntish, 'Targeting 'OSArchLinux,
                                                     'Targeting 'OSFreeBSD])
                                               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                            '[ 'WithInfo, 'Targeting 'OSDebian,
                                               'Targeting 'OSBuntish, 'Targeting 'OSArchLinux,
                                               'Targeting 'OSFreeBSD])
                                         '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                            'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                                      '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                   '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                      'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                                '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                   'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                          '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                             'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                       'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char] -> [[Char]] -> RevertableProperty DebianLike DebianLike
apacheSite [Char]
"house.joeyh.name"
		[ [Char]
"DocumentRoot /srv/web/house.joeyh.name"
		, [Char]
"<Directory /srv/web/house.joeyh.name>"
		, [Char]
"  Options Indexes ExecCGI"
		, [Char]
"  AllowOverride None"
		, [Char]
Apache.allowAll
		, [Char]
"</Directory>"
		]
  where
	kitenetcfg :: [[Char]]
kitenetcfg =
		-- /var/www is empty
		[ [Char]
"DocumentRoot /var/www"
		, [Char]
"<Directory /var/www>"
		, [Char]
"  Options Indexes FollowSymLinks MultiViews ExecCGI Includes"
		, [Char]
"  AllowOverride None"
		, [Char]
Apache.allowAll
		, [Char]
"</Directory>"
		, [Char]
"RewriteEngine On"
		, [Char]
"# Force hostname to kitenet.net"
		, [Char]
"RewriteCond %{HTTP_HOST} !^kitenet\\.net [NC]"
		, [Char]
"RewriteCond %{HTTP_HOST} !^$"
		, [Char]
"RewriteRule ^/(.*) http://kitenet\\.net/$1 [L,R]"

		, [Char]
"# Moved pages"
		, [Char]
"RewriteRule /programs/debhelper http://joeyh.name/code/debhelper/ [L]"
		, [Char]
"RewriteRule /programs/satutils http://joeyh.name/code/satutils/ [L]"
		, [Char]
"RewriteRule /programs/filters http://joeyh.name/code/filters/ [L]"
		, [Char]
"RewriteRule /programs/ticker http://joeyh.name/code/ticker/ [L]"
		, [Char]
"RewriteRule /programs/pdmenu http://joeyh.name/code/pdmenu/ [L]"
		, [Char]
"RewriteRule /programs/sleepd http://joeyh.name/code/sleepd/ [L]"
		, [Char]
"RewriteRule /programs/Lingua::EN::Words2Nums http://joeyh.name/code/Words2Nums/ [L]"
		, [Char]
"RewriteRule /programs/wmbattery http://joeyh.name/code/wmbattery/ [L]"
		, [Char]
"RewriteRule /programs/dpkg-repack http://joeyh.name/code/dpkg-repack/ [L]"
		, [Char]
"RewriteRule /programs/debconf http://joeyh.name/code/debconf/ [L]"
		, [Char]
"RewriteRule /programs/perlmoo http://joeyh.name/code/perlmoo/ [L]"
		, [Char]
"RewriteRule /programs/alien http://joeyh.name/code/alien/ [L]"
		, [Char]
"RewriteRule /~joey/blog/entry/(.+)-[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]-[0-9][0-9]-[0-9][0-9].html http://joeyh.name/blog/entry/$1/ [L]"
		, [Char]
"RewriteRule /~anna/.* http://waldeneffect\\.org/ [R]"
		, [Char]
"RewriteRule /~anna/.* http://waldeneffect\\.org/ [R]"
		, [Char]
"RewriteRule /~anna http://waldeneffect\\.org/ [R]"
		, [Char]
"RewriteRule /simpleid/ http://openid.kitenet.net:8086/simpleid/"
		, [Char]
"# Even the kite home page is not here any more!"
		, [Char]
"RewriteRule ^/$ http://www.kitenet.net/ [R]"
		, [Char]
"RewriteRule ^/index.html http://www.kitenet.net/ [R]"
		, [Char]
"RewriteRule ^/joey http://www.kitenet.net/joey/ [R]"
		, [Char]
"RewriteRule ^/joey/index.html http://www.kitenet.net/joey/ [R]"
		, [Char]
"RewriteRule ^/wifi http://www.kitenet.net/wifi/ [R]"
		, [Char]
"RewriteRule ^/wifi/index.html http://www.kitenet.net/wifi/ [R]"

		, [Char]
"# Old ikiwiki filenames for kitenet.net wiki."
		, [Char]
"rewritecond $1 !^/~"
		, [Char]
"rewritecond $1 !^/doc/"
		, [Char]
"rewritecond $1 !^/cgi-bin/"
		, [Char]
"rewritecond $1 !.*/index$"
		, [Char]
"rewriterule (.+).html$ $1/ [r]"

		, [Char]
"# Old ikiwiki filenames for joey's wiki."
		, [Char]
"rewritecond $1 ^/~joey/"
		, [Char]
"rewritecond $1 !.*/index$"
		, [Char]
"rewriterule (.+).html$ http://kitenet.net/$1/ [L,R]"

		, [Char]
"# ~joey to joeyh.name"
		, [Char]
"rewriterule /~joey/(.*) http://joeyh.name/$1 [L]"

		, [Char]
"# Old familywiki location."
		, [Char]
"rewriterule /~family/(.*).html http://family.kitenet.net/$1 [L]"
		, [Char]
"rewriterule /~family/(.*).rss http://family.kitenet.net/$1/index.rss [L]"
		, [Char]
"rewriterule /~family(.*) http://family.kitenet.net$1 [L]"

		, [Char]
"rewriterule /~kyle/bywayofscience(.*) http://bywayofscience.branchable.com$1 [L]"
		, [Char]
"rewriterule /~kyle/family/wiki/(.*).html http://macleawiki.branchable.com/$1 [L]"
		, [Char]
"rewriterule /~kyle/family/wiki/(.*).rss http://macleawiki.branchable.com/$1/index.rss [L]"
		, [Char]
"rewriterule /~kyle/family/wiki(.*) http://macleawiki.branchable.com$1 [L]"
		]

userDirHtml :: Property DebianLike
userDirHtml :: Property DebianLike
userDirHtml = [Char] -> ([[Char]] -> [[Char]]) -> [Char] -> Property UnixLike
forall c.
(FileContent c, Eq c) =>
[Char] -> (c -> c) -> [Char] -> Property UnixLike
File.fileProperty [Char]
"apache userdir is html" (([Char] -> [Char]) -> [[Char]] -> [[Char]]
forall a b. (a -> b) -> [a] -> [b]
map [Char] -> [Char]
munge) [Char]
conf
	Property UnixLike
-> Property DebianLike
-> CombinedType (Property UnixLike) (Property DebianLike)
forall x y. Combines x y => x -> y -> CombinedType x y
`onChange` Property DebianLike
Apache.reloaded
	Property DebianLike
-> RevertableProperty DebianLike DebianLike
-> CombinedType
     (Property DebianLike) (RevertableProperty DebianLike DebianLike)
forall x y. Combines x y => x -> y -> CombinedType x y
`requires` [Char] -> RevertableProperty DebianLike DebianLike
Apache.modEnabled [Char]
"userdir"
  where
	munge :: [Char] -> [Char]
munge = [Char] -> [Char] -> [Char] -> [Char]
forall a. Eq a => [a] -> [a] -> [a] -> [a]
replace [Char]
"public_html" [Char]
"html"
	conf :: [Char]
conf = [Char]
"/etc/apache2/mods-available/userdir.conf"

-- Alarm clock: see
-- <http://joeyh.name/blog/entry/a_programmable_alarm_clock_using_systemd/>
--
-- oncalendar example value: "*-*-* 7:30"
alarmClock :: String -> User -> String -> Property Linux
alarmClock :: [Char] -> User -> [Char] -> Property Linux
alarmClock [Char]
oncalendar (User [Char]
user) [Char]
command = [Char] -> Props Linux -> Property Linux
forall {k} (metatypes :: k).
SingI metatypes =>
[Char]
-> Props (MetaTypes metatypes) -> Property (MetaTypes metatypes)
combineProperties [Char]
"goodmorning timer installed" (Props Linux -> Property Linux) -> Props Linux -> Property Linux
forall a b. (a -> b) -> a -> b
$ Props UnixLike
props
	Props UnixLike
-> CombinedType (Property UnixLike) (Property Linux)
-> Props
     (Sing
        (Combine
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char]
"/etc/systemd/system/goodmorning.timer" [Char] -> [[Char]] -> Property UnixLike
`File.hasContent`
		[ [Char]
"[Unit]"
		, [Char]
"Description=good morning"
		, [Char]
""
		, [Char]
"[Timer]"
		, [Char]
"Unit=goodmorning.service"
		, [Char]
"OnCalendar=" [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
oncalendar
		, [Char]
"WakeSystem=true"
		, [Char]
"Persistent=false"
		, [Char]
""
		, [Char]
"[Install]"
		, [Char]
"WantedBy=multi-user.target"
		]
		Property UnixLike
-> Property Linux
-> CombinedType (Property UnixLike) (Property Linux)
forall x y. Combines x y => x -> y -> CombinedType x y
`onChange` (Property Linux
Systemd.daemonReloaded
			Property Linux
-> Property Linux -> CombinedType (Property Linux) (Property Linux)
forall x y. Combines x y => x -> y -> CombinedType x y
`before` [Char] -> Property Linux
Systemd.restarted [Char]
"goodmorning.timer")
	Props
  (Sing
     (Combine
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux]))
-> Property Linux
-> Props
     (Sing
        (Combine
           (Combine
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char]
"/etc/systemd/system/goodmorning.service" [Char] -> [[Char]] -> Property UnixLike
`File.hasContent`
		[ [Char]
"[Unit]"
		, [Char]
"Description=good morning"
		, [Char]
"RefuseManualStart=true"
		, [Char]
"RefuseManualStop=true"
		, [Char]
"ConditionACPower=true"
		, [Char]
"StopWhenUnneeded=yes"
		, [Char]
""
		, [Char]
"[Service]"
		, [Char]
"Type=oneshot"
		, [Char]
"ExecStart=/bin/systemd-inhibit --what=handle-lid-switch --why=goodmorning /bin/su " [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
user [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
" -c \"" [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
command [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
"\""
		]
		Property UnixLike
-> Property Linux
-> CombinedType (Property UnixLike) (Property Linux)
forall x y. Combines x y => x -> y -> CombinedType x y
`onChange` Property Linux
Systemd.daemonReloaded
	Props
  (Sing
     (Combine
        (Combine
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux]))
-> Property Linux
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char] -> Property Linux
Systemd.enabled [Char]
"goodmorning.timer"
	Props
  (Sing
     (Combine
        (Combine
           (Combine
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux]))
-> Property Linux
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 (Combine
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                       'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                       'Targeting 'OSArchLinux])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char] -> Property Linux
Systemd.started [Char]
"goodmorning.timer"
	Props
  (Sing
     (Combine
        (Combine
           (Combine
              (Combine
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux]))
-> Property UnixLike
-> Props
     (MetaTypes
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                          'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                          'Targeting 'OSArchLinux])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                       'Targeting 'OSArchLinux])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char]
"/etc/systemd/logind.conf" [Char] -> ([Char], [Char], [Char]) -> Property UnixLike
`ConfFile.containsIniSetting`
		([Char]
"Login", [Char]
"LidSwitchIgnoreInhibited", [Char]
"no")

house :: IsContext c => User -> [Host] -> c -> (SshKeyType, Ssh.PubKeyText) -> Property (HasInfo + DebianLike)
house :: forall c.
IsContext c =>
User
-> [Host]
-> c
-> (SshKeyType, [Char])
-> Property (HasInfo + DebianLike)
house User
user [Host]
hosts c
ctx (SshKeyType, [Char])
sshkey = [Char]
-> Props
     (MetaTypes
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
-> Property
     (MetaTypes
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
forall {k} (metatypes :: k).
SingI metatypes =>
[Char]
-> Props (MetaTypes metatypes) -> Property (MetaTypes metatypes)
propertyList [Char]
"home automation" (Props
   (MetaTypes
      '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
 -> Property
      (MetaTypes
         '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
-> Props
     (MetaTypes
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
-> Property
     (MetaTypes
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
forall a b. (a -> b) -> a -> b
$ Props UnixLike
props
	Props UnixLike
-> Property DebianLike
-> Props
     (MetaTypes
        (Combine
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& Property DebianLike
Apache.installed
	Props DebianLike
-> Property DebianLike
-> Props
     (Sing
        (Combine
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [[Char]] -> Property DebianLike
Apt.installed [[Char]
"libmodbus-dev", [Char]
"rrdtool", [Char]
"rsync"]
	Props
  (Sing
     (Combine
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
-> Property DebianLike
-> Props
     (MetaTypes
        (Combine
           (Combine
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& User -> [Char] -> [Char] -> Maybe [Char] -> Property DebianLike
Git.cloned User
user [Char]
"https://git.joeyh.name/git/joey/house.git" [Char]
d Maybe [Char]
forall a. Maybe a
Nothing
	Props
  (MetaTypes
     (Combine
        (Combine
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
-> Property UnixLike
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& Property UnixLike
websitesymlink
	Props
  (Sing
     (Combine
        (Combine
           (Combine
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
-> Property DebianLike
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 (Combine
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& Property DebianLike
build
	Props
  (Sing
     (Combine
        (Combine
           (Combine
              (Combine
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
-> CombinedType (Property Linux) (Property Linux)
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char] -> Property Linux
Systemd.enabled [Char]
setupservicename
		Property Linux
-> Property UnixLike
-> CombinedType (Property Linux) (Property UnixLike)
forall x y. Combines x y => x -> y -> CombinedType x y
`requires` Property UnixLike
setupserviceinstalled
		Property Linux
-> Property Linux -> CombinedType (Property Linux) (Property Linux)
forall x y. Combines x y => x -> y -> CombinedType x y
`onChange` [Char] -> Property Linux
Systemd.started [Char]
setupservicename
	Props
  (Sing
     (Combine
        (Combine
           (Combine
              (Combine
                 (Combine
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux]))
-> CombinedType (Property Linux) (Property Linux)
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                       'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char] -> Property Linux
Systemd.enabled [Char]
pollerservicename
		Property Linux
-> Property UnixLike
-> CombinedType (Property Linux) (Property UnixLike)
forall x y. Combines x y => x -> y -> CombinedType x y
`requires` Property UnixLike
pollerserviceinstalled
		Property Linux
-> Property Linux -> CombinedType (Property Linux) (Property Linux)
forall x y. Combines x y => x -> y -> CombinedType x y
`onChange` [Char] -> Property Linux
Systemd.started [Char]
pollerservicename
	Props
  (Sing
     (Combine
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux]))
-> CombinedType (Property Linux) (Property Linux)
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                          'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char] -> Property Linux
Systemd.enabled [Char]
controllerservicename
		Property Linux
-> Property UnixLike
-> CombinedType (Property Linux) (Property UnixLike)
forall x y. Combines x y => x -> y -> CombinedType x y
`requires` Property UnixLike
controllerserviceinstalled
		Property Linux
-> Property Linux -> CombinedType (Property Linux) (Property Linux)
forall x y. Combines x y => x -> y -> CombinedType x y
`onChange` [Char] -> Property Linux
Systemd.started [Char]
controllerservicename
	Props
  (Sing
     (Combine
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                       'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux]))
-> CombinedType (Property Linux) (Property Linux)
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                             'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                       'Targeting 'OSArchLinux])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char] -> Property Linux
Systemd.enabled [Char]
watchdogservicename
		Property Linux
-> Property UnixLike
-> CombinedType (Property Linux) (Property UnixLike)
forall x y. Combines x y => x -> y -> CombinedType x y
`requires` Property UnixLike
watchdogserviceinstalled
		Property Linux
-> Property Linux -> CombinedType (Property Linux) (Property Linux)
forall x y. Combines x y => x -> y -> CombinedType x y
`onChange` [Char] -> Property Linux
Systemd.started [Char]
watchdogservicename
	Props
  (Sing
     (Combine
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                          'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux]))
-> Property DebianLike
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                          'Targeting 'OSArchLinux])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                       'Targeting 'OSArchLinux])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char] -> Property DebianLike
Apt.serviceInstalledRunning [Char]
"watchdog"
	Props
  (Sing
     (Combine
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                             'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                       'Targeting 'OSArchLinux])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
-> Property DebianLike
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                                      '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                   'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                             'Targeting 'OSArchLinux])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                          'Targeting 'OSArchLinux])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                       'Targeting 'OSArchLinux])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char]
"/etc/watchdog.conf" [Char] -> [[Char]] -> Property UnixLike
`File.containsLines`
		[ [Char]
"watchdog-device = /dev/watchdog0"
		, [Char]
"watchdog-timeout = 16" -- maximum supported by cubietruck
		, [Char]
"interval = 1"
		]
		Property UnixLike
-> Property DebianLike
-> CombinedType (Property UnixLike) (Property DebianLike)
forall x y. Combines x y => x -> y -> CombinedType x y
`onChange` [Char] -> Property DebianLike
Service.reloaded [Char]
"watchdog"
	Props
  (Sing
     (Combine
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                          'Targeting 'OSArchLinux])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                       'Targeting 'OSArchLinux])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
-> Property UnixLike
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      (Combine
                                         '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                                         '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                      '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                      'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                'Targeting 'OSArchLinux])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                             'Targeting 'OSArchLinux])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                          'Targeting 'OSArchLinux])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                       'Targeting 'OSArchLinux])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& Group -> Maybe Int -> Property UnixLike
Group.exists ([Char] -> Group
Group [Char]
"gpio") Maybe Int
forall a. Maybe a
Nothing
	Props
  (Sing
     (Combine
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                                      '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                   'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                             'Targeting 'OSArchLinux])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                          'Targeting 'OSArchLinux])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                       'Targeting 'OSArchLinux])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
-> Property DebianLike
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      (Combine
                                         (Combine
                                            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                                            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                         '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                      '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                         'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                   'Targeting 'OSArchLinux])
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                'Targeting 'OSArchLinux])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                             'Targeting 'OSArchLinux])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                          'Targeting 'OSArchLinux])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& User -> Group -> Property DebianLike
User.hasGroup User
user ([Char] -> Group
Group [Char]
"gpio")
	Props
  (Sing
     (Combine
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      (Combine
                                         '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                                         '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                      '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                      'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                'Targeting 'OSArchLinux])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                             'Targeting 'OSArchLinux])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                          'Targeting 'OSArchLinux])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                       'Targeting 'OSArchLinux])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
-> Property DebianLike
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      (Combine
                                         (Combine
                                            (Combine
                                               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                                               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                         '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                            'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                                      '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                      'Targeting 'OSArchLinux])
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                   'Targeting 'OSArchLinux])
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                'Targeting 'OSArchLinux])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                             'Targeting 'OSArchLinux])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [[Char]] -> Property DebianLike
Apt.installed [[Char]
"i2c-tools"]
	Props
  (Sing
     (Combine
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      (Combine
                                         (Combine
                                            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                                            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                         '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                      '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                         'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                   'Targeting 'OSArchLinux])
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                'Targeting 'OSArchLinux])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                             'Targeting 'OSArchLinux])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                          'Targeting 'OSArchLinux])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
-> Property DebianLike
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      (Combine
                                         (Combine
                                            (Combine
                                               (Combine
                                                  '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                                                  '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                               'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                                         '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                      '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                         'Targeting 'OSArchLinux])
                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                      'Targeting 'OSArchLinux])
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                   'Targeting 'OSArchLinux])
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                'Targeting 'OSArchLinux])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                       'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& User -> Group -> Property DebianLike
User.hasGroup User
user ([Char] -> Group
Group [Char]
"i2c")
	Props
  (Sing
     (Combine
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      (Combine
                                         (Combine
                                            (Combine
                                               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                                               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                         '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                            'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                                      '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                      'Targeting 'OSArchLinux])
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                   'Targeting 'OSArchLinux])
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                'Targeting 'OSArchLinux])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                             'Targeting 'OSArchLinux])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
-> Property UnixLike
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      (Combine
                                         (Combine
                                            (Combine
                                               (Combine
                                                  (Combine
                                                     '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                                                     '[ 'Targeting 'OSDebian,
                                                        'Targeting 'OSBuntish])
                                                  '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                                  'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                                            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                         '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                            'Targeting 'OSArchLinux])
                                      '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                         'Targeting 'OSArchLinux])
                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                      'Targeting 'OSArchLinux])
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                   'Targeting 'OSArchLinux])
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                          'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char]
"/etc/modules-load.d/house.conf" [Char] -> [[Char]] -> Property UnixLike
`File.hasContent` [[Char]
"i2c-dev"]
	Props
  (Sing
     (Combine
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      (Combine
                                         (Combine
                                            (Combine
                                               (Combine
                                                  '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                                                  '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                               'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                                         '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                      '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                         'Targeting 'OSArchLinux])
                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                      'Targeting 'OSArchLinux])
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                   'Targeting 'OSArchLinux])
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                'Targeting 'OSArchLinux])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                       'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
-> CombinedType
     (CombinedType
        (CombinedType
           (CombinedType
              (Property DebianLike)
              (Property
                 (MetaTypes
                    '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                       'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])))
           (Property UnixLike))
        (Property UnixLike))
     (Property UnixLike)
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      (Combine
                                         (Combine
                                            (Combine
                                               (Combine
                                                  (Combine
                                                     (Combine
                                                        '[ 'Targeting 'OSDebian,
                                                           'Targeting 'OSBuntish]
                                                        '[ 'Targeting 'OSDebian,
                                                           'Targeting 'OSBuntish])
                                                     '[ 'Targeting 'OSDebian,
                                                        'Targeting 'OSBuntish])
                                                  '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                                     'Targeting 'OSArchLinux,
                                                     'Targeting 'OSFreeBSD])
                                               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                               'Targeting 'OSArchLinux])
                                         '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                            'Targeting 'OSArchLinux])
                                      '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                         'Targeting 'OSArchLinux])
                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                      'Targeting 'OSArchLinux])
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                             'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
           '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char] -> Times -> User -> [Char] -> [Char] -> Property DebianLike
Cron.niceJob [Char]
"house upload"
		([Char] -> Times
Cron.Times [Char]
"1 * * * *") User
user [Char]
d [Char]
rsynccommand
		Property DebianLike
-> Property
     (MetaTypes
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
-> CombinedType
     (Property DebianLike)
     (Property
        (MetaTypes
           '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
forall x y. Combines x y => x -> y -> CombinedType x y
`requires` Maybe [Char]
-> User
-> c
-> (SshKeyType, [Char])
-> Property (HasInfo + UnixLike)
forall c.
IsContext c =>
Maybe [Char]
-> User
-> c
-> (SshKeyType, [Char])
-> Property (HasInfo + UnixLike)
Ssh.userKeyAt ([Char] -> Maybe [Char]
forall a. a -> Maybe a
Just [Char]
sshkeyfile) User
user c
ctx (SshKeyType, [Char])
sshkey
		CombinedType
  (Property DebianLike)
  (Property
     (MetaTypes
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
-> Property UnixLike
-> CombinedType
     (CombinedType
        (Property DebianLike)
        (Property
           (MetaTypes
              '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])))
     (Property UnixLike)
forall x y. Combines x y => x -> y -> CombinedType x y
`requires` [Char] -> User -> Group -> Property UnixLike
File.ownerGroup ([Char] -> [Char]
takeDirectory [Char]
sshkeyfile)
			User
user (User -> Group
userGroup User
user)
		CombinedType
  (CombinedType
     (Property DebianLike)
     (Property
        (MetaTypes
           '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])))
  (Property UnixLike)
-> Property UnixLike
-> CombinedType
     (CombinedType
        (CombinedType
           (Property DebianLike)
           (Property
              (MetaTypes
                 '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])))
        (Property UnixLike))
     (Property UnixLike)
forall x y. Combines x y => x -> y -> CombinedType x y
`requires` [Char] -> Property UnixLike
File.dirExists ([Char] -> [Char]
takeDirectory [Char]
sshkeyfile)
		CombinedType
  (CombinedType
     (CombinedType
        (Property DebianLike)
        (Property
           (MetaTypes
              '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])))
     (Property UnixLike))
  (Property UnixLike)
-> Property UnixLike
-> CombinedType
     (CombinedType
        (CombinedType
           (CombinedType
              (Property DebianLike)
              (Property
                 (MetaTypes
                    '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                       'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])))
           (Property UnixLike))
        (Property UnixLike))
     (Property UnixLike)
forall x y. Combines x y => x -> y -> CombinedType x y
`requires` [Host] -> [Char] -> User -> Property UnixLike
Ssh.knownHost [Host]
hosts [Char]
"kitenet.net" User
user
	Props
  (Sing
     (Combine
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      (Combine
                                         (Combine
                                            (Combine
                                               (Combine
                                                  (Combine
                                                     '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                                                     '[ 'Targeting 'OSDebian,
                                                        'Targeting 'OSBuntish])
                                                  '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                                  'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                                            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                         '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                            'Targeting 'OSArchLinux])
                                      '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                         'Targeting 'OSArchLinux])
                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                      'Targeting 'OSArchLinux])
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                   'Targeting 'OSArchLinux])
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                          'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
-> Property
     (MetaTypes
        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
-> Props
     (MetaTypes
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      (Combine
                                         (Combine
                                            (Combine
                                               (Combine
                                                  (Combine
                                                     (Combine
                                                        (Combine
                                                           '[ 'Targeting 'OSDebian,
                                                              'Targeting 'OSBuntish]
                                                           '[ 'Targeting 'OSDebian,
                                                              'Targeting 'OSBuntish])
                                                        '[ 'Targeting 'OSDebian,
                                                           'Targeting 'OSBuntish])
                                                     '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                                        'Targeting 'OSArchLinux,
                                                        'Targeting 'OSFreeBSD])
                                                  '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                                  'Targeting 'OSArchLinux])
                                            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                               'Targeting 'OSArchLinux])
                                         '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                            'Targeting 'OSArchLinux])
                                      '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                         'Targeting 'OSArchLinux])
                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
              '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char] -> Context -> Property (HasInfo + UnixLike)
forall c.
IsContext c =>
[Char] -> c -> Property (HasInfo + UnixLike)
File.hasPrivContentExposed [Char]
"/etc/darksky-forecast-url" Context
anyContext
  where
	d :: [Char]
d = [Char]
"/home/joey/house"
	sshkeyfile :: [Char]
sshkeyfile = [Char]
d [Char] -> [Char] -> [Char]
</> [Char]
".ssh/key"
	build :: Property DebianLike
build = IO Bool -> Property DebianLike -> Property DebianLike
forall (p :: * -> *) i (m :: * -> *).
(Checkable p i, LiftPropellor m) =>
m Bool -> p i -> Property i
check (Bool -> Bool
not (Bool -> Bool) -> IO Bool -> IO Bool
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [Char] -> IO Bool
doesFileExist ([Char]
d [Char] -> [Char] -> [Char]
</> [Char]
"controller")) (Property DebianLike -> Property DebianLike)
-> Property DebianLike -> Property DebianLike
forall a b. (a -> b) -> a -> b
$
		User -> [[Char]] -> UncheckedProperty UnixLike
userScriptProperty ([Char] -> User
User [Char]
"joey")
			[ [Char]
"cd " [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
d
			, [Char]
"cabal update"
			, [Char]
"make"
			]
		UncheckedProperty UnixLike -> Result -> Property UnixLike
forall (p :: * -> *) i.
Checkable p i =>
p i -> Result -> Property i
`assume` Result
MadeChange
		Property UnixLike
-> Property DebianLike
-> CombinedType (Property UnixLike) (Property DebianLike)
forall x y. Combines x y => x -> y -> CombinedType x y
`requires` [[Char]] -> Property DebianLike
Apt.installed
			[ [Char]
"ghc", [Char]
"cabal-install", [Char]
"make"
			, [Char]
"libghc-http-types-dev"
			, [Char]
"libghc-aeson-dev"
			, [Char]
"libghc-wai-dev"
			, [Char]
"libghc-warp-dev"
			, [Char]
"libghc-http-client-dev"
			, [Char]
"libghc-http-client-tls-dev"
			, [Char]
"libghc-reactive-banana-dev"
			, [Char]
"libghc-hinotify-dev"
			]
	pollerservicename :: [Char]
pollerservicename = [Char]
"house-poller"
	pollerservicefile :: [Char]
pollerservicefile = [Char]
"/etc/systemd/system/" [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
pollerservicename [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
".service"
	pollerserviceinstalled :: Property UnixLike
pollerserviceinstalled = [Char]
pollerservicefile [Char] -> [[Char]] -> Property UnixLike
`File.hasContent`
		[ [Char]
"[Unit]"
		, [Char]
"Description=house poller"
		, [Char]
""
		, [Char]
"[Service]"
		, [Char]
"ExecStart=" [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
d [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
"/poller"
		, [Char]
"WorkingDirectory=" [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
d
		, [Char]
"User=joey"
		, [Char]
"Group=joey"
		, [Char]
"Restart=always"
		, [Char]
""
		, [Char]
"[Install]"
		, [Char]
"WantedBy=multi-user.target"
		, [Char]
"WantedBy=house-controller.target"
		]
	controllerservicename :: [Char]
controllerservicename = [Char]
"house-controller"
	controllerservicefile :: [Char]
controllerservicefile = [Char]
"/etc/systemd/system/" [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
controllerservicename [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
".service"
	controllerserviceinstalled :: Property UnixLike
controllerserviceinstalled = [Char]
controllerservicefile [Char] -> [[Char]] -> Property UnixLike
`File.hasContent`
		[ [Char]
"[Unit]"
		, [Char]
"Description=house controller"
		, [Char]
""
		, [Char]
"[Service]"
		, [Char]
"ExecStart=" [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
d [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
"/controller"
		, [Char]
"WorkingDirectory=" [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
d
		, [Char]
"User=joey"
		, [Char]
"Group=joey"
		, [Char]
"Restart=always"
		, [Char]
""
		, [Char]
"[Install]"
		, [Char]
"WantedBy=multi-user.target"
		]
	watchdogservicename :: [Char]
watchdogservicename = [Char]
"house-watchdog"
	watchdogservicefile :: [Char]
watchdogservicefile = [Char]
"/etc/systemd/system/" [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
watchdogservicename [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
".service"
	watchdogserviceinstalled :: Property UnixLike
watchdogserviceinstalled = [Char]
watchdogservicefile [Char] -> [[Char]] -> Property UnixLike
`File.hasContent`
		[ [Char]
"[Unit]"
		, [Char]
"Description=house watchdog"
		, [Char]
""
		, [Char]
"[Service]"
		, [Char]
"ExecStart=" [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
d [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
"/watchdog"
		, [Char]
"WorkingDirectory=" [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
d
		, [Char]
"User=root"
		, [Char]
"Group=root"
		, [Char]
"Restart=always"
		, [Char]
""
		, [Char]
"[Install]"
		, [Char]
"WantedBy=multi-user.target"
		]
	setupservicename :: [Char]
setupservicename = [Char]
"house-setup"
	setupservicefile :: [Char]
setupservicefile = [Char]
"/etc/systemd/system/" [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
setupservicename [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
".service"
	setupserviceinstalled :: Property UnixLike
setupserviceinstalled = [Char]
setupservicefile [Char] -> [[Char]] -> Property UnixLike
`File.hasContent`
		[ [Char]
"[Unit]"
		, [Char]
"Description=house setup"
		, [Char]
""
		, [Char]
"[Service]"
		, [Char]
"ExecStart=" [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
d [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
"/setup"
		, [Char]
"WorkingDirectory=" [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
d
		, [Char]
"User=root"
		, [Char]
"Group=root"
		, [Char]
"Type=oneshot"
		, [Char]
""
		, [Char]
"[Install]"
		, [Char]
"WantedBy=multi-user.target"
		, [Char]
"WantedBy=house-poller.target"
		, [Char]
"WantedBy=house-controller.target"
		, [Char]
"WantedBy=house-watchdog.target"
		]
	-- Any changes to the rsync command will need my .authorized_keys
	-- rsync server command to be updated too.
	rsynccommand :: [Char]
rsynccommand = [Char]
"rsync -e 'ssh -i" [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
sshkeyfile [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
"' -avz rrds/ joey@kitenet.net:/srv/web/house.joeyh.name/rrds/ >/dev/null 2>&1"

	websitesymlink :: Property UnixLike
	websitesymlink :: Property UnixLike
websitesymlink = IO Bool -> Property UnixLike -> Property UnixLike
forall (p :: * -> *) i (m :: * -> *).
(Checkable p i, LiftPropellor m) =>
m Bool -> p i -> Property i
check (Bool -> Bool
not (Bool -> Bool) -> (FileStatus -> Bool) -> FileStatus -> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FileStatus -> Bool
isSymbolicLink (FileStatus -> Bool) -> IO FileStatus -> IO Bool
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [Char] -> IO FileStatus
getSymbolicLinkStatus [Char]
"/var/www/html")
		([Char] -> Propellor Result -> Property UnixLike
forall {k} (metatypes :: k).
SingI metatypes =>
[Char] -> Propellor Result -> Property (MetaTypes metatypes)
property [Char]
"website symlink" (Propellor Result -> Property UnixLike)
-> Propellor Result -> Property UnixLike
forall a b. (a -> b) -> a -> b
$ IO () -> Propellor Result
makeChange (IO () -> Propellor Result) -> IO () -> Propellor Result
forall a b. (a -> b) -> a -> b
$ do
			[Char] -> IO ()
removeDirectoryRecursive [Char]
"/var/www/html"
			[Char] -> [Char] -> IO ()
createSymbolicLink [Char]
d [Char]
"/var/www/html"
		)

data Interfaces = Interfaces
	{ Interfaces -> [Char]
ethernetInterface :: String
	, Interfaces -> [Char]
wifiInterface :: String
	, Interfaces -> [Char]
wifiInterfaceOld :: String
	}

-- Connect to the starlink dish directly (no starlink router)
connectStarlinkDish :: Interfaces -> Property DebianLike
connectStarlinkDish :: Interfaces -> Property DebianLike
connectStarlinkDish Interfaces
ifs = [Char] -> Props DebianLike -> Property DebianLike
forall {k} (metatypes :: k).
SingI metatypes =>
[Char]
-> Props (MetaTypes metatypes) -> Property (MetaTypes metatypes)
propertyList [Char]
"connected via starlink dish" (Props DebianLike -> Property DebianLike)
-> Props DebianLike -> Property DebianLike
forall a b. (a -> b) -> a -> b
$ Props UnixLike
props
	-- Use dhcpcd for ipv6 prefix delegation to the wifi interface.
	Props UnixLike
-> Property DebianLike
-> Props
     (MetaTypes
        (Combine
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [[Char]] -> Property DebianLike
Apt.installed [[Char]
"dhcpcd"]
	-- dhcpcd is run by ifup on boot. When the daemon was enabled,
	-- that somehow prevented prefix delegation from happening,
	-- so disable the daemon from being run by systemd.
	Props DebianLike
-> Property Linux
-> Props
     (Sing
        (Combine
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char] -> Property Linux
Systemd.stopped [Char]
"dhcpcd"
	Props
  (Sing
     (Combine
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux]))
-> RevertableProperty Linux Linux
-> Props
     (Sing
        (Combine
           (Combine
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char] -> RevertableProperty Linux Linux
Systemd.masked [Char]
"dhcpcd"
	Props
  (Sing
     (Combine
        (Combine
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux]))
-> Property UnixLike
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char]
"/etc/dhcpcd.conf" [Char] -> [Char] -> Property UnixLike
`File.containsLine`
		([Char]
"ia_pd 1 " [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ Interfaces -> [Char]
wifiInterface Interfaces
ifs)
	Props
  (Sing
     (Combine
        (Combine
           (Combine
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
-> Property UnixLike
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 (Combine
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                       'Targeting 'OSArchLinux])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char]
"/etc/dhcpcd.conf" [Char] -> [Char] -> Property UnixLike
`File.lacksLine`
		([Char]
"ia_pd 1 " [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ Interfaces -> [Char]
wifiInterfaceOld Interfaces
ifs)
	Props
  (Sing
     (Combine
        (Combine
           (Combine
              (Combine
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
-> Property DebianLike
-> Props
     (MetaTypes
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                          'Targeting 'OSArchLinux])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                       'Targeting 'OSArchLinux])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char] -> Property DebianLike
Network.dhcp (Interfaces -> [Char]
ethernetInterface Interfaces
ifs)
		Property DebianLike
-> Property DebianLike
-> CombinedType (Property DebianLike) (Property DebianLike)
forall x y. Combines x y => x -> y -> CombinedType x y
`requires` Property DebianLike
Network.cleanInterfacesFile

-- Connect to the starlink router with its ethernet adapter.
--
-- Static route because with dhcp it sometimes fails to get an address from
-- starlink.
connectStarlinkRouter :: Interfaces -> Property DebianLike
connectStarlinkRouter :: Interfaces -> Property DebianLike
connectStarlinkRouter Interfaces
ifs = [Char] -> Props DebianLike -> Property DebianLike
forall {k} (metatypes :: k).
SingI metatypes =>
[Char]
-> Props (MetaTypes metatypes) -> Property (MetaTypes metatypes)
propertyList [Char]
"connected via starlink router" (Props DebianLike -> Property DebianLike)
-> Props DebianLike -> Property DebianLike
forall a b. (a -> b) -> a -> b
$ Props UnixLike
props
	Props UnixLike
-> Property DebianLike
-> Props
     (MetaTypes
        (Combine
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char] -> IPAddr -> Maybe Gateway -> Property DebianLike
Network.static (Interfaces -> [Char]
ethernetInterface Interfaces
ifs) ([Char] -> IPAddr
IPv4 [Char]
"192.168.1.62")
		(Gateway -> Maybe Gateway
forall a. a -> Maybe a
Just (IPAddr -> Gateway
Network.Gateway ([Char] -> IPAddr
IPv4 [Char]
"192.168.1.1")))
		Property DebianLike
-> Property DebianLike
-> CombinedType (Property DebianLike) (Property DebianLike)
forall x y. Combines x y => x -> y -> CombinedType x y
`requires` Property DebianLike
Network.cleanInterfacesFile

-- My home router, running hostapd and dnsmasq.
homeRouter :: Interfaces -> String -> HostapdConfig -> Property DebianLike
homeRouter :: Interfaces -> [Char] -> HostapdConfig -> Property DebianLike
homeRouter Interfaces
ifs [Char]
wifinetworkname (HostapdConfig [[Char]]
hostapdconfig) = [Char] -> Props DebianLike -> Property DebianLike
forall {k} (metatypes :: k).
SingI metatypes =>
[Char]
-> Props (MetaTypes metatypes) -> Property (MetaTypes metatypes)
propertyList [Char]
"home router" (Props DebianLike -> Property DebianLike)
-> Props DebianLike -> Property DebianLike
forall a b. (a -> b) -> a -> b
$ Props UnixLike
props
	Props UnixLike
-> Property UnixLike
-> Props
     (MetaTypes
        (Combine
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char] -> Property UnixLike
File.notPresent ([Char] -> [Char]
Network.interfaceDFile (Interfaces -> [Char]
wifiInterfaceOld Interfaces
ifs))
	Props UnixLike
-> Property DebianLike
-> Props
     (MetaTypes
        (Combine
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char] -> IPAddr -> Maybe Gateway -> Property DebianLike
Network.static (Interfaces -> [Char]
wifiInterface Interfaces
ifs) ([Char] -> IPAddr
IPv4 [Char]
"10.1.1.1") Maybe Gateway
forall a. Maybe a
Nothing
		Property DebianLike
-> Property DebianLike
-> CombinedType (Property DebianLike) (Property DebianLike)
forall x y. Combines x y => x -> y -> CombinedType x y
`requires` Property DebianLike
Network.cleanInterfacesFile
	Props
  (MetaTypes
     (Combine
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
-> Property DebianLike
-> Props
     (Sing
        (Combine
           (Combine
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [[Char]] -> Property DebianLike
Apt.installed [[Char]
"hostapd"]
	Props
  (Sing
     (Combine
        (Combine
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
-> CombinedType
     (CombinedType (Property UnixLike) (Property UnixLike))
     (Property DebianLike)
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char] -> [[Char]] -> Property UnixLike
File.hasContent [Char]
"/etc/hostapd/hostapd.conf"
			([ [Char]
"interface=" [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ Interfaces -> [Char]
wifiInterface Interfaces
ifs
			, [Char]
"ssid=" [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
wifinetworkname
			] [[Char]] -> [[Char]] -> [[Char]]
forall a. [a] -> [a] -> [a]
++ [[Char]]
hostapdconfig)
		Property UnixLike
-> Property UnixLike
-> CombinedType (Property UnixLike) (Property UnixLike)
forall x y. Combines x y => x -> y -> CombinedType x y
`requires` [Char] -> Property UnixLike
File.dirExists [Char]
"/etc/hostapd"
		Property UnixLike
-> Property UnixLike
-> CombinedType (Property UnixLike) (Property UnixLike)
forall x y. Combines x y => x -> y -> CombinedType x y
`requires` [Char] -> [[Char]] -> Property UnixLike
File.hasContent [Char]
"/etc/default/hostapd"
			[ [Char]
"DAEMON_CONF=/etc/hostapd/hostapd.conf" ]
		CombinedType (Property UnixLike) (Property UnixLike)
-> Property DebianLike
-> CombinedType
     (CombinedType (Property UnixLike) (Property UnixLike))
     (Property DebianLike)
forall x y. Combines x y => x -> y -> CombinedType x y
`onChange` [Char] -> Property DebianLike
Service.running [Char]
"hostapd"
	Props
  (Sing
     (Combine
        (Combine
           (Combine
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
-> Property Linux
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 (Combine
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                       'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char] -> Property Linux
Systemd.enabled [Char]
"hostapd"
	Props
  (Sing
     (Combine
        (Combine
           (Combine
              (Combine
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux]))
-> Property UnixLike
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                          'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char] -> [[Char]] -> Property UnixLike
File.hasContent [Char]
"/etc/resolv.conf"
		[ [Char]
"domain kitenet.net"
		, [Char]
"search kitenet.net"
		, [Char]
"nameserver 8.8.8.8"
		, [Char]
"nameserver 8.8.4.4"
		]
	Props
  (Sing
     (Combine
        (Combine
           (Combine
              (Combine
                 (Combine
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                       'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
-> Property DebianLike
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                             'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [[Char]] -> Property DebianLike
Apt.installed [[Char]
"dnsmasq"]
	Props
  (Sing
     (Combine
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                          'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
-> Property DebianLike
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                       'Targeting 'OSArchLinux])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char] -> [[Char]] -> Property UnixLike
File.hasContent [Char]
"/etc/dnsmasq.conf"
		[ [Char]
"domain-needed"
		, [Char]
"bogus-priv"
		, [Char]
"interface=" [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ Interfaces -> [Char]
wifiInterface Interfaces
ifs
		, [Char]
"domain=lan"
		-- lease time is short because the house
		-- controller wants to know when clients disconnect
		, [Char]
"dhcp-range=10.1.1.100,10.1.1.150,10m"
		, [Char]
"no-hosts"
		, [Char]
"address=/sky.lan/10.1.1.1"
		, [Char]
"address=/house.lan/10.1.1.2"
		-- allow accessing starlink dish when it's not online yet
		, [Char]
"address=/dishy.starlink.com/192.168.100.1"
		]
		Property UnixLike
-> Property DebianLike
-> CombinedType (Property UnixLike) (Property DebianLike)
forall x y. Combines x y => x -> y -> CombinedType x y
`onChange` [Char] -> Property DebianLike
Service.restarted [Char]
"dnsmasq"
	-- Avoid DHCPNAK of lease obtained at boot, after NTP slews clock
	-- forward too far, causing that lease to not be valid.
	Props
  (Sing
     (Combine
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                             'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
-> Property DebianLike
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                   'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                          'Targeting 'OSArchLinux])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                       'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char]
"/etc/default/dnsmasq" [Char] -> [Char] -> Property UnixLike
`File.containsLine` [Char]
"DNSMASQ_OPTS=\"--dhcp-authoritative\""
		Property UnixLike
-> Property DebianLike
-> CombinedType (Property UnixLike) (Property DebianLike)
forall x y. Combines x y => x -> y -> CombinedType x y
`onChange` [Char] -> Property DebianLike
Service.restarted [Char]
"dnsmasq"
	Props
  (Sing
     (Combine
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                       'Targeting 'OSArchLinux])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
-> Property DebianLike
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                      'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                             'Targeting 'OSArchLinux])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                          'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char] -> Property DebianLike
ipmasq (Interfaces -> [Char]
wifiInterface Interfaces
ifs)
	Props
  (Sing
     (Combine
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                   'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                          'Targeting 'OSArchLinux])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                       'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
-> Property DebianLike
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                         'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
                                      '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                'Targeting 'OSArchLinux])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                             'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [[Char]] -> Property DebianLike
Apt.installed [[Char]
"radvd"]
	-- This needs ipv6 prefix delegation to the wifi interface to be
	-- enabled.
	Props
  (Sing
     (Combine
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                      'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                             'Targeting 'OSArchLinux])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                          'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
-> Property DebianLike
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      (Combine
                                         '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                            'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
                                         '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                      '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                   'Targeting 'OSArchLinux])
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char] -> [[Char]] -> Property UnixLike
File.hasContent [Char]
"/etc/radvd.conf"
		[ [Char]
"interface " [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ Interfaces -> [Char]
wifiInterface Interfaces
ifs [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
" {"
		, [Char]
"  AdvSendAdvert on;"
		, [Char]
"  MinRtrAdvInterval 3;"
		, [Char]
"  MaxRtrAdvInterval 10;"
		, [Char]
"  prefix ::/64 {"
		, [Char]
"    AdvOnLink on;"
		, [Char]
"    AdvAutonomous on;"
		, [Char]
"    AdvRouterAddr on;"
		, [Char]
"  };"
		, [Char]
"};"
		]
		Property UnixLike
-> Property DebianLike
-> CombinedType (Property UnixLike) (Property DebianLike)
forall x y. Combines x y => x -> y -> CombinedType x y
`onChange` [Char] -> Property DebianLike
Service.restarted [Char]
"radvd"
	Props
  (Sing
     (Combine
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                         'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
                                      '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                'Targeting 'OSArchLinux])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                             'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
-> Property UnixLike
-> Props
     (MetaTypes
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                (Combine
                                   (Combine
                                      (Combine
                                         (Combine
                                            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                               'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
                                            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                         '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                      '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                      'Targeting 'OSArchLinux])
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                   'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char]
"/etc/sysctl.conf" [Char] -> [Char] -> Property UnixLike
`File.containsLine` [Char]
"net.ipv6.conf.all.forwarding=1"

-- | Enable IP masqerading, on whatever other interfaces come up, besides the
-- provided intif.
ipmasq :: String -> Property DebianLike
ipmasq :: [Char] -> Property DebianLike
ipmasq [Char]
intif = [Char] -> [[Char]] -> Property UnixLike
File.hasContent [Char]
ifupscript
	[ [Char]
"#!/bin/sh"
	, [Char]
"INTIF=" [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
intif
	, [Char]
"if [ \"$IFACE\" = $INTIF ] || [ \"$IFACE\" = lo ]; then"
	, [Char]
"exit 0"
	, [Char]
"fi"
	, [Char]
"iptables -F"
	, [Char]
"iptables -A FORWARD -i $IFACE -o $INTIF -m state --state ESTABLISHED,RELATED -j ACCEPT"
	, [Char]
"iptables -A FORWARD -i $INTIF -o $IFACE -j ACCEPT"
	, [Char]
"iptables -t nat -A POSTROUTING -o $IFACE -j MASQUERADE"
	, [Char]
"echo 1 > /proc/sys/net/ipv4/ip_forward"
	]
	Property UnixLike
-> Property UnixLike
-> CombinedType (Property UnixLike) (Property UnixLike)
forall x y. Combines x y => x -> y -> CombinedType x y
`before` [Char] -> Property UnixLike
scriptmode [Char]
ifupscript
	Property UnixLike
-> Property DebianLike
-> CombinedType (Property UnixLike) (Property DebianLike)
forall x y. Combines x y => x -> y -> CombinedType x y
`requires` [[Char]] -> Property DebianLike
Apt.installed [[Char]
"iptables"]
  where
	ifupscript :: [Char]
ifupscript = [Char]
"/etc/network/if-up.d/ipmasq"
	scriptmode :: [Char] -> Property UnixLike
scriptmode [Char]
f = [Char]
f [Char] -> FileMode -> Property UnixLike
`File.mode` [FileMode] -> FileMode
combineModes ([FileMode]
readModes [FileMode] -> [FileMode] -> [FileMode]
forall a. [a] -> [a] -> [a]
++ [FileMode]
executeModes)

laptopSoftware :: Property DebianLike
laptopSoftware :: Property DebianLike
laptopSoftware = [[Char]] -> Property DebianLike
Apt.installed
	[ [Char]
"intel-microcode", [Char]
"acpi"
	, [Char]
"procmeter3", [Char]
"xfce4", [Char]
"procmeter3", [Char]
"unclutter-xfixes"
	, [Char]
"mplayer", [Char]
"fbreader", [Char]
"firefox", [Char]
"chromium"
	, [Char]
"libdatetime-event-sunrise-perl", [Char]
"libtime-duration-perl"
	, [Char]
"network-manager", [Char]
"network-manager-openvpn-gnome", [Char]
"openvpn"
	, [Char]
"gtk-redshift", [Char]
"powertop"
	, [Char]
"gimp", [Char]
"gthumb", [Char]
"inkscape", [Char]
"sozi", [Char]
"xzgv", [Char]
"hugin"
	, [Char]
"mpc", [Char]
"mpd", [Char]
"ncmpc", [Char]
"sonata", [Char]
"mpdtoys"
	, [Char]
"bsdgames", [Char]
"nethack-console"
	, [Char]
"xmonad", [Char]
"libghc-xmonad-dev", [Char]
"libghc-xmonad-contrib-dev"
	, [Char]
"ttf-bitstream-vera", [Char]
"fonts-symbola", [Char]
"fonts-noto-color-emoji"
	, [Char]
"mairix", [Char]
"offlineimap", [Char]
"mutt", [Char]
"slrn"
	, [Char]
"mtr", [Char]
"nmap", [Char]
"whois", [Char]
"wireshark", [Char]
"tcpdump", [Char]
"iftop"
	, [Char]
"pmount", [Char]
"tree", [Char]
"pv"
	, [Char]
"arbtt", [Char]
"hledger", [Char]
"bc"
	, [Char]
"apache2", [Char]
"ikiwiki", [Char]
"libhighlight-perl"
	, [Char]
"avahi-daemon", [Char]
"avahi-discover"
	, [Char]
"pal"
	, [Char]
"yeahconsole", [Char]
"xkbset", [Char]
"xinput"
	, [Char]
"assword", [Char]
"pumpa"
	, [Char]
"vorbis-tools", [Char]
"audacity"
	, [Char]
"ekiga"
	, [Char]
"bluez-firmware", [Char]
"blueman", [Char]
"pulseaudio-module-bluetooth"
	, [Char]
"fwupd"
	, [Char]
"xul-ext-ublock-origin", [Char]
"xul-ext-pdf.js", [Char]
"xul-ext-status4evar"
	, [Char]
"vim-syntastic", [Char]
"vim-fugitive"
	, [Char]
"adb", [Char]
"gthumb"
	, [Char]
"w3m", [Char]
"sm", [Char]
"weechat"
	, [Char]
"borgbackup", [Char]
"wipe", [Char]
"smartmontools", [Char]
"libgfshare-bin"
	, [Char]
"units"
	, [Char]
"virtualbox", [Char]
"virtualbox-guest-additions-iso", [Char]
"qemu-kvm"
	]
	Property DebianLike
-> Property DebianLike
-> CombinedType (Property DebianLike) (Property DebianLike)
forall x y. Combines x y => x -> y -> CombinedType x y
`requires` Property DebianLike
baseSoftware
	Property DebianLike
-> Property DebianLike
-> CombinedType (Property DebianLike) (Property DebianLike)
forall x y. Combines x y => x -> y -> CombinedType x y
`requires` Property DebianLike
devSoftware

baseSoftware :: Property DebianLike
baseSoftware :: Property DebianLike
baseSoftware = [[Char]] -> Property DebianLike
Apt.installed
	[ [Char]
"bash", [Char]
"bash-completion", [Char]
"vim", [Char]
"screen", [Char]
"less", [Char]
"moreutils"
	, [Char]
"git", [Char]
"mr", [Char]
"etckeeper", [Char]
"git-annex", [Char]
"ssh", [Char]
"vim-vimoutliner"
	]

devSoftware :: Property DebianLike
devSoftware :: Property DebianLike
devSoftware = [[Char]] -> Property DebianLike
Apt.installed
	[ [Char]
"build-essential", [Char]
"debhelper", [Char]
"devscripts"
	, [Char]
"ghc", [Char]
"cabal-install", [Char]
"haskell-stack"
	, [Char]
"hothasktags", [Char]
"hdevtools", [Char]
"hlint"
	, [Char]
"gdb", [Char]
"time"
	, [Char]
"dpkg-repack", [Char]
"lintian"
	, [Char]
"pristine-tar", [Char]
"github-backup"
	]

cubieTruckOneWire :: Property DebianLike
cubieTruckOneWire :: Property DebianLike
cubieTruckOneWire = Property UnixLike
utilitysetup
	Property UnixLike
-> Property UnixLike
-> CombinedType (Property UnixLike) (Property UnixLike)
forall x y. Combines x y => x -> y -> CombinedType x y
`requires` Property UnixLike
dtsinstalled
	Property UnixLike
-> Property DebianLike
-> CombinedType (Property UnixLike) (Property DebianLike)
forall x y. Combines x y => x -> y -> CombinedType x y
`requires` Property DebianLike
utilityinstalled
  where
	dtsinstalled :: CombinedType (Property UnixLike) (Property UnixLike)
dtsinstalled = [Char] -> [[Char]] -> Property UnixLike
File.hasContent [Char]
"/etc/easy-peasy-devicetree-squeezy/my.dts" [[Char]]
mydts
		Property UnixLike
-> Property UnixLike
-> CombinedType (Property UnixLike) (Property UnixLike)
forall x y. Combines x y => x -> y -> CombinedType x y
`requires` [Char] -> Property UnixLike
File.dirExists [Char]
"/etc/easy-peasy-devicetree-squeezy"
	utilityinstalled :: CombinedType (Property DebianLike) (Property DebianLike)
utilityinstalled = User -> [Char] -> [Char] -> Maybe [Char] -> Property DebianLike
Git.cloned ([Char] -> User
User [Char]
"root") [Char]
"https://git.joeyh.name/git/easy-peasy-devicetree-squeezy.git" [Char]
"/usr/local/easy-peasy-devicetree-squeezy" Maybe [Char]
forall a. Maybe a
Nothing
		Property DebianLike
-> RevertableProperty UnixLike UnixLike
-> CombinedType
     (Property DebianLike) (RevertableProperty UnixLike UnixLike)
forall x y. Combines x y => x -> y -> CombinedType x y
`onChange` [Char] -> LinkTarget -> RevertableProperty UnixLike UnixLike
File.isSymlinkedTo [Char]
"/usr/sbin/easy-peasy-devicetree-squeezy" ([Char] -> LinkTarget
File.LinkTarget [Char]
"/usr/local/easy-peasy-devicetree-squeezy/easy-peasy-devicetree-squeezy")
		Property DebianLike
-> Property DebianLike
-> CombinedType (Property DebianLike) (Property DebianLike)
forall x y. Combines x y => x -> y -> CombinedType x y
`requires` [[Char]] -> Property DebianLike
Apt.installed [[Char]
"pv", [Char]
"device-tree-compiler", [Char]
"cpp", [Char]
"linux-source"]
	utilitysetup :: Property UnixLike
utilitysetup = IO Bool -> Property UnixLike -> Property UnixLike
forall (p :: * -> *) i (m :: * -> *).
(Checkable p i, LiftPropellor m) =>
m Bool -> p i -> Property i
check (Bool -> Bool
not (Bool -> Bool) -> IO Bool -> IO Bool
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [Char] -> IO Bool
doesFileExist [Char]
dtb) (Property UnixLike -> Property UnixLike)
-> Property UnixLike -> Property UnixLike
forall a b. (a -> b) -> a -> b
$ 
		[Char] -> [[Char]] -> UncheckedProperty UnixLike
cmdProperty [Char]
"easy-peasy-devicetree-squeezy"
			[[Char]
"--debian", [Char]
"sun7i-a20-cubietruck"]
			UncheckedProperty UnixLike -> Result -> Property UnixLike
forall (p :: * -> *) i.
Checkable p i =>
p i -> Result -> Property i
`assume` Result
MadeChange
	dtb :: [Char]
dtb = [Char]
"/etc/flash-kernel/dtbs/sun7i-a20-cubietruck.dtb"
	mydts :: [[Char]]
mydts =
		[ [Char]
"/* Device tree addition enabling onewire sensors on CubieTruck GPIO pin PC21 */"
		, [Char]
"#include <dt-bindings/gpio/gpio.h>"
		, [Char]
""
		, [Char]
"/ {"
		, [Char]
"\tonewire_device {"
		, [Char]
"\t\tcompatible = \"w1-gpio\";"
		, [Char]
"\t\tgpios = <&pio 2 21 GPIO_ACTIVE_HIGH>; /* PC21 */"
		, [Char]
"\t\tpinctrl-names = \"default\";"
		, [Char]
"\t\tpinctrl-0 = <&my_w1_pin>;"
		, [Char]
"\t};"
		, [Char]
"};"
		, [Char]
""
		, [Char]
"&pio {"
		, [Char]
"\tmy_w1_pin: my_w1_pin@0 {"
		, [Char]
"\t\tallwinner,pins = \"PC21\";"
		, [Char]
"\t\tallwinner,function = \"gpio_in\";"
		, [Char]
"\t};"
		, [Char]
"};"
		]

-- My home networked attached storage server.
homeNAS :: Property DebianLike
homeNAS :: Property DebianLike
homeNAS = [Char] -> Props DebianLike -> Property DebianLike
forall {k} (metatypes :: k).
SingI metatypes =>
[Char]
-> Props (MetaTypes metatypes) -> Property (MetaTypes metatypes)
propertyList [Char]
"home NAS" (Props DebianLike -> Property DebianLike)
-> Props DebianLike -> Property DebianLike
forall a b. (a -> b) -> a -> b
$ Props UnixLike
props
	Props UnixLike
-> Property DebianLike
-> Props
     (MetaTypes
        (Combine
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [[Char]] -> Property DebianLike
Apt.installed [[Char]
"uhubctl"]
	Props DebianLike
-> Property UnixLike
-> Props
     (Sing
        (Combine
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char]
"/etc/udev/rules.d/52-startech-hub.rules" [Char] -> [[Char]] -> Property UnixLike
`File.hasContent`
		[ [Char]
"# let users power control startech hub with uhubctl"
		, [Char]
"ATTR{idVendor}==\"" [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
hubvendor [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
"\", ATTR{idProduct}==\"005a\", MODE=\"0666\""
		]
	Props
  (Sing
     (Combine
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
-> Property DebianLike
-> Props
     (Sing
        (Combine
           (Combine
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char]
-> USBHubPort -> USBDriveId -> Maybe [Char] -> Property DebianLike
autoMountDrivePort [Char]
"archive-10"
		([Char] -> Int -> USBHubPort
USBHubPort [Char]
hubvendor Int
1)
		([Char] -> [Char] -> USBDriveId
USBDriveId [Char]
wd [Char]
"1230")
		([Char] -> Maybe [Char]
forall a. a -> Maybe a
Just [Char]
"archive-oldest")
	Props
  (Sing
     (Combine
        (Combine
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
-> Property DebianLike
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char]
-> USBHubPort -> USBDriveId -> Maybe [Char] -> Property DebianLike
autoMountDrivePort [Char]
"archive-11"
		([Char] -> Int -> USBHubPort
USBHubPort [Char]
hubvendor Int
2)
		([Char] -> [Char] -> USBDriveId
USBDriveId [Char]
wd [Char]
"25ee")
		([Char] -> Maybe [Char]
forall a. a -> Maybe a
Just [Char]
"archive-older")
	Props
  (Sing
     (Combine
        (Combine
           (Combine
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
-> Property DebianLike
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 (Combine
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                       'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char]
-> USBHubPort -> USBDriveId -> Maybe [Char] -> Property DebianLike
autoMountDrivePort [Char]
"archive-12"
		([Char] -> Int -> USBHubPort
USBHubPort [Char]
hubvendor Int
3)
		([Char] -> [Char] -> USBDriveId
USBDriveId [Char]
seagate [Char]
"3322")
		([Char] -> Maybe [Char]
forall a. a -> Maybe a
Just [Char]
"archive-old")
	Props
  (Sing
     (Combine
        (Combine
           (Combine
              (Combine
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
-> Property DebianLike
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                          'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char]
-> USBHubPort -> USBDriveId -> Maybe [Char] -> Property DebianLike
autoMountDrivePort [Char]
"archive-13"
		([Char] -> Int -> USBHubPort
USBHubPort [Char]
hubvendor Int
4)
		([Char] -> [Char] -> USBDriveId
USBDriveId [Char]
wd [Char]
"25a3")
		([Char] -> Maybe [Char]
forall a. a -> Maybe a
Just [Char]
"archive")
	Props
  (Sing
     (Combine
        (Combine
           (Combine
              (Combine
                 (Combine
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                       'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
-> Property DebianLike
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                             'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char]
-> USBHubPort -> USBDriveId -> Maybe [Char] -> Property DebianLike
autoMountDrivePort [Char]
"archive-14"
		([Char] -> Int -> USBHubPort
USBHubPort [Char]
hubvendor Int
2)
		([Char] -> [Char] -> USBDriveId
USBDriveId [Char]
wd [Char]
"25a3")
		Maybe [Char]
forall a. Maybe a
Nothing
	Props
  (Sing
     (Combine
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                          'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
-> Property DebianLike
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char] -> Maybe [Char] -> Property DebianLike
autoMountDrive [Char]
"passport" Maybe [Char]
forall a. Maybe a
Nothing
	Props
  (Sing
     (Combine
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                             'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
-> Property DebianLike
-> Props
     (MetaTypes
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             (Combine
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                   'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [[Char]] -> Property DebianLike
Apt.installed [[Char]
"git-annex", [Char]
"borgbackup"]
  where
	hubvendor :: [Char]
hubvendor = [Char]
"0409"
	wd :: [Char]
wd = [Char]
"1058"
	seagate :: [Char]
seagate = [Char]
"0bc2"

data USBHubPort = USBHubPort
	{ USBHubPort -> [Char]
hubVendor :: String
	, USBHubPort -> Int
hubPort :: Int
	}

data USBDriveId = USBDriveId
	{ USBDriveId -> [Char]
driveVendorId :: String
	, USBDriveId -> [Char]
driveProductId :: String
	}

-- Makes a USB drive with the given label automount, and unmount after idle
-- for a while.
--
-- The hub port is turned on and off automatically as needed, using
-- uhubctl.
autoMountDrivePort :: Mount.Label -> USBHubPort -> USBDriveId -> Maybe FilePath -> Property DebianLike
autoMountDrivePort :: [Char]
-> USBHubPort -> USBDriveId -> Maybe [Char] -> Property DebianLike
autoMountDrivePort [Char]
label USBHubPort
hp USBDriveId
drive Maybe [Char]
malias = [Char] -> Props DebianLike -> Property DebianLike
forall {k} (metatypes :: k).
SingI metatypes =>
[Char]
-> Props (MetaTypes metatypes) -> Property (MetaTypes metatypes)
propertyList [Char]
desc (Props DebianLike -> Property DebianLike)
-> Props DebianLike -> Property DebianLike
forall a b. (a -> b) -> a -> b
$ Props UnixLike
props
	Props UnixLike
-> Property Linux
-> Props
     (Sing
        (Combine
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char] -> [[Char]] -> Property UnixLike
File.hasContent ([Char]
"/etc/systemd/system/" [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
hub)
		[ [Char]
"[Unit]"
		, [Char]
"Description=Startech usb hub port " [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ Int -> [Char]
forall a. Show a => a -> [Char]
show (USBHubPort -> Int
hubPort USBHubPort
hp) [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
" vendor " [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ USBDriveId -> [Char]
driveVendorId USBDriveId
drive [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
" driveid " [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ USBDriveId -> [Char]
driveProductId USBDriveId
drive
		, [Char]
"PartOf=" [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
mount
		, [Char]
"[Service]"
		, [Char]
"Type=oneshot"
		, [Char]
"RemainAfterExit=true"
		, [Char]
"ExecStart=/bin/sh -c 'uhubctl -a on " [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
selecthubport [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
"'"
		, [Char]
"ExecStop=/bin/sh -c 'uhubctl -a off " [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
selecthubport
			-- Powering off the port does not remove device
			-- files, so ask udev to remove the devfile; it will
			-- be added back after the drive next spins up
			-- and so avoid mount happening before the drive is
			-- spun up.
			-- (This only works when the devfile is in
			-- by-label.)
			[Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
"; udevadm trigger --action=remove " [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
devfile [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
" || true'"
		, [Char]
"[Install]"
		, [Char]
"WantedBy="
		]
		Property UnixLike
-> Property Linux
-> CombinedType (Property UnixLike) (Property Linux)
forall x y. Combines x y => x -> y -> CombinedType x y
`onChange` Property Linux
Systemd.daemonReloaded
	Props
  (Sing
     (Combine
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux]))
-> Property DebianLike
-> Props
     (MetaTypes
        (Combine
           (Combine
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [[Char]] -> [Char] -> Maybe [Char] -> Property DebianLike
autoMountDrive' 
		[ [Char]
"Requires=" [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
hub
		, [Char]
"After=" [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
hub
		] [Char]
label Maybe [Char]
malias
  where
	devfile :: [Char]
devfile = [Char]
"/dev/disk/by-label/" [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
label
	mountpoint :: [Char]
mountpoint = [Char]
"/media/joey/" [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
label
	desc :: [Char]
desc = [Char]
"auto mount with hub port power control " [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
mountpoint
	hub :: [Char]
hub = [Char]
"startech-hub-port-" [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ Int -> [Char]
forall a. Show a => a -> [Char]
show (USBHubPort -> Int
hubPort USBHubPort
hp) [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
"-vendor-" [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ USBDriveId -> [Char]
driveVendorId USBDriveId
drive [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
"-drivedid-" [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ USBDriveId -> [Char]
driveProductId USBDriveId
drive [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
".service"
	mount :: [Char]
mount = [Char]
svcbase [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
".mount"
	svcbase :: [Char]
svcbase = [Char] -> [Char]
Systemd.escapePath [Char]
mountpoint
	selecthubport :: [Char]
selecthubport = [[Char]] -> [Char]
unwords
		[ [Char]
"-p", Int -> [Char]
forall a. Show a => a -> [Char]
show (USBHubPort -> Int
hubPort USBHubPort
hp)
		, [Char]
"-n", USBHubPort -> [Char]
hubVendor USBHubPort
hp
		, [Char]
"-l", [[Char]] -> [Char]
forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat
			-- The hub's location id, eg "1-1.4", does not seem
			-- as stable as uhubctl claims it will be,
			-- and the vendor is not sufficient since I have 2
			-- hubs from the same vendor. So search for the
			-- drive lsusb to find that. This works even if the
			-- port is powered off, as long as it's been on at
			-- some point before.
			[ [Char]
"$(lsusb -tvv | perl -lne \"if (\\\\$h && m!/sys/bus/usb/devices/(.*?) !) {\\\\$v=\\\\$1}; if (m/Hub/) { \\\\$h=1 } else { \\\\$h=0 }; if (/"
			, USBDriveId -> [Char]
driveVendorId USBDriveId
drive [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
":" [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ USBDriveId -> [Char]
driveProductId USBDriveId
drive
			[Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
"/) { print \\\\$v; last}\")"
			]
		]

-- Makes a USB drive with the given label automount, and unmount after idle
-- for a while.
autoMountDrive :: Mount.Label -> Maybe FilePath -> Property DebianLike
autoMountDrive :: [Char] -> Maybe [Char] -> Property DebianLike
autoMountDrive = [[Char]] -> [Char] -> Maybe [Char] -> Property DebianLike
autoMountDrive' []

autoMountDrive' :: [String] -> Mount.Label -> Maybe FilePath -> Property DebianLike
autoMountDrive' :: [[Char]] -> [Char] -> Maybe [Char] -> Property DebianLike
autoMountDrive' [[Char]]
mountunitadd [Char]
label Maybe [Char]
malias = [Char] -> Props DebianLike -> Property DebianLike
forall {k} (metatypes :: k).
SingI metatypes =>
[Char]
-> Props (MetaTypes metatypes) -> Property (MetaTypes metatypes)
propertyList [Char]
desc (Props DebianLike -> Property DebianLike)
-> Props DebianLike -> Property DebianLike
forall a b. (a -> b) -> a -> b
$ Props UnixLike
props
	Props UnixLike
-> Property UnixLike
-> Props
     (MetaTypes
        (Combine
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char] -> User -> Group -> Property UnixLike
File.ownerGroup [Char]
mountpoint ([Char] -> User
User [Char]
"joey") ([Char] -> Group
Group [Char]
"joey")
		Property UnixLike
-> Property UnixLike
-> CombinedType (Property UnixLike) (Property UnixLike)
forall x y. Combines x y => x -> y -> CombinedType x y
`requires` [Char] -> Property UnixLike
File.dirExists [Char]
mountpoint
	Props
  (MetaTypes
     (Combine
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
-> RevertableProperty UnixLike UnixLike
-> Props
     (Sing
        (Combine
           (Combine
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& case Maybe [Char]
malias of
		Just [Char]
t -> ([Char]
"/media/joey/" [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
t) [Char] -> LinkTarget -> RevertableProperty UnixLike UnixLike
`File.isSymlinkedTo`
			[Char] -> LinkTarget
File.LinkTarget [Char]
mountpoint
		Maybe [Char]
Nothing -> Property UnixLike
forall {k} (t :: k). SingI t => Property (MetaTypes t)
doNothing Property UnixLike
-> Property UnixLike -> RevertableProperty UnixLike UnixLike
forall setupmetatypes undometatypes.
Property setupmetatypes
-> Property undometatypes
-> RevertableProperty setupmetatypes undometatypes
<!> Property UnixLike
forall {k} (t :: k). SingI t => Property (MetaTypes t)
doNothing
	Props
  (Sing
     (Combine
        (Combine
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
-> Property Linux
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char] -> [[Char]] -> Property UnixLike
File.hasContent ([Char]
"/etc/systemd/system/" [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
mount)
		([ [Char]
"[Unit]"
		, [Char]
"Description=" [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
label
		] [[Char]] -> [[Char]] -> [[Char]]
forall a. [a] -> [a] -> [a]
++ [[Char]]
mountunitadd [[Char]] -> [[Char]] -> [[Char]]
forall a. [a] -> [a] -> [a]
++
		[ [Char]
"[Mount]"
		-- avoid mounting whenever the block device is available,
		-- only want to automount on demand
		, [Char]
"Options=noauto"
		, [Char]
"What=" [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
devfile
		, [Char]
"Where=" [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
mountpoint
		, [Char]
"[Install]"
		, [Char]
"WantedBy="
		])
		Property UnixLike
-> Property Linux
-> CombinedType (Property UnixLike) (Property Linux)
forall x y. Combines x y => x -> y -> CombinedType x y
`onChange` Property Linux
Systemd.daemonReloaded
	Props
  (Sing
     (Combine
        (Combine
           (Combine
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux]))
-> Property Linux
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 (Combine
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                       'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                       'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char] -> [[Char]] -> Property UnixLike
File.hasContent ([Char]
"/etc/systemd/system/" [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
automount)
		[ [Char]
"[Unit]"
		, [Char]
"Description=Automount " [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
label
		, [Char]
"[Automount]"
		, [Char]
"Where=" [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
mountpoint
		, [Char]
"TimeoutIdleSec=300"
		, [Char]
"[Install]"
		, [Char]
"WantedBy=multi-user.target"
		]
		Property UnixLike
-> Property Linux
-> CombinedType (Property UnixLike) (Property Linux)
forall x y. Combines x y => x -> y -> CombinedType x y
`onChange` Property Linux
Systemd.daemonReloaded
	Props
  (Sing
     (Combine
        (Combine
           (Combine
              (Combine
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux]))
-> Property Linux
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                          'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                          'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                       'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char] -> Property Linux
Systemd.enabled [Char]
automount
	Props
  (Sing
     (Combine
        (Combine
           (Combine
              (Combine
                 (Combine
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                       'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                       'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux]))
-> Property Linux
-> Props
     (Sing
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                             'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                             'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                          'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                       'Targeting 'OSArchLinux])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char] -> Property Linux
Systemd.started [Char]
automount
	Props
  (Sing
     (Combine
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                          'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                          'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                       'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
              'Targeting 'OSArchLinux])
        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
           'Targeting 'OSArchLinux]))
-> RevertableProperty DebianLike Linux
-> Props
     (MetaTypes
        (Combine
           (Combine
              (Combine
                 (Combine
                    (Combine
                       (Combine
                          (Combine
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                             'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                          'Targeting 'OSArchLinux])
                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                       'Targeting 'OSArchLinux])
                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                    'Targeting 'OSArchLinux])
              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                 'Targeting 'OSArchLinux])
           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
forall {a} p (y :: [a]) (x :: [a]).
(IsProp p, MetaTypes y ~ GetMetaTypes p,
 CheckCombinableNote x y (NoteFor ('Text "&"))) =>
Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
& [Char] -> [[Char]] -> RevertableProperty DebianLike Linux
Sudo.sudoersDFile ([Char]
"automount-" [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
label)
		[ [Char]
"joey ALL= NOPASSWD: " [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
sudocommands
		]
  where
	devfile :: [Char]
devfile = [Char]
"/dev/disk/by-label/" [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
label
	mountpoint :: [Char]
mountpoint = [Char]
"/media/joey/" [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
label
	desc :: [Char]
desc = [Char]
"auto mount " [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
mountpoint
	automount :: [Char]
automount = [Char]
svcbase [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
".automount"
	mount :: [Char]
mount = [Char]
svcbase [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
".mount"
	svcbase :: [Char]
svcbase = [Char] -> [Char]
Systemd.escapePath [Char]
mountpoint
	sudocommands :: [Char]
sudocommands = [Char] -> [[Char]] -> [Char]
forall a. [a] -> [[a]] -> [a]
intercalate [Char]
" , " ([[Char]] -> [Char]) -> [[Char]] -> [Char]
forall a b. (a -> b) -> a -> b
$ ([Char] -> [Char]) -> [[Char]] -> [[Char]]
forall a b. (a -> b) -> [a] -> [b]
map (\[Char]
c -> [Char]
"/bin/systemctl " [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
c)
		[ [Char]
"stop " [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
mountpoint
		, [Char]
"start " [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
mountpoint
		]

rsyncNetBorgRepo :: String -> [Borg.BorgRepoOpt] -> Borg.BorgRepo
rsyncNetBorgRepo :: [Char] -> [BorgRepoOpt] -> BorgRepo
rsyncNetBorgRepo [Char]
d [BorgRepoOpt]
os = [BorgRepoOpt] -> [Char] -> BorgRepo
Borg.BorgRepoUsing [BorgRepoOpt]
os' ([Char]
"2318@usw-s002.rsync.net:" [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
d)
  where
	-- rsync.net has a newer borg here
	os' :: [BorgRepoOpt]
os' = ([Char], [Char]) -> BorgRepoOpt
Borg.UsesEnvVar ([Char]
"BORG_REMOTE_PATH", [Char]
"borg1") BorgRepoOpt -> [BorgRepoOpt] -> [BorgRepoOpt]
forall a. a -> [a] -> [a]
: [BorgRepoOpt]
os

noExim :: Property DebianLike
noExim :: Property DebianLike
noExim = [[Char]] -> Property DebianLike
Apt.removed [[Char]
"exim4", [Char]
"exim4-base", [Char]
"exim4-daemon-light"]
	Property DebianLike
-> Property DebianLike
-> CombinedType (Property DebianLike) (Property DebianLike)
forall x y. Combines x y => x -> y -> CombinedType x y
`onChange` Property DebianLike
Apt.autoRemove

data HostapdConfig = HostapdConfig [String]

hostapd2GhzConfig :: HostapdConfig
hostapd2GhzConfig :: HostapdConfig
hostapd2GhzConfig = [[Char]] -> HostapdConfig
HostapdConfig
	[ [Char]
"hw_mode=g"
	, [Char]
"channel=5"
	, [Char]
"country_code=US"
	, [Char]
"ieee80211d=1"
	, [Char]
"ieee80211n=1"
	, [Char]
"wmm_enabled=1"
	]

-- For wifi adapters such as the Alfa AWUS036ACHM
--
-- Note that for maximum speed, this needs channel 5 or 6.
-- This should make it be capable of 150 Mb/s.
hostapd2GhzConfig_mt76 :: HostapdConfig
hostapd2GhzConfig_mt76 :: HostapdConfig
hostapd2GhzConfig_mt76 = [[Char]] -> HostapdConfig
HostapdConfig ([[Char]] -> HostapdConfig) -> [[Char]] -> HostapdConfig
forall a b. (a -> b) -> a -> b
$ [[Char]]
c [[Char]] -> [[Char]] -> [[Char]]
forall a. [a] -> [a] -> [a]
++ 
	[ [Char]
"ht_capab=[HT40+][HT40-][GF][SHORT-GI-20][SHORT-GI-40]"
	]
  where
	HostapdConfig [[Char]]
c = HostapdConfig
hostapd2GhzConfig

hostapd5GhzConfig :: HostapdConfig
hostapd5GhzConfig :: HostapdConfig
hostapd5GhzConfig = [[Char]] -> HostapdConfig
HostapdConfig
	[ [Char]
"hw_mode=a"
	, [Char]
"channel=36"
	, [Char]
"country_code=US"
	, [Char]
"ieee80211d=1"
	, [Char]
"ieee80211n=1"
	, [Char]
"ieee80211ac=1"
	, [Char]
"wmm_enabled=1"
	]