;;------------------------------------------------------------------------------ ;; ᚳᚻᚪᚱᛚᛖᛋ ᛣᚱᚪᛚᚪᛈᛈ ᛖᛗᚪᚳᛋ ᛋᛖᛏᛏᛁᛝᛋ ;; * Зонгор * ᛣᚩᛝᚩᚱ * ;;------------------------------------------------------------------------------ (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-collection :after evil :ensure t :config (evil-collection-init)) (use-package verb) (use-package org :after verb :mode ("\\.org\\'" . org-mode) :config (define-key org-mode-map (kbd "C-c C-r") verb-command-map)) (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) (use-package neotree :config (global-set-key [f8] 'neotree-toggle)) (use-package dashboard :ensure t :config (dashboard-setup-startup-hook)) (use-package centaur-tabs :demand :config (centaur-tabs-mode t) :bind ("C-" . centaur-tabs-backward) ("C-" . centaur-tabs-forward)) (use-package undo-tree :config (global-undo-tree-mode 1) :diminish undo-tree-mode) (use-package format-all :hook ((format-all-mode-hook . format-all-ensure-formatter))) (use-package rainbow-delimiters :hook ((prog-mode-hook . rainbow-delimiters-mode))) (use-package dumb-jump :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 web-mode :config (add-to-list 'auto-mode-alist '("\\.jsx?$" . web-mode)) (setq web-mode-content-types-alist '(("jsx" . "\\.js[x]?\\'")))) (use-package typescript-mode) (use-package tide :ensure t :after (typescript-mode company flycheck) :hook ((typescript-mode . tide-setup) (typescript-mode . tide-hl-identifier-mode) (before-save . tide-format-before-save))) (use-package elm-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 vterm :ensure t) (use-package dash) (use-package column-enforce-mode) (use-package desktop) (use-package magit) (use-package magit-lfs :ensure t :pin melpa) (use-package forge :after magit) (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. '(elfeed-feeds '("https://lemmy.ml/feeds/local.xml?sort=Active" "https://www.hexbear.net/feeds/all.xml?sort=Active" "https://xkcd.com/atom.xml" "https://www.existentialcomics.com/rss.xml" "https://hackaday.com/blog/feed/" "https://itsfoss.com/feed/" "http://git.9front.org/plan9front/plan9front/HEAD/feed.rss" "https://www.gnu.org/software/hurd/index.rss" "https://steamcommunity.com/groups/GrabFreeGames/rss/" "https://feeds.npr.org/1001/rss.xml" "https://www.scmp.com/rss/91/feed" "https://www.currentaffairs.org/feed" "https://libcom.org/rss.xml/feed" "https://itsgoingdown.org/feed" "https://cosmonaut.blog/rss" "https://yewtu.be/feed/private?token=QaRbw6HeUUNTi5K24U6eMWSw9xYjYc0ARTeUcZK1pJA=" "http://feeds.ancientfaith.com/AmonSul" "https://feeds.transistor.fm/the-magnificast" "https://anchor.fm/s/c38df04/podcast/rss" "https://yogpod.libsyn.com/rss" "https://revolutionspodcast.libsyn.com/rss" "https://feeds.acast.com/public/shows/5e7b777ba085cbe7192b0607" "https://www.omnycontent.com/d/playlist/aaea4e69-af51-495e-afc9-a9760146922b/48da3539-5da0-41ed-a1c3-aac50170b88f/f7810480-e2d3-4be5-a559-aac50170b8a6/podcast.rss" "https://feeds.soundcloud.com/users/soundcloud:users:672423809/sounds.rss" "https://www.omnycontent.com/d/playlist/aaea4e69-af51-495e-afc9-a9760146922b/4a3ca742-9a68-4850-a727-ab790176c0e9/d04153b0-fc4c-4191-ab18-ab790179c563/podcast.rss" "https://feeds.soundcloud.com/users/soundcloud:users:211911700/sounds.rss" "https://access.acast.com/rss/5fd1001d81367d4cb41fe325/Q6BVQ6VF" "https://feeds.npr.org/344098539/podcast.xml")) '(inhibit-startup-screen t) '(neo-theme 'icons)) (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. )