Skip to content

Instantly share code, notes, and snippets.

@sepisoad
Last active January 14, 2026 19:25
Show Gist options
  • Select an option

  • Save sepisoad/5ca27f2732a45846d0a6ba4f3c20110c to your computer and use it in GitHub Desktop.

Select an option

Save sepisoad/5ca27f2732a45846d0a6ba4f3c20110c to your computer and use it in GitHub Desktop.
(load "~/.emacs.d/sanemacs.el" nil t)
;; load user .bashrc
(when (memq window-system '(mac ns x))
(exec-path-from-shell-initialize))
;; change cursor shape to a box
(setq-default cursor-type 'box)
;; set the default theme
(load-theme 'default-black t)
;; set the default font features
(set-face-attribute 'default nil :font "Monaspace Krypton Frozen Medium" :height 100)
;; set gutter size to zero
(set-fringe-mode '(0 . 10))
;; disable line wrapping
(setq-default truncate-lines t)
(global-visual-line-mode -1)
;; hide mode-line
(add-hook 'prog-mode-hook #'hide-mode-line-mode)
(add-hook 'dired-mode-hook #'hide-mode-line-mode)
;; minibuffer config
(setq completion-show-help nil ;; GOOD
completion-styles '(basic flex) ;; GOOD
completions-detailed nil ;; GOOD
enable-recursive-minibuffers nil ;; HMMM
completion-auto-select 'second-tab ;; GOOD
completion-auto-help 'visible ;; GOOD
completions-format 'one-column ;; GOOD
completions-sort 'historical ;; GOOD
completions-max-height 7 ;; GOOD
completion-ignore-case t) ;; GOOD
(dolist (map (list minibuffer-local-map
minibuffer-local-ns-map
minibuffer-local-completion-map
minibuffer-local-must-match-map))
(define-key map (kbd "C-g") #'abort-recursive-edit))
(global-eldoc-mode -1)
;; dired config
(setq ls-lisp-use-insert-directory-program nil
ls-lisp-dirs-first t
dired-listing-switches "-lh"
dired-kill-when-opening-new-dired-buffer t
dired-dwim-target t)
(global-set-key (kbd "C-x d") #'dired)
(global-set-key (kbd "C-x C-d") #'dired)
(add-hook 'dired-mode-hook #'dired-hide-details-mode)
;; some nice key bindings
(global-set-key (kbd "C-x f") #'find-file)
(global-set-key (kbd "C-x C-b") #'switch-to-buffer)
@sepisoad
Copy link
Author

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; Sanemacs version 0.3.3 ;;;
;;; https://sanemacs.com   ;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;; For performance
(setq gc-cons-threshold 100000000)
(setq read-process-output-max (* 1024 1024)) ;; 1mb


(add-hook 'after-init-hook #'(lambda ()
                               ;; restore after startup
                               (setq gc-cons-threshold 800000)))

;;; Disable menu-bar, tool-bar, and scroll-bar.
(if (fboundp 'menu-bar-mode)
    (menu-bar-mode -1))
(if (fboundp 'tool-bar-mode)
    (tool-bar-mode -1))
(if (fboundp 'scroll-bar-mode)
    (scroll-bar-mode -1))

;;; Fix this bug:
;;; https://www.reddit.com/r/emacs/comments/cueoug/the_failed_to_download_gnu_archive_is_a_pretty/
(when (version< emacs-version "26.3")
  (setq gnutls-algorithm-priority "NORMAL:-VERS-TLS1.3"))

;;; Setup package.el
(require 'package)
(setq package-enable-at-startup nil)
(add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/"))
(unless package--initialized (package-initialize))

;;; Setup use-package
(unless (package-installed-p 'use-package)
  (package-refresh-contents)
  (package-install 'use-package))
(eval-when-compile
  (require 'use-package))
(setq use-package-always-ensure t)

;;; Useful Defaults
(setq inhibit-startup-screen t)           ; Disable startup screen
(setq initial-scratch-message "")         ; Make *scratch* buffer blank
(setq-default frame-title-format '("%b")) ; Make window title the buffer name
(setq ring-bell-function 'ignore)         ; Disable bell sound
(fset 'yes-or-no-p 'y-or-n-p)             ; y-or-n-p makes answering questions faster
(show-paren-mode 1)                       ; Show closing parens by default
(delete-selection-mode 1)                 ; Selected text will be overwritten when you start typing
(global-auto-revert-mode t)               ; Auto-update buffer if file has changed on disk
(use-package undo-tree                    ; Enable undo-tree, sane undo/redo behavior
  :init (global-undo-tree-mode)
  :config (setq-default undo-tree-auto-save-history nil))
(add-hook 'before-save-hook
	  'delete-trailing-whitespace)    ; Delete trailing whitespace on save

(defun sanemacs/backward-kill-word ()
  (interactive "*")
  (push-mark)
  (backward-word)
  (delete-region (point) (mark)))

;;; Keybindings
(global-set-key [mouse-3] 'mouse-popup-menubar-stuff)          ; Gives right-click a context menu
(global-set-key (kbd "C->") 'indent-rigidly-right-to-tab-stop) ; Indent selection by one tab length
(global-set-key (kbd "C-<") 'indent-rigidly-left-to-tab-stop)  ; De-indent selection by one tab length
(global-set-key (kbd "M-DEL") 'sanemacs/backward-kill-word)    ; Kill word without copying it to your clipboard
(global-set-key (kbd "C-DEL") 'sanemacs/backward-kill-word)    ; Kill word without copying it to your clipboard

;;; Offload the custom-set-variables to a separate file
;;; This keeps your init.el neater and you have the option
;;; to gitignore your custom.el if you see fit.
(setq custom-file (expand-file-name "custom.el" user-emacs-directory))
(unless (file-exists-p custom-file)
  (write-region "" nil custom-file))
;;; Load custom file. Don't hide errors. Hide success message
(load custom-file nil t)

;;; Put Emacs auto-save and backup files to /tmp/ or C:/Temp/
(defconst emacs-tmp-dir (expand-file-name (format "emacs%d" (user-uid)) temporary-file-directory))
(setq
   backup-by-copying t                                        ; Avoid symlinks
   delete-old-versions t
   kept-new-versions 6
   kept-old-versions 2
   version-control t
   auto-save-list-file-prefix emacs-tmp-dir
   auto-save-file-name-transforms `((".*" ,emacs-tmp-dir t))  ; Change autosave dir to tmp
   backup-directory-alist `((".*" . ,emacs-tmp-dir)))

;;; Lockfiles unfortunately cause more pain than benefit
(setq create-lockfiles nil)

;;; Load wheatgrass as the default theme if one is not loaded already

;; (if (not custom-enabled-themes)
;;     (load-theme 'wheatgrass t))

(defun reload-config ()
  (interactive)
  (load-file (expand-file-name "init.el" user-emacs-directory)))

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment