summaryrefslogtreecommitdiff
path: root/config
diff options
context:
space:
mode:
authorPreston Pan <ret2pop@nullring.xyz>2026-04-26 16:14:21 -0700
committerPreston Pan <ret2pop@nullring.xyz>2026-04-26 16:14:21 -0700
commita0ebcbe95aee9cfd191419bf171b4b658ab20194 (patch)
tree254912fe915957782cedd633e516deb667c77f6c /config
parent5b8652b795d154e90fa782198d0624fe49f34f90 (diff)
routine cleanup
Diffstat (limited to 'config')
-rw-r--r--config/emacs.el6
-rw-r--r--config/emacs.org45
-rw-r--r--config/nix.org71
3 files changed, 92 insertions, 30 deletions
diff --git a/config/emacs.el b/config/emacs.el
new file mode 100644
index 0000000..430d9a5
--- /dev/null
+++ b/config/emacs.el
@@ -0,0 +1,6 @@
+;; [[file:emacs.org::*VTerm][VTerm:1]]
+(use-package vterm
+ :custom
+ (vterm-kill-buffer-on-exit nil)
+ :hook (vterm-exit-functions . rp/vterm-close-window-on-exit))
+;; VTerm:1 ends here
diff --git a/config/emacs.org b/config/emacs.org
index ce61b4a..2970ca3 100644
--- a/config/emacs.org
+++ b/config/emacs.org
@@ -894,6 +894,10 @@ First, some small configurations and some evil-mode initilaization because I lik
:config
(evil-multiedit-default-keybinds))
+ (use-package evil-indent-plus
+ :ensure t
+ :config (evil-indent-plus-default-bindings))
+
(use-package evil-textobj-tree-sitter
:ensure t
;; Ensure Evil is loaded first so the text-object maps exist
@@ -903,12 +907,16 @@ First, some small configurations and some evil-mode initilaization because I lik
:bind ((:map evil-outer-text-objects-map
("f" . my-treesit-outer-function)
("c" . my-treesit-outer-class)
- ("a" . my-treesit-outer-arg))
-
+ ("a" . my-treesit-outer-arg)
+ ("s" . my-treesit-outer-statement) ;; Added Statement
+ ("b" . my-treesit-outer-block)) ;; Added Block (Great for SCSS/CSS)
+
(:map evil-inner-text-objects-map
("f" . my-treesit-inner-function)
("c" . my-treesit-inner-class)
- ("a" . my-treesit-inner-arg))
+ ("a" . my-treesit-inner-arg)
+ ("s" . my-treesit-inner-statement) ;; Added Statement
+ ("b" . my-treesit-inner-block)) ;; Added Block
(:map evil-normal-state-map
("] f" . my-treesit-goto-next-function)
@@ -919,15 +927,23 @@ First, some small configurations and some evil-mode initilaization because I lik
;; 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-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"))
+ (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"))
+ (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"))
+
+ ;; Added Statement definitions
+ (defalias 'my-treesit-outer-statement (evil-textobj-tree-sitter-get-textobj "statement.outer"))
+ (defalias 'my-treesit-inner-statement (evil-textobj-tree-sitter-get-textobj "statement.inner"))
+
+ ;; Added Block definitions (Targets {} blocks in SCSS, C, TS, etc.)
+ (defalias 'my-treesit-outer-block (evil-textobj-tree-sitter-get-textobj "block.outer"))
+ (defalias 'my-treesit-inner-block (evil-textobj-tree-sitter-get-textobj "block.inner"))
;; Navigation commands are standard interactive functions, so we wrap them cleanly
(defun my-treesit-goto-next-function ()
@@ -946,7 +962,6 @@ First, some small configurations and some evil-mode initilaization because I lik
(interactive)
(evil-textobj-tree-sitter-goto-textobj "class.outer" t)))
-
(use-package general
:after (evil evil-collection)
:config
@@ -1143,6 +1158,10 @@ 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 envrc
+ :demand t
+ :hook (after-init . envrc-global-mode))
+
(use-package python
:after lsp-mode
:hook (python-ts-mode . lsp-deferred))
@@ -1873,10 +1892,8 @@ I use tabs because sometimes I like using the mouse (it's actually more efficien
** Lean4
For some reason, lean4-mode is not in MELPA currently so I have to do this ugly thing:
#+begin_src emacs-lisp :tangle ../nix/init.el
-(unless noninteractive (use-package lean4-mode
- :commands lean4-mode
- :vc (:url "https://github.com/leanprover-community/lean4-mode.git"
- :rev "76895d8939111654a472cfc617cfd43fbf5f1eb6")))
+(use-package lean4-mode
+ :commands lean4-mode)
#+end_src
and actually pull something from the internet instead of pinning. Thankfully this reproduction issue is probably localized to lean files. Also,
we're pulling a specific commit so it is still pinned. If it fails to fetch, lean4 is broken I guess.
diff --git a/config/nix.org b/config/nix.org
index 71d9b4c..9c92f06 100644
--- a/config/nix.org
+++ b/config/nix.org
@@ -96,6 +96,10 @@ and now for the main flake:
url = "github:catppuccin/qutebrowser";
flake = false;
};
+ lean4-mode-src = {
+ url = "github:leanprover-community/lean4-mode";
+ flake = false;
+ };
};
outputs = {
@@ -3538,26 +3542,58 @@ as an org file which gets automatically tangled to an emacs-lisp file.
enable = lib.mkDefault config.monorepo.profiles.graphics.enable;
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}")
- (setq system-gpgkey "${super.monorepo.vars.gpgKey}")
- (setq my-ispell-dictionary "${pkgs.scowl}/share/dict/words.txt")
- (setq my-ispell-args '(
- "--encoding=iso-8859-1"
- "--mode=url"
- "--data-dir=${pkgs.aspell}/lib/aspell"
- "--dict-dir=${pkgs.aspellDicts.en}/lib/aspell"))
+ (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}")
+ (setq system-gpgkey "${super.monorepo.vars.gpgKey}")
+ (setq my-ispell-dictionary "${pkgs.scowl}/share/dict/words.txt")
+ (setq my-ispell-args '(
+ "--encoding=iso-8859-1"
+ "--mode=url"
+ "--data-dir=${pkgs.aspell}/lib/aspell"
+ "--dict-dir=${pkgs.aspellDicts.en}/lib/aspell"))
- (load "${pkgs.writeText "init.el" (builtins.readFile ../../init.el)}")
- '';
-
- extraPackages = import ./emacs-packages.nix;
+ (load "${pkgs.writeText "init.el" (builtins.readFile ../../init.el)}")
+ '';
+ extraPackages = epkgs:
+ let
+ # 1. Import the new file and pass it the required arguments
+ lean4-mode-pinned = import ../../user-packages/lean4.nix {
+ inherit epkgs;
+ lean4-src = self.inputs.lean4-mode-src;
+ };
+
+ # 2. Import your standard packages
+ basePackages = import ./emacs-packages.nix epkgs;
+ in
+ basePackages ++ [ lean4-mode-pinned ];
};
}
#+end_src
+**** Lean4-Mode
+#+begin_src nix :tangle ../nix/user-packages/lean4.nix
+{ epkgs, lean4-src }:
+
+epkgs.trivialBuild {
+ pname = "lean4-mode";
+ version = "pinned";
+ src = lean4-src;
+
+ packageRequires = with epkgs; [
+ lsp-mode
+ magit-section
+ dash
+ f
+ s
+ ];
+
+ postInstall = ''
+ cp -r data $out/share/emacs/site-lisp/
+ '';
+}
+#+end_src
**** Emacs Packages
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
@@ -3575,6 +3611,7 @@ epkgs: with epkgs; [
dap-mode
dash
dashboard
+ envrc
doom-themes
doom-modeline
indent-bars
@@ -3590,6 +3627,7 @@ epkgs: with epkgs; [
engrave-faces
enwc
evil
+ evil-indent-plus
evil-collection
evil-commentary
evil-multiedit
@@ -4214,6 +4252,7 @@ for these configurations.
libnotify
htop
minify
+ direnv
python3Packages.adblock
(pkgs.writeShellScriptBin "help"