From edbcfff789af44d7f48e93b0cb87d4aee60526fe Mon Sep 17 00:00:00 2001 From: Abdulkaiz Khatri <24286590+ful1e5@users.noreply.github.com> Date: Wed, 5 Jun 2024 17:19:27 +0530 Subject: [PATCH] feat: XCursor build added --- build.sh | 89 +++++++++ configs/x.build.toml | 441 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 530 insertions(+) create mode 100644 build.sh create mode 100644 configs/x.build.toml diff --git a/build.sh b/build.sh new file mode 100644 index 0000000..b365b55 --- /dev/null +++ b/build.sh @@ -0,0 +1,89 @@ +#!/bin/bash +# A script for preparing binaries of Notwaita Cursors, created by Abdulkaiz Khatri. + +version="v1.0.0" + +error() ( + set -o pipefail + "$@" 2> >(sed $'s,.*,\e[31m&\e[m,' >&2) +) + +get_config_file() { + local key="${1}" + local cfg_file="build.toml" + + if [[ $key == *"Right"* ]]; then + cfg_file="build.right.toml" + fi + + echo $cfg_file +} + +with_version() { + local comment="${1}" + echo "$comment ($version)" +} + +if ! type -p ctgen >/dev/null; then + error ctgen + exit 127 # exit program with "command not found" error code +fi + +declare -A names +names["Notwaita-Black"]=$(with_version "Black Notwaita") +names["Notwaita-Gray"]=$(with_version "Gray Notwaita") +names["Notwaita-White"]=$(with_version "White Notwaita") + +# Cleanup old builds +rm -rf themes bin + +# Building Apple XCursor binaries +for key in "${!names[@]}"; do + comment="${names[$key]}" + cfg=$(get_config_file key) + + ctgen "configs/x.$cfg" -p x11 -d "bitmaps/$key" -n "$key" -c "$comment Xcursors - @ful1e5 fork" & + PID=$! + wait $PID +done + +# # Building macOS Windows binaries +# for key in "${!names[@]}"; do +# comment="${names[$key]}" +# cfg=$(get_config_file key) +# +# ctgen "configs/win_rg.$cfg" -d "bitmaps/$key" -n "$key-Regular" -c "$comment Regular Windows Cursors - @ful1e5 fork" & +# ctgen "configs/win_lg.$cfg" -d "bitmaps/$key" -n "$key-Large" -c "$comment Large Windows Cursors - @ful1e5 fork" & +# ctgen "configs/win_xl.$cfg" -d "bitmaps/$key" -n "$key-Extra-Large" -c "$comment Extra Large Windows Cursors - @ful1e5 fork" & +# PID=$! +# wait $PID +# done +# +# Compressing Binaries +mkdir -p bin +cd themes || exit + +for key in "${!names[@]}"; do + tar -cJvf "../bin/${key}.tar.xz" "${key}" & + PID=$! + wait $PID +done + +# Compressing macOS.tar.xz +cp ../LICENSE . +tar -cJvf "../bin/macOS.tar.xz" --exclude="*-Windows" . & +PID=$! +wait $PID + +# # Compressing macOS-*-Windows +# for key in "${!names[@]}"; do +# zip -rv "../bin/${key}-Windows.zip" "${key}-Regular-Windows" "${key}-Large-Windows" "${key}-Extra-Large-Windows" & +# PID=$! +# wait $PID +# done + +cd .. + +# Copying License File for 'bitmaps' +cp LICENSE bitmaps/ +zip -rv bin/bitmaps.zip bitmaps diff --git a/configs/x.build.toml b/configs/x.build.toml new file mode 100644 index 0000000..e45d866 --- /dev/null +++ b/configs/x.build.toml @@ -0,0 +1,441 @@ +[theme] +name = 'Notwaita' +comment = 'Notwaita Xcursors - @ful1e5 fork' +website = 'https://github.com/ful1e5/notwaita-cursor' + +[config] +bitmaps_dir = '' # This config will assigned with `ctgen -d ` +out_dir = '../themes' +platforms = 'x11' + +[cursors] +[cursors.fallback_settings] +x11_sizes = [16, 20, 22, 24, 28, 32, 40, 48, 56, 64, 72, 80, 88, 96] +x_hotspot = 128 +y_hotspot = 128 +x11_delay = 20 + +[cursors.bd_double_arrow] +png = 'bd_double_arrow.png' +x11_name = 'bd_double_arrow' +x11_symlinks = ["c7088f0f3e6c8088236ef8e1e3e70000", "nwse-resize", "size_fdiag"] + +[cursors.bottom_left_corner] +png = 'bottom_left_corner.png' +x_hotspot = 61 +y_hotspot = 189 +x11_name = 'bottom_left_corner' +x11_symlinks = ["sw-resize"] + +[cursors.bottom_right_corner] +png = 'bottom_right_corner.png' +x_hotspot = 192 +y_hotspot = 189 +x11_name = 'bottom_right_corner' +x11_symlinks = ['se-resize'] + +[cursors.bottom_side] +png = 'bottom_side.png' +x_hotspot = 133 +y_hotspot = 190 +x11_name = 'bottom_side' +x11_symlinks = ['s-resize'] + +[cursors.bottom_tee] +png = 'bottom_tee.png' +x_hotspot = 126 +y_hotspot = 189 +x11_name = 'bottom_tee' + +[cursors.center_ptr] +png = 'center_ptr.png' +x_hotspot = 124 +y_hotspot = 22 +x11_name = 'center_ptr' + +[cursors.circle] +png = 'circle.png' +x_hotspot = 36 +y_hotspot = 25 +x11_name = 'circle' +x11_symlinks = ['forbidden'] + +[cursors.context-menu] +png = 'context-menu.png' +x_hotspot = 36 +y_hotspot = 25 +x11_name = 'context-menu' + +[cursors.copy] +png = 'copy.png' +x_hotspot = 36 +y_hotspot = 25 +x11_name = 'copy' +x11_symlinks = [ + "1081e37283d90000800003c07f3ef6bf", + "6407b0e94181790501fd1e167b474872", + "b66166c04f8c3109214a4fbd64a50fc8" +] + +[cursors.cross] +png = 'cross.png' +x11_name = 'cross' +x11_symlinks = ["cross_reverse", "diamond_cross"] + +[cursors.crossed_circle] +png = 'crossed_circle.png' +x11_name = 'crossed_circle' +x11_symlinks = ["03b6e0fcb3499374a867c041f52298f0", "not-allowed"] + +[cursors.crosshair] +png = 'crosshair.png' +x_hotspot = 115 +y_hotspot = 113 +x11_name = 'crosshair' + +[cursors.dnd_no_drop] +png = 'dnd-no-drop.png' +x_hotspot = 128 +y_hotspot = 69 +x11_name = 'dnd_no_drop' +x11_symlinks = ["no-drop"] + +[cursors.dnd-ask] +png = 'dnd-ask.png' +x_hotspot = 128 +y_hotspot = 69 +x11_name = 'dnd-ask' + +[cursors.dnd-copy] +png = 'dnd-copy.png' +x_hotspot = 128 +y_hotspot = 69 +x11_name = 'dnd-copy' + +[cursors.dnd-link] +png = 'dnd-link.png' +x_hotspot = 128 +y_hotspot = 69 +x11_name = 'dnd-link' +x11_symlinks = ['alias'] + +[cursors.dotbox] +png = 'dotbox.png' +x11_name = 'dotbox' +x11_symlinks = ["dot_box_mask", "draped_box", "icon", "target"] + +[cursors.fd_double_arrow] +png = 'fd_double_arrow.png' +x_hotspot = 112 +y_hotspot = 105 +x11_name = 'fd_double_arrow' +x11_symlinks = ["fcf1c3c7cd4491d801f1e1c78f100000", "nesw-resize", "size_bdiag"] + +[cursors.grabbing] +png = 'dnd-none.png' +x_hotspot = 128 +y_hotspot = 66 +x11_name = 'dnd-none' +x11_symlinks = [ + "closedhand", + "grabbing", + "fcf21c00b30f7e3f83fe0dfd12e71cff" +] + +[cursors.dnd_move] +png = 'dnd-move.png' +x_hotspot = 128 +y_hotspot = 69 +x11_name = 'dnd-move' + +[cursors.hand1] +png = 'hand1.png' +x_hotspot = 140 +y_hotspot = 58 +x11_name = 'hand1' +x11_symlinks = ["grab", "openhand"] + +[cursors.hand2] +png = 'hand2.png' +x_hotspot = 95 +y_hotspot = 56 +x11_name = 'hand2' +x11_symlinks = [ + "9d800788f1b08800ae810202380a0822", + "e29285e634086352946a0e7090d73106", + "pointer", + "pointing_hand" +] + +[cursors.left_ptr] +png = 'left_ptr.png' +x_hotspot = 36 +y_hotspot = 26 +x11_name = 'left_ptr' +x11_symlinks = ["arrow", "default", "top_left_arrow"] + +[cursors.left_ptr_watch] +png = 'left_ptr_watch-*.png' +x_hotspot = 36 +y_hotspot = 36 +x11_name = 'left_ptr_watch' +x11_symlinks = [ + "00000000000000020006000e7e9ffc3f", + "08e8e1c95fe2fc01f976f1e063a24ccd", + "3ecb610c1bf2410f44200f48c40d3599", + "progress" +] + +[cursors.left_side] +png = 'left_side.png' +x_hotspot = 52 +y_hotspot = 130 +x11_name = 'left_side' +x11_symlinks = ['w-resize'] + +[cursors.left_tee] +png = 'left_tee.png' +x_hotspot = 74 +y_hotspot = 124 +x11_name = 'left_tee' + +[cursors.link] +png = 'link.png' +x_hotspot = 36 +y_hotspot = 25 +x11_name = 'link' +x11_symlinks = [ + "3085a0e285430894940527032f8b26df", + "640fb0e74195791501fd1ed57b41487f", + "a2a266d0498c3104214a47bd64ab0fc8", +] + +[cursors.ll_angle] +png = 'll_angle.png' +x_hotspot = 53 +y_hotspot = 176 +x11_name = 'll_angle' + +[cursors.lr_angle] +png = 'lr_angle.png' +x_hotspot = 189 +y_hotspot = 179 +x11_name = 'lr_angle' + +[cursors.move] +png = 'move.png' +x_hotspot = 126 +y_hotspot = 114 +x11_name = 'move' +x11_symlinks = [ + "4498f0e0c1937ffe01fd06f973665830", + "all-scroll", + "9081237383d90e509aa00f00170e968f", + "fleur", + "size_all" +] + +[cursors.pencil] +png = 'pencil.png' +x_hotspot = 70 +y_hotspot = 213 +x11_name = 'pencil' +x11_symlinks = ['draft'] + +[cursors.plus] +png = 'plus.png' +x_hotspot = 104 +y_hotspot = 115 +x11_name = 'plus' +x11_symlinks = ['cell'] + +[cursors.pointer-move] +png = 'pointer-move.png' +x_hotspot = 112 +y_hotspot = 105 +x11_name = 'pointer-move' + +[cursors.question_arrow] +png = 'question_arrow.png' +x_hotspot = 121 +y_hotspot = 172 +x11_name = 'question_arrow' +x11_symlinks = [ + "5c6cd98b3f3ebcb1f9c7f1c204630408", + "d9ce0ab605698f320427677b458ad60b", + "help", + "left_ptr_help", + "whats_this", +] + +[cursors.right_ptr] +png = 'right_ptr.png' +x_hotspot = 216 +y_hotspot = 24 +x11_name = 'right_ptr' +x11_symlinks = ["draft_large", "draft_small"] + +[cursors.right_side] +png = 'right_side.png' +x_hotspot = 201 +y_hotspot = 128 +x11_name = 'right_side' +x11_symlinks = ['e-resize'] + +[cursors.right_tee] +png = 'right_tee.png' +x_hotspot = 191 +y_hotspot = 224 +x11_name = 'right_tee' + +[cursors.sb_down_arrow] +png = 'sb_down_arrow.png' +x_hotspot = 120 +y_hotspot = 116 +x11_name = 'sb_down_arrow' +x11_symlinks = ['down-arrow'] + +[cursors.sb_h_double_arrow] +png = 'sb_h_double_arrow.png' +x_hotspot = 126 +y_hotspot = 119 +x11_name = 'sb_h_double_arrow' +x11_symlinks = [ + "028006030e0e7ebffc7f7070c0600140", + "14fef782d02440884392942c1120523", + "col-resize", + "ew-resize", + "h_double_arrow", + "size-hor", + "size_hor", + "split_h", +] + +[cursors.sb_left_arrow] +png = 'sb_left_arrow.png' +x_hotspot = 133 +y_hotspot = 120 +x11_name = 'sb_left_arrow' +x11_symlinks = ['left-arrow'] + +[cursors.sb_right_arrow] +png = 'sb_right_arrow.png' +x_hotspot = 116 +y_hotspot = 119 +x11_name = 'sb_right_arrow' +x11_symlinks = ['right-arrow'] + +[cursors.sb_up_arrow] +png = 'sb_up_arrow.png' +x_hotspot = 121 +y_hotspot = 106 +x11_name = 'sb_up_arrow' +x11_symlinks = ['up-arrow'] + +[cursors.sb_v_double_arrow] +png = 'sb_v_double_arrow.png' +x_hotspot = 121 +y_hotspot = 123 +x11_name = 'sb_v_double_arrow' +x11_symlinks = [ + "00008160000006810000408080010102", + "2870a09082c103050810ffdffffe0204", + "double_arrow", + "ns-resize", + "row-resize", + "size-ver", + "size_ver", + "split_v", + "v_double_arrow", +] + +[cursors.tcross] +png = 'tcross.png' +x_hotspot = 121 +y_hotspot = 119 +x11_name = 'tcross' +x11_symlinks = ['color-picker'] + +[cursors.top_left_corner] +png = 'top_left_corner.png' +x_hotspot = 62 +y_hotspot = 63 +x11_name = 'top_left_corner' +x11_symlinks = ['nw-resize'] + +[cursors.top_right_corner] +png = 'top_right_corner.png' +x_hotspot = 190 +y_hotspot = 63 +x11_name = 'top_right_corner' +x11_symlinks = ['ne-resize'] + +[cursors.top_side] +png = 'top_side.png' +x_hotspot = 132 +y_hotspot = 50 +x11_name = 'top_side' +x11_symlinks = ['n-resize'] + +[cursors.top_tee] +png = 'top_tee.png' +x_hotspot = 126 +y_hotspot = 61 +x11_name = 'top_tee' + +[cursors.ul_angle] +png = 'ul_angle.png' +x_hotspot = 54 +y_hotspot = 63 +x11_name = 'ul_angle' + +[cursors.ur_angle] +png = 'ur_angle.png' +x_hotspot = 190 +y_hotspot = 62 +x11_name = 'ur_angle' + +[cursors.vertical-text] +png = 'vertical-text.png' +x_hotspot = 123 +y_hotspot = 107 +x11_name = 'vertical-text' + +[cursors.wait] +png = 'watch-*.png' +x_hotspot = 127 +y_hotspot = 124 +x11_name = 'wait' +x11_symlinks = ['watch'] + +[cursors.wayland-cursor] +png = 'wayland-cursor.png' +x_hotspot = 122 +y_hotspot = 123 +x11_name = 'wayland-cursor' + +[cursors.X_cursor] +png = 'X_cursor.png' +x_hotspot = 121 +y_hotspot = 119 +x11_name = 'X_cursor' +x11_symlinks = ["pirate", "x-cursor"] + +[cursors.xterm] +png = 'xterm.png' +x_hotspot = 110 +y_hotspot = 125 +x11_name = 'xterm' +x11_symlinks = ["ibeam", "text"] + +[cursors.zoom_in] +png = 'zoom-in.png' +x_hotspot = 110 +y_hotspot = 108 +x11_name = 'zoom-in' + +[cursors.zoom_out] +png = 'zoom-out.png' +x_hotspot = 110 +y_hotspot = 108 +x11_name = 'zoom-out'