;;------------------------------------------------------------------------------ ;; ᚳᚻᚪᚱᛚᛖᛋ ᛣᚱᚪᛚᚪᛈᛈ ᛖᛗᚪᚳᛋ ᛋᛖᛏᛏᛁᛝᛋ ;; * Зонгор * ᛣᚩᛝᚩᚱ * ;;------------------------------------------------------------------------------ (require 'package) (add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/") t) (add-to-list 'package-archives '("org" . "https://orgmode.org/elpa/") t) (package-initialize) (when (not package-archive-contents) (package-refresh-contents)) (unless (package-installed-p 'use-package) (package-install 'use-package)) ;; install packages automatically if not already present on your ;; system to be global for all packages (require 'use-package-ensure) (setq use-package-always-ensure t) (defvar bootstrap-version) (let ((bootstrap-file (expand-file-name "straight/repos/straight.el/bootstrap.el" user-emacs-directory)) (bootstrap-version 5)) (unless (file-exists-p bootstrap-file) (with-current-buffer (url-retrieve-synchronously "https://raw.githubusercontent.com/raxod502/straight.el/develop/install.el" 'silent 'inhibit-cookies) (goto-char (point-max)) (eval-print-last-sexp))) (load bootstrap-file nil 'nomessage)) (straight-use-package 'use-package) (setq straight-use-package-by-default t) (defun move-to-previous-window () "Move to previous window." (interactive) (if (= (count-windows) 1) (other-frame 1) (select-window (previous-window)))) (defun move-to-next-window () "Move to next window." (interactive) (if (= (count-windows) 1) (other-frame 1) (select-window (next-window)))) (defun comment-eclipse () (interactive) (let ((start (line-beginning-position)) (end (line-end-position))) (when (or (not transient-mark-mode) (region-active-p)) (setq start (save-excursion (goto-char (region-beginning)) (beginning-of-line) (point)) end (save-excursion (goto-char (region-end)) (end-of-line) (point)))) (comment-or-uncomment-region start end))) (use-package evil :ensure t :init (setq evil-want-keybinding nil) (setq evil-want-integration t) ;; This is optional since it's already set to t by default. :config (evil-mode 1) ;; :q should kill the current buffer rather than quitting emacs entirely (evil-ex-define-cmd "q" 'kill-this-buffer) ;; Need to type out :quit to close emacs (evil-ex-define-cmd "quit" 'evil-quit) (define-key evil-normal-state-map (kbd "C-\\") 'comment-eclipse) (define-key evil-normal-state-map (kbd "q") 'undo-tree-redo) (define-key evil-normal-state-map (kbd "w") 'evil-backward-word-begin) (define-key evil-normal-state-map (kbd "H") 'evil-first-non-blank) (define-key evil-normal-state-map (kbd "L") 'evil-end-of-line) (define-key evil-normal-state-map (kbd "K") 'backward-paragraph) (define-key evil-normal-state-map (kbd "J") 'forward-paragraph) (define-key evil-normal-state-map (kbd "C-x l") 'list-buffers) (define-key evil-normal-state-map (kbd "M-/") 'dabbrev-expand) (define-key evil-normal-state-map (kbd "C-,") 'move-to-previous-window) (define-key evil-normal-state-map (kbd "C-.") 'move-to-next-window) (define-key evil-normal-state-map (kbd "C-M-\\") 'format-all-buffer) ;; (evil-define-key 'normal Buffer-menu-mode-map (kbd "RET") ) (evil-define-key 'normal neotree-mode-map (kbd "TAB") 'neotree-enter) (evil-define-key 'normal neotree-mode-map (kbd "SPC") 'neotree-quick-look) (evil-define-key 'normal neotree-mode-map (kbd "q") 'neotree-hide) (evil-define-key 'normal neotree-mode-map (kbd "RET") 'neotree-enter) (evil-define-key 'normal neotree-mode-map (kbd "g") 'neotree-refresh) (evil-define-key 'normal neotree-mode-map (kbd "n") 'neotree-next-line) (evil-define-key 'normal neotree-mode-map (kbd "p") 'neotree-previous-line) (evil-define-key 'normal neotree-mode-map (kbd "A") 'neotree-stretch-toggle) (evil-define-key 'normal neotree-mode-map (kbd "H") 'neotree-hidden-file-toggle)) (use-package evil-org :ensure t :after org evil :config (add-hook 'org-mode-hook 'evil-org-mode) (add-hook 'evil-org-mode-hook (lambda () (evil-org-set-key-theme))) (require 'evil-org-agenda) (evil-org-agenda-set-keys)) (use-package doom-themes :ensure t :config ;; Global settings (defaults) (setq doom-themes-enable-bold t ; if nil, bold is universally disabled doom-themes-enable-italic t) ; if nil, italics is universally disabled (load-theme 'doom-monokai-classic t) ;; Enable custom neotree theme (all-the-icons must be installed!) (doom-themes-neotree-config) ;; Corrects (and improves) org-mode's native fontification. (doom-themes-org-config)) (use-package all-the-icons :if (display-graphic-p)) (use-package neotree :config (global-set-key [f8] 'neotree-toggle)) (use-package undo-tree :config (global-undo-tree-mode 1) :diminish undo-tree-mode) (use-package eaf :straight (eaf :type git :host github :repo "emacs-eaf/emacs-application-framework" :files ("*.el" "*.py" "core" "app" "*.json") :includes (eaf-browser eaf-terminal) ; Straight won't try to search for these packages when we make further use-package invocations for them :pre-build (("python3" "install-eaf.py" "--install" "browser" "terminal" "--ignore-sys-deps")) ) :init (evil-set-initial-state 'eaf-mode 'emacs)) ; Evil mode doesn't work well with eaf keybindings. (use-package eaf-browser :custom (eaf-browser-continue-where-left-off t) (eaf-browser-enable-adblocker t) (eaf-browser-dark-mode "force")) (use-package eaf-terminal) (use-package format-all :hook ( (format-all-mode-hook . format-all-ensure-formatter) ) ) (use-package dumb-jump) (add-hook 'xref-backend-functions #'dumb-jump-xref-activate) (use-package elfeed :config (global-set-key (kbd "C-x w") 'elfeed)) (use-package restclient) (use-package markdown-mode :ensure t :mode ("README\\.md\\'" . gfm-mode) :init (setq markdown-command "multimarkdown")) (use-package docker :ensure t :bind ("C-c d" . docker)) (use-package docker-compose-mode) (use-package go-mode) (use-package rust-mode) (use-package cargo) (use-package lsp-mode :commands (lsp lsp-deferred) :init (setq lsp-keymap-prefix "C-c l") :hook ((go-mode) . lsp) ((rust-mode) . lsp)) (use-package lsp-ui :hook (lsp-mode . lsp-ui-mode) :config (setq lsp-ui-doc-enable t)) (use-package ccls :ensure t :init (setq ccls-executable "/usr/bin/ccls")) (use-package dash) (use-package column-enforce-mode) (use-package desktop) (use-package git) (use-package ripgrep) (use-package projectile) (use-package ivy) (use-package git-gutter :ensure t :init (global-git-gutter-mode t)) (let ((alist '((33 . ".\\(?:\\(?:\\(?:!\\.\\|!\\)\\|\\(?:==\\|=\\)\\)\\)") ;; ! (35 . ".\\(?:\\(?:[!(:={]\\|\\(?:#\\(?:##\\|#\\)\\|#\\)\\|\\?\\|\\[\\|\\(?:_(\\|_\\)\\)\\)") ;; # (36 . ".\\(?:>\\)") ;; $ (37 . ".\\(?:%\\)") ;; % (38 . ".\\(?:&\\)") ;; & (42 . ".\\(?:\\(?:[/>]\\|\\(?:\\*\\*\\|\\*\\)\\)\\)") ;; * (43 . ".\\(?:\\(?:\\(?:\\+\\+\\|\\+\\)\\|>\\)\\)") ;; + (45 . ".\\(?:\\(?:[|~]\\|\\(?:-\\(?:-\\|>\\)\\|-\\)\\|\\(?:<<\\|<\\)\\|\\(?:>>\\|>\\)\\)\\)") ;; - (46 . ".\\(?:\\(?:-\\|\\(?:\\.\\(?:\\.\\|<\\)\\|\\.\\)\\|=\\|\\?\\)\\)") ;; . (47 . ".\\(?:\\(?:[>\\]\\|\\*\\|\\(?://\\|/\\)\\|\\(?:==\\|=\\)\\)\\)") ;; / (48 . ".\\(?:x[0-9A-Fa-f]\\)") ;; 0 (58 . ".\\(?:\\(?:[<->]\\|\\(?::[:=]\\|:\\)\\)\\)") ;; : (59 . ".\\(?:;\\)") ;; ; (60 . ".\\(?:\\(?:[:>]\\|!--\\|\\(?:\\$>\\|\\$\\)\\|\\(?:\\*>\\|\\*\\)\\|\\(?:\\+>\\|\\+\\)\\|\\(?:-\\(?:[<>|]\\|-\\)\\|-\\)\\|\\(?:/>\\|/\\)\\|\\(?:<\\(?:[<=]\\|-\\)\\|<\\)\\|\\(?:=\\(?:[<>|]\\|\\(?:=>\\|=\\)\\)\\|=\\)\\|\\(?:|\\(?:>\\|\\(?:||\\||\\)\\)\\||\\)\\|\\(?:~[>~]\\|~\\)\\)\\)") ;; < (61 . ".\\(?:\\(?:!=\\|/=\\|:=\\|<<\\|\\(?:=[=>]\\|=\\)\\|\\(?:>>\\|>\\)\\)\\)") ;; = (62 . ".\\(?:\\(?:\\(?:->\\|-\\)\\|:\\|\\(?:=>\\|=\\)\\|\\(?:>\\(?:[=>]\\|-\\)\\|>\\)\\)\\)") ;; > (63 . ".\\(?:\\(?:[:=]\\|\\.\\|\\?\\)\\)") ;; ? (70 . ".\\(?:l\\)") ;; F (84 . ".\\(?:l\\)") ;; T (91 . ".\\(?:\\(?::]\\||\\)\\)") ;; [ (92 . ".\\(?:/\\)") ;; \ (93 . ".\\(?:#\\)") ;; ] (94 . ".\\(?:=\\)") ;; ^ (95 . ".\\(?:\\(?:_\\||_\\)\\)") ;; _ (102 . ".\\(?:l\\)") ;; f (119 . ".\\(?:ww\\)") ;; w (123 . ".\\(?:|\\)") ;; { (124 . ".\\(?:\\(?:[>}]\\|\\(?:->\\|-\\)\\|\\(?:=>\\|=\\)\\|]\\|\\(?:|\\(?:[=>]\\|-\\||>\\)\\||\\)\\)\\)") ;; | (126 . ".\\(?:\\(?:[=>@]\\|-\\|\\(?:~>\\|~\\)\\)\\)")))) (dolist (char-regexp alist) (set-char-table-range composition-function-table (car char-regexp) `([,(cdr char-regexp) 0 font-shape-gstring])))) (set-frame-font "Fira Code 11") ;; Auto-insert braces. Has some counter-intuitive behaviour, unfortunately. (electric-pair-mode 1) (setf electric-pair-skip-self nil) (global-set-key [f11] 'toggle-frame-fullscreen) (global-set-key (kbd "C-s") 'ripgrep-regexp) (global-set-key (kbd "C-,") 'move-to-previous-window) (global-set-key (kbd "C-.") 'move-to-next-window) (global-set-key (kbd "M-i") 'xref-find-definitions) (global-set-key (kbd "C-M-i") 'xref-pop-marker-stack) (global-column-enforce-mode) (global-linum-mode) (scroll-bar-mode -1) (tool-bar-mode -1) (menu-bar-mode -1) (show-paren-mode 1) (blink-cursor-mode 0) (set-cursor-color "#ffffff") (custom-set-variables ;; 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. '(inhibit-startup-screen t)) (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. )