diff --git a/config/emacs/emacs.org b/config/emacs/emacs.org new file mode 100644 index 00000000..2a8de3f7 --- /dev/null +++ b/config/emacs/emacs.org @@ -0,0 +1,918 @@ +#+title: EMACS 2 +#+PROPERTY: header-args:emacs-lisp :tangle yes :tangle init.el +* Welcome! +#+begin_src emacs-lisp +;; -*- lexical-binding: t; -*- +#+end_src +* Package Setup +#+begin_src emacs-lisp + (message "Reached package setup") + + (require `package) + +(setq package-archives `(("mepla" . "https://melpa.org/packages/") + ("org" . "https://orgmode.org/elpa/") + ("elpa" . "https://elpa.gnu.org/packages/"))) + +(package-initialize) + +(unless (package-installed-p 'use-package) + (progn + (package-refresh-contents) + (package-install 'use-package))) + +(require 'use-package) +(setq use-package-always-ensure t) + +;; TODO add better detection to this +(when (eq system-type 'windows-nt) + (message "setting up straight.el") + (defvar bootstrap-version) + (let ((bootstrap-file + (expand-file-name + "straight/repos/straight.el/bootstrap.el" + (or (bound-and-true-p straight-base-dir) + user-emacs-directory))) + (bootstrap-version 7)) + (unless (file-exists-p bootstrap-file) + (with-current-buffer + (url-retrieve-synchronously + "https://raw.githubusercontent.com/radian-software/straight.el/develop/install.el" + 'silent 'inhibit-cookies) + (goto-char (point-max)) + (eval-print-last-sexp))) + (load bootstrap-file nil 'nomessage)) + (setq straight-use-package-by-default t)) +#+end_src +* Keybinds +Ill use this later eventually +#+begin_src emacs-lisp +(message "Got to keybinds") +#+end_src +* Core +#+begin_src elisp + (message "Reached core.") +#+end_src +** Encoding +#+begin_src emacs-lisp +(setq utf-translate-cjk-mode nil) ; disable CJK coding/encoding (Chinese/Japanese/Korean characters) +(set-language-environment 'utf-8) +(set-keyboard-coding-system 'utf-8) ; For old Carbon emacs on OS X only +(setq locale-coding-system 'utf-8) +(set-default-coding-systems 'utf-8) +(set-terminal-coding-system 'utf-8) +(set-selection-coding-system + (if (eq system-type 'windows-nt) + 'utf-16-le ;; https://rufflewind.com/2014-07-20/pasting-unicode-in-emacs-on-windows + 'utf-8)) +(prefer-coding-system 'utf-8) +#+end_src +** Cleanup .emacs.d +#+begin_src emacs-lisp +(setq backup-directory-alist '(("." . "~/.emacs.d/backup")) +backup-by-copying t +version-control t +delete-old-versions t +kept-new-versions 20 +kept-old-versions 5) + +(use-package no-littering + :config + (setq custom-file (if (boundp 'server-socket-dir) + (expand-file-name "custom.el" server-socket-dir) + (no-littering-expand-etc-file-name "custom.el"))) + (when (file-exists-p custom-file) + (load custom-file t)) + + ;; Don't litter project folders with backup files + (let ((backup-dir (no-littering-expand-var-file-name "backup/"))) + (make-directory backup-dir t) + (setq backup-directory-alist + `(("\\`/tmp/" . nil) + ("\\`/dev/shm/" . nil) + ("." . ,backup-dir)))) + + (setq auto-save-default nil) + + ;; Tidy up auto-save files + (setq auto-save-default nil) + (let ((auto-save-dir (no-littering-expand-var-file-name "auto-save/"))) + (make-directory auto-save-dir t) + (setq auto-save-file-name-transforms + `(("\\`/[^/]*:\\([^/]*/\\)*\\([^/]*\\)\\'" + ,(concat temporary-file-directory "\\2") t) + ("\\`\\(/tmp\\|/dev/shm\\)\\([^/]*/\\)*\\(.*\\)\\'" "\\3") + ("." ,auto-save-dir t))))) + +;; no-littering doesn't set this by default so we must place +;; auto save files in the same path as it uses for sessions +(setq auto-save-file-name-transforms + `((".*" ,(no-littering-expand-var-file-name "auto-save/") t))) +#+end_src +** Native Compilation +#+begin_src emacs-lisp +(setq native-comp-async-report-warnings-errors nil) + +(add-to-list 'native-comp-eln-load-path (expand-file-name "eln-cache/" user-emacs-directory)) +#+end_src +** Emacs settings +#+begin_src emacs-lisp +(setq inhibit-startup-message t) + +;; make emacs look a little more cleaner +(scroll-bar-mode -1) +(tool-bar-mode -1) +(tooltip-mode -1) +(set-fringe-mode 10) +(menu-bar-mode -1) + +;; this is really annoying i hate it +(setq visible-bell nil) + +;; -- core keybinds and packages -- +(repeat-mode 1) + +(column-number-mode) + +(dolist (mode '(text-mode-hook + prog-mode-hook + conf-mode-hook)) + (add-hook mode (lambda () (display-line-numbers-mode 1)))) +#+end_src +** Core Keybinds +#+begin_src emacs-lisp +(repeat-mode 1) + +(column-number-mode) + +(dolist (mode '(text-mode-hook + prog-mode-hook + conf-mode-hook)) + (add-hook mode (lambda () (display-line-numbers-mode 1)))) +#+end_src +** Appearance +#+begin_src emacs-lisp +;; TODO: change this for something better i guess +(use-package doom-themes + :config + (load-theme 'doom-monokai-pro t)) + +;; emacsclient things +(setq frame-resize-pixelwise t) +;; ui settings apparently go below +(setq default-frame-alist '((font . "JetBrainsMono NF") + '(vertical-scroll-bars . nil) + '(horizontal-scroll-bars . nil))) + +;; GO AWAY +(defun my/disable-scroll-bars (frame) + (modify-frame-parameters frame + '((vertical-scroll-bars . nil) + (horizontal-scroll-bars . nil)))) +(add-hook 'after-make-frame-functions 'my/disable-scroll-bars) + + +;; y/n is better than yes/no +(fset 'yes-or-no-p 'y-or-n-p) + +;; font +(set-face-attribute 'default nil + :font "JetBrainsMono NF" + :weight 'light + :height 125) +#+end_src +** Emacs Client +#+begin_src emacs-lisp +(setq frame-resize-pixelwise t) +;; ui settings apparently go below +(setq default-frame-alist '((font . "JetBrainsMono NF") + '(vertical-scroll-bars . nil) + '(horizontal-scroll-bars . nil))) +#+end_src +** Modeline +#+begin_src emacs-lisp +(use-package nerd-icons + :custom + (nerd-icons-font-family "JetBrainsMono NF")) +(use-package doom-modeline + :init (doom-modeline-mode 1)) +#+end_src +** Editor Configuration +#+begin_src emacs-lisp +(use-package super-save + :config + (super-save-mode +1) + (setq super-save-auto-save-when-idle t)) + +;; revert dired and other buffers +(setq global-auto-revert-non-file-buffers t) + +;; revert buffers when file has been changed +(global-auto-revert-mode 1) + +;; popups and stuff +(use-package popper + :bind (("C-M-'" . popper-toggle) + ("M-'" . popper-cycle) + ("C-M-\"" . popper-toggle-type)) + :custom + (popper-window-height 12) + (popper-reference-buffers '(eshell-mode + vterm-mode + geiser-repl-mode + help-mode + grep-mode + helpful-mode + compilation-mode)) + :config + (popper-mode 1)) +#+end_src +** Helpful +#+begin_src emacs-lisp +(use-package helpful + :custom + (counsel-describe-function-function #'helpful-callable) + (counsel-describe-variable-function #'helpful-variable) + :bind (([remap describe-function] . helpful-function) + ([remap describe-symbol] . helpful-symbol) + ([remap describe-variable] . helpful-variable) + ([remap describe-command] . helpful-command) + ([remap describe-key] . helpful-key))) +#+end_src +** Which Key +#+begin_src emacs-lisp +;; incase i get lost +(use-package which-key + :init (which-key-mode) + :diminish which-key-mode + :config + (setq which-key-idle-delay 1)) +#+end_src +** Alerts +#+begin_src emacs-lisp +(when (eq system-type 'windows-nt) + (use-package alert + :commands (alert) + :config (setq alert-default-style 'toast)) + + (use-package alert-toast + :after alert)) +#+end_src +** Daemon +#+begin_src emacs-lisp +(if (eq system-type 'windows-nt) + (setq server-socket-dir "~/.emacs.d/server")) +(server-start) +#+end_src +* Keys +#+begin_src emacs-lisp +(message "got to keys setup") +#+end_src +** General +#+begin_src emacs-lisp +(use-package general + :config + (general-create-definer sk/leader-keys + :keymaps '(normal insert visual emacs) + :prefix "SPC" + :global-prefix "C-SPC") + + (sk/leader-keys + ;; code + "c" '(:ignore c :which-key "code") + "cc" '(compile :which-key "compile") + "cC" '(recompile :which-key "compile") + "cX" '(lsp-treeemacs-errors-list :which-ley "list errors") + ;; toggles + "t" '(:ignore t :which-key "toggles") + "tt" '(counsel-load-theme :which-key "choose theme") + "ts" '(hydra-text-scale/body :which-key "scale text") + ;; search + "s" '(:ignore s :which-key "search") + "sb" '(swiper :which-key "search buffer") + ;; insert + "i" '(:ignore i :which-key "insert") + "ie" '(emoji-search :which-key "Emoji") + ;; project + "p" '(:ignore p :which-key "projects") + "pp" '(project-switch-project :which-key "open project") + "pk" '(project-kill-buffers :which-key "close project") + "pt" '(magit-todos-list :which-key "list project todos") + "ps" '(projectile-save-project-buffers :which-key "save project") + "po" '(projectile-find-other-file :which-key "find other file") + "pg" '(projectile-configure-project :which-key "configure project") + "pc" '(project-compile :which-key "compile project") + ;; open + "o" '(:ignore o :which-key "open") + "op" '(treemacs :which-key "treemacs") + "oP" '(treemacs-find-file :which-key "treemacs find file") + "oe" '(eshell :which-key "eshell") + "or" '(elfeed :which-key "rss") + ;; notes + "n" '(:ignore o :which-key "notes") + "na" '(org-agenda :which-key "agenda") + "nf" '(org-roam-node-find :which-key "find node") + "nc" '(org-capture :which-key "capture") + "np" '(org-pomodoro :which-key "pomodoro") + "ne" '(:ignore ne :which-key "export") + "nep" '(org-latex-export-to-pdf :which-key "pdf") + ;; quit + "q" '(:ignore q :which-key "quit") + "qq" '(delete-frame :which-key "close emacs") + "qK" '(kill-emacs :which-key "quit emacs") + ;; git + "g" '(:ignore g :which-key "git") + "gs" '(magit-status :which-key "status") + "gc" '(:ignore gc :which-key "create") + "gcr" '(magit-init :which-key "init repo") + "gcR" '(magit-clone :which-key "clone repo") + "gcc" '(magit-commit-create :which-key "commit") + "gci" '(forge-create-issue :which-key "issue") + "gcp" '(forge-create-pullreq :which-key "pull request"))) + +#+end_src +** Evil +#+begin_src emacs-lisp + +(use-package evil + :init + ;; Pre-load configuration + (setq evil-want-integration t) + (setq evil-want-keybinding nil) + (setq evil-want-C-u-scroll t) + (setq evil-want-C-i-jump nil) + (setq evil-respect-visual-line-mode t) + (setq evil-undo-system 'undo-tree) + :config + (evil-mode 1) + + ;; use emacs state for these mods + (dolist (mode '(custom-mode + eshell-mode + git-rebase-mode + erc-mode + circe-server-mode + circe-chat-mode + circe-query-mode + term-mode)) + (add-to-list 'evil-emacs-state-modes mode)) + + (defun sk/dont-arrow-me-bro () + (interactive) + (message "STOP USING THE ARROW KEYS!!!!!!!!!!!!!!!!!!!!!!!")) + + ;; Disable arrow keys in normal and visual modes + (define-key evil-normal-state-map (kbd "") 'sk/dont-arrow-me-bro) + (define-key evil-normal-state-map (kbd "") 'sk/dont-arrow-me-bro) + (define-key evil-normal-state-map (kbd "") 'sk/dont-arrow-me-bro) + (define-key evil-normal-state-map (kbd "") 'sk/dont-arrow-me-bro) + (evil-global-set-key 'motion (kbd "") 'sk/dont-arrow-me-bro) + (evil-global-set-key 'motion (kbd "") 'sk/dont-arrow-me-bro) + (evil-global-set-key 'motion (kbd "") 'sk/dont-arrow-me-bro) + (evil-global-set-key 'motion (kbd "") 'sk/dont-arrow-me-bro) + + (evil-set-initial-state 'messages-buffer-mode 'normal) + (evil-set-initial-state 'dashboard-mode 'normal)) + +(use-package evil-collection + :after evil + :custom + (evil-collection-outline-bind-tab-p nil) + :config + ;; Is this a bug in evil-collection? + (setq evil-collection-company-use-tng nil) + (delete 'lispy evil-collection-mode-list) + (delete 'org-present evil-collection-mode-list) + (evil-collection-init)) + +(use-package evil-org + :after (evil org) + :hook ((org-mode . evil-org-mode) + (org-agenda-mode . evil-org-mode)) + :config + (require 'evil-org-agenda) + (evil-org-set-key-theme '(navigation todo insert textobjects additional)) + (evil-org-agenda-set-keys)) + +(use-package evil-nerd-commenter +:bind ("M-/" . evilnc-comment-or-uncomment-lines)) + +(with-eval-after-load 'org + (evil-define-key '(normal insert visual) org-mode-map (kbd "C-j") 'org-next-visible-heading) + (evil-define-key '(normal insert visual) org-mode-map (kbd "C-k") 'org-previous-visible-heading) + (evil-define-key '(normal insert visual) org-mode-map (kbd "M-j") 'org-metadown) + (evil-define-key '(normal insert visual) org-mode-map (kbd "M-k") 'org-metaup)) +#+end_src +* Interface +#+begin_src emacs-lisp +(message "Got to interface") +#+end_src +** Hydra +#+begin_src emacs-lisp +(use-package hydra) +#+end_src +** Vertico +#+begin_src emacs-lisp +(use-package vertico + :bind (:map vertico-map + ("C-j" . vertico-next) + ("C-k" . vertico-previous) + ("C-f" . vertico-exit-input) + :map minibuffer-local-map + ("M-h" . vertico-directory-up)) + :custom + (vertico-cycle t) + + :init + (require 'vertico-directory) + (vertico-mode)) +#+end_src +** Marginalia +#+begin_src emacs-lisp +(use-package marginalia + :after vertico + :ensure t + :custom + (marginalia-annotators '(marginalia-annotators-heavy marginalia-annotators-light nil)) + :init + (marginalia-mode)) +#+end_src +** Consult +#+begin_src emacs-lisp +(use-package consult + :bind (("C-s" . consult-line) + ("C-M-l" . consult-imenu) + ("C-M-j" . consult-buffer) + ("C-x C-b" . consult-buffer) + :map minibuffer-local-map + ("C-r" . consult-history))) + + +(use-package consult-dir + :bind (("C-x C-d" . consult-dir) + :map vertico-map + ("C-x C-d" . consult-dir) + ("C-x C-j" . consult-dir-jump-file)) + + :custom + (consult-dir-project-list-function nil)) +#+end_src +** Orderless +#+begin_src emacs-lisp +(use-package orderless + :config + (orderless-define-completion-style orderless+initialism + (orderless-matching-styles '(orderless-initialism + orderless-literal + orderless-regexp))) + + (setq completion-styles '(orderless) + completion-category-defaults nil + orderless-matching-styles '(orderless-literal orderless-regexp) + completion-category-overrides + '((file (styles partial-completion))))) +#+end_src +** Embark +#+begin_src emacs-lisp +(use-package embark + :after vertico + :bind (("C-." . embark-act) + ("M-." . embark-dwim) + :map minibuffer-local-map + ("C-d" . embark-act) + :map embark-region-map + ("D" . denote-region)) + + :config + ;; Remove the mixed indicator to prevent the popup from being displayed + ;; automatically + (delete #'embark-mixed-indicator embark-indicators) + (add-to-list 'embark-indicators 'embark-minimal-indicator) + + ;; Use Embark to show command prefix help + (setq prefix-help-command #'embark-prefix-help-command)) + +(use-package embark-consult + :after embark) +#+end_src +** Corfu (Autocomplete) +#+begin_src emacs-lisp + (use-package corfu + :bind (:map corfu-map + ("C-j" . corfu-next) + ("C-k" . corfu-previous) + ("TAB" . corfu-insert) + ([tab] . corfu-insert) + ("C-f" . corfu-insert)) + :custom + (corfu-cycle t) + (corfu-auto t) + (corfu-preview-current nil) + (corfu-quit-at-boundary t) + (corfu-quit-no-match t) + (corfu-min-chars 1) + :config + (global-corfu-mode 1) + + (defun corfu-enable-in-minibuffer () + "Enable Corfu in the minibuffer if `completion-at-point' is bound." + (when (where-is-internal #'completion-at-point (list (current-local-map))) + ;; (setq-local corfu-auto nil) ;; Enable/disable auto completion + (setq-local corfu-echo-delay nil ;; Disable automatic echo and popup + corfu-popupinfo-delay nil) + (corfu-mode 1))) + + (add-hook 'minibuffer-setup-hook #'corfu-enable-in-minibuffer)) +#+end_src +** Dashboard +TODO +* Auth +#+begin_src emacs-lisp +(message "Reached auth") +#+end_src +** Pinentry +#+begin_src emacs-lisp + (unless (eq system-type 'windows-nt) + (use-package pinentry + :config + (setq epa-pinentry-mode 'loopback)) + (pinentry-start)) +#+end_src +** Password-Store +#+begin_src emacs-lisp +(use-package password-store + :bind (("C-c p p" . password-store-copy) + ("C-c p i" . password-store-insert) + ("C-c p g" . password-store-generate)) + :config + (setq password-store-password-length 12)) + +(use-package auth-source-pass + :config + (auth-source-pass-enable)) +#+end_src +** OAuth2 +this should be useful later +#+begin_src emacs-lisp +(use-package oauth2 + :ensure t) +#+end_src +* Shell +#+begin_src emacs-lisp +(message "Reached shell") +#+end_src +** EShell +#+begin_src emacs-lisp +(defun sk/configure-eshell () + ;; Save command history when commands are entered + (add-hook 'eshell-pre-command-hook 'eshell-save-some-history) + + ;; Truncate buffer for performance + (add-to-list 'eshell-output-filter-functions 'eshell-truncate-buffer) + + ;; Bind some useful keys for evil-mode + (evil-define-key '(normal insert visual) eshell-mode-map (kbd "C-r") 'counsel-esh-history) + (evil-define-key '(normal insert visual) eshell-mode-map (kbd "") 'eshell-bol) + (evil-normalize-keymaps) + + (setq eshell-history-size 10000 + eshell-buffer-maximum-lines 10000 + eshell-hist-ignoredups t + eshell-scroll-to-bottom-on-input t)) + +(use-package eshell-git-prompt) + + + (add-hook 'eshell-first-time-mode 'sakomacs/configure-eshell) + + (with-eval-after-load 'esh-opt + (setq eshell-destroy-buffer-when-process-dies t) + (setq eshell-visual-commands '("htop" "zsh" "vim")) + + (eshell-git-prompt-use-theme 'powerline)) +#+end_src +* Dev +#+begin_src emacs-lisp +(message "Reached dev") +#+end_src +** {} and () matching +#+begin_src emacs-lisp +(use-package smartparens + :hook (prog-mode . smartparens-mode) + :config + (sp-use-smartparens-bindings)) + +(use-package rainbow-delimiters + :hook (prog-mode . rainbow-delimiters-mode)) +#+end_src +** Compilation +#+begin_src emacs-lisp +(setq compilation-scroll-output t) + +(setq compilation-environment '("TERM=xterm-256color")) + +(defun sk/advice-compilation-filter (f proc string) + (funcall f proc (xterm-color-filter string))) + +(advice-add 'compilation-filter :around #'sk/advice-compilation-filter) + +(defun sk/auto-recompile-buffer () + (interactive) + (if (member #'recompile after-save-hook) + (remove-hook 'after-save-hook #'recompile t) + (add-hook 'after-save-hook #'recompile nil t))) +#+end_src +** Project.el +#+begin_src emacs-lisp +(setq project-switch-commands '((project-find-file "Find file" "f") (project-find-dir "Find dir" "d") (project-dired "Dired" "D") (consult-ripgrep "ripgrep" "g") (magit-project-status "Magit" "m"))) +#+end_src +** Eglot (LSP) +#+begin_src emacs-lisp +(use-package eglot + :bind (:map eglot-mode-map + ("C-c C-a" . eglot-code-actions) + ("C-c C-r" . eglot-rename)) + :config + (setq eglot-autoshutdown t + eglot-confirm-server-initiated-edits nil)) + +;; this'll make it so i don't have to use vscode every now and then +;; TODO:: WRITE NIX PACKAGE!!!!!!!!!!!!!! +(unless (eq system-type 'gnu/linux) + (use-package eglot-booster + :straight (eglot-booster :type git :host github :repo "jdtsmith/eglot-booster") + :after eglot + :config (eglot-booster-mode)) + ) +#+end_src +** Magit +#+begin_src emacs-lisp +(use-package magit + :bind ("C-M-;" . magit-status-here) + :custom + (magit-show-long-lines-warning nil) + (magit-display-buffer-function #'magit-display-buffer-same-window-except-diff-v1)) + +(use-package magit-todos + :after magit + :config + (magit-todos-mode)) + +;; -- magit forge -- +(use-package forge + :after magit) +(setq auth-sources '("~/.authinfo")) + +(defhydra sk/smerge-panel () + "smerge" + ("k" (smerge-prev) "prev change" ) + ("j" (smerge-next) "next change") + ("u" (smerge-keep-upper) "keep upper") + ("l" (smerge-keep-lower) "keep lower") + ("q" nil "quit" :exit t)) +#+end_src +** Formatting +#+begin_src emacs-lisp +(use-package apheleia + :hook (prog-mode . apheleia-mode)) +#+end_src +** Flycheck (Syntax Checking) +#+begin_src emacs-lisp +(use-package flycheck + :config + (global-flycheck-mode +1)) +#+end_src +* Languages +#+begin_src emacs-lisp +(message "Reached languages") +#+end_src +** HTML/CSS +#+begin_src emacs-lisp +(use-package web-mode + :hook (web-mode . eglot-ensure) + :mode ("\\.html\\'" + "\\.css\\'")) +#+end_src +** Javascript +#+begin_src emacs-lisp +(use-package js2-mode +:mode ("\\.js\\'" + "\\.jsx\\'") +:hook (js2-mode . eglot-ensure) +:config +(setq web-mode-markup-indent-offset 2) ; HTML +(setq web-mode-css-indent-offset 2) ; CSS +(setq web-mode-code-indent-offset 2) ; JS/JSX/TS/TSX +(setq web-mode-content-types-alist '(("jsx" . "\\.js[x]?\\'")))) +#+end_src +** Typescript +#+begin_src emacs-lisp +(use-package typescript-mode + :mode ("\\.ts\\'" + "\\.tsx\\'") + :hook (typescript-mode . eglot-ensure)) +#+end_src +** Astro +#+begin_src emacs-lisp + (define-derived-mode astro-mode web-mode "astro") + (setq auto-mode-alist + (append '((".*\\.astro\\'" . astro-mode)) + auto-mode-alist)) +#+end_src +** C/C++ +#+begin_src emacs-lisp +(add-hook 'c-mode-hook 'eglot-ensure) +(add-hook 'c++-mode-hook 'eglot-ensure) +#+end_src +** CMake +#+begin_src emacs-lisp +(use-package cmake-mode + :mode "CMakeLists.txt" + :hook (cmake-mode . eglot-ensure)) +#+end_src +** Lua +#+begin_src emacs-lisp +(use-package lua-mode + :mode "\\.lua\\'" + :hook (lua-mode . eglot-ensure)) +#+end_src +** Python +#+begin_src emacs-lisp +(use-package python-mode + :mode "\\.py\\'" + :hook (python-mode . eglot-ensure)) + +(use-package elpy +:after python-mode + +:custom +(elpy-rpc-python-command "python3") + +:config +(elpy-enable)) + +(use-package poetry + :config + (poetry-tracking-mode 1)) +#+end_src +** Yaml +#+begin_src emacs-lisp +(use-package nix-mode + :hook (nix-mode . eglot-ensure) + :mode "\\.nix\\'") +#+end_src +** Nix +#+begin_src emacs-lisp +(use-package nix-mode + :hook (nix-mode . eglot-ensure) + :mode "\\.nix\\'") +#+end_src +** Dart +#+begin_src emacs-lisp +(use-package dart-mode + :hook (dart-mode . eglot-ensure) +:mode "\\.dart\\'" ) +#+end_src +** Markdown +#+begin_src emacs-lisp +(use-package markdown-mode + :hook (markdown-mode . visual-line-mode)) + +(use-package markdown-preview-mode) +#+end_src +** GDScript +#+begin_src emacs-lisp +(use-package gdscript-mode + :hook (gdscript-mode . eglot-ensure) + :mode "\\.gd\\'") +#+end_src +** Rust +#+begin_src emacs-lisp +(use-package rust-mode + :hook (rust-mode . eglot-ensure) + :mode "\\.rs\\'") +#+end_src +* Social +#+begin_src emacs-lisp +(message "Reached social") +#+end_src +** Elcord (Discord rich precense) +#+begin_src emacs-lisp +(use-package elcord + :init + (setq elcord-display-buffer-details nil) + (setq elcord-use-major-mode-as-main-icon t) + ) +#+end_src +** Telegram +does NOT WORK ON WINDOWS +#+begin_src emacs-lisp +(unless (eq system-type 'windows-nt) + (use-package telega)) +#+end_src +** IRC +Will configure later +#+begin_src emacs-lisp +(use-package rcirc) +#+end_src +** RSS +Will configure later, (use elfeed protocol ok ty) +#+begin_src emacs-lisp +(use-package elfeed) +#+end_src +** Matrix +Ill set this up later as well +#+begin_src emacs-lisp +(use-package ement) +#+end_src +* Org +#+begin_src emacs-lisp +(message "Reached Org") +#+end_src +** Org mode configuration +#+begin_src emacs-lisp + (use-package org + :hook (org-mode . org-indent-mode) + :config + (setq org-ellipsis " ↓") + (setq org-agenda-start-with-log-mode t) + (setq org-log-done 'time) + (setq org-log-into-drawer t) + + ;; habits, useless for now though + ;; (require 'org-habit) + ;; (add-to-list 'org-modules 'org-habit) + ;; (setq org-habit-graph-column 60) + + ;; archive + (setq org-refile-targets + '(("archive.org" :maxlevel . 1))) + + ;; make sure to save everything after refiling + (advice-add 'org-refile :after 'org-save-all-org-buffers) + + ;; org agenda + (setq org-agenda-files + '("~/org/tasks.org" + "~/org/school.org" + "~/org/daily.org" + "~/org/irl.org" + "~/org/work.org")) + + ;; follow links + (setq org-return-follows-link t) + + ;; hide leading stars + (setq org-hide-leading-stars t) + (setq org-hide-emphasis-markers nil) + + ;; templates + (require 'org-tempo) + + ;; this'll come in handly later + (add-to-list 'org-structure-template-alist '("sh" . "src shell")) + (add-to-list 'org-structure-template-alist '("el" . "src emacs-lisp")) + (add-to-list 'org-structure-template-alist '("py" . "src python")) + + ;; more options + (setq org-todo-keywords + '((sequence "TODO(t)" "NEXT(n)" "|" "DONE(d!)") + (sequence "BACKLOG(b)" "PLAN(p)" "READY(r)" "ACTIVE(a)" "REVIEW(v)" "WAIT(w@/!)" "HOLD(h)" "|" "COMPLETED(c)" "CANCELED(k@)"))) + + ;; this is really useful + (setq org-startup-with-inline-images t) + + ;; i hope i actually use this eventually + (setq org-capture-templates + `(("t" "Tasks") + ("tt" "Task" entry (file+olp "~/org/tasks.org" "captured") + "* TODO %?\n %U\n %a\n %i" :empty-lines1))) + ) + + +#+end_src +** Org Roam +#+begin_src emacs-lisp +(use-package org-roam + :custom +g (org-roam-directory "~/org/notes") + :bind (("C-c n l" . org-roam-buffer-toggle) + ("C-c n f" . org-roam-node-find) + ("C-c n i" . org-roam-node-insert)) + :config + (org-roam-setup)) +#+end_src +** Org-wild-notifier +#+begin_src emacs-lisp +(use-package org-wild-notifier + :config + (org-wild-notifier-mode)) +#+end_src +** Org-Pomodoro +#+begin_src emacs-lisp +(use-package org-pomodoro) +#+end_src +* End +#+begin_src elisp + (message "Welcome to Emacs!") +#+end_src diff --git a/config/emacs/init.el b/config/emacs/init.el deleted file mode 100644 index 2a66ea12..00000000 --- a/config/emacs/init.el +++ /dev/null @@ -1,20 +0,0 @@ -;; -*- lexical-binding: t; -*- - -(add-to-list 'load-path '"~/.emacs.d/modules") - -;; important -(require 'sk-package) -(require 'sk-keybinds) - -(require 'sk-core) -(require 'sk-keys-general) -(require 'sk-keys-evil) -(require 'sk-interface) -(require 'sk-auth) -(require 'sk-shell) -(require 'sk-dev) -(require 'sk-dev-lang) -(require 'sk-social) -(require 'sk-org) - -(message "Welcome to Emacs!") diff --git a/config/emacs/modules/sk-auth.el b/config/emacs/modules/sk-auth.el deleted file mode 100644 index 4c039892..00000000 --- a/config/emacs/modules/sk-auth.el +++ /dev/null @@ -1,29 +0,0 @@ -;; -*- lexical-binding: t; -*- - -;;; -- Use Emacs for Pinentry ----- - -;; (use-package pinentry -;; :config -;; (unless (eq system-type 'windows-nt) -;; (setq epa-pinentry-mode 'loopback)) -;; (pinentry-start)) - -;;; -- Password Management ----- - -(use-package password-store - :bind (("C-c p p" . password-store-copy) - ("C-c p i" . password-store-insert) - ("C-c p g" . password-store-generate)) - :config - (setq password-store-password-length 12)) - -(use-package auth-source-pass - :config - (auth-source-pass-enable)) - -;;; -- OAuth2 ----- - -(use-package oauth2 - :ensure t) - -(provide 'sk-auth) diff --git a/config/emacs/modules/sk-core.el b/config/emacs/modules/sk-core.el deleted file mode 100644 index bfb9f8c2..00000000 --- a/config/emacs/modules/sk-core.el +++ /dev/null @@ -1,191 +0,0 @@ -;; -*- lexical-binding: t; -*- - -(message "Reached core") - -;; -- encoding -- -(setq utf-translate-cjk-mode nil) ; disable CJK coding/encoding (Chinese/Japanese/Korean characters) -(set-language-environment 'utf-8) -(set-keyboard-coding-system 'utf-8) ; For old Carbon emacs on OS X only -(setq locale-coding-system 'utf-8) -(set-default-coding-systems 'utf-8) -(set-terminal-coding-system 'utf-8) -(set-selection-coding-system - (if (eq system-type 'windows-nt) - 'utf-16-le ;; https://rufflewind.com/2014-07-20/pasting-unicode-in-emacs-on-windows - 'utf-8)) -(prefer-coding-system 'utf-8) - -;; -- cleaning up .emacs.d -- -(setq backup-directory-alist '(("." . "~/.emacs.d/backup")) -backup-by-copying t -version-control t -delete-old-versions t -kept-new-versions 20 -kept-old-versions 5) - -(use-package no-littering - :config - (setq custom-file (if (boundp 'server-socket-dir) - (expand-file-name "custom.el" server-socket-dir) - (no-littering-expand-etc-file-name "custom.el"))) - (when (file-exists-p custom-file) - (load custom-file t)) - - ;; Don't litter project folders with backup files - (let ((backup-dir (no-littering-expand-var-file-name "backup/"))) - (make-directory backup-dir t) - (setq backup-directory-alist - `(("\\`/tmp/" . nil) - ("\\`/dev/shm/" . nil) - ("." . ,backup-dir)))) - - (setq auto-save-default nil) - - ;; Tidy up auto-save files - (setq auto-save-default nil) - (let ((auto-save-dir (no-littering-expand-var-file-name "auto-save/"))) - (make-directory auto-save-dir t) - (setq auto-save-file-name-transforms - `(("\\`/[^/]*:\\([^/]*/\\)*\\([^/]*\\)\\'" - ,(concat temporary-file-directory "\\2") t) - ("\\`\\(/tmp\\|/dev/shm\\)\\([^/]*/\\)*\\(.*\\)\\'" "\\3") - ("." ,auto-save-dir t))))) - -;; no-littering doesn't set this by default so we must place -;; auto save files in the same path as it uses for sessions -(setq auto-save-file-name-transforms - `((".*" ,(no-littering-expand-var-file-name "auto-save/") t))) - -;; -- native compiliation -- - -;; oh my god SHUT UP -(setq native-comp-async-report-warnings-errors nil) - -;; make native compilation cache go to the user directory instead like NORMAL -(add-to-list 'native-comp-eln-load-path (expand-file-name "eln-cache/" user-emacs-directory)) - -;; -- emacs settings -- -(setq inhibit-startup-message t) - -;; make emacs look a little more cleaner -(scroll-bar-mode -1) -(tool-bar-mode -1) -(tooltip-mode -1) -(set-fringe-mode 10) -(menu-bar-mode -1) - -;; this is really annoying i hate it -(setq visible-bell nil) - -;; -- core keybinds and packages -- -(repeat-mode 1) - -(column-number-mode) - -(dolist (mode '(text-mode-hook - prog-mode-hook - conf-mode-hook)) - (add-hook mode (lambda () (display-line-numbers-mode 1)))) - -;; -- appearance -- -;; TODO: change this for something better i guess -(use-package doom-themes - :config - (load-theme 'doom-monokai-pro t)) - -;; emacsclient things -(setq frame-resize-pixelwise t) -;; ui settings apparently go below -(setq default-frame-alist '((font . "JetBrainsMono NF") - '(vertical-scroll-bars . nil) - '(horizontal-scroll-bars . nil))) - -;; GO AWAY -(defun my/disable-scroll-bars (frame) - (modify-frame-parameters frame - '((vertical-scroll-bars . nil) - (horizontal-scroll-bars . nil)))) -(add-hook 'after-make-frame-functions 'my/disable-scroll-bars) - - -;; y/n is better than yes/no -(fset 'yes-or-no-p 'y-or-n-p) - -;; font -(set-face-attribute 'default nil - :font "JetBrainsMono NF" - :weight 'light - :height 125) - -;; -- modeline -- -(use-package nerd-icons - :custom - (nerd-icons-font-family "JetBrainsMono NF")) -(use-package doom-modeline - :init (doom-modeline-mode 1)) - -;; -- editor configuration -- -(use-package super-save - :config - (super-save-mode +1) - (setq super-save-auto-save-when-idle t)) - -;; revert dired and other buffers -(setq global-auto-revert-non-file-buffers t) - -;; revert buffers when file has been changed -(global-auto-revert-mode 1) - -;; popups and stuff -(use-package popper - :bind (("C-M-'" . popper-toggle) - ("M-'" . popper-cycle) - ("C-M-\"" . popper-toggle-type)) - :custom - (popper-window-height 12) - (popper-reference-buffers '(eshell-mode - vterm-mode - geiser-repl-mode - help-mode - grep-mode - helpful-mode - compilation-mode)) - :config - (popper-mode 1)) - -;; -- helpful help -- -(use-package helpful - :custom - (counsel-describe-function-function #'helpful-callable) - (counsel-describe-variable-function #'helpful-variable) - :bind (([remap describe-function] . helpful-function) - ([remap describe-symbol] . helpful-symbol) - ([remap describe-variable] . helpful-variable) - ([remap describe-command] . helpful-command) - ([remap describe-key] . helpful-key))) - -;; -- which key -- -;; incase i get lost -(use-package which-key - :init (which-key-mode) - :diminish which-key-mode - :config - (setq which-key-idle-delay 1)) - -;; -- alerts -- -;; quick and dirty fix for windows alert.el -(when (eq system-type 'windows-nt) - (use-package alert - :commands (alert) - :config (setq alert-default-style 'toast)) - - (use-package alert-toast - :after alert)) - -;; -- daemon -(if (eq system-type 'windows-nt) - (setq server-socket-dir "~/.emacs.d/server")) -(server-start) - - -(provide 'sk-core) diff --git a/config/emacs/modules/sk-dev-lang.el b/config/emacs/modules/sk-dev-lang.el deleted file mode 100644 index c17735d8..00000000 --- a/config/emacs/modules/sk-dev-lang.el +++ /dev/null @@ -1,102 +0,0 @@ -;; -*- lexical-binding: t; -*- - -;; web -;; html/css -(use-package web-mode - :hook (web-mode . eglot-ensure) - :mode ("\\.html\\'" - "\\.css\\'")) - -;; js -(use-package js2-mode -:mode ("\\.js\\'" - "\\.jsx\\'") -:hook (js2-mode . eglot-ensure) -:config -(setq web-mode-markup-indent-offset 2) ; HTML -(setq web-mode-css-indent-offset 2) ; CSS -(setq web-mode-code-indent-offset 2) ; JS/JSX/TS/TSX -(setq web-mode-content-types-alist '(("jsx" . "\\.js[x]?\\'")))) - -;; ts -(use-package typescript-mode - :mode ("\\.ts\\'" - "\\.tsx\\'") - :hook (typescript-mode . eglot-ensure)) - -;; astro - (define-derived-mode astro-mode web-mode "astro") - (setq auto-mode-alist - (append '((".*\\.astro\\'" . astro-mode)) - auto-mode-alist)) - -;; c/c++ -(add-hook 'c-mode-hook 'eglot-ensure) -(add-hook 'c++-mode-hook 'eglot-ensure) - -;; cmake -(use-package cmake-mode - :mode "CMakeLists.txt" - :hook (cmake-mode . eglot-ensure)) - -(use-package lua-mode - :mode "\\.lua\\'" - :hook (lua-mode . eglot-ensure)) - - -;; python -(use-package python-mode - :mode "\\.py\\'" - :hook (python-mode . eglot-ensure)) - -(use-package elpy -:after python-mode - -:custom -(elpy-rpc-python-command "python3") - -:config -(elpy-enable)) - -(use-package poetry - :config - (poetry-tracking-mode 1)) - -;; haskell -(use-package haskell-mode - :mode "\\.hs\\'" - :hook (python-mode . eglot-ensure)) - -;; yaml -(use-package yaml-mode - :mode ("\\.yaml\\'" - "\\.yml\\'")) - -;; nix -(use-package nix-mode - :hook (nix-mode . eglot-ensure) - :mode "\\.nix\\'") - -;; dart -(use-package dart-mode - :hook (dart-mode . eglot-ensure) -:mode "\\.dart\\'" ) - -;; markdown -(use-package markdown-mode - :hook (markdown-mode . visual-line-mode)) - -(use-package markdown-preview-mode) - -;; gdscript -(use-package gdscript-mode - :hook (gdscript-mode . eglot-ensure) - :mode "\\.gd\\'") - -;; rust -(use-package rust-mode - :hook (rust-mode . eglot-ensure) - :mode "\\.rs\\'") - - -(provide 'sk-dev-lang) diff --git a/config/emacs/modules/sk-dev.el b/config/emacs/modules/sk-dev.el deleted file mode 100644 index 95a8185c..00000000 --- a/config/emacs/modules/sk-dev.el +++ /dev/null @@ -1,100 +0,0 @@ -;; -*- lexical-binding: t; -*- - -;; -- paren matching and other horrors of mankind - -(use-package smartparens - :hook (prog-mode . smartparens-mode) - :config - (sp-use-smartparens-bindings)) - -(use-package rainbow-delimiters - :hook (prog-mode . rainbow-delimiters-mode)) - -;; -- the compile command -- -(setq compilation-scroll-output t) - -(setq compilation-environment '("TERM=xterm-256color")) - -(defun sk/advice-compilation-filter (f proc string) - (funcall f proc (xterm-color-filter string))) - -(advice-add 'compilation-filter :around #'sk/advice-compilation-filter) - -(defun sk/auto-recompile-buffer () - (interactive) - (if (member #'recompile after-save-hook) - (remove-hook 'after-save-hook #'recompile t) - (add-hook 'after-save-hook #'recompile nil t))) - -;; -- project.el -- -(setq project-switch-commands '((project-find-file "Find file" "f") (project-find-dir "Find dir" "d") (project-dired "Dired" "D") (consult-ripgrep "ripgrep" "g") (magit-project-status "Magit" "m"))) -;; -- elgot (lsp thing) -- -(use-package eglot - :bind (:map eglot-mode-map - ("C-c C-a" . eglot-code-actions) - ("C-c C-r" . eglot-rename)) - :config - (setq eglot-autoshutdown t - eglot-confirm-server-initiated-edits nil)) - -;; this'll make it so i don't have to use vscode every now and then -;; TODO:: WRITE NIX PACKAGE!!!!!!!!!!!!!! -(unless (eq system-type 'gnu/linux) - (use-package eglot-booster - :straight (eglot-booster :type git :host github :repo "jdtsmith/eglot-booster") - :after eglot - :config (eglot-booster-mode)) - ) - -;; -- Magit -- -(use-package magit - :bind ("C-M-;" . magit-status-here) - :custom - (magit-show-long-lines-warning nil) - (magit-display-buffer-function #'magit-display-buffer-same-window-except-diff-v1)) - -(use-package magit-todos - :after magit - :config - (magit-todos-mode)) - -;; -- magit forge -- -(use-package forge - :after magit) -(setq auth-sources '("~/.authinfo")) - -(defhydra sk/smerge-panel () - "smerge" - ("k" (smerge-prev) "prev change" ) - ("j" (smerge-next) "next change") - ("u" (smerge-keep-upper) "keep upper") - ("l" (smerge-keep-lower) "keep lower") - ("q" nil "quit" :exit t)) - -;; -- formatting -- -(use-package apheleia - :hook (prog-mode . apheleia-mode)) - -;; -- autocompletition -- -(use-package company - :after eglot - :hook (eglot . company-mode) - :bind (:map company-active-map - ("" . company-complete-selection)) - (:map eglot-mode-map - ("" . company-indent-or-complete-common)) - :custom - (company-minimum-prefix-length 1) - (company-idle-delay 0) - (company-selection-wrap-around t) - (company-tooltip-align-annotations t)) - -(use-package company-box - :hook (company-mode . company-box-mode)) - -;; -- syntax checking -(use-package flycheck - :config - (global-flycheck-mode +1)) - -(provide 'sk-dev) diff --git a/config/emacs/modules/sk-interface.el b/config/emacs/modules/sk-interface.el deleted file mode 100644 index b60348fb..00000000 --- a/config/emacs/modules/sk-interface.el +++ /dev/null @@ -1,116 +0,0 @@ -;; -*- lexical-binding: t; -*- - -;; something text scale ig -(use-package hydra) - -;; this provides autocompletion -(use-package vertico - :bind (:map vertico-map - ("C-j" . vertico-next) - ("C-k" . vertico-previous) - ("C-f" . vertico-exit-input) - :map minibuffer-local-map - ("M-h" . vertico-directory-up)) - :custom - (vertico-cycle t) - - :init - (require 'vertico-directory) - (vertico-mode)) - -;; adds extra metadata -(use-package marginalia - :after vertico - :ensure t - :custom - (marginalia-annotators '(marginalia-annotators-heavy marginalia-annotators-light nil)) - :init - (marginalia-mode)) - -(use-package consult - :bind (("C-s" . consult-line) - ("C-M-l" . consult-imenu) - ("C-M-j" . consult-buffer) - ("C-x C-b" . consult-buffer) - :map minibuffer-local-map - ("C-r" . consult-history))) - - -(use-package consult-dir - :bind (("C-x C-d" . consult-dir) - :map vertico-map - ("C-x C-d" . consult-dir) - ("C-x C-j" . consult-dir-jump-file)) - - :custom - (consult-dir-project-list-function nil)) - - -(use-package orderless - :config - (orderless-define-completion-style orderless+initialism - (orderless-matching-styles '(orderless-initialism - orderless-literal - orderless-regexp))) - - (setq completion-styles '(orderless) - completion-category-defaults nil - orderless-matching-styles '(orderless-literal orderless-regexp) - completion-category-overrides - '((file (styles partial-completion))))) - -;; actions -(use-package embark - :after vertico - :bind (("C-." . embark-act) - ("M-." . embark-dwim) - :map minibuffer-local-map - ("C-d" . embark-act) - :map embark-region-map - ("D" . denote-region)) - - :config - ;; Remove the mixed indicator to prevent the popup from being displayed - ;; automatically - (delete #'embark-mixed-indicator embark-indicators) - (add-to-list 'embark-indicators 'embark-minimal-indicator) - - ;; Use Embark to show command prefix help - (setq prefix-help-command #'embark-prefix-help-command)) - -(use-package embark-consult - :after embark) - -;; autocomplete thingy like company mode i guess -(use-package corfu - :bind (:map corfu-map - ("C-j" . corfu-next) - ("C-k" . corfu-previous) - ("TAB" . corfu-insert) - ([tab] . corfu-insert) - ("C-f" . corfu-insert)) - :custom - (corfu-cycle t) - (corfu-auto t) - (corfu-preview-current nil) - (corfu-quit-at-boundary t) - (corfu-quit-no-match t) - - :config - (global-corfu-mode 1) - - (defun corfu-enable-in-minibuffer () - "Enable Corfu in the minibuffer if `completion-at-point' is bound." - (when (where-is-internal #'completion-at-point (list (current-local-map))) - ;; (setq-local corfu-auto nil) ;; Enable/disable auto completion - (setq-local corfu-echo-delay nil ;; Disable automatic echo and popup - corfu-popupinfo-delay nil) - (corfu-mode 1))) - - (add-hook 'minibuffer-setup-hook #'corfu-enable-in-minibuffer)) - -;; --- dashboard --- - - -(provide 'sk-interface) - diff --git a/config/emacs/modules/sk-keybinds.el b/config/emacs/modules/sk-keybinds.el deleted file mode 100644 index 39117f98..00000000 --- a/config/emacs/modules/sk-keybinds.el +++ /dev/null @@ -1,5 +0,0 @@ -;; -*- lexical-binding: t; -*- - -(message "Got to keybinds") - -(provide 'sk-keybinds) diff --git a/config/emacs/modules/sk-keys-evil.el b/config/emacs/modules/sk-keys-evil.el deleted file mode 100644 index 8ef7f092..00000000 --- a/config/emacs/modules/sk-keys-evil.el +++ /dev/null @@ -1,77 +0,0 @@ -;; -*- lexical-binding: t; -*- - -;; -- evil mode configuration -- - -(use-package evil - :init - ;; Pre-load configuration - (setq evil-want-integration t) - (setq evil-want-keybinding nil) - (setq evil-want-C-u-scroll t) - (setq evil-want-C-i-jump nil) - (setq evil-respect-visual-line-mode t) - (setq evil-undo-system 'undo-tree) - :config - (evil-mode 1) - - ;; use emacs state for these mods - (dolist (mode '(custom-mode - eshell-mode - git-rebase-mode - erc-mode - circe-server-mode - circe-chat-mode - circe-query-mode - term-mode)) - (add-to-list 'evil-emacs-state-modes mode)) - - (defun sk/dont-arrow-me-bro () - (interactive) - (message "STOP USING THE ARROW KEYS!!!!!!!!!!!!!!!!!!!!!!!")) - - ;; Disable arrow keys in normal and visual modes - (define-key evil-normal-state-map (kbd "") 'sk/dont-arrow-me-bro) - (define-key evil-normal-state-map (kbd "") 'sk/dont-arrow-me-bro) - (define-key evil-normal-state-map (kbd "") 'sk/dont-arrow-me-bro) - (define-key evil-normal-state-map (kbd "") 'sk/dont-arrow-me-bro) - (evil-global-set-key 'motion (kbd "") 'sk/dont-arrow-me-bro) - (evil-global-set-key 'motion (kbd "") 'sk/dont-arrow-me-bro) - (evil-global-set-key 'motion (kbd "") 'sk/dont-arrow-me-bro) - (evil-global-set-key 'motion (kbd "") 'sk/dont-arrow-me-bro) - - (evil-set-initial-state 'messages-buffer-mode 'normal) - (evil-set-initial-state 'dashboard-mode 'normal)) - -(use-package evil-collection - :after evil - :custom - (evil-collection-outline-bind-tab-p nil) - :config - ;; Is this a bug in evil-collection? - (setq evil-collection-company-use-tng nil) - (delete 'lispy evil-collection-mode-list) - (delete 'org-present evil-collection-mode-list) - (evil-collection-init)) - -(use-package evil-org - :after (evil org) - :hook ((org-mode . evil-org-mode) - (org-agenda-mode . evil-org-mode)) - :config - (require 'evil-org-agenda) - (evil-org-set-key-theme '(navigation todo insert textobjects additional)) - (evil-org-agenda-set-keys)) - -(use-package evil-nerd-commenter -:bind ("M-/" . evilnc-comment-or-uncomment-lines)) - -(with-eval-after-load 'org - (evil-define-key '(normal insert visual) org-mode-map (kbd "C-j") 'org-next-visible-heading) - (evil-define-key '(normal insert visual) org-mode-map (kbd "C-k") 'org-previous-visible-heading) - (evil-define-key '(normal insert visual) org-mode-map (kbd "M-j") 'org-metadown) - (evil-define-key '(normal insert visual) org-mode-map (kbd "M-k") 'org-metaup)) - -(provide 'sk-keys-evil) - - - diff --git a/config/emacs/modules/sk-keys-general.el b/config/emacs/modules/sk-keys-general.el deleted file mode 100644 index 0568c2c1..00000000 --- a/config/emacs/modules/sk-keys-general.el +++ /dev/null @@ -1,63 +0,0 @@ -;; -*- lexical-binding: t; -*- - -(use-package general - :config - (general-create-definer sk/leader-keys - :keymaps '(normal insert visual emacs) - :prefix "SPC" - :global-prefix "C-SPC") - - (sk/leader-keys - ;; code - "c" '(:ignore c :which-key "code") - "cc" '(compile :which-key "compile") - "cC" '(recompile :which-key "compile") - "cX" '(lsp-treeemacs-errors-list :which-ley "list errors") - ;; toggles - "t" '(:ignore t :which-key "toggles") - "tt" '(counsel-load-theme :which-key "choose theme") - "ts" '(hydra-text-scale/body :which-key "scale text") - ;; search - "s" '(:ignore s :which-key "search") - "sb" '(swiper :which-key "search buffer") - ;; insert - "i" '(:ignore i :which-key "insert") - "ie" '(emoji-search :which-key "Emoji") - ;; project - "p" '(:ignore p :which-key "projects") - "pp" '(project-switch-project :which-key "open project") - "pk" '(project-kill-buffers :which-key "close project") - "pt" '(magit-todos-list :which-key "list project todos") - "ps" '(projectile-save-project-buffers :which-key "save project") - "po" '(projectile-find-other-file :which-key "find other file") - "pg" '(projectile-configure-project :which-key "configure project") - "pc" '(project-compile :which-key "compile project") - ;; open - "o" '(:ignore o :which-key "open") - "op" '(treemacs :which-key "treemacs") - "oP" '(treemacs-find-file :which-key "treemacs find file") - "oe" '(eshell :which-key "eshell") - "or" '(elfeed :which-key "rss") - ;; notes - "n" '(:ignore o :which-key "notes") - "na" '(org-agenda :which-key "agenda") - "nf" '(org-roam-node-find :which-key "find node") - "nc" '(org-capture :which-key "capture") - "np" '(org-pomodoro :which-key "pomodoro") - "ne" '(:ignore ne :which-key "export") - "nep" '(org-latex-export-to-pdf :which-key "pdf") - ;; quit - "q" '(:ignore q :which-key "quit") - "qq" '(delete-frame :which-key "close emacs") - "qK" '(kill-emacs :which-key "quit emacs") - ;; git - "g" '(:ignore g :which-key "git") - "gs" '(magit-status :which-key "status") - "gc" '(:ignore gc :which-key "create") - "gcr" '(magit-init :which-key "init repo") - "gcR" '(magit-clone :which-key "clone repo") - "gcc" '(magit-commit-create :which-key "commit") - "gci" '(forge-create-issue :which-key "issue") - "gcp" '(forge-create-pullreq :which-key "pull request"))) - -(provide 'sk-keys-general) diff --git a/config/emacs/modules/sk-org.el b/config/emacs/modules/sk-org.el deleted file mode 100644 index bf7bf81c..00000000 --- a/config/emacs/modules/sk-org.el +++ /dev/null @@ -1,80 +0,0 @@ -;; -*- lexical-binding: t; -*- - -;; -- org mode config -- -(use-package org - :hook (org-mode . org-indent-mode) - :config - (setq org-ellipsis " ↓") - (setq org-agenda-start-with-log-mode t) - (setq org-log-done 'time) - (setq org-log-into-drawer t) - - ;; habits, useless for now though - ;; (require 'org-habit) - ;; (add-to-list 'org-modules 'org-habit) - ;; (setq org-habit-graph-column 60) - - ;; archive - (setq org-refile-targets - '(("archive.org" :maxlevel . 1))) - - ;; make sure to save everything after refiling - (advice-add 'org-refile :after 'org-save-all-org-buffers) - - ;; org agenda - (setq org-agenda-files - '("~/org/tasks.org" - "~/org/school.org" - "~/org/daily.org" - "~/org/irl.org" - "~/org/work.org")) - - ;; follow links - (setq org-return-follows-link t) - - ;; hide leading stars - (setq org-hide-leading-stars t) - (setq org-hide-emphasis-markers nil) - - ;; this'll come in handly later - (add-to-list 'org-structure-template-alist '("sh" . "src shell")) - (add-to-list 'org-structure-template-alist '("el" . "src emacs-lisp")) - (add-to-list 'org-structure-template-alist '("py" . "src python")) - - ;; more options - (setq org-todo-keywords - '((sequence "TODO(t)" "NEXT(n)" "|" "DONE(d!)") - (sequence "BACKLOG(b)" "PLAN(p)" "READY(r)" "ACTIVE(a)" "REVIEW(v)" "WAIT(w@/!)" "HOLD(h)" "|" "COMPLETED(c)" "CANCELED(k@)"))) - - ;; this is really useful - (setq org-startup-with-inline-images t) - - ;; i hope i actually use this eventually - (setq org-capture-templates - `(("t" "Tasks") - ("tt" "Task" entry (file+olp "~/org/tasks.org" "captured") - "* TODO %?\n %U\n %a\n %i" :empty-lines1))) - ) - -;; -- org roam -- - -(use-package org-roam - :custom - (org-roam-directory "~/org/notes") - :bind (("C-c n l" . org-roam-buffer-toggle) - ("C-c n f" . org-roam-node-find) - ("C-c n i" . org-roam-node-insert)) - :config - (org-roam-setup)) - -;; -- extra org packages -- - -;; notifications for tasks because i am forgetful -(use-package org-wild-notifier - :config - (org-wild-notifier-mode)) - -;; pomodoro for tasks -(use-package org-pomodoro) - -(provide 'sk-org) diff --git a/config/emacs/modules/sk-package.el b/config/emacs/modules/sk-package.el deleted file mode 100644 index c9953f5f..00000000 --- a/config/emacs/modules/sk-package.el +++ /dev/null @@ -1,41 +0,0 @@ -;; -*- lexical-binding: t; -*- - -(message "Reached package setup") - -(require `package) - -(setq package-archives `(("mepla" . "https://melpa.org/packages/") - ("org" . "https://orgmode.org/elpa/") - ("elpa" . "https://elpa.gnu.org/packages/"))) - -(package-initialize) - -(unless (package-installed-p 'use-package) - (progn - (package-refresh-contents) - (package-install 'use-package))) - -(require 'use-package) -(setq use-package-always-ensure t) - -;; TODO add better detection to this -(when (eq system-type 'windows-nt) - (message "setting up straight.el") - (defvar bootstrap-version) - (let ((bootstrap-file - (expand-file-name - "straight/repos/straight.el/bootstrap.el" - (or (bound-and-true-p straight-base-dir) - user-emacs-directory))) - (bootstrap-version 7)) - (unless (file-exists-p bootstrap-file) - (with-current-buffer - (url-retrieve-synchronously - "https://raw.githubusercontent.com/radian-software/straight.el/develop/install.el" - 'silent 'inhibit-cookies) - (goto-char (point-max)) - (eval-print-last-sexp))) - (load bootstrap-file nil 'nomessage)) - (setq straight-use-package-by-default t)) - -(provide 'sk-package) diff --git a/config/emacs/modules/sk-shell.el b/config/emacs/modules/sk-shell.el deleted file mode 100644 index 2ecd27aa..00000000 --- a/config/emacs/modules/sk-shell.el +++ /dev/null @@ -1,33 +0,0 @@ -;; -*- lexical-binding: t; -*- - -(defun sk/configure-eshell () - ;; Save command history when commands are entered - (add-hook 'eshell-pre-command-hook 'eshell-save-some-history) - - ;; Truncate buffer for performance - (add-to-list 'eshell-output-filter-functions 'eshell-truncate-buffer) - - ;; Bind some useful keys for evil-mode - (evil-define-key '(normal insert visual) eshell-mode-map (kbd "C-r") 'counsel-esh-history) - (evil-define-key '(normal insert visual) eshell-mode-map (kbd "") 'eshell-bol) - (evil-normalize-keymaps) - - (setq eshell-history-size 10000 - eshell-buffer-maximum-lines 10000 - eshell-hist-ignoredups t - eshell-scroll-to-bottom-on-input t)) - -(use-package eshell-git-prompt) - - - (add-hook 'eshell-first-time-mode 'sakomacs/configure-eshell) - - (with-eval-after-load 'esh-opt - (setq eshell-destroy-buffer-when-process-dies t) - (setq eshell-visual-commands '("htop" "zsh" "vim")) - - (eshell-git-prompt-use-theme 'powerline)) - -;; TODO do more stuff with this ig - -(provide 'sk-shell) diff --git a/config/emacs/modules/sk-social.el b/config/emacs/modules/sk-social.el deleted file mode 100644 index 04d3a6b0..00000000 --- a/config/emacs/modules/sk-social.el +++ /dev/null @@ -1,34 +0,0 @@ -;; -*- lexical-binding: t; -*- - -;; discord rpc -(use-package elcord - :init - (setq elcord-display-buffer-details nil) - (setq elcord-use-major-mode-as-main-icon t) - ) - -;; telegram -(unless (eq system-type 'windows-nt) - (use-package telega)) - -;; TODO:: Make nix package for this -;; send files and images and other shit over IRC!!!! -(unless (eq system-type 'gnu/linux) - (use-package 0x0 - :straight (0x0 :type git :host sourcehut :repo "willvaughn/emacs-0x0"))) - -;; -- irc -- -;; ill get to configuring this later -(use-package rcirc) - -;; -- rss -- -;; ill also get to configuring this later -;; reminder, use elfeed protocol ok tysm thanks -(use-package elfeed) - -;; -- matrix -- -;; todo setup this later -(use-package ement) - - -(provide 'sk-social) diff --git a/modules/dev/editors/emacs/default.nix b/modules/dev/editors/emacs/default.nix index 546d58a7..0d28fa18 100644 --- a/modules/dev/editors/emacs/default.nix +++ b/modules/dev/editors/emacs/default.nix @@ -5,26 +5,34 @@ lib, pkgs, inputs, - trivialBuild, ... }: with lib; let cfg = config.modules.dev.editors.emacs; + myEmacs = pkgs.emacsWithPackagesFromUsePackage { - #config = ../../../../config/emacs/emacs.org; - config = ../../../../config/emacs/init.el; + config = ../../../../config/emacs/emacs.org; package = cfg.package; alwaysEnsure = true; - #alwaysTangle = true; - defaultInitFile = true; + alwaysTangle = true; extraEmacsPackages = epkgs: [ epkgs.use-package epkgs.mu4e - pkgs.sako.sakomacsModules # TODO make this check if EXWM is enabled or not epkgs.exwm +# epkgs.sakomodules ]; + # override for modules +# override = epkgs: epkgs // { +# sakomodules = epkgs.trivialBuild { +# pname = "sakomodules"; +# version = "lol"; + +# src = ../../../../config/emacs/modules; + +# }; +# }; }; in { options.modules.dev.editors.emacs = { @@ -76,13 +84,12 @@ in { home-manager.users.sako = {lib, ...}: { home.file = { - # ".emacs.d/init.el".source = pkgs.runCommand "init.el" {} '' - # cp ${../../../../config/emacs/emacs.org} emacs.org - # ${pkgs.emacs}/bin/emacs -Q --batch ./emacs.org -f org-babel-tangle - # mv init.el $out - # ''; + ".emacs.d/init.el".source = pkgs.runCommand "init.el" {} '' + cp ${../../../../config/emacs/emacs.org} emacs.org + ${pkgs.emacs}/bin/emacs -Q --batch ./emacs.org -f org-babel-tangle + mv init.el $out + ''; #".emacs.d/dashboard.png".source = ../../../../config/emacs/dashboard.png; - ".emacs.d/modules".source = ../../../../config/emacs/modules; }; }; diff --git a/packages/default.nix b/packages/default.nix index ef9ce186..2aa2711e 100644 --- a/packages/default.nix +++ b/packages/default.nix @@ -4,5 +4,4 @@ # example = pkgs.callPackage ./example { }; sako.davinci-resolve = pkgs.callPackage ./davinci-resolve.nix {}; nullpomino = pkgs.callPackage ./nullpomino.nix {}; - sako.sakomacsModules = pkgs.callPackage ./sakomacsModules.nix {}; } diff --git a/packages/sakomacsModules.nix b/packages/sakomacsModules.nix deleted file mode 100644 index 46d99191..00000000 --- a/packages/sakomacsModules.nix +++ /dev/null @@ -1,21 +0,0 @@ -{ -trivialBuild -, lib -}: - -trivialBuild { - pname = "sakomacsModules"; - version = "lol"; - src = ../../../../config/emacs/modules; - - postInstall = '' - cp -r $src $LISPDIR - ''; - - meta = { - description = "lol"; - license = lib.licenses.gpl3; - platforms = lib.platforms.all; - }; - -}