{ config, inputs, lib, options, pkgs, ... }: with lib; let cfg = config.samfelag.modules.editors.emacs; i3Cfg = config.samfelag.modules.desktop.i3; emacsPackages = epkgs: [ epkgs.vterm ]; emacsWithPackages = with pkgs; ((emacsPackagesFor emacsNativeComp).emacsWithPackages emacsPackages); in { options.samfelag.modules.editors.emacs = { enable = mkEnableOption "emacs"; }; config = mkIf cfg.enable { nixpkgs.overlays = [ inputs.emacs-overlay.overlay ]; environment.systemPackages = with pkgs; [ ## Emacs itself binutils emacsWithPackages # emacsPgtkGcc ## Doom dependencies git (ripgrep.override { withPCRE2 = true; }) gnutls ## Opt deps fd imagemagick pinentry_emacs zstd ## Modules deps # :tools vterm gcc gnumake libtool cmake # # :lang cc # ccls # cmake # gcc # glslang # # :lang haskell # stack # haskellPackages.ghcide # haskellPackages.hoogle # # :lang latex && :lang org (latex preview) # (texlive.combine { inherit (texlive) scheme-full; }) # # biber # # :lang nix # nixfmt # # :lang python # black # python3 # python3Packages.isort # # python3Packages.python-language-server # python3Packages.pytest # python3Packages.setuptools # nodePackages.pyright # # :tools lookup & :lang org +roam # sqlite # # :tools direnv # direnv # Fonts emacs-all-the-icons-fonts # fira-code # fira-code-symbols graphviz ]; fonts.fonts = [ pkgs.emacs-all-the-icons-fonts ]; env.PATH = [ "$HOME/.config/emacs/bin" ]; hm.xdg.configFile."doom" = { source = ../../config/doom; recursive = true; }; system.userActivationScripts = { installDoomEmacs = '' EMACS_FOLDER="$HOME/.config/emacs" echo $XDG_CONFIG_HOME echo $EMACS_FOLDER if [ ! -d "$EMACS_FOLDER" ]; then ${pkgs.git}/bin/git clone --depth=1 --single-branch "https://github.com/doomemacs/doomemacs" "$EMACS_FOLDER" fi ''; }; samfelag.modules.desktop.i3.extraKeybindings = lib.mkIf i3Cfg.enable { "${i3Cfg.mod}+Shift+e" = "exec ${emacsWithPackages}/bin/emacs"; }; }; }