diff --git a/emacs/init.org b/emacs/init.org index f7cad98..35e05cd 100755 --- a/emacs/init.org +++ b/emacs/init.org @@ -2401,3 +2401,62 @@ Emacs has excellent built-in SQL support. #+BEGIN_SRC emacs-lisp (leader-def-key "sg" #'sql-postgres) #+END_SRC +* GraphQL +#+BEGIN_SRC emacs-lisp + (use-package graphql-mode + :quelpa ((graphql-mode :fetcher github + :repo "davazp/graphql-mode")) + :config + (defvar graphql-env-alist '() + "An alist defining available GraphQL servers + + The key is any symbol and the value is a cons pair of + (graphql-url . graphql-auth-token)") + (setq graphql-variables-file "~/variables.graphql") + (defun graphql-set-env (env) + (interactive + (list + (intern + (ido-completing-read+ + "GraphQL env: " + (mapcar #'car graphql-env-alist))))) + (let* ((gql-params (alist-get env graphql-env-alist)) + (url (car gql-params)) + (auth-token (cdr gql-params))) + (setq graphql-url url + graphql-extra-headers `(("Authorization" . ,auth-token))))) + (defun graphql (env) + "Opens a graphql-mode buffer in the specified environment" + (interactive + (list + (intern + (ido-completing-read+ + "GraphQL env: " + (mapcar #'car graphql-env-alist))))) + (graphql-set-env env) + (let ((graphql-buf (get-buffer-create "*graphql-query*"))) + (set-buffer graphql-buf) + (when (string= "" (buffer-substring (point-min) (point-max))) + (insert "{\n \n}") + (goto-char 5)) + (graphql-mode) + (switch-to-buffer graphql-buf))) + (defun find-graphql-variables-file () + (interactive) + (find-file graphql-variables-file)) + (jdormit/define-prefix "q" "graphql") + (leader-def-key "qe" #'graphql-set-env) + (leader-def-key "qf" #'find-graphql-variables-file) + (leader-def-key "aq" #'graphql) + (general-def graphql-mode-map "C-c C-e" #'graphql-set-env) + (general-def graphql-mode-map "C-c C-v" #'find-graphql-variables-file)) +#+END_SRC + +GraphQL environments: +#+BEGIN_SRC emacs-lisp + (setq graphql-env-alist + `((dev . ("https://api-dev.lola.co/api/graphql" . + ,(password-store-get "lola-graphql-dev-token"))) + (local . ("http://localhost:7200/api/graphql" . + ,(password-store-get "lola-graphql-local-token"))))) +#+END_SRC