diff --git a/group_vars/all b/group_vars/all
index 3c25042a..5c3d04d5 100644
--- a/group_vars/all
+++ b/group_vars/all
@@ -17,6 +17,7 @@ default_roles:
   - neovim-packer
   - notion-app
   - platformsh-cli
+  - pulumi
   - pv
   - ripgrep
   - stylua
diff --git a/roles/pulumi/tasks/main.yaml b/roles/pulumi/tasks/main.yaml
new file mode 100644
index 00000000..0c1dc2f0
--- /dev/null
+++ b/roles/pulumi/tasks/main.yaml
@@ -0,0 +1,23 @@
+---
+- name: Existing install
+  stat:
+    path: "{{ ansible_user_dir }}/.pulumi/bin/pulumi"
+  register: install
+
+- name: Download installer
+  ansible.builtin.get_url:
+    dest: /tmp/pulumi-install.sh
+    mode: 0755
+    url: https://get.pulumi.com
+  become: true
+  when: not install.stat.exists
+
+- name: Execute installer
+  ansible.builtin.command: sh /tmp/pulumi-install.sh
+  when: not install.stat.exists
+
+- name: Remove pulumi-install.sh
+  ansible.builtin.file:
+    path: /tmp/pulumi-install.sh
+    state: absent
+  become: true
diff --git a/roles/zsh/files/config/configs/path.zsh b/roles/zsh/files/config/configs/path.zsh
index cf4eafc6..b8e089cd 100644
--- a/roles/zsh/files/config/configs/path.zsh
+++ b/roles/zsh/files/config/configs/path.zsh
@@ -9,6 +9,7 @@ $HOME/.dotfiles/bin:\
 $HOME/.dotfiles/bin/bin:\
 $HOME/.local/bin:\
 $HOME/.platformsh/bin:\
+$HOME/.pulumi/bin:\
 $HOME/bin:\
 $HOME/snap/bin:\
 bin:\