     ;; GPG key to use for encryption
     ;; Either the Key ID or set to nil to use symmetric encryption.
     (setq org-crypt-key nil)
-    (use-package kanban :ensure t)
-    (use-package ob-http :ensure t)
-    (use-package ob-go :ensure t)
-    (use-package ob-diagrams :ensure t)
-    (use-package ox-gfm :ensure t)
-    (use-package ox-reveal :ensure t)
-    (use-package htmlize :ensure t)
+    (use-package org-bullets
+      :ensure t
+      :hook (org-mode . org-bullets-mode))
+    ;; Avoid `org-babel-do-load-languages' since it does an eager require.
+    (use-package ob-ruby
+      :defer t
+      :ensure org-plus-contrib
+      :commands (org-babel-execute:ruby))
+    (use-package ob-python
+      :defer t
+      :ensure org-plus-contrib
+      :commands (org-babel-execute:python))
     (use-package ob-markdown
-      :quelpa (ob-markdown :fetcher github :repo "tnoda/ob-markdown"))
-    (org-babel-do-load-languages
-     'org-babel-load-languages
-     '((http       . t)
-       (shell      . t)
-       (js         . t)
-       (emacs-lisp . t)
-       (python     . t)
-       (ruby     . t)
-       (dot        . t)))))
+      :defer t
+      :ensure org-plus-contrib
+      :quelpa (ob-markdown :fetcher github :repo "tnoda/ob-markdown")
+      :commands
+      (org-babel-execute:markdown
+       org-babel-expand-body:markdown))
+    (use-package ob-go
+      :defer t
+      :ensure org-plus-contrib
+      :commands
+      (org-babel-execute:go
+       org-babel-expand-body:go))
+    (use-package ob-http
+      :defer t
+      :ensure org-plus-contrib
+      :commands
+      (org-babel-execute:http
+       org-babel-expand-body:http))
+    (use-package ob-shell
+      :defer t
+      :ensure org-plus-contrib
+      :commands
+      (org-babel-execute:sh
+       org-babel-expand-body:sh
+       org-babel-execute:bash
+       org-babel-expand-body:bash))
+    (use-package ob-diagrams
+      :defer t
+      :ensure org-plus-contrib
+      :commands (org-babel-execute:diagrams))
+    (use-package ox-gfm
+      :defer t
+      :ensure t)
+    (use-package ox-reveal
+      :defer t
+      :ensure t)
+    (use-package htmlize
+      :defer t
+      :ensure t)))
 
 ;; work setup
 (if (file-exists-p "~/.emacs.suse.d/init.el")

              vc-ignore-dir-regexp
              tramp-file-name-regexp))

(when window-system
  (let
    ((elapsed (float-time (time-subtract (current-time) emacs-start-time))))
    (message "Loading %s...done (%.3fs)" load-file-name elapsed))
  (add-hook 'after-init-hook
    `(lambda ()
       (let ((elapsed (float-time (time-subtract (current-time)
                                                 emacs-start-time))))
         (message "Loading %s...done (%.3fs) [after-init]"
                  ,load-file-name elapsed)))
    t))
(provide 'init)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Common programming and tools
;;
(use-package multi-term
  :defer t
  :ensure t)

(use-package ag
  :defer t
  :ensure t
  :config
  (add-hook 'ag-mode-hook 'toggle-truncate-lines)
