diff options
author | Franck Cuny <franck.cuny@gmail.com> | 2018-04-08 16:13:12 -0700 |
---|---|---|
committer | Franck Cuny <franck.cuny@gmail.com> | 2018-04-08 16:13:12 -0700 |
commit | 4007ca81e0105119c8ed754e654a731934f5154c (patch) | |
tree | 41ba9d60f64866c8a098e631e8e32bf4249931fa | |
parent | [emacs] fix some path after directories reorg (diff) | |
download | emacs.d-4007ca81e0105119c8ed754e654a731934f5154c.tar.gz |
[emacs] Large refactoring.
At first I wanted to add support for java, and then I realized that maintaining a giant file with all the packages was not working as I was expected. The configuration is broken down to multiple files now, with each major mode in a separate file, and the main modules in their own too. This should make it easier to maintain and organize.
43 files changed, 820 insertions, 830 deletions
diff --git a/emacs.d/config/config-env.el b/emacs.d/config/config-env.el new file mode 100644 index 0000000..3f7bf0a --- /dev/null +++ b/emacs.d/config/config-env.el @@ -0,0 +1,19 @@ +(defvar fcuny/workspace (expand-file-name "workspace" (getenv "HOME")) + "Path to the workspace.") + +(defvar fcuny/path-twitter-git (expand-file-name "git.twitter.biz" fcuny/workspace) + "Path to twitter's git repositories.") + +(defvar fcuny/path-github (expand-file-name "github.com" fcuny/workspace) + "Path to github's git repositories.") + +(defvar fcuny/path-twitter-svn (expand-file-name "svn.twitter.biz" fcuny/workspace) + "Path to twitter's SVN repositories.") + +(defvar fcuny/twitter-ops-linter (expand-file-name "twitter-ops/utilities/puppet/.puppet-lint.rc" fcuny/path-twitter-svn) + "Path to the linter's configuration for twitter-ops.") + +(defvar fcuny/twitter-gcp-linter (expand-file-name "gcp-puppet-manifests/.puppet-lint-rc" fcuny/path-twitter-git) + "Path to the linkter's configucation for gcp-puppet-manifests") + +(provide 'config-env) diff --git a/emacs.d/config/config-lib.el b/emacs.d/config/config-lib.el new file mode 100644 index 0000000..5148ff7 --- /dev/null +++ b/emacs.d/config/config-lib.el @@ -0,0 +1,34 @@ +(require 'config-package) + +;; rename a buffer +(defun fc/rename-this-buffer-and-file () + "Renames current buffer and file it is visiting." + (interactive) + (let ((name (buffer-name)) + (filename (buffer-file-name)) + (read-file-name-function 'read-file-name-default)) + (if (not (and filename (file-exists-p filename))) + (error "Buffer '%s' is not visiting a file!" name) + (let ((new-name (read-file-name "New name: " filename))) + (cond ((get-buffer new-name) + (error "A buffer named '%s' already exists!" new-name)) + (t + (rename-file filename new-name 1) + (rename-buffer new-name) + (set-visited-file-name new-name) + (set-buffer-modified-p nil) + (message "File '%s' successfully renamed to '%s'" name (file-name-nondirectory new-name)))))))) + + +;; predicate for checking style only on python files +(defun fc/check-source-p () + "Finds if the current python file is in the `source' repository." + (and (executable-find "check.pex") + (buffer-file-name) + (string-match "src/source/.*\.py$" (buffer-file-name)))) + +(defun fc/check-gcp-puppet-p () + "Finds if the current file is in GCP's puppet repository." + (string-match "gcp-puppet-manifest/.*$" (buffer-file-name))) + +(provide 'config-lib) diff --git a/emacs.d/config/config-package.el b/emacs.d/config/config-package.el new file mode 100644 index 0000000..1b262c3 --- /dev/null +++ b/emacs.d/config/config-package.el @@ -0,0 +1,23 @@ +;; where to store the packages +(setq package-user-dir (expand-file-name "var/elpa" user-emacs-directory)) + +(require 'package) +(add-to-list 'package-archives '("melpa" . "http://melpa.org/packages/") t) + +;; enable package +;; (setq package-enable-at-startup nil) + +;; initialize it +(package-initialize) + +;; paradox is a better interface +(when (not (package-installed-p 'paradox)) + (package-install 'paradox)) + +(paradox-require 'use-package) + +(require 'use-package) + +(setq use-package-always-ensure t) + +(provide 'config-package) diff --git a/emacs.d/config/config-set-path.el b/emacs.d/config/config-set-path.el new file mode 100644 index 0000000..a22416d --- /dev/null +++ b/emacs.d/config/config-set-path.el @@ -0,0 +1,9 @@ +(paradox-require 'exec-path-from-shell) + +(when (memq window-system '(x mac ns)) + (exec-path-from-shell-initialize) + (dolist (var '("GEM_HOME" "GEM_PATH" "MY_RUBY_HOME")) + (unless (getenv var) + (exec-path-from-shell-copy-env var)))) + +(provide 'config-set-path) diff --git a/emacs.d/init.el b/emacs.d/init.el index 715222b..5c56b35 100644 --- a/emacs.d/init.el +++ b/emacs.d/init.el @@ -2,15 +2,52 @@ ;; on load time. ;; (package-initialize) -(defun emacs-lib (filename) - (expand-file-name (concat "lib" "/" filename ".el") user-emacs-directory)) +;; Initialise the package system first of all. +(package-initialize) -(load (emacs-lib "settings")) -(load (emacs-lib "funcs")) -(load (emacs-lib "bindings")) +;; Skip the default splash screen. +(setq inhibit-startup-message t) -(when (>= emacs-major-version 24) - (load (emacs-lib "packages")) - (load (emacs-lib "twitter") 'missing-ok)) +(add-to-list 'load-path (expand-file-name "config" user-emacs-directory)) +(add-to-list 'load-path (expand-file-name "modules" user-emacs-directory)) -(add-hook 'emacs-startup-hook #'fc/load-time) +(require 'config-lib) +(require 'config-package) +(require 'config-env) +(require 'config-set-path) + +(require 'module-general) +(require 'module-appareance) +(require 'module-hydra) +(require 'module-editing) +(require 'module-codestyle) + +(require 'module-ibuffer) +(require 'module-git) +(require 'module-dired) +(require 'module-ivy) +(require 'module-project) +(require 'module-flycheck) +(require 'module-flyspell) +(require 'module-autocomplete) + +(require 'module-make) +(require 'module-pants) + +(require 'module-c) +(require 'module-docker) +(require 'module-go) +(require 'module-java) +(require 'module-json) +(require 'module-lisp) +(require 'module-protobuf) +(require 'module-puppet) +(require 'module-python) +(require 'module-rust) +(require 'module-scala) +(require 'module-shell) +(require 'module-thrift) + +(require 'module-markdown) +(require 'module-toml) +(require 'module-yaml) diff --git a/emacs.d/lib/bindings.el b/emacs.d/lib/bindings.el deleted file mode 100644 index ec97ecc..0000000 --- a/emacs.d/lib/bindings.el +++ /dev/null @@ -1,12 +0,0 @@ -;; some bindings -(global-set-key (kbd "M-j") 'join-line) -(global-set-key (kbd "<s-return>") 'toggle-frame-fullscreen) - -(define-key emacs-lisp-mode-map (kbd "C-c C-e") 'eval-buffer) -(define-key emacs-lisp-mode-map (kbd "C-c C-r") 'eval-region) - -(global-set-key (kbd "s-=") 'fc/scale-up-font) -(global-set-key (kbd "s--") 'fc/scale-down-font) -(global-set-key (kbd "s-0") 'fc/reset-font-size) - -(provide 'bindings) diff --git a/emacs.d/lib/funcs.el b/emacs.d/lib/funcs.el deleted file mode 100644 index 81330f6..0000000 --- a/emacs.d/lib/funcs.el +++ /dev/null @@ -1,95 +0,0 @@ -;;; funcs.el --- functions for my own usage - -(defun fc/load-time () - "How long did it take to load the configuration." - (message "Emacs init time %s" (emacs-init-time))) - -(defun fc/system-info () - "Display system informations" - (format - (concat "### System information :\n" - "- OS: %s\n" - "- Emacs: %s") - system-type - emacs-version)) - -;; font manipulation -(defun fc/scale-up-or-down-font-size (direction) - "Scale the font. If DIRECTION is positive or zero the font is scaled up, -otherwise it is scaled down." - (interactive) - (let ((scale 0.5)) - (if (eq direction 0) - (text-scale-set 0) - (if (< direction 0) - (text-scale-decrease scale) - (text-scale-increase scale))))) - -(defun fc/scale-up-font () - "Scale up the font." - (interactive) - (fc/scale-up-or-down-font-size 1)) - -(defun fc/scale-down-font () - "Scale up the font." - (interactive) - (fc/scale-up-or-down-font-size -1)) - -(defun fc/reset-font-size () - "Reset the font size." - (interactive) - (fc/scale-up-or-down-font-size 0)) - -;; jump to the scratch buffer -(defun fc/switch-to-scratch () - "Switch to scratch, grab the region if it's active." - (interactive) - (let ((contents - (and (region-active-p) - (buffer-substring (region-beginning) - (region-end))))) - (switch-to-buffer "*scratch*") - (if contents - (progn - (goto-char (buffer-end 1)) - (insert contents))))) - -(global-set-key (kbd "s-N") 'fc/switch-to-scratch) - -;; rename a buffer -(defun fc/rename-this-buffer-and-file () - "Renames current buffer and file it is visiting." - (interactive) - (let ((name (buffer-name)) - (filename (buffer-file-name)) - (read-file-name-function 'read-file-name-default)) - (if (not (and filename (file-exists-p filename))) - (error "Buffer '%s' is not visiting a file!" name) - (let ((new-name (read-file-name "New name: " filename))) - (cond ((get-buffer new-name) - (error "A buffer named '%s' already exists!" new-name)) - (t - (rename-file filename new-name 1) - (rename-buffer new-name) - (set-visited-file-name new-name) - (set-buffer-modified-p nil) - (message "File '%s' successfully renamed to '%s'" name (file-name-nondirectory new-name)))))))) - -;; create temporary files -(defun fc/start--file (path) - "Create a file at PATH, creating any containing directories as necessary. -Visit the file after creation." - (make-directory (file-name-directory path) t) - (find-file path)) - -(defun fc/start-tmp-file (file-name) - "Create a file in /tmp for the given file name." - (interactive "sName of temporary file: ") - (fc/start--file (expand-file-name (format "/tmp/%s" file-name)))) - -;; open dired buffer with tramp on remote host -(defun fc/remote--dired (host) - "Open dired on a remote host." - (dired (concat "/" host ":"))) - -(provide 'funcs) diff --git a/emacs.d/lib/org.el b/emacs.d/lib/org.el deleted file mode 100644 index 2c75e7d..0000000 --- a/emacs.d/lib/org.el +++ /dev/null @@ -1,48 +0,0 @@ -(use-package org - :ensure t - :mode ("\\.org\\'" . org-mode) - :init - (org-babel-do-load-languages - 'org-babel-load-languages - (append org-babel-load-languages '((sh . t) - (python . t)))) - :config - (setq-default org-startup-indent t - org-startup-truncated t - org-src-tabs-acts-natively t - org-src-preserve-indentation t - org-todo-keyword-faces '(("TODO" . org-warning) - ("DOING" . "yellow") - ("BLOCKED" . "red") - ("REVIEW" . "orange") - ("DONE" . "green") - ("ARCHIVED" . "blue")) - org-todo-keywords - '((sequence "NEXT(n)" "PLANNING(P)" "INPROGRESS(i)" "WAITING(w)" "|" "DONE(d)") - (sequence "MEETING(m)" "|" "CANCELLED(c)") - (sequence "IDLE(a)")) - org-link-abbrev-alist - '(("src" . "~/src/%s") - ("jira" . "https://jira.twitter.biz/browse/%s") - ("rb" . "https://reviewboard.twitter.biz/r/%s") - ("d" . "https://phabricator.twitter.biz/d%s") - ("go" . "http://go/%s")))) - -(use-package org-agenda - :bind (("\C-cA" . org-agenda)) - :config - (progn - (setq-default org-agenda-files (file-expand-wildcards "~/Documents/org/*.org") - org-default-notes-file "~/Documents/org/refile.org" - org-directory "~/Documents/org/"))) - -(use-package org-capture - :bind (("\C-cc" . org-capture)) - :config - (progn - (setq-default org-refile-targets '(("twitter.org" :maxlevel . 4) - ("personal.org" :maxlevel . 4)) - org-capture-templates '(("t" "task" entry - (file "~/Documents/org/refile.org") - "* TODO %? -%U"))))) diff --git a/emacs.d/lib/packages.el b/emacs.d/lib/packages.el deleted file mode 100644 index 9abfdb3..0000000 --- a/emacs.d/lib/packages.el +++ /dev/null @@ -1,427 +0,0 @@ -;; setup packages -(require 'package) -(setq package-user-dir (expand-file-name "var/elpa" user-emacs-directory) - package-enable-at-startup nil - package-archives (append package-archives - '(("melpa" . "https://melpa.milkbox.net/packages/")))) - -(package-initialize) - -(unless package-archive-contents - (message "Refreshing ELPA package archives...") - (package-refresh-contents)) - -;; install the package 'use-package' unless it's already installed -(unless (package-installed-p 'use-package) - (progn - (package-install 'use-package))) - -;; ... and load 'use-package' -(require 'use-package) - -(use-package server - ;; start emacs server if not already running - :config - (unless (server-running-p) (server-start))) - -(use-package diminish - ;; remove clutter from the mode line - :ensure t) - -(use-package ag - ;; interface to the 'ag' tool - :ensure t - :commands (counsel-ag ag) - :bind (:map ag-mode-map - ("p" . compilation-previous-error) - ("n" . compilation-next-error) - ("N" . compilation-next-file) - ("P" . compilation-previous-file)) - :config - (setq ag-highlight-search t - ag-reuse-buffers t - ag-reuse-window t)) - -(use-package autorevert - ;; automatically revert the buffer if the content changed on disk - :diminish auto-revert-mode) - -(use-package counsel - ;; completion functions for ivy - :ensure t - - :bind* - (("M-x" . counsel-M-x) - ("C-s" . counsel-grep-or-swiper) - ("C-x C-f" . counsel-find-file) - ("C-x C-r" . counsel-recentf) - ("C-c f" . counsel-git) - ("C-c s" . counsel-git-grep) - ("C-c /" . counsel-ag)) - - :config - (setq counsel-find-file-at-point t)) - -(use-package dired - ;; configuration for dired - :bind ("C-x C-d" . dired) - - :config - (let ((gls "/opt/twitter/bin/gls")) - (if (file-exists-p gls) - (setq insert-directory-program gls - dired-listing-switches "-aBhl --group-directories-first"))) - (use-package dired-x - :init - (add-hook 'dired-load-hook (lambda () (load "dired-x"))) - :config - (add-hook 'dired-mode-hook #'dired-omit-mode) - (setq dired-omit-verbose nil) - (setq dired-omit-files - (concat dired-omit-files "\\|^.DS_Store$\\|^.projectile$\\|^.git$")))) - -(use-package dockerfile-mode - ;; support for dockerfile mode - :ensure t) - -(use-package lisp-mode - ;; simple configuration for various lisp mode - :config - (add-hook 'emacs-lisp-mode-hook - (lambda() - (setq mode-name "λ")))) - -(use-package eldoc - ;; documentation with eldoc - :ensure t - - :commands eldoc-mode - - :diminish "" - - :init - (add-hook 'emacs-lisp-mode-hook 'eldoc-mode) - (add-hook 'lisp-interaction-mode-hook 'eldoc-mode)) - -(use-package exec-path-from-shell - ;; environment fixup for macOS. - :ensure t - - :if (and (eq system-type 'darwin) (display-graphic-p)) - - :init - (setq exec-path-from-shell-check-startup-files nil) - - :config - (progn - (setq exec-path-from-shell-debug t) - (exec-path-from-shell-initialize))) - -(use-package flycheck - ;; check syntax - :ensure t - - :config - (progn - - (add-hook 'prog-mode-hook 'flycheck-mode) - - (setq-default flycheck-disabled-checkers '(emacs-lisp-checkdoc)) - (setq flycheck-highlighting-mode 'lines) - (setq flycheck-check-syntax-automatically '(mode-enabled save)))) - -(use-package flyspell - ;; check the spelling - :ensure t - - :init - (use-package ispell - :ensure t - :config - (setq ispell-program-name "aspell" - ispell-list-command "--list")) - (use-package flyspell-popup - :ensure t - :bind ("C-:" . flyspell-popup-correct)) - :config - (add-hook 'text-mode-hook 'flyspell-mode)) - -(use-package go-mode - ;; support for go - :mode (("\\.go\\'" . go-mode)) - - :ensure t - - :config - (progn - (when (memq window-system '(mac ns x)) - (dolist (var '("GOPATH")) - (unless (getenv var) - (exec-path-from-shell-copy-env var)))) - - (use-package go-eldoc - :ensure t - :config - (add-hook 'go-mode-hook 'go-eldoc-setup)) - - (use-package gotest - :ensure t) - - (use-package go-guru - :ensure t) - - (defun fc/my-go-hook () - (set (make-local-variable 'compile-command) - "go build -v && go test -v && go vet") - (setq-local tab-width 4)) - - (add-hook 'before-save-hook 'gofmt-before-save) - (add-hook 'go-mode-hook 'fc/my-go-hook))) - -(use-package google-c-style - :ensure t) - -(use-package ibuffer - ;; configuration for ibuffer - :ensure t - :defer t - :bind ("C-x C-b" . ibuffer) - :init - (setq-default ibuffer-eliding-string "…") - (setq ibuffer-show-empty-filter-groups nil - ibuffer-formats '((mark modified read-only " " - (name 30 30 :left :elide) - " " - (size 9 -1 :right) - " " - (mode 16 16 :left :elide) - " " filename-and-process) - (mark " " - (name 16 -1) - " " filename)) - ibuffer-saved-filter-groups - (quote (("default" - ("dired" (mode . dired-mode)) - ("elisp" (mode . emacs-lisp-mode)) - ("emacs" (or (name . "^\\*.*\\*$") (mode . fundamental-mode))) - ("go" (mode . go-mode)) - ("java" (mode . java-mode)) - ("json" (mode . json-mode)) - ("lisp" (mode . lisp-mode)) - ("magit" (mode . magit-mode)) - ("puppet" (mode . puppet-mode)) - ("python" (mode . python-mode)) - ("repl" (name . "repl")) - ("ruby" (mode . ruby-mode)) - ("rust" (mode . rust-mode)) - ("sh" (mode . sh-mode)) - ("text" (mode . text-mode)))))) - - (add-hook 'ibuffer-mode-hook ;; organise by filter-groups - '(lambda () - (ibuffer-auto-mode 1) - (setq mode-name "≣") - (ibuffer-switch-to-saved-filter-groups "default")))) - -(use-package ivy - ;; completion system - :diminish (ivy-mode . "") - - :bind ("C-c m" . ivy-switch-project) - - :config - (ivy-mode 1) - (setq ivy-use-virtual-buffers t - ivy-height 10 - ivy-count-format "(%d/%d) " - ivy-initial-inputs-alist nil - ivy-use-ignore-default 'always - ivy-ignore-buffers '("company-statistics-cache.el" "company-statistics-autoload.el") - ivy-re-builders-alist '((swiper . ivy--regex-ignore-order) - (t . ivy--regex-fuzzy) - (t . ivy--regex-ignore-order))) - - (defun ivy-switch-project () - (interactive) - (ivy-read - "Switch to project: " - (if (projectile-project-p) - (cons (abbreviate-file-name (projectile-project-root)) - (projectile-relevant-known-projects)) - projectile-known-projects) - :action #'projectile-switch-project-by-name)) - - (ivy-set-actions - 'ivy-switch-project - '(("d" dired "Open Dired in project's directory") - ("v" counsel-projectile "Open project root in vc-dir or magit") - ("c" projectile-compile-project "Compile project") - ("r" projectile-remove-known-project "Remove project(s)")))) - -(use-package json-mode - ;; mode to support json files - :ensure t - - :mode "\\.json\\'" - - :config - (setq json-reformat:indent-width 2)) - -(use-package magit - ;; interface to git - :ensure t - - :mode (("differential-update-comments" . git-commit-mode) - ("new-commit" . git-commit-mode)) - - :bind (("C-x g s" . magit-status) - ("C-x g b" . magit-checkout)) - - :init - (progn - (setq magit-completing-read-function 'ivy-completing-read)) - - :config - (progn - (global-git-commit-mode) - (use-package git-commit :ensure t :defer t) - (add-hook 'magit-mode-hook - (lambda() - (setq mode-name "⎇"))) - (add-hook 'magit-log-edit-mode-hook - #'(lambda () - (set-fill-column 72) - (flyspell-mode))))) - -(use-package make-mode - ;; mode to support Makefile - :config - (add-hook 'makefile-mode-hook (lambda () - (setq-local tab-width 2)))) - -(use-package markdown-mode - ;; mode to support files in the Markdown format - :ensure t - - :commands (markdown-mode gfm-mode) - - :mode (("\\.md\\'" . gfm-mode) - ("\\.markdown\\'" . gfm-mode)) - - :init (setq markdown-command "pandoc -f markdown_github -c https://goo.gl/OVmlwT --self-contained") - - :config - (add-hook 'gfm-mode-hook 'visual-line-mode)) - -(use-package midnight - ;; clean old buffers at midnight - :ensure t - :config - (midnight-mode t)) - -(use-package org - :defer t - :init - (progn - (setq org-startup-indented t) - (org-babel-do-load-languages 'org-babel-load-languages - '( - (sh . t)))) - :config - (add-hook 'org-mode-hook #'(lambda () - (visual-line-mode) - (org-indent-mode)))) - -(use-package projectile - ;; library to interact with projects - :ensure t - - :diminish "" - - :bind-keymap ("C-c p" . projectile-command-map) - - :init - (add-hook 'after-init-hook #'projectile-mode) - - :config - (use-package counsel-projectile :ensure t) - (setq projectile-switch-project-action 'projectile-dired - projectile-enable-caching t - projectile-completion-system 'ivy - projectile-known-projects-file (expand-file-name "var/projectile-bookmarks.eld" user-emacs-directory) - projectile-cache-file (expand-file-name "var/projectile.cache" user-emacs-directory)) - (add-to-list 'projectile-globally-ignored-files ".DS_Store")) - -(use-package protobuf-mode - :ensure t - :mode ("\\.proto$" . protobuf-mode)) - -(use-package python - ;; configuration for Python - :mode(("\\.aurora$" . python-mode) - ("BUILD$" . python-mode) - ("\\.py$" . python-mode)) - - :interpreter ("python" . python-mode) - - :init - (setq-default indent-tabs-mode nil) - - :config - (setq python-indent-offset 2) - (add-hook 'python-mode-hook 'eldoc-mode t)) - -(use-package recentf - ;; configuration for recentf, to interact with recent files - :config - (setq recentf-save-file (expand-file-name "var/recentf" user-emacs-directory))) - -(use-package rust-mode - :ensure t - :config - (use-package cargo - :hook (rust-mode . cargo-minor-mode) - :config - (setq compilation-ask-about-save nil) - ;; Automatically re-run compilation command on manual save inside a project. - ;; Will do nothing if a compilation hasn't been manually triggered - ;; in the past. - :diminish cargo-minor-mode)) - -(use-package sh-script - ;; configuration to interact with shell scripts - :mode ("bashrc" . sh-mode) - - :config - (defun set-sh-mode-indent () - (setq sh-basic-offset 2 - sh-indentation 2)) - (add-hook 'sh-mode-hook 'set-sh-mode-indent) - (add-hook 'after-save-hook 'executable-make-buffer-file-executable-if-script-p)) - -(use-package swiper - ;; install swiper - :ensure t) - -(use-package toml-mode - :ensure t) - -(use-package tramp - ;; configuration for tramp - :config - (setq tramp-default-method "ssh" - tramp-persistency-file-name (expand-file-name "var/tramp" user-emacs-directory))) - -(use-package whitespace - ;; highlight white spaces - :config - (setq whitespace-style '(face trailing)) - (add-hook 'prog-mode-hook 'whitespace-mode)) - -(use-package yaml-mode - ;; mode to work wity YAML files - :ensure t - - :init (add-hook 'yaml-mode-hook 'flycheck-mode) - - :mode ("\\.ya?ml\\'" . yaml-mode)) diff --git a/emacs.d/lib/settings.el b/emacs.d/lib/settings.el deleted file mode 100644 index d0a6181..0000000 --- a/emacs.d/lib/settings.el +++ /dev/null @@ -1,101 +0,0 @@ -;; I don't want a startup screen -(setq inhibit-startup-screen t) - -;; disable tool bar and the scroll bar -(dolist (mode '(tool-bar-mode scroll-bar-mode)) - (when (fboundp mode) (funcall mode -1))) - -;; auto close bracket, parenthesis insertion -(electric-pair-mode 1) - -;; show trailing white space for prog modes -;; FIXME this should probably be moved somewhere else. I need -;; to revisit the various prog-mode-hook. -(add-hook 'prog-mode-hook - (lambda () (setq show-trailing-whitespace t))) - -;; I don't care about any frontend other than magit -(setf vc-handled-backends nil - vc-follow-symlinks t) - -;; alias yes-or-no to y-or-n -(fset 'yes-or-no-p 'y-or-n-p) - -;; set utf-8 as the default encoding -(prefer-coding-system 'utf-8-unix) -(set-terminal-coding-system 'utf-8) -(set-keyboard-coding-system 'utf-8) - -;; reload the buffer when a file changes -(global-auto-revert-mode 1) - -;; show column number in the mode line -(setq column-number-mode t) - -;; when saving the file, ensure a newline exists at the end of the file -(setq require-final-newline t) - -;; no initial message in the scratch buffer -(setq initial-scratch-message nil) - -;; scroll 5 lines at a time -(setq next-screen-context-lines 5) - -;; when using TAB, always indent -(setq tab-always-indent 'complete) - -;; don't auto save files -(setq auto-save-default nil) - -;; I really don't want backup files -(setq auto-save-list-file-prefix nil - make-backup-files nil) - -;; How long to display an echo-area message when the minibuffer is active. -(setq minibuffer-message-timeout 0.5) - -;; don't use a lock file -(setq-default create-lockfiles nil) - -;; show parenthesis -(show-paren-mode +1) - -;; no blinking cursor -(blink-cursor-mode -1) - -;; I don't want a frindge on the right -(fringe-mode '(6 . 0)) - -;; frame title -(setq frame-title-format '( "%f" " [" (:eval mode-name) "]")) - -;; where to save custom settings -(setq custom-file (expand-file-name "var/emacs-custom.el" user-emacs-directory)) - -;; where to save the bookmarks -(setq bookmark-default-file (expand-file-name "var/bookmarks" user-emacs-directory) - bookmark-save-flag 1) - -;; time display -(setq display-time-24hr-format t) -(setq display-time-default-load-average nil) -(setq display-time-format "") - -;; cursor is a horizontal bar -(setq-default cursor-type 'hbar) - -;; highlight current line -(global-hl-line-mode 1) - -;; Set default font. -(set-face-attribute 'default nil :height 130 :weight 'normal :width 'normal) - -;; no bell -(setq visible-bell nil) -(setq ring-bell-function 'ignore) - -;; don't use native full screen on OS-X -(when (eq system-type 'darwin) - (setq ns-use-native-fullscreen nil)) - -(provide 'settings) diff --git a/emacs.d/lib/twitter.el b/emacs.d/lib/twitter.el deleted file mode 100644 index 3a7e245..0000000 --- a/emacs.d/lib/twitter.el +++ /dev/null @@ -1,75 +0,0 @@ -;; packages that are needed only for twitter - -(use-package pants - ;; interface to pants - :load-path (lambda () (expand-file-name "~/workspace/github.com/fcuny/pants.el/")) - - :config - (setq pants-completion-system 'ivy - pants-source-tree-root "/Users/fcuny/workspace/git.twitter.biz/source" - pants-bury-compilation-buffer t - pants-extra-args "-q") - - :bind (("C-c b" . pants-find-build-file) - ("C-c r" . pants-run-binary) - ("C-c t" . pants-run-test))) - -(use-package puppet-mode - ;; mode to support puppet and work with puppet - :ensure t - - :mode ("\\.pp\\'" . puppet-mode) - - :init (add-hook 'puppet-mode-hook 'flycheck-mode) - - :config - (when (memq window-system '(mac ns x)) - (dolist (var '("GEM_HOME" "GEM_PATH" "MY_RUBY_HOME")) - (unless (getenv var) - (exec-path-from-shell-copy-env var)))) - (setq flycheck-puppet-lint-rc "/Users/fcuny/workspace/svn.twitter.biz/twitter-ops/utilities/puppet/.puppet-lint.rc")) - -(use-package scala-mode - ;; mode to work with scala files - :ensure t) - -(use-package thrift - ;; mode to work with thrift files - :ensure t - - :mode ("\\.thrift\\'" . thrift-mode) - - :config - (setq thrift-indent-level 2)) - -;; custom functions - -(defun fc/check-source-p () - ;; predicate for checking style only on python files - (and (executable-find "check.pex") - (buffer-file-name) - (string-match "src/source/.*\.py$" (buffer-file-name)))) - -;;; errors are reported like this: -;;; E241:ERROR <file name>:<line> <message> -(flycheck-define-checker source-check - "A syntax checker for python source code in Source, using `check.pex'" - :command ("check.pex" source) - :error-patterns ((error line-start (id (1+ nonl)) ":ERROR" (1+ nonl) ":" line (message) line-end) - (warning line-start (id (1+ nonl)) ":WARNING" (1+ nonl) ":" line (message) line-end)) - :predicate fc/check-source-p - :modes (python-mode)) - -(add-to-list 'flycheck-checkers 'source-check) - -(defun fc/start-nest-tmp-file (file-name) - "Create a file in ~/tmp on nest for the give file name." - (interactive "sName of the temporary file: ") - (fc/start--file (expand-file-name (format "/nest.smfc.twitter.com:~/tmp/%s" file-name)))) - -(defun fc/remote-nest-dired () - "Open dired on nest." - (interactive) - (fc/remote--dired "nest.smfc.twitter.com")) - -(provide 'twitter) diff --git a/emacs.d/lib/wabi-sabi-theme.el b/emacs.d/lib/wabi-sabi-theme.el deleted file mode 100644 index 986e266..0000000 --- a/emacs.d/lib/wabi-sabi-theme.el +++ /dev/null @@ -1,63 +0,0 @@ -;;; wabi-sabi-theme.el --- Black and light yellow theme without syntax highlighting - -;;; Code: - -(deftheme wabi-sabi - "Wabi Sabi.") - -(defvar wabi-sabi-faces - `(default - font-lock-builtin-face - font-lock-constant-face - font-lock-function-name-face - font-lock-keyword-face - font-lock-negation-char-face - font-lock-preprocessor-face - font-lock-regexp-grouping-backslash - font-lock-regexp-grouping-construct - font-lock-string-face - font-lock-type-face - font-lock-variable-name-face - font-lock-warning-face - fringe - sh-quoted-exec)) - -(let ((bg "#FFFFE5") - (bg-alt "#fffde7") - (fg "#000000") - (fg-alt "#000000") - (highlight "#c4c6c2") - (highlight-alt "#cccab5") - (modeline-fg "#ffffff") - (modeline-bg "#2D271F") - (modeline-bg-alt "#605C49") - (region "#eeed9d")) - - (apply 'custom-theme-set-faces 'wabi-sabi - `(default ((t (:foreground ,fg :background ,bg)))) - `(cursor ((t (:background ,fg :foreground "white smoke")))) - `(highlight ((t nil))) - - `(mode-line ((t (:foreground ,modeline-fg :background ,modeline-bg)))) - `(mode-line-inactive ((t (:foreground ,modeline-fg :background ,modeline-bg-alt)))) - - `(show-paren-match ((t (:background ,highlight-alt)))) - `(whitespace-indentation ((t (:background ,bg-alt :foreground ,fg-alt)))) - - `(font-lock-comment-face ((t (:foreground ,fg :weight bold)))) - `(font-lock-comment-delimiter-face ((t (:foreground ,fg :weight bold)))) - `(font-lock-doc-face ((t (:foreground ,fg :weight bold)))) - `(font-lock-doc-string-face ((t (:foreground ,fg :weight bold)))) - - `(region ((t (:background ,region :foreground ,fg)))) - - (mapcar (lambda (n) `(,n ((t (:background ,bg :foreground ,fg))))) wabi-sabi-faces))) - -;;;###autoload -(when load-file-name - (add-to-list 'custom-theme-load-path - (file-name-as-directory (file-name-directory load-file-name)))) - -(provide-theme 'wabi-sabi) - -;;; wabi-sabi-theme.el ends here diff --git a/emacs.d/modules/module-appareance.el b/emacs.d/modules/module-appareance.el new file mode 100644 index 0000000..53a34fd --- /dev/null +++ b/emacs.d/modules/module-appareance.el @@ -0,0 +1,46 @@ +;; I don't want a startup screen +(setq inhibit-startup-screen t) + +;; fullscreen +(global-set-key (kbd "<s-return>") 'toggle-frame-fullscreen) + +;; disable tool bar and the scroll bar +(dolist (mode '(tool-bar-mode scroll-bar-mode)) + (when (fboundp mode) (funcall mode -1))) + +;; Set default font. +(set-face-attribute 'default nil :height 130 :weight 'normal :width 'normal) + +;; no bell +(setq visible-bell nil) +(setq ring-bell-function 'ignore) + +;; don't use native full screen on OS-X +(when (eq system-type 'darwin) + (setq ns-use-native-fullscreen nil)) + +;; highlight current line +(global-hl-line-mode 1) + +;; cursor is a horizontal bar +(setq-default cursor-type 'hbar) + +;; no blinking cursor +(blink-cursor-mode -1) + +;; I don't want a frindge on the right +(fringe-mode '(6 . 0)) + +;; frame title +(setq frame-title-format '( "%f" " [" (:eval mode-name) "]")) + +;; show parenthesis +(show-paren-mode +1) + +;; show column number in the mode line +(setq column-number-mode t) + +;; unclutter the modeline +(use-package diminish) + +(provide 'module-appareance) diff --git a/emacs.d/modules/module-autocomplete.el b/emacs.d/modules/module-autocomplete.el new file mode 100644 index 0000000..c0ae31b --- /dev/null +++ b/emacs.d/modules/module-autocomplete.el @@ -0,0 +1,16 @@ +(require 'config-package) + +(use-package company + :ensure t + :commands company-mode + :diminish company-mode + :config + (global-company-mode) + (setq company-global-modes '(not term-mode)) + (setq company-idle-delay 0.3 + company-selection-wrap-around t + company-show-numbers t + company-tooltip-align-annotations t + company-require-match nil)) + +(provide 'module-autocomplete) diff --git a/emacs.d/modules/module-c.el b/emacs.d/modules/module-c.el new file mode 100644 index 0000000..f21cc30 --- /dev/null +++ b/emacs.d/modules/module-c.el @@ -0,0 +1,7 @@ +(require 'config-package) + +(use-package google-c-style + :commands + (google-set-c-style)) + +(provide 'module-c) diff --git a/emacs.d/modules/module-codestyle.el b/emacs.d/modules/module-codestyle.el new file mode 100644 index 0000000..5a18b34 --- /dev/null +++ b/emacs.d/modules/module-codestyle.el @@ -0,0 +1,20 @@ +(require 'config-package) + +(setq show-paren-delay 0) + +;; turn off tab indentation +(setq-default indent-tabs-mode nil) + +;; when saving the file, ensure a newline exists at the end of the file +(setq require-final-newline t) + +(use-package whitespace + ;; highlight white spaces + :config + (setq whitespace-style '(face trailing)) + (add-hook 'prog-mode-hook 'whitespace-mode)) + +(add-hook 'prog-mode-hook + (lambda () (setq show-trailing-whitespace t))) + +(provide 'module-codestyle) diff --git a/emacs.d/modules/module-dired.el b/emacs.d/modules/module-dired.el new file mode 100644 index 0000000..6879da9 --- /dev/null +++ b/emacs.d/modules/module-dired.el @@ -0,0 +1,17 @@ +(require 'config-package) + +;; Keep dired buffers updated when the file system changes. +(setq global-auto-revert-non-file-buffers t) +(setq auto-revert-verbose nil) + +;; (setq dired-omit-files +;; (concat dired-omit-files "\\|^.DS_Store$\\|^.projectile$\\|^.git$\\|^.svn"))) + +(let ((gls "/opt/twitter/bin/gls")) + (if (file-exists-p gls) + (setq insert-directory-program gls + dired-listing-switches "-aBhl --group-directories-first"))) + +(global-set-key (kbd "C-x C-d") 'dired) + +(provide 'module-dired) diff --git a/emacs.d/modules/module-docker.el b/emacs.d/modules/module-docker.el new file mode 100644 index 0000000..4583b0b --- /dev/null +++ b/emacs.d/modules/module-docker.el @@ -0,0 +1,13 @@ +(require 'config-package) + +(use-package dockerfile-mode + :bind ("C-z" . hybrdo-docker/body)) + +(defhydra hydra-docker (:hint nil :exit t) +" +^Command^ +_b_: build" + ("b" dockerfile-build-buffer) + ("q" nil "quit" :color blue)) + +(provide 'module-docker) diff --git a/emacs.d/modules/module-editing.el b/emacs.d/modules/module-editing.el new file mode 100644 index 0000000..a49e856 --- /dev/null +++ b/emacs.d/modules/module-editing.el @@ -0,0 +1,15 @@ +(require 'config-package) + +;; auto close bracket, parenthesis insertion +(electric-pair-mode 1) + +;; Remap join-line to M-j where it's easier to get to. +(global-set-key (kbd "M-j") 'join-line) + +;; configuration for tramp +(use-package tramp + :config + (setq tramp-default-method "ssh" + tramp-persistency-file-name (expand-file-name "var/tramp" user-emacs-directory))) + +(provide 'module-editing) diff --git a/emacs.d/modules/module-flycheck.el b/emacs.d/modules/module-flycheck.el new file mode 100644 index 0000000..3e2116c --- /dev/null +++ b/emacs.d/modules/module-flycheck.el @@ -0,0 +1,11 @@ +(require 'config-package) + +(use-package flycheck + :config + (progn + (add-hook 'prog-mode-hook 'flycheck-mode) + (setq-default flycheck-disabled-checkers '(emacs-lisp-checkdoc)) + (setq flycheck-highlighting-mode 'lines) + (setq flycheck-check-syntax-automatically '(mode-enabled save)))) + +(provide 'module-flycheck) diff --git a/emacs.d/modules/module-flyspell.el b/emacs.d/modules/module-flyspell.el new file mode 100644 index 0000000..ade45ee --- /dev/null +++ b/emacs.d/modules/module-flyspell.el @@ -0,0 +1,17 @@ +(require 'config-package) + +;; check the spelling +(use-package flyspell + :init + (use-package ispell + :ensure t + :config + (setq ispell-program-name "aspell" + ispell-list-command "--list")) + (use-package flyspell-popup + :ensure t + :bind ("C-:" . flyspell-popup-correct)) + :config + (add-hook 'text-mode-hook 'flyspell-mode)) + +(provide 'module-flyspell) diff --git a/emacs.d/modules/module-general.el b/emacs.d/modules/module-general.el new file mode 100644 index 0000000..6feec76 --- /dev/null +++ b/emacs.d/modules/module-general.el @@ -0,0 +1,59 @@ +;; set utf-8 as the default encoding +(prefer-coding-system 'utf-8-unix) +(set-terminal-coding-system 'utf-8) +(set-keyboard-coding-system 'utf-8) + +;; alias yes-or-no to y-or-n +(fset 'yes-or-no-p 'y-or-n-p) + +;; where to save the bookmarks +(setq bookmark-default-file (expand-file-name "var/bookmarks" user-emacs-directory) + bookmark-save-flag 1) + +;; reload the buffer when a file changes +(global-auto-revert-mode 1) + +;; clean old buffers at midnight +(use-package midnight + :config + (midnight-mode t)) + +;; scroll 5 lines at a time +(setq next-screen-context-lines 5) + +;; when using TAB, always indent +(setq tab-always-indent 'complete) + +;; don't auto save files +(setq auto-save-default nil) + +;; I really don't want backup files +(setq auto-save-list-file-prefix nil + make-backup-files nil) + +;; How long to display an echo-area message when the minibuffer is active. +(setq minibuffer-message-timeout 0.5) + +;; don't use a lock file +(setq-default create-lockfiles nil) + +;; where to save custom settings +(setq custom-file (expand-file-name "var/emacs-custom.el" user-emacs-directory)) + + +;; automatically revert the buffer if the content changed on disk +(use-package autorevert :diminish auto-revert-mode) + + +;; configuration for recentf, to interact with recent files +(use-package recentf + :config + (setq recentf-save-file (expand-file-name "var/recentf" user-emacs-directory))) + +(use-package server + :config + (unless (server-running-p) (server-start))) + + + +(provide 'module-general) diff --git a/emacs.d/modules/module-git.el b/emacs.d/modules/module-git.el new file mode 100644 index 0000000..f974bfe --- /dev/null +++ b/emacs.d/modules/module-git.el @@ -0,0 +1,30 @@ +(require 'config-package) + +(use-package magit + :mode (("differential-update-comments" . git-commit-mode) + ("new-commit" . git-commit-mode)) + + :bind (("C-x g s" . magit-status) + ("C-x g b" . magit-checkout)) + + :init + (progn + (setq magit-completing-read-function 'ivy-completing-read)) + + :config + (progn + (global-git-commit-mode) + (use-package git-commit :ensure t :defer t) + (add-hook 'magit-mode-hook + (lambda() + (setq mode-name "⎇"))) + (add-hook 'magit-log-edit-mode-hook + #'(lambda () + (set-fill-column 72) + (flyspell-mode))))) + +;; I don't care about any frontend other than magit +(setf vc-handled-backends nil + vc-follow-symlinks t) + +(provide 'module-git) diff --git a/emacs.d/modules/module-go.el b/emacs.d/modules/module-go.el new file mode 100644 index 0000000..19f40db --- /dev/null +++ b/emacs.d/modules/module-go.el @@ -0,0 +1,50 @@ +(require 'config-package) + +(use-package go-mode + :mode (("\\.go\\'" . go-mode)) + :bind ("C-z" . hydra-go/body)) + +(use-package go-eldoc + :config + (add-hook 'go-mode-hook 'go-eldoc-setup)) + +(use-package gotest) + +(use-package go-guru) + +(use-package go-imports) + +(use-package golint) + +(use-package go-projectile) + +(use-package company-go + :config + (add-hook 'go-mode-hook (lambda() (add-to-list 'company-backends 'company-go)))) + +(defun fc/my-go-hook () + (set (make-local-variable 'compile-command) + "go build -v && go test -v && go vet") + (setq-local tab-width 2)) + +(add-hook 'before-save-hook 'gofmt-before-save) +(add-hook 'go-mode-hook 'fc/my-go-hook) +(add-hook 'go-mode-hook 'company-mode) + +(defhydra hydra-go (:hint nil :exit t) +" +^Command^ ^Imports^ ^Doc^ +^-------^------^-------^-------^---^ +_r_: run _ig_: goto _d_: doc at point +_g_: guru _ia_: add +^ ^ _ir_: remove +" + ("g" 'hydra-go-guru/body :color blue) + ("r" go-run-main) + ("d" godoc-at-point) + ("ig" go-goto-imports ) + ("ia" go-import-add) + ("ir" go-remove-unused-imports) + ("q" nil "quit" :color blue)) + +(provide 'module-go) diff --git a/emacs.d/modules/module-hydra.el b/emacs.d/modules/module-hydra.el new file mode 100644 index 0000000..0b569c2 --- /dev/null +++ b/emacs.d/modules/module-hydra.el @@ -0,0 +1,5 @@ +(require 'config-package) + +(use-package hydra) + +(provide 'module-hydra) diff --git a/emacs.d/modules/module-ibuffer.el b/emacs.d/modules/module-ibuffer.el new file mode 100644 index 0000000..f914069 --- /dev/null +++ b/emacs.d/modules/module-ibuffer.el @@ -0,0 +1,42 @@ +(require 'config-package) + +(use-package ibuffer + :bind ("C-x C-b" . ibuffer) + :init + (setq-default ibuffer-eliding-string "…") + (setq ibuffer-show-empty-filter-groups nil + ibuffer-formats '((mark modified read-only " " + (name 30 30 :left :elide) + " " + (size 9 -1 :right) + " " + (mode 16 16 :left :elide) + " " filename-and-process) + (mark " " + (name 16 -1) + " " filename)) + ibuffer-saved-filter-groups + (quote (("default" + ("dired" (mode . dired-mode)) + ("elisp" (mode . emacs-lisp-mode)) + ("emacs" (or (name . "^\\*.*\\*$") (mode . fundamental-mode))) + ("go" (mode . go-mode)) + ("java" (mode . java-mode)) + ("json" (mode . json-mode)) + ("lisp" (mode . lisp-mode)) + ("magit" (mode . magit-mode)) + ("puppet" (mode . puppet-mode)) + ("python" (mode . python-mode)) + ("repl" (name . "repl")) + ("ruby" (mode . ruby-mode)) + ("rust" (mode . rust-mode)) + ("sh" (mode . sh-mode)) + ("text" (mode . text-mode)))))) + + (add-hook 'ibuffer-mode-hook ;; organise by filter-groups + '(lambda () + (ibuffer-auto-mode 1) + (setq mode-name "≣") + (ibuffer-switch-to-saved-filter-groups "default")))) + +(provide 'module-ibuffer) diff --git a/emacs.d/modules/module-ivy.el b/emacs.d/modules/module-ivy.el new file mode 100644 index 0000000..438563d --- /dev/null +++ b/emacs.d/modules/module-ivy.el @@ -0,0 +1,54 @@ +(require 'config-package) + +(use-package swiper) + +(use-package counsel + :bind* + (("M-x" . counsel-M-x) + ("C-s" . counsel-grep-or-swiper) + ("C-x C-f" . counsel-find-file) + ("C-x C-r" . counsel-recentf) + ("C-c f" . counsel-git) + ("C-c s" . counsel-git-grep) + ("C-c /" . counsel-ag)) + + :config + (setq counsel-find-file-at-point t)) + +(use-package ivy + :diminish (ivy-mode . "") + + :bind ("C-c m" . ivy-switch-project) + + :config + (ivy-mode 1) + (setq ivy-use-virtual-buffers t + ivy-height 10 + ivy-count-format "(%d/%d) " + ivy-initial-inputs-alist nil + ivy-use-ignore-default 'always + ivy-ignore-buffers '("company-statistics-cache.el" "company-statistics-autoload.el") + ivy-re-builders-alist '((swiper . ivy--regex-ignore-order) + (t . ivy--regex-fuzzy) + (t . ivy--regex-ignore-order))) + + (defun ivy-switch-project () + (interactive) + (ivy-read + "Switch to project: " + (if (projectile-project-p) + (cons (abbreviate-file-name (projectile-project-root)) + (projectile-relevant-known-projects)) + projectile-known-projects) + :action #'projectile-switch-project-by-name)) + + (ivy-set-actions + 'ivy-switch-project + '(("d" dired "Open Dired in project's directory") + ("v" counsel-projectile "Open project root in vc-dir or magit") + ("c" projectile-compile-project "Compile project") + ("r" projectile-remove-known-project "Remove project(s)")))) + +(use-package counsel-projectile) + +(provide 'module-ivy) diff --git a/emacs.d/modules/module-java.el b/emacs.d/modules/module-java.el new file mode 100644 index 0000000..33351fb --- /dev/null +++ b/emacs.d/modules/module-java.el @@ -0,0 +1,69 @@ +(require 'config-package) + +(use-package autodisass-java-bytecode) + +(use-package meghanada + :defer t + + :commands meghanada-mode + + :init + (add-hook 'java-mode-hook + (lambda() + (google-set-c-style) + (google-make-newline-indent) + (meghanada-mode t) + (smartparens-mode t) + (rainbow-delimiters-mode t) + (highlight-symbol-mode t))) + + :config + (setq meghanada-server-remote-debug t + meghanada-use-company t + meghanada-use-flycheck t + meghanada-auto-start t + meghanada-server-install-dir (expand-file-name "var/meghanada" user-emacs-directory)) + (meghanada-install-server) + + :bind + (:map meghanada-mode-map + ("C-S-t" . meghanada-switch-testcase) + ("M-r" . meghanada-reference) + ("M-t" . meghanada-typeinfo) + ("C-z" . hydra-meghanada/body))) + +(defhydra hydra-meghanada (:hint nil :exit t) +" +^Edit^ ^Tast or Task^ +^----^---------------------------^------------^ +_f_: meghanada-compile-file _m_: meghanada-restart +_c_: meghanada-compile-project _t_: meghanada-run-task +_o_: meghanada-optimize-import _j_: meghanada-run-junit-test-case +_s_: meghanada-switch-test-case _J_: meghanada-run-junit-class +_v_: meghanada-local-variable _R_: meghanada-run-junit-recent +_i_: meghanada-import-all _r_: meghanada-reference +_g_: magit-status _T_: meghanada-typeinfo +_q_: exit +" + ("f" meghanada-compile-file) + ("m" meghanada-restart) + + ("c" meghanada-compile-project) + ("o" meghanada-optimize-import) + ("s" meghanada-switch-testcase) + ("v" meghanada-local-variable) + ("i" meghanada-import-all) + + ("g" magit-status) + + ("t" meghanada-run-task) + ("T" meghanada-typeinfo) + ("j" meghanada-run-junit-test-case) + ("J" meghanada-run-junit-class) + ("R" meghanada-run-junit-recent) + ("r" meghanada-reference) + + ("q" exit) + ("z" nil "leave")) + +(provide 'module-java) diff --git a/emacs.d/modules/module-json.el b/emacs.d/modules/module-json.el new file mode 100644 index 0000000..40f46e5 --- /dev/null +++ b/emacs.d/modules/module-json.el @@ -0,0 +1,17 @@ +(require 'config-package) + +(use-package json-mode + :mode "\\.json\\'" + :config + (setq json-reformat:indent-width 2) + :bind ("C-z" . hydra-json/body)) + +(defhydra hydra-json (:hint nil :exit t) +" +^Command^ +_f_: format +" + ("f" json-reformat-region) + ("q" nil "quit" :color blue)) + +(provide 'module-json) diff --git a/emacs.d/modules/module-lisp.el b/emacs.d/modules/module-lisp.el new file mode 100644 index 0000000..11f6823 --- /dev/null +++ b/emacs.d/modules/module-lisp.el @@ -0,0 +1,14 @@ +(require 'config-package) + +(require 'eldoc) + +(add-hook 'emacs-lisp-mode-hook (lambda() + (setq mode-name "λ"))) + +(add-hook 'emacs-lisp-mode-hook 'eldoc-mode) +(add-hook 'lisp-interaction-mode-hook 'eldoc-mode) + +(define-key emacs-lisp-mode-map (kbd "C-c C-e") 'eval-buffer) +(define-key emacs-lisp-mode-map (kbd "C-c C-r") 'eval-region) + +(provide 'module-lisp) diff --git a/emacs.d/modules/module-make.el b/emacs.d/modules/module-make.el new file mode 100644 index 0000000..5735670 --- /dev/null +++ b/emacs.d/modules/module-make.el @@ -0,0 +1,8 @@ +(require 'config-package) + +(use-package make-mode + :config + (add-hook 'makefile-mode-hook (lambda () + (setq-local tab-width 2)))) + +(provide 'module-make) diff --git a/emacs.d/modules/module-markdown.el b/emacs.d/modules/module-markdown.el new file mode 100644 index 0000000..7d993b4 --- /dev/null +++ b/emacs.d/modules/module-markdown.el @@ -0,0 +1,17 @@ +(require 'config-package) + +(use-package markdown-mode + ;; mode to support files in the Markdown format + :ensure t + + :commands (markdown-mode gfm-mode) + + :mode (("\\.md\\'" . gfm-mode) + ("\\.markdown\\'" . gfm-mode)) + + :init (setq markdown-command "pandoc -f markdown_github -c https://goo.gl/OVmlwT --self-contained") + + :config + (add-hook 'gfm-mode-hook 'visual-line-mode)) + +(provide 'module-markdown) diff --git a/emacs.d/modules/module-pants.el b/emacs.d/modules/module-pants.el new file mode 100644 index 0000000..5a7abbb --- /dev/null +++ b/emacs.d/modules/module-pants.el @@ -0,0 +1,27 @@ +(require 'config-package) + +(use-package pants + :load-path (lambda () (expand-file-name "github.com/fcuny/pants.el/" fcuny/workspace)) + + :config + (setq pants-completion-system 'ivy + pants-source-tree-root (expand-file-name "git.twitter.biz/source" fcuny/workspace) + pants-bury-compilation-buffer t + pants-extra-args "-q") + + :bind (("C-c b" . pants-find-build-file) + ("C-c r" . pants-run-binary) + ("C-c t" . pants-run-test))) + +(defhydra hydra-pants (:hint nil :exit t) +" +^Command^ +_g_: go to build +_b_: build a binary +_t_: run the tests +" + ("g" pants-find-build-file) + ("b" pants-run-binary) + ("t" pants-run-test)) + +(provide 'module-pants) diff --git a/emacs.d/modules/module-project.el b/emacs.d/modules/module-project.el new file mode 100644 index 0000000..893f135 --- /dev/null +++ b/emacs.d/modules/module-project.el @@ -0,0 +1,30 @@ +(require 'config-package) + +(use-package projectile + :diminish projectile-mode + :bind-keymap ("C-c p" . projectile-command-map) + + :init + (add-hook 'after-init-hook #'projectile-mode) + + :config + (setq projectile-switch-project-action 'projectile-dired + projectile-enable-caching t + projectile-completion-system 'ivy + projectile-known-projects-file (expand-file-name "var/projectile-bookmarks.eld" user-emacs-directory) + projectile-cache-file (expand-file-name "var/projectile.cache" user-emacs-directory)) + (add-to-list 'projectile-globally-ignored-files ".DS_Store")) + +(use-package ag + :commands (counsel-ag ag) + :bind (:map ag-mode-map + ("p" . compilation-previous-error) + ("n" . compilation-next-error) + ("N" . compilation-next-file) + ("P" . compilation-previous-file)) + :config + (setq ag-highlight-search t + ag-reuse-buffers t + ag-reuse-window t)) + +(provide 'module-project) diff --git a/emacs.d/modules/module-protobuf.el b/emacs.d/modules/module-protobuf.el new file mode 100644 index 0000000..5ef1aee --- /dev/null +++ b/emacs.d/modules/module-protobuf.el @@ -0,0 +1,7 @@ +(require 'config-package) + +(use-package protobuf-mode + :ensure t + :mode ("\\.proto$" . protobuf-mode)) + +(provide 'module-protobuf) diff --git a/emacs.d/modules/module-puppet.el b/emacs.d/modules/module-puppet.el new file mode 100644 index 0000000..150ce19 --- /dev/null +++ b/emacs.d/modules/module-puppet.el @@ -0,0 +1,14 @@ +(require 'config-package) + +;; To setup flycheck in the GCP's repository: +;; ((puppet-mode +;; (flycheck-puppet-lint-rc .(expand-file-name "gcp-pupet-manifests/.puppet-lint.rc") fcuny/path-twitter-git))) + +(use-package puppet-mode + :mode ("\\.pp\\'" . puppet-mode) + + :init (add-hook 'puppet-mode-hook 'flycheck-mode)) + ;; :config + ;; (setq flycheck-puppet-lint-rc "/Users/fcuny/workspace/svn.twitter.biz/twitter-ops/utilities/puppet/.puppet-lint.rc")) + +(provide 'module-puppet) diff --git a/emacs.d/modules/module-python.el b/emacs.d/modules/module-python.el new file mode 100644 index 0000000..f495115 --- /dev/null +++ b/emacs.d/modules/module-python.el @@ -0,0 +1,26 @@ +(require 'config-package) + +(use-package python + :mode(("\\.aurora$" . python-mode) + ("BUILD$" . python-mode) + ("\\.py$" . python-mode)) + + :interpreter ("python" . python-mode) + + :config + (setq python-indent-offset 2) + (add-hook 'python-mode-hook 'eldoc-mode t)) + +;;; errors are reported like this: +;;; E241:ERROR <file name>:<line> <message> +(flycheck-define-checker source-check + "A syntax checker for python source code in Source, using `check.pex'" + :command ("check.pex" source) + :error-patterns ((error line-start (id (1+ nonl)) ":ERROR" (1+ nonl) ":" line (message) line-end) + (warning line-start (id (1+ nonl)) ":WARNING" (1+ nonl) ":" line (message) line-end)) + :predicate fc/check-source-p + :modes (python-mode)) + +(add-to-list 'flycheck-checkers 'source-check) + +(provide 'module-python) diff --git a/emacs.d/modules/module-rust.el b/emacs.d/modules/module-rust.el new file mode 100644 index 0000000..0dc3199 --- /dev/null +++ b/emacs.d/modules/module-rust.el @@ -0,0 +1,14 @@ +(require 'config-package) + +(use-package rust-mode) + +(use-package cargo + :hook (rust-mode . cargo-minor-mode) + :config + (setq compilation-ask-about-save nil) + ;; Automatically re-run compilation command on manual save inside a project. + ;; Will do nothing if a compilation hasn't been manually triggered + ;; in the past. + :diminish cargo-minor-mode) + +(provide 'module-rust) diff --git a/emacs.d/modules/module-scala.el b/emacs.d/modules/module-scala.el new file mode 100644 index 0000000..bb8a3cb --- /dev/null +++ b/emacs.d/modules/module-scala.el @@ -0,0 +1,7 @@ +(require 'config-package) + +(use-package scala-mode + ;; mode to work with scala files + :ensure t) + +(provide 'module-scala) diff --git a/emacs.d/modules/module-shell.el b/emacs.d/modules/module-shell.el new file mode 100644 index 0000000..763d133 --- /dev/null +++ b/emacs.d/modules/module-shell.el @@ -0,0 +1,14 @@ +(require 'config-package) + +(use-package sh-script + ;; configuration to interact with shell scripts + :mode ("bashrc" . sh-mode) + + :config + (defun set-sh-mode-indent () + (setq sh-basic-offset 2 + sh-indentation 2)) + (add-hook 'sh-mode-hook 'set-sh-mode-indent) + (add-hook 'after-save-hook 'executable-make-buffer-file-executable-if-script-p)) + +(provide 'module-shell) diff --git a/emacs.d/modules/module-thrift.el b/emacs.d/modules/module-thrift.el new file mode 100644 index 0000000..03e301a --- /dev/null +++ b/emacs.d/modules/module-thrift.el @@ -0,0 +1,10 @@ +(require 'config-package) + +(use-package thrift + ;; mode to work with thrift files + :mode ("\\.thrift\\'" . thrift-mode) + + :config + (setq thrift-indent-level 2)) + +(provide 'module-thrift) diff --git a/emacs.d/modules/module-toml.el b/emacs.d/modules/module-toml.el new file mode 100644 index 0000000..42c6bf8 --- /dev/null +++ b/emacs.d/modules/module-toml.el @@ -0,0 +1,5 @@ +(require 'config-package) + +(use-package toml-mode :ensure t) + +(provide 'module-toml) diff --git a/emacs.d/modules/module-yaml.el b/emacs.d/modules/module-yaml.el new file mode 100644 index 0000000..5c111ef --- /dev/null +++ b/emacs.d/modules/module-yaml.el @@ -0,0 +1,8 @@ +(require 'config-package) + +(use-package yaml-mode + :ensure t + :init (add-hook 'yaml-mode-hook 'flycheck-mode) + :mode ("\\.ya?ml\\'" . yaml-mode)) + +(provide 'module-yaml) |