    -- | 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.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 Utility.Split

    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]))
    -> Property
         (MetaTypes
            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
               'Targeting 'OSArchLinux])
    -> 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,
                  '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
         (MetaTypes
            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
               'Targeting 'OSArchLinux])
    Git.daemonService [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,
               'Targeting 'OSArchLinux]))
    -> 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 '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/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 'OSArchLinux])
            '[ '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 '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))
    & 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 'OSArchLinux])
               '[ '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 'OSArchLinux])
                     '[ '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 'OSArchLinux])
                  '[ '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 '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] -> 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 'OSArchLinux])
                     '[ '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 '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] -> 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 '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]))
    -> 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 '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] -> 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
         (MetaTypes
            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
               'Targeting 'OSArchLinux])
    -> 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
         (MetaTypes
            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
               'Targeting 'OSArchLinux])
    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"

    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")

    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
         (Sing
            (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"
    	Props
      (Sing
         (Combine
            (Combine
               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
    -> Property UnixLike
    -> Props
         (MetaTypes
            (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))
    & [Char]
    "/etc/spamassassin/local.cf" [Char] -> [[Char]] -> Property UnixLike
    `File.containsLines`
    		-- dnswl.org started intentionally sending false responses
    		-- for spam senders when they don't like the amount of
    		-- queries being made. This causes spamassassin to skip
    		-- all other checks and miss flagging spam. This is
    		-- irresponsible behavior, and so they should not be used.
    		[ [Char]
    "dns_query_restriction deny dnswl.org"
    		]

    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
         (Sing
            (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))
    & Property DebianLike
    spamassassinConfigured
    	Props
      (Sing
         (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))
    & [Char] -> Property DebianLike
    Apt.serviceInstalledRunning [Char]
    "spamass-milter"
    	-- Add -m to prevent modifying messages Subject or body.
    	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]
    "/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
                     '[ '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
                           '[ '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
                        '[ '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
                              '[ '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
                           '[ '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
                                 '[ '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
                              '[ '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
                                    '[ '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
                                 '[ '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
                                       '[ '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
                                    '[ '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
                                          '[ '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
                                       '[ '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
                                             '[ '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
                                          '[ '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
                                                '[ '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
                                             '[ '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
                                                   '[ '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]
    "if (/^X-Spam-Status: Yes/)"
    		, [Char]
    "{"
    		, [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
                                                '[ '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
                                                      '[ '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
                                                   '[ '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
                                                         '[ '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
                                                      '[ '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
                                                            '[ '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
                                                         '[ '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
                                                               '[ '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
                                                            '[ '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
                                                                  '[ '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
                                                               '[ '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
                                                                     '[ '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
                                                                  '[ '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
                                                                        '[ '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 sasl auth and client certs."
    		, [Char]
    "smtpd_recipient_restrictions = permit_tls_clientcerts,permit_sasl_authenticated,,permit_mynetworks,reject_unauth_destination"

    		, [Char]
    "# Enable spamass-milter (opendkim is not enabled because it causes mails forwarded from eg gmail to be rejected)"
    		, [Char]
    "smtpd_milters = unix:/spamass/spamass.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_tls_security_level = may"
    		, [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_tls_security_level = may"
    		, [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
                                                                     '[ '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
                                                                           '[ '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
                                                                        '[ '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
                                                                              '[ '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
                                                                           '[ '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
                                                                                 '[ '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
                                                                              '[ '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
                                                                                    '[ '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
                                                                                 '[ '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]))
    -> 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])
                                                                           '[ '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])
               '[ '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-ssl.conf" [Char] -> [[Char]] -> Property UnixLike
    `File.containsLines`
    		[ [Char]
    "ssl_cert = </etc/letsencrypt/live/kitenet.net/fullchain.pem"
    		, [Char]
    "ssl_key = </etc/letsencrypt/live/kitenet.net/privkey.pem"
    		]
    		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 ssl.conf using letsencrypt"
    	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])
                                                                        '[ '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])
            '[ '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])
                                                                              '[ '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])
                  '[ '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]
    "dovecot restarts to update letsenctypt certificate"
    		Times
    Cron.Daily ([Char] -> User
    User [Char]
    "root") [Char]
    "/" [Char]
    "systemctl restart 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
                                                                                       '[ '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])
               '[ '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
                                                                                             '[ '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])
                     '[ '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
                                                                                          '[ '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])
                  '[ '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
                                                                                                '[ '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])
                        '[ '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
                                                                                             '[ '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])
                     '[ '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
                                                                                                   '[ '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])
                           '[ '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
                                                                                                '[ '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])
                        '[ '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
                                                                                                      '[ '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])
                              '[ '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
                                                                                                   '[ '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])
                           '[ '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
                                                                                                         '[ '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])
                                 '[ '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
                                                                                                      '[ '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])
                              '[ '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
                                                                                                            '[ '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])
                                    '[ '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
                                                                                                         '[ '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])
                                 '[ '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
                                                                                                               '[ '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])
                                       '[ '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
                                                                                                            '[ '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])
                                    '[ '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
                                                                                                                  '[ '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])
                                          '[ '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:465"
    		, [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
         (Sing
            (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
      (Sing
         (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]
    -> AgreeTOS
    -> [[Char]]
    -> RevertableProperty DebianLike DebianLike
    Apache.httpsVirtualHost' [Char]
    "house.joeyh.name" [Char]
    "/srv/web/house.joeyh.name" AgreeTOS
    letos
    		[ [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
         (MetaTypes
            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
               'Targeting 'OSArchLinux])
    alarmClock [Char]
    oncalendar (User [Char]
    user) [Char]
    command = [Char]
    -> Props
         (MetaTypes
            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
               'Targeting 'OSArchLinux])
    -> Property
         (MetaTypes
            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
               'Targeting 'OSArchLinux])
    forall {k} (metatypes :: k).
    SingI metatypes =>
    [Char]
    -> Props (MetaTypes metatypes) -> Property (MetaTypes metatypes)
    combineProperties [Char]
    "goodmorning timer installed" (Props
       (MetaTypes
          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
             'Targeting 'OSArchLinux])
     -> Property
          (MetaTypes
             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                'Targeting 'OSArchLinux]))
    -> Props
         (MetaTypes
            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
               'Targeting 'OSArchLinux])
    -> Property
         (MetaTypes
            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
               'Targeting 'OSArchLinux])
    forall a b. (a -> b) -> a -> b
    $ Props UnixLike
    props
    	Props UnixLike
    -> CombinedType
         (Property UnixLike)
         (Property
            (MetaTypes
               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                  'Targeting 'OSArchLinux]))
    -> 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
         (MetaTypes
            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
               'Targeting 'OSArchLinux])
    -> CombinedType
         (Property UnixLike)
         (Property
            (MetaTypes
               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                  'Targeting 'OSArchLinux]))
    forall x y. Combines x y => x -> y -> CombinedType x y
    `onChange` (Property
      (MetaTypes
         '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
            'Targeting 'OSArchLinux])
    Systemd.daemonReloaded
    			Property
      (MetaTypes
         '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
            'Targeting 'OSArchLinux])
    -> Property
         (MetaTypes
            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
               'Targeting 'OSArchLinux])
    -> CombinedType
         (Property
            (MetaTypes
               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                  'Targeting 'OSArchLinux]))
         (Property
            (MetaTypes
               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                  'Targeting 'OSArchLinux]))
    forall x y. Combines x y => x -> y -> CombinedType x y
    `before` [Char]
    -> Property
         (MetaTypes
            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
               'Targeting 'OSArchLinux])
    Systemd.restarted [Char]
    "goodmorning.timer")
    	Props
      (Sing
         (Combine
            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
               'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
               'Targeting 'OSArchLinux]))
    -> Property
         (MetaTypes
            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
               'Targeting 'OSArchLinux])
    -> 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
         (MetaTypes
            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
               'Targeting 'OSArchLinux])
    -> CombinedType
         (Property UnixLike)
         (Property
            (MetaTypes
               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                  'Targeting 'OSArchLinux]))
    forall x y. Combines x y => x -> y -> CombinedType x y
    `onChange` Property
      (MetaTypes
         '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
            'Targeting 'OSArchLinux])
    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
         (MetaTypes
            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
               'Targeting 'OSArchLinux])
    -> 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
         (MetaTypes
            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
               'Targeting 'OSArchLinux])
    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
         (MetaTypes
            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
               'Targeting 'OSArchLinux])
    -> 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
         (MetaTypes
            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
               'Targeting 'OSArchLinux])
    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")

    epsolarUsbSetup :: Property UnixLike
    epsolarUsbSetup :: Property UnixLike
    epsolarUsbSetup = [Char] -> Props UnixLike -> Property UnixLike
    forall {k} (metatypes :: k).
    SingI metatypes =>
    [Char]
    -> Props (MetaTypes metatypes) -> Property (MetaTypes metatypes)
    propertyList [Char]
    "epsolar usb setup" (Props UnixLike -> Property UnixLike)
    -> Props UnixLike -> Property UnixLike
    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]
    "/etc/udev/rules.d/99-epsolar-usb.rules" [Char] -> [[Char]] -> Property UnixLike
    `File.hasContent`
    		-- Each epever usb cable has its own serial number and gets
    		-- its own stable device name.
    		[ [Char]
    "SUBSYSTEM==\"tty\", ATTRS{idVendor}==\"04e2\", ATTRS{idProduct}==\"1411\", ATTRS{serial}==\"G9107376441\", SYMLINK+=\"epsolar1\""
    		, [Char]
    "SUBSYSTEM==\"tty\", ATTRS{idVendor}==\"1a86\", ATTRS{idProduct}==\"55d3\", ATTRS{serial}==\"5876071260\", SYMLINK+=\"epsolar2\""
    		, [Char]
    "SUBSYSTEM==\"tty\", ATTRS{idVendor}==\"1a86\", ATTRS{idProduct}==\"55d3\", ATTRS{serial}==\"5875017909\", SYMLINK+=\"epsolar3\""
    		, [Char]
    "SUBSYSTEM==\"tty\", ATTRS{idVendor}==\"1a86\", ATTRS{idProduct}==\"55d3\", ATTRS{serial}==\"5876071261\", SYMLINK+=\"epsolar4\""
    		, [Char]
    "SUBSYSTEM==\"tty\", ATTRS{idVendor}==\"1a86\", ATTRS{idProduct}==\"55d3\", ATTRS{serial}==\"5875017825\", SYMLINK+=\"epsolar5\""
    		, [Char]
    "SUBSYSTEM==\"tty\", ATTRS{idVendor}==\"1a86\", ATTRS{idProduct}==\"55d3\", ATTRS{serial}==\"589A039325\", SYMLINK+=\"epsolar6\""
    		]
    	-- The xr-serial module wants to handle the epever usb cables
    	-- (at least older ones, new ones are handled by ACM), but
    	-- it does not work in linux 6.1. Instead I am currently installing
    	-- an out of tree module, xr_usb_serial_common. In linux 6.6,
    	-- the xr-serial module has been reported to work,
    	-- see https://github.com/kasbert/epsolar-tracer/pull/61#issuecomment-2056442735
    	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]
    "/etc/modprobe.d/blacklist.conf" [Char] -> [[Char]] -> Property UnixLike
    `File.containsLines`
    		[ [Char]
    "blacklist xr-serial"
    		, [Char]
    "blacklist xr-serial"
    		]

    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
         (Sing
            (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
      (Sing
         (Combine
            (Combine
               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
    -> Property UnixLike
    -> Props
         (MetaTypes
            (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
      (MetaTypes
         (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]))
    -> Property UnixLike
    -> 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, '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
    epsolarUsbSetup
    	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, 'Targeting 'OSFreeBSD]))
    -> CombinedType
         (Property
            (MetaTypes
               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                  'Targeting 'OSArchLinux]))
         (Property
            (MetaTypes
               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                  'Targeting 'OSArchLinux]))
    -> 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 '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]
    -> Property
         (MetaTypes
            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
               'Targeting 'OSArchLinux])
    Systemd.enabled [Char]
    setupservicename
    		Property
      (MetaTypes
         '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
            'Targeting 'OSArchLinux])
    -> Property UnixLike
    -> CombinedType
         (Property
            (MetaTypes
               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                  'Targeting 'OSArchLinux]))
         (Property UnixLike)
    forall x y. Combines x y => x -> y -> CombinedType x y
    `requires` Property UnixLike
    setupserviceinstalled
    		Property
      (MetaTypes
         '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
            'Targeting 'OSArchLinux])
    -> Property
         (MetaTypes
            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
               'Targeting 'OSArchLinux])
    -> CombinedType
         (Property
            (MetaTypes
               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                  'Targeting 'OSArchLinux]))
         (Property
            (MetaTypes
               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                  'Targeting 'OSArchLinux]))
    forall x y. Combines x y => x -> y -> CombinedType x y
    `onChange` [Char]
    -> Property
         (MetaTypes
            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
               'Targeting 'OSArchLinux])
    Systemd.started [Char]
    setupservicename
    	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 'OSFreeBSD])
            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
               'Targeting 'OSArchLinux]))
    -> CombinedType
         (Property
            (MetaTypes
               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                  'Targeting 'OSArchLinux]))
         (Property
            (MetaTypes
               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                  'Targeting 'OSArchLinux]))
    -> 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 '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]
    -> Property
         (MetaTypes
            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
               'Targeting 'OSArchLinux])
    Systemd.enabled [Char]
    pollerservicename
    		Property
      (MetaTypes
         '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
            'Targeting 'OSArchLinux])
    -> Property UnixLike
    -> CombinedType
         (Property
            (MetaTypes
               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                  'Targeting 'OSArchLinux]))
         (Property UnixLike)
    forall x y. Combines x y => x -> y -> CombinedType x y
    `requires` Property UnixLike
    pollerserviceinstalled
    		Property
      (MetaTypes
         '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
            'Targeting 'OSArchLinux])
    -> Property
         (MetaTypes
            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
               'Targeting 'OSArchLinux])
    -> CombinedType
         (Property
            (MetaTypes
               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                  'Targeting 'OSArchLinux]))
         (Property
            (MetaTypes
               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                  'Targeting 'OSArchLinux]))
    forall x y. Combines x y => x -> y -> CombinedType x y
    `onChange` [Char]
    -> Property
         (MetaTypes
            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
               'Targeting 'OSArchLinux])
    Systemd.started [Char]
    pollerservicename
    	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 'OSFreeBSD])
               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                  'Targeting 'OSArchLinux])
            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
               'Targeting 'OSArchLinux]))
    -> CombinedType
         (Property
            (MetaTypes
               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                  'Targeting 'OSArchLinux]))
         (Property
            (MetaTypes
               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                  'Targeting 'OSArchLinux]))
    -> 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 '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
         (MetaTypes
            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
               'Targeting 'OSArchLinux])
    Systemd.enabled [Char]
    controllerservicename
    		Property
      (MetaTypes
         '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
            'Targeting 'OSArchLinux])
    -> Property UnixLike
    -> CombinedType
         (Property
            (MetaTypes
               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                  'Targeting 'OSArchLinux]))
         (Property UnixLike)
    forall x y. Combines x y => x -> y -> CombinedType x y
    `requires` Property UnixLike
    controllerserviceinstalled
    		Property
      (MetaTypes
         '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
            'Targeting 'OSArchLinux])
    -> Property
         (MetaTypes
            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
               'Targeting 'OSArchLinux])
    -> CombinedType
         (Property
            (MetaTypes
               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                  'Targeting 'OSArchLinux]))
         (Property
            (MetaTypes
               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                  'Targeting 'OSArchLinux]))
    forall x y. Combines x y => x -> y -> CombinedType x y
    `onChange` [Char]
    -> Property
         (MetaTypes
            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
               'Targeting 'OSArchLinux])
    Systemd.started [Char]
    controllerservicename
    	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 'OSFreeBSD])
                  '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                     'Targeting 'OSArchLinux])
               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                  'Targeting 'OSArchLinux])
            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
               'Targeting 'OSArchLinux]))
    -> CombinedType
         (Property
            (MetaTypes
               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                  'Targeting 'OSArchLinux]))
         (Property
            (MetaTypes
               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                  'Targeting 'OSArchLinux]))
    -> 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 '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
         (MetaTypes
            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
               'Targeting 'OSArchLinux])
    Systemd.enabled [Char]
    watchdogservicename
    		Property
      (MetaTypes
         '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
            'Targeting 'OSArchLinux])
    -> Property UnixLike
    -> CombinedType
         (Property
            (MetaTypes
               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                  'Targeting 'OSArchLinux]))
         (Property UnixLike)
    forall x y. Combines x y => x -> y -> CombinedType x y
    `requires` Property UnixLike
    watchdogserviceinstalled
    		Property
      (MetaTypes
         '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
            'Targeting 'OSArchLinux])
    -> Property
         (MetaTypes
            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
               'Targeting 'OSArchLinux])
    -> CombinedType
         (Property
            (MetaTypes
               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                  'Targeting 'OSArchLinux]))
         (Property
            (MetaTypes
               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                  'Targeting 'OSArchLinux]))
    forall x y. Combines x y => x -> y -> CombinedType x y
    `onChange` [Char]
    -> Property
         (MetaTypes
            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
               'Targeting 'OSArchLinux])
    Systemd.started [Char]
    watchdogservicename
    	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 '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 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 '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] -> Property DebianLike
    Apt.serviceInstalledRunning [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 '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]))
    -> 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 'OSArchLinux, 'Targeting 'OSFreeBSD])
                                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                 '[ '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 '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
                                       (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 '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 'OSDebian, 'Targeting 'OSBuntish]))
    -> Property UnixLike
    -> 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 '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 '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
                                          (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 '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 '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
                                                (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 '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 '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
                                             (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 '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 '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
                                                   (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 '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 '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
                                                (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 '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 '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
                                                      (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 '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 '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
                                                   (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 '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 '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
                                                         (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 '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 '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
                                                      (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 '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 '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
         (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 '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 '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
      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.service"
    		]
    	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.service"
    		, [Char]
    "WantedBy=house-controller.service"
    		, [Char]
    "WantedBy=house-watchdog.service"
    		]
    	-- 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-base"]
    	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.removed [[Char]
    "isc-dhcp-client"]
    	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]
    "/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
               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
               'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
    -> Property UnixLike
    -> Props
         (Sing
            (Combine
               (Combine
                  (Combine
                     '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                     '[ '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/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)
    	-- Avoid using dns servers sent by starlink.
    	Props
      (Sing
         (Combine
            (Combine
               (Combine
                  '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                  '[ '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
                        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                        '[ '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]
    "/etc/dhcpcd.conf" [Char] -> [Char] -> Property UnixLike
    `File.containsLine`
    		[Char]
    "nohook resolv.conf"
    	Props
      (Sing
         (Combine
            (Combine
               (Combine
                  (Combine
                     '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                     '[ '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]))
    -> Property DebianLike
    -> Props
         (MetaTypes
            (Combine
               (Combine
                  (Combine
                     (Combine
                        (Combine
                           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                           '[ '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))
    & [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 :: String -> Interfaces -> String -> HostapdConfig -> Property DebianLike
    homeRouter :: [Char]
    -> Interfaces -> [Char] -> HostapdConfig -> Property DebianLike
    homeRouter [Char]
    hn 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]))
    -> RevertableProperty
         (MetaTypes
            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
               'Targeting 'OSArchLinux])
         (MetaTypes
            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
               'Targeting 'OSArchLinux])
    -> 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} {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
         (MetaTypes
            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
               'Targeting 'OSArchLinux])
         (MetaTypes
            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
               'Targeting 'OSArchLinux])
    Systemd.masked [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
         (MetaTypes
            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
               'Targeting 'OSArchLinux])
    -> 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]))
    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
         (MetaTypes
            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
               'Targeting 'OSArchLinux])
    Systemd.enabled [Char]
    "hostapd"
    	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]))
    -> Property UnixLike
    -> 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 '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.head"
    		[ [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
                        (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 'OSDebian, 'Targeting 'OSBuntish,
               'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
    -> 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 '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
                           (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 'OSDebian, 'Targeting 'OSBuntish,
                  'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
            '[ '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 '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=/" [Char] -> [Char] -> [Char]
    forall a. [a] -> [a] -> [a]
    ++ [Char]
    hn [Char] -> [Char] -> [Char]
    forall a. [a] -> [a] -> [a]
    ++ [Char]
    "/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
                              (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 '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
                                       '[ '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 '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
                                 (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 '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
                                          '[ '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 '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
                                    (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 '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
                                             '[ '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 '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
                                       (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 '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
                                             (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 '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
                                          (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 '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
         (Sing
            (Combine
               (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 '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.d/ip-forwarding.conf"
    		[Char] -> [Char] -> Property UnixLike
    `File.containsLine` [Char]
    "net.ipv6.conf.all.forwarding=1"
    	-- Programs that I find useful on a router.
    	Props
      (Sing
         (Combine
            (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 '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]))
    -> Property DebianLike
    -> Props
         (Sing
            (Combine
               (Combine
                  (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 '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])
               '[ '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]
    "net-tools", [Char]
    "wireless-tools"]
    	Props
      (Sing
         (Combine
            (Combine
               (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 '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])
            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
    -> Property DebianLike
    -> Props
         (MetaTypes
            (Combine
               (Combine
                  (Combine
                     (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 '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])
                  '[ '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]
    "mtr-tiny", [Char]
    "iftop", [Char]
    "screen", [Char]
    "nmap"]

    -- | 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]
    "vlc", [Char]
    "mpv", [Char]
    "mplayer", [Char]
    "fbreader", [Char]
    "foliate", [Char]
    "firefox", [Char]
    "chromium"
    	, [Char]
    "yt-dlp"
    	, [Char]
    "libdatetime-event-sunrise-perl", [Char]
    "libtime-duration-perl"
    	, [Char]
    "network-manager", [Char]
    "network-manager-openvpn-gnome", [Char]
    "openvpn"
    	, [Char]
    "powertop"
    	, [Char]
    "gimp", [Char]
    "gthumb", [Char]
    "inkscape", [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]
    "hledger", [Char]
    "bc"
    	, [Char]
    "apache2", [Char]
    "ikiwiki", [Char]
    "libhighlight-perl"
    	, [Char]
    "avahi-daemon", [Char]
    "avahi-discover"
    	, [Char]
    "pal", [Char]
    "ncal"
    	, [Char]
    "yeahconsole", [Char]
    "xkbset", [Char]
    "xinput"
    	, [Char]
    "assword", [Char]
    "pumpa"
    	, [Char]
    "vorbis-tools", [Char]
    "audacity"
    	, [Char]
    "bluez-firmware", [Char]
    "blueman", [Char]
    "pulseaudio-module-bluetooth"
    	, [Char]
    "pulseaudio-utils"
    	, [Char]
    "fwupd"
    	, [Char]
    "webext-ublock-origin-firefox", [Char]
    "webext-ublock-origin-chromium"
    	, [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]
    "libnotify-bin"
    	, [Char]
    "libmodbus-dev"
    	, [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" --, "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]
    "hasktags", [Char]
    "hlint"
    	, [Char]
    "gdb", [Char]
    "time"
    	, [Char]
    "dpkg-repack", [Char]
    "lintian"
    	, [Char]
    "pristine-tar"
    	]

    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]
    "};"
    		]

    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 300 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"
    	]

    thinkPadLedsOff :: Property Linux
    thinkPadLedsOff :: Property
      (MetaTypes
         '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
            'Targeting 'OSArchLinux])
    thinkPadLedsOff =
    	[Char]
    "/etc/systemd/system/thinkpad_leds_off.service" [Char] -> [[Char]] -> Property UnixLike
    `File.hasContent`
    		[ [Char]
    "[Unit]"
    		, [Char]
    "After=suspend.target"
    		, [Char]
    "[Service]"
    		, [Char]
    "Type=simple"
    		, [Char]
    "ExecStart=sh -c 'echo 0 > /sys/devices/platform/thinkpad_acpi/leds/tpacpi::lid_logo_dot/brightness; echo 0 > /sys/devices/platform/thinkpad_acpi/leds/tpacpi::power/brightness'"
    		, [Char]
    "[Install]"
    		, [Char]
    "WantedBy=suspend.target"
    		]
    		Property UnixLike
    -> Property
         (MetaTypes
            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
               'Targeting 'OSArchLinux])
    -> CombinedType
         (Property UnixLike)
         (Property
            (MetaTypes
               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                  'Targeting 'OSArchLinux]))
    forall x y. Combines x y => x -> y -> CombinedType x y
    `onChange` (Property
      (MetaTypes
         '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
            'Targeting 'OSArchLinux])
    Systemd.daemonReloaded
    			Property
      (MetaTypes
         '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
            'Targeting 'OSArchLinux])
    -> Property
         (MetaTypes
            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
               'Targeting 'OSArchLinux])
    -> CombinedType
         (Property
            (MetaTypes
               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                  'Targeting 'OSArchLinux]))
         (Property
            (MetaTypes
               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                  'Targeting 'OSArchLinux]))
    forall x y. Combines x y => x -> y -> CombinedType x y
    `before` [Char]
    -> Property
         (MetaTypes
            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
               'Targeting 'OSArchLinux])
    Systemd.enabled [Char]
    "thinkpad_leds_off")