From 2cb43216d3c2cbc6f40e0d6646abb9f31a1c40f7 Mon Sep 17 00:00:00 2001 From: "quentin@aristote.fr" Date: Sat, 26 Aug 2023 23:28:27 +0200 Subject: devenv: add more modules --- modules/devenv/integrations/emacs.nix | 53 +++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 modules/devenv/integrations/emacs.nix (limited to 'modules/devenv/integrations/emacs.nix') diff --git a/modules/devenv/integrations/emacs.nix b/modules/devenv/integrations/emacs.nix new file mode 100644 index 0000000..b7f1e42 --- /dev/null +++ b/modules/devenv/integrations/emacs.nix @@ -0,0 +1,53 @@ +{ + config, + lib, + ... +}: let + cfg = config.emacs; + attrs2alist = value: + if lib.isAttrs value + then "(${lib.concatStringsSep "\n" (lib.mapAttrsToList (name: value: "(${name} . ${attrs2alist value})") value)})" + else + ( + if lib.isList value + then "(${lib.concatStringsSep " " value})" + else + ( + if lib.isBool value + then + ( + if value + then "t" + else "nil" + ) + else builtins.toString value + ) + ); +in { + options.emacs = { + enable = lib.mkEnableOption "emacs integration"; + dirLocals = lib.mkOption { + type = with lib.types; attrsOf (attrsOf str); + default = {}; + example = + # the first example from https://www.gnu.org/software/emacs/manual/html_node/emacs/Directory-Variables.html + { + nil = { + indent-tabs-mode = true; + fill-column = 80; + mode = "auto-fill"; + }; + c-mode = { + c-file-style = ''"BSD"''; + subdirs = "nil"; + }; + "\"src/imported\"".nil.change-log-default-name = ''"ChangeLog.local"''; + }; + }; + }; + + config.dotfiles.".dir-locals.el" = lib.mkIf (cfg.dirLocals != {}) { + gitignore = lib.mkDefault true; + text = attrs2alist cfg.dirLocals; + }; +} -- cgit v1.2.3