2025-07-24 17:50:25 +03:30
|
|
|
;;; init.el --- Coast's ~/.emacs.d/init.el
|
|
|
|
;;
|
|
|
|
;;; Commentary:
|
|
|
|
;; This is my GNU/Emacs configuration --
|
|
|
|
;; It has:
|
|
|
|
;; - (TEMPORARY) Evil mode; as I've gotten used to Vim binds when I was away from GNU/Emacs for a bit.
|
|
|
|
;; - Automatic syntax-highlighting.
|
|
|
|
;; - Has a minimap.
|
|
|
|
;; - Bad theme; it's fine on my eyes, though -- I like the 'solarized' theme >:3
|
|
|
|
;; - It's also gay.
|
|
|
|
;;
|
|
|
|
;;; Code:
|
|
|
|
;;
|
2025-07-06 01:28:36 +03:30
|
|
|
(require 'package)
|
|
|
|
(setq package-archives
|
2025-07-24 17:50:25 +03:30
|
|
|
'(("gnu" . "https://elpa.gnu.org/packages/")
|
2025-07-06 01:28:36 +03:30
|
|
|
("melpa" . "https://melpa.org/packages/")))
|
|
|
|
(package-initialize)
|
2025-07-07 04:35:01 +03:30
|
|
|
(unless package-archive-contents
|
|
|
|
(package-refresh-contents))
|
2025-06-30 09:18:02 +03:30
|
|
|
(require 'use-package)
|
2025-06-05 08:09:37 +03:30
|
|
|
|
2025-07-24 17:50:25 +03:30
|
|
|
;;; Message:
|
|
|
|
;; "run" command (M-x / evil)
|
|
|
|
(defun coast/run-current-file ()
|
|
|
|
(interactive)
|
|
|
|
(let ((file (buffer-file-name)))
|
|
|
|
(cond
|
|
|
|
((not file)
|
2025-07-26 00:54:22 +02:00
|
|
|
(message "No file to run!"))
|
2025-07-24 17:50:25 +03:30
|
|
|
((string-match "\\.py\\'" file)
|
|
|
|
(compile (format "python3 %s" file)))
|
|
|
|
((string-match "\\.c\\'" file)
|
|
|
|
(let* ((out (concat (file-name-sans-extension file) ".out")))
|
|
|
|
(compile (format "gcc %s -o %s && %s" file out out))))
|
|
|
|
((string-match "\\.sh\\'" file)
|
|
|
|
(compile (format "bash %s" file)))
|
|
|
|
((string-match "\\.rs\\'" file)
|
|
|
|
(let* ((out (file-name-sans-extension file)))
|
|
|
|
(compile (format "rustc %s && %s" file out))))
|
|
|
|
((string-match "\\.lua\\'" file)
|
|
|
|
(compile (format "lua %s" file)))
|
|
|
|
((string-match "\\.js\\'" file)
|
|
|
|
(compile (format "node %s" file)))
|
|
|
|
((coast/file-has-shebang-p file)
|
|
|
|
(compile (format "%s" file)))
|
2025-07-26 00:54:22 +02:00
|
|
|
(t (message "Not sure how to run this.")))))
|
2025-07-24 17:50:25 +03:30
|
|
|
|
|
|
|
(defun coast/file-has-shebang-p (file)
|
|
|
|
(when (and file (file-readable-p file))
|
|
|
|
(with-temp-buffer
|
|
|
|
(insert-file-contents-literally file nil 0 128)
|
|
|
|
(goto-char (point-min))
|
|
|
|
(looking-at "^#!"))))
|
|
|
|
|
|
|
|
(defalias 'run #'coast/run-current-file)
|
|
|
|
|
2025-05-29 17:06:17 +02:00
|
|
|
(menu-bar-mode -1)
|
|
|
|
(tool-bar-mode -1)
|
|
|
|
(scroll-bar-mode -1)
|
2025-07-06 01:28:36 +03:30
|
|
|
(global-display-line-numbers-mode 1)
|
2025-07-07 04:35:01 +03:30
|
|
|
(global-hl-line-mode 1)
|
2025-07-24 17:50:25 +03:30
|
|
|
(electric-pair-mode 1)
|
2025-05-29 17:06:17 +02:00
|
|
|
|
2025-07-24 17:50:25 +03:30
|
|
|
(setq-default electric-pair-pairs
|
|
|
|
'((?\" . ?\")
|
|
|
|
(?\{ . ?\})
|
|
|
|
(?\( . ?\))
|
|
|
|
(?\[ . ?\])
|
|
|
|
(?\< . ?\>)))
|
2025-07-06 01:28:36 +03:30
|
|
|
|
2025-07-24 17:50:25 +03:30
|
|
|
(setq-default electric-pair-text-pairs electric-pair-pairs)
|
2025-07-14 01:38:23 +03:30
|
|
|
|
2025-07-24 17:50:25 +03:30
|
|
|
(set-frame-parameter (selected-frame) 'alpha '(95 . 95))
|
|
|
|
(add-to-list 'default-frame-alist '(alpha . (95 . 95)))
|
2025-07-14 01:38:23 +03:30
|
|
|
|
2025-07-24 17:50:25 +03:30
|
|
|
(set-face-attribute 'default nil :family "Inconsolata" :height 180)
|
2025-07-07 23:31:40 +03:30
|
|
|
|
2025-07-24 17:50:25 +03:30
|
|
|
(setq backup-directory-alist `((".*" . "~/.local/tmp/emacsbackup/")))
|
2025-07-07 23:31:40 +03:30
|
|
|
(setq make-backup-files t)
|
|
|
|
(setq backup-by-copying t)
|
2025-06-30 09:18:02 +03:30
|
|
|
|
2025-07-24 17:50:25 +03:30
|
|
|
(use-package solarized-theme :ensure t)
|
|
|
|
(load-theme 'solarized-selenized-dark t)
|
2025-06-30 09:18:02 +03:30
|
|
|
|
2025-07-24 17:50:25 +03:30
|
|
|
(use-package all-the-icons :ensure t :if (display-graphic-p))
|
|
|
|
(use-package rainbow-mode :ensure t :hook (prog-mode . rainbow-mode))
|
|
|
|
(use-package elcord :ensure t :config (elcord-mode 1))
|
2025-07-14 01:38:23 +03:30
|
|
|
|
2025-07-24 17:50:25 +03:30
|
|
|
(use-package neotree :ensure t :bind ("<f9>" . neotree-toggle))
|
2025-07-14 01:38:23 +03:30
|
|
|
|
2025-07-24 17:50:25 +03:30
|
|
|
(use-package vertico :ensure t :config (vertico-mode 1))
|
|
|
|
(use-package marginalia :ensure t :hook (vertico-mode . marginalia-mode))
|
2025-07-14 01:38:23 +03:30
|
|
|
(use-package consult
|
|
|
|
:ensure t
|
2025-07-24 17:50:25 +03:30
|
|
|
:bind (("C-x b" . consult-buffer)
|
|
|
|
("C-s" . consult-line)))
|
2025-07-14 01:38:23 +03:30
|
|
|
|
2025-07-07 04:35:01 +03:30
|
|
|
(use-package which-key :ensure t :config (which-key-mode 1))
|
2025-06-30 09:18:02 +03:30
|
|
|
|
2025-07-07 04:35:01 +03:30
|
|
|
(use-package company :ensure t :hook (prog-mode . company-mode))
|
|
|
|
(use-package yasnippet :ensure t :hook (prog-mode . yas-minor-mode))
|
|
|
|
(use-package flycheck :ensure t :hook (prog-mode . flycheck-mode))
|
2025-05-29 17:06:17 +02:00
|
|
|
|
2025-07-06 01:28:36 +03:30
|
|
|
(global-set-key (kbd "C-c t") 'ansi-term)
|
|
|
|
|
2025-06-15 16:51:45 +03:30
|
|
|
(use-package web-mode
|
2025-07-06 01:28:36 +03:30
|
|
|
:ensure t
|
2025-07-07 04:35:01 +03:30
|
|
|
:mode "\\.html?\\'"
|
2025-06-15 16:51:45 +03:30
|
|
|
:config
|
|
|
|
(setq web-mode-enable-auto-pairing t
|
|
|
|
web-mode-enable-auto-closing t
|
|
|
|
web-mode-enable-auto-expanding t))
|
|
|
|
|
|
|
|
(use-package emmet-mode
|
2025-07-06 01:28:36 +03:30
|
|
|
:ensure t
|
2025-06-15 16:51:45 +03:30
|
|
|
:hook ((web-mode html-mode css-mode) . emmet-mode)
|
2025-06-30 09:18:02 +03:30
|
|
|
:config
|
|
|
|
(setq emmet-expand-jsx-className? t))
|
2025-06-15 16:51:45 +03:30
|
|
|
|
2025-07-07 04:35:01 +03:30
|
|
|
(use-package python :mode "\\.py\\'")
|
|
|
|
(use-package sh-script :mode "\\.sh\\'")
|
2025-07-06 01:28:36 +03:30
|
|
|
(use-package cc-mode)
|
2025-07-07 04:35:01 +03:30
|
|
|
(use-package markdown-mode :ensure t :mode "\\.md\\'")
|
|
|
|
(use-package yaml-mode :ensure t :mode "\\.ya?ml\\'")
|
2025-07-24 17:50:25 +03:30
|
|
|
(use-package macrostep :ensure t)
|
2025-07-20 08:18:08 +03:30
|
|
|
|
2025-07-24 17:50:25 +03:30
|
|
|
;;; Message:
|
|
|
|
;; Language-setup.
|
|
|
|
(use-package python
|
|
|
|
:mode ("\\.py\\'" . python-mode)
|
|
|
|
:interpreter ("python" . python-mode))
|
|
|
|
|
|
|
|
(use-package rust-mode
|
2025-07-20 08:18:08 +03:30
|
|
|
:ensure t
|
2025-07-24 17:50:25 +03:30
|
|
|
:mode ("\\.rs\\'" . rust-mode))
|
|
|
|
|
|
|
|
(use-package sh-script
|
|
|
|
:mode (("\\.sh\\'" . sh-mode)
|
|
|
|
("\\.bash\\'" . sh-mode)
|
|
|
|
("\\.zsh\\'" . sh-mode))
|
|
|
|
:interpreter (("bash" . sh-mode)
|
|
|
|
("sh" . sh-mode)
|
|
|
|
("zsh" . sh-mode)))
|
2025-07-20 08:18:08 +03:30
|
|
|
|
2025-07-24 17:50:25 +03:30
|
|
|
(use-package lua-mode
|
2025-07-20 08:18:08 +03:30
|
|
|
:ensure t
|
2025-07-24 17:50:25 +03:30
|
|
|
:mode ("\\.lua\\'" . lua-mode))
|
2025-07-20 08:18:08 +03:30
|
|
|
|
2025-07-24 17:50:25 +03:30
|
|
|
(use-package cc-mode
|
|
|
|
:mode (("\\.c\\'" . c-mode)
|
|
|
|
("\\.h\\'" . c-mode)
|
|
|
|
("\\.cpp\\'" . c++-mode)
|
|
|
|
("\\.hpp\\'" . c++-mode))
|
|
|
|
:interpreter (("c" . c-mode)
|
|
|
|
("cpp" . c++-mode)))
|
|
|
|
|
|
|
|
(use-package markdown-mode
|
2025-07-20 08:18:08 +03:30
|
|
|
:ensure t
|
2025-07-24 17:50:25 +03:30
|
|
|
:mode ("\\.md\\'" . markdown-mode))
|
2025-07-20 08:18:08 +03:30
|
|
|
|
2025-07-24 17:50:25 +03:30
|
|
|
(use-package yaml-mode
|
2025-07-20 08:18:08 +03:30
|
|
|
:ensure t
|
2025-07-24 17:50:25 +03:30
|
|
|
:mode ("\\.ya?ml\\'" . yaml-mode))
|
2025-07-20 08:18:08 +03:30
|
|
|
|
2025-07-24 17:50:25 +03:30
|
|
|
;;; Message
|
|
|
|
;; -- Set window title --
|
|
|
|
(setq frame-title-format '("%b —— GNU/Emacs"))
|
|
|
|
|
|
|
|
;;; Message:
|
|
|
|
;; -- The below may have been temporarily added --
|
2025-07-20 08:18:08 +03:30
|
|
|
|
|
|
|
(use-package doom-modeline
|
|
|
|
:ensure t
|
|
|
|
:init
|
2025-07-24 17:50:25 +03:30
|
|
|
(setq doom-modeline-height 25
|
|
|
|
doom-modeline-bar-width 3
|
|
|
|
doom-modeline-buffer-file-name-style 'truncate-with-project
|
|
|
|
doom-modeline-icon t
|
|
|
|
doom-modeline-major-mode-icon t
|
|
|
|
doom-modeline-enable-word-count t
|
|
|
|
doom-modeline-vcs-max-length 12
|
|
|
|
doom-modeline-minor-modes nil)
|
|
|
|
:config
|
|
|
|
(doom-modeline-mode 1))
|
|
|
|
|
|
|
|
(setq evil-want-keybinding nil)
|
|
|
|
|
|
|
|
(use-package evil
|
|
|
|
:ensure t
|
|
|
|
:init (setq evil-want-integration t
|
|
|
|
evil-want-C-u-scroll t)
|
|
|
|
:config (evil-mode 1))
|
|
|
|
|
|
|
|
(use-package evil-collection
|
|
|
|
:after evil
|
|
|
|
:ensure t
|
|
|
|
:config (evil-collection-init))
|
|
|
|
|
|
|
|
(use-package evil-leader
|
|
|
|
:ensure t
|
2025-07-20 08:18:08 +03:30
|
|
|
:config
|
2025-07-24 17:50:25 +03:30
|
|
|
(global-evil-leader-mode)
|
|
|
|
(evil-leader/set-leader "<SPC>")
|
|
|
|
(evil-leader/set-key
|
|
|
|
"f" 'find-file
|
|
|
|
"b" 'switch-to-buffer
|
|
|
|
"k" 'kill-buffer
|
|
|
|
"t" 'ansi-term
|
|
|
|
"e" 'eval-buffer
|
|
|
|
"r" 'coast/run-current-file))
|
|
|
|
|
|
|
|
(use-package evil-surround :ensure t :config (global-evil-surround-mode 1))
|
|
|
|
(use-package evil-commentary :ensure t :config (evil-commentary-mode 1))
|
|
|
|
|
|
|
|
(use-package corfu
|
|
|
|
:ensure t
|
|
|
|
:custom
|
|
|
|
(corfu-auto t)
|
|
|
|
(corfu-cycle t)
|
|
|
|
(corfu-quit-no-match nil)
|
|
|
|
:init
|
|
|
|
(global-corfu-mode))
|
|
|
|
|
|
|
|
(use-package cape
|
|
|
|
:ensure t)
|
|
|
|
|
|
|
|
(defun my/evil-ex-corfu-setup ()
|
|
|
|
(setq-local completion-at-point-functions
|
|
|
|
(list (cape-super-capf #'completion-at-point))))
|
|
|
|
|
|
|
|
(add-hook 'evil-ex-completion-hook #'my/evil-ex-corfu-setup)
|
2025-07-14 01:38:23 +03:30
|
|
|
|
2025-07-07 23:31:40 +03:30
|
|
|
(custom-set-variables
|
2025-07-20 08:18:08 +03:30
|
|
|
;; custom-set-variables was added by Custom.
|
|
|
|
;; If you edit it by hand, you could mess it up, so be careful.
|
|
|
|
;; Your init file should contain only one such instance.
|
|
|
|
;; If there is more than one, they won't work right.
|
2025-07-24 17:50:25 +03:30
|
|
|
'(warning-suppress-log-types '((use-package))))
|
2025-07-20 08:18:08 +03:30
|
|
|
(custom-set-faces
|
|
|
|
;; custom-set-faces was added by Custom.
|
|
|
|
;; If you edit it by hand, you could mess it up, so be careful.
|
|
|
|
;; Your init file should contain only one such instance.
|
|
|
|
;; If there is more than one, they won't work right.
|
|
|
|
)
|
2025-07-24 17:50:25 +03:30
|
|
|
|
|
|
|
(provide 'init)
|
|
|
|
;;; init.el ends here
|