From d16144e9a674a41a352f4d49b94fbcda47a3a810 Mon Sep 17 00:00:00 2001 From: Sakooooo <78461130+Sakooooo@users.noreply.github.com> Date: Fri, 14 Jun 2024 15:07:15 +0000 Subject: [PATCH] emacs time 2 --- config/emacs-bak/dashboard.png | Bin 0 -> 68901 bytes config/emacs-bak/emacs.org | 1579 ++++++++++++++++++++++++++++++++ 2 files changed, 1579 insertions(+) create mode 100644 config/emacs-bak/dashboard.png create mode 100644 config/emacs-bak/emacs.org diff --git a/config/emacs-bak/dashboard.png b/config/emacs-bak/dashboard.png new file mode 100644 index 0000000000000000000000000000000000000000..725d15562f2cea7747871d3fb60a79fac9a782c4 GIT binary patch literal 68901 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­yVhCX1)M(-Ur%v0o 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 KOIJvm1pFTr0~v$> literal 0 HcmV?d00001 diff --git a/config/emacs-bak/emacs.org b/config/emacs-bak/emacs.org new file mode 100644 index 00000000..f6b8fb52 --- /dev/null +++ b/config/emacs-bak/emacs.org @@ -0,0 +1,1579 @@ +#+title: Sako's Emacs configuration +#+PROPERTY: header-args:emacs-lisp :tangle yes :tangle init.el +* Usage +M-x org-bable-tangle +* Lexical Binding +Should make startup faster, taken from doom-emacs +#+begin_src emacs-lisp +;; -*- lexical-binding: t; -*- +#+end_src +* Default Enconding +#+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 +* Put Backup Files Somewhere else +#+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) +#+end_src + +* EmacsClient UI +#+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 +* UI +#+begin_src emacs-lisp + ;; UI/UX + (setq inhibit-splash-screen t) + ;; remove useless GUI elements + (scroll-bar-mode -1) + (tool-bar-mode -1) + (tooltip-mode -1) + (set-fringe-mode 10) + (menu-bar-mode -1) + ;; Line Numbers + (column-number-mode) + ;; Bell + (setq visible-bell nil) + ;; prefer y/n + (fset 'yes-or-no-p 'y-or-n-p) + ;; delet eseciotn + (delete-selection-mode +1) + ;; Stop Emacs from trying to use dialog boxes. + (setq use-dialog-box nil) + ;; idc emacs just work already + (setq warning-minimum-level :emergency) +#+end_src +* Line Numbers +#+begin_src emacs-lisp + (add-hook 'prog-mode 'display-line-numbers-mode) + (add-hook 'yaml-mode 'display-line-numbers-mode) + (add-hook 'conf-mode 'display-line-numbers-mode) + (setq display-line-numbers-width-start t) + (setq display-line-numbers-type 'relative) +#+end_src +* Keymaps +#+begin_src emacs-lisp + ;; switch buffers + (global-set-key (kbd "C-M-j") 'counsel-switch-buffer) + ;; instead of control-g + (global-set-key (kbd "") 'keyboard-escape-quit) + ;; repeat keybinds + (repeat-mode) + ;; electric pairs + (electric-pair-mode) +#+end_src +* Fonts +#+begin_src emacs-lisp + (set-face-attribute `default nil :font "JetBrainsMono NF" :height 125) + + ;; fix emojis + (setf use-default-font-for-symbols nil) + (set-fontset-font t 'unicode "Noto Color Emoji" nil 'append) +#+end_src +* Use-Package setup +#+begin_src emacs-lisp + (message "setting up use-package") + (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) +#+end_src +* Straight.el +We only enable Straight.el for anything other than NixOS +Cause emacs overlay lol +#+begin_src emacs-lisp + ;; TODO Test this on darwin someday + (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 +* SPEED SPEED SPEED SPEED +** Notify +#+begin_src emacs-lisp +(message "making emacs faster") +#+end_src +** Avoid Garbage Collection at startup +#+begin_src emacs-lisp + (use-package gcmh + :init + (setq gcmh-idle-delay 5) + (setq gcmh-high-cons-threshold (* 16 1024 1024)) + :config + (gcmh-mode)) +#+end_src +** Move Garbage collection further back +#+begin_src emacs-lisp +(setq gc-cons-threshold most-positive-fixnum) +#+end_src +** Unset file-name-handler-alist temporarily +#+begin_src emacs-lisp +(defvar sakomacs--file-name-handler-alist file-name-handler-alist) +(setq file-name-handler-alist nil) + +;; Alternatively, restore it even later: +(add-hook 'emacs-startup-hook + (lambda () + (setq file-name-handler-alist sakomacs--file-name-handler-alist))) +#+end_src +** Go back to normal GC after init +#+begin_src emacs-lisp + (add-hook 'emacs-startup-hook + (lambda () + ;;(setq gc-cons-threshold 16777216 ; 16mb + ;; this could be really bad idk + (setq gc-cons-threshold 100000000 + gc-cons-percentage 0.1))) +#+end_src +** Don't use GC when minibuffer is used +#+begin_src emacs-lisp +(defun doom-defer-garbage-collection-h () + "Disable garbage collection." + (setq gc-cons-threshold most-positive-fixnum)) + +(defun doom-restore-garbage-collection-h () + "Restore garbage collection." + (run-at-time + 1 nil (lambda () (setq gc-cons-threshold 16777216)))) + +(add-hook 'minibuffer-setup-hook #'doom-defer-garbage-collection-h) +(add-hook 'minibuffer-exit-hook #'doom-restore-garbage-collection-h) +#+end_src +** Make Emacs read more +#+begin_src emacs-lisp +(setq read-process-output-max (* 1024 1024)) ;; 1mb +#+end_src +* Native Compilation +#+begin_src emacs-lisp + (setq package-native-compile t) + (setq comp-deferred-compilation t) + (setq native-comp-deferred-compilation-deny-list nil) + (setq warning-suppress-log-types '((comp))) +#+end_src +* Custom Modeline +#+begin_src emacs-lisp + ;;ill continue making this later + ;; (setq mode-line-format nil) + + ;; (kill-local-variable 'mode-line-format) + + ;; (force-mode-line-update) + + ;; (setq-default mode-line-format + ;; '((:eval (sakoline-render + ;; ;; left + ;; (quote ("%e" + ;; sakoline-evil-mode + ;; " " + ;; sakoline-buffer-name + ;; " " + ;; sakoline-buffer-state)) + ;; ;; right + ;; (quote (sakoline-major-mode + ;; ) + ;; ))))) + + ;; (defun sakoline-render (left right) + ;; "Return a string of `window-width' length. + ;; Containing LEFT, and RIGHT aligned respectively." + ;; (let ((available-width + ;; (- (window-total-width) + ;; (+ (length (format-mode-line left)) + ;; (length (format-mode-line right)))))) + ;; (append left + ;; (list (format (format "%%%ds" available-width) "")) + ;; right))) + + ;; (defvar-local sakoline-buffer-name + ;; '(:eval + ;; (propertize (buffer-name) 'face '(:foreground "#ffffff"))) + ;; "Mode line variable that shows the buffer name.") + + ;; (put 'sakoline-buffer-name 'risky-local-variable t) + + ;; (defface sakoline-major-mode-color + ;; '((t :foreground "grey")) + ;; "Major Mode color for sakoline.") + + ;; (defun sakoline--major-mode-name () + ;; "Return Capitalized Major Mode" + ;; (capitalize (symbol-name major-mode))) + + ;; (defvar-local sakoline-major-mode + ;; '(:eval + ;; (propertize (sakoline--major-mode-name) 'face 'sakoline-major-mode-color))) + + ;; (put 'sakoline-major-mode 'risky-local-variable t) + + ;; (defface sakoline-evil-visual-color + ;; '((t :background "#6600cc" :foreground "black")) + ;; "Evil Visual Color") + + ;; (defface sakoline-evil-normal-color + ;; '((t :background "#99ff99" :foreground "black")) + ;; "Evil Visual Color") + + ;; (defface sakoline-evil-insert-color + ;; '((t :background "#00cc66" :foreground "black")) + ;; "Evil Visual Color") + + ;; (defface sakoline-evil-emacs-color + ;; '((t :background "#9900ff" :foreground "black")) + ;; "Evil Visual Color") + + ;; (defface sakoline-evil-operator-color + ;; '((t :background "#ff3300" :foreground "black")) + ;; "Evil Visual Color") + + ;; (defvar-local sakoline-evil-mode + ;; '(:eval (cond + ;; ((eq evil-state 'visual) (propertize " VISUAL " 'face 'sakoline-evil-visual-color )) + ;; ((eq evil-state 'normal) (propertize " NORMAL " 'face 'sakoline-evil-normal-color )) + ;; ((eq evil-state 'insert) (propertize " INSERT " 'face 'sakoline-evil-insert-color )) + ;; ((eq evil-state 'emacs) (propertize " EMACS " 'face 'sakoline-evil-emacs-color )) + ;; ((eq evil-state 'operator) (propertize " OPERATOR " 'face 'sakoline-evil-operator-color)) + ;; "Get current evil mode state"))) + + ;; (put 'sakoline-evil-mode 'risky-local-variable t) + + ;; (defface sakoline-buffer-state-readonly + ;; '((t :foreground "red")) + ;; "Face for read-only buffer") + ;; (defface sakoline-buffer-state-modified + ;; '((t :foreground "orange")) + ;; "Face for modified buffer") + + ;; (defvar-local sakoline-buffer-state + ;; '(:eval + ;; (cond + ;; (buffer-read-only + ;; (propertize ">:(" + ;; 'face 'sakoline-buffer-state-readonly + ;; 'help-echo "buffer is read only")) + ;; ((buffer-modified-p) + ;; (propertize "!!!" + ;; 'face 'sakoline-buffer-state-modified))))) + + ;; (put 'sakoline-buffer-state 'risky-local-variable t) + +#+end_src +* Packages +** Log state +#+begin_src emacs-lisp +(message "setting up packages") +#+end_src +** Command Log Mode +#+begin_src emacs-lisp + (use-package command-log-mode + ) +#+end_src +** Command Autocompletion Packages +#+begin_src emacs-lisp + ;; better search + (use-package swiper + ) + ;; better commands + (use-package counsel + :custom + (counsel-linux-app-format-function #'counsel-linux-app-format-function-name-only) + ) + ;; autocompletion on commands (?) + (use-package ivy + :diminish + :bind (("C-s" . swiper) + :map ivy-minibuffer-map + ("TAB" . ivy-alt-done) + ("C-l" . ivy-alt-done) + ("C-j" . ivy-next-line) + ("C-k" . ivy-previous-line) + :map ivy-switch-buffer-map + ("C-k" . ivy-previous-line) + ("C-l" . ivy-done) + ("C-d" . ivy-switch-buffer-kill) + :map ivy-reverse-i-search-map + ("C-k" . ivy-previous-line) + ("C-d" . ivy-reverse-i-search-kill)) + :demand + :config + (ivy-mode 1)) + ;; better ivy autocompletion + (use-package ivy-rich + :init + (ivy-rich-mode 1)) + + ;; ivy in the middle + (use-package ivy-posframe + :init + (setq ivy-posframe-display-functions-alist '((t . ivy-posframe-display-at-frame-center))) + :config + (ivy-posframe-mode 1)) + + ;; counsel M+X + (use-package counsel + :bind (("M-x" . counsel-M-x) + ("C-x b" . counsel-ibuffer) + ("C-x C-f" . counsel-find-file) + :map minibuffer-local-map + ("C-r" . 'counsel-minibuffer-history)) + :config + (setq ivy-inital-inputs-alist nil)) +#+end_src +** Custom Themes +#+begin_src emacs-lisp + (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 the theme + (load-theme 'doom-badger t) + + (doom-themes-org-config) + + (doom-themes-treemacs-config) + + ;; Enable flashing mode-line on errors + (doom-themes-visual-bell-config)) + +#+end_src +** All the Icons (to make doom-themes happy) +#+begin_src emacs-lisp +(use-package all-the-icons) +#+end_src +** Nerd-Fonts (All of the Icons doesnt work for me) +#+begin_src emacs-lisp +(use-package nerd-icons + :custom + ;; "Symbols Nerd Font Mono" is the default and is recommended + ;; but you can use any other Nerd Font if you want + (nerd-icons-font-family "JetBrainsMono NF") + ) +#+end_src +** Rainbow Delimiters +#+begin_src emacs-lisp +(use-package rainbow-delimiters + :hook (prog-mode . rainbow-delimiters-mode)) +#+end_src +** Keybinding autocompletion +#+begin_src emacs-lisp + (use-package which-key + :init (which-key-mode) + :diminish which-key-mode + :config + (setq which-key-idle-delay 1)) +#+end_src +** Custom Modeline +#+begin_src emacs-lisp + (use-package doom-modeline + :ensure t + ;; :hook (after-init . doom-modeline-mode) + :init (doom-modeline-mode 1) + :custom ( + (doom-modeline-height 35) + (doom-modeline-bar-width 4) + (doom-modeline-major-mode-icon nil) + (doom-modeline-modal-modern-icon nil) + )) + + ;; (use-package telephone-line + ;; :init + ;; (telephone-line-mode 1)) +#+end_src +** Hide Modeline +#+begin_src emacs-lisp + (use-package hide-mode-line + :hook (((treemacs-mode + eshell-mode shell-mode + term-mode vterm-mode + embark-collect-mode + lsp-ui-imenu-mode + pdf-annot-list-mode + dashboard-mode) . turn-on-hide-mode-line-mode) + (dired-mode . turn-off-hide-mode-line-mode))) +#+end_src +** Minor mode menu for modline +#+begin_src emacs-lisp + (use-package minions + :hook (doom-modeline-mode . minions-mode)) +#+end_src +** Better help menu +#+begin_src emacs-lisp +(use-package helpful + :custom + (counsel-describe-function-function #'helpful-callable) + (counsel-describe-variable-function #'helpful-variable) + :bind + ([remap describe-function ] . counsel-describe-function) + ([remap describe-command] . helpful-command) + ([remap describe-variable] . counsel-describe-variable) + ([remap describe-key] . helpful-key)) +#+end_src +** General Leader Key +#+begin_src emacs-lisp + (use-package general + :config + (general-create-definer sakomacs/leader-keys + :keymaps '(normal insert visual emacs) + :prefix "SPC" + :global-prefix "C-SPC") + + (sakomacs/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" '(projectile-switch-project :which-key "open project") + "pk" '(projectile-kill-buffers :which-key "close project") + "pa" '(projectile-add-known-project :which-key "add project") + "pR" '(projectile-run-project :which-key "run 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" '(projectile-compile-project :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 +** Dashboard +#+begin_src emacs-lisp + (use-package dashboard + :init + (setq dashboard-display-icons-p t) ;; display icons on both GUI and terminal + (setq dashboard-icon-type 'nerd-icons) ;; use `nerd-icons' package + (setq initial-buffer-choice (lambda () (get-buffer-create "*dashboard*"))) + (setq dashboard-center-content t) + (setq dashboard-projects-backend 'projectile) + (setq dashboard-startup-banner "~/.emacs.d/dashboard.png") + (setq dashboard-footer-messages '("i think i have emacs pinky" + "why are we still using lisp again?" + "why is this running on 1/16 threads?!?!?" + "still waiting for multithreaded :)" + "any day now" + "make sure to pray today" + "im literally kanye west" + "please dont break please dont break" + "GNU/Linux/Emacs/???" + "what is a GNU/Linux ?????????????" + "done!" + "remove / for faster emacs on linux" + "")) + (setq dashboard-items '((recents . 3) + (projects . 3) + (agenda . 5))) + + (setq dashboard-image-banner-max-height 200) + ;; (setq dashboard-image-banner-max-width 300) + + (setq dashboard-page-separator "\n\n") + (setq initial-buffer-choice (lambda () (get-buffer "*dashboard*"))) + (dashboard-setup-startup-hook)) +#+end_src +** Evil Mode (vim) +#+begin_src emacs-lisp + (use-package evil + :init + (setq evil-want-integration t) + (setq evil-want-keybinding nil) + (setq evil-want-C-u-scroll t) + (setq evil-want-C-i-jump nil) + :demand + :config + (evil-mode 1) + (define-key evil-insert-state-map (kbd "C-g") 'evil-normal-state) + (define-key evil-insert-state-map (kbd "C-h") `evil-delete-backward-char-and-join) + + ;; visual line motion + (evil-global-set-key 'motion "j" 'evil-next-visual-line) + (evil-global-set-key 'motion "k" 'evil-previous-visual-line) + + (evil-set-initial-state 'messages-buffer-mode 'normal) + (evil-set-initial-state 'dashboard-mode 'normal)) + + ;; extra things for Evil + (use-package evil-collection + :after evil + :config + (evil-collection-init)) + + ;; commenting + (use-package evil-commentary + :after evil + :diminish + :config (evil-commentary-mode +1)) +#+end_src +** Hydra for scaling text +#+begin_src emacs-lisp + (use-package hydra) + (defhydra hydra-text-scale (:timeout 4) + "scale text" + ("j" text-scale-increase "in") + ("k" text-scale-decrease "out") + ("f" nil "finished" :exit t)) +#+end_src +** Helpful for projects +#+begin_src emacs-lisp + (use-package projectile + :diminish projectile-mode + :demand + :config (projectile-mode) + :custom ((projectile-completion-system 'ivy)) + :bind-keymap + ("C-c p" . projectile-command-map) + :init + (when (file-directory-p "~/dev") + (setq projectile-project-search-path '("~/dev"))) + (setq projectile-switch-project-action #'projectile-dired)) + + (use-package counsel-projectile + :config (counsel-projectile-mode)) +#+end_src +** Org-Mode +#+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) + + ;; org habits thing + (require 'org-habit) + (add-to-list 'org-modules 'org-habit) + (setq org-habit-graph-column 60) + + ;; archive thingy i forgot + (setq org-refile-targets + '(("archive.org" :maxlevel . 1))) + + ;; save org buffer before refile + (advice-add 'org-refile :after 'org-save-all-org-buffers) + + ;; org agenda files + (setq org-agenda-files + '("~/org/tasks.org" + "~/org/school.org" + "~/org/daily.org" + "~/org/irl.org" + "~/org/work.org")) + + ;; Following + (setq org-return-follows-link t) + + ;; hide stars except for leader star + (setq org-hide-leading-stars t) + (setq org-hide-emphasis-markers nil) + + ;; make latex previews better + (setq org-format-latex-options '(:foreground default :background default :scale 2.0 :html-foreground "Black" :html-background "Transparent" :html-scale 2.0 :matchers ("begin" "$1" "$" "$$" "\\(" "\\["))) + + ;; org mode src thing + (require 'org-tempo) + + (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")) + + (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@)"))) + + (setq org-refile-targets + '(("archive.org" :maxlevel . 1) + ("tasks.org" :maxlevel . 1))) + + ;; Save Org buffers after refiling! + (advice-add 'org-refile :after 'org-save-all-org-buffers) + + (setq org-startup-with-inline-images t) + + (setq org-tag-alist + '((:startgroup) + ; Put mutually exclusive tags here + (:endgroup) + ("@errand" . ?E) + ("@home" . ?H) + ("@work" . ?W) + ("agenda" . ?a) + ("planning" . ?p) + ("publish" . ?P) + ("batch" . ?b) + ("note" . ?n) + ("idea" . ?i))) + + ;; Configure custom agenda views + (setq org-agenda-custom-commands + '(("d" "Dashboard" + ((agenda "" ((org-deadline-warning-days 7))) + (todo "NEXT" + ((org-agenda-overriding-header "Next Tasks"))) + (tags-todo "agenda/ACTIVE" ((org-agenda-overriding-header "Active Projects"))))) + + ("n" "Next Tasks" + ((todo "NEXT" + ((org-agenda-overriding-header "Next Tasks"))))) + + ("W" "Work Tasks" tags-todo "+work-email") + + ;; Low-effort next actions + ("e" tags-todo "+TODO=\"NEXT\"+Effort<15&+Effort>0" + ((org-agenda-overriding-header "Low Effort Tasks") + (org-agenda-max-todos 20) + (org-agenda-files org-agenda-files))) + + ("w" "Workflow Status" + ((todo "WAIT" + ((org-agenda-overriding-header "Waiting on External") + (org-agenda-files org-agenda-files))) + (todo "REVIEW" + ((org-agenda-overriding-header "In Review") + (org-agenda-files org-agenda-files))) + (todo "PLAN" + ((org-agenda-overriding-header "In Planning") + (org-agenda-todo-list-sublevels nil) + (org-agenda-files org-agenda-files))) + (todo "BACKLOG" + ((org-agenda-overriding-header "Project Backlog") + (org-agenda-todo-list-sublevels nil) + (org-agenda-files org-agenda-files))) + (todo "READY" + ((org-agenda-overriding-header "Ready for Work") + (org-agenda-files org-agenda-files))) + (todo "ACTIVE" + ((org-agenda-overriding-header "Active Projects") + (org-agenda-files org-agenda-files))) + (todo "COMPLETED" + ((org-agenda-overriding-header "Completed Projects") + (org-agenda-files org-agenda-files))) + (todo "CANC" + ((org-agenda-overriding-header "Cancelled Projects") + (org-agenda-files org-agenda-files))))) + + ("1" "Events" agenda "display deadlines and exclude scheduled" ( + (org-agenda-span 'month) + (org-agenda-time-grid nil) + (org-agenda-show-all-dates nil) + (org-agenda-entry-types '(:deadline)) ;; this entry excludes :scheduled + (org-deadline-warning-days 0) )))) + + ;; TODO Setup template for school + + (setq org-capture-templates + `(("t" "Tasks / Projects") + ("tt" "Task" entry (file+olp "~/org/tasks.org" "captured") + "* TODO %?\n %U\n %a\n %i" :empty-lines 1) + + ("j" "Journal Entries") + ("jj" "Journal" entry + (file+olp+datetree "~/org/journal.org") + "\n* %<%I:%M %p> - Journal :journal:\n\n%?\n\n" + ;; ,(dw/read-file-as-string "~/Notes/Templates/Daily.org") + :clock-in :clock-resume + :empty-lines 1)))) +#+end_src +** Org Mode Beautifers +*** Olivetti +#+begin_src emacs-lisp + (use-package olivetti + :hook ((org-mode . (lambda () (interactive) (olivetti-mode) (olivetti-set-width 100))) + (org-agenda-mode . (lambda () (interactive) (olivetti-mode) (olivetti-set-width 100))))) +#+end_src +*** Org-Modern +*** Org-super-agenda +#+begin_src emacs-lisp + (use-package org-super-agenda + :hook ((org-agenda-mode . org-super-agenda-mode)) + :config + (setq org-super-agenda-groups + '((:auto-group t)))) +#+end_src +*** Org Pomodoro +#+begin_src emacs-lisp + (use-package org-pomodoro) +#+end_src +** Org-Roam +#+begin_src emacs-lisp + (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)) +#+end_src +** Org-Wild-Notifier +#+begin_src emacs-lisp + (use-package org-wild-notifier + :config + (org-wild-notifier-mode)) +#+end_src +** Alert.el +#+begin_src emacs-lisp + ;; 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)) +#+end_src +** Treemacs +#+begin_src emacs-lisp + (use-package treemacs + :defer t + :init + (with-eval-after-load 'winum + (define-key winum-keymap (kbd "M-0") #'treemacs-select-window)) + :config + (progn + (setq treemacs-collapse-dirs (if treemacs-python-executable 3 0) + treemacs-deferred-git-apply-delay 0.5 + treemacs-directory-name-transformer #'identity + treemacs-display-in-side-window t + treemacs-eldoc-display 'simple + treemacs-file-event-delay 2000 + treemacs-file-extension-regex treemacs-last-period-regex-value + treemacs-file-follow-delay 0.2 + treemacs-file-name-transformer #'identity + treemacs-follow-after-init t + treemacs-expand-after-init t + treemacs-find-workspace-method 'find-for-file-or-pick-first + treemacs-git-command-pipe "" + treemacs-goto-tag-strategy 'refetch-index + treemacs-header-scroll-indicators '(nil . "^^^^^^") + treemacs-hide-dot-git-directory t + treemacs-indentation 2 + treemacs-indentation-string " " + treemacs-is-never-other-window nil + treemacs-max-git-entries 5000 + treemacs-missing-project-action 'ask + treemacs-move-forward-on-expand nil + treemacs-no-png-images nil + treemacs-no-delete-other-windows t + treemacs-project-follow-cleanup nil + treemacs-persist-file (expand-file-name ".cache/treemacs-persist" user-emacs-directory) + treemacs-position 'left + treemacs-read-string-input 'from-child-frame + treemacs-recenter-distance 0.1 + treemacs-recenter-after-file-follow nil + treemacs-recenter-after-tag-follow nil + treemacs-recenter-after-project-jump 'always + treemacs-recenter-after-project-expand 'on-distance + treemacs-litter-directories '("/node_modules" "/.venv" "/.cask") + treemacs-project-follow-into-home nil + treemacs-show-cursor nil + treemacs-show-hidden-files t + treemacs-silent-filewatch nil + treemacs-silent-refresh nil + treemacs-sorting 'alphabetic-asc + treemacs-select-when-already-in-treemacs 'move-back + treemacs-space-between-root-nodes t + treemacs-tag-follow-cleanup t + treemacs-tag-follow-delay 1.5 + treemacs-text-scale nil + treemacs-user-mode-line-format nil + treemacs-user-header-line-format nil + treemacs-wide-toggle-width 70 + treemacs-width 35 + treemacs-width-increment 1 + treemacs-width-is-initially-locked t + treemacs-workspace-switch-cleanup nil) + + ;; The default width and height of the icons is 22 pixels. If you are + ;; using a Hi-DPI display, uncomment this to double the icon size. + ;;(treemacs-resize-icons 44) + + (treemacs-follow-mode t) + (treemacs-tag-follow-mode t) + (treemacs-project-follow-mode t) + (treemacs-filewatch-mode t) + (treemacs-fringe-indicator-mode 'always) + (when treemacs-python-executable + (treemacs-git-commit-diff-mode t)) + + (pcase (cons (not (null (executable-find "git"))) + (not (null treemacs-python-executable))) + (`(t . t) + (treemacs-git-mode 'deferred)) + (`(t . _) + (treemacs-git-mode 'simple))) + + (treemacs-hide-gitignored-files-mode nil)) + :bind + (:map global-map + ("M-0" . treemacs-select-window) + ("C-x t 1" . treemacs-delete-other-windows) + ("C-x t d" . treemacs-select-directory) + ("C-x t B" . treemacs-bookmark) + ("C-x t C-t" . treemacs-find-file) + ("C-x t M-t" . treemacs-find-tag))) + + (use-package treemacs-evil + :after (treemacs evil)) + + (use-package treemacs-projectile + :after (treemacs projectile)) + + (use-package treemacs-magit + :after (treemacs magit)) + + (use-package treemacs-nerd-icons + :config + (treemacs-load-theme "nerd-icons")) + +#+end_src +** Dev Packages +*** Magit (git in emacs) +#+begin_src emacs-lisp + (use-package magit + :custom + (magit-display-buffer-function #'magit-display-buffer-same-window-except-diff-v1) + ) + (use-package magit-todos + :after magit + :config (magit-todos-mode 1)) +#+end_src +*** Forge for Magit (Adds github, gitlab, etc PRs and Issues to magit) +make sure to setup authinfo +#+begin_src emacs-lisp +(use-package forge + :after magit) +(setq auth-sources '("~/.authinfo")) +#+end_src + +*** Direnv +#+begin_src emacs-lisp + (when (eq system-type 'gnu/linux) + (use-package direnv + :config + (direnv-mode)) + ) +#+end_src +*** Lsp-mode +**** Language Servers +#+begin_src emacs-lisp + (defun sakomacs/lsp-mode-setup () + (setq lsp-headerline-breadcrumb-segments '(path-up-to-project file symbols)) + (lsp-headerline-breadcrumb-mode)) + + (use-package lsp-mode + :commands (lsp lsp-deferred) + :hook (lsp-mode . sakomacs/lsp-mode-setup) + :init + (setq lsp-keymap-prefix "C-c l") + :config + (lsp-enable-which-key-integration t) + (setq lsp-keep-workspace-alive nil)) +#+end_src +**** Lsp-ui +#+begin_src emacs-lisp + (use-package lsp-ui + :hook (lsp-mode . lsp-ui-mode) + :custom + (lsp-ui-doc-position 'bottom)) +#+end_src +**** Treemacs Lsp +#+begin_src emacs-lisp + (use-package lsp-treemacs + :after lsp) +#+end_src +**** lsp-ivy +#+begin_src emacs-lisp + (use-package lsp-ivy + ) +#+end_src +**** Languages +***** HTML/CSS +#+begin_src emacs-lisp + (use-package web-mode + :hook (web-mode . lsp) + :mode ("\\.html\\'" + "\\.css\\'")) +#+end_src +***** Javascript +#+begin_src emacs-lisp + (use-package js2-mode + :mode ("\\.js\\'" + "\\.jsx\\'") + :hook (js2-mode . lsp) + :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 . lsp)) +#+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)) + + (add-to-list 'lsp-language-id-configuration + '(astro-mode . "astro")) + + (defun astro-get-tsserver () + "" + (f-join (lsp-workspace-root) "node_modules/typescript/lib/tsserverlibrary.js")) + + (lsp-register-client + (make-lsp-client :new-connection (lsp-stdio-connection '("astro-ls" "--stdio")) + :activation-fn (lsp-activate-on "astro") + :initialization-options (lambda () + `(:typescript (:serverPath ,(astro-get-tsserver)))) + :server-id 'astro-ls)) + +#+end_src +***** C/C++ +#+begin_src emacs-lisp + (add-hook 'c-mode-hook 'lsp) + (add-hook 'c++-mode-hook 'lsp) + (add-hook 'c-mode-hook 'format-all-mode) + (add-hook 'c++-mode-hook 'format-all-mode) + +#+end_src +***** CMake +#+begin_src emacs-lisp + (use-package cmake-mode + :mode "CMakeLists.txt" + :hook (cmake-mode . lsp)) +#+end_src +***** Lua +#+begin_src emacs-lisp + (use-package lua-mode + :mode "\\.lua\\'" + :hook (lua-mode . lsp)) +#+end_src +***** Python +#+begin_src emacs-lisp + (use-package python-mode + :mode "\\.py\\'" + :hook (python-mode . lsp)) + + (use-package elpy + :after python-mode + + :custom + (elpy-rpc-python-command "python3") + + :config + (elpy-enable)) + + (use-package lsp-pyright + :hook (python-mode . (lambda () + (require 'lsp-pyright) + (lsp)))) ; or lsp-deferred + + (use-package poetry + :config + (poetry-tracking-mode 1)) +#+end_src +***** Haskell +#+begin_src emacs-lisp + (use-package haskell-mode + :mode "\\.hs\\'" + :hook (python-mode . lsp)) +#+end_src +***** Yaml editing +#+begin_src emacs-lisp + (use-package yaml-mode + :mode ("\\.yaml\\'" + "\\.yml\\'")) +#+end_src +***** Nix +#+begin_src emacs-lisp + (use-package nix-mode + :hook ((nix-mode . lsp) + (nix-mode . format-all-mode) + (nix-mode . (lambda () (setq-local format-all-formatters '(("Nix" alejandra)))))) + :mode "\\.nix\\'") +#+end_src +***** Dart +#+begin_src emacs-lisp + (use-package lsp-dart) + (use-package dart-mode + :hook (dart-mode . lsp) + :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 . lsp) + :mode "\\.gd\\'") +#+end_src +***** Rust +#+begin_src emacs-lisp + (use-package rust-mode + :hook (rust-mode . lsp) + :mode "\\.rs\\'") +#+end_src +*** Commenter +#+begin_src emacs-lisp + (use-package evil-nerd-commenter + :bind ("M-/" . evilnc-comment-or-uncomment-lines)) +#+end_src +*** Company Mode (Better Autocompletion) +#+begin_src emacs-lisp + (use-package company + :after lsp-mode + :hook (lsp-mode . company-mode) + :bind (:map company-active-map + ("" . company-complete-selection)) + (:map lsp-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)) +#+end_src +*** Syntax Checking (Flycheck) +#+begin_src emacs-lisp +(use-package flycheck :config (global-flycheck-mode +1)) +#+end_src +*** Formatting +#+begin_src emacs-lisp + (use-package format-all) +#+end_src +*** Better Compile Messages +#+begin_src emacs-lisp + ;; (use-package fancy-compilation + ;; :commands (fancy-compilation-mode)) + + ;; (with-eval-after-load 'compile + ;; (fancy-compilation-mode)) +#+end_src +*** Snippets +#+begin_src emacs-lisp + (use-package yasnippet + :diminish yas-minor-mode + :hook (after-init . yas-global-mode)) + + (use-package yasnippet-snippets) + + (use-package yasnippet-capf + :init (add-to-list 'completion-at-point-functions #'yasnippet-capf)) +#+end_src +** Dired (quick file management in emacs) +Dired is a built-in file manager for Emacs that does some pretty amazing things! Here are some key bindings you should try out: +*** Key Bindings +**** Navigation + +*Emacs* / *Evil* +- =n= / =j= - next line +- =p= / =k= - previous line +- =j= / =J= - jump to file in buffer +- =RET= - select file or directory +- =^= - go to parent directory +- =S-RET= / =g O= - Open file in "other" window +- =M-RET= - Show file in other window without focusing (previewing files) +- =g o= (=dired-view-file=) - Open file but in a "preview" mode, close with =q= +- =g= / =g r= Refresh the buffer with =revert-buffer= after changing configuration (and after filesystem changes!) + +**** Marking files + +- =m= - Marks a file +- =u= - Unmarks a file +- =U= - Unmarks all files in buffer +- =* t= / =t= - Inverts marked files in buffer +- =% m= - Mark files in buffer using regular expression +- =*= - Lots of other auto-marking functions +- =k= / =K= - "Kill" marked items (refresh buffer with =g= / =g r= to get them back) +- Many operations can be done on a single file if there are no active marks! + +**** Copying and Renaming files + +- =C= - Copy marked files (or if no files are marked, the current file) +- Copying single and multiple files +- =U= - Unmark all files in buffer +- =R= - Rename marked files, renaming multiple is a move! +- =% R= - Rename based on regular expression: =^test= , =old-\&= + +*Power command*: =C-x C-q= (=dired-toggle-read-only=) - Makes all file names in the buffer editable directly to rename them! Press =Z Z= to confirm renaming or =Z Q= to abort. + +**** Deleting files + +- =D= - Delete marked file +- =d= - Mark file for deletion +- =x= - Execute deletion for marks +- =delete-by-moving-to-trash= - Move to trash instead of deleting permanently + +**** Creating and extracting archives + +- =Z= - Compress or uncompress a file or folder to (=.tar.gz=) +- =c= - Compress selection to a specific file +- =dired-compress-files-alist= - Bind compression commands to file extension + +**** Other common operations + +- =T= - Touch (change timestamp) +- =M= - Change file mode +- =O= - Change file owner +- =G= - Change file group +- =S= - Create a symbolic link to this file +- =L= - Load an Emacs Lisp file into Emacs +*** Configuration +#+begin_src emacs-lisp + ;; (use-package dired + ;; :commands (dired dired-jump) + ;; :bind (("C-x C-j" . dired-jump)) + ;; :custom ((dired-listing-switches "-agho --group-directories-first")) + ;; :config + ;; (evil-collection-define-key 'normal 'dired-mode-map + ;; "h" 'dired-single-up-directory + ;; "l" 'dired-single-buffer)) + + (global-set-key (kbd "C-x C-j") 'dired-jump) + (setq dired-listing-switches "-agho --group-directories-first") + (evil-collection-define-key 'normal 'dired-mode-map + "h" 'dired-single-up-directory + "l" 'dired-single-buffer) + + ;; (use-package dired-open + ;; :config + ;; (setq dired-open-extensions '(("png" . "feh") + ;; ("mkv" . "mpv")))) + + ;; (use-package dired-hide-dotfiles + ;; :hook (dired-mode . dired-hide-dotfiles-mode) + ;; :config + ;; (evil-collection-define-key 'normal 'dired-mode-map + ;; "H" 'dired-hide-dotfiles-mode)) +#+end_src +** Folder Cleaning +#+begin_src emacs-lisp + ;; NOTE: If you want to move everything out of the ~/.emacs.d folder + ;; reliably, set `user-emacs-directory` before loading no-littering! + ;(setq user-emacs-directory "~/.cache/emacs") + + (use-package no-littering + ) + + ;; 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 +** RSS Reader +#+begin_src emacs-lisp + (use-package elfeed + :config + (setq elfeed-use-curl nil) + (setq browse-url-browser-function 'eww-browse-url) + (setq elfeed-search-title-max-width 100) + ) + + (use-package elfeed-protocol + :after elfeed + :config + (elfeed-set-timeout 36000) + (setq elfeed-curl-extra-arguments '("--insecure")) ;necessary for https without a trust certificate + + ;; workaround for smth + (setq elfeed-protocol-fever-update-unread-only t) + + ;; setup feeds + (setq elfeed-protocol-feeds '(("fever+https://sako@rss.sako.box" + :api-url "https://rss.sako.box/fever/" + :use-authinfo t))) + + ;; enable elfeed-protocol + (setq elfeed-protocol-enabled-protocols '(fever)) + (elfeed-protocol-enable) + ) + + (let* ((proto-id "fever+https://sako@rss.sako.box") + (last-id (elfeed-protocol-fever-get-update-mark proto-id 'update))) + (elfeed-protocol-fever-set-update-mark proto-id 'update (- last-id 1000))) + + (run-at-time 300 300 + (lambda () (when (= elfeed-curl-queue-active 0) + (elfeed-update)))) + + (add-hook 'emacs-startup-hook (elfeed-update)) + + #+end_src +** Telegram +only god knows why im doing this +#+begin_src emacs-lisp + ;; codeberg thingy + ;; breaks on nixos + ;; (use-package visual-fill-column) + ;; (use-package telega) +#+end_src +** pdf-tools +Emacs can be everything? Why not turn it into a pdf reader +#+begin_src emacs-lisp + (use-package pdf-tools + :mode ("\\.pdf\\'" . pdf-view-mode) + :config + (setq-default pdf-view-display-size 'fit-page) + :init + (pdf-tools-install)) +#+end_src +** Matrix Client +okay this one is a bit more understandable +#+begin_src emacs-lisp + (use-package ement + :config + (when (eq system-type 'windows-nt) + (setq plz-curl-default-args + '("--silent" + "--location")) + ) + (setq ement-room-images t) + ) + + (defvar ement-pantalaimon-not-running t + "Variable to see if Pantalaimon Proxy is running.") + + (defun ement-connect-encrypted () + "Connect to Matrix with E2E enabled." + (interactive) + (if ement-pantalaimon-not-running + (when (eq system-type 'windows-nt) + (call-process-shell-command "wsl pantalaimon" nil 0)) + (setq pantalaimon-not-running nil)) + (ement-connect :uri-prefix "http://localhost:8009")) + + (defun sakomacs/ement-pantalaimon-disconnect-hook () + "Kill pantalaimon on disconnect" + (when (eq system-type 'windows-nt) + ;; TODO FIND BETTER WAY + (call-process-shell-command "wsl --shutdown" nil 0) + (setq pantalaimon-not-running t))) + (add-hook 'ement-disconnect-hook 'sakomacs/ement-pantalaimon-disconnect-hook) +#+end_src +** Discord RPC +#+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 +** Email +This ONLY works on Linux and Darwin +Not windows +#+begin_src emacs-lisp + + (when (eq system-type 'gnu/linux) + (use-package mu4e) + ) + +#+end_src +** Docker +Aint no way bro +#+begin_src emacs-lisp +(use-package docker + :bind ("C-c d" . docker)) +#+end_src +** EXWM +RELEASE ME +#+begin_src emacs-lisp + (when (eq system-type 'gnu/linux) + (display-battery-mode) + (use-package exwm + :config + + (defun sakomacs/exwm-init-hook () + ;; background + (call-process-shell-command "feh --bg-fill ~/background.png" nil 0) + (set-frame-parameter (selected-frame)'alpha '(90 . 90)) + (call-process-shell-command "~/.config/polybar/startpolybar" nil 0) + ;; (call-process-shell-command "~/.config/picom/startpicom" nil 0) + ;; startup + (call-process-shell-command "nm-applet" nil 0) + (call-process-shell-command "blueman-applet" nil 0) + (call-process-shell-command "nextcloud" nil 0) + (call-process-shell-command "bitwarden" nil 0) + (call-process-shell-command "flameshot" nil 0) + ) + + ;; background + ;; todo turn this info a function + (add-hook 'exwm-init-hook 'sakomacs/exwm-init-hook) + ;; startup + ;; workspaces + (setq exwm-workspace-number 5) + + + (require 'exwm-systemtray) + (exwm-systemtray-enable) + + ;; polybar + (defvar sakomacs/polybar-process nil + "Holds the process of the running Polybar instance, if any") + + (server-start) + + (defun sakomacs/kill-panel () + (interactive) + (when sakomacs/polybar-process + (ignore-errors + (kill-process sakomacs/polybar-process))) + (setq sakomacs/polybar-process nil)) + + (defun sakomacs/start-panel () + (interactive) + (sakomacs/kill-panel) + (setq sakomacs/polybar-process (start-process-shell-command "polybar" nil "polybar panel"))) + + (defun sakomacs/send-polybar-hook (module-name hook-index) + (start-process-shell-command "polybar-msg" nil (format "polybar-msg hook %s %s" module-name hook-index))) + + (defun sakomacs/send-polybar-exwm-workspace () + (sakomacs/send-polybar-hook "exwm-workspace" 1)) + + ;; Update panel indicator when workspace changes + (add-hook 'exwm-workspace-switch-hook #'sakomacs/send-polybar-exwm-workspace) + + ;; always use these keys in emacs + (setq exwm-input-prefix-keys + '(?\C-x + ?\C-u + ?\C-h + ?\M-x + ?\M-` + ?\M-& + ?\M-: + ?\C-\M-j ;; Buffer list + ?\C-\ )) ;; Ctrl+Space + + ;; Ctrl+Q will enable the next key to be sent directly + (define-key exwm-mode-map [?\C-q] 'exwm-input-send-next-key) + ;; app launcher and fullscreen + (exwm-input-set-key (kbd "s-SPC") 'counsel-linux-app) + (exwm-input-set-key (kbd "s-f") 'exwm-layout-toggle-fullscreen) + ;; Set up global key bindings. These always work, no matter the input state! + ;; Keep in mind that changing this list after EXWM initializes has no effect. + (setq exwm-input-global-keys + `( + ;; Reset to line-mode (C-c C-k switches to char-mode via exwm-input-release-keyboard) + ([?\s-r] . exwm-reset) + + ;; Move between windows + ([s-left] . windmove-left) + ([s-right] . windmove-right) + ([s-up] . windmove-up) + ([s-down] . windmove-down) + + ;; Launch applications via shell command + ([?\s-&] . (lambda (command) + (interactive (list (read-shell-command "$ "))) + (start-process-shell-command command nil command))) + + ;; Switch workspace + ([?\s-w] . exwm-workspace-switch) + + ;; 's-N': Switch to certain workspace with Super (Win) plus a number key (0 - 9) + ,@(mapcar (lambda (i) + `(,(kbd (format "s-%d" i)) . + (lambda () + (interactive) + (exwm-workspace-switch-create ,i)))) + (number-sequence 0 9)))) + ) + + (use-package desktop-environment + :after exwm + :config (desktop-environment-mode) + :custom + (desktop-environment-brightness-small-increment "2%+") + (desktop-environment-brightness-small-decrement "2%-") + (desktop-environment-brightness-normal-increment "5%+") + (desktop-environment-brightness-normal-decrement "5%-")) + + ) +#+end_src +** ERC +#+begin_src emacs-lisp + (setq erc-nick "sahko" + erc-user-full-name "sako" + ;; erc-autojoin-channels-alist '(("irc-libera.chat" "#systemcrafters" "#emacs")) + erc-kill-buffer-on-part 8) +#+end_src +** fancy-compilation +#+begin_src emacs-lisp + ;; to get past codeberg blocks in my country + (use-package (fancy-compilation :type git :host github :repo "emacsmirror/fancy-compilation") + :commands (fancy-compilation-mode)) + + (with-eval-after-load 'compile + (fancy-compilation-mode)) +#+end_src +** End +#+begin_src emacs-lisp +(message "finishing up") +#+end_src +* Org Mode Configuration Setup +** Babel Languages +#+begin_src emacs-lisp + (org-babel-do-load-languages + 'org-babel-load-languages + '((emacs-lisp . t) + (python . t))) +#+end_src + +* Terminals +** EShell +god dammit why are they making my shells in emacs lisp +#+begin_src emacs-lisp + (defun sakomacs/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 +** VTerm +#+begin_src emacs-lisp + (use-package vterm + :commands vterm + :config + (setq vterm-max-scrollback 10000)) +#+end_src +* End +** notify that it has loaded +#+begin_src emacs-lisp + (require 'notifications) + + (if (eq system-type 'windows-nt) + (w32-notification-notify + :title "Emacs Daemon" + :body "The Emacs Daemon has started")) + + (if (eq system-type 'gnu/linux) + (notifications-notify + :title "Emacs Daemon" + :body "The Emacs Daemon has started")) + + + (message "Emacs is ready") + +#+end_src