{ config, pkgs, lib, inputs, ... }: let inherit (pkgs) stdenv; inherit (lib) removePrefix; nixfiles = config.home.homeDirectory + "/projects/alin.ovh/nixfiles"; direct_symlink = path: config.lib.file.mkOutOfStoreSymlink "${nixfiles}/${removePrefix "/" path}"; editorScript = pkgs.writeScriptBin "emacsc" '' #!${pkgs.runtimeShell} if [ -z "$1" ]; then exec ${config.programs.emacs.finalPackage}/bin/emacsclient --create-frame --alternate-editor ${config.programs.emacs.finalPackage}/bin/emacs else exec ${config.programs.emacs.finalPackage}/bin/emacsclient --alternate-editor ${config.programs.emacs.finalPackage}/bin/emacs --create-frame "$@" fi ''; in { imports = [ ../modules/eshell.nix ]; programs.git.attributes = [ "*.el diff=elisp" ]; programs.git.settings."diff.elisp" = { xfuncname = "^\\([^[:space:]]+[[:space:]]+([^()[:space:]]+)"; }; services.emacs = lib.mkIf stdenv.isLinux { enable = true; package = config.programs.emacs.finalPackage; client.enable = true; }; programs.emacs = { enable = true; package = lib.mkDefault (if stdenv.isLinux then pkgs.emacs-gtk else pkgs.emacs); eshell = { aliases = { pk = "eshell-up-pk $1"; up = "eshell-up $1"; ec = "find-file $1"; l = "ls $*"; la = "ls -A $*"; ll = "ls -lh $*"; lla = "ls -lhA $*"; http = "xh"; https = "xh --default-scheme https $*"; cdg = "cd (project-root)"; }; }; extraPackages = epkgs: (with epkgs; [ aggressive-indent apheleia buffer-terminator cape corfu consult consult-ghq consult-eglot consult-lsp crux dtrt-indent envrc editorconfig elisp-refs evil evil-anzu evil-collection evil-embrace evil-matchit evil-numbers evil-space evil-surround evil-textobj-tree-sitter exec-path-from-shell expand-region feature-mode flycheck flymake-popon general git-gutter-fringe git-modes git-timemachine gl-conf-mode # gitolite goto-chg jinx just-ts-mode kind-icon lua-mode link-hint magit markdown-mode marginalia nerd-icons nix-ts-mode doom-modeline persist-state rainbow-mode rainbow-delimiters tempel tempel-collection eglot-tempel (treesit-grammars.with-grammars ( grammars: with grammars; [ tree-sitter-nix tree-sitter-markdown tree-sitter-json tree-sitter-json5 tree-sitter-toml tree-sitter-yaml ] )) try vc-msg vertico vertico-prescient wgrep-ag ws-butler which-key ]); extraConfig = lib.mkBefore '' ;;; default --- site init file -*- lexical-binding: t; -*- (with-eval-after-load 'editorconfig (setq editorconfig-exec-path "${pkgs.editorconfig-core-c}/bin/editorconfig")) ''; }; home.packages = with pkgs; [ editorScript enchant ]; xdg.configFile = { "emacs/early-init.el".source = "${inputs.minimal-emacs}/early-init.el"; "emacs/init.el".source = "${inputs.minimal-emacs}/init.el"; "emacs/pre-early-init.el".source = direct_symlink "user/settings/emacs/pre-early-init.el"; "emacs/post-early-init.el".source = direct_symlink "user/settings/emacs/post-early-init.el"; "emacs/pre-init.el".source = direct_symlink "user/settings/emacs/pre-init.el"; "emacs/post-init.el".source = direct_symlink "user/settings/emacs/post-init.el"; }; }