Skip to content

Instantly share code, notes, and snippets.

@minikomi
Last active January 22, 2018 05:30
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save minikomi/dcf8ad40047ee030a29dc6db591e1683 to your computer and use it in GitHub Desktop.
Save minikomi/dcf8ad40047ee030a29dc6db591e1683 to your computer and use it in GitHub Desktop.
spacemacs.org

Version pinning

(push '("melpa-stable" . "stable.melpa.org/packages/") configuration-layer--elpa-archives)
(push '(clj-refactor . "melpa-stable") package-pinned-packages)
(push '(ac-cider . "melpa-stable") package-pinned-packages)
(push '(cljr-helm . "melpa-stable") package-pinned-packages)
(push '(cider . "melpa-stable") package-pinned-packages)

Configuration Layers

dotspacemacs-configuration-layers
'(php
  colors
  po-mode
  org
  git
  emacs-lisp
  auto-completion
  semantic
  typescript
  javascript
  markdown
  (shell :variables
         shell-default-height 30
         shell-default-position 'bottom)
  syntax-checking
  osx
  clojure
  scheme
  themes-megapack
  html
  react
  (python :variables python-enable-yapf-format-on-save t)
  )

Additional Packages

dotspacemacs-additional-packages
'(adjust-parens vagrant-tramp)

Settings (dotspacemacs/init)

(set-fringe-mode '(1 . 0))
(set-face-attribute
 'fringe nil :background "#444444" :foreground "#444444")
(setq-default
 dotspacemacs-editing-style 'vim
 dotspacemacs-mode-line-theme 'vanilla
 dotspacemacs-verbose-loading nil
 dotspacemacs-startup-banner 'official
 dotspacemacs-startup-lists '(recents projects)
 dotspacemacs-themes '(planet)
 dotspacemacs-colorize-cursor-according-to-state t
 dotspacemacs-default-font '(
                             "Iosevka"
                             :size 14
                             :weight medium
                             :width medium
                             )
 dotspacemacs-leader-key "SPC"
 dotspacemacs-emacs-leader-key "M-m"
 dotspacemacs-major-mode-leader-key ","
 dotspacemacs-major-mode-emacs-leader-key "C-M-m"
 dotspacemacs-command-key ":"
 dotspacemacs-remap-Y-to-y$ t
 dotspacemacs-auto-save-file-location 'cache
 dotspacemacs-use-ido nil
 dotspacemacs-helm-resize nil
 dotspacemacs-helm-no-header nil
 dotspacemacs-helm-position 'bottom
 dotspacemacs-enable-paste-micro-state nil
 dotspacemacs-which-key-delay 0.4
 dotspacemacs-which-key-position 'bottom
 dotspacemacs-loading-progress-bar t
 dotspacemacs-fullscreen-at-startup nil
 dotspacemacs-fullscreen-use-non-native nil
 dotspacemacs-maximized-at-startup nil
 dotspacemacs-active-transparency 90
 dotspacemacs-inactive-transparency 90
 dotspacemacs-mode-line-unicode-symbols t
 dotspacemacs-smooth-scrolling t
 dotspacemacs-smartparens-strict-mode nil
 dotspacemacs-highlight-delimiters 'all
 dotspacemacs-persistent-server nil
 dotspacemacs-search-tools '("ag" "pt" "ack" "grep")
 dotspacemacs-default-package-repository nil)

User Config

Hi-line

(global-hl-line-mode -1) ; Disable current line highlight

up down

(define-key evil-motion-state-map (kbd "<down>") 'evil-next-visual-line)
(define-key evil-motion-state-map (kbd "<up>") 'evil-previous-visual-line)
(define-key evil-visual-state-map (kbd "<down>") 'evil-next-visual-line)
(define-key evil-visual-state-map (kbd "<up>") 'evil-previous-visual-line)

Delete whitespace

(add-hook 'before-save-hook 'delete-trailing-whitespace)

tab and indent

(setq indent-tabs-mode nil) ; use space instead of tab
(defun my-setup-indent (n)

  (setq tab-width n)
  (setq javascript-indent-level n)      ; javascript-mode
  (setq js-indent-level n)              ; js-mode
  (setq js2-basic-offset n)             ; js2-mode
  (setq web-mode-markup-indent-offset n)
                                        ; web-mode, html tag in html file
  (setq web-mode-css-indent-offset n)   ; web-mode, css in html file
  (setq web-mode-code-indent-offset n)  ; web-mode, js code in html file
  (setq css-indent-offset n)            ; css-mode
  (setq less-indent-offset n))          ; css-mode
(my-setup-indent 2) ; indent 2 spaces width

mouse settings

(setq mouse-wheel-scroll-amount '(3 ((shift) . 1) ((control) . nil)))
(setq mouse-wheel-progressive-speed nil)

paredit evil mode

(define-key evil-normal-state-map ",W" " kw")
(define-key evil-normal-state-map ",w["
  (lambda (&optional arg) (interactive "P") (sp-wrap-with-pair "[")))
(define-key evil-normal-state-map ",w{"
  (lambda (&optional arg) (interactive "P") (sp-wrap-with-pair "{")))
(define-key evil-visual-state-map ",W" " kw")
(define-key evil-visual-state-map ",w["
  (lambda (&optional arg) (interactive "P") (sp-wrap-with-pair "[")))
(define-key evil-visual-state-map ",w{"
  (lambda (&optional arg) (interactive "P") (sp-wrap-with-pair "{")))
(define-key evil-normal-state-map ",S" " kW")  ; splice, i.e unwrap an sexp
(define-key evil-normal-state-map ",J" " kJ")  ; join two sexps
(define-key evil-normal-state-map ",O" 'sp-split-sexp) ; split an sexp
(define-key evil-normal-state-map ",I" " kr")  ; raise current symbol
(define-key evil-normal-state-map (kbd ", <up>") " kE") ; splice kill backward
(define-key evil-normal-state-map (kbd ", <down>") " ke") ; forward
(define-key evil-normal-state-map ",>" " ks")  ; forward slurp
(define-key evil-normal-state-map ",<" " kS")  ; backward slurp
(sp-pair "'" nil :actions :rem)
(sp-pair "\"" nil :actions :rem)
(set-face-attribute 'rainbow-delimiters-unmatched-face nil
                    :foreground "white"
                    :background "red"
                    :inherit 'error
                    :box t)

eyebrowse quick switch

(defmacro custom/define-eyebrowse-binding (key)
  `(global-set-key (kbd ,(concat "s-" key))
                   (lambda ()
                     (interactive)
                     (funcall ',(intern (concat "spacemacs/workspaces-transient-state/eyebrowse-switch-to-window-config-" key "-and-exit"))))))


(defun custom/post-init-eyebrowse ()
  (custom/define-eyebrowse-binding "0")
  (custom/define-eyebrowse-binding "1")
  (custom/define-eyebrowse-binding "2")
  (custom/define-eyebrowse-binding "3")
  (custom/define-eyebrowse-binding "4")
  (custom/define-eyebrowse-binding "5")
  (custom/define-eyebrowse-binding "6")
  (custom/define-eyebrowse-binding "7")
  (custom/define-eyebrowse-binding "8")
  (custom/define-eyebrowse-binding "9"))

(custom/post-init-eyebrowse)

Handy shortcuts

color picker

(defun nscolor2hex (color)
  "Converts colors from `NSColor' format to hex values"
  (concat "#"                           ; Add # at the front
          (mapconcat 'identity          ; concate the list
                     (mapcar '(lambda (x) ;returns ("hex" "hex" "hex")
                                (format "%x" (lsh (string-to-int x) -8)))
                             (split-string (s-replace "\"" "" color) ",")) "")))
(defun color-picker (&optional list buffer-name callback)
  "Calls OS X color picker and insert the chosen color"
  (interactive)
  (let ((result
         (do-applescript "tell application \"Finder\"
      activate
    set result to \"\"
    set x to (choose color)
    set result to item 1 of x as string
    set result to result & \",\"
    set result to result & item 2 of x as string
    set result to result & \",\"
    set result to result & item 3 of x as string
    return result
    end tell")))
    (if callback ; For Easy Customization
        (funcall callback (nscolor2hex result))
      (insert (nscolor2hex result)))
    (do-applescript "tell application \"Emacs\" to activate")))

    (spacemacs/set-leader-keys "o c" 'color-picker)

open directory

;; f5 opens folder in current file
(defun browse-file-directory ()
  "Open the current file's directory however the OS would."
  (interactive)
  (if default-directory
      (browse-url-of-file (expand-file-name default-directory))
    (error "No `default-directory' to open")))
(global-set-key (kbd "<f5>") 'browse-file-directory)

japanese backslash

 ;; japanese backslash
(global-set-key (quote [134217893]) "\\")

Weather

(defun insert-image-from-url (&optional url)
  (interactive)
  (unless url (setq url (url-get-url-at-point)))
  (unless url
    (error "Couldn't find URL."))
  (let ((buffer (url-retrieve-synchronously url)))
    (unwind-protect
        (let ((data (with-current-buffer buffer
                      (goto-char (point-min))
                      (search-forward "\n\n")
                      (buffer-substring (point) (point-max)))))
          (insert-image (create-image data nil t)))
      (kill-buffer buffer))))

(defun check-rain ()
  (interactive)
  (with-help-window "*rain*"
    (with-current-buffer "*rain*"
      (insert-image-from-url
       (format
        "http://www.jma.go.jp/jp/radnowc/imgs/radar/206/%s-00.png"
        (shell-command-to-string "echo \"$(date \"+%Y%m%d%H%M\") - ($(date +%M)%5)\" | bc | tr -d \"\\n\""))))))

(spacemacs/set-leader-keys "o w" 'check-rain)

Altcoins

(defun check-coins ()
  (interactive)
  (with-help-window "*rain*"
    (with-current-buffer "*rain*"
      (insert
       (shell-command-to-string
        "curl -s 'https://api.coinmarketcap.com/v1/ticker/?convert=usd' | jq 'sort_by(.market_cap_usd|tonumber) | reverse |.[] | \"\\(.id): \\(.price_usd)\"' | head | sed \"s/\\\"//g\" | xargs printf \"%15s %8.2f\\n\"")))))

(spacemacs/set-leader-keys "o a" 'check-coins)

combine

(global-set-key (kbd "C-;") (if (projectile-mode) 'projectile-find-file 'helm-find-files))
(define-key evil-normal-state-map (kbd "C-:") 'helm-semantic-or-imenu)
<<color-picker>>
<<open-directory>>
<<japanese-backslash>>
<<weather-check>>
<<altcoins>>

Python settings

(add-hook 'python-mode-hook (lambda ()
                              (flycheck-mode 1)
                              (semantic-mode 1)
                              (setq flycheck-checker 'python-flake8
                                    flycheck-checker-error-threshold 900
                                    flycheck-pylintrc "~/.pylintrc")))
 ;; disable for emacs 25
 ;; https://github.com/jorgenschaefer/elpy/issues/887
 (setq python-shell-completion-native-enable nil)

Prefer vertical splits

(setq split-height-threshold 10000)
(setq split-width-threshold 100)

org mode settings

(eval-after-load 'org
  '(progn
     ;; org capture
     (global-set-key (kbd "C-c c") 'org-capture)
     (setq org-capture-templates
           '(("d" "Journal Entry" plain
              (file+datetree "~/Dropbox/org/journal.org")
              "%U\n\n%?" :empty-lines-before 1)
             ("f" "tracks" entry
              (file+datetree "~/Dropbox/org/tracks.org")
              "* %^{Description}  %^g\n%?\n\nAdded: %U")))

     (setq org-structure-template-alist
           (append org-structure-template-alist
                   '(("sh" "#+NAME: ?\n#+BEGIN_SRC sh\n\n#+END_SRC")
                     ("el" "#+NAME: ?\n#+BEGIN_SRC emacs-lisp\n\n#+END_SRC")
                     ("sc" "#+NAME: ?\n#+BEGIN_SRC  :exports code :tangle yes\n\n#+END_SRC")
                     ("py" "#+NAME: ?\n#+BEGIN_SRC python g\n\n#+END_SRC")
                     ("go" "#+NAME: ?\n#+BEGIN_SRC go\n\n#+END_SRC")
                     ("n" "#+BEGIN_COMMENT\n?\n#+END_COMMENT" "<comment>\n?\n</comment>")
                     ("nref" "#+NAME: ?\n#+BEGIN_SRC :noweb-ref <name> g\n\n#+END_SRC")
                     ("ntan" "#+NAME: ?\n#+BEGIN_SRC :noweb tangle :tangle yes\n\n#+END_SRC"))))

     (define-key org-mode-map
       (kbd "<H-return>") 'org-edit-special)
     (define-key org-mode-map
       (kbd "<H-up>") 'org-previous-visible-heading)
     (define-key org-mode-map
       (kbd "<H-down>") 'org-next-visible-heading)
     (define-key org-src-mode-map (kbd "<H-return>") 'org-edit-src-exit)))

lisp settings

(custom-set-variables
 '(cider-auto-jump-to-error nil)
 '(cider-auto-select-error-buffer nil)
 '(cider-show-eval-spinner t)
 '(cider-repl-history-file "~/.cider-history"))
;; adjust parens
(require 'adjust-parens)
;; clojure mode config
(spacemacs/toggle-evil-cleverparens-on)
(add-hook 'clojure-mode-hook #'rainbow-delimiters-mode)
(add-hook 'clojure-mode-hook #'adjust-parens-mode)
(add-hook 'clojure-mode-hook #'evil-cleverparens-mode)
;; elisp mode config
(add-hook 'emacs-lisp-mode-hook #'rainbow-delimiters-mode)
(add-hook 'emacs-lisp-mode-hook #'adjust-parens-mode)
(add-hook 'emacs-lisp-mode-hook #'evil-cleverparens-mode)
(evil-define-key 'normal evil-cleverparens-mode-map
  (kbd "<H-up>")    #'paredit-backward-up
  (kbd "<H-down>")  #'paredit-forward-down
  (kbd "<H-left>")  #'evil-cp-backward-sexp
  (kbd "<H-right>") #'evil-cp-forward-sexp)

fix path

(setenv "PATH" (concat (getenv "PATH") ":/usr/local/bin"))
(setq exec-path (append exec-path '("/usr/local/bin")))
(add-to-list 'exec-path "/usr/local/bin/")
(add-to-list 'exec-path "/usr/local/bin/")

tmpl

(add-to-list 'auto-mode-alist '("\\.tmpl\\'" . web-mode))

Backups and temp files

(setq backup-directory-alist
      `((".*" . ,temporary-file-directory)))
(setq auto-save-file-name-transforms
      `((".*" ,temporary-file-directory t)))

Tangle

spacemacs

(defun dotspacemacs/layers ()
  (setq-default
  <<additional-packages>>
  <<configuration-layers>>
  dotspacemacs-distribution 'spacemacs
  dotspacemacs-configuration-layer-path '()
  dotspacemacs-excluded-packages '()
  dotspacemacs-delete-orphan-packages t))
(defun dotspacemacs/user-init ()
  <<version-pinning>>)
(defun dotspacemacs/init ()
  <<spacemacs-settings>>)
(defun dotspacemacs/user-config ()
  <<disable-hiline>>
  <<up-down-keys>>
  <<delete-whitespace>>
  <<tab-and-indent>>
  <<mouse-settings>>
  <<paredit-evil-keys>>
  <<eyebrowse-quick-switch>>
  <<handy-keys>>
  <<python-settings>>
  <<prefer-vertical-splits>>
  <<org-mode-settings>>
  <<lisp-settings>>
  <<fix-path>>
  <<tmpl-web-mode>>
  <<backups>>
  )

po-mode

 ;;; packages.el --- po-mode layer packages file for Spacemacs.
;;
;; Copyright (c) 2012-2016 Sylvain Benner & Contributors
;;
;; Author: adam <nerdfunk@gmail.com>
;;
;; This file is not part of GNU Emacs.
;;
;;; License: GPLv3

;;; Commentary:

;; See the Spacemacs documentation and FAQs for instructions on how to implement
;; a new layer:
;;
;;   SPC h SPC layers RET
;;
;;
;; Briefly, each package to be installed or configured by this layer should be
;; added to `po-mode-packages'. Then, for each package PACKAGE:
;;
;; - If PACKAGE is not referenced by any other Spacemacs layer, define a
;;   function `po-mode/init-PACKAGE' to load and initialize the package.

;; - Otherwise, PACKAGE is already referenced by another Spacemacs layer, so
;;   define the functions `po-mode/pre-init-PACKAGE' and/or
;;   `po-mode/post-init-PACKAGE' to customize the package as it is loaded.

;;; Code:

(defconst po-mode-packages
  '(po-mode))

(defun po-mode/init-po-mode ()
  (use-package po-mode
    :defer t
    :init
    (progn
      (evil-define-key 'normal po-mode-map
        "u" 'po-undo
        (kbd "C-r") 'po-redo
        "#" 'po-edit-comment
        (kbd "RET") 'po-edit-msgstr
        "k" 'po-kill-msgstr
        "[" 'po-previous-entry
        "]" 'po-next-entry
        "{" 'po-previous-untranslated-entry
        "}" 'po-next-untranslated-entry
        "p" 'po-yank-msgstr)
      )))


;;; packages.el ends here
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment