The Production block never set one. inventory provision writes only
ansible_connection for a local host, so DOMAIN_PRIMARY stayed at the
group_vars default of infinito.localhost and the deployment served a zone its
own resolver knows nothing about. CoreDNS templates answers for
INFINITO_DOMAIN_RE and nothing else, so every lookup of the deployment's own
name came back NXDOMAIN.
Mastodon is where that surfaced. tootctl accounts create validates the address
through EmailMxValidator, which resolves MX and then, for the domain itself,
A and AAAA. All six queries returned NXDOMAIN in run 33574056480, the
validator recorded email :unreachable, and the admin account was never created.
Only the guide rows were affected: the matrix rows write
DOMAIN_PRIMARY: "{{ lookup('env', 'INFINITO_DOMAIN') }}" into their host_vars
and resolve fine.
The template now carries DOMAIN=<your-domain> in both the host and the
container form and threads it into --vars, with the container form passing it
through the docker run boundary as well. The two guide runners substitute it
the way they already substitute the SSH key, so the replay deploys under
INFINITO_DOMAIN like every other CI deploy. compose_deploy.sh moves its env
load ahead of the substitutions to have the value; host_deploy.sh had no env
load at all.
A production reader is asked for a domain now instead of silently inheriting
infinito.localhost, which no real deployment wants either. The shipped default
keeps its value: sys-svc-nss documents that *.localhost resolves through the
myhostname NSS module without any zone, and host-side tasks lean on it.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
4.8 KiB
Hunspell
Description
Installs Hunspell and configured language packs on Pacman-based systems for spell checking in multiple languages.
Overview
This README accompanies the Hunspell Playbook, located within the infinito repository. The playbook is focused on installing Hunspell, a widely-used spell checker, along with various language packages to enhance its functionality.
Cosmos
The diagram places Hunspell in the Infinito.Nexus cosmos: the components it deploys (capabilities), the central services it consumes (dependencies), and its outward reach (federation and bridged external networks).
flowchart LR
subgraph role [gen-hunspell 💻]
svc_hunspell["hunspell"]
end
subgraph dependents [Dependents]
dpt_desk_libreoffice["desk-libreoffice 💻 ⚙️"]
end
svc_hunspell -- "1:1" --> dpt_desk_libreoffice
Solid 1:1 edges are fixed relationships; dashed 0..1 edges are conditional (enabled only in matching deployments); red 0..0 edges are turned off in this role. Node markers show the role's deploy modes (💻 host, 🐳 compose, 🐝 swarm); ❌ marks a service that is explicitly turned off, and ⚙️ an Ansible role dependency declared in meta/main.yml.
Features
- Automated provisioning: Configured by Ansible without manual steps.
Quick Setup
Development
Clone, set up the workstation, and deploy Hunspell onto the local stack:
git clone https://github.com/infinito-nexus/core.git
cd core
make onboard
make compose-deploy mode=reinstall apps=gen-hunspell full_cycle=false
Production
Install Hunspell directly onto the target machine: clone the repository, install the OS prerequisites and the repository toolchain, then deploy against localhost over a local connection (no SSH, no container):
git clone https://github.com/infinito-nexus/core.git
cd core
bash scripts/install/package.sh
make install
source scripts/meta/env/load.sh
APP=gen-hunspell
DOMAIN=<your-domain>
TLS_MODE=self_signed
SSH_PUBLIC_KEY="<your-ssh-public-key>"
INVENTORY=inventories/production
infinito administration inventory provision "$INVENTORY" \
--inventory-file "$INVENTORY/devices.yml" \
--host localhost \
--include "$APP" \
--vars "{\"TLS_MODE\": \"$TLS_MODE\", \"DOMAIN_PRIMARY\": \"$DOMAIN\", \"users\": {\"administrator\": {\"authorized_keys\": [\"$SSH_PUBLIC_KEY\"]}}}"
infinito administration deploy dedicated "$INVENTORY/devices.yml" \
--password-file "$INVENTORY/.password" \
--diff -vv
Playbook Contents
The main.yml file in the hunspell role includes two primary tasks:
-
Install Hunspell: Utilizes the
community.general.pacmanmodule to ensure that thehunspellpackage is installed on the system. -
Install Hunspell Language Packages: Again using the
community.general.pacmanmodule, this task installs multiple Hunspell language packages. The specific languages to be installed are determined by the{{hunspell_languages}}variable, which should be defined as a list of language codes.
Purpose and Usage
This playbook is tailored for users who need a powerful and flexible spell-checking tool on their systems. Hunspell is particularly popular among writers, editors, and developers who work with text in various languages. By automating the installation of Hunspell and its language-specific packages, this playbook simplifies the setup process, allowing users to quickly get up and running with an advanced spell-checking tool.
Prerequisites
- Ansible: This playbook requires Ansible to be installed on your system.
- Arch Linux or Similar: Given the use of the
pacmanpackage manager, this playbook is designed for systems based on Arch Linux or similar distributions.
How to Run the Playbook
To utilize this playbook:
- Ensure you have cloned the
infinitorepository. - Navigate to the
roles/hunspelldirectory within the repository. - Execute the playbook using Ansible, ensuring you provide a list of language codes to the
{{hunspell_languages}}variable.
Customization
Users are encouraged to customize the {{hunspell_languages}} variable based on their specific language requirements. This variable accepts a list of language codes (e.g., 'en_US', 'de_DE').
Support and Contributions
For any support requests, suggestions, or contributions, please open an issue or a pull request in the infinito repository. Contributions, especially those that enhance the playbook's functionality or extend its language support, are highly welcomed.
Credits
Implemented by Kevin Veen-Birkenbach. Part of the Infinito.Nexus Project and maintained by Kevin Veen-Birkenbach. Licensed under the Infinito.Nexus Community License (Non-Commercial).