summary refs log tree commit diff
diff options
context:
space:
mode:
authorAlyssa Ross <hi@alyssa.is>2023-07-18 17:21:58 +0000
committerAlyssa Ross <hi@alyssa.is>2024-01-19 12:02:09 +0100
commitb31524798b867e2694e11824eb59508eec353e1e (patch)
treea09c81396bff71d3e9634017fa6909f7a7b8024d
parent324d50e8af0862ddb0772d7b04d6725a66ebdeb4 (diff)
downloadspectrum-b31524798b867e2694e11824eb59508eec353e1e.tar
spectrum-b31524798b867e2694e11824eb59508eec353e1e.tar.gz
spectrum-b31524798b867e2694e11824eb59508eec353e1e.tar.bz2
spectrum-b31524798b867e2694e11824eb59508eec353e1e.tar.lz
spectrum-b31524798b867e2694e11824eb59508eec353e1e.tar.xz
spectrum-b31524798b867e2694e11824eb59508eec353e1e.tar.zst
spectrum-b31524798b867e2694e11824eb59508eec353e1e.zip
host/rootfs: switch from Weston to cosmic-comp cosmic
Using Weston was always intended to be temporary — it's not designed
to be a full-featured desktop compositor, and the choice of Weston in
Spectrum was partially made to make it obvious that the compositor
would likely be swapped out later.

COSMIC is aligned with Spectrum in that it's written in a memory-safe
language, and upstream is open to adding customisation points to allow
for things we might want to do differently in Spectrum, like have
custom window decorations.

The reason to make the change now is that otherwise we'd have to fix a
bug in Weston that manifests when running Krita under X11 via
wayland-proxy-virtwl[1], and it makes more sense to invest that effort
in switching compositor, now that COSMIC is at a point where it's
feasible to switch to.

[1]: https://gitlab.freedesktop.org/wayland/weston/-/issues/775

Signed-off-by: Alyssa Ross <hi@alyssa.is>
-rw-r--r--host/rootfs/Makefile42
-rw-r--r--host/rootfs/default.nix25
-rw-r--r--host/rootfs/etc/fonts/fonts.conf4
-rwxr-xr-xhost/rootfs/etc/s6-rc/cosmic-comp/data/check8
-rw-r--r--host/rootfs/etc/s6-rc/cosmic-comp/dependencies (renamed from host/rootfs/etc/s6-rc/weston/dependencies)0
-rw-r--r--host/rootfs/etc/s6-rc/cosmic-comp/notification-fd (renamed from host/rootfs/etc/s6-rc/weston/notification-fd)0
-rw-r--r--host/rootfs/etc/s6-rc/cosmic-comp/notification-fd.license (renamed from host/rootfs/etc/s6-rc/weston/notification-fd.license)0
-rw-r--r--host/rootfs/etc/s6-rc/cosmic-comp/run (renamed from host/rootfs/etc/s6-rc/weston/run)14
-rw-r--r--host/rootfs/etc/s6-rc/cosmic-comp/type (renamed from host/rootfs/etc/s6-rc/weston/type)0
-rw-r--r--host/rootfs/etc/s6-rc/cosmic-comp/type.license (renamed from host/rootfs/etc/s6-rc/weston/type.license)0
-rw-r--r--host/rootfs/etc/s6-rc/cosmic-panel/dependencies.d/cosmic-comp0
-rw-r--r--host/rootfs/etc/s6-rc/cosmic-panel/run20
-rw-r--r--host/rootfs/etc/s6-rc/cosmic-panel/type1
-rw-r--r--host/rootfs/etc/s6-rc/cosmic-panel/type.license2
-rw-r--r--host/rootfs/etc/s6-rc/ext-rc/contents2
-rw-r--r--host/rootfs/etc/s6-rc/ok-all/contents1
-rw-r--r--host/rootfs/etc/xdg/cosmic/com.system76.CosmicAppList/v1/favorites6
-rw-r--r--host/rootfs/etc/xdg/cosmic/com.system76.CosmicPanel.Dock/v1/anchor4
-rw-r--r--host/rootfs/etc/xdg/cosmic/com.system76.CosmicPanel.Dock/v1/border_radius4
-rw-r--r--host/rootfs/etc/xdg/cosmic/com.system76.CosmicPanel.Dock/v1/exclusive_zone4
-rw-r--r--host/rootfs/etc/xdg/cosmic/com.system76.CosmicPanel.Dock/v1/expand_to_edges4
-rw-r--r--host/rootfs/etc/xdg/cosmic/com.system76.CosmicPanel.Dock/v1/keyboard_interactivity4
-rw-r--r--host/rootfs/etc/xdg/cosmic/com.system76.CosmicPanel.Dock/v1/margin4
-rw-r--r--host/rootfs/etc/xdg/cosmic/com.system76.CosmicPanel.Dock/v1/name4
-rw-r--r--host/rootfs/etc/xdg/cosmic/com.system76.CosmicPanel.Dock/v1/opacity4
-rw-r--r--host/rootfs/etc/xdg/cosmic/com.system76.CosmicPanel.Dock/v1/plugins_center6
-rw-r--r--host/rootfs/etc/xdg/cosmic/com.system76.CosmicPanel.Dock/v1/size4
-rw-r--r--host/rootfs/etc/xdg/cosmic/com.system76.CosmicPanel.Panel/v1/border_radius4
-rw-r--r--host/rootfs/etc/xdg/cosmic/com.system76.CosmicPanel.Panel/v1/keyboard_interactivity4
-rw-r--r--host/rootfs/etc/xdg/cosmic/com.system76.CosmicPanel.Panel/v1/margin4
-rw-r--r--host/rootfs/etc/xdg/cosmic/com.system76.CosmicPanel.Panel/v1/name4
-rw-r--r--host/rootfs/etc/xdg/cosmic/com.system76.CosmicPanel.Panel/v1/opacity4
-rw-r--r--host/rootfs/etc/xdg/cosmic/com.system76.CosmicPanel.Panel/v1/padding4
-rw-r--r--host/rootfs/etc/xdg/cosmic/com.system76.CosmicPanel.Panel/v1/plugins_center6
-rw-r--r--host/rootfs/etc/xdg/cosmic/com.system76.CosmicPanel.Panel/v1/plugins_wings9
-rw-r--r--host/rootfs/etc/xdg/cosmic/com.system76.CosmicPanel.Panel/v1/size4
-rw-r--r--host/rootfs/etc/xdg/cosmic/com.system76.CosmicPanel.Panel/v1/spacing4
-rw-r--r--host/rootfs/etc/xdg/cosmic/com.system76.CosmicPanel/v1/entries7
-rwxr-xr-xhost/rootfs/etc/xdg/weston/autolaunch7
-rw-r--r--host/rootfs/etc/xdg/weston/weston.ini5
-rw-r--r--host/rootfs/usr/share/applications/org.spectrum_os.HostTerminal.desktop11
41 files changed, 200 insertions, 44 deletions
diff --git a/host/rootfs/Makefile b/host/rootfs/Makefile
index c5e467d..5bb5d96 100644
--- a/host/rootfs/Makefile
+++ b/host/rootfs/Makefile
@@ -37,12 +37,33 @@ FILES = \
 	etc/s6-linux-init/run-image/service/vmm/template/notification-fd \
 	etc/s6-linux-init/scripts/rc.init \
 	etc/shared-dir \
