I apologise if this has been documented already, but I’m wanting to know if my SculptOS customisations can survive across updates? Would it be as simple as backing up my /config/managed/deploy to some external media then restoring it after the upgrade?
Taken from the Sculpt 25.10 documentation:
It is possible to make any customization of the config file system permanent by copying the modified files to a directory named
config/<VERSION>on a persistent file system where<VERSION>corresponds to the Sculpt version number as found in the/VERSIONfile. Each time this file system is selected for “Use”, those files will be automatically copied to the in-memory config file system.
The most important customization is the system composition, usually created via the
+menu. To make it permanent, copy the current state of/config/managed/deployto /<DISK>/config/<VERSION>/deploywhere<DISK>corresponds to your Sculpt partition. This deploy configuration will take effect whenever the Sculpt partition is selected for “Use”.
Hope this answers your question.
Well yes, sort of. I’ve tried to rename my config version from 24.10 to 25.10 and it recognises the deploy config, but a lot of component repositories are hard coded which I believe is causing things to break. Same thing happens with my nic router configuration file.
Additionally I get warnings about needing to use the shared file system however this should be defined in my deploy file.
I’ll investigate further tonight and share my configuration files.
What is the easiest way to upload text files from within Sculpt? I’m a bit lost without curl
A mechanism that updates the stored configuration automatically (or even aids the user in a way similar to sysmerge(8) on some BSDs) when upgrading to a new release is yet to be realised. I sense the demand for such a thing rises.
We try to keep the service configurations, e.g. event_filter or nic_router, compatible and in those cases where changes are necessary note them in the documentation.
However, the versions in the deploy and launcher files have to be updated manually at the moment. Depending on the amount that can be cumbersome.
Updating all the index files and then replacing the pkg string either using the system shell or inspect window in vim would be one way with the readily available tools.
(I’ve cooked up and used a shell script that uses grep and sed to perform this task in the past.)
@jschlatow ported curl a while ago using Goa - maybe there is pkg that one can deploy around somewhere.
The easiest is to install the unix_shell runtime from my depot. You may also find details about the curl port in the corresponding article on genodians.org.
I’d be curious to see the script if your willing to share it.
Nevertheless, I’ve attempted to modify the deploy file with updated url’s for the repositories in question, but it’s failing to load anything under /ahci-0.3/config/25.10/deploy (below)
<config arch="x86_64"> <common_routes>
<service name="ROM" label_last="ld.lib.so"> <parent/> </service>
<service name="CPU"> <parent/> </service>
<service name="PD"> <parent/> </service>
<service name="LOG"> <parent/> </service>
<service name="Timer"> <parent/> </service>
</common_routes>
<start name="recall_fs"/>
<start name="black_hole"/>
<start name="system_shell" version="2" priority="-2" pkg="genodelabs/pkg/system_shell/2025-11-20">
<route>
<service name="Gui"> <child name="wm"/> </service>
<service name="File_system" label="config"> <parent label="config"/> </service>
<service name="File_system" label="report"> <parent label="report"/> </service>
<service name="File_system" label="target"> <child name="default_fs_rw"/> </service>
<service name="File_system" label="fonts"> <child name="fonts_fs"/> </service>
<service name="ROM" label="vimrc"> <parent label="config -> vimrc"/> </service>
<service name="ROM" label="clipboard"> <child name="wm"/> </service>
<service name="Report" label="clipboard"> <child name="wm"/> </service>
<service name="RM"> <parent/> </service>
</route>
</start>
<start name="system_shell.2" version="2" priority="-2" pkg="genodelabs/pkg/system_shell/2025-11-20">
<route>
<service name="Gui"> <child name="wm"/> </service>
<service name="File_system" label="config"> <parent label="config"/> </service>
<service name="File_system" label="report"> <parent label="report"/> </service>
<service name="File_system" label="target"> <child name="default_fs_rw"/> </service>
<service name="File_system" label="fonts"> <child name="fonts_fs"/> </service>
<service name="ROM" label="vimrc"> <parent label="config -> vimrc"/> </service>
<service name="ROM" label="clipboard"> <child name="wm"/> </service>
<service name="Report" label="clipboard"> <child name="wm"/> </service>
<service name="RM"> <parent/> </service>
</route>
</start>
<start name="window_layouter" priority="-1" pkg="genodelabs/pkg/window_layouter/2025-11-20">
<route>
<service name="Gui"> <child name="wm"/> </service>
<service name="ROM" label="window_list"> <child name="wm"/> </service>
<service name="ROM" label="focus_request"> <child name="wm"/> </service>
<service name="ROM" label="hover"> <child name="wm"/> </service>
<service name="ROM" label="decorator_margins"> <child name="wm"/> </service>
<service name="Report"> <child name="wm"/> </service>
<service name="File_system" label="recall">
<child name="recall_fs"/>
</service>
</route>
</start>
<start name="wm" priority="-1" pkg="genodelabs/pkg/wm/2025-11-20">
<route>
<service name="Gui" label="focus"> <parent label="focus"/> </service>
<service name="Gui"> <parent/> </service>
<service name="Report" label_last="shape"> <parent/> </service>
<service name="Report" label_last="clipboard"> <parent/> </service>
<service name="ROM" label_last="clipboard"> <parent/> </service>
</route>
</start>
<start name="fonts_fs" priority="-2" pkg="genodelabs/pkg/fonts_fs/2025-11-20">
<route>
<service name="ROM" label="config">
<parent label="config -> managed/fonts"/>
</service>
</route>
</start>
<start name="wm_backdrop" priority="-2" pkg="genodelabs/pkg/sticks_blue_backdrop/2025-11-20">
<route>
<service name="Gui"> <parent label="backdrop"/> </service>
</route>
<config>
<libc/>
<vfs>
<rom name="genode_logo.png"/>
<rom name="grid.png"/>
<rom name="sticks_blue.png"/>
</vfs>
<fill color="#223344" />
<image png="sticks_blue.png" scale="zoom" anchor="bottom_left" alpha="200"/>
<image png="grid.png" tiled="yes" alpha="200" />
<image png="genode_logo.png" anchor="bottom_right" alpha="150"
xpos="-20" ypos="-20" />
</config>
</start>
<start name="mesa_gpu-intel" priority="-2" pkg="genodelabs/pkg/mesa_gpu-intel/2025-11-20">
<route>
<service name="RM">
<parent/>
</service>
</route>
</start>
<start name="screenshot" priority="-2" pkg="jschlatow/pkg/screenshot/2025-10-29">
<route>
<service name="Gui">
<parent/>
</service>
<service name="Capture">
<parent label="global"/>
</service>
<service name="File_system" label="target">
<child name="shared_fs"/>
</service>
<service name="Rtc">
<child name="system_clock"/>
</service>
</route>
</start>
<start name="system_clock"/>
<start name="shared_fs"/>
<start name="mixer"/>
<start name="audio"/>
<start name="acpi_support"/>
<start name="motif_decorator" priority="-2" pkg="genodelabs/pkg/motif_decorator/2025-11-20">
<route>
<service name="ROM" label="window_layout">
<child name="wm"/>
</service>
<service name="ROM" label="pointer">
<child name="wm"/>
</service>
<service name="Report">
<child name="wm"/>
</service>
<service name="Gui">
<child name="wm"/>
</service>
</route>
</start>
<start name="falkon_qt6-jemalloc" version="1" priority="-2" pkg="cproc/pkg/falkon_qt6-jemalloc/2025-10-27">
<route>
<service name="Nic">
<child name="nic_router"/>
</service>
<service name="File_system" label="config">
<child name="default_fs_rw"/>
</service>
<service name="File_system" label="downloads">
<child name="shared_fs"/>
</service>
<service name="Gui">
<child name="wm"/>
</service>
<service name="Report" label="falkon -> shape">
<child name="wm"/>
</service>
<service name="Report" label="clipboard">
<child name="wm"/>
</service>
<service name="ROM" label_last="clipboard">
<parent/>
</service>
<service name="Rtc">
<child name="system_clock"/>
</service>
<service name="Record">
<child name="black_hole"/>
</service>
<service name="Play">
<child name="mixer"/>
</service>
<service name="Capture">
<child name="black_hole"/>
</service>
</route>
</start>
</config>
For now, I’ve just reverted the system back to Sculpt 24.10 where my system configurations still load.
Working /ahci-0.3/config/24.10/deploy configuration is below:
<config arch="x86_64"> <common_routes>
<service name="ROM" label_last="ld.lib.so"> <parent/> </service>
<service name="CPU"> <parent/> </service>
<service name="PD"> <parent/> </service>
<service name="LOG"> <parent/> </service>
<service name="Timer"> <parent/> </service>
</common_routes>
<start name="recall_fs"/>
<start name="black_hole"/>
<start name="system_shell" version="2" priority="-2" pkg="genodelabs/pkg/system_shell/2024-12-10">
<route>
<service name="Gui"> <child name="wm"/> </service>
<service name="File_system" label="config"> <parent label="config"/> </service>
<service name="File_system" label="report"> <parent label="report"/> </service>
<service name="File_system" label="target"> <child name="default_fs_rw"/> </service>
<service name="File_system" label="fonts"> <child name="fonts_fs"/> </service>
<service name="ROM" label="vimrc"> <parent label="config -> vimrc"/> </service>
<service name="ROM" label="clipboard"> <child name="wm"/> </service>
<service name="Report" label="clipboard"> <child name="wm"/> </service>
<service name="RM"> <parent/> </service>
</route>
</start>
<start name="system_shell.2" version="2" priority="-2" pkg="genodelabs/pkg/system_shell/2024-12-10">
<route>
<service name="Gui"> <child name="wm"/> </service>
<service name="File_system" label="config"> <parent label="config"/> </service>
<service name="File_system" label="report"> <parent label="report"/> </service>
<service name="File_system" label="target"> <child name="default_fs_rw"/> </service>
<service name="File_system" label="fonts"> <child name="fonts_fs"/> </service>
<service name="ROM" label="vimrc"> <parent label="config -> vimrc"/> </service>
<service name="ROM" label="clipboard"> <child name="wm"/> </service>
<service name="Report" label="clipboard"> <child name="wm"/> </service>
<service name="RM"> <parent/> </service>
</route>
</start>
<start name="window_layouter" priority="-1" pkg="genodelabs/pkg/window_layouter/2024-12-10">
<route>
<service name="Gui"> <child name="wm"/> </service>
<service name="ROM" label="window_list"> <child name="wm"/> </service>
<service name="ROM" label="focus_request"> <child name="wm"/> </service>
<service name="ROM" label="hover"> <child name="wm"/> </service>
<service name="ROM" label="decorator_margins"> <child name="wm"/> </service>
<service name="Report"> <child name="wm"/> </service>
<service name="File_system" label="recall">
<child name="recall_fs"/>
</service>
</route>
</start>
<start name="wm" priority="-1" pkg="genodelabs/pkg/wm/2024-12-10">
<route>
<service name="Gui" label="focus"> <parent label="focus"/> </service>
<service name="Gui"> <parent/> </service>
<service name="Report" label_last="shape"> <parent/> </service>
<service name="Report" label_last="clipboard"> <parent/> </service>
<service name="ROM" label_last="clipboard"> <parent/> </service>
</route>
</start>
<start name="fonts_fs" priority="-2" pkg="genodelabs/pkg/fonts_fs/2024-12-10">
<route>
<service name="ROM" label="config">
<parent label="config -> managed/fonts"/>
</service>
</route>
</start>
<start name="wm_backdrop" priority="-2" pkg="genodelabs/pkg/sticks_blue_backdrop/2024-12-10">
<route>
<service name="Gui"> <parent label="backdrop"/> </service>
</route>
<config>
<libc/>
<vfs>
<rom name="genode_logo.png"/>
<rom name="grid.png"/>
<rom name="sticks_blue.png"/>
</vfs>
<fill color="#223344" />
<image png="sticks_blue.png" scale="zoom" anchor="bottom_left" alpha="200"/>
<image png="grid.png" tiled="yes" alpha="200" />
<image png="genode_logo.png" anchor="bottom_right" alpha="150"
xpos="-20" ypos="-20" />
</config>
</start>
<start name="mesa_gpu-intel" priority="-2" pkg="genodelabs/pkg/mesa_gpu-intel/2024-12-10">
<route>
<service name="RM">
<parent/>
</service>
</route>
</start>
<start name="screenshot" priority="-2" pkg="jschlatow/pkg/screenshot/2024-10-29">
<route>
<service name="Gui">
<parent/>
</service>
<service name="Capture">
<parent label="global"/>
</service>
<service name="File_system" label="target">
<child name="shared_fs"/>
</service>
<service name="Rtc">
<child name="system_clock"/>
</service>
</route>
</start>
<start name="system_clock"/>
<start name="shared_fs"/>
<start name="mixer"/>
<start name="audio"/>
<start name="acpi_support"/>
<start name="motif_decorator" priority="-2" pkg="genodelabs/pkg/motif_decorator/2024-12-10">
<route>
<service name="ROM" label="window_layout">
<child name="wm"/>
</service>
<service name="ROM" label="pointer">
<child name="wm"/>
</service>
<service name="Report">
<child name="wm"/>
</service>
<service name="Gui">
<child name="wm"/>
</service>
</route>
</start>
<start name="falkon-jemalloc" version="1" priority="-2" pkg="cproc/pkg/falkon-jemalloc/2024-10-28">
<route>
<service name="Nic">
<child name="nic_router"/>
</service>
<service name="File_system" label="config">
<child name="default_fs_rw"/>
</service>
<service name="File_system" label="downloads">
<child name="shared_fs"/>
</service>
<service name="Gui">
<child name="wm"/>
</service>
<service name="Report" label="falkon -> shape">
<child name="wm"/>
</service>
<service name="Report" label="clipboard">
<child name="wm"/>
</service>
<service name="ROM" label_last="clipboard">
<parent/>
</service>
<service name="Rtc">
<child name="system_clock"/>
</service>
<service name="Record">
<child name="black_hole"/>
</service>
<service name="Play">
<child name="mixer"/>
</service>
<service name="Capture">
<child name="black_hole"/>
</service>
</route>
</start>
</config>
Please let me know if you spot anything that might be causing it to fail.
I am afraid I no longer have it at hand but it really wasn’t anything fancy. grep -o to extract path= from the index files combined with sed to clean the output up a bit. The same approach was used to extract pkg= from the deploy file and each launcher. Afterwards a brute-force mix-and-match operation was performed.
Nowadays one would probably script this in TCL and use tool/hid under the hood to alter the attributes.
Sorry, I overlooked that you upgraded from 24.10 to 25.10. As we changed how labeling works for some sessions (see label conventions in the 25.02 release notes) you have to alter the routes as well. And speaking of changes, the priorities (see kernel scheduling in the 25.08 release notes) are now also slightly different.
Maybe it’s best to start from scratch and use the GUI to assemble the deploy configuration.
Thanks. Yeah, I bent back to 25.10 later after posting that comment and decided to just build it from scratch as there wasn’t much going on anyway – Just a browser and a couple of shells.
However, I’ve forgotten how to set which virtual workspace each component spawns into – which config file defines this? It’s been a while since I tinkered with Sculpt and everything I once knew has now vanished from memory ![]()
The rules file is normally stored in the recall_fs, e.g, /rw/recall/window_layouter/rules/25.10 from within the system_shell.