(menu-bar-mode -1)
(tool-bar-mode -1)
(scroll-bar-mode -1)
(setq inhibit-startup-message t)
(prefer-coding-system 'utf-8)

(setq backup-directory-alist `(("." . "~/.emacs-saves")))
(setq auto-save-file-name-transforms `((".*" "~/.emacs-saves/" t)))
(make-directory "~/.emacs-saves" t)

(use-package vertico
  :init (vertico-mode))

(use-package orderless
  :custom (completion-styles '(orderless)))

(use-package marginalia
  :init (marginalia-mode))

(use-package consult
  :bind (("C-s" . consult-line)
         ("C-x b" . consult-buffer)
         ("M-g g" . consult-goto-line)
         ("M-g i" . consult-imenu)))

(use-package corfu
  :custom
  (corfu-auto t)
  (corfu-cycle t)
  :init
  (global-corfu-mode))

(use-package cape
  :init
  (add-to-list 'completion-at-point-functions #'cape-file)
  (add-to-list 'completion-at-point-functions #'cape-dabbrev)
  (add-to-list 'completion-at-point-functions #'cape-symbol))

(setq inferior-lisp-program "ros run")
(use-package sly
  :init (setq sly-lisp-implementations '((roswell ("ros" "run"))))
  :config (setq sly-symbol-completion-mode t))

(use-package eglot
  :hook ((python-mode . eglot-ensure)
         (c-mode . eglot-ensure)
         (c++-mode . eglot-ensure)))

(use-package which-key
  :init (which-key-mode))

(use-package evil
  :init (evil-mode 1))

(use-package general
  :config
  (general-create-definer my/leader-keys
    :keymaps '(normal insert visual emacs)
    :prefix "SPC"
    :global-prefix "C-SPC")

  (my/leader-keys
    "f" '(:ignore t :which-key "fichier")
    "f f" '(find-file :which-key "ouvrir fichier")
    "f s" '(save-buffer :which-key "sauver")
    "b" '(:ignore t :which-key "buffer")
    "b b" '(consult-buffer :which-key "changer buffer")
    "w" '(:ignore t :which-key "fenêtres")
    "w v" '(split-window-right :which-key "split vertical")
    "w s" '(split-window-below :which-key "split horizontal")
    "w d" '(delete-window :which-key "fermer fenêtre")
    "h" '(:ignore t :which-key "aide")
    "h f" '(describe-function :which-key "fonction")
    "h v" '(describe-variable :which-key "variable")
    "h k" '(describe-key :which-key "touche")
    "p" '(:ignore t :which-key "projet")
    "p p" '(projectile-switch-project :which-key "changer projet")
    "d" '(:ignore t :which-key "Dired")
    "d d" '(dirvish :which-key "ouvrir Dired")
    "g" '(:ignore t :which-key "Magit")
    "g g" '(magit-status :which-key "status git")))

(use-package projectile
  :diminish projectile-mode
  :config (projectile-mode)
  :custom ((projectile-completion-system 'default))
  :bind-keymap ("C-c p" . projectile-command-map)
  :init
  (when (file-directory-p "~/projects")
    (setq projectile-project-search-path '("~/projects")))
  (setq projectile-switch-project-action #'projectile-dired))

(use-package dirvish
  :init (dirvish-override-dired-mode))

(use-package solarized-theme)
(load-theme 'solarized-light t)

(defun toggle-solarized-theme ()
  (interactive)
  (let ((current (car custom-enabled-themes)))
    (mapc #'disable-theme custom-enabled-themes)
    (load-theme (if (eq current 'solarized-light)
                    'solarized-dark
                  'solarized-light) t)))
(global-set-key (kbd "<f6>") #'toggle-solarized-theme)

(use-package perspective
  :custom
  (persp-mode-prefix-key (kbd "C-c M-p"))
  :init
  (persp-mode)
  :config
  (setq persp-state-default-file "~/.emacs.d/perspectives")
  (add-hook 'kill-emacs-hook #'persp-state-save))

(use-package org-auto-tangle
  :hook (org-mode . org-auto-tangle-mode))

(message "✅ Emacs avec complétion moderne, workspaces, Solarized et raccourcis SPC")