-	etc/xdg/weston/autolaunch \
-	etc/xdg/weston/weston.ini \
+	etc/xdg/cosmic/com.system76.CosmicAppList/v1/favorites \
+	etc/xdg/cosmic/com.system76.CosmicPanel.Dock/v1/anchor \
+	etc/xdg/cosmic/com.system76.CosmicPanel.Dock/v1/border_radius \
+	etc/xdg/cosmic/com.system76.CosmicPanel.Dock/v1/exclusive_zone \
+	etc/xdg/cosmic/com.system76.CosmicPanel.Dock/v1/expand_to_edges \
+	etc/xdg/cosmic/com.system76.CosmicPanel.Dock/v1/keyboard_interactivity \
+	etc/xdg/cosmic/com.system76.CosmicPanel.Dock/v1/margin \
+	etc/xdg/cosmic/com.system76.CosmicPanel.Dock/v1/name \
+	etc/xdg/cosmic/com.system76.CosmicPanel.Dock/v1/opacity \
+	etc/xdg/cosmic/com.system76.CosmicPanel.Dock/v1/plugins_center \
+	etc/xdg/cosmic/com.system76.CosmicPanel.Dock/v1/size \
+	etc/xdg/cosmic/com.system76.CosmicPanel.Panel/v1/border_radius \
+	etc/xdg/cosmic/com.system76.CosmicPanel.Panel/v1/keyboard_interactivity \
+	etc/xdg/cosmic/com.system76.CosmicPanel.Panel/v1/margin \
+	etc/xdg/cosmic/com.system76.CosmicPanel.Panel/v1/name \
+	etc/xdg/cosmic/com.system76.CosmicPanel.Panel/v1/opacity \
+	etc/xdg/cosmic/com.system76.CosmicPanel.Panel/v1/padding \
+	etc/xdg/cosmic/com.system76.CosmicPanel.Panel/v1/plugins_center \
+	etc/xdg/cosmic/com.system76.CosmicPanel.Panel/v1/plugins_wings \
+	etc/xdg/cosmic/com.system76.CosmicPanel.Panel/v1/size \
+	etc/xdg/cosmic/com.system76.CosmicPanel.Panel/v1/spacing \
+	etc/xdg/cosmic/com.system76.CosmicPanel/v1/entries \
 	usr/bin/lsvm \
 	usr/bin/vm-console \
 	usr/bin/vm-start \
