arsenik-qmk.sh 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. #!/usr/bin/env bash
  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. if [ -z "${EDITOR+x}" ]; then
  16. if [ which nano 2>&1 >/dev/null ]; then
  17. EDITOR="nano"
  18. else
  19. EDITOR="vi"
  20. fi
  21. fi
  22. function get_keymaps_folder() {
  23. keyboard_name="$1"
  24. while [ ! -d "$QMK_PATH/keyboards/$keyboard_name/keymaps" ]; do
  25. if [ "$keyboard_name" == "." ]; then
  26. echo "Couldn’t find keymap folder for your keyboard"
  27. exit 1
  28. fi
  29. keyboard_name=$(dirname "$keyboard_name")
  30. done
  31. echo "$QMK_PATH/keyboards/$keyboard_name/keymaps"
  32. }
  33. function make_new_arsenik_keymap() {
  34. local keyboard_name="$1"
  35. local qmk_cmd="$2"
  36. local no_editor="$3"
  37. local keymap_folder=$(get_keymaps_folder "$keyboard_name")
  38. local arsenik_folder="$keymap_folder/arsenik/"
  39. local default_keymap_folder="$keymap_folder/default"
  40. cp -r "$default_keymap_folder" "$arsenik_folder"
  41. ls -l "$arsenik_folder"
  42. local layout=""
  43. case $(ls "$default_keymap_folder"/keymap.* | sed 's/.*\(keymap.*\)/\1/') in
  44. "keymap.c") layout=$(grep 'LAYOUT' "$default_keymap_folder"/keymap.c | sed 's/.*= \(.*\)(/\1/' | head -n 1);;
  45. "keymap.json") layout=$(grep 'LAYOUT' "$default_keymap_folder"/keymap.json | sed 's/ *"layout": "\(.*\)",/\1/');;
  46. *) echo "Unable to find layout name, unsupported keymap format";;
  47. esac
  48. if [ "$layout" == "LAYOUT" ]; then
  49. layout+="_$(echo "$keyboard_name" | sed 's,/,_,g' | sed 's/_rev[0-9]*$//')"
  50. fi
  51. layout="ARSENIK_$layout"
  52. rm "$arsenik_folder"/keymap.*
  53. cat ./arsenik_config.h >> "$arsenik_folder/config.h"
  54. cat ./rules.mk >> "$arsenik_folder/rules.mk"
  55. cp ./keymap.c ./arsenik.h ./keymap_ergol.h "$arsenik_folder"
  56. # echo "s/ARSENIK_PLACEHOLDER_LAYOUT/$layout/"
  57. sed -i "s/ARSENIK_PLACEHOLDER_LAYOUT/$layout/" "$arsenik_folder/config.h"
  58. if [ $no_editor = false ]; then
  59. eval "$EDITOR" "$arsenik_folder/config.h"
  60. fi
  61. case "$qmk_cmd" in
  62. "none") ;;
  63. "build") cd $QMK_PATH && make "$keyboard_name:arsenik";;
  64. "flash") cd $QMK_PATH && make "$keyboard_name:arsenik:flash";;
  65. esac
  66. }
  67. no_editor=false
  68. qmk_cmd="none"
  69. for arg in "${@:2}"; do
  70. case "$arg" in
  71. "-n") no_editor=true;;
  72. "-b") qmk_cmd="build";;
  73. "-f") qmk_cmd="flash";;
  74. *) echo "Unknown argument $arg."; exit 1;;
  75. esac
  76. done
  77. make_new_arsenik_keymap "$1" "$qmk_cmd" "$no_editor"