# To use the serial console in iRMC, set up grub as follows:
# GRUB_TIMEOUT=30
# GRUB_CMDLINE_LINUX_DEFAULT="console=ttyS0,115200 console=tty0"
# GRUB_TERMINAL=serial
# GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1"

nodes['rx300'] = {
    'hostname': '31.47.232.106',
    'bundles': {
        'check-mail-received',
        'dovecot',
        'element-web',
        'gitea',
        'ipmitool',
        'jenkins-ci',
        'lm-sensors',
        'matrix-dimension',
        'matrix-media-repo',
        'matrix-synapse',
        'mautrix-telegram',
        'mautrix-whatsapp',
        'miniflux',
        'mx-puppet-discord',
        'netbox',
        'nodejs',
        'oidentd',
        'php',
        'postfixadmin',
        'postgresql',
        'radicale',
        'redis',
        'rspamd',
        'smartd',
        'travelynx',
        'unbound',
        'vmhost',
        'zfs',
    },
    'groups': {
        'debian-bullseye',
        'webserver',
    },
    'metadata': {
        'interfaces': {
            'br0': {
                'ips': {
                    '31.47.232.106/29',
                    '2a00:f820:528::2/64',
                },
                'gateway4': '31.47.232.105',
                'gateway6': '2a00:f820:528::1',
            },
        },
        'apt': {
            'packages': {
                # for franzi.business deployment
                'ruby': {},
                'ruby-dev': {},
                'ruby-bundler': {},

                # for `bw test` on jenkins
                'bind9utils': {},

                # used by user:kunsi
                'mosh': {},
                'weechat': {},
                'weechat-core': {},
                'weechat-curses': {},
                'weechat-perl': {},
                'weechat-plugins': {},
                'weechat-python': {},
                'weechat-ruby': {},

                # for weechat scripts
                'libpod-parser-perl': {},
            },
            'repos': {
                'weechat': {
                    'items': {
                        'deb https://weechat.org/debian {os_release} main',
                    },
                },
            },
        },
        'backup-client': {
            'pre-hooks': {
                'kunsi-weechat': \
                    'echo \'core.weechat */layout store\' >> /home/kunsi/.weechat/weechat_fifo\n' \
                    'echo \'core.weechat */save\' >> /home/kunsi/.weechat/weechat_fifo\n',
            },
        },
        'backups': {
            'paths': {
                '/home/kunsi/.weechat',
            },
        },
        'check-mail-received': {
            't-online': {
                'email': 'franzi.kunsmann@t-online.de',
                'imap_host': 'secureimap.t-online.de',
                'imap_pass': bwpass.attr('t-online.de/franzi.kunsmann@t-online.de', 'imap'),
            },
        },
        'element-web': {
            'url': 'chat.franzi.business',
            'version': 'v1.10.4',
            'config': {
                'default_server_config': {
                    'm.homeserver': {
                        'base_url': 'https://matrix.franzi.business',
                        'server_name': 'franzi.business',
                    },
                },
                'brand': 'franzi.business',
                'showLabsSettings': True,
                'integrations_ui_url': 'https://dimension.franzi.business/riot',
                'integrations_rest_url': 'https://dimension.franzi.business/api/v1/scalar',
                'integrations_widgets_urls': {
                    'https://dimension.franzi.business/widgets'
                },
                'default_theme': 'dark',
                'defaultCountryCode': 'DE',
                'jitsi': {
                    'preferredDomain': 'meet.ffmuc.net',
                },
            },
        },
        'gitea': {
            'version': '1.16.1',
            'sha1': '48db189d3000328865c5656884b4202f70d9a514',
            'domain': 'git.franzi.business',
            'email_domain_blocklist': {
                'gmail.com',
                'yahoo.com',
                'aol.com',
                'comcast.net',
                'verizon.net',
                'hotmail.com',
                'cox.net',
                'msn.com',
            },
            'enable_git_hooks': True,
            'install_ssh_key': True,
            'internal_token': vault.decrypt('encrypt$gAAAAABfPncYwCX-NdBr9LdxLyGqmjRJqhmwMnWsdZy6kVOWdKrScW78xaqbJ1tpL1J4qa2hcZ7TQj3l-2mkyJNJOenGzU3TsI-gYMj9vC4m8Bhur5zboxjD4dQXaJbD1WSyHJ9sPJYsWP3Gjg6I19xeq9xMlAI6xaS9vOfuoI8nZnnQPx1NjfQEj03Jxf8a0-3F20sfICst1xRa5K48bpq1PFkK_oRojg=='),
            'lfs_secret_key': vault.decrypt('encrypt$gAAAAABfPnd1vgNDt86-91YhviQw8Z0djSp4f_tBt76klDv-ZcwxP1ryJzqJ7qnfaTe_6DYCfc82gEzvVDsyBlCoAkGpt1AI2_LCKetuSCnDPjtGvwdQl3A53lFEdG2UJl1uUiR7f8Vr'),
            'oauth_secret_key': vault.decrypt('encrypt$gAAAAABfPnbfTISbldhS0WyxVKBHVVoOMcar7Kxmh1kkmiUGd-RzbbnNzzhEER_owjttPQcACPfGKZ6WklaSsXjLq8km4P6A9QmPbC06GmHbc91m0odCb1KiY7SZeUD35PiRiGSq50dz'),
            'security_secret_key': vault.decrypt('encrypt$gAAAAABfPnc-R7pkDj4pQgHDb6pzlNYNJgiWdeBFsX7IsHSnCtNPbZxCdtSL8cHtQzVO1KbSxS7zCwssmgiR8Kj54Z-koD-FQbjpbKWoIPw8SsyeqBVlZhIeEzhw_1t7_7ZTvv1O8AePdNYel9JJb_TaAZ8Vx46ZfsEPy8zaaHrqOekHC6RAnB4='),
        },
        'icinga_options': {
            'pretty_name': 'franzi.business',
        },
        'jenkins-ci': {
            'install_ssh_key': True,
            'domain': 'jenkins.franzi.business',
        },
        'letsencrypt': {
            'concat_and_deploy': {
                'kunsi-weechat': {
                    'match_domain': 'rx300.kunbox.net',
                    'target': '/home/kunsi/.weechat/ssl/relay.pem',
                    'chown': 'kunsi:kunsi',
                    'chmod': '0440',
                    'commands': [
                        'echo \'core.weechat */relay sslcertkey\' >> /home/kunsi/.weechat/weechat_fifo'
                    ],
                },
            },
            'domains': {
                'rx300.kunbox.net': set(),
            },
        },
        'matrix-media-repo': {
            'version': 'v1.2.10',
            'homeservers': {
                'franzi.business': {
                    'domain': 'http://[::1]:20080/',
                    'api': 'synapse',
                },
            },
            'admins': {
                '@kunsi:franzi.business',
            },
            'upload_max_mb': 500,
        },
        'matrix-dimension': {
            'url': 'dimension.franzi.business',
            'version': 'c6d047c', # XXX master is broken as of 2021-11-27
            'homeserver': {
                'name': 'franzi.business',
                'clientServerUrl': 'https://matrix.franzi.business',
                'accessToken': vault.decrypt('encrypt$gAAAAABg-wBmGbAy-Ou1mkG2w5UyoqWmWYzDr4ZavyUQdmG_VtrUSmwHjx-qcBGIz_7NniD3zKm9GGvzRZItDu5zYiojcudYr74TkWJKhdDrgFbcWlfJJ_m3bWzrSORaTYzBGRckp2Vz_8xHgDk1W03vpT6mdIPMDzjuINssIcPs0YDth25W942tMfPA2csvLADY50qVRMJpdBOVIWba55o0g6-mAAQLOz6Ld4cCvYqZsqXsxjT8JUytJv_uSG4zgCS_aX20JlAyJWpJgT8FQF5HzIbsko_-Z9-TwtY7yllJp5Ri3n0WaDaWoMmUfhLvkMJeymmOc32A4WJBAePQ_2F-_oUDE7t97A-m3ZiMVAEefDnH5MkoiQEJTfHrJsXRkdBT_BnJlY1CoAuXpRYDdvbVDwN_qZHHHtqsno437l9S6GgDK_-sKBiojYkYsfHcJCdSEqeFGuxT'),
            },
            'admins': [
                '@kunsi:franzi.business',
            ],
            'telegram': {
                # same as for mautrix-telegram
                'botToken': vault.decrypt('encrypt$gAAAAABfVK51ErJ6gfsOOkbRxSHDnVYmf7EihAQf7Uwj9og3TlAw64WRsA6ZVEgTSvOdLB3SMKZ-cTEhwkCOpbymq-_WLhes-hZALhN-H_oXHaxTQErJ0lARynKmjM-4ZhoGlUWlfh4Q'),
            },
        },
        'matrix-synapse': {
            'server_name': 'franzi.business',
            'baseurl': 'matrix.franzi.business',
            'admin_contact': 'mailto:hostmaster@kunbox.net',
            'trusted_key_servers': {
                'matrix.org',
                'finallycoffee.eu',
                'nyantec.com',
            },
            'additional_client_config': {
                'im.vector.riot.jitsi': {
                    'preferredDomain': 'meet.ffmuc.net',
                },
            },
            'wellknown_also_on_vhosts': {
                'franzi.business',
            },
        },
        'mautrix-telegram': {
            'version': 'v0.11.2',
            'homeserver': {
                'domain': 'franzi.business',
                'url': 'https://matrix.franzi.business',
            },
            'provisioning': {
                'enabled': True,
                'shared_secret': vault.decrypt('encrypt$gAAAAABfVKflEMAi07C_QGP8cy97hF-4gGPym0oF6p4WSMdAveTpx-hFsZd2s7v9ubw99yIsyKx0dHOJI0UND7hV1rKZdvjy4Qa642abZ2wwW7SWTqvuP_qVtrf6-klc2QKTzeD9c_LVsyZ2dqz_JxRPq3MRXgkubZuWOZ6FmFlAlteTffoGfWE='),
            },
            'permissions': {
                "'*'": 'relaybot',
                'nyantec.com': 'full',
                'franzi.business': 'full',
                "'@kunsi:franzi.business'": 'admin',
            },
            'telegram': {
                'api_id': vault.decrypt('encrypt$gAAAAABfVK5SmDDru-UQxitkE5VhPArnUBhaRbAqQPvAW2Fh3fd1XDrWxa3Qn4BSnJAPNWglH5wil_SXUMcIm95FMhPe8dVeMQ=='),
                'api_token': vault.decrypt('encrypt$gAAAAABfVK5jHuUly1xr9Iku362k7oF4ZYRhLGzNJh3aJpiNrLfAy_DJpTwucx4FV_g45dyQF5boqG2rgdDfwsJN_Ab95es6T4SPGiXIxJOBlvIln1Torwh16pXKchhUTn_PQ077Ll1W'),
                # same as for matrix-dimension
                'bot_token': vault.decrypt('encrypt$gAAAAABfVK51ErJ6gfsOOkbRxSHDnVYmf7EihAQf7Uwj9og3TlAw64WRsA6ZVEgTSvOdLB3SMKZ-cTEhwkCOpbymq-_WLhes-hZALhN-H_oXHaxTQErJ0lARynKmjM-4ZhoGlUWlfh4Q'),
            },
        },
        'mautrix-whatsapp': {
            'version': 'v0.2.3',
            'sha1': '87df156beb00a2ad724f56ec9d0b626b60527fcc',
            'homeserver': {
                'domain': 'franzi.business',
                'url': 'https://matrix.franzi.business',
            },
            'permissions': {
                "'@kunsi:franzi.business'": 100,
            },
        },
        'miniflux': {
            'domain': 'rss.franzi.business',
        },
        'mx-puppet-discord': {
            'homeserver': {
                'domain': 'franzi.business',
                'url': 'https://matrix.franzi.business',
            },
            'allowed-users': {
                '@.*:franzi\\\\.business',
            },
        },
        'netbox': {
            'domain': 'netbox.franzi.business',
            'version': 'v3.1.7',
            'changelog_retention_days': 360,
            'admins': {
                'kunsi': 'hostmaster@kunbox.net',
            },
        },
        'nftables': {
            'rules': {
                '50-kunsi-weechat': [
                    'inet filter input udp dport { 60000-61000 } accept',
                    'inet filter input tcp dport 9001 accept',
                ],
            },
        },
        'nginx': {
            'security.txt': {
                'contact': 'mailto:security@kunsmann.eu',
                'Encryption': 'https://franzi.business/gpg_hi-kunsmann.eu.asc',
            },
            'vhosts': {
                'element-web': {'ssl': '_.franzi.business'},
                'gitea': {'ssl': '_.franzi.business'},
                'jenkins-ci': {'ssl': '_.franzi.business'},
                'matrix-dimension': {'ssl': '_.franzi.business'},
                'matrix-synapse': {'ssl': '_.franzi.business'},
                'miniflux': {'ssl': '_.franzi.business'},
                'netbox': {'ssl': '_.franzi.business'},
                'radicale': {'ssl': '_.franzi.business'},
                'travelynx': {'ssl': '_.franzi.business'},
                'daskritzelt-redirect': {
                    'domain': 'die-brontosaurier-waren-es.org',
                    'ssl': None,
                    'locations': {
                        '/': {
                            'redirect': 'https://twitter.com/daskritzelt/status/1259167444373028864',
                            'mode': 302,
                        },
                    },
                },
                'franzi.business': {
                    'webroot': '/var/www/franzi.business/_site/',
                    'ssl': '_.franzi.business',
                    'extras': True,
                },
                'kunbox.net': {},
                'kunsmann.eu': {
                    'locations': {
                        '/': {
                            'redirect': 'https://franzi.business$request_uri',
                        },
                        '/.well-known/openpgpkey': {
                            'alias': '/var/www/kunsmann.eu/.well-known/openpgpkey/',
                            'additional_config': {
                                'default_type application/octet-stream',
                                'add_header Access-Control-Allow-Origin *',
                            },
                        },
                    },
                },
                'mta-sts': {
                    'domain': 'mta-sts.kunbox.net',
                    'domain_aliases': {
                        'mta-sts.franzi.business',
                        'mta-sts.kunsmann.eu',
                        'mta-sts.trans-agenda.eu',
                    },
                },
                'paste.franzi.business': {
                    'ssl': '_.franzi.business',
                    'extras': True,
                    'webroot_config': {
                        'owner': 'kunsi',
                    },
                },
                'postfixadmin': {
                    'domain': 'postfixadmin.franzi.business',
                    'ssl': '_.franzi.business',
                    'webroot': '/opt/postfixadmin/public/',
                    'php': True,
                    'locations': {
                        '/rspamd/': {
                            'target': 'http://localhost:11334/',
                            'websockets': True,
                        },
                    }
                },
                'unicornsden-redirect': {
                    'domain': 'unicornsden.franzi.business',
                    'ssl': '_.franzi.business',
                    'locations': {
                        '/': {
                            'redirect': 'https://map.unicornsden.com/',
                        },
                    },
                },
                'unicornsden': {
                    'domain': 'map.unicornsden.com',
                    'php': True,
                    'webroot_config': {
                        'owner': 'jenkins',
                        'group': 'jenkins',
                        'mode': '0755',
                    },
                },
                'wiki.franzi.business': {
                    'ssl': '_.franzi.business',
                    'extras': True,
                    'php': True,
                    'webroot_config': {
                        'owner': 'www-data',
                        'group': 'www-data',
                    },
                    'website_check_path': '/start?do=login',
                    'website_check_string': 'Username',
                },

                # legacy domains
                'git.kunsmann.eu': {
                    'locations': {
                        '/': {
                            'redirect': 'https://git.franzi.business$request_uri',
                        },
                    },
                },
                'paste.kunsmann.eu': {
                    'locations': {
                        '/': {
                            'redirect': 'https://paste.franzi.business$request_uri',
                        },
                    },
                },
            },
            'worker_processes': 8,
        },
        'oidentd': {
            'allows': {
                'kunsi': {
                    'spoof',
                    'spoof_all',
                },
            },
        },
        'php': {
            'version': '8.0',
            'packages': {
                'gd',
                'imagick',
                'imap',
                'intl',
                'mbstring',
                'opcache',
                'pgsql',
                'readline',
                'xml',
                'yaml',
            },
        },
        'postfix': {
            'message_size_limit_mb': 50,
            'mynetworks': {
                'gce',
                'ovh',
            },
        },
        'postfixadmin': {
            'version': '3.3.10',
            'setup_password': vault.decrypt('encrypt$gAAAAABgnNGpAqUs--qBXII9ZPcHtxaELy9e2Dx9O44n4l0O4nMHPoIyaPW5HkvpQ2zWTlh5OfjjOgunRtE_voJuY0Kdtji37ixAnuL9ErOJ0LDY5QfMkNPUgPs5alwz1baqYq6rqJ7NDmB0gHraY46v5eG79R2EyQ=='),
        },
        'postgresql': {
            'version': '13',
        },
        'radicale': {
            'domain': 'radicale.franzi.business',
            'users': {
                'kunsi': bwpass.password('radicale.franzi.business/kunsi'),
            },
        },
        'rspamd': {
            'ignore_spam_check_for_ips': {
                # entropia
                ## hetzner (legacy)
                '188.40.158.213',
                '188.40.158.214',
                '188.40.158.218',
                '2a01:4f8:221:2f83:2130::2',
                '2a01:4f8:221:2f83:2140::2',
                '2a01:4f8:221:2f83:2180::2',
                # yolocolo
                '45.140.180.32/27', # Entropia e. V.
                '45.140.180.112/28', # MicroPOC
                '2a0e:c5c0:0:201::/64', # Entropia e. V.
                '2a0e:c5c0:0:307::/64', # MicroPOC

                # ccc
                '212.12.55.65',
                '212.12.55.67',
                '2a00:14b0:4200:3000:23:55:0:65',

                # IN-Berlin mailman
                '130.133.8.35',
                '192.109.42.28',
                '192.109.42.122',
                '193.29.188.9',
                '217.197.80.23',
                '217.197.80.134',
                '2001:bf0:c000:a::2:134',

                # c3voc
                '185.106.84.32/26',
                '2001:67c:20a0:e::/64',
            },
            'password': bwpass.password('bw/rx300/rspamd'),
            'dkim': 'uO4aNejDvVdw8BKne3KJIqAvCQMJ0416',
        },
        'smartd': {
            'disks': {
                '/dev/nvme0',
            },
        },
        'systemd': {
            'journal': {
                'maxuse': '4G',
            },
        },
        'systemd-networkd': {
            'bridges': {
                'br0': {
                    'match': {
                        'eno1',
                    },
                },
            },
        },
        'systemd-timers': {
            'timers': {
                'cleanup-paste.franzi.business': {
                    'command': '/usr/bin/find /var/www/paste.franzi.business/ -maxdepth 1 -type d -mtime +60 -exec rm -r {} \;',
                    'user': 'kunsi',
                    'when': 'daily',
                },
            },
        },
        'travelynx': {
            'version': '1.21.4',
            'mail_from': 'travelynx@franzi.business',
            'domain': 'travelynx.franzi.business',
        },
        'unbound': {
            'threads': 8,
            'cache_slabs': 8,
        },
        'users': {
            'kunsi': {
                'enable_linger': True,
            },
        },
        'zfs': {
            'module_options': {
                'zfs_arc_max_gb': 16,
            },
            'pools': {
                'tank': {
                    'when_creating': {
                        'config': [{
                            'type': 'raidz',
                            'devices': {
                                '/dev/sda',
                                '/dev/sdb',
                                '/dev/sdc',
                                '/dev/sdd',
                            },
                        }],
                        'ashift': 12,
                    },
                },
            },
            'datasets': {
                'tank/libvirt': {
                    'mountpoint': '/var/lib/libvirt',
                    'compression': 'on',
                    'needed_by': {
                        'bundle:vmhost',
                    },
                },
                'tank/home-kunsi': {
                    'mountpoint': '/home/kunsi',
                    'needed_by': {
                        'directory:/home/kunsi',
                    },
                },
            },
        },
        'vm': {
            'cpu': 32,
            'ram': 256,
        },
    },
}
