{ config, pkgs, lib, flakeRoot, ... }: let emacsExtraPackages = epkgs: [ epkgs.manualPackages.treesit-grammars.with-all-grammars epkgs.nerd-icons epkgs.doom-modeline epkgs.diminish epkgs.eldoc epkgs.pulsar epkgs.which-key epkgs.expreg epkgs.vundo epkgs.puni epkgs.avy epkgs.consult epkgs.vertico epkgs.marginalia epkgs.crux epkgs.magit epkgs.nerd-icons-corfu epkgs.corfu epkgs.cape epkgs.orderless epkgs.yasnippet epkgs.yasnippet-snippets epkgs.rg epkgs.exec-path-from-shell epkgs.eat epkgs.rust-mode epkgs.rustic epkgs.nix-mode epkgs.hcl-mode epkgs.shell-pop epkgs.envrc epkgs.nixpkgs-fmt epkgs.f epkgs.gptel epkgs.catppuccin-theme epkgs.eldoc-box epkgs.sideline epkgs.sideline-flymake epkgs.sideline-eglot ]; in { ################################# # System-level Emacs ################################# programs.emacs = { enable = true; package = pkgs.emacs-pgtk.override { withTreeSitter = true; }; extraPackages = emacsExtraPackages; }; ################################# # Home Manager-level configuration # Only define if Home Manager is active ################################# home-manager.useGlobalPkgs = lib.optionalBool (config.home-manager != null) true; home-manager.useUserPackages = lib.optionalBool (config.home-manager != null) true; home.sessionVariables = lib.optionalAttrs (config.home-manager != null) { EDITOR = "emacs"; XDG_SCREENSHOTS_DIR = "~/screenshots"; }; home.file = lib.optionalAttrs (config.home-manager != null) { ".emacs.d/early-init.el" = { source = "${flakeRoot}/assets/traveldroid/conf/emacs/early-init.el"; }; ".emacs.d/init.el" = { source = "${flakeRoot}/assets/traveldroid/conf/emacs/init.el"; }; }; }