diff --git a/emacs/.emacs.d/init.el b/emacs/.emacs.d/init.el new file mode 100644 index 0000000..9e853aa --- /dev/null +++ b/emacs/.emacs.d/init.el @@ -0,0 +1,27 @@ +;; Added by Package.el. This must come before configurations of +;; installed packages. Don't delete this line. If you don't want it, +;; just comment it out by adding a semicolon to the start of the line. +;; You may delete these explanatory comments. +(require 'package) +;; remove the load path for nix profiles +;; todo: fix woman +(eval-after-load 'woman '(error "fix the path from /nix/*-emacs-*/..site-start.el first")) + +(require 'seq) +(setq load-path + (seq-difference load-path (mapcar (lambda (x) (concat x "/share/emacs/site-lisp/")) + (split-string (or (getenv "NIX_PROFILES") ""))))) + +(package-initialize 'noactivate) +(custom-set-variables + ;; custom-set-variables was added by Custom. + ;; If you edit it by hand, you could mess it up, so be careful. + ;; Your init file should contain only one such instance. + ;; If there is more than one, they won't work right. + '(custom-safe-themes + (quote + ("d677ef584c6dfc0697901a44b885cc18e206f05114c8a3b7fde674fce6180879" "a8245b7cc985a0610d71f9852e9f2767ad1b852c2bdea6f4aadc12cce9c4d6d0" "8aebf25556399b58091e533e455dd50a6a9cba958cc4ebb0aab175863c25b9a4" default))) + ) + +(org-babel-load-file "~/dotfiles/emacs/emacs.org") + diff --git a/emacs/emacs.org b/emacs/emacs.org new file mode 100644 index 0000000..fed6e52 --- /dev/null +++ b/emacs/emacs.org @@ -0,0 +1,267 @@ +#+TITLE: Emacs config +#+AUTHOR: Yorick van Pelt + +* Prelims +** use-package compile-time +#+BEGIN_SRC emacs-lisp +(eval-when-compile (require 'use-package)) +(require 'diminish) +(require 'bind-key) +#+END_SRC +* Org stuff +** modules +#+BEGIN_SRC emacs-lisp +(setq org-modules '(org-bbdb org-bibtex org-docview org-gnus org-habit + org-info org-irc org-mhe org-rmail org-w3m)) +#+END_SRC +** keybindings +#+BEGIN_SRC emacs-lisp +(bind-keys :map global-map + ("C-c l" . org-store-link) + ("C-c a" . org-agenda) + ("C-c c" . org-capture)) +#+END_SRC +** config +#+BEGIN_SRC emacs-lisp + (setq org-pretty-entities t) + (setq org-startup-indented t) + (setq org-src-fontify-natively t) + (setq org-src-tab-acts-natively t) + (setq org-ellipsis "⬎") + (setq org-log-done t) + (setq org-todo-keywords + '((sequence "TODO(t)" "WAIT" "|" "DONE(d)" "CANCEL"))) +(setq org-agenda-files (list "~/org/life.org" + "~/org/ru.org" + "~/org/symfo.org" + "~/org/fiction.org")) +(setq org-use-fast-todo-selection t) +(setq org-directory "~/org") + +(defun org-file-path (filename) +"Return the absolute address of an org file, given its relative name." +(concat (file-name-as-directory org-directory) filename)) + +; (setq org-inbox-file "~/org/inbox.org") +(setq org-index-file (org-file-path "life.org")) +(setq org-archive-location + (concat (org-file-path "archive.org") "::* From %s")) + +(setq org-default-notes-file "~/org/refile.org") + + + +(setq org-capture-templates + '(("l" "Today I learned" + entry + (file+datetree (org-file-path "til.org")) + "* %?\n") + ("u" "link" + entry + (file+headline org-index-file "check links") + "* %^L\n") + ("w" "Week review" + entry + (file+datetree (org-file-path "weeklog.org")) + "* %?\n") + ("t" "todo item" + entry + (file+headline org-index-file "todo") + "* TODO %?\n"))) + + +#+END_SRC +** add template for elisp +#+BEGIN_SRC emacs-lisp + (add-to-list 'org-structure-template-alist + '("el" "#+BEGIN_SRC emacs-lisp\n?\n#+END_SRC")) +#+END_SRC +** org-bullets +#+BEGIN_SRC emacs-lisp +(use-package org-bullets + :init (add-hook 'org-mode-hook 'org-bullets-mode t) + :commands org-bullets-mode +) +#+END_SRC +** TODO org-ref +#+BEGIN_SRC emacs-lisp + (use-package org-ref + :disabled + :config + (setq org-ref-completion-library 'org-ref-ivy-cite)) +#+END_SRC +* Look +** Solarized +#+BEGIN_SRC emacs-lisp +(use-package solarized + :if window-system + :init + (setq-default frame-background-mode 'dark) + (set-frame-parameter nil 'background-mode 'dark) + (add-hook 'after-make-frame-functions (lambda (frame) + "Reenable solarized" + (enable-theme 'solarized-dark))) + :config + (load-theme 'solarized-dark t) + (enable-theme 'solarized-dark)) +#+END_SRC +** Transparency +#+BEGIN_SRC emacs-lisp +(set-frame-parameter (selected-frame) 'alpha '(90 . 85)) +(add-to-list 'default-frame-alist '(alpha . (90 . 85))) +#+END_SRC +** Cleaner frames +#+BEGIN_SRC emacs-lisp +(tool-bar-mode 0) +(menu-bar-mode 0) +#+END_SRC +** hl-line +#+BEGIN_SRC emacs-lisp +(when window-system (global-hl-line-mode)) +#+END_SRC +* Feel +#+BEGIN_SRC emacs-lisp +(defalias 'yes-or-no-p 'y-or-n-p) +#+END_SRC +** Fix mouse wheel +#+BEGIN_SRC emacs-lisp +(setq mouse-wheel-scroll-amount '(1 ((shift) . 1))) ;; one line at a time +(setq mouse-wheel-progressive-speed nil) ;; don't accelerate scrolling +(setq mouse-wheel-follow-mouse 't) ;; scroll window under mouse +(setq scroll-step 1) ;; keyboard scroll one line at a time +(defun sfp-page-down (&optional arg) + (interactive "^P") + (setq this-command 'next-line) + (next-line + (- (window-text-height) + next-screen-context-lines))) +(put 'sfp-page-down 'isearch-scroll t) +(put 'sfp-page-down 'CUA 'move) +(defun sfp-page-up (&optional arg) + (interactive "^P") + (setq this-command 'previous-line) + (previous-line + (- (window-text-height) + next-screen-context-lines))) +(put 'sfp-page-up 'isearch-scroll t) +(put 'sfp-page-up 'CUA 'move) +(setq scroll-error-top-bottom t) +#+END_SRC +** Ivy +#+BEGIN_SRC emacs-lisp +(use-package ivy + :init + (setq ivy-height 10) + (setq ivy-use-virtual-buffers t) + (setq enable-recursive-minibuffers t) + :config + (ivy-mode t) + :bind (("C-s" . swiper) + ("C-c C-r" . ivy-resume) + ("" . ivy-resume))) +#+END_SRC +** Counsel +#+BEGIN_SRC emacs-lisp +(use-package counsel + :bind (("M-x" . counsel-M-x) + ("C-x C-f" . counsel-find-file))) +#+END_SRC + (global-set-key (kbd " f") 'counsel-describe-function) + (global-set-key (kbd " v") 'counsel-describe-variable) + (global-set-key (kbd " l") 'counsel-find-library) + (global-set-key (kbd " i") 'counsel-info-lookup-symbol) + (global-set-key (kbd " u") 'counsel-unicode-char) + ;; (global-set-key (kbd "C-c g") 'counsel-git) + ;; (global-set-key (kbd "C-c j") 'counsel-git-grep) + ;; (global-set-key (kbd "C-c k") 'counsel-ag) + ;; (global-set-key (kbd "C-x l") 'counsel-locate) + ;; (global-set-key (kbd "C-S-o") 'counsel-rhythmbox) + ;; (define-key read-expression-map (kbd "C-r") 'counsel-expression-history) +* editing +** line numbers +*** relative +#+BEGIN_SRC emacs-lisp +(use-package linum-relative + :commands linum-relative-toggle) +#+END_SRC +*** enable globally +#+BEGIN_SRC emacs-lisp +(global-linum-mode t) +#+END_SRC +** Indentation +#+BEGIN_SRC emacs-lisp +(setq-default indent-tabs-mode nil) +(setq-default tab-width 2) ; or any other preferred value +(defvaralias 'c-basic-offset 'tab-width) +(defvaralias 'cperl-indent-level 'tab-width) +#+END_SRC +** git-gutter-fringe +#+BEGIN_SRC emacs-lisp +(use-package git-gutter-fringe + :config (global-git-gutter-mode t)) +#+END_SRC +** all-the-icons +#+BEGIN_SRC emacs-lisp +(use-package all-the-icons + :commands all-the-icons-insert) +#+END_SRC +** backups +from [[https://www.emacswiki.org/emacs/BackupDirectory][emacs wiki]] +#+BEGIN_SRC emacs-lisp +(setq + backup-by-copying t ; don't clobber symlinks + backup-directory-alist + '(("." . "~/.emacs.d/.saves")) ; don't litter my fs tree + delete-old-versions t + kept-new-versions 6 + kept-old-versions 2 + version-control t) ; use versioned backups + +#+END_SRC +** Evil +#+BEGIN_SRC emacs-lisp +(use-package evil + :config (evil-mode t)) +(use-package which-key + :init + (setq which-key-allow-evil-operators t) + (setq which-key-show-operator-state-maps t) + :config + (which-key-mode 1) + (which-key-setup-minibuffer)) ; do I need this? +#+END_SRC +*** evil-goggles +#+BEGIN_SRC emacs-lisp +(use-package evil-goggles + :config (evil-goggles-mode) + (evil-goggles-use-diff-faces)) +#+END_SRC +* Tools +** Magit +#+BEGIN_SRC emacs-lisp +(use-package magit + :bind (("C-c g" . magit-status) + ("C-c C-g l" . magit-log-all))) +#+END_SRC +** Pass +#+BEGIN_SRC emacs-lisp +(use-package pass + :commands pass) +#+END_SRC +*** TODO helm-pass or password-store or fix keybindings for pass +* language-specific +** markdown +#+BEGIN_SRC emacs-lisp +(use-package markdown-mode + :commands (markdown-mode gfm-mode) + :mode (("README\\.md\\'" . gfm-mode) + ("\\.md\\'" . markdown-mode) + ("\\.markdown\\'" . markdown-mode)) + :init (setq markdown-command "multimarkdown")) +#+END_SRC +** nix +#+BEGIN_SRC emacs-lisp +(use-package nix-mode + :commands (nix-mode) + :mode (("\\.nix\\'" . nix-mode))) +#+END_SRC diff --git a/install.sh b/install.sh index bceff6a..3285af3 100755 --- a/install.sh +++ b/install.sh @@ -1,4 +1,4 @@ #!/usr/bin/env bash #!nix-shell -i bash -p stow -$(nix-build '' -A stow --no-out-link)/bin/stow -d `dirname $0` -t ~ nix git x pentadactyl i3 gtk gpg mutt misc bash +$(nix-build '' -A stow --no-out-link)/bin/stow -d `dirname $0` -t ~ nix git x pentadactyl gtk gpg mutt misc bash stow nix-build -A $(hostname -s) diff --git a/nix/.nixpkgs/config.nix b/nix/.nixpkgs/config.nix index acab1c5..ad8d701 100644 --- a/nix/.nixpkgs/config.nix +++ b/nix/.nixpkgs/config.nix @@ -228,6 +228,53 @@ frumar = with envs; [bup gitAndTools.git-annex rtorrent pyroscope]; }; pandocdeps = (pkgs.texlive.combine { + myEmacs = emacsWithPackages (epkgs: (with epkgs.melpaStablePackages; [ + company + paredit + counsel + flycheck + ivy + magit + projectile + use-package + org-bullets + solarized-theme + evil + evil-magit + evil-leader + evil-tutor + evil-surround + epkgs.evil-goggles + # evil-commentary + password-store + pass + linum-relative + (epkgs.trivialBuild { pname = "emacs-nix-mode"; src = pkgs.fetchFromGitHub { + owner = "matthewbauer"; + repo = "nix-mode"; + rev = "v1.2.1"; + sha256 = "1zpqpq6hd83prk80921nbjrvcmk0dykqrrr1mw3b29ppjma5zjiz"; + }; + preConfigure = '' + rm nix-company.el nix-mode-mmm.el + ''; + }) + nix-buffer + which-key + git-gutter-fringe + neotree + all-the-icons + epkgs.org-cliplink + pandoc-mode + markdown-mode + interleave + # all-the-icons-dired + org-ref + avy + # nixos-sandbox # https://github.com/travisbhartwell/nix-emacs + haskell-mode + ])); + # todo: emacs-all-the-icons-fonts inherit (pkgs.texlive) scheme-basic # explicit list pandoc tex dependencies diff --git a/stow/.emacs.d b/stow/.emacs.d new file mode 120000 index 0000000..0a78785 --- /dev/null +++ b/stow/.emacs.d @@ -0,0 +1 @@ +../emacs/.emacs.d \ No newline at end of file