diff options
-rw-r--r-- | .gitmodules | 3 | ||||
-rw-r--r-- | README.org | 30 | ||||
-rw-r--r-- | agenda.org | 14 | ||||
-rw-r--r-- | blog/normal.org | 43 | ||||
-rw-r--r-- | blog/voting.org | 31 | ||||
-rw-r--r-- | config/emacs.el | 499 | ||||
-rw-r--r-- | config/emacs.org | 491 | ||||
-rw-r--r-- | config/nix.org | 900 | ||||
-rw-r--r-- | journal/20250116.org | 13 | ||||
-rw-r--r-- | journal/20250119.org | 13 | ||||
-rw-r--r-- | journal/20250123.org | 14 | ||||
-rw-r--r-- | mindmap/interpreter.org | 13 | ||||
-rw-r--r-- | mindmap/lrc_circuit.png | bin | 3229 -> 3229 bytes | |||
-rw-r--r-- | mindmap/recursion.org | 77 | ||||
-rw-r--r-- | nix/flake.lock | 30 | ||||
m--------- | publish-org-roam-ui | 0 | ||||
-rw-r--r-- | yasnippet/c-mode/bcom | 5 | ||||
-rw-r--r-- | yasnippet/c-mode/com | 6 | ||||
-rw-r--r-- | yasnippet/c-mode/ndef | 8 | ||||
-rw-r--r-- | yasnippet/c-mode/ts | 8 | ||||
-rw-r--r-- | yasnippet/c-mode/tu | 8 | ||||
-rw-r--r-- | yasnippet/org-mode/align | 8 | ||||
-rw-r--r-- | yasnippet/org-mode/blognew | 21 | ||||
-rw-r--r-- | yasnippet/org-mode/elisp | 7 |
24 files changed, 1185 insertions, 1057 deletions
diff --git a/.gitmodules b/.gitmodules deleted file mode 100644 index 83b38f6..0000000 --- a/.gitmodules +++ /dev/null @@ -1,3 +0,0 @@ -[submodule "publish-org-roam-ui"] - path = publish-org-roam-ui - url = https://git.nullring.xyz/publish-org-roam-ui.git @@ -6,29 +6,27 @@ * What is this? It's ret2pop! My website for all things math. Wait, no. Computer science. -Music. Okay, let me try that again. +Music. Okay, let me try that again. Is this even a website? -It's ret2pop! My website for all things. -** Sounds awesome! But why is it written in org instead of html? -Because I have converted to the church of emacs. Remember: -anything and everything that can be rewritten in org should be rewritten in org. -*** so how did you actually do that? +It's ret2pop, a wholistic experience powered by NixOS and Emacs. +** so how did you actually do that? By using the ~org-publish~ function, ~org-roam~, and ~org-journal~, as well as writing a lot of things with a literate config. To see more, see my -[[file:config/emacs.org][emacs configuration]] and my [[https://git.nullring.xyz/toughnix.git/tree/][NixOS configuration]]. +[[file:config/emacs.org][emacs configuration]] and my [[file:nix.org][NixOS configuration]]. ** So, where is this website of yours located? https://ret2pop.nullring.xyz, it is the road to enlightenment. * Wait, so where are your dotfiles? -To use my dotfiles, clone this repository: +To use my dotfiles, download the ISO image for the installer, log in, and run: #+begin_src bash -git clone https://github.com/ret2pop/ret2pop-website.git ~/org/website + nmtui + git clone https://git.nullring.xyz/monorepo.git + # use vim to change whatever nix files you want + nix_installer #+end_src -and install my [[https://git.nullring.xyz/toughnix.git/][NixOS configuration]]. The org files /are/ the dotfiles, or -at least in the case of emacs. - -To use my full system, you also need to have a ~password-store~ from the ~pass~ -password manager in its standard location with an entry called ~Mail~, and you should -otherwise follow the instructions listed on the hyprnixmacs repository. - +That's it! If you want to install with all the default settings (look at them first), just run: +#+begin_src bash + nix_installer +#+end_src +and it will work for you. * License See the [[file:LICENSE.org][license]]. The style.css has its own license. @@ -23,7 +23,7 @@ These are general life tasks that I need to do, which don't depend on a specific I need to work on my monorepo flake which builds all my systems, and should accommodate future systems and also should be relatively abstractable (i.e. identifiers tied to me should be easily removed from the flake). -*** TODO [#A] NixOS Modules +*** DONE [#A] NixOS Modules :LOGBOOK: CLOCK: [2025-01-11 Sat 17:03]--[2025-01-11 Sat 19:35] => 2:32 :END: @@ -32,7 +32,7 @@ I need to fix my NixOS configuration to not be as monolithic and to be more modu My VPS needs to be a NixOS configuration. *** TODO [#B] Workstation My NixOS Monorepo needs to incorporate my workstation, and I need to install this config. -*** TODO [#C] Gammastep +*** DONE [#C] Gammastep Fix gammastep in my config so that it actually works on my dell machine. ** TODO [#B] Resume I need to update my resume with my work experience. Additionally, I want to re-write my resume @@ -51,7 +51,7 @@ I want to start making YouTube videos. I want to make an analogue computer. ** TODO [#A] Dishes There will be a TODO when I need to do the dishes. -** Groceries +** TODO Groceries There will be a TODO when I need to get groceries. * Scheduled tasks @@ -60,7 +60,7 @@ schedules. ** Friends These are tasks related to seeing my friends. There will be tasks listed here when I schedule something. -*** TODO Travis and Friends Meetup +*** DONE Travis and Friends Meetup SCHEDULED: <2025-01-12 Sun 17:00> Eating dinner with them. @@ -75,9 +75,11 @@ SCHEDULED: <2025-01-12 Sun .+1d> - State "DONE" from "TODO" [2025-01-11 Sat 02:26] I want to stretch every day so that I can become more flexible. ** TODO Journal -SCHEDULED: <2025-01-12 Sun .+1d> +SCHEDULED: <2025-01-20 Mon .+1d> :PROPERTIES: -:LAST_REPEAT: [2025-01-11 Sat 02:25] +:LAST_REPEAT: [2025-01-19 Sun 11:53] :END: +- State "DONE" from "TODO" [2025-01-19 Sun 11:53] +- State "DONE" from "TODO" [2025-01-16 Thu 19:19] - State "DONE" from "TODO" [2025-01-11 Sat 02:25] I want to journal every day, at least a little bit, about my life and track it with a git repo. diff --git a/blog/normal.org b/blog/normal.org new file mode 100644 index 0000000..ccb40ac --- /dev/null +++ b/blog/normal.org @@ -0,0 +1,43 @@ +#+title: Reconstructing Postmodernism +#+author: Preston Pan +#+description: +#+html_head: <link rel="stylesheet" type="text/css" href="../style.css" /> +#+html_head: <link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png"> +#+html_head: <link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png"> +#+html_head: <link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png"> +#+html_head: <link rel="manifest" href="/site.webmanifest"> +#+html_head: <link rel="mask-icon" href="/safari-pinned-tab.svg" color="#5bbad5"> +#+html_head: <meta name="msapplication-TileColor" content="#da532c"> +#+html_head: <meta name="theme-color" content="#ffffff"> +#+html_head: <meta name="viewport" content="width=1000; user-scalable=0;" /> +#+language: en +#+OPTIONS: broken-links:t + +* Introduction +In the collective subconscious there is this idea of the "norm" -- a +set of expected cultural attitudes and beliefs that other people hold +in any given society. This idea is used to analyze hierarchical +structures found in society, manifest in concepts like the patriarchy, +queer rights, black liberation, and others. There are many frameworks +that include all of the above as subframeworks and synthesize them in +some way, but often they have a couple ideas in common: that the +concepts that implicitly infect our society in some way via some +hierarchical order are often unjustified and could be dissolved +without much loss. I propose the following: that the conclusions +presented (that often social hierarchies are unjustified) are true +/in some sense/, but that the real story is more complicated. I posit +that our inability to solve the problem of society and our treatment +of minorities isn't a /problem of society/, but rather a framing problem. + +* The Bleak Culture +Our current society is broken. This is a view shared by a vast +majority of people, but many people hold this exact view for a +multitude of reasons. I hold this view because I believe that no +current cultural narrative solves the problem of our "current +generation". The progressive narrative posits that our problems in +society are highly linked with our inability to cope with social +inequalities, often treating minorities and, often times, regular +people poorly in favor of those with high status. The conservative +answer to culture is that we must turn back, back to something that +has been shown to work in the past. + diff --git a/blog/voting.org b/blog/voting.org index eff2ec0..fcb6db5 100644 --- a/blog/voting.org +++ b/blog/voting.org @@ -19,20 +19,17 @@ In this article I endorse a system that has been tried out before, but has been argue that it has game theoretic foundations that make it superior to other kinds of voting systems. ** The Model -Let us assume that there is a small probability that you can swing the election $$ \rho $$, and a cost to voting; that -is to say, it takes some amount of time, which has opportunity cost associated with it to vote, which we -will call $$ \alpha $$. Let us assume that there is a high /reward/ in swinging the vote; that is to say, if you were -the one that swings the vote, your vote is worth some high monetary value. Let $$ \beta $$ be the median price of swinging. -Let $$ n $$ be the number of people voting, and let the weight of each vote be equal between all participants. -Let the choice of candidate between all voters be binary; voting for one candidate mutually excludes you from -voting for another, and there are two candidates (this is to simply the model; you will see that this does not -lose generality). Then, let us model the expected value of voting for singular individuals. - -For a given person, the probability that your vote swings (or at least ties) depends on the probability that -$$ x = \frac{n - 1}{2} $$, where $ x $$ is the number of people that vote for your candidate. The probability -density function for the probability that $$ m $$ people vote for your candidate we'll call $$ f $$. We will assume -it is binomial, and you might expect it to be closer to 50/50 most of the time, but that is pretty hard to model. -We will therefore compensate by modeling it more accurately afterwards. For now, we assume all participants have -a 50% chance to pick either candidate. -\begin{align*} -\end{align*} +Let us assume there is a small probability of swinging the +election $$ \rho $$, and a large reward for winning the election $$ W $$. +Let us assume that there are two candidates, and the probability of +voting for a single candidate is 50%. Therefore, the final probability +distribution for the number of votes each candidate gets is binomial, +centered around the mean outcome (which is the outcome where there are +an equal amount of votes on each side, and we can count the number of +/red/ votes only; let's let $$ k $$ represent the number of red votes). +Let's remind ourselves of the binomial distribution: +\begin{align} + P(X = k) = { n \choose k } p^{k}(1 - p)^{n - k} +\end{align} +where $$ n $$ is the number of samples, and $$ k $$ is the observed +number. Now, we can calculate the probability diff --git a/config/emacs.el b/config/emacs.el index daedce3..7068192 100644 --- a/config/emacs.el +++ b/config/emacs.el @@ -4,123 +4,127 @@ (use-package emacs :custom - (scroll-conservatively 101) - (display-time-24hr-format t) - (display-line-numbers-type 'relative) - (use-short-answers t) - (make-backup-files nil) - (warning-minimum-level :emergency) - (debug-ignored-errors - (cons 'remote-file-error debug-ignored-errors)) - (mouse-wheel-scroll-amount '(1 ((shift) . 1))) - (mouse-wheel-progressive-speed nil) - (mouse-wheel-follow-mouse 't) - (scroll-step 1) - (display-fill-column-indicator-column 100) + ;; Startup errors + (warning-minimum-level :emergency "Supress emacs warnings") + (debug-ignored-errors (cons 'remote-file-error debug-ignored-errors) "Remove annoying error from debug errors") + + ;; Mouse wheel + (mouse-wheel-scroll-amount '(1 ((shift) . 1)) "Nicer scrolling") + (mouse-wheel-progressive-speed nil "Make scrolling non laggy") + (mouse-wheel-follow-mouse 't "Scroll correct window") + (scroll-conservatively 101 "Sort of smooth scrolling") + (scroll-step 1 "Scroll one line at a time") + (display-time-24hr-format t "Use 24 hour format to read the time") + (display-line-numbers-type 'relative "Relative line numbers for easy vim jumping") + (use-short-answers t "Use y instead of yes") + (make-backup-files nil "Don't make backups") + (display-fill-column-indicator-column 100 "Draw a line at 100 characters") + (line-spacing 2 "Default line spacing") + + ;; Editor comments + (c-doc-comment-style '((c-mode . doxygen) + (c++-mode . doxygen))) + :hook ((text-mode . auto-fill-mode) + (text-mode . visual-line-mode) + (prog-mode . auto-fill-mode) + (prog-mode . display-line-numbers-mode) + (prog-mode . display-fill-column-indicator-mode) + (org-mode . auto-fill-mode) + (org-mode . display-fill-column-indicator-mode) + (org-mode . display-line-numbers-mode) + (org-mode . (lambda () + (setq prettify-symbols-alist + '(("#+begin_src" . ?) + ("#+BEGIN_SRC" . ?) + ("#+end_src" . ?) + ("#+END_SRC" . ?) + ("#+begin_example" . ?) + ("#+BEGIN_EXAMPLE" . ?) + ("#+end_example" . ?) + ("#+END_EXAMPLE" . ?) + ("#+header:" . ?) + ("#+HEADER:" . ?) + ("#+name:" . ?﮸) + ("#+NAME:" . ?﮸) + ("#+results:" . ?) + ("#+RESULTS:" . ?) + ("#+call:" . ?) + ("#+CALL:" . ?) + (":PROPERTIES:" . ?) + (":properties:" . ?) + ("lambda" . ?λ) + ("->" . ?→) + ("map" . ?↦) + ("/=" . ?≠) + ("!=" . ?≠) + ("==" . ?≡) + ("<=" . ?≤) + (">=" . ?≥) + ("&&" . ?∧) + ("||" . ?∨) + ("sqrt" . ?√) + ("..." . ?…))) + (prettify-symbols-mode))) + (prog-mode . + (lambda () + (setq prettify-symbols-alist + '(("lambda" . ?λ) + ("->" . ?→) + ("map" . ?↦) + ("/=" . ?≠) + ("!=" . ?≠) + ("==" . ?≡) + ("<=" . ?≤) + (">=" . ?≥) + ("&&" . ?∧) + ("||" . ?∨) + ("sqrt" . ?√) + ("..." . ?…))) + (prettify-symbols-mode)))) :config (require 'tex-site) + (server-start) + + ;; start wiith sane defaults (pixel-scroll-precision-mode 1) (display-battery-mode 1) (display-time-mode 1) (menu-bar-mode -1) (scroll-bar-mode -1) (tool-bar-mode -1) - (and window-system (server-start)) + + ;; load theme, fonts, and transparency. Prettify symbols. + (global-prettify-symbols-mode 1) (load-theme 'catppuccin :no-confirm) - (set-face-attribute 'default nil :height 120) + (set-face-attribute 'default nil :font "Iosevka Nerd Font" :height 130) (set-frame-parameter nil 'alpha-background 90) - (add-to-list 'default-frame-alist '(alpha-background . 90)) - (set-face-attribute 'default nil :font "Iosevka Nerd Font" :height 140) - (setq-default line-spacing 2) - (setq-default fill-column 100) - (global-prettify-symbols-mode 1) - - :hook ((text-mode . auto-fill-mode) - (text-mode . visual-line-mode) - (prog-mode . auto-fill-mode) - (prog-mode . display-line-numbers-mode) - (prog-mode . display-fill-column-indicator-mode) - (org-mode . auto-fill-mode) - (org-mode . display-fill-column-indicator-mode) - - (org-mode . (lambda () - (setq prettify-symbols-alist - '(("#+begin_src" . ?) - ("#+BEGIN_SRC" . ?) - ("#+end_src" . ?) - ("#+END_SRC" . ?) - ("#+begin_example" . ?) - ("#+BEGIN_EXAMPLE" . ?) - ("#+end_example" . ?) - ("#+END_EXAMPLE" . ?) - ("#+header:" . ?) - ("#+HEADER:" . ?) - ("#+name:" . ?﮸) - ("#+NAME:" . ?﮸) - ("#+results:" . ?) - ("#+RESULTS:" . ?) - ("#+call:" . ?) - ("#+CALL:" . ?) - (":PROPERTIES:" . ?) - (":properties:" . ?) - ("lambda" . ?λ) - ("->" . ?→) - ("map" . ?↦) - ("/=" . ?≠) - ("!=" . ?≠) - ("==" . ?≡) - ("<=" . ?≤) - (">=" . ?≥) - ("&&" . ?∧) - ("||" . ?∨) - ("sqrt" . ?√) - ("..." . ?…))) - (prettify-symbols-mode))) - (prog-mode . - (lambda () - (setq prettify-symbols-alist - '(("lambda" . ?λ) - ("->" . ?→) - ("map" . ?↦) - ("/=" . ?≠) - ("!=" . ?≠) - ("==" . ?≡) - ("<=" . ?≤) - (">=" . ?≥) - ("&&" . ?∧) - ("||" . ?∨) - ("sqrt" . ?√) - ("..." . ?…))) - (prettify-symbols-mode))))) + (add-to-list 'default-frame-alist '(alpha-background . 90))) (use-package org - :init - (setq org-confirm-babel-evaluate nil) - (setq org-export-with-broken-links t) - (setq org-src-fontify-natively t) - (setq org-latex-preview-image-directory (expand-file-name "~/.cache/ltximg/")) - (setq org-preview-latex-image-directory (expand-file-name "~/.cache/ltximg/")) - (setq org-latex-pdf-process - '("xelatex -interaction=nonstopmode -output-directory=%o %f")) - (setq preview-default-option-list '("displaymath" "textmath" "graphics")) - (setq preview-image-type 'png) - (setq TeX-engine 'xetex) - (setq TeX-PDF-mode t) - (setq org-format-latex-options (plist-put org-format-latex-options :scale 1.5)) - (setq org-return-follows-link t) - (setq org-startup-with-latex-preview t) - (setq org-habit-preceding-days 1) - (setq-default org-startup-indented t - org-pretty-entities t - org-use-sub-superscripts "{}" - org-hide-emphasis-markers t - org-startup-with-inline-images t - org-image-actual-width '(300)) - (setq org-agenda-files (list "~/monorepo/agenda.org" - "~/org/notes.org" - "~/org/agenda.org")) - (setq org-default-notes-file (concat org-directory "/notes.org")) - (setq org-publish-project-alist + :custom + (org-confirm-babel-evaluate nil "Don't ask to evaluate code block") + (org-export-with-broken-links t "publish website even with broken links") + (org-src-fontify-natively t "Colors!") + (org-latex-preview-image-directory (expand-file-name "~/.cache/ltximg/") "don't use weird cache location") + (org-preview-latex-image-directory (expand-file-name "~/.cache/ltximg/") "don't use weird cache location") + (TeX-PDF-mode t) + (org-latex-pdf-process '("xelatex -interaction=nonstopmode -output-directory=%o %f") "set xelatex as default") + (TeX-engine 'xetex "set xelatex as default engine") + (preview-default-option-list '("displaymath" "textmath" "graphics") "preview latex") + (preview-image-type 'png "Use PNGs") + (org-format-latex-options (plist-put org-format-latex-options :scale 1.5) "space latex better") + (org-return-follows-link t "be able to follow links without mouse") + (org-habit-preceding-days 1 "See org habit entries") + (org-startup-indented t "Indent the headings") + (org-image-actual-width '(300) "Cap width") + (org-startup-with-latex-preview t "see latex previews on opening file") + (org-startup-with-inline-images t "See images on opening file") + (org-hide-emphasis-markers t "prettify org mode") + (org-use-sub-superscripts "{}" "Only display superscripts and subscripts when enclosed in {}") + (org-pretty-entities t "prettify org mode") + (org-agenda-files (list "~/monorepo/agenda.org" "~/org/notes.org" "~/org/agenda.org") "set default org files") + (org-default-notes-file (concat org-directory "/notes.org") "Notes file") + (org-publish-project-alist '(("website-org" :base-directory "~/monorepo" :base-extension "org" @@ -136,8 +140,8 @@ :publishing-directory "~/website_html/" :recursive t :publishing-function org-publish-attachment) - ("website" :auto-sitemap t :components ("website-org" "website-static")))) - (setq org-html-postamble "Copyright © 2024 Preston Pan") + ("website" :auto-sitemap t :components ("website-org" "website-static"))) "functions to publish website") + (org-html-postamble "Copyright © 2024 Preston Pan" "set copyright notice on bottom of site") :config (require 'ox-publish) (require 'org-tempo) @@ -151,14 +155,13 @@ :init (unicode-fonts-setup)) (use-package electric-pair - :hook ((org-mode . electric-pair-mode) - (prog-mode . electric-pair-mode))) + :hook ((prog-mode . electric-pair-mode))) (use-package lyrics-fetcher :after (emms) + :custom + (lyrics-fetcher-genius-access-token (password-store-get "genius_api") "Use genius for backend") :config - (setq lyrics-fetcher-genius-access-token - (password-store-get "genius_api")) (lyrics-fetcher-use-backend 'genius)) (use-package org-fragtog :hook (org-mode . org-fragtog-mode)) @@ -171,38 +174,36 @@ (use-package company :config - '(add-to-list 'company-backends - '(company-ispell company-capf company-irony - company-yasnippet company-files)) + '(add-to-list 'company-backends '(company-ispell company-capf company-yasnippet company-files)) :hook ((after-init . global-company-mode))) (use-package ispell - :init - (setq ispell-program-name "aspell") - (setq ispell-silently-savep t) - (setq ispell-dictionary "en") - (setq ispell-alternate-dictionary "~/.local/share/dict")) + :custom + (ispell-program-name "aspell" "use aspell") + (ispell-silently-savep t "Save changes to dict without confirmation") + (ispell-dictionary "en" "Use english dictionary") + (ispell-alternate-dictionary "~/.local/share/dict" "dict location")) (use-package flyspell :hook (text-mode . flyspell-mode)) (use-package evil - :init - (setq evil-want-keybinding nil) + :custom + (evil-want-keybinding nil "Don't load a whole bunch of default keybindings") :config (evil-mode 1) - (evil-set-undo-system 'undo-redo)) + (evil-set-undo-system 'undo-redo) + (evil-set-initial-state 'pdf-view-mode 'normal)) (use-package evil-collection :after (evil) - :init - (setq evil-want-keybinding nil) :config + (with-eval-after-load 'evil-maps + (define-key evil-motion-state-map (kbd "SPC") nil) + (define-key evil-motion-state-map (kbd "RET") nil) + (define-key evil-motion-state-map (kbd "TAB") nil)) (evil-collection-init)) -(with-eval-after-load 'evil-maps -(define-key evil-motion-state-map (kbd "SPC") nil) -(define-key evil-motion-state-map (kbd "RET") nil) -(define-key evil-motion-state-map (kbd "TAB") nil)) + (use-package evil-commentary :after (evil) @@ -210,7 +211,7 @@ (evil-commentary-mode)) (use-package evil-org - :after (evil org) + :after (evil org) :hook (org-mode . (lambda () evil-org-mode)) :config (require 'evil-org-agenda) @@ -223,26 +224,24 @@ (use-package page-break-lines :init (page-break-lines-mode)) -(evil-set-initial-state 'pdf-view-mode 'normal) (use-package org-journal :after (org) + :custom + (org-journal-dir "~/monorepo/journal/" "Set journal directory") + (org-journal-date-format "%A, %d %B %Y" "Date format") + (org-journal-file-format "%Y%m%d.org" "Automatic file creation format based on date") + (org-journal-enable-agenda-integration t "All org-journal entries are org-agenda entries") :init - (setq org-journal-dir "~/monorepo/journal/") - (setq org-journal-date-format "%A, %d %B %Y") - - (defun org-journal-file-header-func (time) + (defun org-journal-file-header-func (time) "Custom function to create journal header." (concat - (pcase org-journal-file-type - (`daily "#+TITLE: Daily Journal\n#+STARTUP: showeverything\n#+DESCRIPTION: My daily journal entry\n#+AUTHOR: Preston Pan\n#+HTML_HEAD: <link rel=\"stylesheet\" type=\"text/css\" href=\"../style.css\" />\n#+html_head: <script src=\"https://polyfill.io/v3/polyfill.min.js?features=es6\"></script>\n#+html_head: <script id=\"MathJax-script\" async src=\"https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js\"></script>\n#+options: broken-links:t") - (`weekly "#+TITLE: Weekly Journal\n#+STARTUP: folded") - (`monthly "#+TITLE: Monthly Journal\n#+STARTUP: folded") - (`yearly "#+TITLE: Yearly Journal\n#+STARTUP: folded")))) - - (setq org-journal-file-header 'org-journal-file-header-func) - (setq org-journal-file-format "%Y%m%d.org") - (setq org-journal-enable-agenda-integration t)) + (pcase org-journal-file-type + (`daily "#+TITLE: Daily Journal\n#+STARTUP: showeverything\n#+DESCRIPTION: My daily journal entry\n#+AUTHOR: Preston Pan\n#+HTML_HEAD: <link rel=\"stylesheet\" type=\"text/css\" href=\"../style.css\" />\n#+html_head: <script src=\"https://polyfill.io/v3/polyfill.min.js?features=es6\"></script>\n#+html_head: <script id=\"MathJax-script\" async src=\"https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js\"></script>\n#+options: broken-links:t") + (`weekly "#+TITLE: Weekly Journal\n#+STARTUP: folded") + (`monthly "#+TITLE: Monthly Journal\n#+STARTUP: folded") + (`yearly "#+TITLE: Yearly Journal\n#+STARTUP: folded")))) + (setq org-journal-file-header 'org-journal-file-header-func)) (use-package doom-modeline :config @@ -256,14 +255,19 @@ :hook (org-mode . (lambda () (org-superstar-mode 1)))) (use-package eglot - :config - (add-to-list 'eglot-server-programs '(nix-mode . ("nil"))) :hook (prog-mode . eglot-ensure) - (nix-mode . eglot-ensure)) + (nix-mode . eglot-ensure) + :config + (add-to-list 'eglot-server-programs '(nix-mode . ("nil")))) + (use-package lsp :hook (prog-mode . lsp)) + +(use-package flycheck + :config (global-flycheck-mode)) + (use-package platformio-mode :hook (prog-mode . platformio-conditionally-enable)) @@ -280,42 +284,37 @@ (use-package solidity-mode) (use-package company-solidity) (use-package solidity-flycheck - :init - (setq solidity-flycheck-solc-checker-active t)) - -(use-package flycheck - :config (global-flycheck-mode)) + :custom + (solidity-flycheck-solc-checker-active t)) (use-package projectile - :init - (setq projectile-project-search-path '("~/org" "~/src")) + :custom + (projectile-project-search-path '("~/org" "~/src" "~/monorepo" "~/projects") "search path for projects") :config (projectile-mode +1)) (use-package dashboard :after (projectile) - :init - (setq dashboard-banner-logo-title "Welcome, Commander!") - (setq dashboard-icon-type 'nerd-icons) - (setq dashboard-vertically-center-content t) - (setq dashboard-set-init-info t) - (setq dashboard-week-agenda t) - (setq dashboard-items '((recents . 5) + :custom + (dashboard-banner-logo-title "Welcome, Commander!" "Set title for dashboard") + (dashboard-icon-type 'nerd-icons "Use nerd icons") + (dashboard-vertically-center-content t "Center content") + (dashboard-set-init-info t) + (dashboard-week-agenda t "Agenda in dashboard") + (dashboard-items '((recents . 5) (bookmarks . 5) (projects . 5) (agenda . 5) - (registers . 5))) + (registers . 5)) "Look at some items") :config (dashboard-setup-startup-hook)) (use-package counsel) (use-package ivy - :init - (setq ivy-use-virtual-buffers t) - (setq enable-recursive-minibuffers t) + :custom + (ivy-use-virtual-buffers t "Make searching more efficient") + (enable-recursive-minibuffers t "Don't get soft locked when in a minibuffer") :bind - ;; enable this if you want `swiper' to use it - ;; (setq search-default-mode #'char-fold-to-regexp) ("C-s" . swiper) ("C-c C-r" . ivy-resume) ("M-x" . counsel-M-x) @@ -337,10 +336,9 @@ (use-package magit) (use-package erc - :init - (setq - erc-nick system-username - erc-user-full-name system-fullname)) + :custom + (erc-nick system-username "Set erc nick to username") + (erc-user-full-name system-fullname "Use real name for full name")) (use-package general :init @@ -360,11 +358,11 @@ (interactive) (ement-connect :uri-prefix "http://localhost:8009")) :config - (general-create-definer leader-key - :prefix "SPC") + (general-create-definer leader-key :prefix "SPC") (leader-key 'normal "o a" '(org-agenda :wk "Open agenda") "o c" '(org-capture :wk "Capture") + "n" '(:ignore t :wk "Org mode plugins") "n j j" '(org-journal-new-entry :wk "Make new journal entry") "n r f" '(org-roam-node-find :wk "Find roam node") "n r i" '(org-roam-node-insert :wk "Insert roam node") @@ -372,14 +370,17 @@ "n r g" '(org-roam-graph :wk "Graph roam database") "r s s" '(elfeed :wk "rss feed") "." '(counsel-find-file :wk "find file") + "g" '(:ignore t :wk "Magit") "g /" '(magit-dispatch :wk "git commands") "g P" '(magit-push :wk "git push") "g c" '(magit-commit :wk "git commit") "g p" '(magit-pull :wk "Pull from git") "g s" '(magit-status :wk "Change status of files") + "o" '(:ignore t :wk "Open application") "o t" '(vterm :wk "Terminal") "o e" '(eshell :wk "Elisp Interpreter") "o m" '(mu4e :wk "Email") + "e w w" '(eww :wk "web browser") "e c c" '(ellama-chat :wk "Chat with Ollama") "e a b" '(ellama-ask-about :wk "Ask Ollama") @@ -390,9 +391,13 @@ "e c e" '(ellama-code-edit :wk "Edit code with Ollama") "e w i" '(ellama-improve-wording :wk "Improve wording with Ollama") "e g i" '(ellama-improve-grammar :wk "Improve grammar with Ollama") + + "c" '(:ignore t :wk "Counsel commands") + "c g" '(counsel-git :wk "Search file in git project") + "c f" '(counsel-git-grep :wk "Find string in git project") + "g s" '(gptel-send :wk "Send to Ollama") "g e" '(gptel :wk "Ollama interface") - "p w" '(ivy-pass :wk "Password manager interface") "m P p" '(org-publish :wk "Publish website components") "s e" '(sudo-edit :wk "Edit file with sudo") "m m" '(emms :wk "Music player") @@ -403,6 +408,10 @@ "i p c" '(prestonpan :wk "Connect to my IRC server") "i l c" '(liberachat :wk "Connect to libera chat server") "i e c" '(efnet :wk "Connect to efnet chat server") + "h" '(:ignore t :wk "Documentation") + "h v" '(counsel-describe-variable :wk "Describe variable") + "h f" '(counsel-describe-function :wk "Describe function") + "h h" '(help :wk "Help") "h m" '(woman :wk "Manual") "h i" '(info :wk "Info") "s m" '(proced :wk "System Manager") @@ -414,22 +423,22 @@ "h r r" '(lambda () (interactive) (org-babel-load-file (expand-file-name "~/monorepo/config/emacs.org"))))) (use-package ellama + :custom + (ellama-sessions-directory "~/org/ellama/" "Set org directory") :init - (setopt ellama-sessions-directory "~/org/ellama/") (require 'llm-ollama) - (with-eval-after-load 'llm-ollama) (setopt ellama-provider (make-llm-ollama :host "localhost" :chat-model "gemma:7b"))) (use-package elfeed - :hook ((elfeed-search-mode . elfeed-update)) - :init - (setq elfeed-search-filter "@1-month-ago +unread")) + :custom + (elfeed-search-filter "@1-month-ago +unread" "Only display unread articles from a month ago") + :hook ((elfeed-search-mode . elfeed-update))) (use-package elfeed-org - :init - (setq rmh-elfeed-org-files '("~/monorepo/config/elfeed.org")) + :custom + (rmh-elfeed-org-files '("~/monorepo/config/elfeed.org") "Use elfeed config in repo as default") :config (elfeed-org)) @@ -437,10 +446,7 @@ :after elfeed :demand t :config - ;; (setq elfeed-tube-auto-save-p nil) ; default value - ;; (setq elfeed-tube-auto-fetch-p t) ; default value (elfeed-tube-setup) - :bind (:map elfeed-show-mode-map ("F" . elfeed-tube-fetch) ([remap save-buffer] . elfeed-tube-save) @@ -465,92 +471,87 @@ :after (treemacs magit)) (use-package eww - :init - (setq search-engines + :custom + (search-engines '((("google" "g") "https://google.com/search?q=%s") (("duckduckgo" "d" "ddg") "https://duckduckgo.com/?q=%s") (("rfc" "r") "https://www.rfc-editor.org/rfc/rfc%s.txt") - (("rfc-kw" "rk") "https://www.rfc-editor.org/search/rfc_search_detail.php?title=%s"))) + (("rfc-kw" "rk") "https://www.rfc-editor.org/search/rfc_search_detail.php?title=%s")) + "use this set of search engines") - (setq search-engine-default "google") - (setq eww-search-prefix "https://google.com/search?q=") - (setq browse-url-secondary-browser-function 'browse-url-generic browse-url-generic-program "firefox") + (search-engine-default "google" "Use google as default") + (eww-search-prefix "https://google.com/search?q=" "Google prefix") + (browse-url-secondary-browser-function 'browse-url-generic browse-url-generic-program "firefox" "Use firefox as secondary browser") :hook ((eww-mode . (lambda () (local-set-key (kbd "y Y") #'eww-copy-page-url))))) (use-package org-roam - :after (org) - :init - (setq org-roam-db-update-on-s |