diff --git a/README.md b/README.md
index eb96661..93da3ab 100644
--- a/README.md
+++ b/README.md
@@ -125,6 +125,10 @@ This is a base idempotent provisioning with sensible defaults that can be slight
hipchat |
HipChat repo and package |
+
+ i3 |
+ i3wm |
+
i3-gaps |
i3wm on steroids |
diff --git a/playbook.yml b/playbook.yml
index 028179b..b3ce0ef 100644
--- a/playbook.yml
+++ b/playbook.yml
@@ -90,6 +90,10 @@
roles: [i3-utils-bin]
tags: i3-utils-bin
+- hosts: all
+ roles: [i3]
+ tags: i3
+
- hosts: all
roles: [i3-gaps]
tags: i3-gaps
diff --git a/roles/i3/defaults/main.yml b/roles/i3/defaults/main.yml
new file mode 100644
index 0000000..80715e3
--- /dev/null
+++ b/roles/i3/defaults/main.yml
@@ -0,0 +1,4 @@
+---
+
+# 'install', 'remove' or 'ignore'
+i3: 'ignore'
diff --git a/roles/i3/tasks/install.yml b/roles/i3/tasks/install.yml
new file mode 100644
index 0000000..327638c
--- /dev/null
+++ b/roles/i3/tasks/install.yml
@@ -0,0 +1,7 @@
+---
+
+- name: ensure i3-wm is installed
+ include_role:
+ name: apt-meta
+ vars:
+ apt_packages: "{{ [i3_package_name] + i3_shared_packages }}"
diff --git a/roles/i3/tasks/main.yml b/roles/i3/tasks/main.yml
new file mode 100644
index 0000000..d384515
--- /dev/null
+++ b/roles/i3/tasks/main.yml
@@ -0,0 +1,7 @@
+---
+
+- include_tasks: install.yml
+ when: i3 == 'install'
+
+- include_tasks: uninstall.yml
+ when: i3 == 'remove'
diff --git a/roles/i3/tasks/uninstall.yml b/roles/i3/tasks/uninstall.yml
new file mode 100644
index 0000000..15aa42c
--- /dev/null
+++ b/roles/i3/tasks/uninstall.yml
@@ -0,0 +1,8 @@
+---
+
+- name: ensure i3-wm is removed
+ include_role:
+ name: apt-meta
+ vars:
+ apt_state: absent
+ apt_packages: "{{ i3_package_name }}"
diff --git a/roles/i3/vars/main.yml b/roles/i3/vars/main.yml
new file mode 100644
index 0000000..d2e050a
--- /dev/null
+++ b/roles/i3/vars/main.yml
@@ -0,0 +1,9 @@
+---
+
+i3_package_name: i3-wm
+
+i3_shared_packages:
+ - i3blocks
+ - i3lock
+ - i3status
+ - suckless-tools