112 lines
		
	
	
	
		
			2.8 KiB
		
	
	
	
		
			EmacsLisp
		
	
	
	
	
	
			
		
		
	
	
			112 lines
		
	
	
	
		
			2.8 KiB
		
	
	
	
		
			EmacsLisp
		
	
	
	
	
	
| ;;; init.el --- Package bootstrapping. -*- lexical-binding: t; -*-
 | |
| 
 | |
| ;; This file bootstraps the Emacs setup by going through package installations.
 | |
| ;; After all packages are installed, local configuration is loaded.
 | |
| 
 | |
| (require 'package)
 | |
| (require 'seq)
 | |
| 
 | |
| ;; Configure Marmalade and MELPA repositories. Packages available on Marmalade
 | |
| ;; will have precedence.
 | |
| (add-to-list 'package-archives '("marmalade" . "https://marmalade-repo.org/packages/"))
 | |
| (add-to-list 'package-archives '("melpa" . "http://melpa.milkbox.net/packages/"))
 | |
| (package-initialize)
 | |
| 
 | |
| ;; This variable controls all packages that should be installed.
 | |
| (defvar desired-packages
 | |
|   '(;; elisp libraries
 | |
|     dash
 | |
|     dash-functional
 | |
|     ht
 | |
|     s
 | |
| 
 | |
|     ;; editor packages
 | |
|     ace-jump-mode
 | |
|     ace-window
 | |
|     browse-kill-ring
 | |
|     cargo
 | |
|     company
 | |
|     dockerfile-mode
 | |
|     erlang
 | |
|     exwm
 | |
|     flycheck
 | |
|     geiser
 | |
|     go-mode
 | |
|     gruber-darker-theme
 | |
|     haskell-mode
 | |
|     helm
 | |
|     helm-exwm
 | |
|     helm-pass
 | |
|     hi2
 | |
|     idle-highlight-mode
 | |
|     magit
 | |
|     markdown-mode+
 | |
|     multi-term
 | |
|     multiple-cursors
 | |
|     nix-mode
 | |
|     paredit
 | |
|     password-store
 | |
|     pg
 | |
|     puppet-mode
 | |
|     racer
 | |
|     racket-mode
 | |
|     rainbow-delimiters
 | |
|     rainbow-mode
 | |
|     restclient
 | |
|     rust-mode
 | |
|     smart-mode-line
 | |
|     string-edit
 | |
|     slime
 | |
|     switch-window
 | |
|     terraform-mode
 | |
|     undo-tree
 | |
|     uuidgen
 | |
|     yaml-mode
 | |
|     which-key
 | |
|     ))
 | |
| 
 | |
| (defun installable-packages (pkg-list)
 | |
|   "Filter out not-yet installed packages from package list."
 | |
|   (seq-filter (lambda (p) (not (package-installed-p p))) pkg-list))
 | |
| 
 | |
| (defun install-needed-packages (pkg-list)
 | |
|   (let ((to-install (installable-packages pkg-list)))
 | |
|     (if (< 0 (length to-install))
 | |
|         (progn (package-refresh-contents)
 | |
|                (mapcar #'package-install to-install))
 | |
|       (message "No new packages to install."))))
 | |
| 
 | |
| ;; Run package installation!
 | |
| (install-needed-packages desired-packages)
 | |
| 
 | |
| ;; Configure a few basics before moving on to package-specific initialisation.
 | |
| (setq custom-file (concat user-emacs-directory "init/custom.el"))
 | |
| (load custom-file)
 | |
| 
 | |
| (defvar home-dir)
 | |
| (setq home-dir (expand-file-name "~"))
 | |
| 
 | |
| ;; Seed RNG
 | |
| (random t)
 | |
| 
 | |
| ;; Add 'init' folder that contains other settings to load.
 | |
| (add-to-list 'load-path (concat user-emacs-directory "init"))
 | |
| 
 | |
| ;; Load configuration that makes use of installed packages:
 | |
| 
 | |
| ;; Emacs will automatically initialise all installed packages.
 | |
| ;; After initialisation, proceed to load configuration that requires packages:
 | |
| (defun load-other-settings ()
 | |
|   (mapc 'require '(nixos
 | |
|                    look-and-feel
 | |
|                    functions
 | |
|                    settings
 | |
|                    modes
 | |
|                    bindings
 | |
|                    eshell-setup
 | |
|                    haskell-setup
 | |
|                    rust-setup
 | |
|                    lisp-setup
 | |
|                    )))
 | |
| 
 | |
| (add-hook 'after-init-hook 'load-other-settings)
 |