arsenik-qmk.sh 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. !#/bin/sh
  2. set -euo pipefail
  3. if [ "$#" -lt 1 ]; then
  4. echo "Usage:"
  5. echo "$0 <keyboard_name> [-n] [-b,-f]"
  6. echo " # Install Arsenik for your keyboard, opens your editor to edit the config"
  7. echo ' # -n: no editor: doesn’t open the config with your $EDITOR'
  8. echo " # -b: build the newly created keymap (after you edited the config)"
  9. echo " # -f: build the newly created keymap (after you edited the config) then flash"
  10. exit 0
  11. fi
  12. if [ -z "${QMK_PATH+x}" ]; then
  13. QMK_PATH="$HOME/qmk_firmware"
  14. fi
  15. function get_keymaps_folder() {
  16. keyboard_name="$1"
  17. while [ ! -d "$QMK_PATH/keyboards/$keyboard_name/keymaps" ]; do
  18. if [ "$keyboard_name" == "." ]; then
  19. echo "Couldn’t find keymap folder for your keyboard"
  20. exit 1
  21. fi
  22. keyboard_name=$(dirname "$keyboard_name")
  23. done
  24. echo "$QMK_PATH/keyboards/$keyboard_name/keymaps"
  25. }
  26. function make_new_arsenik_keymap() {
  27. local keyboard_name="$1"
  28. local qmk_cmd="$2"
  29. local no_editor="$3"
  30. local keymap_folder=$(get_keymaps_folder "$keyboard_name")
  31. local arsenik_folder="$keymap_folder/arsenik"
  32. local default_keymap_folder="$keymap_folder/default"
  33. cp -r "$default_keymap_folder" "$arsenik_folder"
  34. local layout=""
  35. case $(ls "$arsenik_folder"/keymap.* | sed 's/.*\(keymap.*\)/\1/') in
  36. "keymap.c") layout=$(grep 'LAYOUT' "$arsenik_folder"/keymap.c | sed 's/.*= \(.*\)(/\1/' | head -n 1);;
  37. "keymap.json") layout=$(grep 'LAYOUT' "$arsenik_folder"/keymap.json | sed 's/ *"layout": "\(.*\)",/\1/');;
  38. *) echo "Unable to find layout name, unsupported keymap format";;
  39. esac
  40. if [ "$layout" == "LAYOUT" ]; then
  41. layout+="_$(echo "$keyboard_name" | sed 's,/,_,g' | sed 's/_rev[0-9]*$//')"
  42. fi
  43. layout="ARSENIK_$layout"
  44. rm "$arsenik_folder"/keymap.*
  45. cat ./arsenik_config.h >> "$arsenik_folder/config.h"
  46. cat ./rules.mk >> "$arsenik_folder/rules.mk"
  47. cp ./keymap.c ./arsenik.h ./keymap_ergol.h "$arsenik_folder"
  48. sed -i "s/ARSENIK_PLACEHOLDER_LAYOUT/$layout/" "$arsenik_folder/config.h"
  49. if [ $no_editor = false ]; then
  50. eval "$EDITOR" "$arsenik_folder/config.h"
  51. fi
  52. case "$qmk_cmd" in
  53. "none") ;;
  54. "build") cd $QMK_PATH && make "$keyboard_name:arsenik";;
  55. "flash") cd $QMK_PATH && make "$keyboard_name:arsenik:flash";;
  56. esac
  57. }
  58. no_editor=false
  59. qmk_cmd="none"
  60. for arg in "${@:2}"; do
  61. case "$arg" in
  62. "-n") no_editor=true;;
  63. "-b") qmk_cmd="build";;
  64. "-f") qmk_cmd="flash";;
  65. *) echo "Unknown argument $arg."; exit 1;;
  66. esac
  67. done
  68. make_new_arsenik_keymap "$1" "$qmk_cmd" "$no_editor"