frametop

Profiles

Profiles are built: Display Settings, ft-layout, each profile’s launcher entry, and the input relay’s profile:NAME action open them, and the desktop can start in one.

A profile is a named layout that also opens apps. It holds:

So a “Work” profile can put three screens around you with a browser, two terminals, and an editor on them, and a “Couch” profile can hide every screen and float one video player in front of you.

Decisions

# Question Decision
1 Profiles and named layouts One list. Named layouts grow into profiles; a layout saved before profiles existed is a profile with no apps and every screen shown
2 Making one Capture what’s open: the screens and every app’s windows. Display Settings lists a profile’s apps, so one can be removed. No editor beyond that
3 Apps with several windows One entry per window. The app is launched once; when its first window shows up, it’s launched again for each window still missing. A browser that restores its own windows gets launched once, a terminal twice
4 What’s recorded of an app Its desktop file name, or its command line if it has none. Not what it had open: tabs, files, and folders are left to the app’s own restore
5 Switching while apps are open Additive: launch what’s missing, move the windows that match into place, leave the rest alone. Nothing is ever closed
6 Saving changes Only on an explicit save. Moving things after switching doesn’t change the profile
7 Starting one Four ways: a default profile when the desktop starts, Display Settings, a launcher entry for each profile, and a mappable action
8 Plasma’s session restore Off in the Frametop session, so a profile is the only thing that reopens apps
9 Screen count and resolution Not part of a profile. They’re global, because changing them restarts the desktop, which closes every window

Where profiles live

~/.config/frametop-layout.json keeps its layouts as they are ({"Work": [screen places]}), so older copies of ft-layout still read it. What a profile adds goes in a parallel profiles map under the same names:

"layouts":  {"Work": [{"pos": ..., "face": ..., "roll": ..., "metres": ..., "curve": ..., "pin": ...}, ...]},
"profiles": {"Work": {"hidden": [3],
                      "windows": [
                        {"app": "org.kde.konsole", "screen": 2, "rect": [40, 60, 1200, 800], "maximized": false},
                        {"app": "com.brave.Browser", "screen": 1, "maximized": true},
                        {"cmd": ["/opt/tool/run"], "class": "tool", "screen": 1, "rect": [...]},
                        {"app": "org.kde.dolphin", "float": {"rel": [12 numbers], "pixels": [1400, 900],
                                                             "scale": 1.2, "mpp": 0.00097}}]}},
"default_profile": "Work"

How it works