(require 'evil)
(require 'avy)
(require 'eglot)
(require 'xref)
(require 'flymake)
(defmacro toggle-mode (mode)
`(if ,mode (,mode -1) (,mode 1)))
(defun toggle-eglot-inlay-hints-mode () (toggle-mode eglot-inlay-hints-mode))
(evil-mode 1)
(define-key evil-normal-state-map (kbd "gw") #'avy-goto-word-0)
(define-key evil-normal-state-map (kbd "gl") #'evil-end-of-line)
(define-key evil-normal-state-map (kbd "gh") #'evil-first-non-blank)
(define-key evil-normal-state-map (kbd "gd") #'xref-find-definitions)
(define-key evil-normal-state-map (kbd "gR") #'xref-find-references)
(define-key evil-normal-state-map (kbd "gra") #'eglot-code-actions)
(define-key evil-normal-state-map (kbd "grh") #'eldoc)
(define-key evil-normal-state-map (kbd "grn") #'eglot-rename)
(define-key evil-normal-state-map (kbd "]d") #'flymake-goto-next-error)
(define-key evil-normal-state-map (kbd "[d") #'flymake-goto-prev-error)
(define-key evil-normal-state-map (kbd "^ h") #'toggle-eglot-inlay-hints-mode)
(define-key evil-normal-state-map "Q" #'evil-save-modified-and-close)
(define-key evil-normal-state-map "=" #'eglot-format)
(define-key evil-visual-state-map "v" #'evil-visual-block)
(provide 'binds)