diff --git a/roles/float-base/tasks/apt.yml b/roles/float-base/tasks/apt.yml
index e73754caa2c1c8dbb4ec08d89fd4d0520393a142..2d4b7c2252113f86100bd6f2f43a657da61352ee 100644
--- a/roles/float-base/tasks/apt.yml
+++ b/roles/float-base/tasks/apt.yml
@@ -45,6 +45,15 @@
     - "deb http://deb.autistici.org/urepo ai3/"
     - "deb http://deb.autistici.org/urepo buster-podman/"
 
+- set_fact:
+    apt_debian_components:
+      - main
+      - contrib
+      - non-free
+- set_fact:
+    apt_debian_components: "{{ apt_debian_components + ['non-free-firmware'] }}"
+  when: "float_debian_dist not in ('buster', 'bullseye')"
+
 - name: Install our standard sources.list
   template:
     src: "sources.list.j2"
diff --git a/roles/float-base/templates/sources.list.j2 b/roles/float-base/templates/sources.list.j2
index 939e9edc983f5fba9dde15227dc13d464ee9f5e3..dc0a5c632325ade8c2733e704960479706788c21 100644
--- a/roles/float-base/templates/sources.list.j2
+++ b/roles/float-base/templates/sources.list.j2
@@ -1,5 +1,5 @@
 {% if apt_sources_list_override is defined %}{{ apt_sources_list_override }}{% else %}
-deb http://deb.debian.org/debian {{ float_debian_dist }} main contrib non-free
-deb http://deb.debian.org/debian {{ float_debian_dist }}-updates main contrib non-free
-deb http://security.debian.org/debian-security {{ float_debian_dist }}-security main contrib non-free
+deb http://deb.debian.org/debian {{ float_debian_dist }} {{ apt_debian_components | join(' ') }}
+deb http://deb.debian.org/debian {{ float_debian_dist }}-updates {{ apt_debian_components | join(' ') }}
+deb http://security.debian.org/debian-security {{ float_debian_dist }}-security {{ apt_debian_components | join(' ') }}
 {% endif %}