;;; configuration --- Une configuration Emacs
;;; Commentary:
;;; configuration piochee sur le net
;;; Code:

(setq max-lisp-eval-depth 10000)
(setq max-specpdl-size 10000)

(setq forge-alist nil)

(require 'package)
(setq package-enable-at-startup nil)

(add-to-list 'package-archives
	     '("melpa" . "http://melpa.org/packages/"))
(add-to-list 'package-archives
	     '("gnu" . "http://elpa.gnu.org/packages/"))

;; positionner is-standalone à true pour utiliser l'archive elpa
;; locale, ou la récupérer en faisant 'git submodule update --init'
(defvar is-standalone (file-exists-p "~/.emacs.d/myelpa/archive-contents"))
(if is-standalone
    (setq package-archives '(("myelpa" . "~/.emacs.d/myelpa/")))
  nil)

;; initialise la liste des paquets
(package-initialize)

;; Bootstrap `use-package'
(unless (package-installed-p 'use-package)
  (package-refresh-contents)
  (package-install 'use-package))

;; Indique où sont stockés les paquets téléchargés
(add-to-list 'load-path (expand-file-name "~/.emacs.d/elpa"))
(use-package auto-async-byte-compile
  :ensure t
  :hook
  (emacs-lisp-mode-hook  . 'enable-auto-async-byte-compile-mode))

(org-babel-load-file (expand-file-name "~/.emacs.d/Configuration.org"))

;;; Ajout de configuration personnelle
(setq custom-file "~/.emacs.d/custom.el")

;;; Charge la configuration et éventuellement la sauve si le fichier
;;; de customization n'existe pas
(if (file-exists-p "~/.emacs.d/custom.el")
    (load-file "~/.emacs.d/custom.el")
  ;; else
  (load-file "~/.emacs.d/.init-custom.el")
  (customize-save-customized))

;;; Charge la configuration et éventuellement la sauve si le fichier
;;; de customization n'existe pas
(let ((home-dot-clang-format "~/.clang-format"))
  (unless (file-exists-p home-dot-clang-format)
    (with-temp-file home-dot-clang-format
      (insert "---
Language: Cpp
DisableFormat: true
SortIncludes: false
---
"))))

;;; Crée un fichier ~/.gitignore (s'il n'y en a pas) pour éviter des
;;; pollutions des dépôts git liés à la création des fichiers
;;; temporaires générés par clangd
(let ((home-dot-gitignore (or (magit-get "core.excludesFile")
			     '"~/.gitignore")))
(unless (string-equal (magit-get "core.excludesFile") home-dot-gitignore)
  (magit-git-success "config" "--global" "core.excludesFile" home-dot-gitignore)
  )
  (if (file-exists-p home-dot-gitignore)
      (with-temp-buffer
	(insert-file-contents home-dot-gitignore)
	(buffer-string)
	(unless (search-forward-regexp "^\\.cache$" nil t nil)
	  (write-region ".cache
" nil home-dot-gitignore 'append t)
	  )
	)
    (with-temp-file home-dot-gitignore
      (insert ".cache
"))
    ))

;;; Local Variables:
;;; byte-compile-warnings: (not free-vars)
;;; End: (provide 'init)
;;; init.el ends here