summaryrefslogtreecommitdiff
path: root/config
diff options
context:
space:
mode:
authorPreston Pan <ret2pop@nullring.xyz>2026-03-30 17:31:14 -0700
committerPreston Pan <ret2pop@nullring.xyz>2026-03-30 17:31:14 -0700
commitdccbebb81e9241b9b7b2140b77a818befe6e5a0a (patch)
treefe73c091a92ec869fb8993429ef7997210feb975 /config
parentd67b4932e2e20e2d0c249c501e86b88fa9ff6fe1 (diff)
sweep
Diffstat (limited to 'config')
-rw-r--r--config/emacs.org287
-rw-r--r--config/nix.org67
-rw-r--r--config/qtile.org7
3 files changed, 274 insertions, 87 deletions
diff --git a/config/emacs.org b/config/emacs.org
index 98fe132..0144bf6 100644
--- a/config/emacs.org
+++ b/config/emacs.org
@@ -304,67 +304,67 @@ configuration as they are also defined using the use-package macros. Some of the
have documentation strings attached, so it is easy to follow what the individual options do.
Emacs is self documenting, after all!
#+begin_src emacs-lisp :tangle ../nix/init.el
- (use-package emacs
- :custom
- ;; global defaults
- (enable-local-variables :all "don't emit local variable warnings when publishing")
- (indent-tabs-mode nil "no real tabs, only spaces")
- (tab-width 2 "tab show as 2 spaces")
- (standard-indent 2 "base indentation")
- (custom-safe-themes t "I already manage my themes with nix")
- (custom-file null-device "Don't save custom configs")
- (jit-lock-chunk-size 16384 "actually load code blocks")
- (jit-lock-stealth-time 1.25 "fontify in the background after 1.25s of idle time")
- (jit-lock-stealth-nice 0.1 "don't freeze Emacs while stealth fontifying")
- ;; ---------------------------------------------------------------------------
- ;; UTF-8 Everywhere
- ;; ---------------------------------------------------------------------------
- (set-language-environment "UTF-8")
- (set-default-coding-systems 'utf-8)
- (prefer-coding-system 'utf-8)
- (set-terminal-coding-system 'utf-8)
- (set-keyboard-coding-system 'utf-8)
- (set-selection-coding-system 'utf-8)
- (locale-coding-system 'utf-8)
- (use-default-font-for-symbols nil)
+(use-package emacs
+ :custom
+ ;; global defaults
+ (enable-local-variables :all "don't emit local variable warnings when publishing")
+ (indent-tabs-mode nil "no real tabs, only spaces")
+ (tab-width 2 "tab show as 2 spaces")
+ (standard-indent 2 "base indentation")
+ (custom-safe-themes t "I already manage my themes with nix")
+ (custom-file null-device "Don't save custom configs")
+ (jit-lock-chunk-size 16384 "actually load code blocks")
+ (jit-lock-stealth-time 1.25 "fontify in the background after 1.25s of idle time")
+ (jit-lock-stealth-nice 0.1 "don't freeze Emacs while stealth fontifying")
+ ;; ---------------------------------------------------------------------------
+ ;; UTF-8 Everywhere
+ ;; ---------------------------------------------------------------------------
+ (set-language-environment "UTF-8")
+ (set-default-coding-systems 'utf-8)
+ (prefer-coding-system 'utf-8)
+ (set-terminal-coding-system 'utf-8)
+ (set-keyboard-coding-system 'utf-8)
+ (set-selection-coding-system 'utf-8)
+ (locale-coding-system 'utf-8)
+ (use-default-font-for-symbols nil)
- ;; Startup errors
- (warning-minimum-level :emergency "Supress emacs warnings")
- (confirm-kill-processes nil "Don't ask to quit")
- (debug-ignored-errors (cons 'remote-file-error debug-ignored-errors) "Remove annoying error from debug errors")
- (browse-url-generic-program "qutebrowser" "set browser to librewolf")
- (browse-url-secondary-browser-function 'browse-url-generic "set browser")
- (browse-url-browser-function 'browse-url-generic "set browser")
- (default-frame-alist '((alpha-background . 100)
- (vertical-scroll-bars)
- (internal-border-width . 24)
- (left-fringe . 8)
- (right-fringe . 8)))
- ;; 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")
- (debug-on-error nil "Don't make the annoying popups")
- (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 150 "Draw a line at 100 characters")
- (fill-column 150)
- (line-spacing 2 "Default line spacing")
- (c-doc-comment-style '((c-mode . doxygen)
- (c++-mode . doxygen)))
+ ;; Startup errors
+ (warning-minimum-level :emergency "Supress emacs warnings")
+ (confirm-kill-processes nil "Don't ask to quit")
+ (debug-ignored-errors (cons 'remote-file-error debug-ignored-errors) "Remove annoying error from debug errors")
+ (browse-url-generic-program "qutebrowser" "set browser to librewolf")
+ (browse-url-secondary-browser-function 'browse-url-generic "set browser")
+ (browse-url-browser-function 'browse-url-generic "set browser")
+ (default-frame-alist '((alpha-background . 100)
+ (vertical-scroll-bars)
+ (internal-border-width . 24)
+ (left-fringe . 8)
+ (right-fringe . 8)))
+ ;; 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")
+ (debug-on-error nil "Don't make the annoying popups")
+ (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 150 "Draw a line at 100 characters")
+ (fill-column 150)
+ (line-spacing 2 "Default line spacing")
+ (c-doc-comment-style '((c-mode . doxygen)
+ (c++-mode . doxygen)))
- :hook ((text-mode . visual-line-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))
- :config (emacs-config))
+ :hook ((text-mode . visual-line-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))
+ :config (emacs-config))
#+end_src
As you can see, the config (and sometimes the init section) of most of these use-package blocks
contain most of the imperative commands. In fact, most of the configurations are completely
@@ -453,6 +453,10 @@ This is my org mode configuration, which also configures latex.
(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-agenda-block-separator "")
+ (org-fontify-whole-heading-line t)
+ (org-fontify-done-headline t)
+ (org-fontify-quote-and-verse-blocks t)
(org-default-notes-file (concat org-directory "/notes.org") "Notes file")
;; ricing
@@ -744,6 +748,77 @@ First, some small configurations and some evil-mode initilaization because I lik
(use-package page-break-lines
:config (page-break-lines-mode))
+
+(use-package evil-mc
+ :after evil
+ :config (global-evil-mc-mode 1))
+
+(use-package evil-surround
+ :after evil
+ :config
+ (global-evil-surround-mode 1))
+
+(use-package evil-lion
+ :config
+ (evil-lion-mode))
+
+(use-package evil-multiedit
+ :after evil
+ :config
+ (evil-multiedit-default-keybinds))
+
+(use-package evil-textobj-tree-sitter
+ :ensure t
+ ;; Ensure Evil is loaded first so the text-object maps exist
+ :after evil
+
+ ;; 1. The Keybindings
+ :bind ((:map evil-outer-text-objects-map
+ ("f" . my-treesit-outer-function)
+ ("c" . my-treesit-outer-class)
+ ("a" . my-treesit-outer-arg))
+
+ (:map evil-inner-text-objects-map
+ ("f" . my-treesit-inner-function)
+ ("c" . my-treesit-inner-class)
+ ("a" . my-treesit-inner-arg))
+
+ (:map evil-normal-state-map
+ ("] f" . my-treesit-goto-next-function)
+ ("[ f" . my-treesit-goto-prev-function)
+ ("] c" . my-treesit-goto-next-class)
+ ("[ c" . my-treesit-goto-prev-class)))
+
+ ;; 2. The Command Definitions
+ :config
+ ;; Link the custom names we bound above to the actual Tree-sitter closures
+ (defalias 'my-treesit-outer-function (evil-textobj-tree-sitter-get-textobj "function.outer"))
+ (defalias 'my-treesit-inner-function (evil-textobj-tree-sitter-get-textobj "function.inner"))
+
+ (defalias 'my-treesit-outer-class (evil-textobj-tree-sitter-get-textobj "class.outer"))
+ (defalias 'my-treesit-inner-class (evil-textobj-tree-sitter-get-textobj "class.inner"))
+
+ ;; "a" is standard Vim terminology for "argument" (parameter)
+ (defalias 'my-treesit-outer-arg (evil-textobj-tree-sitter-get-textobj "parameter.outer"))
+ (defalias 'my-treesit-inner-arg (evil-textobj-tree-sitter-get-textobj "parameter.inner"))
+
+ ;; Navigation commands are standard interactive functions, so we wrap them cleanly
+ (defun my-treesit-goto-next-function ()
+ (interactive)
+ (evil-textobj-tree-sitter-goto-textobj "function.outer"))
+
+ (defun my-treesit-goto-prev-function ()
+ (interactive)
+ (evil-textobj-tree-sitter-goto-textobj "function.outer" t))
+
+ (defun my-treesit-goto-next-class ()
+ (interactive)
+ (evil-textobj-tree-sitter-goto-textobj "class.outer"))
+
+ (defun my-treesit-goto-prev-class ()
+ (interactive)
+ (evil-textobj-tree-sitter-goto-textobj "class.outer" t)))
+
#+end_src
** Journal
I use org-journal to journal about my life, and it's a part of my website:
@@ -850,14 +925,43 @@ We use org-alert in order to give us notifications based on our org-agenda.
** LSP
We set up eglot, the LSP manager for emacs, now built in:
#+begin_src emacs-lisp :tangle ../nix/init.el
-(use-package lsp
+(use-package lsp-mode
:custom
(lsp-use-plists t)
(lsp-typescript-format-enable t)
(lsp-typescript-indent-size 4)
(lsp-typescript-tab-size 4)
(lsp-typescript-indent-style "spaces")
- :hook ((prog-mode . lsp)))
+
+ (lsp-auto-guess-root t)
+ (lsp-restart 'auto-restart)
+ (lsp-keep-workspace-alive t)
+
+ :hook ((python-mode . lsp-deferred)
+ (python-ts-mode . lsp-deferred)
+ (emacs-lisp-mode . lsp-deferred)
+ (yaml-mode . lsp-deferred)
+ (yaml-ts-mode . lsp-deferred)
+ (json-mode . lsp-deferred)
+ (json-ts-mode . lsp-deferred)
+ (toml-mode . lsp-deferred)
+ (toml-ts-mode . lsp-deferred)
+ (sh-mode . lsp-deferred)
+ (nix-mode . lsp-deferred))
+ :commands (lsp lsp-deferred)
+ :general
+ (:states 'normal :keymaps 'lsp-mode-map
+ "gI" #'lsp-find-implementation
+ "gy" #'lsp-find-type-definition
+ "K" #'lsp-describe-thing-at-point))
+
+(use-package lsp-ui
+ :after lsp-mode
+ :general
+ (:states 'normal :keymaps 'lsp-mode-map
+ "gd" #'lsp-ui-peek-find-definitions
+ "gr" #'lsp-ui-peek-find-references)
+ :hook (lsp-mode . lsp-ui-mode))
(use-package editorconfig
:config (editorconfig-mode 1))
@@ -867,6 +971,11 @@ We set up eglot, the LSP manager for emacs, now built in:
(use-package platformio-mode
:hook (prog-mode . platformio-conditionally-enable))
+
+(use-package dap-mode
+ :custom
+ (dap-auto-configure-features '(sessions locals controls tooltip))
+ :hook (lsp-mode . dap-mode))
#+end_src
*** C/C++
Specific configuration for C (I also use the clangd lsp):
@@ -904,13 +1013,14 @@ We want our emacs initialization to be pretty and display useful things.
(use-package dashboard
:after (projectile)
:custom
- (dashboard-banner-logo-title "Introducing: Ret2pop" "Set title for dashboard")
- (dashboard-startup-banner "/home/preston/monorepo/nix/data/logo.png")
+ (dashboard-banner-logo-title "Introducing: Ret2pop!" "Set title for dashboard")
+ (dashboard-startup-banner logo-file)
(dashboard-icon-type 'all-the-icons "Use nerd icons")
(dashboard-center-content t "Center content")
(dashboard-set-init-info t)
(dashboard-set-heading-icons t)
(dashboard-set-file-icons t)
+ (dashboard-projects-backend 'projectile)
(dashboard-week-agenda t "Agenda in dashboard")
(dashboard-items '((recents . 5)
@@ -1326,6 +1436,8 @@ interface and can control it from emacs):
:config (elfeed-tube-setup))
(use-package elfeed-tube-mpv
+ :after elfeed-tube
+ :demand t
:bind (:map elfeed-show-mode-map
("C-c C-f" . elfeed-tube-mpv-follow-mode)
("C-c C-c" . elfeed-tube-mpv)
@@ -1338,12 +1450,14 @@ I use treemacs as my sidebar for projects, so that I can easily navigate to any
project directory.
#+begin_src emacs-lisp :tangle ../nix/init.el
(use-package treemacs
+ :demand t
:after doom-themes)
(use-package treemacs-evil
:after (treemacs evil))
(use-package treemacs-projectile
+ :demand t
:after (treemacs projectile))
(use-package treemacs-magit
@@ -1508,6 +1622,55 @@ I use tabs because sometimes I like using the mouse (it's actually more efficien
:demand t
:config (centaur-tabs-mode t))
#+end_src
+** Sops
+#+begin_src emacs-lisp :tangle ../nix/init.el
+(unless noninteractive
+ (use-package sops
+ :bind (("C-c C-c" . sops-save-file)
+ ("C-c C-k" . sops-cancel)
+ ("C-c C-d" . sops-edit-file))
+ :init (global-sops-mode 1)))
+#+end_src
+** Pulseaudio
+#+begin_src emacs-lisp :tangle ../nix/init.el
+(unless noninteractive
+ (use-package pulseaudio-control
+ :config (pulseaudio-control-default-keybindings)))
+#+end_src
+** TreeSitter
+#+begin_src emacs-lisp :tangle ../nix/init.el
+(use-package treesit-auto
+ :custom
+ (treesit-auto-install 'prompt)
+ :config
+ (treesit-auto-add-to-auto-mode-alist 'all)
+ (global-treesit-auto-mode))
+#+end_src
+** Indentation
+#+begin_src emacs-lisp :tangle ../nix/init.el
+(use-package aggressive-indent
+ :hook ((js-ts-mode . aggressive-indent-mode)
+ (css-ts-mode . aggressive-indent-mode)
+ (json-ts-mode . aggressive-indent-mode)
+ (nix-mode . aggressive-indent-mode)
+ (c-ts-mode . aggressive-indent-mode)))
+#+end_src
+** Pulsar
+#+begin_src emacs-lisp :tangle ../nix/init.el
+(use-package pulsar
+ :custom
+ (pulsar-delay 0.055)
+ (pulsar-iterations 5)
+ (pulsar-face 'pulsar-green)
+ (pulsar-region-face 'pulsar-yellow)
+ (pulsar-highlight-face 'pulsar-magenta)
+ :bind
+ (:map global-map
+ ("C-x l" . pulsar-pulse-line)
+ ("C-x L" . pulsar-highlight-permanently-dwim))
+ :init
+ (pulsar-global-mode 1))
+#+end_src
* Unpinned
** Lean4
For some reason, lean4-mode is not in MELPA currently so I have to do this ugly thing:
diff --git a/config/nix.org b/config/nix.org
index 837d713..ff777fb 100644
--- a/config/nix.org
+++ b/config/nix.org
@@ -395,26 +395,27 @@ with mkDiskoFiles.
* Sops Configuration
In order to use the sops configuration, you must change the age public key to the one that
you own:
-#+begin_src yaml :tangle ../nix/.sops.yaml
- keys:
- - &primary age165ul43e8rc0qwzz2f2q9cw02psm2mkudsrwavq2e0pxs280p64yqy2z0dr
- - &vps age1acpuyy2qnduyxzwvusd8urr6a78e3f37ylhvh2pngyqytf5r8ans5vkest
- creation_rules:
- - path_regex: secrets/secrets.yaml$
- key_groups:
- - age:
- - *primary
+#+begin_src yaml :tangle ../nix/.sops.yaml :comments no
+keys:
+ - &primary age165ul43e8rc0qwzz2f2q9cw02psm2mkudsrwavq2e0pxs280p64yqy2z0dr
+ - &vps age1acpuyy2qnduyxzwvusd8urr6a78e3f37ylhvh2pngyqytf5r8ans5vkest
- - path_regex: secrets/vps_secrets.yaml$
- key_groups:
- - age:
- - *vps
+creation_rules:
+ - path_regex: secrets/secrets.yaml$
+ key_groups:
+ - age:
+ - *primary
- - path_regex: secrets/common_secrets.yaml$
- key_groups:
- - age:
- - *primary
- - *vps
+ - path_regex: secrets/vps_secrets.yaml$
+ key_groups:
+ - age:
+ - *vps
+
+ - path_regex: secrets/common_secrets.yaml$
+ key_groups:
+ - age:
+ - *primary
+ - *vps
#+end_src
also note that you will have to write your own secrets.yaml file, with an entry called ~mail~,
which is used for the imaps and smtps password.
@@ -3147,6 +3148,7 @@ in
lang-lean.enable = lib.mkEnableOption "Enables lean language support";
lang-haskell.enable = lib.mkEnableOption "Enables haskell language support";
lang-scheme.enable = lib.mkEnableOption "Enables scheme language support";
+ lang-data.enable = lib.mkEnableOption "Enables markup languages support";
crypto.enable = lib.mkEnableOption "Enables various cryptocurrency wallets";
art.enable = lib.mkEnableOption "Enables various art programs";
music.enable = lib.mkEnableOption "Enables mpd";
@@ -3196,13 +3198,20 @@ in
(if config.monorepo.profiles.lang-python.enable then (with pkgs; [
poetry
python3
- python314Packages.python-lsp-server
+ semgrep
+ ty
+ ruff
+ python314Packages.debugpy
]) else [])
++
(if config.monorepo.profiles.lang-sol.enable then (with pkgs; [
solc
]) else [])
++
+ (if config.monorepo.profiles.lang-data.enable then (with pkgs; [
+ yaml-language-server
+ ]) else [])
+ ++
(if config.monorepo.profiles.lang-openscad.enable then (with pkgs; [
openscad
openscad-lsp
@@ -3299,6 +3308,7 @@ in
lang-idris.enable = lib.mkDefault config.monorepo.profiles.enable;
lang-agda.enable = lib.mkDefault config.monorepo.profiles.enable;
lang-scheme.enable = lib.mkDefault config.monorepo.profiles.enable;
+ lang-data.enable = lib.mkDefault config.monorepo.profiles.enable;
crypto.enable = lib.mkDefault config.monorepo.profiles.enable;
art.enable = lib.mkDefault config.monorepo.profiles.enable;
@@ -3393,6 +3403,7 @@ be straightforward.
w = "https://en.wikipedia.org/wiki/Special:Search?search={}&amp;go=Go&amp;ns0=1";
aw = "https://wiki.archlinux.org/?search={}";
nw = "https://wiki.nixos.org/index.php?search={}";
+ npk = "https://search.nixos.org/packages?channel=unstable&query={}";
};
settings = {
content.blocking.method = "both";
@@ -3445,7 +3456,7 @@ compilation, and because I can fetch their exact versions. Note that I have a st
configuration here that tells emacs to load my real configuration at ~~/monorepo/config/emacs.org~
as an org file which gets automatically tangled to an emacs-lisp file.
#+begin_src nix :tangle ../nix/modules/home/emacs.nix
-{ lib, config, pkgs, super, ... }:
+{ lib, config, pkgs, super, self, ... }:
{
programs.emacs =
{
@@ -3453,6 +3464,7 @@ as an org file which gets automatically tangled to an emacs-lisp file.
package = pkgs.emacs-pgtk;
extraConfig = ''
(setq debug-on-error t)
+ (setq logo-file "${self}/data/logo.png")
(setq system-email "${super.monorepo.vars.email}")
(setq system-username "${super.monorepo.vars.internetName}")
(setq system-fullname "${super.monorepo.vars.fullName}")
@@ -3475,6 +3487,7 @@ as an org file which gets automatically tangled to an emacs-lisp file.
I want to separate out these packages so that my parent flake which builds my website has a list of my packages.
#+begin_src nix :tangle ../nix/modules/home/emacs-packages.nix
epkgs: with epkgs; [
+ aggressive-indent
all-the-icons
agda2-mode
auctex
@@ -3484,6 +3497,7 @@ epkgs: with epkgs; [
company-solidity
counsel
centaur-tabs
+ dap-mode
dash
dashboard
doom-themes
@@ -3503,7 +3517,12 @@ epkgs: with epkgs; [
evil
evil-collection
evil-commentary
+ evil-multiedit
+ evil-mc
+ evil-surround
evil-org
+ evil-lion
+ evil-textobj-tree-sitter
f
flycheck
geiser
@@ -3521,6 +3540,7 @@ epkgs: with epkgs; [
latex-preview-pane
lsp-ivy
lsp-mode
+ lsp-ui
lsp-haskell
lyrics-fetcher
mastodon
@@ -3541,6 +3561,8 @@ epkgs: with epkgs; [
org-modern
org-roam
org-roam-ui
+ pulseaudio-control
+ pulsar
page-break-lines
password-store
pdf-tools
@@ -3550,6 +3572,7 @@ epkgs: with epkgs; [
polymode
rustic
s
+ sops
solaire-mode
scad-mode
simple-httpd
@@ -4076,10 +4099,10 @@ for these configurations.
# Apps
octaveFull
- grim swww vim kotatogram-desktop tg qwen-code element-desktop signal-desktop signal-cli thunderbird jami
+ grim swww vim element-desktop signal-desktop signal-cli thunderbird jami imv slurp
# Sound/media
- pavucontrol alsa-utils imagemagick ffmpeg helvum
+ pavucontrol alsa-utils imagemagick ffmpeg helvum pulseaudio
# Net
curl rsync gitFull ungoogled-chromium devd
diff --git a/config/qtile.org b/config/qtile.org
index 0f5c847..83d0c8d 100644
--- a/config/qtile.org
+++ b/config/qtile.org
@@ -26,9 +26,8 @@ from qtile_extras.layout.decorations import RoundedCorners
import re
#+end_src
We're using wayland because it's better.
-* Config
+* Data
#+begin_src python :tangle ../nix/qtile/config.py
-
mod = "mod4"
terminal = "kitty"
wallpaper = WALLPAPER
@@ -73,7 +72,9 @@ workspace_keys = {
"8": "8",
"9": "9",
}
-
+#+end_src
+* Config
+#+begin_src python :tangle ../nix/qtile/config.py
groups = [
Group("1", matches=[Match(wm_class=re.compile(r"^emacs$", re.IGNORECASE))]),
Group("2", matches=[Match(wm_class=re.compile(r"(qutebrowser|org\.qutebrowser\.qutebrowser)", re.IGNORECASE))]),