186 lines
6.1 KiB
Bash
186 lines
6.1 KiB
Bash
#!/usr/bin/env bash
|
||
set -euo pipefail
|
||
|
||
MARK_DIR="${XDG_CONFIG_HOME:-${HOME}/.config}/saikyo-os"
|
||
MARK_FILE="${MARK_DIR}/first-login-kde.done"
|
||
WALLPAPER_PATH="/usr/share/wallpapers/Saikyo/contents/images/saikyo-default.svg"
|
||
LOGO_PATH="/usr/share/saikyo-os/logos/saikyo-logo.svg"
|
||
AVATAR_PNG="/usr/share/icons/hicolor/512x512/apps/distributor-logo.png"
|
||
COLOR_SCHEME="SaikyoDark"
|
||
|
||
mkdir -p "${MARK_DIR}" 2>/dev/null || true
|
||
|
||
if [[ -f "${MARK_FILE}" ]]; then
|
||
exit 0
|
||
fi
|
||
|
||
if [[ ! -r "${WALLPAPER_PATH}" ]]; then
|
||
exit 0
|
||
fi
|
||
|
||
have_cmd() { command -v "$1" >/dev/null 2>&1; }
|
||
|
||
apply_look_and_feel() {
|
||
if have_cmd lookandfeeltool; then
|
||
lookandfeeltool -a org.saikyo.desktop >/dev/null 2>&1 || true
|
||
elif have_cmd lookandfeeltool5; then
|
||
lookandfeeltool5 -a org.saikyo.desktop >/dev/null 2>&1 || true
|
||
fi
|
||
}
|
||
|
||
apply_color_scheme() {
|
||
if have_cmd plasma-apply-colorscheme; then
|
||
plasma-apply-colorscheme "${COLOR_SCHEME}" >/dev/null 2>&1 || true
|
||
fi
|
||
|
||
if have_cmd kwriteconfig5; then
|
||
kwriteconfig5 --file kdeglobals --group General --key ColorScheme "${COLOR_SCHEME}" >/dev/null 2>&1 || true
|
||
elif have_cmd kwriteconfig6; then
|
||
kwriteconfig6 --file kdeglobals --group General --key ColorScheme "${COLOR_SCHEME}" >/dev/null 2>&1 || true
|
||
fi
|
||
}
|
||
|
||
restart_plasma_shell() {
|
||
if have_cmd kquitapp5 && have_cmd kstart5; then
|
||
kquitapp5 plasmashell >/dev/null 2>&1 || true
|
||
nohup kstart5 plasmashell >/dev/null 2>&1 &
|
||
elif have_cmd kquitapp6 && have_cmd kstart6; then
|
||
kquitapp6 plasmashell >/dev/null 2>&1 || true
|
||
nohup kstart6 plasmashell >/dev/null 2>&1 &
|
||
fi
|
||
}
|
||
|
||
set_wallpaper() {
|
||
local qdbus_cmd="$1"
|
||
"${qdbus_cmd}" org.kde.plasmashell /PlasmaShell org.kde.PlasmaShell.evaluateScript "
|
||
var Desktops = desktops();
|
||
for (i = 0; i < Desktops.length; i++) {
|
||
d = Desktops[i];
|
||
d.wallpaperPlugin = 'org.kde.image';
|
||
d.currentConfigGroup = ['Wallpaper', 'org.kde.image', 'General'];
|
||
d.writeConfig('Image', 'file://${WALLPAPER_PATH}');
|
||
}
|
||
" >/dev/null 2>&1 || return 1
|
||
return 0
|
||
}
|
||
|
||
if have_cmd qdbus; then
|
||
set_wallpaper qdbus || true
|
||
elif have_cmd qdbus6; then
|
||
set_wallpaper qdbus6 || true
|
||
fi
|
||
|
||
apply_color_scheme
|
||
apply_look_and_feel
|
||
restart_plasma_shell || true
|
||
|
||
add_panel_widgets_and_pins() {
|
||
local qdbus_cmd="$1"
|
||
"${qdbus_cmd}" org.kde.plasmashell /PlasmaShell org.kde.PlasmaShell.evaluateScript "
|
||
function firstPanel() {
|
||
var ps = panels();
|
||
if (!ps || ps.length === 0) return null;
|
||
return ps[0];
|
||
}
|
||
|
||
function ensureWidget(panel, pluginId) {
|
||
try {
|
||
var ws = panel.widgets();
|
||
for (var i = 0; i < ws.length; i++) {
|
||
if (ws[i].type === pluginId) return;
|
||
}
|
||
panel.addWidget(pluginId);
|
||
} catch (e) {
|
||
}
|
||
}
|
||
|
||
function ensureTaskManagerPins(panel, launchersStr) {
|
||
try {
|
||
var ws = panel.widgets();
|
||
for (var i = 0; i < ws.length; i++) {
|
||
if (ws[i].type === 'org.kde.plasma.taskmanager') {
|
||
var tm = ws[i];
|
||
tm.currentConfigGroup = ['General'];
|
||
tm.writeConfig('launchers', launchersStr);
|
||
return;
|
||
}
|
||
}
|
||
} catch (e) {
|
||
}
|
||
}
|
||
|
||
var p = firstPanel();
|
||
if (!p) return;
|
||
|
||
// License status widget
|
||
ensureWidget(p, 'org.saikyo.license');
|
||
|
||
// Pinned launchers in task manager
|
||
var launchers = [
|
||
'applications:org.kde.discover.desktop',
|
||
'applications:systemsettings.desktop',
|
||
'applications:saikyo-license.desktop'
|
||
].join(',');
|
||
ensureTaskManagerPins(p, launchers);
|
||
" >/dev/null 2>&1 || true
|
||
}
|
||
|
||
if have_cmd qdbus; then
|
||
add_panel_widgets_and_pins qdbus || true
|
||
elif have_cmd qdbus6; then
|
||
add_panel_widgets_and_pins qdbus6 || true
|
||
fi
|
||
|
||
desktop_dir="${HOME}/Desktop"
|
||
if [[ -r "${HOME}/.config/user-dirs.dirs" ]]; then
|
||
d=$(grep -E '^XDG_DESKTOP_DIR=' "${HOME}/.config/user-dirs.dirs" | head -n 1 | cut -d= -f2- | tr -d '"')
|
||
d=${d//\$HOME/${HOME}}
|
||
if [[ -n "${d}" ]]; then desktop_dir="${d}"; fi
|
||
fi
|
||
|
||
# Ensure KWallet doesn't require a pre-existing GPG key by default.
|
||
# This prevents first-run failures in apps that request KWallet integration.
|
||
mkdir -p "${XDG_CONFIG_HOME:-${HOME}/.config}" 2>/dev/null || true
|
||
{
|
||
echo "[Wallet]"
|
||
echo "UseGpg=false"
|
||
} > "${XDG_CONFIG_HOME:-${HOME}/.config}/kwalletrc" 2>/dev/null || true
|
||
|
||
# Set a default user avatar for new sessions (shown in KDE menus/panel).
|
||
# Prefer PNG (KDE reliably picks it up); fallback to SVG.
|
||
if [[ -r "${AVATAR_PNG}" ]]; then
|
||
cp -f "${AVATAR_PNG}" "${HOME}/.face.icon" 2>/dev/null || true
|
||
chmod 0644 "${HOME}/.face.icon" 2>/dev/null || true
|
||
elif [[ -r "${LOGO_PATH}" ]]; then
|
||
cp -f "${LOGO_PATH}" "${HOME}/.face.icon" 2>/dev/null || true
|
||
chmod 0644 "${HOME}/.face.icon" 2>/dev/null || true
|
||
fi
|
||
|
||
mkdir -p "${desktop_dir}" 2>/dev/null || true
|
||
if [[ -r /usr/share/applications/saikyo-license.desktop ]]; then
|
||
cp -f /usr/share/applications/saikyo-license.desktop "${desktop_dir}/SAIKYO OS License.desktop" 2>/dev/null || true
|
||
chmod 0755 "${desktop_dir}/SAIKYO OS License.desktop" 2>/dev/null || true
|
||
fi
|
||
|
||
if [[ -r /usr/share/applications/org.kde.discover.desktop ]]; then
|
||
cp -f /usr/share/applications/org.kde.discover.desktop "${desktop_dir}/SAIKYO Discover.desktop" 2>/dev/null || true
|
||
chmod 0755 "${desktop_dir}/SAIKYO Discover.desktop" 2>/dev/null || true
|
||
fi
|
||
|
||
if [[ -r /usr/share/applications/systemsettings.desktop ]]; then
|
||
cp -f /usr/share/applications/systemsettings.desktop "${desktop_dir}/System Settings.desktop" 2>/dev/null || true
|
||
chmod 0755 "${desktop_dir}/System Settings.desktop" 2>/dev/null || true
|
||
fi
|
||
|
||
if have_cmd kdialog; then
|
||
msg="Добро пожаловать в SAIKYO OS.\n\nНа этой системе действует пробный период 7 дней.\nПосле истечения пробного периода потребуется полная активация лицензии.\n\nРекомендуется выполнить активацию заранее."
|
||
if kdialog --title "SAIKYO OS" --icon "${LOGO_PATH}" --yes-label "Открыть активацию" --no-label "Позже" --yesno "${msg}" 2>/dev/null; then
|
||
if have_cmd saikyo-license-kde; then
|
||
nohup saikyo-license-kde >/dev/null 2>&1 &
|
||
fi
|
||
fi
|
||
fi
|
||
|
||
touch "${MARK_FILE}" 2>/dev/null || true
|
||
exit 0
|