aboutsummaryrefslogtreecommitdiff
path: root/home-manager/programs/emacs/config.org
diff options
context:
space:
mode:
Diffstat (limited to 'home-manager/programs/emacs/config.org')
-rw-r--r--home-manager/programs/emacs/config.org528
1 files changed, 384 insertions, 144 deletions
diff --git a/home-manager/programs/emacs/config.org b/home-manager/programs/emacs/config.org
index f9938ce..a21da11 100644
--- a/home-manager/programs/emacs/config.org
+++ b/home-manager/programs/emacs/config.org
@@ -1,4 +1,4 @@
-#+TITLE: spl3g's Emacs config
+#+Title: spl3g's Emacs config
#+AUTHOR: spl3g
#+STARTUP: showeverything
#+PROPERTY: header-args :tangle init.el
@@ -11,6 +11,7 @@
- [[#meow-mode][Meow mode]]
- [[#general-keybindings][General keybindings]]
- [[#gui-tweaks][GUI tweaks]]
+ - [[#disable-gui-shit][Disable gui shit]]
- [[#fonts][Fonts]]
- [[#display-line-numbers][Display line numbers]]
- [[#theme][Theme]]
@@ -18,28 +19,46 @@
- [[#modeline][Modeline]]
- [[#smooth-scroll][Smooth scroll]]
- [[#dashboard][Dashboard]]
- - [[#popper][Popper]]
+ - [[#disable-ring-bell][Disable ring-bell]]
+ - [[#indent-guide][Indent guide]]
+ - [[#misc][Misc]]
- [[#org-mode][Org mode]]
- [[#enabling-toc][Enabling toc]]
- [[#org-bullets][Org bullets]]
- [[#auto-tangle][Auto-tangle]]
+ - [[#org-download][Org-download]]
+ - [[#direnv][Direnv]]
- [[#better-ux][Better UX]]
- [[#vertico][Vertico]]
- [[#consult][Consult]]
- [[#treemacs][Treemacs]]
+ - [[#pairs][Pairs]]
+ - [[#debugging][Debugging]]
+ - [[#move-lines][Move lines]]
+ - [[#truncate-lines][Truncate lines]]
+- [[#eat-terminal][EAT terminal]]
+ - [[#eat][Eat]]
- [[#lsp][LSP]]
- [[#languages][Languages]]
- - [[#corfu--cape][Corfu + cape]]
+ - [[#corfu][Corfu]]
- [[#flycheck][Flycheck]]
+ - [[#tree-sitter][Tree-sitter]]
+ - [[#snippets][Snippets]]
+- [[#additional-apps][Additional apps]]
+ - [[#telegram-lol][Telegram lol]]
+ - [[#magit][Magit]]
+ - [[#exwm][EXWM]]
+- [[#dired][Dired]]
+ - [[#bindings][Bindings]]
+ - [[#icons-1][Icons]]
* Progs to load first
** use-package
-every package is installed by nix and configured by use-package
#+begin_src emacs-lisp
(require 'use-package)
(eval-and-compile
(setq use-package-always-ensure t
- use-package-expand-minimally t))
+ use-package-expand-minimally t))
#+end_src
** Meow mode
#+begin_src emacs-lisp
@@ -131,8 +150,7 @@ every package is installed by nix and configured by use-package
'("z" . meow-pop-selection)
'("'" . repeat)
'("<escape>" . ignore)))
- (setq meow-use-cursor-position-hack t
- meow-use-enhanced-selection-effect t)
+ (setq meow-use-enhanced-selection-effect t)
(meow-setup)
(meow-global-mode 1))
#+end_src
@@ -155,40 +173,52 @@ every package is installed by nix and configured by use-package
"," '(consult-buffer :wk "Switch to buffer")
"." '(find-file :wk "Find file")
;; Splits
- "w" '(:ignore t :wk "Evil splits")
+ "w" '(:ignore t :wk "Splits")
"wv" '(split-window-right :wk "Split vertical")
"ws" '(split-window-below :wk "Split")
"ww" '(other-window :wk "Cycle throug windows")
"wc" '(delete-window :wk "Close window")
"wd" '(delete-window :wk "Close window")
+ "wl" '(evil-window-right :wk "")
+ "wj" '(evil-window-down :wk "")
+ "wk" '(evil-window-up :wk "")
+ "wh" '(evil-window-left :wk "")
+ "wo" '(delete-other-windows :wk "")
;; Files
"f" '(:ignore t :wk "Files")
"fr" '(consult-recent-file :wk "Resent files")
- "fc" '((lambda () (interactive) (find-file "~/.config/emacs/init.el")) :wk "Edit emacs config")
+ "fc" '((lambda () (interactive) (find-file "~/.nixfiles/home-manager/programs/emacs/config.org")) :wk "Edit emacs config")
"fu" '(sudo-edit-find-file :wk "Sudo find file")
"fU" '(sudo-edit :wk "Sudo edit file")
- ;; Quiting
- "q" '(:ignore t :wk "Quiting")
- "qq" '(:ignore t :wk "Quit TBD")
- "qr" '(:ignore t :wk "Restart TBD")
- "qe" '(eval-buffer :wk "Eval buffer")
- "r" '(reload-init-file :wk "Reload config")
- "l" '(lsp-keymap-prefix :wk "LSP")))
+ "l" '(lsp-keymap-prefix :wk "LSP")
+ ;; Opening.. things
+ "o" '(:ignore t)
+ "ot" '(eat-toggle :wk "Eat terminal")))
#+end_src
+
* GUI tweaks
+** Disable gui shit
+#+begin_src emacs-lisp
+ (defun spl3g/disable-scroll-bars (frame)
+ (modify-frame-parameters frame
+ '((vertical-scroll-bars . nil)
+ (horizontal-scroll-bars . nil))))
+ (add-hook 'after-make-frame-functions 'spl3g/disable-scroll-bars)
+#+end_src
** Fonts
#+begin_src emacs-lisp
+ (setq default-frame-alist '((font . "Source Code Pro")))
(set-face-attribute 'default nil
:font "Source Code Pro"
- :height 113
+ :height 110
:weight 'medium)
(set-face-attribute 'fixed-pitch nil
:font "Source Code Pro"
- :height 113
+ :height 110
:weight 'medium)
(set-face-attribute 'variable-pitch nil
:font "Rubik"
- :height 113
+ :height 110
:weight 'medium)
(set-face-attribute 'font-lock-comment-face nil
:slant 'italic)
@@ -197,8 +227,8 @@ every package is installed by nix and configured by use-package
#+end_src
** Display line numbers
#+begin_src emacs-lisp
-(global-display-line-numbers-mode 1)
-(global-visual-line-mode t)
+(add-hook 'prog-mode-hook 'display-line-numbers-mode)
+(add-hook 'prog-mode-hook 'visual-line-mode)
#+end_src
** Theme
@@ -221,11 +251,13 @@ every package is installed by nix and configured by use-package
** Modeline
#+begin_src emacs-lisp
- (use-package mood-line
- :init
- (mood-line-mode)
+ (use-package doom-modeline
+ :init (doom-modeline-mode 1)
:config
- (setq mood-line-glyph-alist mood-line-glyphs-unicode))
+ (setq doom-modeline-height 35 ;; sets modeline height
+ doom-modeline-bar-width 5 ;; sets right bar width
+ doom-modeline-persp-name t ;; adds perspective name to modeline
+ doom-modeline-persp-icon t)) ;; adds folder icon next to persp name
#+end_src
** Smooth scroll
@@ -243,27 +275,27 @@ every package is installed by nix and configured by use-package
(setq initial-buffer-choice (lambda () (get-buffer-create "*dashboard*")))
(setq dashboard-banner-logo-title "Yep, it's emacs, not vim")
(setq dashboard-startup-banner 'logo)
- (setq dashboard-center-content t))
+ (setq dashboard-center-content t)
+ (add-to-list 'dashboard-item-generators '(config . dashboard-open-config))
+ (setq dashboard-items '((recents . 5)
+ (agenda . 5))))
#+end_src
-** Popper
+** Disable ring-bell
#+begin_src emacs-lisp
- (use-package popper
- :ensure t ; or :straight t
- :bind (("C-`" . popper-toggle-latest)
- ("M-`" . popper-cycle)
- ("C-M-`" . popper-toggle-type))
- :init
- (setq popper-reference-buffers
- '("\\*Messages\\*"
- "Output\\*$"
- "\\*Async Shell Command\\*"
- help-mode
- "^\\*vterm.*\\*$" vterm-mode
- compilation-mode))
- (popper-mode +1)
- (popper-echo-mode +1))
+ (setq ring-bell-function 'ignore)
+#+end_src
+** Indent guide
+#+begin_src emacs-lisp
+ (use-package indent-guide
+ :hook (prog-mode . indent-guide-mode))
+#+end_src
+** Misc
+#+begin_src emacs-lisp
+ (setq window-resize-pixelwise t)
+ (setq frame-resize-pixelwise t)
+ (save-place-mode t)
+ (defalias 'yes-or-no #'y-or-n-p)
#+end_src
-
* Org mode
#+begin_src emacs-lisp
(add-hook 'org-mode-hook 'org-indent-mode)
@@ -272,61 +304,75 @@ every package is installed by nix and configured by use-package
** Enabling toc
#+begin_src emacs-lisp
- (use-package toc-org)
- (add-hook 'org-mode-hook 'toc-org-mode)
+ (use-package toc-org
+ :init (add-hook 'org-mode-hook 'toc-org-enable))
#+end_src
** Org bullets
#+begin_src emacs-lisp
- (use-package org-bullets)
- (add-hook 'org-mode-hook 'org-bullets-mode)
+ (use-package org-bullets
+ :init (add-hook 'org-mode-hook (lambda () (org-bullets-mode 1))))
#+end_src
** Auto-tangle
#+begin_src emacs-lisp
- (use-package org-auto-tangle)
- (add-hook 'org-mode-hook 'org-auto-tangle-mode)
+ (use-package org-auto-tangle
+ :init (add-hook 'org-mode-hook 'org-auto-tangle-mode))
+#+end_src
+** Org-download
+#+begin_src emacs-lisp
+ (use-package org-download
+ :hook (dired-mode-hook . org-download-enable))
+#+end_src
+** Direnv
+#+begin_src emacs-lisp
+ (use-package direnv
+ :config
+ (direnv-mode))
#+end_src
* Better UX
** Vertico
#+begin_src emacs-lisp
- (use-package vertico
+ (use-package vertico
+ :init
+ (vertico-mode)
+ :bind (:map vertico-map
+ ("M-j" . vertico-next)
+ ("M-k" . vertico-previous))
+ :config
+ (savehist-mode 1))
+ (use-package emacs
:init
- (vertico-mode)
- :config
- (savehist-mode 1))
- (use-package emacs
- :init
- ;; Add prompt indicator to `completing-read-multiple'.
- ;; We display [CRM<separator>], e.g., [CRM,] if the separator is a comma.
- (defun crm-indicator (args)
- (cons (format "[CRM%s] %s"
- (replace-regexp-in-string
- "\\`\\[.*?]\\*\\|\\[.*?]\\*\\'" ""
- crm-separator)
- (car args))
- (cdr args)))
- (advice-add #'completing-read-multiple :filter-args #'crm-indicator)
-
- ;; Do not allow the cursor in the minibuffer prompt
- (setq minibuffer-prompt-properties
- '(read-only t cursor-intangible t face minibuffer-prompt))
- (add-hook 'minibuffer-setup-hook #'cursor-intangible-mode)
-
- ;; Emacs 28: Hide commands in M-x which do not work in the current mode.
- ;; Vertico commands are hidden in normal buffers.
- ;; (setq read-extended-command-predicate
- ;; #'command-completion-default-include-p)
-
- ;; Enable recursive minibuffers
- (setq enable-recursive-minibuffers t))
+ ;; Add prompt indicator to `completing-read-multiple'.
+ ;; We display [CRM<separator>], e.g., [CRM,] if the separator is a comma.
+ (defun crm-indicator (args)
+ (cons (format "[CRM%s] %s"
+ (replace-regexp-in-string
+ "\\`\\[.*?]\\*\\|\\[.*?]\\*\\'" ""
+ crm-separator)
+ (car args))
+ (cdr args)))
+ (advice-add #'completing-read-multiple :filter-args #'crm-indicator)
+
+ ;; Do not allow the cursor in the minibuffer prompt
+ (setq minibuffer-prompt-properties
+ '(read-only t cursor-intangible t face minibuffer-prompt))
+ (add-hook 'minibuffer-setup-hook #'cursor-intangible-mode)
+
+ ;; Emacs 28: Hide commands in M-x which do not work in the current mode.
+ ;; Vertico commands are hidden in normal buffers.
+ ;; (setq read-extended-command-predicate
+ ;; #'command-completion-default-include-p)
+
+ ;; Enable recursive minibuffers
+ (setq enable-recursive-minibuffers t))
#+end_src
*** Ordeless
#+begin_src emacs-lisp
(use-package orderless
:init
(setq completion-styles '(orderless basic)
- completion-category-defaults nil
- completion-category-overrides '((file (styles partial-completion)))))
+ completion-category-defaults nil
+ completion-category-overrides '((file (styles partial-completion)))))
#+end_src
*** Marginalia
#+begin_src emacs-lisp
@@ -468,57 +514,156 @@ every package is installed by nix and configured by use-package
#+begin_src emacs-lisp
(use-package treemacs-all-the-icons)
#+end_src
+** Pairs
+#+begin_src emacs-lisp
+ (use-package smartparens
+ :init (smartparens-global-mode)
+ :hook (prog-mode-hook . turn-on-smartparens-strict-mode)
+ :config
+ ;; Snitched from doom
+ (let ((unless-list '(sp-point-before-word-p
+ sp-point-after-word-p
+ sp-point-before-same-p)))
+ (sp-pair "'" nil :unless unless-list)
+ (sp-pair "\"" nil :unless unless-list))
+ (dolist (brace '("(" "{" "["))
+ (sp-pair brace nil
+ :post-handlers '(("||\n[i]" "RET") ("| " "SPC"))
+ :unless '(sp-point-before-word-p sp-point-before-same-p)))
+ (sp-local-pair sp-lisp-modes "(" ")" :unless '(:rem sp-point-before-same-p))
+ (sp-local-pair sp-lisp-modes "(" ")" :unless '(:rem sp-point-before-same-p))
+
+ ;; Major-mode specific fixes
+ (sp-local-pair 'ruby-mode "{" "}"
+ :pre-handlers '(:rem sp-ruby-pre-handler)
+ :post-handlers '(:rem sp-ruby-post-handler))
+
+ ;; Don't eagerly escape Swift style string interpolation
+ (sp-local-pair 'swift-mode "\\(" ")" :when '(sp-in-string-p))
+
+ ;; Don't do square-bracket space-expansion where it doesn't make sense to
+ (sp-local-pair '(emacs-lisp-mode org-mode markdown-mode gfm-mode)
+ "[" nil :post-handlers '(:rem ("| " "SPC")))
+
+ ;; Reasonable default pairs for HTML-style comments
+ (sp-local-pair (append sp--html-modes '(markdown-mode gfm-mode))
+ "<!--" "-->"
+ :unless '(sp-point-before-word-p sp-point-before-same-p)
+ :actions '(insert) :post-handlers '(("| " "SPC")))
+ ;; Expand C-style comment blocks.
+ (defun +default-open-doc-comments-block (&rest _ignored)
+ (save-excursion
+ (newline)
+ (indent-according-to-mode)))
+ (sp-local-pair
+ '(js2-mode typescript-mode rjsx-mode rust-mode c-mode c++-mode objc-mode
+ csharp-mode java-mode php-mode css-mode scss-mode less-css-mode
+ stylus-mode scala-mode)
+ "/*" "*/"
+ :actions '(insert)
+ :post-handlers '(("| " "SPC")
+ (" | " "*")
+ ("|[i]\n[i]" "RET"))))
+ ;; (use-package parinfer-rust-mode
+ ;; :hook (lisp-mode-hook . parinfer-rust-mode))
+ ;; (electric-pair-mode 1)
+#+end_src
+** Debugging
+#+begin_src emacs-lisp
+ (use-package dap-mode
+ :config
+ (require 'dap-python)
+ (setq dap-python-debugger 'debugpy))
+#+end_src
+** Move lines
+#+begin_src emacs-lisp
+ (use-package move-text
+ :bind (("C-M-k" . move-text-up)
+ ("C-M-j" . move-text-down)))
+#+end_src
+** Truncate lines
+#+begin_src emacs-lisp
+ (set-default 'truncate-lines t)
+#+end_src
+* EAT terminal
+** Eat
+#+begin_src emacs-lisp
+ (use-package eat
+ :custom
+ (eat-semi-char-non-bound-keys
+ '(seq-difference eat-semi-char-non-bound-keys '([C-left] [C-right]))))
+#+end_src
+*** Eat-toggle
+#+begin_src emacs-lisp
+ (defun eat-toggle()
+ "Open eat terminal as a popup."
+ (interactive)
+ (if (eq major-mode 'eat-mode)
+ (delete-window)
+ (let ((buff (get-buffer-create eat-buffer-name)))
+ (cl-assert (and buff (buffer-live-p buff)))
+ (funcall #'pop-to-buffer buff)
+ (with-current-buffer buff
+ (setq-local split-width-threshold nil)
+ (setq-local window-min-height 2)
+ (unless (derived-mode-p 'eat-mode)
+ (eat))))))
+#+end_src
* LSP
#+begin_src emacs-lisp
(use-package lsp-mode
+ :custom
+ (lsp-completion-provider :none)
+
+ :init
+ (defun my/orderless-dispatch-flex-first (_pattern index _total)
+ (and (eq index 0) 'orderless-flex))
+
+ (defun my/lsp-mode-setup-completion ()
+ (setf (alist-get 'styles (alist-get 'lsp-capf completion-category-defaults))
+ '(orderless)))
+
+ (add-hook 'orderless-style-dispatchers #'my/orderless-dispatch-flex-first nil 'local)
+ (add-to-list 'completion-at-point-functions (cape-capf-buster #'lsp-completion-at-point))
+
:hook
- (python-mode . lsp)
- (rust-mode . lsp)
- (lsp-mode . lsp-enable-which-key-integration)
- (sh-mode . lsp)
- :commands lsp)
+ (lsp-completion-mode . my/lsp-mode-setup-completion))
#+end_src
** Languages
*** Python
#+begin_src emacs-lisp
(use-package lsp-pyright
- :ensure t)
+ :hook (python-mode . (lambda ()
+ (require 'lsp-pyright)
+ (lsp))))
+ (use-package py-autopep8
+ :hook (python-mode . py-autopep8-mode))
#+end_src
*** Rust
#+begin_src emacs-lisp
- (use-package rustic
- :ensure
- :bind (:map rustic-mode-map
- ("M-j" . lsp-ui-imenu)
- ("M-?" . lsp-find-references)
- ("C-c C-c l" . flycheck-list-errors)
- ("C-c C-c a" . lsp-execute-code-action)
- ("C-c C-c r" . lsp-rename)
- ("C-c C-c q" . lsp-workspace-restart)
- ("C-c C-c Q" . lsp-workspace-shutdown)
- ("C-c C-c s" . lsp-rust-analyzer-status))
- :config
- ;; uncomment for less flashiness
- ;; (setq lsp-eldoc-hook nil)
- ;; (setq lsp-enable-symbol-highlighting nil)
- ;; (setq lsp-signature-auto-activate nil)
-
- ;; comment to disable rustfmt on save
- (setq rustic-format-on-save t)
- (add-hook 'rustic-mode-hook 'rk/rustic-mode-hook))
- (use-package flycheck-rust
- :config
- (with eval-after-load 'rust-mode
- (add-hook 'flycheck-mode-hook #'flycheck-rust-setup)))
-
- (defun rk/rustic-mode-hook ()
- ;; so that run C-c C-c C-r works without having to confirm, but don't try to
- ;; save rust buffers that are not file visiting. Once
- ;; https://github.com/brotzeit/rustic/issues/253 has been resolved this should
- ;; no longer be necessary.
- (when buffer-file-name
- (setq-local buffer-save-without-query t))
- (add-hook 'before-save-hook 'lsp-format-buffer nil t))
+ (use-package rustic
+ :ensure
+ :bind (:map rustic-mode-map
+ ("M-j" . lsp-ui-imenu)
+ ("M-?" . lsp-find-references)
+ ("C-c C-c l" . flycheck-list-errors)
+ ("C-c C-c a" . lsp-execute-code-action)
+ ("C-c C-c r" . lsp-rename)
+ ("C-c C-c q" . lsp-workspace-restart)
+ ("C-c C-c Q" . lsp-workspace-shutdown)
+ ("C-c C-c s" . lsp-rust-analyzer-status))
+ :config
+ ;; uncomment for less flashiness
+ ;; (setq lsp-eldoc-hook nil)
+ ;; (setq lsp-enable-symbol-highlighting nil)
+ ;; (setq lsp-signature-auto-activate nil)
+
+ ;; comment to disable rustfmt on save
+ (setq rustic-format-on-save t))
+ (use-package flycheck-rust
+ :config
+ (with-eval-after-load 'rust-mode
+ (add-hook 'flycheck-mode-hook #'flycheck-rust-setup)))
#+end_src
*** Fish
#+begin_src emacs-lisp
@@ -528,44 +673,139 @@ every package is installed by nix and configured by use-package
*** Nix
#+begin_src emacs-lisp
(use-package nix-mode
- :mode "(.nix)$")
+ :mode ("\\.nix\\'" "\\.nix.in\\'"))
+ (use-package nix-drv-mode
+ :ensure nix-mode
+ :mode "\\.drv\\'")
+ (use-package nix-shell
+ :ensure nix-mode
+ :commands (nix-shell-unpack nix-shell-configure nix-shell-build))
+ (use-package nix-repl
+ :ensure nix-mode
+ :commands (nix-repl))
#+end_src
-** Corfu + cape
+*** Yuck
#+begin_src emacs-lisp
- (use-package corfu
- :custom
- (corfu-cycle t)
- (corfu-auto t)
- (corfu-preselect 'prompt)
- :bind
- (:map corfu-map
- ("TAB" . corfu-next)
- ([tab] . corfu-next)
- ("S-TAB" . corfu-previous)
- ([backtab] . corfu-previous))
- :init
- (global-corfu-mode))
+ (use-package yuck-mode)
#+end_src
+*** Web
#+begin_src emacs-lisp
- (use-package cape
- :init
- (add-to-list 'completion-at-point-functions #'cape-file))
+ (use-package web-mode
+ :config
+ (add-to-list 'auto-mode-alist '("\\.phtml\\'" . web-mode))
+ (add-to-list 'auto-mode-alist '("\\.tpl\\.php\\'" . web-mode))
+ (add-to-list 'auto-mode-alist '("\\.[agj]sp\\'" . web-mode))
+ (add-to-list 'auto-mode-alist '("\\.as[cp]x\\'" . web-mode))
+ (add-to-list 'auto-mode-alist '("\\.erb\\'" . web-mode))
+ (add-to-list 'auto-mode-alist '("\\.mustache\\'" . web-mode))
+ (add-to-list 'auto-mode-alist '("\\.djhtml\\'" . web-mode)))
#+end_src
+*** JavaScript
#+begin_src emacs-lisp
+ (use-package js2-mode)
+#+end_src
+** Corfu
+#+begin_src emacs-lisp
+ (use-package corfu
+ :custom
+ (corfu-cycle t)
+ (corfu-preselect 'prompt)
+ (corfu-auto t)
+ :bind
+ (:map corfu-map
+ ("TAB" . corfu-next)
+ ([tab] . corfu-next)
+ ("S-TAB" . corfu-previous)
+ ([backtab] . corfu-previous))
+
+ :init
+ (global-corfu-mode))
(use-package emacs
:init
(setq completion-cycle-threshold 3)
+
+ (setq read-extended-command-predicate
+ #'command-completion-default-include-p)
+
(setq tab-always-indent 'complete))
#+end_src
+*** Cape
+#+begin_src emacs-lisp
+ (use-package cape
+ ;; Bind dedicated completion commands
+ :bind (("C-c p p" . completion-at-point) ;; capf
+ ("C-c p t" . complete-tag) ;; etags
+ ("C-c p d" . cape-dabbrev) ;; or dabbrev-completion
+ ("C-c p h" . cape-history)
+ ("C-c p f" . cape-file)
+ ("C-c p k" . cape-keyword)
+ ("C-c p s" . cape-elisp-symbol)
+ ("C-c p e" . cape-elisp-block)
+ ("C-c p a" . cape-abbrev)
+ ("C-c p l" . cape-line)
+ ("C-c p w" . cape-dict)
+ ("C-c p :" . cape-emoji))
+ :init
+ (add-to-list 'completion-at-point-functions #'cape-dabbrev)
+ (add-to-list 'completion-at-point-functions #'cape-file)
+ (add-to-list 'completion-at-point-functions #'cape-elisp-block)
+ )
+#+end_src
+
** Flycheck
#+begin_src emacs-lisp
- (use-package flycheck
- :init (global-flycheck-mode))
+ (use-package flycheck
+ :init (global-flycheck-mode))
#+end_src
-*** Flycheck inline errors
+** Tree-sitter
#+begin_src emacs-lisp
- (use-package flycheck-inline
- :config
- (with-eval-after-load 'flycheck
- (add-hook 'flycheck-mode-hook #'flycheck-inline-mode)))
+ (use-package tree-sitter
+ :init
+ (global-tree-sitter-mode)
+ :config
+ (add-hook 'tree-sitter-mode-hook 'tree-sitter-hl-mode))
+#+end_src
+*** Additional langs
+#+begin_src emacs-lisp
+ (use-package tree-sitter-langs)
#+end_src
+** Snippets
+#+begin_src emacs-lisp
+ (use-package yasnippet
+ :init (yas-global-mode))
+ (use-package yasnippet-snippets)
+#+end_src
+* Additional apps
+** Telegram lol
+#+begin_src emacs-lisp
+ ;; (add-to-list 'load-path "~/telega.el")
+ ;; (require 'telega)
+#+end_src
+** Magit
+#+begin_src emacs-lisp
+ (use-package magit)
+#+end_src
+** EXWM
+#+begin_src emacs-lisp
+ ;; (use-package exwm)
+ ;; (require 'exwm)
+ ;; (require 'exwm-config)
+ ;; (exwm-config-example)
+#+end_src
+* Dired
+** Bindings
+#+begin_src emacs-lisp
+ (use-package dired
+ :ensure nil
+ :custom ((dired-listing-switches "-agho --group-directories-first"))
+ :bind (:map dired-mode-map
+ ("h" . 'dired-up-directory)
+ ("l" . 'dired-find-file)
+ ("v" . 'meow-visit)))
+#+end_src
+** Icons
+#+begin_src emacs-lisp
+ (use-package all-the-icons-dired
+ :init (add-hook 'dired-mode-hook 'all-the-icons-dired-mode))
+#+end_src
+