{ 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 # Fonts emacs-all-the-icons-fonts # fira-code # fira-code-symbols graphviz ]; fonts.fonts = with pkgs; [ iosevka emacs-all-the-icons-fonts ]; env.PATH = [ "$HOME/.config/emacs/bin" ]; hm.xdg.configFile = { "doom/modules".source = ../../config/doom/modules; "doom/config.el".source = ../../config/doom/config.el; "doom/custom.el".source = ../../config/doom/custom.el; "doom/init.el".source = ../../config/doom/init.el; "doom/packages.el".source = ../../config/doom/packages.el; # Themeing "doom/themes/base16-samfelag-theme.el".text = '' (require 'base16-theme) (defvar base16-samfelag-theme-colors '(:base00 "#${config.colorScheme.colors.base00}" :base01 "#${config.colorScheme.colors.base01}" :base02 "#${config.colorScheme.colors.base02}" :base03 "#${config.colorScheme.colors.base03}" :base04 "#${config.colorScheme.colors.base04}" :base05 "#${config.colorScheme.colors.base05}" :base06 "#${config.colorScheme.colors.base06}" :base07 "#${config.colorScheme.colors.base07}" :base08 "#${config.colorScheme.colors.base08}" :base09 "#${config.colorScheme.colors.base09}" :base0A "#${config.colorScheme.colors.base0A}" :base0B "#${config.colorScheme.colors.base0B}" :base0C "#${config.colorScheme.colors.base0C}" :base0D "#${config.colorScheme.colors.base0D}" :base0E "#${config.colorScheme.colors.base0E}" :base0F "#${config.colorScheme.colors.base0F}") "All colors for Base16 Samfelag are defined here.") (deftheme base16-samfelag) (base16-theme-define 'base16-samfelag base16-samfelag-theme-colors) (provide-theme 'base16-samfelag) (provide 'base16-samfelag-theme) ''; }; system.userActivationScripts = { installDoomEmacs = '' EMACS_FOLDER="$HOME/.config/emacs" 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"; }; }; }