{"id":20852551,"url":"https://github.com/vpayno/ansible-playbooks","last_synced_at":"2026-04-27T02:32:37.538Z","repository":{"id":244462747,"uuid":"814964541","full_name":"vpayno/ansible-playbooks","owner":"vpayno","description":"Ansible playbooks for my home lab","archived":false,"fork":false,"pushed_at":"2026-03-21T16:49:39.000Z","size":342,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-03-21T17:59:02.661Z","etag":null,"topics":["ansible-playbook","debian","raspian","runme-playbooks"],"latest_commit_sha":null,"homepage":"","language":"Nix","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/vpayno.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-06-14T04:24:49.000Z","updated_at":"2026-03-21T16:49:42.000Z","dependencies_parsed_at":"2025-12-26T03:05:46.737Z","dependency_job_id":null,"html_url":"https://github.com/vpayno/ansible-playbooks","commit_stats":null,"previous_names":["vpayno/ansible-playbooks"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/vpayno/ansible-playbooks","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vpayno%2Fansible-playbooks","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vpayno%2Fansible-playbooks/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vpayno%2Fansible-playbooks/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vpayno%2Fansible-playbooks/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vpayno","download_url":"https://codeload.github.com/vpayno/ansible-playbooks/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vpayno%2Fansible-playbooks/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32320335,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-26T23:26:28.701Z","status":"online","status_checked_at":"2026-04-27T02:00:06.769Z","response_time":128,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ansible-playbook","debian","raspian","runme-playbooks"],"created_at":"2024-11-18T03:18:01.612Z","updated_at":"2026-04-27T02:32:37.508Z","avatar_url":"https://github.com/vpayno.png","language":"Nix","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ansible-playbooks\n\n[![actionlint](https://github.com/vpayno/ansible-playbooks/actions/workflows/gh-actions.yaml/badge.svg?branch=main)](https://github.com/vpayno/ansible-playbooks/actions/workflows/gh-actions.yaml)\n[![ansible](https://github.com/vpayno/ansible-playbooks/actions/workflows/ansible.yaml/badge.svg?branch=main)](https://github.com/vpayno/ansible-playbooks/actions/workflows/ansible.yaml)\n[![json](https://github.com/vpayno/ansible-playbooks/actions/workflows/json.yaml/badge.svg?branch=main)](https://github.com/vpayno/ansible-playbooks/actions/workflows/json.yaml)\n[![markdown](https://github.com/vpayno/ansible-playbooks/actions/workflows/markdown.yaml/badge.svg?branch=main)](https://github.com/vpayno/ansible-playbooks/actions/workflows/markdown.yaml)\n[![woke](https://github.com/vpayno/ansible-playbooks/actions/workflows/woke.yaml/badge.svg?branch=main)](https://github.com/vpayno/ansible-playbooks/actions/workflows/woke.yaml)\n[![yaml](https://github.com/vpayno/ansible-playbooks/actions/workflows/yaml.yaml/badge.svg?branch=main)](https://github.com/vpayno/ansible-playbooks/actions/workflows/yaml.yaml)\n\nAnsible playbook for my home lab.\n\n## Nix, system-manager \u0026 home-manager\n\nTired of Ansible+Apt+ManualHacks when managing anything other than `NixOS`.\n\nAlso tired of Dev Containers so switching to using `nix develop`/`devbox shell`\nfor the development environment.\n\nUsing `system-manager` to handle \"OS/System\" configurations and `home-manager`\nto manage \"User\" configurations.\n\n### Runme Playbooks\n\nShow the system-manager and home-manager latest profile diffs.\n\n```bash { name=nix-nvd-diff-latest terminalrows=25 terminalcolumns=80 }\ndeclare target_host=rpi11\n\necho Running: \\ssh \"${target_host}\" '/run/system-manager/sw/bin/nvd diff $(find /nix/var/nix/profiles/system-manager-profiles/ -type l -regextype posix-extended -regex '^.*/system-manager-[0-9]+-link$' | sort -V | tail -n 2 | tr \"\\n\" \" \")'\ntime \\ssh \"${target_host}\" '/run/system-manager/sw/bin/nvd diff $(find /nix/var/nix/profiles/system-manager-profiles/ -type l -regextype posix-extended -regex '^.*/system-manager-[0-9]+-link$' | sort -V | tail -n 2 | tr \"\\n\" \" \")'\nprintf \"\\n\"\n\necho Running: \\ssh \"${target_host}\" \"nvd diff \\$(home-manager generations | head -n 2 | sed -r -e 's;^[0-9]+-[0-9]+-[0-9]+ [0-9]+:[0-9]+ : id [0-9]+ -\u003e (/nix/store/[a-z0-9]+-home-manager-generation).*$;\\1;g' | tac)\"\ntime \\ssh \"${target_host}\" \"nvd diff \\$(home-manager generations | head -n 2 | sed -r -e 's;^[0-9]+-[0-9]+-[0-9]+ [0-9]+:[0-9]+ : id [0-9]+ -\u003e (/nix/store/[a-z0-9]+-home-manager-generation).*$;\\1;g' | tac)\"\n```\n\nUpdate both system-manager and home-manager on remote host.\n\n```bash { name=nix-sm-hm-update-push-repo-and-update terminalrows=25 terminalcolumns=80 }\ndeclare target_host=rpi11\n\necho Running: \\rsync --delete --progress --archive --hard-links --sparse --chown=root:root --exclude={.venv,.devbox,node_modules,result*} ~/git_vpayno/ansible-playbooks/ root@\"${target_host}\":.config/system-manager/\ntime \\rsync --delete --progress --archive --hard-links --sparse --chown=root:root --exclude={.venv,.devbox,node_modules,result*} ~/git_vpayno/ansible-playbooks/ root@\"${target_host}\":.config/system-manager/\nprintf \"\\n\"\n\necho Running: \\ssh \"root@${target_host}\" \"cd ~/.config/system-manager \u0026\u0026 /nix/var/nix/profiles/default/bin/nix run github:numtide/system-manager -- switch --flake .#raspianServer\"\nprintf \"\\n\"\n\nif time \\ssh \"root@${target_host}\" \"cd ~/.config/system-manager \u0026\u0026 /nix/var/nix/profiles/default/bin/nix run github:numtide/system-manager -- switch --flake .#raspianServer\"; then\n    printf \"INFO: system-manager ran successfully!\\n\"\n    printf \"\\n\"\n    time \\ssh \"${target_host}\" '/run/system-manager/sw/bin/nvd diff $(find /nix/var/nix/profiles/system-manager-profiles/ -type l -regextype posix-extended -regex '^.*/system-manager-[0-9]+-link$' | sort -V | tail -n 2 | tr \"\\n\" \" \")'\nelse\n    printf \"ERROR: system-manager failed!\\n\"\nfi\n\necho Running: \\rsync --delete --progress --archive --hard-links --sparse --chown=vpayno:vpayno --exclude={.venv,.devbox,node_modules,result*} ~/git_vpayno/ansible-playbooks/ vpayno@\"${target_host}\":.config/home-manager/\ntime \\rsync --delete --progress --archive --hard-links --sparse --chown=vpayno:vpayno --exclude={.venv,.devbox,node_modules,result*} ~/git_vpayno/ansible-playbooks/ vpayno@\"${target_host}\":.config/home-manager/\nprintf \"\\n\"\n\necho Running: \\ssh \"vpayno@${target_host}\" \"home-manager -b before-home-manager switch --flake ~/.config/home-manager#vpayno\"\nprintf \"\\n\"\n\nif time \\ssh \"vpayno@${target_host}\" \"home-manager -b before-home-manager switch --flake ~/.config/home-manager#vpayno\"; then\n    printf \"INFO: home-manager ran successfully!\\n\"\n    printf \"\\n\"\n    time \\ssh \"${target_host}\" \"nvd diff \\$(home-manager generations | head -n 2 | sed -r -e 's;^[0-9]+-[0-9]+-[0-9]+ [0-9]+:[0-9]+ : id [0-9]+ -\u003e (/nix/store/[a-z0-9]+-home-manager-generation).*$;\\1;g' | tac)\"\nelse\n    printf \"ERROR: home-manager failed!\\n\"\nfi\n```\n\nSync system-manager repo to remote host.\n\n```bash { name=nix-sm-update-push-repo terminalrows=25 terminalcolumns=80 }\ndeclare target_host=rpi11\n\necho Running: \\rsync --delete --progress --archive --hard-links --sparse --chown=root:root --exclude={.venv,.devbox,node_modules,result*} ~/git_vpayno/ansible-playbooks/ root@\"${target_host}\":.config/system-manager/\ntime \\rsync --delete --progress --archive --hard-links --sparse --chown=root:root --exclude={.venv,.devbox,node_modules,result*} ~/git_vpayno/ansible-playbooks/ root@\"${target_host}\":.config/system-manager/\nprintf \"\\n\"\n```\n\nSync repo and run system-manager on remote host.\n\n```bash { name=nix-sm-update-push-repo-and-update terminalrows=25 terminalcolumns=80 }\ndeclare target_host=rpi11\n\necho Running: \\rsync --delete --progress --archive --hard-links --sparse --chown=root:root --exclude={.venv,.devbox,node_modules,result*} ~/git_vpayno/ansible-playbooks/ root@\"${target_host}\":.config/system-manager/\ntime \\rsync --delete --progress --archive --hard-links --sparse --chown=root:root --exclude={.venv,.devbox,node_modules,result*} ~/git_vpayno/ansible-playbooks/ root@\"${target_host}\":.config/system-manager/\nprintf \"\\n\"\n\necho Running: \\ssh \"root@${target_host}\" \"cd ~/.config/system-manager \u0026\u0026 /nix/var/nix/profiles/default/bin/nix run github:numtide/system-manager -- switch --flake .#raspianServer\"\nprintf \"\\n\"\n\nif time \\ssh \"root@${target_host}\" \"cd ~/.config/system-manager \u0026\u0026 /nix/var/nix/profiles/default/bin/nix run github:numtide/system-manager -- switch --flake .#raspianServer\"; then\n    printf \"INFO: system-manager ran successfully!\\n\"\n    printf \"\\n\"\n    time \\ssh \"${target_host}\" '/run/system-manager/sw/bin/nvd diff $(find /nix/var/nix/profiles/system-manager-profiles/ -type l -regextype posix-extended -regex '^.*/system-manager-[0-9]+-link$' | sort -V | tail -n 2 | tr \"\\n\" \" \")'\nelse\n    printf \"ERROR: system-manager failed!\\n\"\nfi\n```\n\n```bash { name=nix-sm-update-from-local-to-remote terminalrows=25 terminalcolumns=80 }\ndeclare target_host=rpi11\n\necho Running: system-manager --target-host \"root@${target_host}\" switch --flake .#systemConfigs.aarch64-linux.raspianServer\nprintf \"\\n\"\n\nif time system-manager --target-host \"root@${target_host}\" switch --flake .#systemConfigs.aarch64-linux.raspianServer; then\n    printf \"INFO: system-manager ran successfully!\\n\"\n    printf \"\\n\"\n    time \\ssh \"${target_host}\" '/run/system-manager/sw/bin/nvd diff $(find /nix/var/nix/profiles/system-manager-profiles/ -type l -regextype posix-extended -regex '^.*/system-manager-[0-9]+-link$' | sort -V | tail -n 2 | tr \"\\n\" \" \")'\nelse\n    printf \"ERROR: system-manager failed!\\n\"\nfi\n```\n\nUsing github.com as the repo source:\n\n- To specify a tag, use `?ref=refs/tags/yyyymmdd.serial.patch#raspianServer`.\n- To specify a branch, use `?ref=refs/heads/BRANCH_NAME#raspianServer`.\n\n```bash { name=nix-sm-update-from-github terminalrows=25 terminalcolumns=80 }\ndeclare target_host=rpi11\n\necho Running: system-manager --target-host \"root@${target_host}\" switch --flake github.com:vpayno/ansible-playbooks#systemConfigs.aarch64-linux.raspianServer\nprintf \"\\n\"\n\nif time system-manager --target-host \"root@${target_host}\" switch --flake github.com:vpayno/ansible-playbooks#systemConfigs.aarch64-linux.raspianServer; then\n    printf \"INFO: system-manager ran successfully!\\n\"\n    printf \"\\n\"\n    time \\ssh \"${target_host}\" '/run/system-manager/sw/bin/nvd diff $(find /nix/var/nix/profiles/system-manager-profiles/ -type l -regextype posix-extended -regex '^.*/system-manager-[0-9]+-link$' | sort -V | tail -n 2 | tr \"\\n\" \" \")'\nelse\n    printf \"ERROR: system-manager failed!\\n\"\nfi\n```\n\n### Home-Manager\n\nPush home-manager repo to remote host.\n\n```bash { name=nix-hm-update-push-repo terminalrows=25 terminalcolumns=80 }\ndeclare target_host=rpi11\n\necho Running: \\rsync --delete --progress --archive --hard-links --sparse --chown=vpayno:vpayno --exclude={.venv,.devbox,node_modules,result*} ~/git_vpayno/ansible-playbooks/ vpayno@\"${target_host}\":.config/home-manager/\ntime \\rsync --delete --progress --archive --hard-links --sparse --chown=vpayno:vpayno --exclude={.venv,.devbox,node_modules,result*} ~/git_vpayno/ansible-playbooks/ vpayno@\"${target_host}\":.config/home-manager/\nprintf \"\\n\"\n```\n\nPush repo to remote host and update home-manager configuration from remote host.\n\n```bash { name=nix-hm-update-push-repo-and-update terminalrows=25 terminalcolumns=80 }\ndeclare target_host=rpi11\n\necho Running: \\rsync --delete --progress --archive --hard-links --sparse --chown=vpayno:vpayno --exclude={.venv,.devbox,node_modules,result*} ~/git_vpayno/ansible-playbooks/ vpayno@\"${target_host}\":.config/home-manager/\ntime \\rsync --delete --progress --archive --hard-links --sparse --chown=vpayno:vpayno --exclude={.venv,.devbox,node_modules,result*} ~/git_vpayno/ansible-playbooks/ vpayno@\"${target_host}\":.config/home-manager/\nprintf \"\\n\"\n\necho Running: \\ssh \"vpayno@${target_host}\" \"home-manager -b before-home-manager switch --flake ~/.config/home-manager#vpayno\"\nprintf \"\\n\"\n\nif time \\ssh \"vpayno@${target_host}\" \"home-manager -b before-home-manager switch --flake ~/.config/home-manager#vpayno\"; then\n    printf \"INFO: home-manager ran successfully!\\n\"\n    printf \"\\n\"\n    time \\ssh \"${target_host}\" \"nvd diff \\$(home-manager generations | head -n 2 | sed -r -e 's;^[0-9]+-[0-9]+-[0-9]+ [0-9]+:[0-9]+ : id [0-9]+ -\u003e (/nix/store/[a-z0-9]+-home-manager-generation).*$;\\1;g' | tac)\"\nelse\n    printf \"ERROR: home-manager failed!\\n\"\nfi\n```\n\nUsing github.com as the repo source:\n\n- To specify a tag, use `?ref=refs/tags/yyyymmdd.serial.patch#vpayno`.\n- To specify a branch, use `?ref=refs/heads/BRANCH_NAME#vpayno`.\n\n```bash { name=nix-hm-update-from-github terminalrows=25 terminalcolumns=80 }\ndeclare target_host=rpi11\n\necho Running: \\ssh \"vpayno@${target_host}\" \"home-manager -b before-home-manager switch --flake github.com:vpayno/ansible-playbooks#vpayno\"\nprintf \"\\n\"\n\nif time \\ssh \"vpayno@${target_host}\" \"home-manager -b before-home-manager switch --flake github.com:vpayno/ansible-playbooks#vpayno\"; then\n    printf \"INFO: home-manager ran successfully!\\n\"\n    printf \"\\n\"\n    time \\ssh \"${target_host}\" \"nvd diff \\$(home-manager generations | head -n 2 | sed -r -e 's;^[0-9]+-[0-9]+-[0-9]+ [0-9]+:[0-9]+ : id [0-9]+ -\u003e (/nix/store/[a-z0-9]+-home-manager-generation).*$;\\1;g' | tac)\"\nelse\n    printf \"ERROR: home-manager failed!\\n\"\nfi\n```\n\n### Runme Playbooks - HomeLab\n\nThe `system` value has to match on both hosts if you use the shortcut\n`.#raspianServer`. To target a different architecture, specify the full path:\n`systemConfigs.aarch64-linux.raspianServer`.\n\n```bash { name=nix-sm-hm-update-rpi terminalrows=25 terminalcolumns=80 }\nexport target_host=rpi11\n\necho Running: \\rsync --delete --progress --archive --hard-links --sparse --chown=root:root --exclude={.venv,.devbox,node_modules,result*} ~/git_vpayno/ansible-playbooks/ root@\"${target_host}\":.config/system-manager/\ntime \\rsync --delete --progress --archive --hard-links --sparse --chown=root:root --exclude={.venv,.devbox,node_modules,result*} ~/git_vpayno/ansible-playbooks/ root@\"${target_host}\":.config/system-manager/\nprintf \"\\n\"\n\necho Running: \\ssh \"root@${target_host}\" \"cd ~/.config/system-manager \u0026\u0026 /nix/var/nix/profiles/default/bin/nix run github:numtide/system-manager -- switch --flake .#raspianServer\"\nprintf \"\\n\"\n\nif time \\ssh \"root@${target_host}\" \"cd ~/.config/system-manager \u0026\u0026 /nix/var/nix/profiles/default/bin/nix run github:numtide/system-manager -- switch --flake .#raspianServer\"; then\n    printf \"INFO: system-manager ran successfully!\\n\"\n    printf \"\\n\"\n    time \\ssh \"${target_host}\" '/run/system-manager/sw/bin/nvd diff $(find /nix/var/nix/profiles/system-manager-profiles/ -type l -regextype posix-extended -regex '^.*/system-manager-[0-9]+-link$' | sort -V | tail -n 2 | tr \"\\n\" \" \")'\nelse\n    printf \"ERROR: system-manager failed!\\n\"\nfi\n\necho Running: \\rsync --delete --progress --archive --hard-links --sparse --chown=vpayno:vpayno --exclude={.venv,.devbox,node_modules,result*} ~/git_vpayno/ansible-playbooks/ vpayno@\"${target_host}\":.config/home-manager/\ntime \\rsync --delete --progress --archive --hard-links --sparse --chown=vpayno:vpayno --exclude={.venv,.devbox,node_modules,result*} ~/git_vpayno/ansible-playbooks/ vpayno@\"${target_host}\":.config/home-manager/\nprintf \"\\n\"\n\necho Running: \\ssh \"vpayno@${target_host}\" \"home-manager -b before-home-manager switch --flake ~/.config/home-manager#vpayno\"\nprintf \"\\n\"\n\nif time \\ssh \"vpayno@${target_host}\" \"home-manager -b before-home-manager switch --flake ~/.config/home-manager#vpayno\"; then\n    printf \"INFO: home-manager ran successfully!\\n\"\n    printf \"\\n\"\n    time \\ssh \"${target_host}\" \"nvd diff \\$(home-manager generations | head -n 2 | sed -r -e 's;^[0-9]+-[0-9]+-[0-9]+ [0-9]+:[0-9]+ : id [0-9]+ -\u003e (/nix/store/[a-z0-9]+-home-manager-generation).*$;\\1;g' | tac)\"\nelse\n    printf \"ERROR: home-manager failed!\\n\"\nfi\n```\n\n## RunMe Playbook\n\nThis and other read-me files in this repo are RunMe Playbooks.\n\nUse this playbook step/task to update the [RunMe](https://runme.dev) CLI.\n\nIf you don't have RunMe installed, you'll need to copy/paste the command. :)\n\n```bash { background=false category=runme closeTerminalOnSuccess=true excludeFromRunAll=true interactive=true interpreter=bash name=setup-runme-install promptEnv=true terminalrows=25 terminalcolumns=80 }\ngo install github.com/stateful/runme/v3@v3\n```\n\nYou can also install `runme` with the command `devbox add runme` and run it with\n`devbox run runme`.\n\n### Setup command auto-completion\n\n```bash { background=false category=runme closeTerminalOnSuccess=true excludeFromRunAll=true interactive=true interpreter=bash name=setup-runme-autocompletion promptEnv=true terminalrows=25 terminalcolumns=80 }\nif [[ -d ~/.bash_libs.d ]]; then\n    runme completion bash \u003e ~/.bash_libs.d/19.00-completion-runme.sh\n    printf \"Don't forget to run: %s\\n\" \"source ~/.bash_libs.d/19.00-completion-runme.sh\"\nelse\n    runme completion bash \u003e\u003e ~/.bash_completion_runmme.sh\n    printf \"%s\\n\" \"source ~/.bash_completion_runmme.sh\" \u003e\u003e ~/.bashrc\n    printf \"Don't forget to run: %s\\n\" \"source ~/.bashrc\"\nfi\n```\n\n### Install Playbook dependencies\n\n```bash { background=false category=runme closeTerminalOnSuccess=true excludeFromRunAll=true interactive=true interpreter=bash name=setup-runme-deps promptEnv=true terminalrows=25 terminalcolumns=80 }\ngo install github.com/keewek/ansible-pretty-print@latest\ngo install github.com/charmbracelet/gum@latest\ngo install github.com/mikefarah/yq/v4@latest\ngo install github.com/charmbracelet/glow@latest\n```\n\nThese commands are now deprecated in favor of using `devbox` instead.\n\n## Dev Container\n\nThis project has a dev-container to make it easier to run ansible commands from\nany workstation, it just needs [Docker](https://docs.docker.com/engine/install/)\nand the [Dev Container CLI](https://github.com/devcontainers/cli) installed to\nget setup to run ansible playbooks.\n\nNote: deprecated in favor of using `devbox` instead.\n\n## Devbox\n\nBenefits over dev containers?\n\n- Tooling is less complicated.\n- It's also easier/faster to make changes and \"redeploy\".\n- Easy way to start learning Nix!\n- Sets up a Python virtualenv in the root of the project that you can use to\n  install packages with pip when they aren't available in Nix or for\n  local/private dependencies you haven't added a flake.nix file to.\n\n### Devbox Help\n\n- use `devbox search name` to search for packages\n- use `devbox info name` to show the info for a package\n- use `devbox add name` to add a package to the shell\n- use `devbox update` to update the lock file and environemnt\n- use `devbox shell` to start the `nix-shell`\n- use `devbox run command` to run a command inside the `nix-shell`\n\n### Running CI commands\n\nTo run `actionlint` to check the GitHub workflow files:\n\n```bash { name=ci-action-lint terminalrows=25 terminalcolumns=80 }\nnix run .#ci-actionlint\n```\n\nTo run `ansible-lint` to lint the ansible files:\n\n```bash { name=ci-ansible-lint terminalrows=25 terminalcolumns=80 }\nnix run .#ci-ansiblelint\n```\n\nTo run `markdownlint` to lint markdown files:\n\n```bash { name=ci-markdownlint terminalrows=25 terminalcolumns=80 }\nnix run .#ci-markdownlint\n```\n\nTo run `yamllint` to lint yaml files:\n\n```bash { name=ci-yamllint terminalrows=25 terminalcolumns=80 }\nnix run .#ci-yamllint\n```\n\n## Ansible\n\nThe Ansible notes are located in the file [ANSIBLE.md](./ANSIBLE.md).\n\nTo run ansible playbooks run:\n\n```bash { name=ansible-playbook-run terminalRows=80 }\nexport FQDN=\"rpi12\"\n\nansible-playbook playbooks/main.yaml --limit=\"${FQDN}\"\n```\n\n## Notes\n\n### Duplicate ipv6 addresses issue on systemd hosts\n\nAfter cloning a `systemd` host, you need to run the following commands on the\nclone to fix the duplicate ipv6 address collision issue:\n\n```bash { name=fix-systemd-ipv6-collision terminalrows=25 terminalcolumns=80 }\ncat /etc/machine-id\nrm -fv /etc/machine-id\nsystemd-machine-id-setup  # generates random number\ncat /etc/machine-id\nreboot\n```\n\nNote to self: remove `/etc/machine-id` from source host before cloning.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvpayno%2Fansible-playbooks","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvpayno%2Fansible-playbooks","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvpayno%2Fansible-playbooks/lists"}