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 /emacs.d | |
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.
Diffstat (limited to '')
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) |