-	usr/bin/vm-stop
+	usr/bin/vm-stop \
+	usr/share/applications/org.spectrum_os.HostTerminal.desktop
 
 DIRS = \
 	dev \
@@ -59,6 +80,7 @@ DIRS = \
 	etc/s6-linux-init/run-image/service/vmm/template/data \
 	etc/s6-linux-init/run-image/service/vmm/template/env \
 	etc/s6-linux-init/run-image/vm \
+	etc/xdg/cosmic/com.system76.CosmicComp/v1 \
 	ext \
 	run \
 	proc \
@@ -101,6 +123,14 @@ S6_RC_FILES = \
 	etc/s6-rc/card0/up \
 	etc/s6-rc/core/type \
 	etc/s6-rc/core/up \
+	etc/s6-rc/cosmic-comp/data/check \
+	etc/s6-rc/cosmic-comp/dependencies \
+	etc/s6-rc/cosmic-comp/notification-fd \
+	etc/s6-rc/cosmic-comp/run \
+	etc/s6-rc/cosmic-comp/type \
+	etc/s6-rc/cosmic-panel/dependencies.d/cosmic-comp \
+	etc/s6-rc/cosmic-panel/run \
+	etc/s6-rc/cosmic-panel/type \
 	etc/s6-rc/ext-rc-init/dependencies \
 	etc/s6-rc/ext-rc-init/type \
 	etc/s6-rc/ext-rc-init/up \
@@ -119,11 +149,7 @@ S6_RC_FILES = \
 	etc/s6-rc/ok-all/contents \
 	etc/s6-rc/ok-all/type \
 	etc/s6-rc/static-nodes/type \
-	etc/s6-rc/static-nodes/up \
-	etc/s6-rc/weston/dependencies \
-	etc/s6-rc/weston/notification-fd \
-	etc/s6-rc/weston/type \
-	etc/s6-rc/weston/run
+	etc/s6-rc/static-nodes/up
 
 # s6-rc-compile's input is a directory, but that doesn't play nice
 # with Make, because it won't know to update if some file in the
diff --git a/host/rootfs/default.nix b/host/rootfs/default.nix
index c6664bd..e421d8a 100644
--- a/host/rootfs/default.nix
+++ b/host/rootfs/default.nix
@@ -8,8 +8,9 @@ pkgsStatic.callPackage (
 
 { start-vmm
 , lib, stdenvNoCC, nixos, runCommand, writeReferencesToFile, erofs-utils, s6-rc
-, busybox, cloud-hypervisor, cryptsetup, execline, e2fsprogs, jq, kmod
-, mdevd, s6, s6-linux-init, socat, util-linuxMinimal, virtiofsd, xorg
+, busybox, cloud-hypervisor, cryptsetup, execline, e2fsprogs, fira
+, hicolor-icon-theme, jq, kmod, mdevd, pop-icon-theme, s6, s6-linux-init, socat
+, util-linuxMinimal, virtiofsd, xorg
 }:
 
 let
@@ -28,15 +29,13 @@ let
       systemdLibs = final.libudev-zero;
       systemdMinimal = final.libudev-zero;
 
+      pulseaudio = super.pulseaudio.override {
+        useSystemd = false;
+      };
+
       seatd = super.seatd.override {
         systemdSupport = false;
       };
-
-      weston = super.weston.overrideAttrs ({ mesonFlags ? [], ... }: {
-        mesonFlags = mesonFlags ++ [
-          "-Dsystemd=false"
-        ];
-      });
     })
   );
 
@@ -70,7 +69,7 @@ let
         CONFIG_RMMOD n
       '';
     })
