GithubHelp home page GithubHelp logo

.emacs.d's Introduction

Emacs, the OS masquerading as an editor

I use Emacs as it’s consistent cross-platform and almost a software lisp machine. This is making my personal experience most excellent.

Contents

[[#desktop–saving-emacs-sessions][Desktop
Saving Emacs Sessions]]

Usage AKA Getting Started

I use Linux and Mac and emacs is my primary app.

Ubuntu

sudo snap install emacs --candidate --classic
sudo apt install git cmake libtool-bin #libvterm
mv ~/.emacs.d /tmp
git clone [email protected]:drewc/.emacs.d.git ~/.emacs.d

# make X11 work inside old tmux sessions
eval $(tmux showenv -s | grep -E '^(SSH|DISPLAY)')
emacs

The Early Init

Emacs has/had things that we want to configure BEFORE initialization, as it were.

So for that we get the Early Init File(info), AKA early-init.el(html).

(setq package-enable-at-startup nil)

straight.el: next-generation, purely functional package manager…

… for the Emacs hacker! See their github for docs.

 ;; Straight bootstrap
(defvar bootstrap-version)
(let ((bootstrap-file
	 (expand-file-name "straight/repos/straight.el/bootstrap.el" user-emacs-directory))
	(bootstrap-version 5))
  (unless (file-exists-p bootstrap-file)
    (with-current-buffer
	  (url-retrieve-synchronously
	   "https://raw.githubusercontent.com/raxod502/straight.el/develop/install.el"
	   'silent 'inhibit-cookies)
	(goto-char (point-max))
	(eval-print-last-sexp)))
  (load bootstrap-file nil 'nomessage))

;; Set up use-package for tidier package configuration/installation
(straight-use-package 'use-package)
(setq straight-use-package-by-default t)

We use use-package from straight-use-package in order to have use-package use straight-use-package by default.

Mac (Darwin) and the command/meta key

(setq ns-command-modifier 'meta)
(setq  mac-command-modifier 'meta)

Org Mode

I love org mode!

(straight-use-package 'org)
(require 'ox-md) (require 'org-indent)
(org-babel-do-load-languages
   'org-babel-load-languages
   '((sql . t)
     (shell . t)))

org-roam

Org Roam is such a wonderful thing that we have a directory here just for it!

(let ((rd (expand-file-name "./roam/" (file-name-directory user-init-file))))
  (dolist (f (directory-files rd t "\.el$")) (load f)))

outli, org for not org, outline but better

https://github.com/jdtsmith/outli

(use-package outli
  :straight (outli :type git :host github :repo "jdtsmith/outli")
  :bind (:map outli-mode-map ; convenience key to get back to containing heading
	      ("C-c C-p" . (lambda () (interactive) (outline-back-to-heading)))))

ox-gfm: Github Flavored Markdown exporter for Org Mode

(use-package ox-gfm)
(require 'ox-gfm)

org-make-toc for Github compatible TOC’s

  • Making links work in both Emacs/Org and on GitHub

    Because of the way GitHub renders Org documents and links, it’s not possible to make links which work in both Org itself and the GitHub-rendered HTML unless headings have CUSTOM_ID properties. If the option org-make-toc-insert-custom-ids is enabled, this package will automatically add them as needed.

(use-package org-make-toc
  :config
   (setq org-make-toc-insert-custom-ids t))

Usage

A document may have any number of tables of contents (TOCs), each of which may list entries in a highly configurable way.

To make a basic TOC, follow these steps:

  1. Choose a heading to contain a TOC and move the point to it.
  2. Run command org-make-toc-insert, which inserts a :CONTENTS: drawer and sets TOC properties. Set the include property to all.
  3. Run the command org-make-toc to update all TOCs in the document.

Use command org-make-toc-set to change TOC properties for the entry at point with completion.

Desktop :: Saving Emacs Sessions

“Once you save the Emacs desktop—the buffers, their file names, major modes, buffer positions, and so on—then subsequent Emacs sessions reload the saved desktop.” –Saving Emacs Sessions

(desktop-save-mode 1)

Evil: VI bindings in Emacs

(use-package evil)
(require 'evil)
(evil-mode 1)

Syntax with =bnf-mode’

(use-package bnf-mode)

Rest

(eval-and-compile
  (setq *gerbil-path*
	(or (getenv "GERBIL_INSTALL_PREFIX")
	    (shell-command-to-string "gxi -e '(display (path-expand \"~~\"))'\
   -e '(flush-output-port)'")))
  (setq font-lock-reference-face font-lock-constant-face)
  (defun %gerbil-load-path ()
     (expand-file-name "share/emacs/site-lisp/" *gerbil-path*)))

(use-package gerbil-mode
  :when (file-directory-p *gerbil-path*)
  :load-path (lambda () (list (%gerbil-load-path)))
  :ensure nil
  :straight nil
  ;;:demand t
 ;; :defer t
  :mode (("\\.ss\\'"  . gerbil-mode)
         ("\\.pkg\\'" . gerbil-mode))
  :bind (:map comint-mode-map
	      (("C-S-n" . comint-next-input)
	       ("C-S-p" . comint-previous-input)
	       ("C-S-l" . clear-comint-buffer))
	      :map gerbil-mode-map
	      (("C-S-l" . clear-comint-buffer)))
  ;; :init
  ;; (autoload 'gerbil-mode
  ;;   (expand-file-name "share/emacs/site-lisp/gerbil-mode.el" *gerbil-path*)
  ;;   "Gerbil editing mode." t)
   :hook
   ((gerbil-mode . display-line-numbers-mode)
    (inferior-scheme-mode . gambit-inferior-mode)
    (scheme-mode . gerbil-mode))

  :config
  (require 'gambit
           (expand-file-name "share/emacs/site-lisp/gambit.el" *gerbil-path*))
  (setf scheme-program-name (expand-file-name "bin/gxi -:te" *gerbil-path*))

  (let ((tags (locate-dominating-file default-directory "TAGS")))
    (when tags (visit-tags-table tags)))
  (let ((tags (expand-file-name "src/TAGS" *gerbil-path*)))
    (when (file-exists-p tags) (visit-tags-table tags)))

  (when (package-installed-p 'smartparens)
    (sp-pair "'" nil :actions :rem)
    (sp-pair "`" nil :actions :rem))

  (defun clear-comint-buffer ()
    (interactive)
    (with-current-buffer "*scheme*"
      (let ((comint-buffer-maximum-size 0))
        (comint-truncate-buffer))))

)

(defun gerbil-setup-buffers ()
  "Change current buffer mode to gerbil-mode and start a REPL"
  (interactive)
  (gerbil-mode)
  (split-window-right)
  (shrink-window-horizontally 2)
  (let ((buf (buffer-name)))
    (other-window 1)
    (run-scheme "gxi")
    (switch-to-buffer-other-window "*scheme*" nil)
    (switch-to-buffer buf)))

;; (global-set-key (kbd "C-c C-g") 'gerbil-setup-buffers)


(use-package markdown-mode
  :mode ("README\\.md\\'" . gfm-mode))

;;(use-package org-sidebar)

(use-package magit)
(use-package simple-httpd)
(use-package slime)

(use-package haskell-mode)

(use-package doom-themes
  :config
  ;; Global settings (defaults)
  (setq doom-themes-enable-bold t    ; if nil, bold is universally disabled
	  doom-themes-enable-italic t) ; if nil, italics is universally disabled
  ;(load-theme 'doom-one t)
  (load-theme 'doom-nord t)

  ;; Enable flashing mode-line on errors
  (doom-themes-visual-bell-config)
  ;; Enable custom neotree theme (all-the-icons must be installed!)
  (doom-themes-neotree-config)
  ;; or for treemacs users
  (setq doom-themes-treemacs-theme "doom-atom") ; use "doom-colors" for less minimal icon theme
  (doom-themes-treemacs-config)
  ;; Corrects (and improves) org-mode's native fontification.
  (doom-themes-org-config))
(use-package multi-vterm
	  :config
	  (add-hook 'vterm-mode-hook
			  (lambda ()
			  (setq-local evil-insert-state-cursor 'box)
			  (evil-insert-state)))
	  (define-key vterm-mode-map [return]                      #'vterm-send-return)

	  (setq vterm-keymap-exceptions nil)
	  (evil-define-key 'insert vterm-mode-map (kbd "C-e")      #'vterm--self-insert)
	  (evil-define-key 'insert vterm-mode-map (kbd "C-f")      #'vterm--self-insert)
	  (evil-define-key 'insert vterm-mode-map (kbd "C-a")      #'vterm--self-insert)
	  (evil-define-key 'insert vterm-mode-map (kbd "C-v")      #'vterm--self-insert)
	  (evil-define-key 'insert vterm-mode-map (kbd "C-b")      #'vterm--self-insert)
	  (evil-define-key 'insert vterm-mode-map (kbd "C-w")      #'vterm--self-insert)
	  (evil-define-key 'insert vterm-mode-map (kbd "C-u")      #'vterm--self-insert)
	  (evil-define-key 'insert vterm-mode-map (kbd "C-d")      #'vterm--self-insert)
	  (evil-define-key 'insert vterm-mode-map (kbd "C-n")      #'vterm--self-insert)
	  (evil-define-key 'insert vterm-mode-map (kbd "C-m")      #'vterm--self-insert)
	  (evil-define-key 'insert vterm-mode-map (kbd "C-p")      #'vterm--self-insert)
	  (evil-define-key 'insert vterm-mode-map (kbd "C-j")      #'vterm--self-insert)
	  (evil-define-key 'insert vterm-mode-map (kbd "C-k")      #'vterm--self-insert)
	  (evil-define-key 'insert vterm-mode-map (kbd "C-r")      #'vterm--self-insert)
	  (evil-define-key 'insert vterm-mode-map (kbd "C-t")      #'vterm--self-insert)
	  (evil-define-key 'insert vterm-mode-map (kbd "C-g")      #'vterm--self-insert)
	  (evil-define-key 'insert vterm-mode-map (kbd "C-c")      #'vterm--self-insert)
	  (evil-define-key 'insert vterm-mode-map (kbd "C-SPC")    #'vterm--self-insert)
	  (evil-define-key 'normal vterm-mode-map (kbd "C-d")      #'vterm--self-insert)
	  (evil-define-key 'normal vterm-mode-map (kbd ",c")       #'multi-vterm)
	  (evil-define-key 'normal vterm-mode-map (kbd ",n")       #'multi-vterm-next)
	  (evil-define-key 'normal vterm-mode-map (kbd ",p")       #'multi-vterm-prev)
	  (evil-define-key 'normal vterm-mode-map (kbd "i")        #'evil-insert-resume)
	  (evil-define-key 'normal vterm-mode-map (kbd "o")        #'evil-insert-resume)
	  (evil-define-key 'normal vterm-mode-map (kbd "<return>") #'evil-insert-resume))
(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.
'(tool-bar-mode nil))
(custom-set-faces
 ;; custom-set-faces 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.
 '(default ((t (:family "Andale Mono" :foundry "nil" :slant normal :weight regular :height 180 :width normal)))))

.emacs.d's People

Contributors

drewc avatar

Watchers

 avatar James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.