    module Propellor.Property.SiteSpecific.Branchable where

    import Propellor.Base
    import qualified Propellor.Property.Apt as Apt
    import qualified Propellor.Property.File as File
    import qualified Propellor.Property.User as User
    import qualified Propellor.Property.Ssh as Ssh
    import qualified Propellor.Property.Postfix as Postfix
    import qualified Propellor.Property.Sudo as Sudo
    import qualified Propellor.Property.Borg as Borg
    import qualified Propellor.Property.Cron as Cron
    import Propellor.Property.SiteSpecific.JoeySites (rsyncNetBorgRepo)

    server :: [Host] -> Property (HasInfo + DebianLike)
    server :: [Host] -> Property (HasInfo + DebianLike)
    server [Host]
    hosts = Desc
    -> Props
         (MetaTypes
            '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
    -> Property
         (MetaTypes
            '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
    forall {k} (metatypes :: k).
    SingI metatypes =>
    Desc
    -> Props (MetaTypes metatypes) -> Property (MetaTypes metatypes)
    propertyList Desc
    "branchable 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 UnixLike
    -> Props
         (Sing
            (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))
    & Desc
    "/etc/timezone" Desc -> [Desc] -> Property UnixLike
    `File.hasContent` [Desc
    "Etc/UTC"]
    	Props UnixLike
    -> Property UnixLike
    -> Props
         (Sing
            (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))
    & Desc
    "/etc/locale.gen" Desc -> [Desc] -> Property UnixLike
    `File.containsLines`
    		[ Desc
    "en_GB.UTF-8 UTF-8"
    		, Desc
    "en_US.UTF-8 UTF-8"
    		, Desc
    "fi_FI.UTF-8 UTF-8"
    		]
    		Property UnixLike
    -> Property UnixLike
    -> CombinedType (Property UnixLike) (Property UnixLike)
    forall x y. Combines x y => x -> y -> CombinedType x y
    `onChange` (Desc -> [Desc] -> UncheckedProperty UnixLike
    cmdProperty Desc
    "locale-gen" [] UncheckedProperty UnixLike -> Result -> Property UnixLike
    forall (p :: * -> *) i.
    Checkable p i =>
    p i -> Result -> Property i
    `assume` Result
    MadeChange)

    	Props
      (Sing
         (Combine
            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
               'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
               'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
    -> Property DebianLike
    -> Props
         (Sing
            (Combine
               (Combine
                  '[ '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))
    & [Desc] -> Property DebianLike
    Apt.installed [Desc
    "etckeeper", Desc
    "ssh", Desc
    "popularity-contest"]
    	Props
      (Sing
         (Combine
            (Combine
               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                  'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                  'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
    -> Property DebianLike
    -> Props
         (Sing
            (Combine
               (Combine
                  (Combine
                     '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                        'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
                     '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                        'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                  '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
               '[ 'Targeting '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))
    & Desc -> Property DebianLike
    Apt.serviceInstalledRunning Desc
    "apache2"
    	Props
      (Sing
         (Combine
            (Combine
               (Combine
                  '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                     'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
                  '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                     'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
    -> Property DebianLike
    -> Props
         (Sing
            (Combine
               (Combine
                  (Combine
                     (Combine
                        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                           'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
                        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                           'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                     '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                  '[ 'Targeting '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))
    & Desc -> Property DebianLike
    Apt.serviceInstalledRunning Desc
    "ntp"

    	Props
      (Sing
         (Combine
            (Combine
               (Combine
                  (Combine
                     '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                        'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
                     '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                        'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                  '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
    -> Property DebianLike
    -> Props
         (Sing
            (Combine
               (Combine
                  (Combine
                     (Combine
                        (Combine
                           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
                           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                     '[ 'Targeting '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))
    & Desc -> Property DebianLike
    Apt.serviceInstalledRunning Desc
    "openssh-server"
    	Props
      (Sing
         (Combine
            (Combine
               (Combine
                  (Combine
                     (Combine
                        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                           'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
                        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                           'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                     '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                  '[ 'Targeting '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]
                              '[ '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))
    & Bool -> Property DebianLike
    Ssh.passwordAuthentication Bool
    False
    	Props
      (Sing
         (Combine
            (Combine
               (Combine
                  (Combine
                     (Combine
                        (Combine
                           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
                           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                              'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                     '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                  '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
    -> Property
         (MetaTypes
            '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
    -> Props
         (Sing
            (Combine
               (Combine
                  (Combine
                     (Combine
                        (Combine
                           (Combine
                              (Combine
                                 '[ '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 '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))
    & Context -> [(SshKeyType, Desc)] -> Property (HasInfo + DebianLike)
    forall c.
    IsContext c =>
    c -> [(SshKeyType, Desc)] -> Property (HasInfo + DebianLike)
    Ssh.hostKeys (Desc -> Context
    Context Desc
    "branchable.com")
    		[ (SshKeyType
    SshDsa, Desc
    "ssh-dss   root@pell")
    		, (SshKeyType
    SshRsa, Desc
    "ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA1M0aNLgcgcgf0tkmt/8vCDZLok8Xixz7Nun9wB6NqVXxfzAR4te+zyO7FucVwyTY5QHmiwwpmyNfaC21AAILhXGm12SUKSAirF9BkQk7bhQuz4T/dPlEt3d3SxQ3OZlXtPp4LzXWOyS0OXSzIb+HeaDA+hFXlQnp/gE7RyAzR1+xhWPO7Mz1q5O/+4dXANnW32t6P7Puob6NsglVDpLrMRYjkO+0RgCVbYMzB5+UnkthkZsIINaYwsNhW2GKMKbRZeyp5en5t1NJprGXdw0BqdBqd/rcBpOxmhHE1U7rw+GS1uZwCFWWv0aZbaXEJ6wY7mETFkqs0QXi5jtoKn95Gw== root@pell")
    		, (SshKeyType
    SshEcdsa, Desc
    "ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBLRRZ3Ew6eq6d8+ID1CXwF0hLjObNM2XwCIOFI4Wml2iP5NIHwtUCg2hlVUal6v1bO+VPjvx3dkf5Y00GI2BVSY= root@pell")
    		, (SshKeyType
    SshEd25519, Desc
    "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIG5gaqToi0NtZH+vxXqW8E/reJW2tMHOEs2ycieMYkng root@pell")
    		]

    	Props
      (Sing
         (Combine
            (Combine
               (Combine
                  (Combine
                     (Combine
                        (Combine
                           (Combine
                              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
                              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                 'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                     '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                  '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
            '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
    -> Property DebianLike
    -> Props
         (Sing
            (Combine
               (Combine
                  (Combine
                     (Combine
                        (Combine
                           (Combine
                              (Combine
                                 (Combine
                                    '[ '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 '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))
    & [Desc] -> Property DebianLike
    Apt.installed [Desc
    "procmail", Desc
    "bsd-mailx"]
    	Props
      (Sing
         (Combine
            (Combine
               (Combine
                  (Combine
                     (Combine
                        (Combine
                           (Combine
                              (Combine
                                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                    'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]
                                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                    'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
                              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                     '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                  '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
               '[ 'WithInfo, '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
                                       '[ '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 'OSDebian, 'Targeting 'OSBuntish])
                           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                     '[ 'WithInfo, '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))
    & Desc
    "/etc/aliases" Desc -> Context -> Property (HasInfo + UnixLike)
    forall c. IsContext c => Desc -> c -> Property (HasInfo + UnixLike)
    `File.hasPrivContentExposed` (Desc -> Context
    Context Desc
    "branchable.com")
    		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
                                    '[ '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 'OSDebian, 'Targeting 'OSBuntish])
                        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                     '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                  '[ 'WithInfo, '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
                                          '[ '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 'OSDebian, 'Targeting 'OSBuntish])
                              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                        '[ 'WithInfo, '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))
    & Desc
    "/etc/mailname" Desc -> [Desc] -> Property UnixLike
    `File.hasContent` [Desc
    "branchable.com"]
    	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 'OSArchLinux, 'Targeting 'OSFreeBSD])
                                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                     '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                  '[ 'Targeting '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
                                             '[ '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 'OSDebian, 'Targeting 'OSBuntish])
                                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                           '[ 'WithInfo, '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))
    & Property DebianLike
    Postfix.installed
    	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 'OSArchLinux, 'Targeting 'OSFreeBSD])
                                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                           '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                     '[ 'Targeting '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
                                                '[ '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 'OSDebian, 'Targeting 'OSBuntish])
                                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                              '[ 'WithInfo, '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))
    & (Desc, Desc) -> Property UnixLike
    Postfix.mainCf (Desc
    "mailbox_command", Desc
    "procmail -a \"$EXTENSION\"")

    	-- backup everything except the contents of sites, which are
    	-- backed up by ikiwiki-hosting.
    	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 'OSArchLinux, 'Targeting 'OSFreeBSD])
                                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                              '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                           '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                        '[ 'Targeting '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 DebianLike
    -> 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 'OSArchLinux, 'Targeting 'OSFreeBSD])
                                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                 '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                              '[ 'Targeting '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]))
    forall {a} p (y :: [a]) (x :: [a]).
    (IsProp p, MetaTypes y ~ GetMetaTypes p,
     CheckCombinableNote x y (NoteFor ('Text "&"))) =>
    Props (MetaTypes x) -> p -> Props (MetaTypes (Combine x y))
    & Desc
    -> BorgRepo
    -> Times
    -> [Desc]
    -> [KeepPolicy]
    -> Property DebianLike
    Borg.backup Desc
    "/" (Desc -> [BorgRepoOpt] -> BorgRepo
    rsyncNetBorgRepo Desc
    "pell.borg" []) Times
    Cron.Daily
    		[ Desc
    "--exclude=/proc/*"
    	 	, Desc
    "--exclude=/sys/*"
    	 	, Desc
    "--exclude=/run/*"
    	 	, Desc
    "--exclude=/tmp/*"
    	 	, Desc
    "--exclude=/var/tmp/*"
    	 	, Desc
    "--exclude=/var/backups/ikiwiki-hosting-web/*"
    	 	, Desc
    "--exclude=/var/cache/*"
    	 	, Desc
    "--exclude=/home/*/source/*"
    	 	, Desc
    "--exclude=/home/*/source.git/*"
    	 	, Desc
    "--exclude=/home/*/public_html/*"
    	 	, Desc
    "--exclude=/home/*/.git/*"
    	 	]
    	 	[ Int -> KeepPolicy
    Borg.KeepDays Int
    7
    	 	, Int -> KeepPolicy
    Borg.KeepWeeks Int
    5
    	 	, Int -> KeepPolicy
    Borg.KeepMonths Int
    3
    	 	, Int -> KeepPolicy
    Borg.KeepYears Int
    1
    	 	]
    	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 'OSArchLinux, 'Targeting 'OSFreeBSD])
                                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                 '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                              '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                           '[ 'Targeting '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]))
    -> 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 'OSArchLinux, 'Targeting 'OSFreeBSD]
                                                      '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                                                         'Targeting 'OSArchLinux,
                                                         'Targeting 'OSFreeBSD])
                                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                    '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                 '[ 'Targeting '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])
               '[ '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 -> [(SshKeyType, Desc)] -> Property (HasInfo + UnixLike)
    forall c.
    IsContext c =>
    User -> c -> [(SshKeyType, Desc)] -> Property (HasInfo + UnixLike)
    Ssh.userKeys (Desc -> User
    User Desc
    "root") (Desc -> Context
    Context Desc
    "branchable.com")
    		[ (SshKeyType
    SshEd25519, Desc
    "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIC20PCLAgkD6tK0vYsl0Pdpho+y7fNay8Fo8SXWrZojs root@pell")
    		]
    	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 'OSArchLinux, 'Targeting 'OSFreeBSD])
                                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                    '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                 '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                              '[ 'Targeting '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])
            '[ '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
                                                         '[ '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 'OSDebian, 'Targeting 'OSBuntish])
                                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                       '[ 'WithInfo, '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])
                  '[ '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))
    & [Host] -> Desc -> User -> Property UnixLike
    Ssh.knownHost [Host]
    hosts Desc
    "usw-s002.rsync.net" (Desc -> User
    User Desc
    "root")

    	Props
      (Sing
         (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 'OSArchLinux,
                                                         'Targeting 'OSFreeBSD])
                                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                          '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                       '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                    '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                 '[ 'Targeting '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])
               '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
                  'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD])
            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish,
               'Targeting 'OSArchLinux, 'Targeting 'OSFreeBSD]))
    -> Property
         (MetaTypes
            '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
    -> Props
         (MetaTypes
            (Combine
               (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 'OSArchLinux,
                                                               'Targeting 'OSFreeBSD])
                                                         '[ 'Targeting 'OSDebian,
                                                            'Targeting 'OSBuntish])
                                                      '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                          '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                                       '[ 'Targeting '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])
                     '[ 'WithInfo, '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))
    & Desc
    -> Property
         (MetaTypes
            '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
    adminuser Desc
    "joey"
      where
    	adminuser :: Desc
    -> Property
         (MetaTypes
            (Combine
               (Combine
                  (Combine
                     (Combine
                        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                     '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                  '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
    adminuser Desc
    u = Desc
    -> Props
         (MetaTypes
            (Combine
               (Combine
                  (Combine
                     (Combine
                        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                     '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                  '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
    -> Property
         (MetaTypes
            (Combine
               (Combine
                  (Combine
                     (Combine
                        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                     '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                  '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
    forall {k} (metatypes :: k).
    SingI metatypes =>
    Desc
    -> Props (MetaTypes metatypes) -> Property (MetaTypes metatypes)
    propertyList (Desc
    "admin user " Desc -> Desc -> Desc
    forall a. [a] -> [a] -> [a]
    ++ Desc
    u) (Props
       (MetaTypes
          (Combine
             (Combine
                (Combine
                   (Combine
                      '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                      '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
             '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
     -> Property
          (MetaTypes
             (Combine
                (Combine
                   (Combine
                      (Combine
                         '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                         '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                      '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                   '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])))
    -> Props
         (MetaTypes
            (Combine
               (Combine
                  (Combine
                     (Combine
                        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                     '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                  '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
    -> Property
         (MetaTypes
            (Combine
               (Combine
                  (Combine
                     (Combine
                        '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                        '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                     '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
                  '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
               '[ '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 -> Property DebianLike
    User.accountFor (Desc -> User
    User Desc
    u)
    		Props DebianLike
    -> Property
         (MetaTypes
            '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
    -> 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))
    & User -> Property (HasInfo + DebianLike)
    User.hasSomePassword (Desc -> User
    User Desc
    u)
    		Props
      (Sing
         (Combine
            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
            '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
    -> RevertableProperty DebianLike DebianLike
    -> Props
         (Sing
            (Combine
               (Combine
                  '[ '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))
    & User -> RevertableProperty DebianLike DebianLike
    Sudo.enabledFor (Desc -> User
    User Desc
    u)
    		Props
      (Sing
         (Combine
            (Combine
               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
               '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
    -> Property DebianLike
    -> Props
         (Sing
            (Combine
               (Combine
                  (Combine
                     '[ '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))
    & User -> Group -> Property DebianLike
    User.hasGroup (Desc -> User
    User Desc
    u) (Desc -> Group
    Group Desc
    "adm")
    		Props
      (Sing
         (Combine
            (Combine
               (Combine
                  '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]
                  '[ 'WithInfo, 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
               '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish])
            '[ 'Targeting 'OSDebian, 'Targeting 'OSBuntish]))
    -> Property DebianLike
    -> Props
         (MetaTypes
            (Combine
               (Combine
                  (Combine
                     (Combine
                        '[ '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))
    & User -> Group -> Property DebianLike
    User.hasGroup (Desc -> User
    User Desc
    u) (Desc -> Group
    Group Desc
    "systemd-journal")