(require 'cl) (defvar my-packages '(ag ;; Completion Frameworks company company-irony company-emacs-eclim jedi-core ;; We don't need the `jedi` package ;; since we are using company. If we ;; include both we get an annoying ;; *Python Completions* buffer that ;; isn't useful to us. company-jedi eclim irony counsel swiper ;; LSP is compatible with company and the lsp-ui gives a ;; vscode-like experience. lsp-mode lsp-ui lsp-python-ms ;;;;;;;;;;;;;;;;;;;;;;;; cmake-ide cmake-mode clang-format+ ;;;;;;;;;;;;;;;;;;;;;;;; ;; Programming modes cc-mode feature-mode gitignore-mode gradle-mode magit markdown-mode meson-mode nasm-mode paredit protobuf-mode elpy yaml-mode slime ;;;;;;;;;;;;;;;;;;;; ;; Test helpers python-pytest ;; Cleanup ws-butler ;;;;;;;;;; ;; Shell helpers exec-path-from-shell ;;;;;;;;;;;;;;;;;;;; ;; Editing Utility autopair ;; Keeps things indented even when you don't want it to aggressive-indent ;;;;;;;;;;;;;;;;;; ;; UI fill-column-indicator golden-ratio linum-relative powerline rainbow-delimiters wrap-region expand-region wrap-region material-theme ;;;;; ;; Project Interaction/Search/Syntax flycheck flycheck-pos-tip flycheck-rtags grizzl smex projectile counsel-gtags rtags company-rtags ;; Environments pyenv-mode ;; Python specific stuff py-autopep8 ;;General use-package ;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ) "Packages to make sure are installed") (defun my-packages-installed-p () (loop for p in my-packages when (not (package-installed-p p)) do (return nil) finally (return t))) (unless (my-packages-installed-p) ;; check for new packages (package versions) (package-refresh-contents) ;; install the missing packages (dolist (p my-packages) (when (not (package-installed-p p)) (package-install p))))