diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index ace98d2b6a4c769d934808c02a753708b9b0ce06..94cbe32c968779965b94cb081fd2e3220db88898 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -9,7 +9,7 @@
     sha: v0.6.0
     hooks:
     -   id: ansible-syntax-check
-        files: &playbooks 'desktop.yml|dropbox\.yml|pkgs\.yml|skype\.yml|workstation\.yml'
+        files: &playbooks 'desktop.yml|dropbox\.yml|pkgs\.yml|skype\.yml|workstation\.yml|vscode\.yml'
 -   repo: https://github.com/willthames/ansible-lint
     sha: v3.4.13
     hooks:
diff --git a/README.rst b/README.rst
index d83ef5f31be0687cd0c1025590ef4d4fcf4c7fde..e77f3d98d7ef22cb26ff0fbe8deeb01b88178da1 100644
--- a/README.rst
+++ b/README.rst
@@ -63,3 +63,13 @@ Installs Dropbox headless.
 .. code:: shell
 
     ansible-playbook --connection local --inventory-file localhost, --verbose dropbox.yml
+
+
+VSCode
+======
+
+Installs `Visual Studio Code <https://code.visualstudio.com/>`_ from APT repo.
+
+.. code:: shell
+
+    ansible-playbook --connection local --inventory-file localhos, --verbose vscode.yml
diff --git a/vscode.yml b/vscode.yml
new file mode 100644
index 0000000000000000000000000000000000000000..5f7494f48c57666eb347202cbfce20d1d22f32ad
--- /dev/null
+++ b/vscode.yml
@@ -0,0 +1,23 @@
+---
+- hosts: all
+  become: yes
+  become_user: root
+  tasks:
+  - name: Add repo key
+    apt_key:
+        url: https://packages.microsoft.com/keys/microsoft.asc
+        state: present
+
+  - name: Add repo
+    apt_repository:
+        repo: deb [arch=amd64] http://packages.microsoft.com/repos/vscode stable main
+        state: present
+        update_cache: True
+
+  - name: APT install
+    apt:
+        name: code
+        state: present
+        install_recommends: False
+        update_cache: True
+        cache_valid_time: 3600