;;; init.el --- user-init-file -*- lexical-binding: t -*- ;; Bootstrap quelpa (unless (package-installed-p 'quelpa) (with-temp-buffer (url-insert-file-contents "https://github.com/quelpa/quelpa/raw/master/quelpa.el") (eval-buffer) (quelpa-self-upgrade)) ;; Install all selected packages ; Load custom.el to get the list of selected packages (let ((custom-file (expand-file-name "custom.el" user-emacs-directory))) (when (file-exists-p custom-file) (load custom-file)) (load "custom.el")) (mapc #'quelpa package-selected-packages)) (progn ; startup (package-initialize) (add-to-list 'package-archives '("org" . "https://orgmode.org/elpa/") t) (defvar before-user-init-time (current-time) "Value of `current-time' when Emacs begins loading `user-init-file'.") (message "Loading Emacs...done (%.3fs)" (float-time (time-subtract before-user-init-time before-init-time))) (setq user-init-file (or load-file-name buffer-file-name)) (setq user-emacs-directory (file-name-directory user-init-file)) (message "Loading %s..." user-init-file) (setq inhibit-startup-buffer-menu t) (setq inhibit-startup-screen t) (setq inhibit-startup-echo-area-message "locutus") (setq initial-buffer-choice t) (setq initial-scratch-message "") (setq load-prefer-newer t) (defalias 'yes-or-no-p 'y-or-n-p) (scroll-bar-mode 0) (tool-bar-mode 0) (menu-bar-mode 0) (delete-selection-mode 1) (column-number-mode 1)) (progn ; `use-package' (require 'use-package) (setq use-package-verbose t) (setq use-package-always-defer t) (setq use-package-enable-imenu-support t)) (use-package auto-compile :demand t :config (auto-compile-on-load-mode) (auto-compile-on-save-mode) (setq auto-compile-display-buffer nil) (setq auto-compile-mode-line-counter t) (setq auto-compile-source-recreate-deletes-dest t) (setq auto-compile-toggle-deletes-nonlib-dest t) (setq auto-compile-update-autoloads t) (add-hook 'auto-compile-inhibit-compile-hook 'auto-compile-inhibit-compile-detached-git-head)) (use-package bash-completion :demand t :config (progn (bash-completion-setup))) (use-package custom :config (setq custom-file (expand-file-name "custom.el" user-emacs-directory)) (when (file-exists-p custom-file) (load custom-file))) (use-package server :config (or (server-running-p) (server-mode))) (progn ; startup (message "Loading early birds...done (%.3fs)" (float-time (time-subtract (current-time) before-user-init-time)))) ;;; Long tail (use-package abbrev :config (setq save-abbrevs 'silently) (setq-default abbrev-mode t)) (use-package auth-source-pass :demand t :after auth-source :init (progn (setq auth-sources '(password-store)))) (use-package autorevert :config (global-auto-revert-mode 1) ;; auto-update dired buffers (setq global-auto-revert-non-file-buffers t auto-revert-verbose nil)) (use-package avy :bind (("C-c C-j" . avy-goto-char-2) ("M-g g" . avy-goto-line)) :config (progn ;; Home row (setq avy-keys '(?a ?r ?s ?t ?d ?h ?n ?e ?i ?o)) (setq avy-style 'at-full) (setq avy-all-windows t))) (use-package beginend :demand t :config (beginend-global-mode)) (use-package browse-url :config (setq browse-url-generic-program (executable-find "nightly"))) (use-package buffer-move :bind (("" . buf-move-up) ("" . buf-move-down) ("" . buf-move-left) ("" . buf-move-right))) (use-package buffer-watcher :demand t) (use-package clojure-mode :mode "\\.clj\\'") (use-package cider :after clojure-mode :init (progn (defun setup-clojure-buffer () (eldoc-mode) (clj-refactor-mode 1) (paredit-mode 1) (setq indent-tabs-mode nil)) (add-hook 'clojure-mode-hook #'setup-clojure-buffer) (add-hook 'cider-mode-hook #'cider-turn-on-eldoc-mode)) :config (progn (setq cider-repl-use-clojure-font-lock t cider-repl-use-pretty-printing t cider-repl-wrap-history t cider-repl-history-size 3000))) (use-package clj-refactor :after clojure-mode :config (cljr-add-keybindings-with-prefix "C-c C-r")) (use-package company :init (progn (add-hook 'prog-mode-hook 'company-mode)) :config (progn (setq company-idle-delay 0.5) (setq company-tooltip-limit 10) (setq company-minimum-prefix-length 2) (setq company-tooltip-flip-when-above t))) (use-package company-dabbrev :config (progn (setq company-dabbrev-ignore-case t) (setq company-dabbrev-downcase nil))) (use-package company-go :after go-mode :config (progn (add-to-list 'company-backends #'company-go) (setq company-go-show-annotation t))) (use-package company-nixos-options :after nix-mode :config (progn (add-to-list 'company-backends #'company-nixos-options))) (use-package compile :hook (compilation-filter . my/colorize-compilation-buffer) :config (progn ;; http://stackoverflow.com/questions/13397737 (defun my/colorize-compilation-buffer () (require 'ansi-color) (let ((inhibit-read-only t)) (ansi-color-apply-on-region compilation-filter-start (point)))))) (use-package counsel :demand t :bind (("M-x" . counsel-M-x) ("C-x C-f" . counsel-find-file) ("M-i" . counsel-imenu) ("M-y" . counsel-yank-pop)) :init (progn (setq counsel-linux-app-format-function #'counsel-linux-app-format-function-name-only))) (use-package dabbrev :bind (("S-SPC" . dabbrev-expand))) (use-package dash :config (dash-enable-font-lock)) (use-package diff-hl :hook ((prog-mode . diff-hl-mode) (magit-post-refresh . diff-hl-magit-post-refresh))) (use-package dired :bind (:map dired-mode-map ("M-s" . find-name-dired) ("C-k" . dired-kill-subdir)) :init (progn (add-hook 'dired-mode-hook #'dired-hide-details-mode)) :config (progn (setq dired-listing-switches "-alh") (setq dired-dwim-target t) (put 'dired-find-alternate-file 'disabled nil))) (use-package dired-du :after dired) (use-package dired-x :demand t :after dired :init (progn (add-hook 'dired-mode-hook #'dired-omit-mode)) :config (progn (setq dired-omit-files "^\\...+$"))) (use-package drag-stuff :demand t :config (progn (drag-stuff-global-mode t) (drag-stuff-define-keys) (add-to-list 'drag-stuff-except-modes 'org-mode) (add-to-list 'drag-stuff-except-modes 'rebase-mode) (add-to-list 'drag-stuff-except-modes 'emacs-lisp-mode))) (use-package duplicate-thing :bind ("M-D" . duplicate-thing)) (use-package ediff :config (progn ;; window positioning & frame setup (setq ediff-window-setup-function 'ediff-setup-windows-plain ediff-split-window-function 'split-window-horizontally))) ;; (use-package editorconfig ;; :demand t ;; :init (editorconfig-mode 1)) (use-package elbank) (use-package eldoc :config (global-eldoc-mode)) (use-package elec-pair :demand t :config (electric-pair-mode t)) (use-package electric :demand t :config (electric-indent-mode t)) (use-package elisp-mode :hook (emacs-lisp-mode . (lambda () (setq indent-tabs-mode nil)))) (use-package embrace :bind (("C-c e" . embrace-commander)) :hook (emacs-lisp-mode . embrace-emacs-lisp-mode-hook)) (use-package erc :init (progn (setq erc-nick "NicolasPetton" erc-autojoin-channels-alist '(("freenode.net" . ("#emacs")))))) (use-package esh-mode :hook (eshell-mode . my/configure-esh-mode) :config (progn ;; We can't use use-package's :bind here as eshell insists on ;; recreating a fresh eshell-mode-map for each new eshell buffer. (defun my/configure-esh-mode () (bind-key "M-p" #'counsel-esh-history eshell-mode-map)))) (use-package em-cmpl :hook (eshell-mode . eshell-cmpl-initialize)) (use-package em-smart :hook (eshell-mode . eshell-smart-initialize) :config (progn (add-to-list 'eshell-smart-display-navigate-list #'counsel-esh-history))) (use-package em-term :config (progn (nconc eshell-visual-subcommands '(("docker" "build") ("git" "log" "diff" "show") ("npm" "init" "install") ("yarn" "init" "install"))) (add-to-list 'eshell-command-completions-alist '("gunzip" "gz\\'")) (add-to-list 'eshell-command-completions-alist '("tar" "\\(\\.tar|\\.tgz\\|\\.tar\\.gz\\)\\'")) (setenv "PAGER" "cat") (setenv "SUDO_ASKPASS" (executable-find "pass-root-password.sh")))) (use-package pcomplete :config (progn (defvar pcomplete-man-user-commands (split-string (shell-command-to-string "apropos -s 1 .|while read -r a b; do echo \" $a\";done;")) "p-completion candidates for `man' command") (defun pcomplete/man () "Completion rules for the `man' command." (pcomplete-here pcomplete-man-user-commands)))) (use-package pcmpl-git :after pcomplete) (use-package exec-path-from-shell :init (exec-path-from-shell-initialize)) (use-package expand-region :bind (("C-=" . er/expand-region))) (use-package flycheck :commands (flycheck-mode) :init (add-hook 'prog-mode-hook #'flycheck-mode)) (use-package flyspell :bind (:map flyspell-mode-map ("C-;" . nil)) :init (progn ;; (add-hook 'prog-mode-hook #'flyspell-prog-mode) (dolist (mode-hook '(text-mode-hook org-mode-hook LaTeX-mode-hook)) (add-hook mode-hook #'flyspell-mode)))) (use-package flyspell-correct-ivy :bind* (("C-." . flyspell-correct-word-generic))) (use-package go-eldoc :after go-mode :hook (go-mode . setup-go-mode) :config (progn (defun setup-go-mode () (add-hook 'before-save-hook #'gofmt nil t) (go-eldoc-setup)))) (use-package go-mode :bind (:map go-mode-map ("M-." . godef-jump) ("C-c d" . godoc-at-point)) :init (progn (add-to-list 'exec-path (format "%s/.local/share/go/bin" (getenv "HOME"))) (setenv "GOPATH" (format "%s/.local/share/go" (getenv "HOME"))))) (use-package gnus-dired :bind (:map gnus-dired-mode-map ("C-x C-a" . gnus-dired-attach)) :config (add-hook 'dired-mode-hook #'turn-on-gnus-dired-mode)) (use-package help :config (temp-buffer-resize-mode)) (use-package helpful :bind (("C-h ." . helpful-at-point) ("C-h k" . helpful-key) ("C-h v" . helpful-variable) ("C-h f" . helpful-callable))) (use-package ibuffer :bind (("C-x C-b" . ibuffer))) ;; Fix dead characters (use-package iso-transl :demand t) (use-package ispell :config (defun ispell-word-then-abbrev (p) "Call `ispell-word', then create an abbrev for it. With prefix P, create local abbrev. Otherwise it will be global." (interactive "P") (let (bef aft) (save-excursion (while (progn (backward-word) (and (setq bef (thing-at-point 'word)) (not (ispell-word nil 'quiet))))) (setq aft (thing-at-point 'word))) (when (and aft bef (not (equal aft bef))) (setq aft (downcase aft)) (setq bef (downcase bef)) (define-abbrev (if p local-abbrev-table global-abbrev-table) bef aft) (write-abbrev-file) (message "\"%s\" now expands to \"%s\" %sally" bef aft (if p "loc" "glob"))))) (define-key ctl-x-map "\C-i" #'ispell-word-then-abbrev)) (use-package ivy :demand t ;; :bind (("C-c r" . ivy-resume)) :config (progn (ivy-mode 1) (setq ivy-use-virtual-buffers t) (setq ivy-count-format "(%d/%d) ") (setq ivy-use-selectable-prompt t))) (progn ; `isearch' (setq isearch-allow-scroll t)) (use-package js2-mode :mode "\\.js\\'" :config (progn (define-key js2-mode-map (kbd "C-c C-o") nil)) :config (defun js2-show-node-at-point () (interactive) (js2-show-node (js2-node-at-point))) (defun js2-show-node-parent-at-point () (interactive) (js2-show-node (js2-node-parent (js2-node-at-point)))) (defun js2-show-node (node) (let* ((buf (get-buffer-create "*js2-node-at-point*")) (node-contents (buffer-substring (js2-node-abs-pos node) (js2-node-abs-end node)))) (with-current-buffer (set-buffer buf) (delete-region (point-min) (point-max)) (insert node-contents))))) (use-package emacs-js :commands (setup-js-buffer) :init (progn (add-hook 'js-mode-hook #'setup-js-buffer))) (use-package finsit-bugref :demand t :config (progn (finsit-bugref-setup))) (use-package finsit-prodigy :demand t :after prodigy :config (progn (finsit-prodigy-setup))) (use-package finsit-elcouch :demand t :after elcouch :config (progn (finsit-elcouch-setup))) (use-package finsit-basecamp :demand t :config (progn (finsit-basecamp-setup))) (use-package finsit-magit :demand t :after magit :config (progn (finsit-magit-setup))) (use-package finsit-prodigy :demand t :after prodigy) (use-package finsit-yasnippet :demand t :after yasnippet :config (progn (finsit-yasnippet-setup))) (use-package klassified :init (add-hook 'js2-mode-hook #'klassified-interaction-js-mode)) (use-package less-css-mode) (use-package lisp-mode :config (add-hook 'emacs-lisp-mode-hook 'outline-minor-mode) (defun indent-spaces-mode () (setq indent-tabs-mode nil)) (add-hook 'lisp-interaction-mode-hook #'indent-spaces-mode)) (use-package magit :config (progn ;; (magit-add-section-hook 'magit-status-sections-hook ;; 'magit-insert-modules ;; 'magit-insert-unpulled-from-upstream) (magit-define-popup-action 'magit-commit-popup ?x "Absorb" #'magit-commit-absorb-popup) (setq magit-branch-prefer-remote-upstream '("master")) (setq magit-branch-adjust-remote-upstream-alist '(("origin/master" "master"))) (setq magit-branch-arguments nil))) (use-package man :config (setq Man-width 80)) (use-package multiple-cursors :bind (("M-RET" . mc/edit-lines) ("C-<" . mc/mark-previous-like-this) ("C->" . mc/mark-next-like-this) ("C-M-<" . mc/unmark-next-like-this) ("C-M->" . mc/unmark-previous-like-this) ("C-c C-<" . mc/mark-all-like-this))) (use-package nix-mode :config (progn (defun nixfmt-fix () (interactive) (when (executable-find "nixfmt") (let ((point (point))) (unwind-protect (call-process-region (point-min) (point-max) "nixfmt" t t) (goto-char point))))) (define-minor-mode nixfmt-fix-mode "Use nixfmt to automatically format nix files." :lighter " nixfmt" (if nixfmt-fix-mode (add-hook 'before-save-hook #'nixfmt-fix nil t) (remove-hook 'before-save-hook #'nixfmt-fix t)))) :hook (nix-mode . nixfmt-fix-mode)) (use-package no-littering :demand t :config (progn (require 'recentf) (add-to-list 'recentf-exclude no-littering-var-directory) (add-to-list 'recentf-exclude no-littering-etc-directory) (setq delete-old-versions t kept-new-versions 6 kept-old-versions 2 version-control t) (setq backup-directory-alist `((".*" . ,(no-littering-expand-var-file-name "backup/")))) (setq auto-save-file-name-transforms `((".*" ,(no-littering-expand-var-file-name "auto-save/") t))) (setq create-lockfiles nil))) (use-package nov :mode ("\\.epub\\'" . nov-mode) :config (progn (defun my-nov-font-setup () (face-remap-add-relative 'variable-pitch :family "Gentium Book Basic" :height 1.3)) (add-hook 'nov-mode-hook 'my-nov-font-setup) (setq nov-text-width 62))) ;; (use-package omnisharp ;; :after csharp-mode ;; :bind (:map omnisharp-mode-map ;; ("C-c r" . omnisharp-run-code-action-refactoring) ;; ("M-." . omnisharp-go-to-definition) ;; ;; ("M-." . omnisharp-find-implementations) ;; ("M-?" . omnisharp-find-usages)) ;; :hook ((omnisharp-mode . configure-omnisharp) ;; (csharp-mode . omnisharp-mode)) ;; :config ;; (progn ;; (add-to-list 'company-backends #'company-omnisharp) ;; (setq omnisharp-imenu-support t) ;; (defun configure-omnisharp () ;; (local-set-key (kbd "C-c C-c") #'recompile)))) ;; (use-package csharp-mode ;; :hook ((csharp-mode . configure-csharp)) ;; :config (progn ;; (defun configure-csharp () ;; (setq indent-tabs-mode nil) ;; (setq c-syntactic-indentation t) ;; (c-set-style "ellemtel") ;; (setq c-basic-offset 4) ;; (setq truncate-lines t) ;; (setq tab-width 4)))) ;; (use-package lsp-mode ;; :hook ((csharp-mode . lsp) ;; (js2-mode . lsp)) ;; :config (progn ;; (setq lsp-keymap-prefix "C-c l")) ;; :commands lsp) ;; (use-package lsp-ui :commands lsp-ui-mode) ;; (use-package lsp-ivy :commands lsp-ivy-workspace-symbol) ;; (use-package dap-mode) ;; (use-package dap-LANGUAGE) ;; to load the dap adapter for your language ;; optional if you want which-key integration (use-package which-key :config (which-key-mode)) (use-package open-url-at-point :bind ("C-c C-o" . open-url-at-point)) (use-package paredit :demand t :bind (:map paredit-mode-map ("M-s" . nil)) :config (add-hook 'emacs-lisp-mode-hook #'paredit-mode) (add-hook 'eval-expression-minibuffer-setup-hook #'enable-paredit-mode)) (use-package paren :demand t :config (show-paren-mode)) (use-package pass :mode ("org/reference/password-store/" . pass-view-mode) :bind ("C-x p" . pass) :config (progn (add-to-list 'auto-mode-alist '("\\/.*\\.gpg\\'" . pass-view-mode)))) (use-package pdf-tools :demand t :bind (:map pdf-view-mode-map ("C-s" . isearch-forward)) :config (progn (pdf-tools-install))) (use-package counsel-projectile :demand t :after projectile :config (progn (counsel-projectile-mode) (define-key projectile-mode-map [remap projectile-ag] #'counsel-projectile-rg))) (use-package projectile :demand t :bind (:map projectile-mode-map ("C-c p" . projectile-command-map)) :config (progn (projectile-mode) (projectile-register-project-type 'monitor '("gulpfile.js") :compile "cd ~/work/ftgp/monitor/monitor/Monitor.Web.Ui/Client && gulp lint" :test "cd ~/work/ftgp/monitor/monitor/Monitor.Web.Ui/Client && gulp karma" :test-suffix "-tests"))) (use-package prog-mode :config (progn (global-prettify-symbols-mode) (defun indicate-buffer-boundaries-left () (setq indicate-buffer-boundaries 'left)) (add-hook 'prog-mode-hook #'indicate-buffer-boundaries-left))) (use-package quelpa :config (progn (setq quelpa-upgrade-p nil) (add-to-list 'quelpa-melpa-recipe-stores "~/.emacs.d/etc/quelpa/recipes/"))) (use-package rainbow-mode :init (progn (add-hook 'css-mode-hook 'rainbow-mode) (add-hook 'less-mode-hook 'rainbow-mode))) (use-package recentf :demand t :init (progn (setq recentf-auto-cleanup 300) (setq recentf-max-saved-items 4000)) :config (progn (add-to-list 'recentf-exclude "^/\\(?:ssh\\|su\\|sudo\\)?:") (recentf-mode))) (use-package company-restclient :after restclient :config (progn (add-to-list 'company-backend 'company-restclient) (add-hook 'restclient-mode-hook #'company-mode-on))) (use-package savehist :config (savehist-mode)) (use-package saveplace :config (save-place-mode)) (use-package shell-switcher :bind (("C-'" . shell-switcher-switch-buffer) ("C-M-'" . shell-switcher-new-shell)) :config (progn (setq shell-switcher-new-shell-function #'eshell))) (use-package simple :config (column-number-mode)) (use-package subword :init (global-subword-mode)) (use-package swiper :bind (("C-s" . swiper-isearch))) (use-package tabify :config (defun tabify-buffer () (interactive) (tabify (point-min) (point-max))) (defun untabify-buffer () (interactive) (untabify (point-min) (point-max)))) (use-package term :bind ( :map term-mode-map ("C-c C-t" . my/term-toggle-line-mode) :map term-raw-map ("C-c C-t" . my/term-toggle-line-mode)) :init (progn (defun my/term-toggle-line-mode () "Toggle between char and line modes." (interactive) (if (term-in-char-mode) (term-line-mode) (term-char-mode))))) (progn ; `text-mode' (add-hook 'text-mode-hook #'indicate-buffer-boundaries-left)) (use-package time-stamp :init (progn (defvar-local time-stamp-target nil "File in which time-stamps should be written.") (put 'time-stamp-target 'safe-local-variable 'string-or-null-p) (defun time-stamp-target () "Update the time-stamp in `time-stamp-target' if non-nil." (when (and time-stamp-target (file-exists-p time-stamp-target)) (with-current-buffer (find-file-noselect time-stamp-target) (time-stamp)))))) (use-package tramp :config (progn (add-to-list 'tramp-default-proxies-alist '(nil "\\`root\\'" "/ssh:%h:")) (add-to-list 'tramp-default-proxies-alist '("localhost" nil nil)) (add-to-list 'tramp-default-proxies-alist (list (regexp-quote (system-name)) nil nil)))) (use-package transmission :config (progn (defun transmission-add-magnet (url) "Like `transmission-add', but with no file completion." (interactive "sMagnet url: ") (transmission-add url)))) (use-package uniquify :config (setq uniquify-buffer-name-style 'forward)) (use-package url-vars :init (progn (setq url-privacy-level 'high))) (use-package web-mode :init (progn (add-to-list 'auto-mode-alist '("\\.html\\'" . web-mode)) (add-to-list 'auto-mode-alist '("\\.htm\\'" . web-mode)) (add-to-list 'auto-mode-alist '("\\.phtml\\'" . web-mode)) (add-to-list 'auto-mode-alist '("\\.tpl\\.php\\'" . web-mode)) (add-to-list 'auto-mode-alist '("\\.[agj]sp\\'" . web-mode)) (add-to-list 'auto-mode-alist '("\\.as[cp]x\\'" . web-mode)) (add-to-list 'auto-mode-alist '("\\.erb\\'" . web-mode)) (add-to-list 'auto-mode-alist '("\\.mustache\\'" . web-mode)) (add-to-list 'auto-mode-alist '("\\.djhtml\\'" . web-mode))) (setq web-mode-css-indent-offset 2)) (use-package whitespace :config (setq whitespace-display-mappings '( (space-mark 32 [183] [46]) ; normal space, · (space-mark 160 [164] [95]) (space-mark 2208 [2212] [95]) (space-mark 2336 [2340] [95]) (space-mark 3616 [3620] [95]) (space-mark 3872 [3876] [95]) (newline-mark 10 [182 10]) ; newlne, ¶ (tab-mark 9 [9655 9] [92 9]) ; tab, ▷ ))) (progn ;; `window' (bind-key "C-;" #'other-window)) (use-package winner :bind (("C-|". winner-undo))) (use-package workflow :commands (work-clock-out work-back-from-lunch work-coffee work-start work-stop work-lunch work-clock-in work-send-weekly-email)) (use-package ws-butler :init (add-hook 'prog-mode-hook #'ws-butler-mode)) (use-package yasnippet :demand t :init (progn (yas-global-mode))) (use-package zerodark-theme :demand t :config (progn (defun set-selected-frame-dark () (interactive) (let ((frame-name (cdr (assq 'name (frame-parameters (selected-frame)))))) (call-process-shell-command (format "xprop -f _GTK_THEME_VARIANT 8u -set _GTK_THEME_VARIANT 'dark' -name '%s'" frame-name)))) (when (window-system) (load-theme 'zerodark t) (zerodark-setup-modeline-format) (set-selected-frame-dark) (setq frame-title-format '(buffer-file-name "%f" ("%b")))))) (use-package minions :demand t :after zerodark-theme :config (unless minions-mode (minions-mode))) (use-package zoom-frm :bind (("C-+" . zoom-frm-in) ("C--" . zoom-frm-out))) ;; envrc must come late in the init.el file so add-hook adds it first ;; in `find-file-hook'. ;; (use-package envrc ;; :demand t ;; :config ;; (progn ;; (envrc-global-mode) ;; ;; ledger needs that for `ledger-toggle-current-transaction': ;; (unbind-key "C-c C-e" envrc-mode-map))) (progn ; startup (message "Loading %s...done (%.3fs)" user-init-file (float-time (time-subtract (current-time) before-user-init-time))) (add-hook 'after-init-hook (lambda () (message "Loading %s...done (%.3fs) [after-init]" user-init-file (float-time (time-subtract (current-time) before-user-init-time)))) t)) (progn ; local packages (let ((dir (expand-file-name "local" user-emacs-directory))) (when (file-exists-p dir) (add-to-list 'load-path dir)))) (progn ; personalize (let ((file (expand-file-name (concat (user-real-login-name) ".el") user-emacs-directory))) (when (file-exists-p file) (load file)))) (progn ; host-specific setup (let* ((host (substring (shell-command-to-string "hostname") 0 -1)) (host-dir (concat "~/.emacs.d/hosts/" host)) (host-file (expand-file-name "init.el" host-dir))) (when (file-exists-p host-dir) (let ((default-directory host-dir)) (add-to-list 'load-path host-dir) (normal-top-level-add-subdirs-to-load-path))) (when (file-exists-p host-file) (load host-file)))) (progn ; private modules (let ((private-dir "~/.priv/elisp")) (when (file-exists-p private-dir) (add-to-list 'load-path private-dir) (require 'private-modules nil t)))) ;; display line numbers in buffers visiting a file ;; (dolist (mode-hook '(prog-mode-hook text-mode-hook)) ;; (add-hook mode-hook (lambda () ;; (when buffer-file-name ;; (setq display-line-numbers t))))) (defun goto-line-with-line-numbers () (interactive) (let ((display-line-numbers t)) (call-interactively #'goto-line))) (global-set-key [remap goto-line] #'goto-line-with-line-numbers) ;; Local Variables: ;; indent-tabs-mode: nil ;; eval: (flycheck-mode -1) ;; no-byte-compile: t ;; End: ;;; init.el ends here