{ "$schema": "http://json-schema.org/draft-07/schema", "type": "object", "properties": { "requires": { "type": "array", "items": { "type": "string", "pattern": "^([a-zA-Z0-9.-_]+\\/)+", "description": "Path to other configs, relative to this file (e.g. config/pkgs.yaml will expand to dirname(this_file)/config/pkgs.yaml)" }, "description": "Imports for other config files that will be merged into this one. Precedence order is bottom up (i.e. lowest has highest precedence)" }, "pkgs": { "type": "object", "description": "The packages to be installed", "properties": { "individual": { "type:": "array", "description": "the packages to be installed, by their package name", "items": { "type": "string", "pattern": "^[a-z0-9-._]+(?=[a-z0-9]$)" } }, "repos": { "type": "object", "properties": { "enabled_repos": { "type": "array", "items": { "type": "object", "additionalProperties": false, "description": "The repos to set up", "properties": { "name": { "type": "string", "description": "The repositories to set up", "pattern": "^(core|extra|core-testing|extra-testing|multilib|multilib-testing|[a-z0-9-]+(?=[a-z0-9]$))" }, "setup_cmds": { "type": "array", "description": "The commands to run to set it up (optional if any of the explicitly supported ones)", "items": { "type": "string", "description": "Command to run" } }, "mirrors": { "type": "object", "description": "Configure the mirrors to use", "properties": { "use_default": { "type": "boolean", "description": "Whether to use the default mirrors or not", "default": true }, "extra_mirrors": { "type": "array", "description": "Any extra mirrors you want to add. At least one mirror needs to be put here if use_default is false. Order matters", "items": { "type": "string" } } } } } } }, "reflector": { "type": "object", "description": "Use reflector to update the mirrors", "properties": { "enabled": { "type": "boolean", "default": false }, "interval": { "type": "number", "description": "The number of days to elapse between reflector reruns" }, "countries": { "type": "array", "description": "The countries in which the should be located (only applies for the main arch repos)", "items": { "type": "string", "pattern": "^[A-Z][a-z]*[a-z]$" }, "maxItems": 5, "minItems": 1 }, "count": { "type": "number", "description": "The number of mirrors to add to the list", "maximum": 20, "minimum": 3 } }, "required": [ "enabled" ], "additionalProperties": false }, "additionalProperties": false } }, "bundles": { "type": "array", "description": "Bundled packages, installing all the recommended extra software for them (such as hyprland and nvim)", "maxItems": 1, "items": { "type": "object", "properties": { "name": { "type": "string", "description": "The bundle name", "pattern": "^[a-z0-9-._]+(?=[a-z0-9]$)" }, "ignored_pkgs": { "type": "array", "description": "List of packages from the bundle that should not be installed", "items": { "type": "string", "pattern": "^[a-z0-9-._]+(?=[a-z0-9]$)" } } }, "additionalProperties": false, "required": [ "name" ] } } }, "additionalProperties": false }, "users": { "type": "array", "description": "Users to add, including groups. Users will be diffed and removed if they are removed from here. No files are deleted", "items": { "type": "object", "properties": { "username": { "type": "string", "pattern": "^[a-zA-Z0-9\\-._]{2,19}(?=[a-zA-Z0-9]$)" }, "groups": { "type": "array", "description": "The groups to add the user to. Groups are created if they don't exist. User's own group doesn't have to be listed explicitly", "items": { "type": "string", "pattern": "^[a-zA-Z0-9\\-._]{2,19}(?=[a-zA-Z0-9]$)" } }, "sudo_user": { "type": "boolean", "default": false, "description": "Whether a user can use sudo or not. Same as appending them to the `wheel` group" }, "home_dir": { "type": "boolean", "description": "Whether to create a home directory for the user or not", "default": false } }, "required": [ "username" ], "additionalProperties": false } }, "boot": { "type": "object", "description": "Settings for the bootloader, such as theme, using os-prober, etc", "properties": { "bootloader": { "type": "string", "description": "The bootloader to use (more coming eventually)", "pattern": "^(grub)" }, "esp_dir": { "type": "string", "description": "The directory for the bootloader files. Has to end in slash", "pattern": "^(^(~|\\.|\\.\\.)?\\/)?([\\w\\/.-]+(?!.*[^\\w\\/.-]+))\\/$" }, "theme": { "type": "object", "description": "Configuration for the bootloader theme", "properties": { "folder": { "type": "string", "description": "Where the folder for the theme is found. Can be relative to the config repo or file system and has to end in slash", "pattern": "^(^(~|\\.|\\.\\.)?\\/)?([\\w\\/.-]+(?!.*[^\\w\\/.-]+))\\/$" } }, "additionalProperties": false, "required": [ "folder" ] }, "os_prober": { "type": "boolean", "description": "Whether to enable OS prober to search for other operating systems" } }, "additionalProperties": false, "required": [ "bootloader", "esp_dir" ] }, "themes": { "type": "object", "properties": {} }, "git": { "type": "object", "description": "Automatically set up credential manager and clone repos", "properties": { "creds": { "type": "object", "description": "Which git services to log into", "properties": { "manager": { "type": "string", "description": "The git credential manager to use. Set to none if you don't want one (default)", "pattern": "^(git-credential-manager|none)", "default": "none" } }, "additionalProperties": false }, "repos": { "type": "array", "description": "Which repos to clone (removing one from here doesn't delete it from the system and only pulls if folder does not exist)", "items": { "type": "object", "properties": { "url": { "type": "string", "description": "git clone URL (ssh or HTTP(S))", "pattern": "^((https?):\\/\\/(([a-z0-9-]+)((?=\\.))\\.)+[a-z]+(?=\\/)\\/([\\w\\-?.=]+(?=\\/[\\w\\-?.=])\\/)*([\\w\\-?&.=\\/]+(?=[\\w\\-.=\\/]$)))|([a-zA-Z0-9\\-._]+(?=[a-zA-Z0-9])[a-zA-Z0-9])@(([a-z0-9\\-]+(?=\\.))\\.)+[a-z]+(?=:):([a-zA-Z0-9\\-._]+(?=\\/)\\/)+([a-zA-Z0-9\\-._]+(?=[a-zA-Z0-9]$))" }, "clone_path": { "type": "string", "description": "The location on the local system where to put it. Must be absolute path. Parent folders will be created if they don't exist", "pattern": "^(^(~|\\.|\\.\\.)?\\/)?([\\w\\/.-]+(?!.*[^\\w\\/.-]+))\\/$" } }, "additionalProperties": false, "required": [ "url", "clone_path" ] } }, "additionalProperties": false } }, "template_data": { "type": "array", "description": "The data to be inserted into the templates", "items": { "type": "object", "properties": { "name": { "type": "string", "description": "The name that appears in the template" }, "data": { "type": "string", "description": "The data that is to be inserted" } }, "required": [ "name", "data" ], "additionalProperties": false } }, "cmds": { "type": "object", "properties": { "once": { "type": "array", "description": "Commands to run on only once (uses the name property to determine if it needs to run)", "items": { "type": "object", "properties": { "name": { "type": "string", "description": "This name is used to track if a command was run before." }, "cmd": { "type": "string" }, "hook": { "type": "string", "description": "Where in the execution of archmgr to run", "default": "end", "pattern": "^(pre-pkg|post-pkg|pre-git|post-git|end)" }, "user": { "type": "string", "default": "root", "pattern": "^[a-zA-Z0-9\\-._]{2,19}(?=[a-zA-Z0-9]$)", "description": "The user to run as. Be aware that only the current user's password is available, unless capture_output is set to false" }, "capture_output": { "type": "boolean", "default": true, "description": "Whether or not to hide the output from the user" } }, "additionalProperties": false, "required": [ "name", "cmd" ] } }, "always": { "type": "array", "description": "Commands to run on each apply", "items": { "type": "object", "properties": { "name": { "type": "string", "description": "Used to indicate to user what command is executing. If omitted, will be truncated cmd" }, "cmd": { "type": "string" }, "hook": { "type": "string", "description": "Where in the execution of archmgr to run", "default": "end", "pattern": "^(pre-pkg|post-pkg|pre-git|post-git|end)" }, "user": { "type": "string", "default": "root", "pattern": "^[a-zA-Z0-9\\-._]{2,19}(?=[a-zA-Z0-9]$)", "description": "The user to run as. Be aware that only the current user's password is available, unless capture_output is set to false" }, "capture_output": { "type": "boolean", "default": true, "description": "Whether or not to hide the output from the user" } } } } }, "additionalProperties": false } }, "required": [ "pkgs", "boot" ], "additionalProperties": false }