From 598b6ae1ad3c58ccf0e9eb188d47096e94a7fa20 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Pierre=20Balay=C3=A9?= <pierre.balaye@univ-lille.fr>
Date: Wed, 20 May 2020 23:55:22 +0200
Subject: [PATCH] New strategy: with private layers

---
 configs/spacemacs-default/dot-user-config.el | 232 +---------
 configs/spacemacs-minimal/init.el            | 458 +------------------
 configs/spacemacs-test/init.el               | 198 +++++++-
 layers/dired/config.el                       |  17 +
 layers/dired/keybindings.el                  |   7 +
 layers/general/config.el                     | 187 ++++++++
 layers/general/funcs.el                      |  71 +++
 layers/general/keybindings.el                |  14 +
 layers/general/layers.el                     |  20 +
 layers/general/packages.el                   |   4 +
 layers/pdfs/layers.el                        |   5 +
 layers/pdfs/packages.el                      |  21 +
 layers/smartparens/README.org                |  42 --
 layers/smartparens/packages.el               |  74 +--
 14 files changed, 567 insertions(+), 783 deletions(-)
 mode change 120000 => 100644 configs/spacemacs-test/init.el
 create mode 100644 layers/dired/config.el
 create mode 100644 layers/dired/keybindings.el
 create mode 100644 layers/general/config.el
 create mode 100644 layers/general/funcs.el
 create mode 100644 layers/general/keybindings.el
 create mode 100644 layers/general/layers.el
 create mode 100644 layers/general/packages.el
 create mode 100644 layers/pdfs/layers.el
 create mode 100644 layers/pdfs/packages.el
 delete mode 100644 layers/smartparens/README.org

