{ config, inputs, lib, pkgs, ... }: { options.my.emacs.enable = lib.mkEnableOption "Doom Emacs configuration"; config = lib.mkIf config.my.emacs.enable { home-manager.users = let users = if lib.isString config.my.toggleUsers.dev then [ config.my.toggleUsers.dev ] else config.my.toggleUsers.dev; in lib.mkMerge (map (user: { ${user} = { xdg.dataFile = { "doom/templates/events.org".source = ../../dotfiles/doom/templates/events.org; "doom/templates/default.org".source = ../../dotfiles/doom/templates/default.org; "doom/templates/programming.org".source = ../../dotfiles/doom/templates/programming.org; }; services.lorri.enable = true; programs.${config.my.shell.type}.shellAliases = inputs.self.lib.mergeAliases inputs.self.lib.commonAliases { edit = "emacsclient -t"; e = "edit"; }; }) users)); users.users = let users = if lib.isString config.my.toggleUsers.dev then [ config.my.toggleUsers.dev ] else config.my.toggleUsers.dev; packages = builtins.attrValues { inherit (pkgs.xorg) xwininfo; inherit (pkgs) #emacs everywhere xdotool xclip wl-clipboard-rs fd # modern find, faster searches fzf # fuzzy finder! super cool and useful ripgrep # modern grep tree-sitter # code parsing based on symbols and shit, I do not get it graphviz # graphs tetex # export pdf languagetool # proofreader for English # lsps yaml-language-server markdownlint-cli ; inherit (pkgs.nodePackages) vscode-json-languageserver prettier # multi-language linter ; }; in lib.mkMerge (map (user: { ${user}.packages = packages; }) users); services.emacs = { enable = true; defaultEditor = true; package = pkgs.emacsWithDoom { doomDir = ../../dotfiles/doom; doomLocalDir = "/home/jawz/.local/share/nix-doom"; tangleArgs = "--all config.org"; extraPackages = epkgs: let inherit (config.home-manager.users.${(if lib.isString config.my.toggleUsers.dev then [ config.my.toggleUsers.dev ] else config.my.toggleUsers.dev)[0]}.programs.emacs) extraPackages extraConfig ; extra = extraPackages epkgs; themes = lib.optional config.my.stylix.enable [ (epkgs.trivialBuild { pname = "stylix-theme"; src = pkgs.writeText "stylix-theme.el" extraConfig; version = "0.1.0"; packageRequires = extra; }) ]; in extra ++ themes; }; }; }; }