Делаю автонастройку рабочего места с DE KDE 5, пока в виде скрипта, потом планирую перевести на Ansible.
Дошла очередь до настройки виджетов на рабочем столе, и тут я выпал в осадок, как сделали конфигурационный файл. ИЧСХ, это не наследие былых времён, а относительно недавно в который раз переписанная среда. В общем, вместо красивого и лаконичного декларативного описания, с нормальными иерархиями, конфигурационный файл виджетов сделан в формате INI и выглядит так:
[ActionPlugins][0]
MidButton;NoModifier=org.kde.paste
RightButton;NoModifier=org.kde.contextmenu
wheel:Vertical;NoModifier=org.kde.switchdesktop
[ActionPlugins][1]
RightButton;NoModifier=org.kde.contextmenu
[Containments][1]
activityId=5aea47af-243c-44ed-8464-71579ca4509f
formfactor=0
immutability=1
lastScreen=0
location=0
plugin=org.kde.plasma.folder
wallpaperplugin=org.kde.image
[Containments][1][Configuration]
PreloadWeight=0
[Containments][1][Wallpaper][org.kde.image][General]
Image=DebianTheme
[Containments][14][General]
extraItems=org.kde.plasma.notifications,org.kde.plasma.networkmanagement,org.kde.discovernotifier,org.kde.plasma.devicenotifier,org.kde.plasma.mediacontroller,org.kde.plasma.battery
knownItems=org.kde.plasma.notifications,org.kde.plasma.volume,org.kde.kdeconnect,org.kde.plasma.networkmanagement,org.kde.plasma.clipboard,org.kde.discovernotifier,org.kde.plasma.devicenotifier,org.kde.plasma.keyboardindicator,org.kde.plasma.mediacontroller,org.kde.plasma.battery
showAllItems=true
[Containments][42]
activityId=
formfactor=2
immutability=1
lastScreen=0
location=4
plugin=org.kde.panel
wallpaperplugin=org.kde.image
[Containments][42][Applets][43][Configuration][General]
favoritesPortedToKAstats=true
[Containments][42][Applets][44]
immutability=1
plugin=org.kde.plasma.pager
[Containments][42][Applets][44][Configuration]
PreloadWeight=34
[Containments][42][Applets][45]
immutability=1
plugin=org.kde.plasma.taskmanager
[Containments][42][Applets][45][Configuration]
PreloadWeight=34
[Containments][42][Applets][45][Configuration][ConfigDialog]
DialogHeight=836
DialogWidth=933
[Containments][42][Applets][45][Configuration][General]
groupingStrategy=0
launchers=applications:org.kde.konsole.desktop,applications:firefox.desktop
[Containments][42][Applets][46]
immutability=1
plugin=org.kde.plasma.systemtray
[Containments][42][Applets][46][Configuration]
PreloadWeight=59
SystrayContainmentId=47
[Containments][42][Applets][48]
immutability=1
plugin=org.kde.plasma.digitalclock
[Containments][42][Applets][48][Configuration]
PreloadWeight=64
[Containments][42][Applets][58]
immutability=1
plugin=org.kde.plasma.kicker
[Containments][42][Applets][58][Configuration]
PreloadWeight=100
[Containments][42][Applets][58][Configuration][General]
favoritesPortedToKAstats=true
[Containments][42][Applets][58][Shortcuts]
global=Alt+F1
[Containments][42][Applets][59]
immutability=1
plugin=org.kde.plasma.digitalclock
[Containments][42][Applets][59][Configuration]
PreloadWeight=54
[Containments][42][Applets][59][Configuration][Appearance]
lastSelectedTimezone=UTC-07:00
selectedTimeZones=UTC-07:00
showDate=true
showLocalTimezone=true
[Containments][42][Applets][59][Configuration][ConfigDialog]
DialogHeight=540
DialogWidth=720
[Containments][42][ConfigDialog]
DialogHeight=84
DialogWidth=1920
[Containments][42][Configuration]
PreloadWeight=34
[Containments][42][General]
AppletOrder=58;44;45;46;59;48
[Containments][47]
activityId=
formfactor=2
immutability=1
lastScreen=0
location=4
plugin=org.kde.plasma.private.systemtray
wallpaperplugin=org.kde.image
[Containments][47][Applets][49][Configuration]
PreloadWeight=42
[Containments][47][Applets][50][Configuration]
PreloadWeight=42
[Containments][47][Applets][51][Configuration]
PreloadWeight=42
[Containments][47][Applets][52]
immutability=1
plugin=org.kde.kdeconnect
[Containments][47][Applets][52][Configuration]
PreloadWeight=39
[Containments][47][Applets][53][Configuration]
PreloadWeight=42
[Containments][47][Applets][54]
immutability=1
plugin=org.kde.plasma.notifications
[Containments][47][Applets][54][Configuration]
PreloadWeight=54
[Containments][47][Applets][55]
immutability=1
plugin=org.kde.plasma.devicenotifier
[Containments][47][Applets][55][Configuration]
PreloadWeight=84
[Containments][47][Applets][56]
immutability=1
plugin=org.kde.plasma.battery
[Containments][47][Applets][56][Configuration]
PreloadWeight=31
[Containments][47][Applets][57]
immutability=1
plugin=org.kde.plasma.networkmanagement
[Containments][47][Applets][57][Configuration]
PreloadWeight=34
[Containments][47][ConfigDialog]
DialogHeight=540
DialogWidth=720
[Containments][47][Configuration]
PreloadWeight=34
[Containments][47][General]
extraItems=org.kde.plasma.notifications,org.kde.kdeconnect,org.kde.plasma.networkmanagement,org.kde.plasma.devicenotifier,org.kde.plasma.battery
knownItems=org.kde.plasma.notifications,org.kde.plasma.volume,org.kde.kdeconnect,org.kde.plasma.networkmanagement,org.kde.plasma.clipboard,org.kde.discovernotifier,org.kde.plasma.devicenotifier,org.kde.plasma.keyboardindicator,org.kde.plasma.mediacontroller,org.kde.plasma.battery
showAllItems=true
[Containments][9][General]
AppletOrder=10;11;15
[General]
immutability=1
[ScreenMapping]
itemsOnDisabledScreens=
Например, я хочу изменить настройки панели задач, отображать только задачи с текущего рабочего стола.
Для этого мне нужно в секцию [Containments][42][Applets][45][Configuration][General]
добавить параметр showOnlyCurrentDesktop=true
Но эти ID динамически генерируются во время создания конфигурации. Нужно найти апплет с плагином org.kde.plasma.taskmanager
Это выглядит так:
[Containments][42][Applets][45]
immutability=1
plugin=org.kde.plasma.taskmanager
Я сталкивался с иерархиями в INI в виде [A/B/C]
, но я не видел [A][A_ID][B][B_ID]
, и какие парсеры смогут по найденому параметру выдать список групп в правильном порядке.
Какие есть идеи, как с этим вообще работать?