From 3000934a96992cafda5f1352b9d504a048bf342d Mon Sep 17 00:00:00 2001 From: Mikhail Zolotukhin Date: Mon, 1 Nov 2021 19:09:12 +0300 Subject: [PATCH] chore: move kwinscript to its own dir --- bin/build.sh | 31 --- bin/install.sh | 21 -- bin/load-script.sh | 70 ------ bin/package.sh | 40 --- bin/shortcut.py | 237 ------------------ bin/start.sh | 16 -- bin/stop.sh | 11 - bin/testenv-docker.sh | 43 ---- package.json | 19 +- scripts/build.sh | 37 +++ {bin => scripts}/clean.sh | 3 +- scripts/install.sh | 11 + scripts/package.sh | 27 ++ {bin => scripts}/uninstall.sh | 5 +- src/{ => kwinscript}/config.ts | 0 .../controller/action.test.ts | 0 src/{ => kwinscript}/controller/action.ts | 0 src/{ => kwinscript}/controller/index.ts | 0 src/{ => kwinscript}/driver/index.ts | 0 src/{ => kwinscript}/driver/surface.ts | 0 src/{ => kwinscript}/driver/window.ts | 0 src/{ => kwinscript}/engine/index.test.ts | 0 src/{ => kwinscript}/engine/index.ts | 0 .../engine/layout/cascade_layout.ts | 0 .../engine/layout/floating_layout.ts | 0 src/{ => kwinscript}/engine/layout/index.ts | 0 .../engine/layout/layout_part.ts | 0 .../engine/layout/layout_utils.ts | 0 .../engine/layout/monocle_layout.ts | 0 .../engine/layout/quarter_layout.ts | 0 .../engine/layout/spiral_layout.ts | 0 .../engine/layout/spread_layout.ts | 0 .../engine/layout/stair_layout.ts | 0 .../engine/layout/three_column_layout.ts | 0 .../engine/layout/tile_layout.ts | 0 src/{ => kwinscript}/engine/layout_store.ts | 0 src/{ => kwinscript}/engine/window.ts | 0 src/{ => kwinscript}/engine/window_store.ts | 0 src/{ => kwinscript}/extern/global.d.ts | 0 src/{ => kwinscript}/extern/kwin.d.ts | 0 src/{ => kwinscript}/extern/plasma.d.ts | 0 src/{ => kwinscript}/extern/qt.d.ts | 0 src/{ => kwinscript}/index.ts | 0 {res => src/kwinscript/res}/config/main.xml | 0 {res => src/kwinscript/res}/icons/bismuth.svg | 0 {res => src/kwinscript/res}/install.sh | 0 {res => src/kwinscript/res}/metadata.desktop | 0 {res => src/kwinscript/res}/ui/TrayItem.qml | 0 {res => src/kwinscript/res}/ui/config.ui | 0 .../kwinscript/res}/ui/config.ui.license | 0 {res => src/kwinscript/res}/ui/main.qml | 0 {res => src/kwinscript/res}/ui/popup.qml | 0 src/{ => kwinscript}/util/func.ts | 0 src/{ => kwinscript}/util/log.ts | 0 src/{ => kwinscript}/util/rect.ts | 0 55 files changed, 85 insertions(+), 486 deletions(-) delete mode 100755 bin/build.sh delete mode 100755 bin/install.sh delete mode 100755 bin/load-script.sh delete mode 100755 bin/package.sh delete mode 100755 bin/shortcut.py delete mode 100755 bin/start.sh delete mode 100755 bin/stop.sh delete mode 100755 bin/testenv-docker.sh create mode 100755 scripts/build.sh rename {bin => scripts}/clean.sh (80%) create mode 100755 scripts/install.sh create mode 100755 scripts/package.sh rename {bin => scripts}/uninstall.sh (79%) rename src/{ => kwinscript}/config.ts (100%) rename src/{ => kwinscript}/controller/action.test.ts (100%) rename src/{ => kwinscript}/controller/action.ts (100%) rename src/{ => kwinscript}/controller/index.ts (100%) rename src/{ => kwinscript}/driver/index.ts (100%) rename src/{ => kwinscript}/driver/surface.ts (100%) rename src/{ => kwinscript}/driver/window.ts (100%) rename src/{ => kwinscript}/engine/index.test.ts (100%) rename src/{ => kwinscript}/engine/index.ts (100%) rename src/{ => kwinscript}/engine/layout/cascade_layout.ts (100%) rename src/{ => kwinscript}/engine/layout/floating_layout.ts (100%) rename src/{ => kwinscript}/engine/layout/index.ts (100%) rename src/{ => kwinscript}/engine/layout/layout_part.ts (100%) rename src/{ => kwinscript}/engine/layout/layout_utils.ts (100%) rename src/{ => kwinscript}/engine/layout/monocle_layout.ts (100%) rename src/{ => kwinscript}/engine/layout/quarter_layout.ts (100%) rename src/{ => kwinscript}/engine/layout/spiral_layout.ts (100%) rename src/{ => kwinscript}/engine/layout/spread_layout.ts (100%) rename src/{ => kwinscript}/engine/layout/stair_layout.ts (100%) rename src/{ => kwinscript}/engine/layout/three_column_layout.ts (100%) rename src/{ => kwinscript}/engine/layout/tile_layout.ts (100%) rename src/{ => kwinscript}/engine/layout_store.ts (100%) rename src/{ => kwinscript}/engine/window.ts (100%) rename src/{ => kwinscript}/engine/window_store.ts (100%) rename src/{ => kwinscript}/extern/global.d.ts (100%) rename src/{ => kwinscript}/extern/kwin.d.ts (100%) rename src/{ => kwinscript}/extern/plasma.d.ts (100%) rename src/{ => kwinscript}/extern/qt.d.ts (100%) rename src/{ => kwinscript}/index.ts (100%) rename {res => src/kwinscript/res}/config/main.xml (100%) rename {res => src/kwinscript/res}/icons/bismuth.svg (100%) rename {res => src/kwinscript/res}/install.sh (100%) mode change 100755 => 100644 rename {res => src/kwinscript/res}/metadata.desktop (100%) rename {res => src/kwinscript/res}/ui/TrayItem.qml (100%) rename {res => src/kwinscript/res}/ui/config.ui (100%) rename {res => src/kwinscript/res}/ui/config.ui.license (100%) rename {res => src/kwinscript/res}/ui/main.qml (100%) rename {res => src/kwinscript/res}/ui/popup.qml (100%) rename src/{ => kwinscript}/util/func.ts (100%) rename src/{ => kwinscript}/util/log.ts (100%) rename src/{ => kwinscript}/util/rect.ts (100%) diff --git a/bin/build.sh b/bin/build.sh deleted file mode 100755 index b6f38147..00000000 --- a/bin/build.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/usr/bin/env sh - -# SPDX-FileCopyrightText: 2021 Mikhail Zolotukhin -# -# SPDX-License-Identifier: MIT - -set -e - -# Make necessary directories -mkdir -p "${npm_package_config_build_dir:=build}/script/contents/code" - -echo "Checking using TS Compiler..." -npx tsc --noEmit --incremental - -echo "Bundling using esbuild..." -npx esbuild \ - --bundle src/index.ts \ - --outfile="$npm_package_config_build_dir/script/contents/code/index.mjs" \ - --format=esm \ - --platform=neutral - -# Copy resources to the build directory with correct paths -cp -rv res/ui "$npm_package_config_build_dir/script/contents" -cp -rv res/config "$npm_package_config_build_dir/script/contents" - -# Copy and update metadata -METADATA_FILE="$npm_package_config_build_dir/script/metadata.desktop" - -cp -v res/metadata.desktop "$METADATA_FILE" -sed -i "s/\$VER/${npm_package_version:-1.0}/" "$METADATA_FILE" - diff --git a/bin/install.sh b/bin/install.sh deleted file mode 100755 index e881325f..00000000 --- a/bin/install.sh +++ /dev/null @@ -1,21 +0,0 @@ -#!/usr/bin/env sh - -# SPDX-FileCopyrightText: 2021 Mikhail Zolotukhin -# -# SPDX-License-Identifier: MIT - -set -e - -EXTRACT_DIR="${npm_package_config_build_dir:-build}/extracted-package" - -# Make directory for extraction -mkdir -p "$EXTRACT_DIR" - -# Extract built package -tar xf "${npm_package_config_build_dir:-build}/package/bismuth.tar.gz" --directory="$EXTRACT_DIR" - -# Run installation script -cd "$EXTRACT_DIR" -./install.sh -cd - > /dev/null - diff --git a/bin/load-script.sh b/bin/load-script.sh deleted file mode 100755 index d35f7bbc..00000000 --- a/bin/load-script.sh +++ /dev/null @@ -1,70 +0,0 @@ -#!/bin/sh - -# SPDX-FileCopyrightText: 2018-2019 Eon S. Jeon -# -# SPDX-License-Identifier: MIT - -#set -x - -file_path="$1" -plugin_name="$2" - -# -# Functions -# - -_invoke() { - method="$1" - shift 1 - - dbus-send --session --print-reply=literal \ - --dest="org.kde.KWin" \ - "/Scripting" "org.kde.kwin.Scripting.${method}" \ - "$@" -} - -check_loaded() { - _invoke "isScriptLoaded" string:"${plugin_name}" \ - | awk '{ print $2 }' -} - -unload_script() { - _invoke "unloadScript" string:"${plugin_name}" -} - -# -# Main -# - -if [ "${file_path}" = "unload" ]; then - unload_script - [ "$(check_loaded)" = "false" ] && exit - - echo "$(basename $0): Failed to unload script: ${plugin_name}" >&2 - exit 1 -fi - -file_path="$(realpath "${file_path}")" -if [ ! -f "${file_path}" ]; then - echo "$(basename $0): File does not exist: ${file_path}" >&2 - exit 1 -fi - -if [ "$(check_loaded)" != "false" ]; then - unload_script -fi - -# randomized file_path -# (KWin doesn't reload files, and keep running old versions.) -file_path_random="${file_path}.$$.qml" -trap "{ rm -vf ${file_path_random}; }" EXIT -cp -v "${file_path}" "${file_path_random}" - -# load script and run -_invoke "loadDeclarativeScript" string:"${file_path_random}" string:"${plugin_name}" -_invoke "start" - -if [ "$(check_loaded)" = "false" ]; then - echo "$(basename $0): Failed to load script: ${file_path}, ${plugin_name}" >&2 - exit 1 -fi diff --git a/bin/package.sh b/bin/package.sh deleted file mode 100755 index 2210c1b9..00000000 --- a/bin/package.sh +++ /dev/null @@ -1,40 +0,0 @@ -#!/usr/bin/env sh - -# SPDX-FileCopyrightText: 2021 Mikhail Zolotukhin -# -# SPDX-License-Identifier: MIT - -set -e - -KWINPKG_NAME="bismuth.kwinscript" -FINAL_ARCHIVE_NAME="bismuth.tar.gz" - -# Temporary change directory for archive tools -cd "./${npm_package_config_build_dir:-build}/script" - -# Remove old packages -rm -f "$KWINPKG_NAME" - -# Create new .kwinscript package -zip -qr "$KWINPKG_NAME" ./contents/ ./metadata.desktop - -# Get back to the original directory -cd - > /dev/null - -# Create subdir for final package -mkdir -p "./${npm_package_config_build_dir:-build}/package" -cd "./${npm_package_config_build_dir:-build}/package" - -# Copy necessary files for package -cp -v "../script/$KWINPKG_NAME" "$KWINPKG_NAME" -cp -v "../../res/install.sh" install.sh -mkdir -p icons/ && cp -v "../../res/icons/bismuth.svg" icons/bismuth.svg - -# Create installation archive for the end user -tar -czf "$FINAL_ARCHIVE_NAME" \ - "$KWINPKG_NAME" \ - install.sh \ - icons/bismuth.svg - -# Get back to the original directory -cd - > /dev/null diff --git a/bin/shortcut.py b/bin/shortcut.py deleted file mode 100755 index 8ee652d5..00000000 --- a/bin/shortcut.py +++ /dev/null @@ -1,237 +0,0 @@ -#!/usr/bin/env python3 - -# SPDX-FileCopyrightText: 2018-2019 Eon S. Jeon -# -# SPDX-License-Identifier: MIT - -# -# * Requirements: -# - pyside2 -# - dbus-python -# - -import argparse -import sys - -from PySide2.QtGui import QKeySequence -import dbus - -# TODO: manually syncing key bindings? sucks! -# split this into a data file, which then can be translated into -# typescript code or included in other places. -BISMUTH_DEFAULT_BINDINGS = [ - ("Down/Next" , "j" ), - ("Up/Prev" , "k" ), - ("Left" , "h" ), - ("Right" , "l" ), - - ("Move Down/Next", "shift+j"), - ("Move Up/Prev" , "shift+k"), - ("Move Left" , "shift+h"), - ("Move Right" , "shift+l"), - - ("Grow Height" , "ctrl+j" ), - ("Shrink Height" , "ctrl+k" ), - ("Shrink Width" , "ctrl+h" ), - ("Grow Width" , "ctrl+l" ), - - ("Increase" , "i" ), - ("Decrease" , "d" ), - - ("Float" , "f" ), - ("Float All" , "shift+f"), - ("Cycle Layout" , "\\" ), - ("Set master" , "return" ), - - ('Tile Layout' , 't'), - ('Monocle Layout' , 'm'), - ('Spread Layout' , None), - ('Stair Layout' , None), - ('Floating Layout', None), -] - -NUMBER_SHIFT_MAP = ")!@#$%^&*()" - -VERBOSE = True - - -def parse_arguments() -> argparse.Namespace: - # common arguments - parser = argparse.ArgumentParser( - description='A helper script for managing Krohnkite shortcuts') - parser.add_argument('--quiet', '-q', action='store_true', - help='Suppress output') - - subparsers = parser.add_subparsers(dest="command", - help='Commands') - - # - # register command - # - parser_register = subparsers.add_parser('register', - help='Register Krohnkite-related shortcuts') - parser_register.add_argument('--bind', '-b', action='append', dest='binds', - metavar='ACTION=KEY', type=str, - help='''Use a different key for specified action. The final result is MOD+KEY = ACTION. - This option can be specified multiple times.''') - parser_register.add_argument('--force', '-f', action='store_true', - help='Remove any conflicting shortcuts before registering new ones') - parser_register.add_argument('--modifier', '-m', default='meta', dest='modifier', - type=str, - help='A modifier key to use. Defaults to meta.') - - # - # unregister command - # - parser_unregister = subparsers.add_parser('unregister', - help='''Remove all Krohnkite shortcuts from KWin. - This doesn't reset other key bindings changed by this script.''') - - # - # register-desktops command - # - parser_register_desktops = subparsers.add_parser('register-desktops', - help='''Set virtual desktop shortcuts to MOD+NUMBER, which is a recommended setup.''') - parser_register_desktops.add_argument('--force', '-f', action='store_true', - help='Remove any conflicting shortcuts before registering new ones') - parser_register_desktops.add_argument('--modifier', '-m', default='meta', dest='modifier', type=str, - help='''A modifier key to use. Defaults to meta.''') - - if len(sys.argv) == 1: - parser.print_help(sys.stderr) - sys.exit(1) - - return parser.parse_args() - -def parse_kvpair(s: str): - '''Parses simple "A=B"-style expression''' - return tuple(s.split("=", 2)) - -def get_keycode(keycomb: str): - keyseq = QKeySequence.fromString(keycomb) - return keyseq[0] - -def is_key_valid(keycomb: str) -> bool: - # NOTE: this might be internal detail that should not be accessed. - return get_keycode(keycomb) != 0x1FFFFFF - -def register_shortcut(action_id, keycomb, force=False): - if force is True: - unregister_colliding_shortcut(keycomb) - - keycode = get_keycode(keycomb) - if VERBOSE: - print("register [{2:<14}] to '{1}/{0}'.".format(action_id[1], action_id[2], keycomb)) - kglobalaccel.setForeignShortcut(action_id, [keycode]) - -def register_bismuth_shortcut(action: str, keycomb_full: str): - action = "Krohnkite: " + action - keycode = get_keycode(keycomb_full) - - if VERBOSE: print("register [{1:<14}] to '{0}'.".format(action, keycomb_full)) - - kglobalaccel.setForeignShortcut(["kwin", action, "KWin", ""], [keycode]) - -def unregister_bismuth_shortcut(action: str): - action = "Krohnkite: " + action - - if VERBOSE: print("unregister '{}'.".format(action)) - - kglobalaccel.setForeignShortcut(["kwin", action, "KWin", ""], []) - -def is_shortcut_colliding(keycomb_full: str) -> bool: - action_id = kglobalaccel.action(get_keycode(keycomb_full)) - return not not action_id - -def unregister_colliding_shortcut(keycomb_full: str): - action_id = kglobalaccel.action(get_keycode(keycomb_full)) - if len(action_id) > 0: - if VERBOSE: print("unregister [{:<14}] bound to '{}'".format(keycomb_full, action_id[1])) - kglobalaccel.setForeignShortcut(action_id, []) - -def unregister_all_bismuth_shortcuts(): - names = [ - str(name) for name - in kwin_component.shortcutNames() - if name.startswith('Krohnkite:') - ] - - for name in names: - kglobalaccel.unregister("kwin", name) - -def is_shortcut_already_bound(keycomb_full: str) -> bool: - '''Check if the given key combination is already bound to something. ''' - action_id = kglobalaccel.action(get_keycode(keycomb_full)) - return not not action_id - -def register_desktop_shortcuts(modifier, force): - for i in range(1,10): - action = "Switch to Desktop {}".format(i) - keycomb = "{}+{}".format(modifier, i) - register_shortcut(["kwin", action, "KWin", action], keycomb, force=force) - - action = "Window to Desktop {}".format(i) - keycomb = "{}+{}".format(modifier, NUMBER_SHIFT_MAP[i]) - register_shortcut(["kwin", action, "KWin", action], keycomb, force=force) - -def main(): - config = parse_arguments() - - global VERBOSE - VERBOSE = False if config.quiet else True - - if config.command == 'register': - binds = dict(BISMUTH_DEFAULT_BINDINGS) - - if config.binds is not None: - # parse ACTION=KEY parameter - custom_binds = (parse_kvpair(b) for b in config.binds) - - # read-through custom binds - for action, keycomb in custom_binds: - if action not in binds: - print("invalid action '{}'",format(action)) - sys.exit(1) - elif keycomb.lower() == "none": - binds[action] = None - elif is_key_valid(config.modifier + '+' + keycomb): - binds[action] = keycomb - else: - print("invalid key '{}' for action '{}'".format(action, keycomb)) - sys.exit(1) - - if config.force is True: - for keycomb in binds.values(): - if keycomb is not None: - unregister_colliding_shortcut(config.modifier + '+' + keycomb) - - # register shortcuts - for action, keycomb in binds.items(): - if keycomb is None: - unregister_bismuth_shortcut(action) - else: - keycomb_full = config.modifier + '+' + keycomb - if is_shortcut_colliding(keycomb): - print("skipping {} due to shortcut collision...".format(keycomb_full)) - else: - register_bismuth_shortcut(action, keycomb_full) - - elif config.command == 'unregister': - unregister_all_bismuth_shortcuts() - elif config.command == 'register-desktops': - register_desktop_shortcuts(config.modifier, config.force) - else: - pass - - -session_bus = dbus.SessionBus() - -kglobalaccel_obj = session_bus.get_object('org.kde.kglobalaccel', '/kglobalaccel') -kglobalaccel = dbus.Interface(kglobalaccel_obj, dbus_interface='org.kde.KGlobalAccel') - -kwin_component_obj = session_bus.get_object('org.kde.kglobalaccel', '/component/kwin') -kwin_component = dbus.Interface(kwin_component_obj, dbus_interface='org.kde.kglobalaccel.Component') - -if __name__ == '__main__': - main() - diff --git a/bin/start.sh b/bin/start.sh deleted file mode 100755 index c6730de9..00000000 --- a/bin/start.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/usr/bin/env sh - -# SPDX-FileCopyrightText: 2021 Mikhail Zolotukhin -# SPDX-FileCopyrightText: 2018-2019 Eon S. Jeon -# -# SPDX-License-Identifier: MIT - -set -e - -# Load script to KWin -bin/load-script.sh "${npm_package_config_build_dir:=build}/contents/ui/main.qml" \ - "${npm_package_name:=Bismuth}-test" - -# Remove unnecessary files -find "$npm_package_config_build_dir" \ - '(' -name "*.qmlc" -o -name "*.jsc" ')' -delete diff --git a/bin/stop.sh b/bin/stop.sh deleted file mode 100755 index cdd2bb34..00000000 --- a/bin/stop.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env sh - -# SPDX-FileCopyrightText: 2021 Mikhail Zolotukhin -# SPDX-FileCopyrightText: 2018-2019 Eon S. Jeon -# -# SPDX-License-Identifier: MIT - -set -e - -# Unload script from KWin -bin/load-script.sh "unload" "${npm_package_name:-Bismuth}-test" diff --git a/bin/testenv-docker.sh b/bin/testenv-docker.sh deleted file mode 100755 index 22e6a8dc..00000000 --- a/bin/testenv-docker.sh +++ /dev/null @@ -1,43 +0,0 @@ -#!/bin/bash - -# SPDX-FileCopyrightText: 2018-2019 Eon S. Jeon -# -# SPDX-License-Identifier: MIT - -set -mx - -display=${1:-1} -edition=${2:-user} -case "$edition" in - user|user-lts|dev-stable|dev-unstable);; - *) - echo "invalid edition: $edition" >&2 - exit 1 - ;; -esac - -projdir=$(realpath "$(dirname "$0")/..") -ctname="bismuth-$edition" - -Xephyr \ - -dpi 96 \ - -screen 1366x768 \ - :"$display" & - -ctid=$(docker ps -aq --filter "name=$ctname") -if [[ -z "$ctid" ]]; then - docker run \ - --name "$ctname" \ - -e DISPLAY=":$display" \ - -v "$projdir":"/mnt" \ - -v "/tmp/.X11-unix":"/tmp/.X11-unix" \ - "kdeneon/plasma":"$edition" & - - # HACK: stop CPU hoggig bluetooth service invocation. This is a bug. - (sleep 1; docker exec -u root "$ctname" rm '/usr/share/dbus-1/services/org.bluez.obex.service') & -else - docker start "$ctname" -fi - -fg Xephyr -wait diff --git a/package.json b/package.json index 4c1681f4..980449a1 100644 --- a/package.json +++ b/package.json @@ -3,13 +3,6 @@ "version": "1.1.0", "description": "A dynamic tiling extension for KWin", "private": true, - "directories": { - "build": "build", - "test": "test" - }, - "config": { - "build_dir": "build" - }, "devDependencies": { "@types/jest": "^27.0.1", "@typescript-eslint/eslint-plugin": "^4.29.3", @@ -33,16 +26,14 @@ "typescript": "^4.4.3" }, "scripts": { - "clean": "bin/clean.sh", - "build": "bin/build.sh", + "clean": "scripts/clean.sh", + "build": "scripts/build.sh", "prestart": "npm run build", - "start": "bin/start.sh", - "stop": "bin/stop.sh", "prepackage": "npm run build", - "package": "bin/package.sh", + "package": "scripts/package.sh", "prescript-install": "npm run package", - "script-install": "bin/install.sh", - "script-uninstall": "bin/uninstall.sh", + "script-install": "scripts/install.sh", + "script-uninstall": "scripts/uninstall.sh", "preinstall-and-restart-kwin-x11": "npm run script-install", "install-and-restart-kwin-x11": "kwin_x11 --replace", "postinstall-and-restart-kwin-x11": "bash -ic \"kwin_x11 --replace & disown\"", diff --git a/scripts/build.sh b/scripts/build.sh new file mode 100755 index 00000000..eb88015e --- /dev/null +++ b/scripts/build.sh @@ -0,0 +1,37 @@ +#!/usr/bin/env sh + +# SPDX-FileCopyrightText: 2021 Mikhail Zolotukhin +# SPDX-License-Identifier: MIT + +set -e + + +echo "🏗️ Building KWin Script..." + +KWINSCRIPT_SOURCEDIR="src/kwinscript" +KWINSCRIPT_BUILDDIR="build/kwinscript" + +# Make necessary directories +mkdir -p "$KWINSCRIPT_BUILDDIR/contents/code" + +echo "👮 Checking using TS Compiler..." +npx tsc --noEmit --incremental + +echo "🎁 Bundling using esbuild..." +npx esbuild \ + --bundle "$KWINSCRIPT_SOURCEDIR/index.ts" \ + --outfile="$KWINSCRIPT_BUILDDIR/contents/code/index.mjs" \ + --format=esm \ + --platform=neutral + +# Copy resources to the build directory with correct paths +echo "📑 Preparing UI and metadata files..." +cp -r "$KWINSCRIPT_SOURCEDIR/res/ui" "$KWINSCRIPT_BUILDDIR/contents" +cp -r "$KWINSCRIPT_SOURCEDIR/res/config" "$KWINSCRIPT_BUILDDIR/contents" + +# Copy and update metadata +METADATA_FILE="$KWINSCRIPT_BUILDDIR/metadata.desktop" + +cp "$KWINSCRIPT_SOURCEDIR/res/metadata.desktop" "$METADATA_FILE" +sed -i "s/\$VER/${npm_package_version:-1.0}/" "$METADATA_FILE" + diff --git a/bin/clean.sh b/scripts/clean.sh similarity index 80% rename from bin/clean.sh rename to scripts/clean.sh index c4622615..ce2e0615 100755 --- a/bin/clean.sh +++ b/scripts/clean.sh @@ -1,13 +1,12 @@ #!/usr/bin/env sh # SPDX-FileCopyrightText: 2021 Mikhail Zolotukhin -# # SPDX-License-Identifier: MIT set -e # Remove build directory and package-lock -rm -vrf "${npm_package_config_build_dir:=build}" +rm -vrf "build" rm -vf package-lock.json rm -vrf node_modules/ diff --git a/scripts/install.sh b/scripts/install.sh new file mode 100755 index 00000000..984985af --- /dev/null +++ b/scripts/install.sh @@ -0,0 +1,11 @@ +#!/usr/bin/env sh + +# SPDX-FileCopyrightText: 2021 Mikhail Zolotukhin +# SPDX-License-Identifier: MIT + +set -e + +echo "📦 Installing the KWin Script..." +KWINPKG_FILE="bismuth.kwinscript" +plasmapkg2 -u "$KWINPKG_FILE" > /dev/null || plasmapkg2 -i "$KWINPKG_FILE" > /dev/null + diff --git a/scripts/package.sh b/scripts/package.sh new file mode 100755 index 00000000..c542a8bd --- /dev/null +++ b/scripts/package.sh @@ -0,0 +1,27 @@ +#!/usr/bin/env sh + +# SPDX-FileCopyrightText: 2021 Mikhail Zolotukhin +# SPDX-License-Identifier: MIT + +set -e + + +echo "Packaging KWin Script..." + +KWINPKG_NAME="bismuth.kwinscript" +FINAL_ARCHIVE_NAME="bismuth.tar.gz" + +# Temporary change directory for archive tools +cd "./build/kwinscript" + +# Remove old packages +rm -f "$KWINPKG_NAME" + +# Create new .kwinscript package +zip -qr "$KWINPKG_NAME" ./contents/ ./metadata.desktop + +# Get back to the original directory +cd - > /dev/null + +# TODO: Packaging for KCM + diff --git a/bin/uninstall.sh b/scripts/uninstall.sh similarity index 79% rename from bin/uninstall.sh rename to scripts/uninstall.sh index 829fc700..ae4acb0a 100755 --- a/bin/uninstall.sh +++ b/scripts/uninstall.sh @@ -2,9 +2,12 @@ # SPDX-FileCopyrightText: 2021 Mikhail Zolotukhin # SPDX-FileCopyrightText: 2018-2019 Eon S. Jeon -# # SPDX-License-Identifier: MIT set -e +echo "🔥 Uninstalling KWin Script..." plasmapkg2 -t kwinscript -r "${npm_package_name:-Bismuth}" + +# TODO: Uninstalling KCM + diff --git a/src/config.ts b/src/kwinscript/config.ts similarity index 100% rename from src/config.ts rename to src/kwinscript/config.ts diff --git a/src/controller/action.test.ts b/src/kwinscript/controller/action.test.ts similarity index 100% rename from src/controller/action.test.ts rename to src/kwinscript/controller/action.test.ts diff --git a/src/controller/action.ts b/src/kwinscript/controller/action.ts similarity index 100% rename from src/controller/action.ts rename to src/kwinscript/controller/action.ts diff --git a/src/controller/index.ts b/src/kwinscript/controller/index.ts similarity index 100% rename from src/controller/index.ts rename to src/kwinscript/controller/index.ts diff --git a/src/driver/index.ts b/src/kwinscript/driver/index.ts similarity index 100% rename from src/driver/index.ts rename to src/kwinscript/driver/index.ts diff --git a/src/driver/surface.ts b/src/kwinscript/driver/surface.ts similarity index 100% rename from src/driver/surface.ts rename to src/kwinscript/driver/surface.ts diff --git a/src/driver/window.ts b/src/kwinscript/driver/window.ts similarity index 100% rename from src/driver/window.ts rename to src/kwinscript/driver/window.ts diff --git a/src/engine/index.test.ts b/src/kwinscript/engine/index.test.ts similarity index 100% rename from src/engine/index.test.ts rename to src/kwinscript/engine/index.test.ts diff --git a/src/engine/index.ts b/src/kwinscript/engine/index.ts similarity index 100% rename from src/engine/index.ts rename to src/kwinscript/engine/index.ts diff --git a/src/engine/layout/cascade_layout.ts b/src/kwinscript/engine/layout/cascade_layout.ts similarity index 100% rename from src/engine/layout/cascade_layout.ts rename to src/kwinscript/engine/layout/cascade_layout.ts diff --git a/src/engine/layout/floating_layout.ts b/src/kwinscript/engine/layout/floating_layout.ts similarity index 100% rename from src/engine/layout/floating_layout.ts rename to src/kwinscript/engine/layout/floating_layout.ts diff --git a/src/engine/layout/index.ts b/src/kwinscript/engine/layout/index.ts similarity index 100% rename from src/engine/layout/index.ts rename to src/kwinscript/engine/layout/index.ts diff --git a/src/engine/layout/layout_part.ts b/src/kwinscript/engine/layout/layout_part.ts similarity index 100% rename from src/engine/layout/layout_part.ts rename to src/kwinscript/engine/layout/layout_part.ts diff --git a/src/engine/layout/layout_utils.ts b/src/kwinscript/engine/layout/layout_utils.ts similarity index 100% rename from src/engine/layout/layout_utils.ts rename to src/kwinscript/engine/layout/layout_utils.ts diff --git a/src/engine/layout/monocle_layout.ts b/src/kwinscript/engine/layout/monocle_layout.ts similarity index 100% rename from src/engine/layout/monocle_layout.ts rename to src/kwinscript/engine/layout/monocle_layout.ts diff --git a/src/engine/layout/quarter_layout.ts b/src/kwinscript/engine/layout/quarter_layout.ts similarity index 100% rename from src/engine/layout/quarter_layout.ts rename to src/kwinscript/engine/layout/quarter_layout.ts diff --git a/src/engine/layout/spiral_layout.ts b/src/kwinscript/engine/layout/spiral_layout.ts similarity index 100% rename from src/engine/layout/spiral_layout.ts rename to src/kwinscript/engine/layout/spiral_layout.ts diff --git a/src/engine/layout/spread_layout.ts b/src/kwinscript/engine/layout/spread_layout.ts similarity index 100% rename from src/engine/layout/spread_layout.ts rename to src/kwinscript/engine/layout/spread_layout.ts diff --git a/src/engine/layout/stair_layout.ts b/src/kwinscript/engine/layout/stair_layout.ts similarity index 100% rename from src/engine/layout/stair_layout.ts rename to src/kwinscript/engine/layout/stair_layout.ts diff --git a/src/engine/layout/three_column_layout.ts b/src/kwinscript/engine/layout/three_column_layout.ts similarity index 100% rename from src/engine/layout/three_column_layout.ts rename to src/kwinscript/engine/layout/three_column_layout.ts diff --git a/src/engine/layout/tile_layout.ts b/src/kwinscript/engine/layout/tile_layout.ts similarity index 100% rename from src/engine/layout/tile_layout.ts rename to src/kwinscript/engine/layout/tile_layout.ts diff --git a/src/engine/layout_store.ts b/src/kwinscript/engine/layout_store.ts similarity index 100% rename from src/engine/layout_store.ts rename to src/kwinscript/engine/layout_store.ts diff --git a/src/engine/window.ts b/src/kwinscript/engine/window.ts similarity index 100% rename from src/engine/window.ts rename to src/kwinscript/engine/window.ts diff --git a/src/engine/window_store.ts b/src/kwinscript/engine/window_store.ts similarity index 100% rename from src/engine/window_store.ts rename to src/kwinscript/engine/window_store.ts diff --git a/src/extern/global.d.ts b/src/kwinscript/extern/global.d.ts similarity index 100% rename from src/extern/global.d.ts rename to src/kwinscript/extern/global.d.ts diff --git a/src/extern/kwin.d.ts b/src/kwinscript/extern/kwin.d.ts similarity index 100% rename from src/extern/kwin.d.ts rename to src/kwinscript/extern/kwin.d.ts diff --git a/src/extern/plasma.d.ts b/src/kwinscript/extern/plasma.d.ts similarity index 100% rename from src/extern/plasma.d.ts rename to src/kwinscript/extern/plasma.d.ts diff --git a/src/extern/qt.d.ts b/src/kwinscript/extern/qt.d.ts similarity index 100% rename from src/extern/qt.d.ts rename to src/kwinscript/extern/qt.d.ts diff --git a/src/index.ts b/src/kwinscript/index.ts similarity index 100% rename from src/index.ts rename to src/kwinscript/index.ts diff --git a/res/config/main.xml b/src/kwinscript/res/config/main.xml similarity index 100% rename from res/config/main.xml rename to src/kwinscript/res/config/main.xml diff --git a/res/icons/bismuth.svg b/src/kwinscript/res/icons/bismuth.svg similarity index 100% rename from res/icons/bismuth.svg rename to src/kwinscript/res/icons/bismuth.svg diff --git a/res/install.sh b/src/kwinscript/res/install.sh old mode 100755 new mode 100644 similarity index 100% rename from res/install.sh rename to src/kwinscript/res/install.sh diff --git a/res/metadata.desktop b/src/kwinscript/res/metadata.desktop similarity index 100% rename from res/metadata.desktop rename to src/kwinscript/res/metadata.desktop diff --git a/res/ui/TrayItem.qml b/src/kwinscript/res/ui/TrayItem.qml similarity index 100% rename from res/ui/TrayItem.qml rename to src/kwinscript/res/ui/TrayItem.qml diff --git a/res/ui/config.ui b/src/kwinscript/res/ui/config.ui similarity index 100% rename from res/ui/config.ui rename to src/kwinscript/res/ui/config.ui diff --git a/res/ui/config.ui.license b/src/kwinscript/res/ui/config.ui.license similarity index 100% rename from res/ui/config.ui.license rename to src/kwinscript/res/ui/config.ui.license diff --git a/res/ui/main.qml b/src/kwinscript/res/ui/main.qml similarity index 100% rename from res/ui/main.qml rename to src/kwinscript/res/ui/main.qml diff --git a/res/ui/popup.qml b/src/kwinscript/res/ui/popup.qml similarity index 100% rename from res/ui/popup.qml rename to src/kwinscript/res/ui/popup.qml diff --git a/src/util/func.ts b/src/kwinscript/util/func.ts similarity index 100% rename from src/util/func.ts rename to src/kwinscript/util/func.ts diff --git a/src/util/log.ts b/src/kwinscript/util/log.ts similarity index 100% rename from src/util/log.ts rename to src/kwinscript/util/log.ts diff --git a/src/util/rect.ts b/src/kwinscript/util/rect.ts similarity index 100% rename from src/util/rect.ts rename to src/kwinscript/util/rect.ts