+*** Helm Flx
+
+ [[https://github.com/PythonNut/helm-flx][helm-flx]] implements intelligent helm fuzzy sorting, provided by [[https://github.com/lewang/flx][flx]].
+
+ #+BEGIN_SRC emacs-lisp
+ (use-package helm-flx
+ :ensure t
+ :config (progn
+ ;; these are helm configs, but they kind of fit here nicely
+ (setq helm-M-x-fuzzy-match t
+ helm-bookmark-show-location t
+ helm-buffers-fuzzy-matching t
+ helm-completion-in-region-fuzzy-match t
+ helm-file-cache-fuzzy-match t
+ helm-imenu-fuzzy-match t
+ helm-mode-fuzzy-match t
+ helm-locate-fuzzy-match nil
+ helm-quick-update t
+ helm-recentf-fuzzy-match nil
+ helm-semantic-fuzzy-match t)
+ (helm-flx-mode +1)))
+ #+END_SRC
+*** Helm Swoop
+#+BEGIN_SRC emacs-lisp
+
+ ;;; stolen from https://github.com/malb/emacs.d/blob/master/malb.org
+ (defun malb/helm-swoop-pre-fill ()
+ (thing-at-point 'symbol))
+ (defvar malb/helm-swoop-ignore-major-mode "List of major modes to ignore for helm-swoop")
+ (setq malb/helm-swoop-ignore-major-mode '(dired-mode
+ paradox-menu-mode doc-view-mode pdf-view-mode
+ mu4e-headers-mode org-mode markdown-mode latex-mode
+ ein:notebook-multilang-mode))
+
+ (defun malb/swoop-or-search ()
+ (interactive)
+ (if (or (> (buffer-size) 1048576) ;; helm-swoop can be slow on big buffers
+ (memq major-mode malb/helm-swoop-ignore-major-mode))
+ (isearch-forward)
+ (helm-swoop)))
+
+ (use-package helm-swoop
+ :ensure t
+ :commands helm-swoop
+ :bind (("C-c o" . helm-multi-swoop-org)
+ ("C-s" . malb/swoop-or-search)
+ ("C-M-s" . helm-multi-swoop-all))
+ :config (progn
+
+ (setq helm-swoop-pre-input-function #'malb/helm-swoop-pre-fill
+ helm-swoop-split-with-multiple-windows nil
+ helm-swoop-split-direction #'split-window-horizontally
+ helm-swoop-split-window-function 'helm-default-display-buffer
+ helm-swoop-speed-or-color t)
+
+ ;; https://emacs.stackexchange.com/questions/28790/helm-swoop-how-to-make-it-behave-more-like-isearch
+ (defun malb/helm-swoop-C-s ()
+ (interactive)
+ (if (boundp 'helm-swoop-pattern)
+ (if (equal helm-swoop-pattern "")
+ (previous-history-element 1)
+ (helm-next-line))
+ (helm-next-line)))
+
+ (bind-key "C-S-s" #'helm-swoop-from-isearch isearch-mode-map)
+ (bind-key "C-S-s" #'helm-multi-swoop-all-from-helm-swoop helm-swoop-map)
+ (bind-key "C-r" #'helm-previous-line helm-swoop-map)
+ (bind-key "C-s" #'malb/helm-swoop-C-s helm-swoop-map)
+ (bind-key "C-r" #'helm-previous-line helm-multi-swoop-map)
+ (bind-key "C-s" #'malb/helm-swoop-C-s helm-multi-swoop-map))
+ )
+
+#+END_SRC
+*** Helm Ag
+#+BEGIN_SRC emacs-lisp
+(use-package helm-ag
+ :ensure t
+ :config (setq helm-ag-base-command "ag --nocolor --nogroup"
+ helm-ag-command-option "--all-text"
+ helm-ag-insert-at-point 'symbol
+ helm-ag-fuzzy-match t
+ helm-ag-use-temp-buffer t
+ helm-ag-use-grep-ignore-list t
+ helm-ag-use-agignore t))
+#+END_SRC
+*** Helm Descbinds
+#+BEGIN_SRC emacs-lisp
+ (use-package helm-descbinds
+ :ensure t
+ :bind ("C-h b" . helm-descbinds)
+ :init (fset 'describe-bindings 'helm-descbinds))
+#+END_SRC
+
+*** Helm YaSnippet
+#+BEGIN_SRC emacs-lisp
+ (use-package helm-c-yasnippet
+ :ensure t
+ :bind ("C-c h y" . helm-yas-complete)
+ :config (progn
+ (setq helm-yas-space-match-any-greedy t)))
+#+END_SRC
+*** Helm Org Rifle
+#+BEGIN_SRC emacs-lisp
+ (use-package helm-org-rifle
+ :ensure t
+ :config (progn
+ (defun malb/helm-org-rifle-agenda-files (arg)
+ (interactive "p")
+ (let ((current-prefix-arg nil))
+ (cond
+ ((equal arg 4) (call-interactively #'helm-org-rifle-agenda-files nil))
+ ((equal arg 16) (helm-org-rifle-occur-agenda-files))
+ (t (helm-org-agenda-files-headings)))))))
+#+END_SRC
+*** Helm Google
+This can be used to link things pretty quickly if necessary
+#+BEGIN_SRC emacs-lisp
+ (use-package helm-google
+ :ensure t
+ :bind ("C-c h g" . helm-google)
+ :config
+ (progn (add-to-list 'helm-google-actions
+ '("Copy URL" . (lambda (candidate)
+ (let ((url
+ (replace-regexp-in-string
+ "https://.*q=\\(.*\\)\&sa=.*"
+ "\\1" candidate)))
+ (kill-new url))))
+ t
+ )
+
+ (add-to-list 'helm-google-actions
+ '("Org Store Link" . (lambda (candidate)
+ (let ((title (car (split-string candidate "[\n]+")))
+ (url
+ (replace-regexp-in-string
+ "https://.*q=\\(.*\\)\&sa=.*"
+ "\\1" candidate)))
+ (push (list url title) org-stored-links))))
+ t)
+ ))
+#+END_SRC
+
+** Projectile -- Project management
+#+begin_src emacs-lisp
+ (use-package projectile
+ :ensure t
+ :bind (("<f5>" . projectile-compile-project)
+ ("<f6>" . next-error))
+ :config (progn
+ (use-package magit :ensure t)
+ (require 'helm-projectile)
+ (helm-projectile-on)
+
+ (setq projectile-make-test-cmd "make check"
+ projectile-switch-project-action 'helm-projectile
+ projectile-mode-line '(:eval (format "»{%s}" (projectile-project-name))))
+
+ (projectile-global-mode)))
+#+end_src
+
+*** helm integration
+#+begin_src emacs-lisp
+ (use-package helm-projectile
+ :ensure t
+ :config (progn
+ (defvar malb/helm-source-file-not-found
+ (helm-build-dummy-source
+ "Create file"
+ :action 'find-file))
+
+ (add-to-list
+ 'helm-projectile-sources-list
+ malb/helm-source-file-not-found t)
+
+ (helm-delete-action-from-source
+ "Grep in projects `C-s'"
+ helm-source-projectile-projects)
+
+ (helm-add-action-to-source
+ "Grep in projects `C-s'"
+ 'helm-do-ag helm-source-projectile-projects 4)))
+#+end_src
+** Zap to char
+#+BEGIN_SRC emacs-lisp
+ (use-package avy-zap
+ :ensure t
+ :bind ("M-z" . avy-zap-up-to-char-dwim))
+#+END_SRC