-  ] ++ (with pkgsGui; [ crosvm foot westonLite ]);
+  ] ++ (with pkgsGui; [ cosmic-comp cosmic-panel crosvm foot ]);
 
   nixosAllHardware = nixos ({ modulesPath, ... }: {
     imports = [ (modulesPath + "/profiles/all-hardware.nix") ];
@@ -84,9 +83,13 @@ let
 
   # Packages that should be fully linked into /usr,
   # (not just their bin/* files).
+  #
+  # FIXME: cosmic-applets could probably be static, if pulseaudio
+  # could be built statically.
+  # https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/issues/1089
   usrPackages = [
-    appvm kernel firmware pkgsGui.mesa.drivers pkgsGui.dejavu_fonts
-  ];
+    appvm kernel fira firmware foot hicolor-icon-theme pop-icon-theme
+  ] ++ (with pkgsGui; [ cosmic-applets mesa.drivers ]);
 
   packagesSysroot = runCommand "packages-sysroot" {
     nativeBuildInputs = [ xorg.lndir ];
diff --git a/host/rootfs/etc/fonts/fonts.conf b/host/rootfs/etc/fonts/fonts.conf
index 0dcde54..642020e 100644
--- a/host/rootfs/etc/fonts/fonts.conf
+++ b/host/rootfs/etc/fonts/fonts.conf
@@ -6,14 +6,14 @@
   <alias binding="same">
     <family>monospace</family>
     <prefer>
-      <family>DejaVu Sans Mono</family>
+      <family>Fira Mono</family>
     </prefer>
   </alias>
 
   <alias binding="same">
     <family>sans-serif</family>
     <prefer>
-      <family>DejaVu Sans</family>
+      <family>Fira Sans</family>
     </prefer>
   </alias>
 
diff --git a/host/rootfs/etc/s6-rc/cosmic-comp/data/check b/host/rootfs/etc/s6-rc/cosmic-comp/data/check
new file mode 100755
index 0000000..d8bf381
--- /dev/null
+++ b/host/rootfs/etc/s6-rc/cosmic-comp/data/check
@@ -0,0 +1,8 @@
+#!/bin/execlineb -P
+# SPDX-License-Identifier: EUPL-1.2+
+# SPDX-FileCopyrightText: 2023 Alyssa Ross <hi@alyssa.is>
+
+importas -iu runtime_dir XDG_RUNTIME_DIR
+redirfd -w 2 /dev/null
+s6-ipcclient ${runtime_dir}/wayland-1
+true
diff --git a/host/rootfs/etc/s6-rc/weston/dependencies b/host/rootfs/etc/s6-rc/cosmic-comp/dependencies
index 8470c0f..8470c0f 100644
--- a/host/rootfs/etc/s6-rc/weston/dependencies
+++ b/host/rootfs/etc/s6-rc/cosmic-comp/dependencies
diff --git a/host/rootfs/etc/s6-rc/weston/notification-fd b/host/rootfs/etc/s6-rc/cosmic-comp/notification-fd
index 00750ed..00750ed 100644
--- a/host/rootfs/etc/s6-rc/weston/notification-fd
+++ b/host/rootfs/etc/s6-rc/cosmic-comp/notification-fd
diff --git a/host/rootfs/etc/s6-rc/weston/notification-fd.license b/host/rootfs/etc/s6-rc/cosmic-comp/notification-fd.license
index c49c11b..c49c11b 100644
--- a/host/rootfs/etc/s6-rc/weston/notification-fd.license
+++ b/host/rootfs/etc/s6-rc/cosmic-comp/notification-fd.license
diff --git a/host/rootfs/etc/s6-rc/weston/run b/host/rootfs/etc/s6-rc/cosmic-comp/run
index df2d74e..af66715 100644
--- a/host/rootfs/etc/s6-rc/weston/run
+++ b/host/rootfs/etc/s6-rc/cosmic-comp/run
@@ -1,6 +1,6 @@
 #!/bin/execlineb -P
 # SPDX-License-Identifier: EUPL-1.2+
-# SPDX-FileCopyrightText: 2021 Alyssa Ross <hi@alyssa.is>
+# SPDX-FileCopyrightText: 2021, 2023 Alyssa Ross <hi@alyssa.is>
 
 foreground { mkdir /run/user }
 foreground {
@@ -9,15 +9,9 @@ foreground {
 }
 unexport ?
 
-backtick USER { id -un }
-backtick HOME {
-  importas -i user USER
-  homeof $user
-}
-
+export XDG_CONFIG_HOME /etc/xdg
 export XDG_RUNTIME_DIR /run/user/0
 redirfd -r 0 /dev/tty1
 
-importas -i home HOME
-cd $home
-weston
+s6-notifyoncheck -d
+cosmic-comp
diff --git a/host/rootfs/etc/s6-rc/weston/type b/host/rootfs/etc/s6-rc/cosmic-comp/type
index 5883cff..5883cff 100644
--- a/host/rootfs/etc/s6-rc/weston/type
+++ b/host/rootfs/etc/s6-rc/cosmic-comp/type
diff --git a/host/rootfs/etc/s6-rc/weston/type.license b/host/rootfs/etc/s6-rc/cosmic-comp/type.license
index c49c11b..c49c11b 100644
--- a/host/rootfs/etc/s6-rc/weston/type.license
+++ b/host/rootfs/etc/s6-rc/cosmic-comp/type.license
diff --git a/host/rootfs/etc/s6-rc/cosmic-panel/dependencies.d/cosmic-comp b/host/rootfs/etc/s6-rc/cosmic-panel/dependencies.d/cosmic-comp
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/host/rootfs/etc/s6-rc/cosmic-panel/dependencies.d/cosmic-comp
diff --git a/host/rootfs/etc/s6-rc/cosmic-panel/run b/host/rootfs/etc/s6-rc/cosmic-panel/run
new file mode 100644
index 0000000..73397cd
--- /dev/null
+++ b/host/rootfs/etc/s6-rc/cosmic-panel/run
@@ -0,0 +1,20 @@
+#!/bin/execlineb -P
+# SPDX-License-Identifier: EUPL-1.2+
+# SPDX-FileCopyrightText: 2021, 2023 Alyssa Ross <hi@alyssa.is>
+
+# Really cosmic-panel should look here by default, but it doesn't
+# properly implement the XDG Base Directories spec.
+export XDG_CONFIG_HOME /etc/xdg
+
+export XDG_RUNTIME_DIR /run/user/0
+export WAYLAND_DISPLAY wayland-1
+
+backtick USER { id -un }
+backtick HOME {
+  importas -i user USER
+  homeof $user
+}
+
+importas -i home HOME
+cd $home
+cosmic-panel
diff --git a/host/rootfs/etc/s6-rc/cosmic-panel/type b/host/rootfs/etc/s6-rc/cosmic-panel/type
new file mode 100644
index 0000000..5883cff
--- /dev/null
+++ b/host/rootfs/etc/s6-rc/cosmic-panel/type
@@ -0,0 +1 @@
+longrun
diff --git a/host/rootfs/etc/s6-rc/cosmic-panel/type.license b/host/rootfs/etc/s6-rc/cosmic-panel/type.license
new file mode 100644
index 0000000..a941ca4
--- /dev/null
+++ b/host/rootfs/etc/s6-rc/cosmic-panel/type.license
@@ -0,0 +1,2 @@
+SPDX-License-Identifier: CC0-1.0
+SPDX-FileCopyrightText: 2023 Alyssa Ross <hi@alyssa.is>
diff --git a/host/rootfs/etc/s6-rc/ext-rc/contents b/host/rootfs/etc/s6-rc/ext-rc/contents
index 288421f..1417ac7 100644
--- a/host/rootfs/etc/s6-rc/ext-rc/contents
+++ b/host/rootfs/etc/s6-rc/ext-rc/contents
@@ -1,6 +1,6 @@
 # SPDX-License-Identifier: CC0-1.0
 # SPDX-FileCopyrightText: 2021 Alyssa Ross <hi@alyssa.is>
 #
+cosmic-comp
 ext-rc-init
 static-nodes
-weston
diff --git a/host/rootfs/etc/s6-rc/ok-all/contents b/host/rootfs/etc/s6-rc/ok-all/contents
index dfe7022..b1c3d7c 100644
--- a/host/rootfs/etc/s6-rc/ok-all/contents
+++ b/host/rootfs/etc/s6-rc/ok-all/contents
@@ -1,5 +1,6 @@
 # SPDX-License-Identifier: CC0-1.0
 # SPDX-FileCopyrightText: 2021 Alyssa Ross <hi@alyssa.is>
 #
+cosmic-panel
 ext-rc
 mdevd-coldplug
diff --git a/host/rootfs/etc/xdg/cosmic/com.system76.CosmicAppList/v1/favorites b/host/rootfs/etc/xdg/cosmic/com.system76.CosmicAppList/v1/favorites
new file mode 100644
index 0000000..c197f5c
--- /dev/null
+++ b/host/rootfs/etc/xdg/cosmic/com.system76.CosmicAppList/v1/favorites
@@ -0,0 +1,6 @@
+// SPDX-FileCopyrightText: 2023 Alyssa Ross <hi@alyssa.is>
+// SPDX-License-Identifier: CC0-1.0
+
+[
+    "org.spectrum_os.HostTerminal",
+]
diff --git a/host/rootfs/etc/xdg/cosmic/com.system76.CosmicPanel.Dock/v1/anchor b/host/rootfs/etc/xdg/cosmic/com.system76.CosmicPanel.Dock/v1/anchor
new file mode 100644
index 0000000..9d8289d
--- /dev/null
+++ b/host/rootfs/etc/xdg/cosmic/com.system76.CosmicPanel.Dock/v1/anchor
@@ -0,0 +1,4 @@
+// SPDX-FileCopyrightText: 2023 Alyssa Ross <hi@alyssa.is>
+// SPDX-License-Identifier: CC0-1.0
+
+Bottom
diff --git a/host/rootfs/etc/xdg/cosmic/com.system76.CosmicPanel.Dock/v1/border_radius b/host/rootfs/etc/xdg/cosmic/com.system76.CosmicPanel.Dock/v1/border_radius
new file mode 100644
index 0000000..6c134b6
--- /dev/null
+++ b/host/rootfs/etc/xdg/cosmic/com.system76.CosmicPanel.Dock/v1/border_radius
@@ -0,0 +1,4 @@
+// SPDX-FileCopyrightText: 2023 Alyssa Ross <hi@alyssa.is>
+// SPDX-License-Identifier: CC0-1.0
+
+12
diff --git a/host/rootfs/etc/xdg/cosmic/com.system76.CosmicPanel.Dock/v1/exclusive_zone b/host/rootfs/etc/xdg/cosmic/com.system76.CosmicPanel.Dock/v1/exclusive_zone
new file mode 100644
index 0000000..649e8da
--- /dev/null
+++ b/host/rootfs/etc/xdg/cosmic/com.system76.CosmicPanel.Dock/v1/exclusive_zone
@@ -0,0 +1,4 @@
+// SPDX-FileCopyrightText: 2023 Alyssa Ross <hi@alyssa.is>
+// SPDX-License-Identifier: CC0-1.0
+
+false
diff --git a/host/rootfs/etc/xdg/cosmic/com.system76.CosmicPanel.Dock/v1/expand_to_edges b/host/rootfs/etc/xdg/cosmic/com.system76.CosmicPanel.Dock/v1/expand_to_edges
new file mode 100644
index 0000000..649e8da
--- /dev/null
+++ b/host/rootfs/etc/xdg/cosmic/com.system76.CosmicPanel.Dock/v1/expand_to_edges
@@ -0,0 +1,4 @@
+// SPDX-FileCopyrightText: 2023 Alyssa Ross <hi@alyssa.is>
+// SPDX-License-Identifier: CC0-1.0
+
+false
diff --git a/host/rootfs/etc/xdg/cosmic/com.system76.CosmicPanel.Dock/v1/keyboard_interactivity b/host/rootfs/etc/xdg/cosmic/com.system76.CosmicPanel.Dock/v1/keyboard_interactivity
new file mode 100644
index 0000000..8c8f42e
--- /dev/null
+++ b/host/rootfs/etc/xdg/cosmic/com.system76.CosmicPanel.Dock/v1/keyboard_interactivity
@@ -0,0 +1,4 @@
+// SPDX-FileCopyrightText: 2023 Alyssa Ross <hi@alyssa.is>
+// SPDX-License-Identifier: CC0-1.0
+
+OnDemand
diff --git a/host/rootfs/etc/xdg/cosmic/com.system76.CosmicPanel.Dock/v1/margin b/host/rootfs/etc/xdg/cosmic/com.system76.CosmicPanel.Dock/v1/margin
new file mode 100644
index 0000000..975df65
--- /dev/null
+++ b/host/rootfs/etc/xdg/cosmic/com.system76.CosmicPanel.Dock/v1/margin
@@ -0,0 +1,4 @@
+// SPDX-FileCopyrightText: 2023 Alyssa Ross <hi@alyssa.is>
+// SPDX-License-Identifier: CC0-1.0
+
+0
diff --git a/host/rootfs/etc/xdg/cosmic/com.system76.CosmicPanel.Dock/v1/name b/host/rootfs/etc/xdg/cosmic/com.system76.CosmicPanel.Dock/v1/name
new file mode 100644
index 0000000..765e267
--- /dev/null
+++ b/host/rootfs/etc/xdg/cosmic/com.system76.CosmicPanel.Dock/v1/name
@@ -0,0 +1,4 @@
+// SPDX-FileCopyrightText: 2023 Alyssa Ross <hi@alyssa.is>
+// SPDX-License-Identifier: CC0-1.0
+
+"Dock"
diff --git a/host/rootfs/etc/xdg/cosmic/com.system76.CosmicPanel.Dock/v1/opacity b/host/rootfs/etc/xdg/cosmic/com.system76.CosmicPanel.Dock/v1/opacity
new file mode 100644
index 0000000..f85d351
--- /dev/null
+++ b/host/rootfs/etc/xdg/cosmic/com.system76.CosmicPanel.Dock/v1/opacity
@@ -0,0 +1,4 @@
+// SPDX-FileCopyrightText: 2023 Alyssa Ross <hi@alyssa.is>
+// SPDX-License-Identifier: CC0-1.0
+
+0.9
diff --git a/host/rootfs/etc/xdg/cosmic/com.system76.CosmicPanel.Dock/v1/plugins_center b/host/rootfs/etc/xdg/cosmic/com.system76.CosmicPanel.Dock/v1/plugins_center
new file mode 100644
index 0000000..7c9eaff
--- /dev/null
+++ b/host/rootfs/etc/xdg/cosmic/com.system76.CosmicPanel.Dock/v1/plugins_center
@@ -0,0 +1,6 @@
+// SPDX-FileCopyrightText: 2023 Alyssa Ross <hi@alyssa.is>
+// SPDX-License-Identifier: CC0-1.0
+
+Some([
+    "com.system76.CosmicAppList",
+])
diff --git a/host/rootfs/etc/xdg/cosmic/com.system76.CosmicPanel.Dock/v1/size b/host/rootfs/etc/xdg/cosmic/com.system76.CosmicPanel.Dock/v1/size
new file mode 100644
index 0000000..09edcd5
--- /dev/null
+++ b/host/rootfs/etc/xdg/cosmic/com.system76.CosmicPanel.Dock/v1/size
@@ -0,0 +1,4 @@
+// SPDX-FileCopyrightText: 2023 Alyssa Ross <hi@alyssa.is>
+// SPDX-License-Identifier: CC0-1.0
+
+L
diff --git a/host/rootfs/etc/xdg/cosmic/com.system76.CosmicPanel.Panel/v1/border_radius b/host/rootfs/etc/xdg/cosmic/com.system76.CosmicPanel.Panel/v1/border_radius
new file mode 100644
index 0000000..975df65
--- /dev/null
+++ b/host/rootfs/etc/xdg/cosmic/com.system76.CosmicPanel.Panel/v1/border_radius
@@ -0,0 +1,4 @@
+// SPDX-FileCopyrightText: 2023 Alyssa Ross <hi@alyssa.is>
+// SPDX-License-Identifier: CC0-1.0
+
+0
diff --git a/host/rootfs/etc/xdg/cosmic/com.system76.CosmicPanel.Panel/v1/keyboard_interactivity b/host/rootfs/etc/xdg/cosmic/com.system76.CosmicPanel.Panel/v1/keyboard_interactivity
new file mode 100644
index 0000000..8c8f42e
--- /dev/null
+++ b/host/rootfs/etc/xdg/cosmic/com.system76.CosmicPanel.Panel/v1/keyboard_interactivity
@@ -0,0 +1,4 @@
+// SPDX-FileCopyrightText: 2023 Alyssa Ross <hi@alyssa.is>
+// SPDX-License-Identifier: CC0-1.0
+
+OnDemand
diff --git a/host/rootfs/etc/xdg/cosmic/com.system76.CosmicPanel.Panel/v1/margin b/host/rootfs/etc/xdg/cosmic/com.system76.CosmicPanel.Panel/v1/margin
new file mode 100644
index 0000000..975df65
--- /dev/null
+++ b/host/rootfs/etc/xdg/cosmic/com.system76.CosmicPanel.Panel/v1/margin
@@ -0,0 +1,4 @@
+// SPDX-FileCopyrightText: 2023 Alyssa Ross <hi@alyssa.is>
+// SPDX-License-Identifier: CC0-1.0
+
+0
diff --git a/host/rootfs/etc/xdg/cosmic/com.system76.CosmicPanel.Panel/v1/name b/host/rootfs/etc/xdg/cosmic/com.system76.CosmicPanel.Panel/v1/name
new file mode 100644
index 0000000..ddea5ce
--- /dev/null
+++ b/host/rootfs/etc/xdg/cosmic/com.system76.CosmicPanel.Panel/v1/name
@@ -0,0 +1,4 @@
+// SPDX-FileCopyrightText: 2023 Alyssa Ross <hi@alyssa.is>
+// SPDX-License-Identifier: CC0-1.0
+
+"Panel"
diff --git a/host/rootfs/etc/xdg/cosmic/com.system76.CosmicPanel.Panel/v1/opacity b/host/rootfs/etc/xdg/cosmic/com.system76.CosmicPanel.Panel/v1/opacity
new file mode 100644
index 0000000..f85d351
--- /dev/null
+++ b/host/rootfs/etc/xdg/cosmic/com.system76.CosmicPanel.Panel/v1/opacity
@@ -0,0 +1,4 @@
+// SPDX-FileCopyrightText: 2023 Alyssa Ross <hi@alyssa.is>
+// SPDX-License-Identifier: CC0-1.0
+
+0.9
diff --git a/host/rootfs/etc/xdg/cosmic/com.system76.CosmicPanel.Panel/v1/padding b/host/rootfs/etc/xdg/cosmic/com.system76.CosmicPanel.Panel/v1/padding
new file mode 100644
index 0000000..659fe5e
--- /dev/null
+++ b/host/rootfs/etc/xdg/cosmic/com.system76.CosmicPanel.Panel/v1/padding
@@ -0,0 +1,4 @@
+// SPDX-FileCopyrightText: 2023 Alyssa Ross <hi@alyssa.is>
+// SPDX-License-Identifier: CC0-1.0
+
+2
diff --git a/host/rootfs/etc/xdg/cosmic/com.system76.CosmicPanel.Panel/v1/plugins_center b/host/rootfs/etc/xdg/cosmic/com.system76.CosmicPanel.Panel/v1/plugins_center
new file mode 100644
index 0000000..a656693
--- /dev/null
+++ b/host/rootfs/etc/xdg/cosmic/com.system76.CosmicPanel.Panel/v1/plugins_center
@@ -0,0 +1,6 @@
+// SPDX-FileCopyrightText: 2023 Alyssa Ross <hi@alyssa.is>
+// SPDX-License-Identifier: CC0-1.0
+
+Some([
+    "com.system76.CosmicAppletTime",
+])
diff --git a/host/rootfs/etc/xdg/cosmic/com.system76.CosmicPanel.Panel/v1/plugins_wings b/host/rootfs/etc/xdg/cosmic/com.system76.CosmicPanel.Panel/v1/plugins_wings
new file mode 100644
index 0000000..2078e05
--- /dev/null
+++ b/host/rootfs/etc/xdg/cosmic/com.system76.CosmicPanel.Panel/v1/plugins_wings
@@ -0,0 +1,9 @@
+// SPDX-FileCopyrightText: 2023 Alyssa Ross <hi@alyssa.is>
+// SPDX-License-Identifier: CC0-1.0
+
+Some((
+    [
+        "com.system76.CosmicAppletWorkspaces",
+    ],
+    [],
+))
diff --git a/host/rootfs/etc/xdg/cosmic/com.system76.CosmicPanel.Panel/v1/size b/host/rootfs/etc/xdg/cosmic/com.system76.CosmicPanel.Panel/v1/size
new file mode 100644
index 0000000..ada95c5
--- /dev/null
+++ b/host/rootfs/etc/xdg/cosmic/com.system76.CosmicPanel.Panel/v1/size
@@ -0,0 +1,4 @@
+// SPDX-FileCopyrightText: 2023 Alyssa Ross <hi@alyssa.is>
+// SPDX-License-Identifier: CC0-1.0
+
+XS
diff --git a/host/rootfs/etc/xdg/cosmic/com.system76.CosmicPanel.Panel/v1/spacing b/host/rootfs/etc/xdg/cosmic/com.system76.CosmicPanel.Panel/v1/spacing
new file mode 100644
index 0000000..659fe5e
--- /dev/null
+++ b/host/rootfs/etc/xdg/cosmic/com.system76.CosmicPanel.Panel/v1/spacing
@@ -0,0 +1,4 @@
+// SPDX-FileCopyrightText: 2023 Alyssa Ross <hi@alyssa.is>
+// SPDX-License-Identifier: CC0-1.0
+
+2
diff --git a/host/rootfs/etc/xdg/cosmic/com.system76.CosmicPanel/v1/entries b/host/rootfs/etc/xdg/cosmic/com.system76.CosmicPanel/v1/entries
new file mode 100644
index 0000000..07b08d8
--- /dev/null
+++ b/host/rootfs/etc/xdg/cosmic/com.system76.CosmicPanel/v1/entries
@@ -0,0 +1,7 @@
+// SPDX-FileCopyrightText: 2023 Alyssa Ross <hi@alyssa.is>
+// SPDX-License-Identifier: CC0-1.0
+
+[
+    "Panel",
+    "Dock",
+]
diff --git a/host/rootfs/etc/xdg/weston/autolaunch b/host/rootfs/etc/xdg/weston/autolaunch
deleted file mode 100755
index 7a85ae1..0000000
--- a/host/rootfs/etc/xdg/weston/autolaunch
+++ /dev/null
@@ -1,7 +0,0 @@
-#!/bin/execlineb -P
-# SPDX-License-Identifier: EUPL-1.2+
-# SPDX-FileCopyrightText: 2021 Alyssa Ross <hi@alyssa.is>
-
-# Notify readiness
-fdmove 1 3
-echo
diff --git a/host/rootfs/etc/xdg/weston/weston.ini b/host/rootfs/etc/xdg/weston/weston.ini
deleted file mode 100644
index cdf8666..0000000
--- a/host/rootfs/etc/xdg/weston/weston.ini
+++ /dev/null
@@ -1,5 +0,0 @@
-# SPDX-License-Identifier: CC0-1.0
-# SPDX-FileCopyrightText: 2021 Alyssa Ross <hi@alyssa.is>
-
-[autolaunch]
-path=/etc/xdg/weston/autolaunch
diff --git a/host/rootfs/usr/share/applications/org.spectrum_os.HostTerminal.desktop b/host/rootfs/usr/share/applications/org.spectrum_os.HostTerminal.desktop
new file mode 100644
index 0000000..551821b
--- /dev/null
+++ b/host/rootfs/usr/share/applications/org.spectrum_os.HostTerminal.desktop
@@ -0,0 +1,11 @@
+# SPDX-FileCopyrightText: 2023 Alyssa Ross <hi@alyssa.is>
+# SPDX-License-Identifier: CC0-1.0
+
+[Desktop Entry]
+Type=Application
+Name=Host Terminal
+Icon=foot
+# FIXME: can remove -c /dev/null with https://codeberg.org/dnkl/foot/pulls/1495
+# FIXME: can use -T %c when cosmic-app-list implements %c.
+Exec=foot -c /dev/null -a org.spectrum_os.HostTerminal -T "Host Terminal"
+StartupWMClass=foot