diff --git a/configs/spacemacs-default/dot-user-config.el b/configs/spacemacs-default/dot-user-config.el
index 001d0fc..9f5614e 100644
--- a/configs/spacemacs-default/dot-user-config.el
+++ b/configs/spacemacs-default/dot-user-config.el
@@ -1,231 +1 @@
-(defun dotspacemacs/user-config-specific ()
-  (ulys/config/org)
-  (ulys/config/ess)
-  )
-
-; ESS config
-(defun ulys/config/ess ()
-  (ulys/conf/ess-devtools-save-silentely)
-  (add-hook 'ess-mode-hook
-            (lambda ()
-              (define-key ess-mode-map (kbd ";") 'ess-insert-assign)
-              (define-key ess-mode-map (kbd "C-;") 'ulys/conf/ess-insert-magrittr-pipe)
-              (define-key ess-mode-map (kbd "C-:")
-                'ulys/conf/ess-insert-right-assign-operator)
-              (define-key ess-mode-map (kbd "C-x C-j")
-                'ess-eval-line-invisibly-and-step)
-              (define-key ess-mode-map (kbd "C-`") 'ulys/conf/ess-backquote-from-dollar)
-              (define-key ess-mode-map (kbd "C-~") 'ulys/conf/ess-backquote-delete-df$)
-              )))
-(defun ulys/conf/ess-insert-magrittr-pipe ()
-  "Insert magrittr pipe at i.e. \"%>%\"."
-  (interactive)
-  (insert "\n  %>% "))
-(defun ulys/conf/ess-insert-right-assign-operator ()
-  "Insert  \"->\"."
-  (interactive)
-  (insert " -> "))
-(defun ulys/conf/ess-devtools-save-silentely ()
-  (setq ess-save-silently t))
-(defun ulys/conf/ess-backquote-from-dollar ()
-  "Surround with backquotes form last $ till point."
-  (interactive)
-  (insert "`")
-  (setq initial-position (point))
-  (evil-find-char-to-backward 1 (string-to-char "$"))
-  (insert "`")
-  (goto-char (+ 1 initial-position)))
-(defun ulys/conf/ess-backquote-delete-df$ ()
-  (interactive)
-  (ulys/conf/ess-backquote-from-dollar)
-  (evil-find-char-to-backward 1 (string-to-char "$"))
-  (setq dollar-position (point))
-  (evil-backward-WORD-begin)
-  (evil-sp-delete (point) dollar-position)
-  (evil-find-char 1 (string-to-char "`"))
-  (evil-forward-char)
-  )
-
-;; Org config
-(defun ulys/config/org ()
-  (ulys/config/org/misc)
-  (ulys/config/org/babel)
-  (ulys/config/org-calendar)
-;;  (ulys/config/org-minted)
-;;  (ulys/config/org-odt-export-latexml)
-;;  (ulys/config/org-capture)
-;;  (ulys/config/org-file-apps)
-  )
-(defun ulys/config/org/misc ()
-  (setq org-list-allow-alphabetical t)
-  (setq org-hide-emphasis-markers t)
-  ;; <sTAB => src block
-  (require 'org-tempo)
-  )
-(defun ulys/config/org/babel ()
-
-  (setq org-src-window-setup 'current-window)
-
-  ;; FIXME julia bug - hack - have opened issue #13597
-  (setq inferior-julia-program-name "julia")
-
-  (custom-set-variables
-   '(org-babel-load-languages (quote ((emacs-lisp . t)
-                                      (R          . t)
-                                      (latex      . t)
-                                      (shell      . t)
-                                      (ditaa      . t)
-                                      (julia      . t)
-                                      (python     . t)
-                                      (sql        . t)
-                                      )))
-   '(org-confirm-babel-evaluate nil)))
-(defun ulys/org-insert-csv-as-table (filename)
-  "Insert a csv file into the current buffer at point, and convert it to an org table."
-  (interactive (list (ido-read-file-name "csv file: ")))
-  (let* ((start (point))
-         (end (+ start (nth 1 (insert-file-contents filename)))))
-    (org-table-convert-region start end)))
-(defun ulys/config/org-capture ()
-  (setq org-default-notes-file "~/Nextcloud/org/tasks.org" )
-  (setq org-capture-templates
-        '(("t" "Thesis-related Task" entry
-            (file "~/Nextcloud/org/thesis.org")
-            "** TODO %?" :empty-lines 1)
-          ("u" "Teaching-related Task" entry
-           (file "~/Nextcloud/org/teaching.org")
-           "** TODO %?" :empty-lines 1)
-          ("h" "Hospital-related Task" entry
-           (file "~/Nextcloud/org/hospital.org")
-           "** TODO %?" :empty-lines 1))))
-(defun ulys/config/org-file-apps ()
-  (defun ulys/org-pdf-app (file-path link-without-schema)
-    "Open pdf file using pdf-tools and go to the specified page."
-    (let* ((page (if (not (string-match "\\.pdf::\\([0-9]+\\)\\'"
-                                        link-without-schema))
-                     1
-                   (string-to-number (match-string 1 link-without-schema)))))
-      (find-file-other-window file-path)
-      (pdf-view-goto-page page)))
-  (setq org-file-apps
-        '((auto-mode . emacs)
-          ("\\.x?html?\\'" . "firefox %s")
-          ("\\.pdf\\(::[0-9]+\\)?\\'" . whatacold/org-pdf-app)
-          ("\\.gif\\'" . "eog \"%s\"")
-          ("\\.mp4\\'" . "vlc \"%s\"")
-          ("\\.mkv" . "vlc \"%s\""))))
-(defun ulys/config/org-calendar ()
-  (setq calendar-week-start-day 1))
-(defun ulys/org//capture-helper-capture-with-yank-method (method arg)
-
-  ;; helper 1/2
-  (defun wrap-into-results-example (capture)
-    (concat
-     "#+RESULTS:\n"
-     "#+ATTR_LATEX: :options frame=lines\n"
-     "#+BEGIN_SRC R :eval no :tangle no\n"
-     capture
-     "\n#+END_SRC\n"))
-
-  ;; helper 2/2
-  (defun choose-process (arg)
-    (if (or arg ;; user asks for selection
-            (not (boundp 'R-process-target)) ;; target not set
-            ;; or target is not set to an active process:
-            (not (process-live-p (get-buffer-process
-                                  R-process-target))))
-        (setq R-process-target
-              (completing-read
-               "Choose R process: "
-               (seq-map (lambda (el) (buffer-name (process-buffer el)))
-                        (process-list))))))
-
-  ;; main
-  (choose-process arg)
-  (insert (wrap-into-results-example
-           (funcall method R-process-target))))
-(defun ulys/org/tibble-capture (arg)
-  "Let the user choose a R process, then kill last tibble output
-in the process and insert it in current buffer in a org
-#+RESULTS: format."
-  (interactive "P")
-
-  ;; helper 1/3
-  (defun extract-nrows-from-tibble-first-line (line)
-    "Extract the number N in the pattern: # A tibble N x M"
-    (let* (( line-without-commas (replace-regexp-in-string "," "" line))
-           ( x-position    (string-match " x" line-without-commas))
-           ( nrow-start-at (length "# A tibble ")))
-      (string-to-number
-       (substring line-without-commas nrow-start-at x-position))))
-
-
-  ;; helper 3/3
-  (defun yank-last-tibble-from-buffer (buffer)
-    (interactive)
-
-    (save-current-buffer
-      (set-buffer buffer)
-      (search-backward "tibble")
-      (beginning-of-line)
-      (let* ((tibble-beg (point))
-             (nrow (extract-nrows-from-tibble-first-line (thing-at-point 'line t)))
-             (tibble-end (progn
-                           (message "nrow: %d" nrow)
-                           (re-search-forward (concat "^" (number-to-string (min 10 nrow))))
-                           (while (search-forward "#"  nil t))   ;; t means no error
-                           (end-of-line)
-                           (point))))
-        (buffer-substring tibble-beg tibble-end))))
-
-  ;; main
-  (ulys/org//capture-helper-capture-with-yank-method 'yank-last-tibble-from-buffer arg))
-(defun ulys/org/glimpse-capture (arg)
-  "Let the user choose a R process, then kill last glimpse output
-in the process and insert it in current buffer in a org
-#+RESULTS: format."
-  (interactive "P")
-
-  ;; helper 1
-  (defun extract-nb-vars-from-glimpse-second-line (line)
-    "Extract the number N in the pattern: Variables: N"
-    (let (( nb-vars-start-at (length "Varialbes: "))
-          ( nb-vars-end-at   (length line)))
-      (string-to-number
-       (substring line nb-vars-start-at nb-vars-end-at))))
-
-  ;; helper 2
-  (defun suppress_$_in_front_of_lines (lines)
-    (replace-regexp-in-string "^\$ "  "" lines))
-
-  ;; helper 3
-  (defun yank-last-glimpse-from-buffer (buffer)
-    (interactive)
-
-    (save-current-buffer
-      (set-buffer buffer)
-      (search-backward "Observations: ")
-      (beginning-of-line)
-      (let* ((glimpse-beg (point))
-             (nrow (progn
-                     (forward-line)
-                     (extract-nb-vars-from-glimpse-second-line
-                      (thing-at-point 'line t))))
-             (glimpse-end (progn
-                           (forward-line nrow)
-                           (end-of-line)
-                           (point))))
-        (suppress_$_in_front_of_lines
-         (buffer-substring glimpse-beg glimpse-end) ))))
-
-  ;; main
-  (ulys/org//capture-helper-capture-with-yank-method 'yank-last-glimpse-from-buffer arg))
-(defun ulys/config/org-minted ()
-  (setq org-latex-listings 'minted
-        org-latex-packages-alist '(("" "minted"))
-        org-latex-pdf-process
-        '("pdflatex -shell-escape -interaction nonstopmode -output-directory %o %f"
-          "pdflatex -shell-escape -interaction nonstopmode -output-directory %o %f"
-          "pdflatex -shell-escape -interaction nonstopmode -output-directory %o %f")))
-(defun ulys/config/org-odt-export-latexml ()
-  (setq org-latex-to-mathml-convert-command"latexmlmath \"%i\" --presentationmathml=%o"))
+(defun dotspacemacs/user-config-specific ())
diff --git a/configs/spacemacs-minimal/init.el b/configs/spacemacs-minimal/init.el
index 7513009..c4c0741 100644
--- a/configs/spacemacs-minimal/init.el
+++ b/configs/spacemacs-minimal/init.el
@@ -18,55 +18,15 @@ This function should only modify configuration layer settings."
 
   ;; Settings
   (setq-default
-   ;; Base distribution to use. This is a layer contained in the directory
-   ;; `+distribution'. For now available distributions are `spacemacs-base'
-   ;; or `spacemacs'. (default 'spacemacs)
    dotspacemacs-distribution 'spacemacs
-
-   ;; Lazy installation of layers (i.e. layers are installed only when a file
-   ;; with a supported type is opened). Possible values are `all', `unused'
-   ;; and `nil'. `unused' will lazy install only unused layers (i.e. layers
-   ;; not listed in variable `dotspacemacs-configuration-layers'), `all' will
-   ;; lazy install any layer that support lazy installation even the layers
-   ;; listed in `dotspacemacs-configuration-layers'. `nil' disable the lazy
-   ;; installation feature and you have to explicitly list a layer in the
-   ;; variable `dotspacemacs-configuration-layers' to install it.
-   ;; (default 'unused)
    dotspacemacs-enable-lazy-installation nil
-
-   ;; If non-nil then Spacemacs will ask for confirmation before installing
-   ;; a layer lazily. (default t)
    dotspacemacs-ask-for-lazy-installation t
-
-   ;; List of additional paths where to look for configuration layers.
-   ;; Paths must have a trailing slash (i.e. `~/.mycontribs/')
    dotspacemacs-configuration-layer-path (list
                                           (concat user-emacs-directory
                                                   "../../layers/"))
-
-   ;; List of additional packages that will be installed without being
-   ;; wrapped in a layer. If you need some configuration for these
-   ;; packages, then consider creating a layer. You can also put the
-   ;; configuration in `dotspacemacs/user-config'.
-   ;; To use a local version of a package, use the `:location' property:
-   ;; '(your-package :location "~/path/to/your-package/")
-   ;; Also include the dependencies as they will not be resolved automatically.
-   dotspacemacs-additional-packages '(
-                                      )
-
-   ;; A list of packages that cannot be updated.
+   dotspacemacs-additional-packages '()
    dotspacemacs-frozen-packages '()
-
-   ;; A list of packages that will not be installed and loaded.
    dotspacemacs-excluded-packages '()
-
-   ;; Defines the behaviour of Spacemacs when installing packages.
-   ;; Possible values are `used-only', `used-but-keep-unused' and `all'.
-   ;; `used-only' installs only explicitly used packages and deletes any unused
-   ;; packages as well as their unused dependencies. `used-but-keep-unused'
-   ;; installs only the used packages but won't delete unused ones. `all'
-   ;; installs *all* packages supported by Spacemacs and never uninstalls them.
-   ;; (default is `used-only')
    dotspacemacs-install-packages 'used-but-keep-unused)
 
   ;; Layers
@@ -74,16 +34,10 @@ This function should only modify configuration layer settings."
    ;; List of configuration layers to load.
    dotspacemacs-configuration-layers
    '(
-     (helm :variables
-           helm-position 'bottom
-           helm-no-header t)
-     emacs-lisp
-     git
-     org
-
-     ;; private layers
-     smartparens 
-     general
+     (general     :location local)
+     (smartparens :location local)
+     (dired       :location local)
+     (pdfs        :location local)
      )
    )
 
@@ -96,391 +50,52 @@ This function should only modify configuration layer settings."
   )
 
 (defun dotspacemacs/init ()
-  "Initialization:
-This function is called at the very beginning of Spacemacs startup,
-before layer configuration.
-It should only modify the values of Spacemacs settings."
+  "Instantiate Spacemacs core settings.
+All `dotspacemacs-' variables with values set different than their defaults.
+They are all defined in `~/.emacs.d/core/core-dotspacemacs.el'.
+Check `dotspacemacs/get-variable-string-list' for all vars you can configure."
 
   ;; --------------------------------------------------
   ;; ------ Configuration common to all versions ------
   ;; --------------------------------------------------
 
-  ;; This setq-default sexp is an exhaustive list of all the supported
-  ;; spacemacs settings.
   (setq-default
-   ;; If non-nil then enable support for the portable dumper. You'll need
-   ;; to compile Emacs 27 from source following the instructions in file
-   ;; EXPERIMENTAL.org at to root of the git repository.
-   ;; (default nil)
-   dotspacemacs-enable-emacs-pdumper nil
-
-   ;; Name of executable file pointing to emacs 27+. This executable must be
-   ;; in your PATH.
-   ;; (default "emacs")
-   dotspacemacs-emacs-pdumper-executable-file "emacs"
-
-   ;; Name of the Spacemacs dump file. This is the file will be created by the
-   ;; portable dumper in the cache directory under dumps sub-directory.
-   ;; To load it when starting Emacs add the parameter `--dump-file'
-   ;; when invoking Emacs 27.1 executable on the command line, for instance:
-   ;;   ./emacs --dump-file=~/.emacs.d/.cache/dumps/spacemacs.pdmp
-   ;; (default spacemacs.pdmp)
-   dotspacemacs-emacs-dumper-dump-file "spacemacs.pdmp"
-
-   ;; If non-nil ELPA repositories are contacted via HTTPS whenever it's
-   ;; possible. Set it to nil if you have no way to use HTTPS in your
-   ;; environment, otherwise it is strongly recommended to let it set to t.
-   ;; This variable has no effect if Emacs is launched with the parameter
-   ;; `--insecure' which forces the value of this variable to nil.
-   ;; (default t)
-   dotspacemacs-elpa-https t
-
-   ;; Maximum allowed time in seconds to contact an ELPA repository.
-   ;; (default 5)
-   dotspacemacs-elpa-timeout 5
-
-   ;; Set `gc-cons-threshold' and `gc-cons-percentage' when startup finishes.
-   ;; This is an advanced option and should not be changed unless you suspect
-   ;; performance issues due to garbage collection operations.
-   ;; (default '(100000000 0.1))
-   dotspacemacs-gc-cons '(100000000 0.1)
-
-   ;; Set `read-process-output-max' when startup finishes.
-   ;; This defines how much data is read from a foreign process.
-   ;; Setting this >= 1 MB should increase performance for lsp servers
-   ;; in emacs 27.
-   ;; (default (* 1024 1024))
-   dotspacemacs-read-process-output-max (* 1024 1024)
-
-   ;; If non-nil then Spacelpa repository is the primary source to install
-   ;; a locked version of packages. If nil then Spacemacs will install the
-   ;; latest version of packages from MELPA. (default nil)
-   dotspacemacs-use-spacelpa nil
-
-   ;; If non-nil then verify the signature for downloaded Spacelpa archives.
-   ;; (default t)
-   dotspacemacs-verify-spacelpa-archives t
-
-   ;; If non-nil then spacemacs will check for updates at startup
-   ;; when the current branch is not `develop'. Note that checking for
-   ;; new versions works via git commands, thus it calls GitHub services
-   ;; whenever you start Emacs. (default nil)
-   dotspacemacs-check-for-update nil
-
-   ;; If non-nil, a form that evaluates to a package directory. For example, to
-   ;; use different package directories for different Emacs versions, set this
-   ;; to `emacs-version'. (default 'emacs-version)
-   dotspacemacs-elpa-subdirectory 'emacs-version
-
-   ;; One of `vim', `emacs' or `hybrid'.
-   ;; `hybrid' is like `vim' except that `insert state' is replaced by the
-   ;; `hybrid state' with `emacs' key bindings. The value can also be a list
-   ;; with `:variables' keyword (similar to layers). Check the editing styles
-   ;; section of the documentation for details on available variables.
-   ;; (default 'vim)
    dotspacemacs-editing-style 'hybrid
-
-   ;; If non-nil show the version string in the Spacemacs buffer. It will
-   ;; appear as (spacemacs version)@(emacs version)
-   ;; (default t)
-   dotspacemacs-startup-buffer-show-version t
-
-   ;; Specify the startup banner. Default value is `official', it displays
-   ;; the official spacemacs logo. An integer value is the index of text
-   ;; banner, `random' chooses a random text banner in `core/banners'
-   ;; directory. A string value must be a path to an image format supported
-   ;; by your Emacs build.
-   ;; If the value is nil then no banner is displayed. (default 'official)
    dotspacemacs-startup-banner 100
-
-   ;; List of items to show in startup buffer or an association list of
-   ;; the form `(list-type . list-size)`. If nil then it is disabled.
-   ;; Possible values for list-type are:
-   ;; `recents' `bookmarks' `projects' `agenda' `todos'.
-   ;; List sizes may be nil, in which case
-   ;; `spacemacs-buffer-startup-lists-length' takes effect.
-   dotspacemacs-startup-lists '((recents . 5)
-                                (projects . 7))
-
-   ;; True if the home buffer should respond to resize events. (default t)
-   dotspacemacs-startup-buffer-responsive t
-
-   ;; Default major mode for a new empty buffer. Possible values are mode
-   ;; names such as `text-mode'; and `nil' to use Fundamental mode.
-   ;; (default `text-mode')
-   dotspacemacs-new-empty-buffer-major-mode 'text-mode
-
-   ;; Default major mode of the scratch buffer (default `text-mode')
-   dotspacemacs-scratch-mode 'text-mode
-
-   ;; Initial message in the scratch buffer, such as "Welcome to Spacemacs!"
-   ;; (default nil)
-   dotspacemacs-initial-scratch-message nil
-
-   ;; List of themes, the first of the list is loaded when spacemacs starts.
-   ;; Press `SPC T n' to cycle to the next theme in the list (works great
-   ;; with 2 themes variants, one dark and one light)
+   dotspacemacs-startup-lists '(
+                                (agenda . 10)
+                                (todos . 20)
+                                (projects . 5)
+                                (recents . 10)
+                                )
    dotspacemacs-themes '(spacemacs-dark
                          spacemacs-light)
-
-   ;; Set the theme for the Spaceline. Supported themes are `spacemacs',
-   ;; `all-the-icons', `custom', `doom', `vim-powerline' and `vanilla'. The
-   ;; first three are spaceline themes. `doom' is the doom-emacs mode-line.
-   ;; `vanilla' is default Emacs mode-line. `custom' is a user defined themes,
-   ;; refer to the DOCUMENTATION.org for more info on how to create your own
-   ;; spaceline theme. Value can be a symbol or list with additional properties.
-   ;; (default '(spacemacs :separator wave :separator-scale 1.5))
-   dotspacemacs-mode-line-theme '(spacemacs :separator wave :separator-scale 1.5)
-
-   ;; If non-nil the cursor color matches the state color in GUI Emacs.
-   ;; (default t)
-   dotspacemacs-colorize-cursor-according-to-state t
-
-   ;; Default font or prioritized list of fonts.
    dotspacemacs-default-font '("Source Code Pro"
                                :size 13.0
                                :weight normal
                                :width normal)
 
-   ;; The leader key (default "SPC")
    dotspacemacs-leader-key "SPC"
-
-   ;; The key used for Emacs commands `M-x' (after pressing on the leader key).
-   ;; (default "SPC")
    dotspacemacs-emacs-command-key "SPC"
-
-   ;; The key used for Vim Ex commands (default ":")
-   dotspacemacs-ex-command-key ":"
-
-   ;; The leader key accessible in `emacs state' and `insert state'
-   ;; (default "M-m")
    dotspacemacs-emacs-leader-key "M-m"
-
-   ;; Major mode leader key is a shortcut key which is the equivalent of
-   ;; pressing `<leader> m`. Set it to `nil` to disable it. (default ",")
-   dotspacemacs-major-mode-leader-key ","
-
-   ;; Major mode leader key accessible in `emacs state' and `insert state'.
-   ;; (default "C-M-m" for terminal mode, "<M-return>" for GUI mode).
-   ;; Thus M-RET should work as leader key in both GUI and terminal modes.
-   ;; C-M-m also should work in terminal mode, but not in GUI mode.
    dotspacemacs-major-mode-emacs-leader-key (if window-system "<M-return>" "C-M-m")
-
-   ;; These variables control whether separate commands are bound in the GUI to
-   ;; the key pairs `C-i', `TAB' and `C-m', `RET'.
-   ;; Setting it to a non-nil value, allows for separate commands under `C-i'
-   ;; and TAB or `C-m' and `RET'.
-   ;; In the terminal, these pairs are generally indistinguishable, so this only
-   ;; works in the GUI. (default nil)
-   dotspacemacs-distinguish-gui-tab nil
-
-   ;; Name of the default layout (default "Default")
    dotspacemacs-default-layout-name "TODO"
-
-   ;; If non-nil the default layout name is displayed in the mode-line.
-   ;; (default nil)
    dotspacemacs-display-default-layout t
-
-   ;; If non-nil then the last auto saved layouts are resumed automatically upon
-   ;; start. (default nil)
    dotspacemacs-auto-resume-layouts t
-
-   ;; If non-nil, auto-generate layout name when creating new layouts. Only has
-   ;; effect when using the "jump to layout by number" commands. (default nil)
    dotspacemacs-auto-generate-layout-names t
-
-   ;; Size (in MB) above which spacemacs will prompt to open the large file
-   ;; literally to avoid performance issues. Opening a file literally means that
-   ;; no major mode or minor modes are active. (default is 1)
-   dotspacemacs-large-file-size 1
-
-   ;; Location where to auto-save files. Possible values are `original' to
-   ;; auto-save the file in-place, `cache' to auto-save the file to another
-   ;; file stored in the cache directory and `nil' to disable auto-saving.
-   ;; (default 'cache)
    dotspacemacs-auto-save-file-location 'original
-
-   ;; Maximum number of rollback slots to keep in the cache. (default 5)
-   dotspacemacs-max-rollback-slots 5
-
-   ;; If non-nil, the paste transient-state is enabled. While enabled, after you
-   ;; paste something, pressing `C-j' and `C-k' several times cycles through the
-   ;; elements in the `kill-ring'. (default nil)
    dotspacemacs-enable-paste-transient-state t
-
-   ;; Which-key delay in seconds. The which-key buffer is the popup listing
-   ;; the commands bound to the current keystroke sequence. (default 0.4)
-   dotspacemacs-which-key-delay 0.4
-
-   ;; Which-key frame position. Possible values are `right', `bottom' and
-   ;; `right-then-bottom'. right-then-bottom tries to display the frame to the
-   ;; right; if there is insufficient space it displays it at the bottom.
-   ;; (default 'bottom)
-   dotspacemacs-which-key-position 'bottom
-
-   ;; Control where `switch-to-buffer' displays the buffer. If nil,
-   ;; `switch-to-buffer' displays the buffer in the current window even if
-   ;; another same-purpose window is available. If non-nil, `switch-to-buffer'
-   ;; displays the buffer in a same-purpose window even if the buffer can be
-   ;; displayed in the current window. (default nil)
-   dotspacemacs-switch-to-buffer-prefers-purpose nil
-
-   ;; If non-nil a progress bar is displayed when spacemacs is loading. This
-   ;; may increase the boot time on some systems and emacs builds, set it to
-   ;; nil to boost the loading time. (default t)
-   dotspacemacs-loading-progress-bar t
-
-   ;; If non-nil the frame is fullscreen when Emacs starts up. (default nil)
-   ;; (Emacs 24.4+ only)
    dotspacemacs-fullscreen-at-startup t
-
-   ;; If non-nil `spacemacs/toggle-fullscreen' will not use native fullscreen.
-   ;; Use to disable fullscreen animations in OSX. (default nil)
-   dotspacemacs-fullscreen-use-non-native nil
-
-   ;; If non-nil the frame is maximized when Emacs starts up.
-   ;; Takes effect only if `dotspacemacs-fullscreen-at-startup' is nil.
-   ;; (default nil) (Emacs 24.4+ only)
-   dotspacemacs-maximized-at-startup nil
-
-   ;; If non-nil the frame is undecorated when Emacs starts up. Combine this
-   ;; variable with `dotspacemacs-maximized-at-startup' in OSX to obtain
-   ;; borderless fullscreen. (default nil)
-   dotspacemacs-undecorated-at-startup nil
-
-   ;; A value from the range (0..100), in increasing opacity, which describes
-   ;; the transparency level of a frame when it's active or selected.
-   ;; Transparency can be toggled through `toggle-transparency'. (default 90)
-   dotspacemacs-active-transparency 90
-
-   ;; A value from the range (0..100), in increasing opacity, which describes
-   ;; the transparency level of a frame when it's inactive or deselected.
-   ;; Transparency can be toggled through `toggle-transparency'. (default 90)
-   dotspacemacs-inactive-transparency 90
-
-   ;; If non-nil show the titles of transient states. (default t)
-   dotspacemacs-show-transient-state-title t
-
-   ;; If non-nil show the color guide hint for transient state keys. (default t)
-   dotspacemacs-show-transient-state-color-guide t
-
-   ;; If non-nil unicode symbols are displayed in the mode line.
-   ;; If you use Emacs as a daemon and wants unicode characters only in GUI set
-   ;; the value to quoted `display-graphic-p'. (default t)
    dotspacemacs-mode-line-unicode-symbols nil
-
-   ;; If non-nil smooth scrolling (native-scrolling) is enabled. Smooth
-   ;; scrolling overrides the default behavior of Emacs which recenters point
-   ;; when it reaches the top or bottom of the screen. (default t)
-   dotspacemacs-smooth-scrolling t
-
-   ;; Control line numbers activation.
-   ;; If set to `t', `relative' or `visual' then line numbers are enabled in all
-   ;; `prog-mode' and `text-mode' derivatives. If set to `relative', line
-   ;; numbers are relative. If set to `visual', line numbers are also relative,
-   ;; but lines are only visual lines are counted. For example, folded lines
-   ;; will not be counted and wrapped lines are counted as multiple lines.
-   ;; This variable can also be set to a property list for finer control:
-   ;; '(:relative nil
-   ;;   :visual nil
-   ;;   :disabled-for-modes dired-mode
-   ;;                       doc-view-mode
-   ;;                       markdown-mode
-   ;;                       org-mode
-   ;;                       pdf-view-mode
-   ;;                       text-mode
-   ;;   :size-limit-kb 1000)
-   ;; When used in a plist, `visual' takes precedence over `relative'.
-   ;; (default nil)
    dotspacemacs-line-numbers 'visual
-
-   ;; Code folding method. Possible values are `evil' and `origami'.
-   ;; (default 'evil)
-   dotspacemacs-folding-method 'evil
-
-   ;; If non-nil `smartparens-strict-mode' will be enabled in programming modes.
-   ;; (default nil)
-   dotspacemacs-smartparens-strict-mode nil
-
-   ;; If non-nil pressing the closing parenthesis `)' key in insert mode passes
-   ;; over any automatically added closing parenthesis, bracket, quote, etc...
-   ;; This can be temporary disabled by pressing `C-q' before `)'. (default nil)
-   dotspacemacs-smart-closing-parenthesis nil
-
-   ;; Select a scope to highlight delimiters. Possible values are `any',
-   ;; `current', `all' or `nil'. Default is `all' (highlight any scope and
-   ;; emphasis the current one). (default 'all)
-   dotspacemacs-highlight-delimiters 'all
-
-   ;; If non-nil, start an Emacs server if one is not already running.
-   ;; (default nil)
-   dotspacemacs-enable-server nil
-
-   ;; Set the emacs server socket location.
-   ;; If nil, uses whatever the Emacs default is, otherwise a directory path
-   ;; like \"~/.emacs.d/server\". It has no effect if
-   ;; `dotspacemacs-enable-server' is nil.
-   ;; (default nil)
-   dotspacemacs-server-socket-dir nil
-
-   ;; If non-nil, advise quit functions to keep server open when quitting.
-   ;; (default nil)
-   dotspacemacs-persistent-server nil
-
-   ;; List of search tool executable names. Spacemacs uses the first installed
-   ;; tool of the list. Supported tools are `rg', `ag', `pt', `ack' and `grep'.
-   ;; (default '("rg" "ag" "pt" "ack" "grep"))
-   dotspacemacs-search-tools '("rg" "ag" "pt" "ack" "grep")
-
-   ;; Format specification for setting the frame title.
-   ;; %a - the `abbreviated-file-name', or `buffer-name'
-   ;; %t - `projectile-project-name'
-   ;; %I - `invocation-name'
-   ;; %S - `system-name'
-   ;; %U - contents of $USER
-   ;; %b - buffer name
-   ;; %f - visited file name
-   ;; %F - frame name
-   ;; %s - process status
-   ;; %p - percent of buffer above top of window, or Top, Bot or All
-   ;; %P - percent of buffer above bottom of window, perhaps plus Top, or Bot or All
-   ;; %m - mode name
-   ;; %n - Narrow if appropriate
-   ;; %z - mnemonics of buffer, terminal, and keyboard coding systems
-   ;; %Z - like %z, but including the end-of-line format
-   ;; (default "%I@%S")
-   dotspacemacs-frame-title-format "%I@%S"
-
-   ;; Format specification for setting the icon title format
-   ;; (default nil - same as frame-title-format)
-   dotspacemacs-icon-title-format nil
-
-   ;; Delete whitespace while saving buffer. Possible values are `all'
-   ;; to aggressively delete empty line and long sequences of whitespace,
-   ;; `trailing' to delete only the whitespace at end of lines, `changed' to
-   ;; delete only whitespace for changed lines or `nil' to disable cleanup.
-   ;; (default nil)
+   dotspacemacs-search-tools '("ag" "rg" "pt" "ack" "grep")
    dotspacemacs-whitespace-cleanup 'all
-
-   ;; If non nil activate `clean-aindent-mode' which tries to correct
-   ;; virtual indentation of simple modes. This can interfer with mode specific
-   ;; indent handling like has been reported for `go-mode'.
-   ;; If it does deactivate it here.
-   ;; (default t)
-   dotspacemacs-use-clean-aindent-mode t
-
-   ;; Either nil or a number of seconds. If non-nil zone out after the specified
-   ;; number of seconds. (default nil)
-   dotspacemacs-zone-out-when-idle nil
-
-   ;; Run `spacemacs/prettify-org-buffer' when
-   ;; visiting README.org files of Spacemacs.
-   ;; (default nil)
-   dotspacemacs-pretty-docs nil)
+   dotspacemacs-pretty-docs t)
 
   ;; --------------------------------------------------
   ;; ----- Configuration specific to this version -----
   ;; --------------------------------------------------
+
   (load-config-file  "dot-init.el")
   (dotspacemacs/init-specific)
   )
@@ -549,9 +164,8 @@ before packages are loaded."
   ;; --------------------------------------------------
   ;; ------ Configuration common to all versions ------
   ;; --------------------------------------------------
+  (spacemacs/toggle-centered-point-globally-on)
 
-
-  (ulys/conf/general)
   (ulys/conf/dired)
   (ulys/conf/kbd)
 
@@ -562,41 +176,9 @@ before packages are loaded."
   (dotspacemacs/user-config-specific)
   )
 
- ; general config
-(defun ulys/conf/general ()
-  (setq undo-tree-auto-save-history t)
-  (setq vc-follow-symlinks t) ;; To edit .spacemacs without to be prompted each time
-  (setq hybrid-style-enable-hjkl-bindings t)
-  (spacemacs/toggle-centered-point-globally-on)
-
-  ;; add time in powerline
-  (display-time-mode 1)
-
-  ;; New frame will open fullscreen
-  (add-to-list 'default-frame-alist '(fullscreen . fullboth))
-  )
  ; dired config
 (defun ulys/conf/dired ()
-
-  ;; helpers
-  (defun ulys/dired-open-current-dir ()
-    (interactive)
-    (spacemacs/dired "."))
-  (defun ulys/conf/dired/kbd/C-hjkl ()
-    (evil-define-key '(normal) dired-mode-map  (kbd "C-h") 'dired-up-directory)
-    (evil-define-key '(normal) dired-mode-map  (kbd "C-j") 'evil-next-line)
-    (evil-define-key '(normal) dired-mode-map  (kbd "C-k") 'evil-previous-line)
-    (evil-define-key '(normal) dired-mode-map  (kbd "C-l") 'dired-find-alternate-file))
-
-  ;; Auto-refresh dired on file change
-  (add-hook 'dired-mode-hook 'auto-revert-mode)
-
-  (spacemacs/set-leader-keys "ad" 'ulys/dired-open-current-dir)
-
-  ;; (hide .~undo-tree~ files)
-  (setq dired-omit-verbose nil)
-  (add-hook 'dired-mode-hook (lambda () (dired-omit-mode)))
-  (ulys/conf/dired/kbd/C-hjkl))
+)
  ; kbd config
 (defun ulys/conf/kbd ()
 
diff --git a/configs/spacemacs-test/init.el b/configs/spacemacs-test/init.el
deleted file mode 120000
index 78e296e..0000000
--- a/configs/spacemacs-test/init.el
+++ /dev/null
@@ -1 +0,0 @@
-../spacemacs-minimal/init.el
\ No newline at end of file
diff --git a/configs/spacemacs-test/init.el b/configs/spacemacs-test/init.el
new file mode 100644
index 0000000..c4c0741
--- /dev/null
+++ b/configs/spacemacs-test/init.el
@@ -0,0 +1,197 @@
+;; -*- mode: emacs-lisp; lexical-binding: t -*-
+;; This file is loaded by Spacemacs at startup.
+;; It must be stored in your home directory.
+
+;; Determine specific config directory
+(setq config-emacs-directory (replace-regexp-in-string "flavors" "configs" user-emacs-directory))
+
+(defun load-config-file (filename)
+  (load (concat config-emacs-directory filename)))
+
+(defun dotspacemacs/layers ()
+  "Layer configuration:
+This function should only modify configuration layer settings."
+
+  ;; --------------------------------------------------
+  ;; ------ Configuration common to all versions ------
+  ;; --------------------------------------------------
+
+  ;; Settings
+  (setq-default
+   dotspacemacs-distribution 'spacemacs
+   dotspacemacs-enable-lazy-installation nil
+   dotspacemacs-ask-for-lazy-installation t
+   dotspacemacs-configuration-layer-path (list
+                                          (concat user-emacs-directory
+                                                  "../../layers/"))
+   dotspacemacs-additional-packages '()
+   dotspacemacs-frozen-packages '()
+   dotspacemacs-excluded-packages '()
+   dotspacemacs-install-packages 'used-but-keep-unused)
+
+  ;; Layers
+  (setq-default
+   ;; List of configuration layers to load.
+   dotspacemacs-configuration-layers
+   '(
+     (general     :location local)
+     (smartparens :location local)
+     (dired       :location local)
+     (pdfs        :location local)
+     )
+   )
+
+  ;; --------------------------------------------------
+  ;; ----- Configuration specific to this version -----
+  ;; --------------------------------------------------
+
+  (load-config-file  "dot-layers.el")
+  (dotspacemacs/layers-specific)
+  )
+
+(defun dotspacemacs/init ()
+  "Instantiate Spacemacs core settings.
+All `dotspacemacs-' variables with values set different than their defaults.
+They are all defined in `~/.emacs.d/core/core-dotspacemacs.el'.
+Check `dotspacemacs/get-variable-string-list' for all vars you can configure."
+
+  ;; --------------------------------------------------
+  ;; ------ Configuration common to all versions ------
+  ;; --------------------------------------------------
+
+  (setq-default
+   dotspacemacs-editing-style 'hybrid
+   dotspacemacs-startup-banner 100
+   dotspacemacs-startup-lists '(
+                                (agenda . 10)
+                                (todos . 20)
+                                (projects . 5)
+                                (recents . 10)
+                                )
+   dotspacemacs-themes '(spacemacs-dark
+                         spacemacs-light)
+   dotspacemacs-default-font '("Source Code Pro"
+                               :size 13.0
+                               :weight normal
+                               :width normal)
+
+   dotspacemacs-leader-key "SPC"
+   dotspacemacs-emacs-command-key "SPC"
+   dotspacemacs-emacs-leader-key "M-m"
+   dotspacemacs-major-mode-emacs-leader-key (if window-system "<M-return>" "C-M-m")
+   dotspacemacs-default-layout-name "TODO"
+   dotspacemacs-display-default-layout t
+   dotspacemacs-auto-resume-layouts t
+   dotspacemacs-auto-generate-layout-names t
+   dotspacemacs-auto-save-file-location 'original
+   dotspacemacs-enable-paste-transient-state t
+   dotspacemacs-fullscreen-at-startup t
+   dotspacemacs-mode-line-unicode-symbols nil
+   dotspacemacs-line-numbers 'visual
+   dotspacemacs-search-tools '("ag" "rg" "pt" "ack" "grep")
+   dotspacemacs-whitespace-cleanup 'all
+   dotspacemacs-pretty-docs t)
+
+  ;; --------------------------------------------------
+  ;; ----- Configuration specific to this version -----
+  ;; --------------------------------------------------
+
+  (load-config-file  "dot-init.el")
+  (dotspacemacs/init-specific)
+  )
+
+(defun dotspacemacs/user-env ()
+  "Environment variables setup.
+This function defines the environment variables for your Emacs session. By
+default it calls `spacemacs/load-spacemacs-env' which loads the environment
+variables declared in `~/.spacemacs.env' or `~/.spacemacs.d/.spacemacs.env'.
+See the header of this file for more information."
+
+  ;; --------------------------------------------------
+  ;; ------ Configuration common to all versions ------
+  ;; --------------------------------------------------
+
+
+  ;; --------------------------------------------------
+  ;; ----- Configuration specific to this version -----
+  ;; --------------------------------------------------
+  (load-config-file  "dot-user-env.el")
+  (dotspacemacs/user-env-specific)
+  )
+
+(defun dotspacemacs/user-init ()
+  "Initialization for user code:
+This function is called immediately after `dotspacemacs/init', before layer
+configuration.
+It is mostly for variables that should be set before packages are loaded.
+If you are unsure, try setting them in `dotspacemacs/user-config' first."
+
+  ;; --------------------------------------------------
+  ;; ------ Configuration common to all versions ------
+  ;; --------------------------------------------------
+
+  ;; --------------------------------------------------
+  ;; ----- Configuration specific to this version -----
+  ;; --------------------------------------------------
+  (load-config-file  "dot-user-init.el")
+  (dotspacemacs/user-init-specific)
+  )
+
+(defun dotspacemacs/user-load ()
+  "Library to load while dumping.
+This function is called only while dumping Spacemacs configuration. You can
+`require' or `load' the libraries of your choice that will be included in the
+dump."
+  ;; --------------------------------------------------
+  ;; ------ Configuration common to all versions ------
+  ;; --------------------------------------------------
+
+
+  ;; --------------------------------------------------
+  ;; ----- Configuration specific to this version -----
+  ;; --------------------------------------------------
+  (load-config-file  "dot-user-load.el")
+  (dotspacemacs/user-load-specific)
+  )
+
+(defun dotspacemacs/user-config ()
+  "Configuration for user code:
+This function is called at the very end of Spacemacs startup, after layer
+configuration.
+Put your configuration code here, except for variables that should be set
+before packages are loaded."
+
+  ;; --------------------------------------------------
+  ;; ------ Configuration common to all versions ------
+  ;; --------------------------------------------------
+  (spacemacs/toggle-centered-point-globally-on)
+
+  (ulys/conf/dired)
+  (ulys/conf/kbd)
+
+  ;; --------------------------------------------------
+  ;; ----- Configuration specific to this version -----
+  ;; --------------------------------------------------
+  (load-config-file  "dot-user-config.el")
+  (dotspacemacs/user-config-specific)
+  )
+
+ ; dired config
+(defun ulys/conf/dired ()
+)
+ ; kbd config
+(defun ulys/conf/kbd ()
+
+  ;; --- others
+  ;; C-h to delete buffer and C-S-h for help
+  (global-set-key (kbd "C-h") 'spacemacs/kill-this-buffer)
+
+  ;; Simulates vim increment and decrement number
+  (define-key evil-normal-state-map  (kbd "C-a C-a") 'evil-numbers/inc-at-pt)
+  (define-key evil-normal-state-map  (kbd "C-x C-x") 'evil-numbers/dec-at-pt)
+
+  )
+
+
+;; Do not write anything past this comment. This is where Emacs will
+;; auto-generate custom variable definitions.
diff --git a/layers/dired/config.el b/layers/dired/config.el
new file mode 100644
index 0000000..ab04c24
--- /dev/null
+++ b/layers/dired/config.el
@@ -0,0 +1,17 @@
+;; helpers
+(defun ulys/dired-open-current-dir ()
+  (interactive)
+  (spacemacs/dired "."))
+
+(spacemacs/set-leader-keys "ad" 'ulys/dired-open-current-dir)
+
+(with-eval-after-load 'evil-core
+  )
+
+;; Auto-refresh dired on file change
+(add-hook 'dired-mode-hook 'auto-revert-mode)
+
+
+;; (hide .~undo-tree~ files)
+(setq dired-omit-verbose nil)
+(add-hook 'dired-mode-hook (lambda () (dired-omit-mode)))
diff --git a/layers/dired/keybindings.el b/layers/dired/keybindings.el
new file mode 100644
index 0000000..40c16a2
--- /dev/null
+++ b/layers/dired/keybindings.el
@@ -0,0 +1,7 @@
+(spacemacs/set-leader-keys "ad" 'ulys/dired-open-current-dir)
+
+;; I prefer C-h to kill buffer
+;; (evil-define-key '(normal) dired-mode-map  (kbd "C-h") 'dired-up-directory)
+(evil-define-key '(normal) dired-mode-map  (kbd "C-j") 'evil-next-line)
+(evil-define-key '(normal) dired-mode-map  (kbd "C-k") 'evil-previous-line)
+(evil-define-key '(normal) dired-mode-map  (kbd "C-l") 'dired-find-alternate-file)
diff --git a/layers/general/config.el b/layers/general/config.el
new file mode 100644
index 0000000..b13a9c4
--- /dev/null
+++ b/layers/general/config.el
@@ -0,0 +1,187 @@
+(setq undo-tree-auto-save-history t)
+(setq vc-follow-symlinks t) ;; To edit .spacemacs without to be prompted each time
+
+(setq hybrid-style-enable-hjkl-bindings t)
+
+;; add time in powerline
+(display-time-mode 1)
+
+
+;; New frame will open fullscreen
+(add-to-list 'default-frame-alist '(fullscreen . fullboth))
+
+;; Org config
+(setq org-src-window-setup 'current-window)
+(setq org-list-allow-alphabetical t)
+(setq org-hide-emphasis-markers t)
+(require 'org-tempo)
+;; (ulys/config/org-babel)
+;; (ulys/config/org-calendar)
+;; (ulys/config/org-minted)
+;; (ulys/config/org-odt-export-latexml)
+;; (ulys/config/org-capture)
+;; (ulys/config/org-file-apps)
+
+(defun ulys/org-insert-csv-as-table (filename)
+  "Insert a csv file into the current buffer at point, and convert it to an org table."
+  (interactive (list (ido-read-file-name "csv file: ")))
+  (let* ((start (point))
+         (end (+ start (nth 1 (insert-file-contents filename)))))
+    (org-table-convert-region start end)))
+(defun ulys/config/org-capture ()
+  (setq org-default-notes-file "~/Nextcloud/org/tasks.org" )
+  (setq org-capture-templates
+        '(("t" "Thesis-related Task" entry
+            (file "~/Nextcloud/org/thesis.org")
+            "** TODO %?" :empty-lines 1)
+          ("u" "Teaching-related Task" entry
+           (file "~/Nextcloud/org/teaching.org")
+           "** TODO %?" :empty-lines 1)
+          ("h" "Hospital-related Task" entry
+           (file "~/Nextcloud/org/hospital.org")
+           "** TODO %?" :empty-lines 1))))
+(defun ulys/config/org-file-apps ()
+  (defun ulys/org-pdf-app (file-path link-without-schema)
+    "Open pdf file using pdf-tools and go to the specified page."
+    (let* ((page (if (not (string-match "\\.pdf::\\([0-9]+\\)\\'"
+                                        link-without-schema))
+                     1
+                   (string-to-number (match-string 1 link-without-schema)))))
+      (find-file-other-window file-path)
+      (pdf-view-goto-page page)))
+  (setq org-file-apps
+        '((auto-mode . emacs)
+          ("\\.x?html?\\'" . "firefox %s")
+          ("\\.pdf\\(::[0-9]+\\)?\\'" . whatacold/org-pdf-app)
+          ("\\.gif\\'" . "eog \"%s\"")
+          ("\\.mp4\\'" . "vlc \"%s\"")
+          ("\\.mkv" . "vlc \"%s\""))))
+(defun ulys/config/org-calendar ()
+  (setq calendar-week-start-day 1))
+(defun ulys/config/org-babel ()
+  (custom-set-variables
+   '(org-babel-load-languages (quote ((emacs-lisp . t)
+                                      (R          . t)
+                                      (latex      . t)
+                                      (shell      . t)
+                                      (ditaa      . t)
+                                      (julia      . t)
+                                      (python     . t)
+                                      (sql        . t))))
+   '(org-confirm-babel-evaluate nil)))
+(defun ulys/org//capture-helper-capture-with-yank-method (method arg)
+
+  ;; helper 1/2
+  (defun wrap-into-results-example (capture)
+    (concat
+     "#+RESULTS:\n"
+     "#+ATTR_LATEX: :options frame=lines\n"
+     "#+BEGIN_SRC R :eval no :tangle no\n"
+     capture
+     "\n#+END_SRC\n"))
+
+  ;; helper 2/2
+  (defun choose-process (arg)
+    (if (or arg ;; user asks for selection
+            (not (boundp 'R-process-target)) ;; target not set
+            ;; or target is not set to an active process:
+            (not (process-live-p (get-buffer-process
+                                  R-process-target))))
+        (setq R-process-target
+              (completing-read
+               "Choose R process: "
+               (seq-map (lambda (el) (buffer-name (process-buffer el)))
+                        (process-list))))))
+
+  ;; main
+  (choose-process arg)
+  (insert (wrap-into-results-example
+           (funcall method R-process-target))))
+(defun ulys/org/tibble-capture (arg)
+  "Let the user choose a R process, then kill last tibble output
+in the process and insert it in current buffer in a org
+#+RESULTS: format."
+  (interactive "P")
+
+  ;; helper 1/3
+  (defun extract-nrows-from-tibble-first-line (line)
+    "Extract the number N in the pattern: # A tibble N x M"
+    (let* (( line-without-commas (replace-regexp-in-string "," "" line))
+           ( x-position    (string-match " x" line-without-commas))
+           ( nrow-start-at (length "# A tibble ")))
+      (string-to-number
+       (substring line-without-commas nrow-start-at x-position))))
+
+
+  ;; helper 3/3
+  (defun yank-last-tibble-from-buffer (buffer)
+    (interactive)
+
+    (save-current-buffer
+      (set-buffer buffer)
+      (search-backward "tibble")
+      (beginning-of-line)
+      (let* ((tibble-beg (point))
+             (nrow (extract-nrows-from-tibble-first-line (thing-at-point 'line t)))
+             (tibble-end (progn
+                           (message "nrow: %d" nrow)
+                           (re-search-forward (concat "^" (number-to-string (min 10 nrow))))
+                           (while (search-forward "#"  nil t))   ;; t means no error
+                           (end-of-line)
+                           (point))))
+        (buffer-substring tibble-beg tibble-end))))
+
+  ;; main
+  (ulys/org//capture-helper-capture-with-yank-method 'yank-last-tibble-from-buffer arg))
+(defun ulys/org/glimpse-capture (arg)
+  "Let the user choose a R process, then kill last glimpse output
+in the process and insert it in current buffer in a org
+#+RESULTS: format."
+  (interactive "P")
+
+  ;; helper 1
+  (defun extract-nb-vars-from-glimpse-second-line (line)
+    "Extract the number N in the pattern: Variables: N"
+    (let (( nb-vars-start-at (length "Varialbes: "))
+          ( nb-vars-end-at   (length line)))
+      (string-to-number
+       (substring line nb-vars-start-at nb-vars-end-at))))
+
+  ;; helper 2
+  (defun suppress_$_in_front_of_lines (lines)
+    (replace-regexp-in-string "^\$ "  "" lines))
+
+  ;; helper 3
+  (defun yank-last-glimpse-from-buffer (buffer)
+    (interactive)
+
+    (save-current-buffer
+      (set-buffer buffer)
+      (search-backward "Observations: ")
+      (beginning-of-line)
+      (let* ((glimpse-beg (point))
+             (nrow (progn
+                     (forward-line)
+                     (extract-nb-vars-from-glimpse-second-line
+                      (thing-at-point 'line t))))
+             (glimpse-end (progn
+                           (forward-line nrow)
+                           (end-of-line)
+                           (point))))
+        (suppress_$_in_front_of_lines
+         (buffer-substring glimpse-beg glimpse-end) ))))
+
+  ;; main
+  (ulys/org//capture-helper-capture-with-yank-method 'yank-last-glimpse-from-buffer arg))
+(defun ulys/config/org-tempo ()
+  ;; In org mode : auto complete #+begin #+end
+  (require 'org-tempo))
+(defun ulys/config/org-minted ()
+  (setq org-latex-listings 'minted
+        org-latex-packages-alist '(("" "minted"))
+        org-latex-pdf-process
+        '("pdflatex -shell-escape -interaction nonstopmode -output-directory %o %f"
+          "pdflatex -shell-escape -interaction nonstopmode -output-directory %o %f"
+          "pdflatex -shell-escape -interaction nonstopmode -output-directory %o %f")))
+(defun ulys/config/org-odt-export-latexml ()
+  (setq org-latex-to-mathml-convert-command"latexmlmath \"%i\" --presentationmathml=%o"))
diff --git a/layers/general/funcs.el b/layers/general/funcs.el
new file mode 100644
index 0000000..1892e33
--- /dev/null
+++ b/layers/general/funcs.el
@@ -0,0 +1,71 @@
+(defvar ulys/toggle-shell-on nil)
+(defun ulys/region-to-process (arg beg end)
+  "Send the current region to a process buffer.
+The first time it's called, will prompt for the buffer to send
+to. Subsequent calls send to the same buffer, unless a prefix
+argument is used (C-u), or the buffer no longer has an active
+process."
+  (interactive "P\nr")
+  (unless (evil-visual-state-p) (error "Not in visual mode..."))
+  (if (or arg ;; user asks for selection
+          (not (boundp 'region-to-process-target)) ;; target not set
+          ;; or target is not set to an active process:
+          (not (process-live-p (get-buffer-process
+                                region-to-process-target))))
+      (setq region-to-process-target
+            (completing-read
+             "Process: "
+             (seq-map (lambda (el) (buffer-name (process-buffer el)))
+                      (process-list)))))
+  (process-send-string region-to-process-target (concat (buffer-substring-no-properties beg end) "\n"))
+  (evil-exit-visual-state))
+(defun ulys/current-line-to-process (arg)
+  "Send the current line to a process buffer.
+The first time it's called, will prompt for the buffer to send
+to. Subsequent calls send to the same buffer, unless a prefix
+argument is used (C-u), or the buffer no longer has an active
+process."
+  (interactive "P")
+  (if (or arg ;; user asks for selection
+          (not (boundp 'region-to-process-target)) ;; target not set
+          ;; or target is not set to an active process:
+          (not (process-live-p (get-buffer-process
+                                region-to-process-target))))
+      (setq region-to-process-target
+            (completing-read
+             "Process: "
+             (seq-map (lambda (el) (buffer-name (process-buffer el)))
+                      (process-list)))))
+  ;; Need to check if current line is ended with newline
+    (setq line-at-point (thing-at-point 'line))
+    (setq string-to-send
+          (if (string-suffix-p "\n" line-at-point)
+              line-at-point
+              (concat line-at-point "\n")))
+    (process-send-string region-to-process-target string-to-send)
+    (evil-next-line))
+(defun ulys/open-ansi-term ()
+  (interactive)
+  (spacemacs/default-pop-shell)
+  (setq region-to-process-target (current-buffer)))
+(defun ulys/open-ansi-term-and-back ()
+    (interactive)
+    (ulys/open-ansi-term)
+    (other-window -1))
+(defun ulys/close-shell ()
+  (setq kill-buffer-query-functions (delq 'process-kill-buffer-query-function kill-buffer-query-functions))
+  (kill-buffer region-to-process-target)
+  (add-to-list 'kill-buffer-query-functions 'process-kill-buffer-query-function)
+  )
+(defun ulys/conf/toggle-shell ()
+  (setq ulys/toggle-shell-on nil))
+(defun ulys/toggle-shell ()
+  (interactive)
+  (if ulys/toggle-shell-on
+      (ulys/close-shell)
+    (ulys/open-ansi-term-and-back))
+  (setq ulys/toggle-shell-on (not ulys/toggle-shell-on)))
+(defun ulys/force-toggle-shell ()
+  (interactive)
+  (setq ulys/toggle-shell-on t)
+  (ulys/open-ansi-term))
diff --git a/layers/general/keybindings.el b/layers/general/keybindings.el
new file mode 100644
index 0000000..83b86f9
--- /dev/null
+++ b/layers/general/keybindings.el
@@ -0,0 +1,14 @@
+;; C-h to delete buffer and C-S-h for help
+(global-set-key (kbd "C-h") 'spacemacs/kill-this-buffer)
+
+;; Simulates vim increment and decrement number
+(define-key evil-normal-state-map  (kbd "C-a C-a") 'evil-numbers/inc-at-pt)
+(define-key evil-normal-state-map  (kbd "C-x C-x") 'evil-numbers/dec-at-pt)
+
+;; F5 to execute lnh <=> ln -s `pwd` ~/0_Quick-Link/
+(global-set-key (kbd "<f5>") (lambda () (interactive) (shell-command "lnh")))
+
+(define-key evil-visual-state-map (kbd "M-v") 'ulys/region-to-process)
+(global-set-key (kbd "<f3>") 'ulys/current-line-to-process)
+(global-set-key (kbd "<f4>") 'ulys/toggle-shell)
+(global-set-key (kbd "S-<f4>") 'ulys/force-toggle-shell)
diff --git a/layers/general/layers.el b/layers/general/layers.el
new file mode 100644
index 0000000..16e400b
--- /dev/null
+++ b/layers/general/layers.el
@@ -0,0 +1,20 @@
+(configuration-layer/declare-layers
+ '(
+   (shell :variables
+          shell-default-term-shell "/bin/zsh"
+          shell-default-height 30
+          shell-default-position 'bottom)
+   (helm :variables
+         helm-position 'bottom
+         helm-no-header t)
+   emacs-lisp
+
+   org
+
+   ;; Project management
+   (treemacs :variables
+             treemacs-use-follow-mode t
+             treemacs-use-filewatch-mode t)
+   git
+   )
+ )
diff --git a/layers/general/packages.el b/layers/general/packages.el
new file mode 100644
index 0000000..0da800a
--- /dev/null
+++ b/layers/general/packages.el
@@ -0,0 +1,4 @@
+(defconst general-packages
+  '(
+     )
+  )
diff --git a/layers/pdfs/layers.el b/layers/pdfs/layers.el
new file mode 100644
index 0000000..2373c85
--- /dev/null
+++ b/layers/pdfs/layers.el
@@ -0,0 +1,5 @@
+(configuration-layer/declare-layers
+ '(
+   pdf
+   )
+ )
diff --git a/layers/pdfs/packages.el b/layers/pdfs/packages.el
new file mode 100644
index 0000000..b8f854b
--- /dev/null
+++ b/layers/pdfs/packages.el
@@ -0,0 +1,21 @@
+(defconst pdfs-packages
+  '(
+    org-noter
+
+     )
+  )
+
+(defun pdfs/init-org-noter ()
+  (use-package org-noter
+    :config
+    (setq org-noter-always-create-frame nil
+          org-noter-insert-note-no-questions t
+          org-noter-separate-notes-from-heading t
+          org-noter-auto-save-last-location t)
+
+    (defun org-noter-init-pdf-view ()
+      ;; (run-at-time "0.5 sec" nil #'org-noter)
+      (pdf-view-fit-page-to-window)
+      (pdf-view-auto-slice-minor-mode))
+    (add-hook 'pdf-view-mode-hook 'org-noter-init-pdf-view))
+  )
diff --git a/layers/smartparens/README.org b/layers/smartparens/README.org
deleted file mode 100644
index 8b43e96..0000000
--- a/layers/smartparens/README.org
+++ /dev/null
@@ -1,42 +0,0 @@
-#+TITLE: smartparens layer
-# Document tags are separated with "|" char
-# The example below contains 2 tags: "layer" and "web service"
-# Avaliable tags are listed in <spacemacs_root>/.ci/spacedoc-cfg.edn
-# under ":spacetools.spacedoc.config/valid-tags" section.
-#+TAGS: layer|web service
-
-# The maximum height of the logo should be 200 pixels.
-[[img/smartparens.png]]
-
-# TOC links should be GitHub style anchors.
-* Table of Contents                                        :TOC_4_gh:noexport:
-- [[#description][Description]]
-  - [[#features][Features:]]
-- [[#install][Install]]
-- [[#key-bindings][Key bindings]]
-
-* Description
-This layer adds support for something.
-
-** Features:
-  - Autocomplete
-  - Lint
-  - Refactor
-  - ...
-
-* Install
-To use this configuration layer, add it to your =~/.spacemacs=. You will need to
-add =smartparens= to the existing =dotspacemacs-configuration-layers= list in this
-file.
-
-* Key bindings
-
-| Key Binding | Description    |
-|-------------+----------------|
-| ~SPC x x x~ | Does thing01   |
-
-# Use GitHub URLs if you wish to link a Spacemacs documentation file or its heading.
-# Examples:
-# [[https://github.com/syl20bnr/spacemacs/blob/master/doc/VIMUSERS.org#sessions]]
-# [[https://github.com/syl20bnr/spacemacs/blob/master/layers/%2Bfun/emoji/README.org][Link to Emoji layer README.org]]
-# If space-doc-mode is enabled, Spacemacs will open a local copy of the linked file.
diff --git a/layers/smartparens/packages.el b/layers/smartparens/packages.el
index 8ad1d21..0262dad 100644
--- a/layers/smartparens/packages.el
+++ b/layers/smartparens/packages.el
@@ -1,82 +1,16 @@
-;;; packages.el --- smartparens layer packages file for Spacemacs.
-;;
-;; Copyright (c) 2012-2018 Sylvain Benner & Contributors
-;;
-;; Author: Pierre BalayƩ <ulys@ITAK>
-;; URL: https://github.com/syl20bnr/spacemacs
-;;
-;; This file is not part of GNU Emacs.
-;;
-;;; License: GPLv3
-
-;;; Commentary:
-
-;; See the Spacemacs documentation and FAQs for instructions on how to implement
-;; a new layer:
-;;
-;;   SPC h SPC layers RET
-;;
-;;
-;; Briefly, each package to be installed or configured by this layer should be
-;; added to `smartparens-packages'. Then, for each package PACKAGE:
-;;
-;; - If PACKAGE is not referenced by any other Spacemacs layer, define a
-;;   function `smartparens/init-PACKAGE' to load and initialize the package.
-
-;; - Otherwise, PACKAGE is already referenced by another Spacemacs layer, so
-;;   define the functions `smartparens/pre-init-PACKAGE' and/or
-;;   `smartparens/post-init-PACKAGE' to customize the package as it is loaded.
-
-;;; Code:
-
 (defconst smartparens-packages
   '(
-    yasnippet
-    yasnippet-snippets
     smartparens
     evil-smartparens
      )
-  "The list of Lisp packages required by the smartparens layer.
-
-Each entry is either:
-
-1. A symbol, which is interpreted as a package to be installed, or
-
-2. A list of the form (PACKAGE KEYS...), where PACKAGE is the
-    name of the package to be installed or loaded, and KEYS are
-    any number of keyword-value-pairs.
-
-    The following keys are accepted:
-
-    - :excluded (t or nil): Prevent the package from being loaded
-      if value is non-nil
-
-    - :location: Specify a custom installation location.
-      The following values are legal:
-
-      - The symbol `elpa' (default) means PACKAGE will be
-        installed using the Emacs package manager.
-
-      - The symbol `local' directs Spacemacs to load the file at
-        `./local/PACKAGE/PACKAGE.el'
-
-      - A list beginning with the symbol `recipe' is a melpa
-        recipe.  See: https://github.com/milkypostman/melpa#recipe-format")
-
-(defun smartparens/init-yasnippet ()
-   (use-package yasnippet :ensure t)
-  )
-
-(defun smartparens/init-yasnippet-snippets ()
-  (use-package yasnippet-snippets :ensure t)
-  )
+)
 
 (defun smartparens/init-evil-smartparens ()
-  (use-package evil-smartparens :ensure t)
-  )
+  (use-package evil-smartparens :defer t))
 
 (defun smartparens/post-init-smartparens ()
   (use-package smartparens
+    :defer t
     :diminish ""
     :bind (("C-}" . sp-forward-slurp-sexp)
            ("C-{" . sp-forward-barf-sexp)
@@ -84,5 +18,3 @@ Each entry is either:
     :config (add-hook 'smartparens-enabled-hook #'evil-smartparens-mode)
       )
   )
-
-;;; packages.el ends here
-- 
GitLab