{"id":14064270,"url":"https://github.com/AlexNabokikh/windows-playbook","last_synced_at":"2025-07-29T17:33:06.493Z","repository":{"id":37798857,"uuid":"418101256","full_name":"AlexNabokikh/windows-playbook","owner":"AlexNabokikh","description":"Windows setup and configuration via Ansible. ","archived":false,"fork":false,"pushed_at":"2023-04-01T17:46:01.000Z","size":176,"stargazers_count":251,"open_issues_count":0,"forks_count":69,"subscribers_count":4,"default_branch":"master","last_synced_at":"2024-11-22T06:40:44.221Z","etag":null,"topics":["ansible","automation","chocolatey","playbook","windows","windows-10","windows-11"],"latest_commit_sha":null,"homepage":"","language":"PowerShell","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/AlexNabokikh.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-10-17T11:01:30.000Z","updated_at":"2024-11-18T07:01:29.000Z","dependencies_parsed_at":"2024-05-27T22:00:09.622Z","dependency_job_id":"7718a89c-0f50-41f4-81ce-c2154479efcf","html_url":"https://github.com/AlexNabokikh/windows-playbook","commit_stats":null,"previous_names":[],"tags_count":25,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlexNabokikh%2Fwindows-playbook","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlexNabokikh%2Fwindows-playbook/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlexNabokikh%2Fwindows-playbook/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlexNabokikh%2Fwindows-playbook/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/AlexNabokikh","download_url":"https://codeload.github.com/AlexNabokikh/windows-playbook/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":228032926,"owners_count":17858918,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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","automation","chocolatey","playbook","windows","windows-10","windows-11"],"created_at":"2024-08-13T07:03:47.104Z","updated_at":"2024-12-04T02:31:29.796Z","avatar_url":"https://github.com/AlexNabokikh.png","language":"PowerShell","funding_links":[],"categories":["ansible","PowerShell"],"sub_categories":[],"readme":"# Windows Ansible Playbook\n\n![Logo](files/logo.png)\n\n![badge-gh-actions]\n![badge-windows-10]\n![badge-windows-11]\n![badge-license]\n\nThis playbook installs and configures most of the software I use on my Windows 11 machine for software development.\n\n## Contents\n\n- [Playbook capabilities](#playbook-capabilities)\n- [Installation](#installation)\n- [Windows host prerequisites installation](#prepare-your-windows-host-)\n- [Ansible control node prerequisites installation](#ansible-control-node-)\n- [Running a specific set of tagged tasks](#running-a-specific-set-of-tagged-tasks)\n- [Overriding Defaults](#overriding-defaults)\n- [Included Applications / Configuration (Default)](#included-applications--configuration-default)\n- [Available Parameters](#available-parameters)\n\n## Playbook capabilities\n\n\u003e **NOTE:** The Playbook is fully configurable. You can skip or reconfigure any task by [Overriding Defaults](#overriding-defaults).\n\n- **Software**\n  - Remove Bloatware (see default config for a complete list of Bloatware).\n  - Install software and packages selected by the user via Chocolatey.\n  - Install software and packages selected by the user via WinGet.\n- **Windows apps \u0026 features**\n  - Install and Enable Optional Windows Features chosen by the user.\n  - Install and Enable the WSL2 distro selected by the user.\n  - Run defragmentation on volumes selected by the user (in parallel).\n- **Windows Settings**\n  - **Explorer**\n    - Enable Explorer file extensions in file names.\n    - Open Explorer in the Computer view by default.\n    - Disable the Ribbon menu in Windows Explorer.\n    - Enable Right-click Context Menu (Windows 11).\n  - **Start Menu**\n    - Disable Automatic Install of Suggested Apps.\n    - Disable the \"App Suggestions\" in the Start menu.\n    - Disable the \"tips\" popup.\n    - Disable 'Windows Welcome Experience'.\n  - **Taskbar**\n    - Unpin 'Search' from Taskbar.\n    - Unpin Task View, Chat, and Cortana from Taskbar.\n    - Unpin 'News and Interests' from Taskbar.\n    - Unpin 'People' from Taskbar.\n    - Unpin 'Edge', 'Store' and other built-in shortcuts from the Taskbar.\n  - **Desktop**\n    - Remove Desktop icons (Ink).\n  - **General**\n    - Set the hostname selected by the user is assigned.\n    - Configure remote desktop services.\n    - Set the sound scheme to 'No sounds'.\n    - Set the power plan selected by the user.\n    - Install Windows updates categories selected by the user.\n    - Disable mouse acceleration.\n- **Terminal Settings**\n  - Install [oh-my-posh](https://ohmyposh.dev/) with the theme chosen by the user and it set as a default PowerShell theme engine.\n\n## Installation\n\n### Prepare your Windows host ⏲\n\n#### **This playbook was tested on Windows 10 2004 and Windows 11 21H2 (Pro, Ent). Other versions may work but have not tried.**\n\nCopy and paste the code below into your PowerShell terminal to get your Windows machine ready to work with Ansible.\n\n```powershell\n[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12\n$url = \"https://raw.githubusercontent.com/AlexNabokikh/windows-playbook/master/setup.ps1\"\n$file = \"$env:temp\\setup.ps1\"\n\n(New-Object -TypeName System.Net.WebClient).DownloadFile($url, $file)\npowershell.exe -ExecutionPolicy ByPass -File $file -Verbose\n```\n\n### Ansible Control node 🕹\n\n1. [Install Ansible](https://docs.ansible.com/ansible/latest/installation_guide/index.html):\n\n   1. Upgrade Pip: `pip3 install --upgrade pip`\n   2. Install Ansible: `pip3 install ansible`\n\n2. Clone or download this repository to your local drive.\n3. Run `ansible-galaxy install -r requirements.yml` inside this directory to install required Ansible collections.\n4. Add the IP address and credentials of your Windows machine into the `inventory` file\n5. Run `ansible-playbook main.yml` inside this directory.\n\n### Running a specific set of tagged tasks\n\nYou can filter which part of the provisioning process to run by specifying a set of tags using `ansible-playbook` `--tags` flag. The tags available are `choco` , `debloat` , `desktop` , `explorer` , `fonts` , `hostname` , `mouse` , `power` , `sounds` , `start_menu` , `taskbar` , `updates` , `windows_features` , `wsl`, `winget`.\n\n```sh\nansible-playbook main.yml --tags \"choco,wsl\"\n```\n\n## Overriding Defaults\n\n**NOTE:** You can override any of the defaults configured in `default.config.yml` by creating a `config.yml` file and setting the overrides in that file. For example, you can customize the installed packages and enable/disable specific tasks with something like:\n\n```yaml\nconfigure_hostname: true\ncustom_hostname: myhostname\n\ninstall_windows_updates: true\nupdate_categories:\n  - Critical Updates\n  - Security Updates\n  - * # Installs all updates\n\nchoco_installed_packages:\n  # installs latest version of the Google Chrome while ignoring the package checksum\n  - name: googlechrome\n    state: latest\n    choco_args: --ignorechecksum\n  # installs 2.37.1 version of the git\n  - name: git\n    version: \"2.37.1\"\n  # installs GO, but won't update it\n  - golang\n\ninstall_fonts: true\ninstalled_nerdfonts:\n  - Meslo\n\ninstall_ohmyposh: true\nohmyposh_theme: agnoster\n\ninstall_windows_features: true\nwindows_features:\n  Microsoft-Hyper-V: true\n\ninstall_wsl2: true\nwsl2_distribution: wsl-archlinux\n\nremove_bloatware: true\nbloatware:\n  - Microsoft.Messaging\n```\n\n## Included Applications / Configuration (Default)\n\nPackages (installed with Chocolatey):\n\n- adobereader\n- auto-dark-mode\n- awscli\n- Firefox\n- git\n- golang\n- jre8\n- kubernetes-cli\n- microsoft-windows-terminal\n- peazip\n- powertoys\n- python3\n- sharex\n- telegram\n- terraform\n- vlc\n- vscode\n- zoom\n\n## Available Parameters\n\n| Name                                   | Description                                                                                                      | Type         | Default                                                                                                                            |\n| -------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ------------ | ---------------------------------------------------------------------------------------------------------------------------------- |\n| configure_hostname                     | (Optional) Whether or not to set a custom hostname.                                                              | `bool`       | `false`                                                                                                                            |\n| custom_hostname                        | (Optional) The hostname to set for the computer.                                                                 | `string`     | `windows-ansible`                                                                                                                  |\n| install_windows_updates                | (Optional) Whether or not to install Windows updates.                                                            | `bool`       | `true`                                                                                                                             |\n| update_categories                      | (Optional) A list of categories to install updates from. The value \\* will match all categories.                 | `list`       | `[\"CriticalUpdates\", \"SecurityUpdates\", \"UpdateRollups\"]`                                                                          |\n| windows_updates_reboot                 | (Optional) Whether or not to reboot the host if it is required and continue to install updates after the reboot. | `bool`       | `true`                                                                                                                             |\n| remove_bloatware                       | (Optional) Whether or not to uninstall Windows bloatware.                                                        | `bool`       | `true`                                                                                                                             |\n| bloatware                              | (Optional) A list of applications (bloatware) to be uninstalled                                                  | `list`       | [full_list](https://github.com/AlexNabokikh/windows-playbook/blob/8be81399018d151e5f4f5ea08034fc4bd0ad30da/default.config.yml#L85) |\n| choco_installed_packages               | (Optional) A list of Chocolatey packages to be installed.                                                        | `dict`       | [full_list](#included-applications--configuration-default)                                                                         |\n| choco_installed_packages.state         | (Optional) State of the package on the system. (present, latest)                                                 | `string`     | `present`                                                                                                                          |\n| choco_installed_packages.version       | (Optional) Specific version of the package to be installed.                                                      | `string`     | `omit`                                                                                                                             |\n| choco_installed_packages.choco_args    | (Optional) Additional parameters to pass to choco.exe.                                                           | `string`     | `omit`                                                                                                                             |\n| install_windows_features               | (Optional) Whether or not to install Windows features.                                                           | `bool`       | `false`                                                                                                                            |\n| windows_features                       | (Optional) A list of dicts with Windows features to be installed.                                                | `list(dict)` | `Microsoft-Hyper-V: true`                                                                                                          |\n| install_wsl2                           | (Optional) Whether or not to install Windows Subsystem for Linux.                                                | `bool`       | `true`                                                                                                                             |\n| wsl2_distribution                      | (Optional) The valid name of Linux distribution that will be installed.                                          | `string`     | `wsl-ubuntu-2004`                                                                                                                  |\n| install_fonts                          | (Optional) Whether or not to install [Nerd Fonts](https://github.com/ryanoasis/nerd-fonts/).                     | `bool`       | `true`                                                                                                                             |\n| installed_nerdfonts                    | (Optional) A list of [Nerd Fonts](https://github.com/ryanoasis/nerd-fonts/) to be installed.                     | `list`       | `[\"FiraCode\", \"FantasqueSansMono\"]`                                                                                                |\n| install_ohmyposh                       | (Optional) Whether or not to [Oh My Posh](https://ohmyposh.dev/).                                                | `bool`       | `true`                                                                                                                             |\n| configure_explorer                     | (Optional) Whether or not to configure Windows Explorer with sane defaults.                                      | `bool`       | `true`                                                                                                                             |\n| configure_taskbar                      | (Optional) Whether or not to configure Windows TaskBar with sane defaults.                                       | `bool`       | `true`                                                                                                                             |\n| configure_start_menu                   | (Optional) Whether or not to configure Windows Start menu with sane defaults.                                    | `bool`       | `true`                                                                                                                             |\n| set_sound_scheme                       | (Optional) Whether or not to set default Windows Sound Scheme to \"No Sounds\".                                    | `bool`       | `true`                                                                                                                             |\n| disable_mouse_acceleration             | (Optional) Whether or not to disable mouse acceleration.                                                         | `bool`       | `true`                                                                                                                             |\n| remote_desktop_enabled                 | (Optional) Whether or not enable Remote Desktop.                                                                 | `bool`       | `true`                                                                                                                             |\n| remove_desktop_icons                   | (Optional) Whether or not remove desktop icons (\\*.lnk files only).                                              | `bool`       | `false`                                                                                                                            |\n| defrag_volumes                         | (Optional) Whether or not to perform disk defragmentation.                                                       | `bool`       | `true`                                                                                                                             |\n| include_volumes                        | (Optional) A list of volumes to be defragmented.                                                                 | `list`       | `[\"C\"]`                                                                                                                            |\n| change_power_plan                      | (Optional) Whether or not change Power Plan.                                                                     | `bool`       | `true`                                                                                                                             |\n| power_plan                             | (Optional) Choose a power plan (high_performance, balanced, power_saver).                                        | `string`     | `high_performance`                                                                                                                 |\n| install_winget_packages                | (Optional) Whether or not to install WinGet packages.                                                            | `bool`       | `true`                                                                                                                             |\n| winget_packages                        | (Required) A list of WinGet packages to be installed.                                                            | `dict`       |                                                                                                                                    |\n| winget_packages.name                   | (Optional) A name of the WinGet package to be installed.                                                         | `string`     |                                                                                                                                    |\n| winget_packages.source                 | (Optional) The source of the WinGet package (`msstore` or `winget`).                                             | `string`     |                                                                                                                                    |\n| configure_storage_sense                | (Optional) Whether or not configure Windows Storage Sense.                                                       | `string`     |                                                                                                                                    |\n| storage_sense                          | (Optional) A map of storage_sense options.                                                                       | `dict`       |                                                                                                                                    |\n| storage_sense.enabled                  | (Optional) Enable or Disable Windows Storage Sense.                                                              | `bool`       | `true`                                                                                                                             |\n| storage_sense.run_frequency            | (Optional) How often Windows Storage Sense has to run (once in 1, 7 or 30 days).                                 | `int`        | `1`                                                                                                                                |\n| storage_sense.delete_unused_files      | (Optional) Delete temporary files that my apps aren’t using.                                                     | `bool`       | `true`                                                                                                                             |\n| storage_sense.delete_recycle_bin_files | (Optional) Delete files in my recycle bin.                                                                       | `bool`       | `true`                                                                                                                             |\n| storage_sense.recycle_bin_age          | (Optional) How often recycle bin has to be cleaned up (once in 1, 14, 30 or 60 days).                            | `int`        | `14`                                                                                                                               |\n| storage_sense.delete_downloads_files   | (Optional) Delete files in my Downloads folder.                                                                  | `bool`       | `true`                                                                                                                             |\n| storage_sense.downloads_age            | (Optional) How often downloaded files has to be cleaned up (once in 1, 14, 30 or 60 days).                       | `int`        | `14`                                                                                                                               |\n\n## Author\n\nThis project was created by [Alexander Nabokikh](https://www.linkedin.com/in/nabokih/) (initially inspired by [geerlingguy/mac-dev-playbook](https://github.com/geerlingguy/mac-dev-playbook)).\n\n## License\n\nThis software is available under the following licenses:\n\n- **[MIT](https://github.com/AlexNabokikh/windows-playbook/blob/master/LICENSE)**\n\n[badge-gh-actions]: https://github.com/AlexNabokikh/windows-playbook/actions/workflows/release.yaml/badge.svg\n[badge-windows-11]: https://img.shields.io/badge/OS-Windows%2011%2021H2-blue\n[badge-windows-10]: https://img.shields.io/badge/OS-Windows%2010%2020H2-blue\n[badge-license]: https://img.shields.io/badge/License-MIT-informational\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FAlexNabokikh%2Fwindows-playbook","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FAlexNabokikh%2Fwindows-playbook","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FAlexNabokikh%2Fwindows-playbook/lists"}