From e3ac21a61d460b34def911556e51c4f5065d21ac Mon Sep 17 00:00:00 2001 From: Emmet Date: Fri, 5 Dec 2025 14:52:53 -0600 Subject: [PATCH] Restore emacs and magit keybind w zed --- modules/user/emacs/default.nix | 264 +++++++++++++++++++-------------- modules/user/emacs/init.el | 11 +- modules/user/zed/default.nix | 15 ++ 3 files changed, 173 insertions(+), 117 deletions(-) diff --git a/modules/user/emacs/default.nix b/modules/user/emacs/default.nix index e29fb94..fa00a8b 100644 --- a/modules/user/emacs/default.nix +++ b/modules/user/emacs/default.nix @@ -1,8 +1,15 @@ -{ config, lib, pkgs, pkgs-stable, ... }: +{ + config, + lib, + pkgs, + pkgs-stable, + ... +}: let cfg = config.userSettings.emacs; -in { +in +{ options = { userSettings.emacs = { enable = lib.mkEnableOption "Enable emacs"; @@ -15,132 +22,161 @@ in { }; ## THIS IS BROKEN BECAUSE THEY CHANGED EMACS IN NIXPKGS I THINK - config = lib.mkIf false { - #config = lib.mkIf cfg.enable { + #config = lib.mkIf false { + config = lib.mkIf cfg.enable { home.packages = with pkgs; [ (pkgs.emacsWithPackagesFromUsePackage { config = ./init.el; package = pkgs.emacs-pgtk; alwaysEnsure = false; - extraEmacsPackages = epkgs: with epkgs; [ - org-modern olivetti - command-log-mode - vertico corfu hotfuzz orderless - evil evil-collection evil-snipe evil-owl evil-vimish-fold - dashboard doom-themes doom-modeline - nerd-icons nerd-icons-dired nerd-icons-corfu - nerd-icons-ibuffer nerd-icons-completion - yasnippet shackle - projectile treemacs treemacs-projectile - treemacs-evil treemacs-nerd-icons - treesit-grammars.with-all-grammars - git-timemachine wgrep - magit magit-todos - undo-fu undo-fu-session - org-roam org-node org-node-fakeroam - vterm vterm-toggle sudo-edit - direnv - svelte-mode - typescript-mode - sass-mode - rainbow-mode - default-text-scale - (epkgs.callPackage ( - { lib, trivialBuild }: + extraEmacsPackages = + epkgs: with epkgs; [ + org-modern + olivetti + command-log-mode + vertico + corfu + hotfuzz + orderless + evil + evil-collection + evil-snipe + evil-owl + evil-vimish-fold + dashboard + doom-themes + doom-modeline + nerd-icons + nerd-icons-dired + nerd-icons-corfu + nerd-icons-ibuffer + nerd-icons-completion + yasnippet + shackle + projectile + treemacs + treemacs-projectile + treemacs-evil + treemacs-nerd-icons + treesit-grammars.with-all-grammars + git-timemachine + wgrep + magit + magit-todos + undo-fu + undo-fu-session + org-roam + org-node + org-node-fakeroam + vterm + vterm-toggle + sudo-edit + direnv + svelte-mode + typescript-mode + sass-mode + rainbow-mode + default-text-scale + (epkgs.callPackage ( + { lib, trivialBuild }: - trivialBuild { - pname = "web-mode"; - version = "17.3.20"; + trivialBuild { + pname = "web-mode"; + version = "17.3.20"; - src = builtins.fetchGit { - url = "https://github.com/fxbois/web-mode.git"; - rev = "0c83581d1e93d1d802c730a1d5e90cd1c740e1b2"; - ref = "main"; - }; + src = builtins.fetchGit { + url = "https://github.com/fxbois/web-mode.git"; + rev = "0c83581d1e93d1d802c730a1d5e90cd1c740e1b2"; + ref = "main"; + }; - meta = with lib; { - description = "web template editing mode for emacs"; - homepage = "https://web-mode.org/"; - license = licenses.gpl3; - platforms = platforms.all; - }; - } - ) {}) - gdscript-mode - nix-mode - python python-mode - lsp-mode flycheck lsp-ui lsp-treemacs - # fix ultra-scroll - (epkgs.callPackage ( - { lib, trivialBuild }: + meta = with lib; { + description = "web template editing mode for emacs"; + homepage = "https://web-mode.org/"; + license = licenses.gpl3; + platforms = platforms.all; + }; + } + ) { }) + gdscript-mode + nix-mode + python + python-mode + lsp-mode + flycheck + lsp-ui + lsp-treemacs + # fix ultra-scroll + (epkgs.callPackage ( + { lib, trivialBuild }: - trivialBuild { - pname = "ultra-scroll"; - version = "0.2.0"; + trivialBuild { + pname = "ultra-scroll"; + version = "0.2.0"; - src = builtins.fetchGit { - url = "https://github.com/jdtsmith/ultra-scroll.git"; - rev = "64ad7be02e11317576498dabb15c92cf31e2c04c"; - ref = "main"; - }; + src = builtins.fetchGit { + url = "https://github.com/jdtsmith/ultra-scroll.git"; + rev = "64ad7be02e11317576498dabb15c92cf31e2c04c"; + ref = "main"; + }; - meta = with lib; { - description = "scroll Emacs like lightning"; - homepage = "https://github.com/jdtsmith/ultra-scroll"; - license = licenses.gpl3; - platforms = platforms.all; - }; - } - ) {}) - (epkgs.callPackage ( - { lib, trivialBuild }: + meta = with lib; { + description = "scroll Emacs like lightning"; + homepage = "https://github.com/jdtsmith/ultra-scroll"; + license = licenses.gpl3; + platforms = platforms.all; + }; + } + ) { }) + (epkgs.callPackage ( + { lib, trivialBuild }: - trivialBuild { - pname = "lsp-treemacs-nerd-icons"; - version = "2efa09a-unstable"; + trivialBuild { + pname = "lsp-treemacs-nerd-icons"; + version = "2efa09a-unstable"; - src = builtins.fetchGit { - url = "https://github.com/Velnbur/lsp-treemacs-nerd-icons.git"; - rev = "2efa09a701b8b455bfb66529454f27c30f7462dc"; - ref = "master"; - }; + src = builtins.fetchGit { + url = "https://github.com/Velnbur/lsp-treemacs-nerd-icons.git"; + rev = "2efa09a701b8b455bfb66529454f27c30f7462dc"; + ref = "master"; + }; - buildInputs = with pkgs.emacsPackages; [ - lsp-treemacs - treemacs - nerd-icons - ]; + buildInputs = with pkgs.emacsPackages; [ + lsp-treemacs + treemacs + nerd-icons + ]; - meta = with lib; { - description = "Use nerd icons for lsp-mode and lsp-treemacs"; - homepage = "https://github.com/Velnbur/lsp-treemacs-nerd-icons"; - license = licenses.gpl3; - platforms = platforms.all; - }; - } - ) {}) - (epkgs.callPackage ( - { lib, trivialBuild }: + meta = with lib; { + description = "Use nerd icons for lsp-mode and lsp-treemacs"; + homepage = "https://github.com/Velnbur/lsp-treemacs-nerd-icons"; + license = licenses.gpl3; + platforms = platforms.all; + }; + } + ) { }) + (epkgs.callPackage ( + { lib, trivialBuild }: - trivialBuild { - pname = "scratch-plus"; - version = "2efa09a-unstable"; + trivialBuild { + pname = "scratch-plus"; + version = "2efa09a-unstable"; - src = builtins.fetchGit { - url = "https://git.sr.ht/~swflint/scratch-plus"; - rev = "b794901f968000f6e338808307385b683b79ec8b"; - ref = "main"; - }; + src = builtins.fetchGit { + url = "https://git.sr.ht/~swflint/scratch-plus"; + rev = "b794901f968000f6e338808307385b683b79ec8b"; + ref = "main"; + }; - meta = with lib; { - description = "Better scratch buffers"; - homepage = "https://git.sr.ht/~swflint/scratch-plus"; - license = licenses.gpl3; - platforms = platforms.all; - }; - } - ) {}) - ]; + meta = with lib; { + description = "Better scratch buffers"; + homepage = "https://git.sr.ht/~swflint/scratch-plus"; + license = licenses.gpl3; + platforms = platforms.all; + }; + } + ) { }) + ]; }) fira-code nerd-fonts.fira-code @@ -148,8 +184,8 @@ in { home.file.".config/emacs/init.el".source = ./init.el; home.file.".config/emacs/lib".source = ./lib; home.file.".config/emacs/themes/doom-stylix-theme.el".source = config.lib.stylix.colors { - template = builtins.readFile ./lib/doom-stylix-theme.el.mustache; - extension = ".el"; + template = builtins.readFile ./lib/doom-stylix-theme.el.mustache; + extension = ".el"; }; home.file.".config/emacs/sysvars.el".text = '' ;;; sysvars.el --- imported variables from nixos config -*- lexical-binding: t; no-byte-compile: t; -*- @@ -166,6 +202,8 @@ in { ;;; sysvars.el ends here ''; - wayland.windowManager.hyprland.settings.exec-once = lib.optionals config.wayland.windowManager.hyprland.enable [ "emacs --daemon" ]; + wayland.windowManager.hyprland.settings.exec-once = + lib.optionals config.wayland.windowManager.hyprland.enable + [ "emacs --daemon" ]; }; } diff --git a/modules/user/emacs/init.el b/modules/user/emacs/init.el index 8ca4322..94d55c1 100644 --- a/modules/user/emacs/init.el +++ b/modules/user/emacs/init.el @@ -452,13 +452,14 @@ ;; Enable corfu (use-package corfu :custom + (corfu-auto t) (corfu-cycle t) ;; Enable cycling for `corfu-next/previous' - ;; (corfu-preview-current nil) ;; Disable current candidate preview + (corfu-preview-current t) ;; Disable current candidate preview (corfu-preselect 'prompt) ;; Preselect the prompt (corfu-on-exact-match 'insert) ;; Configure handling of exact matches - (corfu-auto nil) ;; auto complete - (corfu-auto-delay 1.2) ;; wait half a second though - (corfu-auto-prefix 5) ;; also only for words 3 or more + (corfu-auto-delay 0.15) ;; wait half a second though + (corfu-auto-prefix 2) ;; also only for words 2 or more + (corfu-min-width 120) (defun corfu-lsp-setup () (setq-local completion-styles '(orderless flex hotfuzz) completion-category-defaults nil)) @@ -1094,5 +1095,7 @@ Made for `org-tab-first-hook' in evil-mode." (use-package rainbow-mode) +(set-frame-font "FiraCode Nerd Font") + (provide 'init) ;;; init.el ends here diff --git a/modules/user/zed/default.nix b/modules/user/zed/default.nix index ec154ae..7e0e328 100644 --- a/modules/user/zed/default.nix +++ b/modules/user/zed/default.nix @@ -128,6 +128,12 @@ in "task_name" = "gitu"; } ]; + "space g G" = [ + "task::Spawn" + { + "task_name" = "magit"; + } + ]; "space o d" = [ "task::Spawn" { @@ -221,6 +227,15 @@ in use_new_terminal = false; hide = "on_success"; } + { + label = "magit"; + command = "emacsclient -c --eval '(magit-status)' &> /dev/null & disown; exit;"; + reveal = "always"; + reveal_target = "center"; + allow_concurrent_runs = false; + use_new_terminal = false; + hide = "on_success"; + } { label = "yazi"; command = "yazi";