[GNOME] 备份菜单布局
代码保存到sh文件后执行生成恢复脚本
#!/usr/bin/env bash
out_file="${1:-gnome_menu.sh}"
# favorite-apps
#-------------------------------------------------------------
dash=$(gsettings get org.gnome.shell favorite-apps)
cat << EOF > "$out_file"
#!/usr/bin/env bash
# 恢复菜单布局会导致gnome登出, 请注意保存文档
# dash
gsettings set org.gnome.shell favorite-apps "$dash"
EOF
# 循环生成菜单, 过滤掉空文件夹
#-------------------------------------------------------------
new_menus="["
idx=$(gsettings get org.gnome.desktop.app-folders folder-children)
menus=${idx:1:-1}
menus=$(echo "$menus" | sed 's/, /,/g')
IFS=',' read -r -a menu_arr <<< "$menus"
for _menu in "${menu_arr[@]}"; do
# 去掉引号
menu=${_menu:1:-1}
apps="$(gsettings get org.gnome.desktop.app-folders.folder:/org/gnome/desktop/app-folders/folders/${menu}/ apps)"
apps="$(echo "$apps" | sed 's/\$/\\$/g')"
name="$(gsettings get org.gnome.desktop.app-folders.folder:/org/gnome/desktop/app-folders/folders/${menu}/ name)"
name="${name:1:-1}"
if [[ "$apps" == "@as []" || "$name" == "" ]]; then
continue
fi
new_menus="${new_menus}${_menu},"
cat << EOF >> "$out_file"
# $name
gsettings set org.gnome.desktop.app-folders.folder:/org/gnome/desktop/app-folders/folders/${menu}/ apps "$apps"
gsettings set org.gnome.desktop.app-folders.folder:/org/gnome/desktop/app-folders/folders/${menu}/ name "$name"
# gsettings set org.gnome.desktop.app-folders.folder:/org/gnome/desktop/app-folders/folders/${menu}/ categories "['']"
# gsettings set org.gnome.desktop.app-folders.folder:/org/gnome/desktop/app-folders/folders/${menu}/ excluded-apps "['']"
EOF
done
if [[ "${new_menus: -1}" == "," ]]; then
new_menus="${new_menus:0:-1}"
fi
new_menus="${new_menus}]"
# 菜单文件夹索引
#-------------------------------------------------------------
cat << EOF >> "$out_file"
# 菜单文件夹索引
gsettings set org.gnome.desktop.app-folders folder-children "$new_menus"
EOF
# 排序
#-------------------------------------------------------------
order=$(gsettings get org.gnome.shell app-picker-layout)
cat << EOF >> "$out_file"
# 排序
gsettings set org.gnome.shell app-picker-layout "$order"
EOF
chmod +x "$out_file"