diff --git a/etc/emacs.el b/etc/emacs.el new file mode 100644 index 0000000..2c98435 --- /dev/null +++ b/etc/emacs.el @@ -0,0 +1,189 @@ +;; +;; +;; Backups +;; +;; + +;; Put autosave files (ie #foo#) and backup files (ie foo~) in ~/.emacs.d/. +(setq auto-save-file-name-transforms '((".*" "~/.emacs.d/autosaves/\\1" t))) +(setq backup-directory-alist '((".*" . "~/.emacs.d/backups/"))) +;; Create the autosave dir if necessary, since emacs won't. +(make-directory "~/.emacs.d/autosaves/" t) +(make-directory "~/.emacs.d/backups/" t) + +;; +;; +;; Appearance +;; +;; + +;; Disable startup-message (show *scratch* buffer) +(setq inhibit-startup-message t) +;; Set *scratch* buffer mode +(setq initial-major-mode 'text-mode) + +;; Disable all bar +(tool-bar-mode -1) +(menu-bar-mode -1) +(scroll-bar-mode -1) + +;; Show time +(setq display-time-format "%H:%M") +(display-time-mode) + +;; Show column (line, column) +(column-number-mode) + +;; Indent style +(setq c-default-style "linux") + +;; Highlight line +(global-hl-line-mode 1) + +;; y-or-n instead of yes-or-no in kill buffer +(defalias 'yes-or-no-p 'y-or-n-p) + +;; Set default font +;;(set-default-font "-unknown-Ubuntu Mono-normal-normal-normal-*-*-*-*-*-m-0-iso10646-1") +(set-default-font "Ubuntu Mono 10") + +(setq-default indent-tabs-mode t) + +;; Color theme +(require 'zenburn-theme) +(load-theme 'zenburn t) + +;; +;; +;; Russian layout hotkeys hack +;; +;; + +(defun reverse-input-method (input-method) + "Build the reverse mapping of single letters from INPUT-METHOD." + (interactive + (list (read-input-method-name "Use input method (default current): "))) + (if (and input-method (symbolp input-method)) + (setq input-method (symbol-name input-method))) + (let ((current current-input-method) + (modifiers '(nil (control) (meta) (control meta)))) + (when input-method + (activate-input-method input-method)) + (when (and current-input-method quail-keyboard-layout) + (dolist (map (cdr (quail-map))) + (let* ((to (car map)) + (from (quail-get-translation + (cadr map) (char-to-string to) 1))) + (when (and (characterp from) (characterp to)) + (dolist (mod modifiers) + (define-key local-function-key-map + (vector (append mod (list from))) + (vector (append mod (list to))))))))) + (when input-method + (activate-input-method current)))) + +;; Hotkeys on russian layout +(reverse-input-method 'russian-computer) + +;; +;; +;; Key bindings +;; +;; + +(global-set-key (kbd "C-h") 'delete-backward-char) +(global-set-key (kbd "C-w") 'backward-kill-word) +(global-set-key (kbd "C-x f") 'recentf-ido-find-file) +(global-set-key (kbd "C-x C-b") 'ibuffer) +(global-set-key (kbd "M-x") 'smex) +(global-set-key (kbd "C-x C-m") 'smex) +(global-set-key (kbd "C-c C-m") 'smex) +(global-set-key (kbd "C-x C-k") 'kill-region) +(global-set-key (kbd "C-S-u") 'ucs-insert) + +;; +;; +;; Goodies +;; +;; + +(defun recentf-ido-find-file () + "Find a recent file using ido." + (interactive) + (let ((file (ido-completing-read "Choose recent file: " recentf-list nil t))) + (when file + (find-file file)))) + +;; +;; +;; Loads +;; +;; + +(require 'exec-path-from-shell) +(exec-path-from-shell-initialize) + +(recentf-mode 1) +(put 'upcase-region 'disabled nil) + +(setq inferior-lisp-program "sbcl") + +(require 'slime) +(slime-setup '(slime-repl + slime-fuzzy + slime-fancy-inspector + slime-indentation)) + +(require 'git-gutter) +(global-git-gutter-mode t) + +(add-hook 'before-save-hook #'gofmt-before-save) + +(setq exec-path (split-string (getenv "PATH") ":")) + +(defun auto-complete-for-go () + (metafmt-mode 1) + (auto-complete-mode 1)) +(add-hook 'go-mode-hook 'auto-complete-for-go) + +(with-eval-after-load 'go-mode + (require 'go-autocomplete)) + +(add-hook 'vhdl-mode-hook (lambda () (setq vhdl-indent-tabs-mode t))) +(put 'downcase-region 'disabled nil) + +;; Enable helm-gtags-mode +(add-hook 'c-mode-hook 'helm-gtags-mode) +(add-hook 'c++-mode-hook 'helm-gtags-mode) +(add-hook 'asm-mode-hook 'helm-gtags-mode) + +;; Set key bindings +(eval-after-load "helm-gtags" + '(progn + (define-key helm-gtags-mode-map (kbd "M-t") 'helm-gtags-find-tag) + (define-key helm-gtags-mode-map (kbd "M-r") 'helm-gtags-find-rtag) + (define-key helm-gtags-mode-map (kbd "M-s") 'helm-gtags-find-symbol) + (define-key helm-gtags-mode-map (kbd "M-g M-p") 'helm-gtags-parse-file) + (define-key helm-gtags-mode-map (kbd "C-c <") 'helm-gtags-previous-history) + (define-key helm-gtags-mode-map (kbd "C-c >") 'helm-gtags-next-history) + (define-key helm-gtags-mode-map (kbd "M-,") 'helm-gtags-pop-stack))) + +;; zsh is hell for ssh-tramp +(eval-after-load 'tramp '(setenv "SHELL" "/bin/bash")) + +(eval-after-load "w3m" + '(progn + (require 'w3m-search) + (setq w3m-search-default-engine "duckduckgo") + (add-to-list 'w3m-search-engine-alist + '("duckduckgo" "https://www.duckduckgo.com/lite/?kd=-1&q=%s")))) + +(setq rust-format-on-save t) + +(setq mastodon-instance-url "lor.sh") + +(setq gofmt-command "goimports") + +(add-hook 'before-save-hook 'gofmt-before-save) + +(setq elpy-rpc-python-command "python3") diff --git a/home-manager.nix b/home-manager.nix index db5d08b..eb2d55d 100644 --- a/home-manager.nix +++ b/home-manager.nix @@ -20,4 +20,6 @@ in { }; }; }; + + home-manager.users.user.home.file.".emacs.d/init.el".source = ./etc/emacs.el; } diff --git a/packages.nix b/packages.nix index 31109af..0f3eaf0 100644 --- a/packages.nix +++ b/packages.nix @@ -73,7 +73,7 @@ in { cobol-mode haskell-mode rust-mode scala-mode csharp-mode d-mode solidity-mode php-mode go-mode elpy # Development - helm-gtags slime xcscope + helm-gtags slime xcscope go-autocomplete # Configuration languages modes nix-mode markdown-mode dockerfile-mode yaml-mode ssh-config-mode toml-mode pcap-mode