From 536e528196c38262d02f0875baf2a1cbac282138 Mon Sep 17 00:00:00 2001 From: Ben Reaves Date: Sun, 2 Feb 2020 21:27:38 -0600 Subject: [PATCH] - Updated all setup files for kintox11 --- defaults.json | 7 +- keyswap_service.sh | 2 +- .../binary/{kintox11_ubuntu19-10 => kintox11} | Bin 236168 -> 236168 bytes kintox11/src/kintox11.c | 13 +- install.py => old-files/install.py | 0 prekinto.py | 17 -- setup.py | 210 +++++++++++------- user_config.json | 31 ++- 8 files changed, 161 insertions(+), 119 deletions(-) rename kintox11/binary/{kintox11_ubuntu19-10 => kintox11} (59%) rename install.py => old-files/install.py (100%) mode change 100644 => 100755 setup.py diff --git a/defaults.json b/defaults.json index 9292244..8af0ba8 100644 --- a/defaults.json +++ b/defaults.json @@ -1,4 +1,9 @@ -{"defaults":[{ +{"defaultapps":[{ + "name":"term", + "appnames":[ "Gnome-terminal","konsole","io.elementary.terminal","terminator","sakura","guake","tilda","xterm","eterm" ] + }], + "defaulttypes":["windows","mac","chromebook"], + "defaults":[{ "id": 1, "name":"Windows", "type":"windows", diff --git a/keyswap_service.sh b/keyswap_service.sh index 0f41f93..b187909 100755 --- a/keyswap_service.sh +++ b/keyswap_service.sh @@ -5,7 +5,7 @@ mkdir -p ~/.config/systemd/user mkdir -p ~/.config/autostart cp ./system-config/keyswap.service ~/.config/systemd/user/keyswap.service cp ./system-config/keyswap.sh ~/.config/autostart/keyswap.sh -cp ./kintox11/binary/kintox11_ubuntu19-10 ~/.config/kinto/kintox11 +cp ./kintox11/binary/kintox11 ~/.config/kinto/kintox11 sed -i "s/{username}/`whoami`/g" ~/.config/systemd/user/keyswap.service sed -i "s/ExecStart=/ExecStart=${swapcmd}/g" ~/.config/systemd/user/keyswap.service systemctl --user enable keyswap diff --git a/kintox11/binary/kintox11_ubuntu19-10 b/kintox11/binary/kintox11 similarity index 59% rename from kintox11/binary/kintox11_ubuntu19-10 rename to kintox11/binary/kintox11 index 6320156ba346b896548e0b5c7320de4f74a86fb2..6c1d9e4572f6968983f49b6b371a35473654a675 100755 GIT binary patch delta 46324 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

4tip(@%? z^<|#k3POX>KKNp<9K-unY)&dhhwfKNbyA^uHCug!a+QMcMJWBkvpI=~deNasD1I_p zzW?Td-;y?G!eX&Qn3+A zt<8B%)b9>OLSaiTPM-MIrV^fW^oQD!W8{lav@@m#sgONPenO#Q+$cDJ8=Ugk1lCKWP>J`)NR*=Jn3`{u^xnEhU+AS@C3vBksYAhfT=$|RJ2Z`%xns6Vv6BRN@pd{V;Fm zK|i>D89(oX?`H%PO@rz*zECm0B(Pd_aIMwR6hft$3?3X(tVE>>%4;>kp@Tu@s%*5&zL{Ig2l%jS7iNE-|x@CJt?4ZrhX#@_jFeLQR3o}Ne1sPF3TY9pOG~x z736_Xhl5Nf2b+)Z?o%>Vusao0zsW-+^+BSTa+LjTuaf%GOd8hju+8)%<=G;&|vZ;(Z#_LCk z_jAqrL6vD=^UI@R`o);>}^A0w_Lt|Qi& z?@$kx$&r1*g0;4~OPoV|iWnxY(tq9b6_$%*gy1gvDx`?}i2cORi05B0trtyp@JPRC zTR)+*T47y$tOS=-Tk$gD3Stv6PVA~S)?IP^`jfP{olSV+a!GP{jE;)pxY*0`heUB? z4A6@)^paq{ z6&6u@8&UjryS&d|VSpL)#yTdFBUT0Y~co!qXZMxuPmjCv|{;G(b(!Iow zh@TM86GM&0nty%N@qQ9kFT(Ok;u+#_)Ked3QQ{LyxWGh{H6y|OMw&czQIj}&lcUVt zVzt~2MmLN1IeQC_%vU zY3he5Y^ui+rR1-ZPxlN)H>hu6sZaYi!8CGI)NE4qm2$d%f)$#lI!-=rf&>X&rpeX4Oe1N&qju2vP4WXVOUR&{9BU7mdq-izM=-rafeF4z{S$ zpnO)4{=_K{?6noxB5dIPm-&wntWiDReXT@aq>tu|4Lld2TyRm zVXb+;5y~a1^Ir0|$Rpx@&UW-W-fIQ2n3mulrr(GgUIn>Hkh9Yu5{jHNh$Imsrk>;! zkSFpttcS?y{siu~e3c(!yZJMD{i<~;p%(jZ%(8;j8ipl>87oUQGTh`4e>>p?9~drEXx2mCE9rpc1lZjI^V($P<#^ zfx(V(b<53e$E+}eO0&Ma#rBg&I`32m>JMoBIWU+xV%zzdow-B3$UBxeNj?WR$=F4* z1-BCyDf6}!$l#VyF8 zK1BWt@`$iMjt-jy5XD^>u>7B;JSAooa29aY;yQc31>}*JVrLg-@w_U_ONY8CM;3+= z*hPeRo!^aBjXbuAZj^`W22XXX>^Z*Euj@01ROw84%nMG}w~JI!&zISQ(+;cTl>Y$b CpHVFU diff --git a/kintox11/src/kintox11.c b/kintox11/src/kintox11.c index 793ca59..b716937 100644 --- a/kintox11/src/kintox11.c +++ b/kintox11/src/kintox11.c @@ -120,7 +120,8 @@ int main(void){ struct json_object *parsed_json, *config, *config_obj, *config_obj_name, *config_obj_run, *config_obj_de, *config_obj_appnames, *appnames_obj, *init, *de, - *de_obj, *de_obj_id, *de_obj_active, *de_obj_run; + *de_obj, *de_obj_id, *de_obj_active, *de_obj_run, + *de_obj_runterm,*de_obj_rungui; int arraylen; int appnames_len, init_len, de_len, config_de_len; @@ -149,6 +150,8 @@ int main(void){ int de_id_array[de_len]; Bool de_active_array[de_len]; const char *de_run_array[de_len]; + const char *de_runterm_array[de_len]; + const char *de_rungui_array[de_len]; // Grab all de variable info needed for (i = 0; i < de_len; i++) { @@ -159,6 +162,10 @@ int main(void){ de_active_array[i] = json_object_get_int(de_obj_active); de_obj_run = json_object_object_get(de_obj, "run"); de_run_array[i] = json_object_get_string(de_obj_run); + de_obj_runterm = json_object_object_get(de_obj, "run_term"); + de_runterm_array[i] = json_object_get_string(de_obj_runterm); + de_obj_rungui = json_object_object_get(de_obj, "run_gui"); + de_rungui_array[i] = json_object_get_string(de_obj_rungui); // printf("de_run_array[%ld]: %s\n",i,de_run_array[i]); } // de ends @@ -278,7 +285,7 @@ int main(void){ if(config_de_array[i][r] != -1){ int de_id_idx = in_int(de_id_array, de_len, config_de_array[i][r]); // printf("Running de command: %s\n",de_run_array[de_id_idx]); - system(de_run_array[de_id_idx]); + system(de_runterm_array[de_id_idx]); } } remap_bool = 0; @@ -304,7 +311,7 @@ int main(void){ if(config_de_array[gui_idx][r] != -1){ int de_id_idx = in_int(de_id_array, de_len, config_de_array[gui_idx][r]); // printf("Running de command: %s\n",de_run_array[de_id_idx]); - system(de_run_array[de_id_idx]); + system(de_rungui_array[de_id_idx]); } } // printf("3rd elseif %s i:%ld n:%ld %s\n",name_array[i],i,n,appnames_array[i][n]); diff --git a/install.py b/old-files/install.py similarity index 100% rename from install.py rename to old-files/install.py diff --git a/prekinto.py b/prekinto.py index 38eeb13..335425e 100644 --- a/prekinto.py +++ b/prekinto.py @@ -50,23 +50,6 @@ class bcolors: CBEIGEBG2 = '\033[106m' CWHITEBG2 = '\033[107m' -def cmdline(command): - process = Popen( - args=command, - stdout=PIPE, - shell=True - ) - return process.communicate()[0] - -def copytree(src, dst, symlinks=False, ignore=None): - for item in os.listdir(src): - s = os.path.join(src, item) - d = os.path.join(dst, item) - if os.path.isdir(s): - shutil.copytree(s, d, symlinks, ignore) - else: - shutil.copy2(s, d) - def yn_choice(message, default='y'): choices = 'Y/n' if default.lower() in ('y', 'yes') else 'y/N' choice = input("%s (%s) " % (message, choices)) diff --git a/setup.py b/setup.py old mode 100644 new mode 100755 index 027508c..5e21479 --- a/setup.py +++ b/setup.py @@ -1,115 +1,165 @@ #!/usr/bin/env python3 - -import json -import os -from subprocess import PIPE, Popen +import json, time, os from shutil import copyfile +from subprocess import PIPE, Popen from prekinto import * -print("\nKinto - Type in Linux like it's a Mac.\n") +homedir = os.path.expanduser("~") + +def cmdline(command): + process = Popen( + args=command, + stdout=PIPE, + universal_newlines=True, + shell=True + ) + return process.communicate()[0] try: - f = open("default.json") + f = open("defaults.json") except IOError: - print("default.json file is missing. Will exit.\n") + print("defaults.json file is missing. Will exit.\n") exit() f.close() try: - f = open("kinto.json") - rewrite = yn_choice("kinto.json already exists. Do you want to overwrite it with a new config?") + f = open("user_config.json") +except IOError: + print("user_config.json file is missing. Will exit.\n") + exit() +f.close() + +if os.path.isdir(homedir + "/.config/kinto") == False: + os.mkdir(homedir + "/.config/kinto") + time.sleep(0.5) + +try: + f = open(homedir + "/.config/kinto/user_config.json") + rewrite = yn_choice("~/.config/kinto/user_config.json already exists. Do you want to overwrite it with a new config?") print("") if(rewrite): - copyfile("default.json", "kinto.json") + copyfile("user_config.json", homedir + "/.config/kinto/user_config.json") else: exit() except IOError: pass - copyfile("default.json", "kinto.json") + copyfile("user_config.json", homedir + "/.config/kinto/user_config.json") finally: f.close() -with open('kinto.json') as json_file: +with open('defaults.json') as json_file: data = json.load(json_file) - for index, item in enumerate(data['defaulttypes']): - ossym = "" - color_arr = [bcolors.CBLUE,bcolors.CRED,bcolors.CGREEN] - if item == "windows": - ossym = u'\u2756' - elif item == "mac": - ossym = u'\u2318' - elif item == "chromebook": - ossym = u'\u2707' - print("%s %i. %s %s %s" % (color_arr[index], index+1, ossym, item.capitalize(), bcolors.ENDC)) +color_arr = [bcolors.CBLUE,bcolors.CRED,bcolors.CGREEN] - default = 0 - while not int(default) in range(1,len(data['defaulttypes'])+1): - default = int(input(bcolors.CYELLOW + "Please enter your keyboard type (1 - " + str(len(data['defaulttypes'])) + ") : " + bcolors.ENDC)) - print("") - # print(data['defaulttypes'][default-1]) +print("\nKinto - Type in Linux like it's a Mac.\n") - keyboardconfigs = [obj for obj in data['defaults'] if(obj['type'] == data['defaulttypes'][default-1])] - # print(len(keyboardconfigs)) +for index, item in enumerate(data['defaulttypes']): + ossym = "" + if item == "windows": + ossym = u'\u2756' + elif item == "mac": + ossym = u'\u2318' + elif item == "chromebook": + ossym = u'\u2707' + print("%s %i. %s %s %s" % (color_arr[index], index+1, ossym, item.capitalize(), bcolors.ENDC)) - # for k in keyboardconfigs: - for index, k in enumerate(keyboardconfigs): +default = 0 +while not int(default) in range(1,len(data['defaulttypes'])+1): + default = int(input(bcolors.CYELLOW + "\nPlease enter your keyboard type (1 - " + str(len(data['defaulttypes'])) + ") : " + bcolors.ENDC)) +print("") + +keyboardconfigs = [obj for obj in data['defaults'] if(obj['type'] == data['defaulttypes'][default-1])] + +# for k in keyboardconfigs: +for index, k in enumerate(keyboardconfigs): + print(color_arr[default-1] + bcolors.BOLD + str(index+1) + '. ' + k['name'] + bcolors.ENDC) + print(bcolors.CYELLOW + 'Description: ' + k['description'] + bcolors.ENDC) + +print("") +defaultkb = 0 +while not int(defaultkb) in range(1,len(keyboardconfigs)+1): + defaultkb = int(input(bcolors.CYELLOW + "Please enter your keyboard config (1 - " + str(len(keyboardconfigs)) + ") : " + bcolors.ENDC)) +print("") + +if 'hack' in keyboardconfigs[defaultkb-1]: + print(bcolors.CYELLOW + "You have selected a keyboard config that needs the following command to be ran.\n" + bcolors.ENDC) + print(keyboardconfigs[defaultkb-1]['hack'].replace(";", "\n") + "\n") + runhack = yn_choice(bcolors.CYELLOW + "Would you like to run it now? (Will require sudo privileges. Will exit on No.)" + bcolors.ENDC) + if(runhack): + os.system(keyboardconfigs[defaultkb-1]['hack']) + +# Setup the selected keyboards config +os.system("cp -rf ./.xkb ~/.xkb") +if os.path.isdir(homedir + "/.xkb/keymap") == False: + os.mkdir(homedir + "/.xkb/keymap") + time.sleep(0.5) +os.system('setxkbmap -option') +os.system('setxkbmap -print > ~/.xkb/keymap/kbd.mac.gui') +os.system('setxkbmap -print > ~/.xkb/keymap/kbd.mac.term') +time.sleep(0.5) + +symbols_gui_line = cmdline("cat ~/.xkb/keymap/kbd.mac.gui | grep -n 'xkb_symbols' | cut -f1 -d:").strip() +types_gui_line = cmdline("cat ~/.xkb/keymap/kbd.mac.gui | grep -n 'xkb_types' | cut -f1 -d:").strip() +symbols_term_line = cmdline("cat ~/.xkb/keymap/kbd.mac.term | grep -n 'xkb_symbols' | cut -f1 -d:").strip() + +cmdline('sed -i '' -e "' + symbols_gui_line + 's/\\"/' + keyboardconfigs[defaultkb-1]['xkb_symbols_gui'] + '\\"/2" ~/.xkb/keymap/kbd.mac.gui') +cmdline('sed -i '' -e "' + types_gui_line + 's/\\"/' + keyboardconfigs[defaultkb-1]['xkb_types_gui'] + '\\"/2" ~/.xkb/keymap/kbd.mac.gui') +cmdline('sed -i '' -e "' + symbols_term_line + 's/\\"/' + keyboardconfigs[defaultkb-1]['xkb_symbols_term'] + '\\"/2" ~/.xkb/keymap/kbd.mac.term') + + +user_file = homedir + '/.config/kinto/user_config.json' +with open(user_file, 'r') as f: + user_config = json.load(f) + +onetime = yn_choice("One time initialization tweaks are available. Would you like to view them?") +print("") +if(onetime): + intents = [obj for obj in user_config['de'] if(obj['intent'] == "init")] + + for index, k in enumerate(intents): print(color_arr[default-1] + bcolors.BOLD + str(index+1) + '. ' + k['name'] + bcolors.ENDC) print(bcolors.CYELLOW + 'Description: ' + k['description'] + bcolors.ENDC) + print(bcolors.CYELLOW + 'run: ' + k['run'].replace(";", "\n") + bcolors.ENDC + '\n') - # print(keyboardconfigs[0]['id']) - # print(keyboardconfigs[len(keyboardconfigs)-1]['id']) - print("") - defaultkb = 0 - while not int(defaultkb) in range(1,len(keyboardconfigs)+1): - defaultkb = int(input(bcolors.CYELLOW + "Please enter your keyboard config (1 - " + str(len(keyboardconfigs)) + ") : " + bcolors.ENDC)) - print("") + print(bcolors.CYELLOW + "Please enter your init tweak(s) (eg 1 or 1 2 3 - leave blank to skip): " + bcolors.ENDC) + defaultinit = [int(i) for i in input().split()] + if len(defaultinit) != 0: + user_config['init'] = defaultinit - if 'hack' in keyboardconfigs[defaultkb-1]: - print(bcolors.CYELLOW + "You have selected a keyboard config that needs the following command to be ran.\n" + bcolors.ENDC) - print(keyboardconfigs[defaultkb-1]['hack'].replace(";", "\n") + "\n") - runhack = yn_choice(bcolors.CYELLOW + "Would you like to run it now? (Will require sudo privileges. Will exit on No.)" + bcolors.ENDC) - if(runhack): - # keyboardconfigs[defaultkb-1]['hack'] - os.system('sudo hostname') - # else: - # exit() +print("\nDynamic shortcut tweaks\n") - # Setup the selected keyboards config - copytree("./.xkb/","~/.xkb/") - os.system('setxkbmap -option') - os.system('setxkbmap -print > ~/.xkb/keymap/kbd.mac.gui') - os.system('setxkbmap -print > ~/.xkb/keymap/kbd.mac.term') - winmac = ["Windows","Mac - hid driver"] - if keyboardconfigs[defaultkb-1]['name'] in winmac: +intents = [obj for obj in user_config['de'] if(obj['intent'] == "gui_term")] +for index, k in enumerate(intents): + print(color_arr[default-1] + bcolors.BOLD + str(index+1) + '. ' + k['name'] + bcolors.ENDC) + print(bcolors.CYELLOW + 'Description: ' + k['description'] + bcolors.ENDC) + print(bcolors.CYELLOW + 'run in gui mode: ' + k['run_gui'].replace(";", "\n") + bcolors.ENDC) + print(bcolors.CYELLOW + 'run in terminal mode: ' + k['run_term'].replace(";", "\n") + bcolors.ENDC + '\n') -# line=$(cat ~/.xkb/keymap/kbd.mac.gui | grep -n 'xkb_symbols' | cut -f1 -d:) -# sed -ie "${line}s/\"/+altwin(ctrl_alt_win)+mac_gui(mac_levelssym)\"/2" ~/.xkb/keymap/kbd.mac.gui -# sleep 1 -# line=$(cat ~/.xkb/keymap/kbd.mac.gui | grep -n 'xkb_types' | cut -f1 -d:) -# sed -ie "${line}s/\"/+mac_gui(addmac_levels)\"/2" ~/.xkb/keymap/kbd.mac.gui -# sleep 1 -# line=$(cat ~/.xkb/keymap/kbd.mac.term | grep -n 'xkb_symbols' | cut -f1 -d:) -# sed -ie "${line}s/\"/+altwin(swap_alt_win)+mac_term(mac_levelssym)\"/2" ~/.xkb/keymap/kbd.mac.term - +print(bcolors.CYELLOW + "Please enter your dynamic shortcut tweak(s) (eg 1 or 1 2 3 - leave blank to skip): " + bcolors.ENDC) +defaultde = [int(i) for i in input().split()] +if len(defaultde) != 0: + # gui + user_config['config'][0]['de'] = defaultde + # term + user_config['config'][1]['de'] = defaultde -# Tweaks available for initialization (on boot) +for d in defaultde: + user_config['de'][d-1]['active'] = True -# Tweaks available while in gui keymap mode - -# Tweaks available while in terminal keymap mode - - -# "id": 2, -# "name":"Mac - hid driver", -# "active": false, -# "description":"Standard Mac Keyboards with Apple driver", -# "gui":"setxkbmap -option;xkbcomp -w0 -I$HOME/.xkb ~/.xkb/keymap/kbd.mac.gui $DISPLAY", -# "term":"setxkbmap -option;xkbcomp -w0 -I$HOME/.xkb ~/.xkb/keymap/kbd.mac.term $DISPLAY", -# "xkb_symbols_gui":"+altwin(ctrl_alt_win)+mac_gui(mac_levelssym)", -# "xkb_symbols_term":"+altwin(swap_alt_win)+mac_term(mac_levelssym)", -# "xkb_types_gui":"+mac_gui(addmac_levels)", -# "xkb_types_term":"", -# "hack": "echo '1' | sudo tee -a /sys/module/hid_apple/parameters/swap_opt_cmd;echo 'options hid_apple swap_opt_cmd=1' | sudo tee -a /etc/modprobe.d/hid_apple.conf;sudo update-initramfs -u -k all" +user_config['config'][0]['run'] = keyboardconfigs[defaultkb-1]['gui'] +user_config['config'][1]['run'] = keyboardconfigs[defaultkb-1]['term'] +os.remove(user_file) +with open(user_file, 'w') as f: + json.dump(user_config, f, indent=4) +print("Saved configuration to ~/.config/kinto/user_config.json\n") +print("Now running keyswap_service.sh to setup the keyswap service...") +print("Keyswap will be configured to run on user login\n") +print("You may start, stop, restart or view the status of the service with following commands\n") +print("systemctl --user start keyswap") +print("systemctl --user stop keyswap") +print("systemctl --user restart keyswap") +print("systemctl --user status keyswap") +os.system("./keyswap_service.sh") \ No newline at end of file diff --git a/user_config.json b/user_config.json index 4b2516a..d6ee4f8 100644 --- a/user_config.json +++ b/user_config.json @@ -11,41 +11,38 @@ "appnames":[ "Gnome-terminal","konsole","io.elementary.terminal","terminator","sakura","guake","tilda","xterm","eterm" ] }], "init": [], - "defaultapps":[{ - "name":"term", - "appnames":[ "Gnome-terminal","konsole","io.elementary.terminal","terminator","sakura","guake","tilda","xterm","eterm" ] - }], "detypes":["gnome2","gnome3","kde4","kde5","xfce","i3wm"], "de":[{ "id": 1, "type": ["gnome3"], "active": false, + "intent":"init", "name":"gnome-init", "description":"Gnome - Remove Superkey Overlay keybinding to Activities Overview", - "run":"gsettings set org.gnome.mutter overlay-key ''" + "run":"gsettings set org.gnome.mutter overlay-key ''", + "run_term":"", + "run_gui":"" }, { "id": 2, "type": ["gnome3"], "active": false, - "name":"gnome-term", - "description":"Gnome - Terminal - Superkey+Space opens Activities Overview", - "run":"gsettings set org.gnome.desktop.wm.keybindings panel-main-menu \"['Space']\"" + "intent":"gui_term", + "name":"Gnome Activities Overview", + "description":"Cmd+Space activates Activities Overview", + "run":"", + "run_term":"gsettings set org.gnome.desktop.wm.keybindings panel-main-menu \"['Space']\"", + "run_gui":"gsettings set org.gnome.desktop.wm.keybindings panel-main-menu \"['Space']\"" }, { "id": 3, - "type": ["gnome3"], - "active": false, - "name":"gnome-gui", - "description":"Gnome - GUI - Ctrl+Space opens Activities Overview", - "run":"gsettings set org.gnome.desktop.wm.keybindings panel-main-menu \"['Space']\"" - }, - { - "id": 4, "type": ["kde5"], "active": false, + "intent":"init", "name":"kde-init", "description":"KDE Plasma 5 - Removes Superkey Overlay from the Launcher Menu", - "run":"gsettings set org.gnome.mutter overlay-key '';kwriteconfig5 --file ~/.config/kwinrc --group ModifierOnlyShortcuts --key Meta \"\";qdbus org.kde.KWin /KWin reconfigure" + "run":"kwriteconfig5 --file ~/.config/kwinrc --group ModifierOnlyShortcuts --key Meta \"\";qdbus org.kde.KWin /KWin reconfigure", + "run_term":"", + "run_gui":"" }] } \ No newline at end of file