From a0ebcbe95aee9cfd191419bf171b4b658ab20194 Mon Sep 17 00:00:00 2001 From: Preston Pan Date: Sun, 26 Apr 2026 16:14:21 -0700 Subject: routine cleanup --- config/emacs.el | 6 +++++ config/emacs.org | 45 +++++++++++++++++++++++----------- config/nix.org | 73 +++++++++++++++++++++++++++++++++++++++++++------------- 3 files changed, 93 insertions(+), 31 deletions(-) create mode 100644 config/emacs.el (limited to 'config') 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")) - - (load "${pkgs.writeText "init.el" (builtins.readFile ../../init.el)}") - ''; - - extraPackages = import ./emacs-packages.nix; + (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 = 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" -- cgit v1.3