{
config,
pkgs,
lib,
...
}:
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 "edit" ''
#!${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.extraConfig."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 pkgs.emacs-gtk;
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 $*";
xhs = "xh --default-scheme https $*";
cdg = "cd (project-root)";
};
};
extraPackages =
epkgs:
(with epkgs; [
ace-link
apheleia
avy
benchmark-init
buffer-terminator
cape
cask-mode
corfu
consult
consult-ghq
consult-eglot
consult-lsp
crux
difftastic
docker-compose-mode
doom-themes
dtrt-indent
envrc
editorconfig
eldoc-box
embark
embark-consult
esh-buf-stack
esh-help
eshell-fringe-status
eshell-toggle
eshell-up
evil
evil-anzu
evil-collection
evil-commentary
evil-embrace
evil-exchange
evil-lion
evil-matchit
evil-mu4e
evil-numbers
evil-org
evil-quickscope
evil-space
evil-surround
evil-textobj-tree-sitter
exec-path-from-shell
expand-region
fish-mode
feature-mode
flycheck
flymake-popon
general
git-gutter-fringe
git-modes
git-timemachine
gl-conf-mode # gitolite
goto-chg
helpful
jinx
just-ts-mode
kind-icon
lua-mode
lsp-mode
lispyville
magit
magit-todos
markdown-mode
marginalia
nerd-icons
nix-ts-mode
doom-modeline
persist-state
posframe
quickrun
rainbow-mode
rainbow-delimiters
ssh-deploy
systemd
tempel
tempel-collection
eglot-tempel
treesit-auto
(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
ultra-scroll
vc-msg
vertico
vertico-prescient
wgrep-ag
ws-butler
which-key
yasnippet
yasnippet-capf
]);
overrides = self: super: {
ultra-scroll = self.melpaBuild rec {
pname = "ultra-scroll";
version = "0.3.1";
src = pkgs.fetchFromGitHub {
owner = "jdtsmith";
repo = pname;
rev = "2e3b9997ae1a469e878feaa0af23a23685a0fbed";
hash = "sha256-9+3T5tXPRuRtENt/Rr0Ss3LZJlTOwpGePbREqofN2j0=";
};
meta = {
homepage = "https://github.com/jdtsmith/ultra-scroll";
description = "scroll emacs like lightning";
license = pkgs.lib.licenses.gpl3;
};
};
lsp-mode = self.melpaPackages.lsp-mode.overrideAttrs {
LSP_USE_PLISTS = "true"; # must be set in early-init
};
};
extraConfig = ''
(with-eval-after-load 'editorconfig
(setq editorconfig-exec-path "${pkgs.editorconfig-core-c}/bin/editorconfig"))
''
+ lib.optionalString stdenv.isDarwin ''
(with-eval-after-load 'dired
(setq insert-directory-program "${pkgs.coreutils-prefixed}/bin/gls"
dired-use-ls-dired t))
'';
};
home.packages = with pkgs; [
editorScript
enchant
];
xdg.configFile."emacs/early-init.el" = {
source = direct_symlink "user/settings/emacs/early-init.el";
};
xdg.configFile."emacs/init.el" = {
source = direct_symlink "user/settings/emacs/init.el";
};
}
user/settings/emacs.nix (view raw)