For this we create a directory containing a nix-inject.el file using writeTextFile where we can string interpolate as much as we please and merge that into a single emacs.d directory with the config *.el files tracked in the normal tree using symlinkJoin. Change-Id: I0e39591587a54527214783d4380456d2763da091 Reviewed-on: https://cl.tvl.fyi/c/depot/+/4324 Tested-by: BuildkiteCI Reviewed-by: sterni <sternenseemann@systemli.org> Autosubmit: sterni <sternenseemann@systemli.org>
		
			
				
	
	
		
			62 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			62 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
{ depot, pkgs, ... }:
 | 
						|
 | 
						|
let
 | 
						|
  inherit (pkgs.emacsGcc.pkgs) withPackages;
 | 
						|
 | 
						|
  emacs = withPackages (epkgs: [
 | 
						|
    # basic setup
 | 
						|
    epkgs.elpaPackages.undo-tree
 | 
						|
    epkgs.melpaPackages.evil
 | 
						|
    epkgs.melpaPackages.evil-collection
 | 
						|
    epkgs.melpaPackages.use-package
 | 
						|
    # languages
 | 
						|
    epkgs.bqn-mode
 | 
						|
    epkgs.elpaPackages.ada-mode
 | 
						|
    epkgs.melpaPackages.adoc-mode
 | 
						|
    epkgs.melpaPackages.dockerfile-mode
 | 
						|
    epkgs.melpaPackages.haskell-mode
 | 
						|
    epkgs.melpaPackages.jq-mode
 | 
						|
    epkgs.melpaPackages.markdown-mode
 | 
						|
    epkgs.melpaPackages.nix-mode
 | 
						|
    epkgs.melpaPackages.sly
 | 
						|
    epkgs.melpaPackages.yaml-mode
 | 
						|
    epkgs.rust-mode
 | 
						|
    epkgs.urweb-mode
 | 
						|
    # misc
 | 
						|
    epkgs.melpaPackages.hl-todo
 | 
						|
    epkgs.elpaPackages.rainbow-mode
 | 
						|
    epkgs.melpaPackages.rainbow-delimiters
 | 
						|
    # beyond text editing
 | 
						|
    epkgs.melpaPackages.elfeed
 | 
						|
    epkgs.melpaPackages.magit
 | 
						|
    epkgs.tvlPackages.tvl
 | 
						|
  ]);
 | 
						|
 | 
						|
  configDirectory = pkgs.symlinkJoin {
 | 
						|
    name = "emacs.d";
 | 
						|
    paths = [
 | 
						|
      ./.
 | 
						|
      (pkgs.writeTextFile {
 | 
						|
        name = "injected-emacs.d";
 | 
						|
        destination = "/nix-inject.el";
 | 
						|
        text = ''
 | 
						|
          (setq bqn-interpreter-path "${pkgs.cbqn}/bin/BQN")
 | 
						|
 | 
						|
          (provide 'nix-inject)
 | 
						|
        '';
 | 
						|
      })
 | 
						|
    ];
 | 
						|
    postBuild = ''
 | 
						|
      rm "$out/default.nix"
 | 
						|
    '';
 | 
						|
  };
 | 
						|
in
 | 
						|
 | 
						|
# sadly we can't give an init-file via the command line
 | 
						|
pkgs.writeShellScriptBin "emacs" ''
 | 
						|
  exec ${emacs}/bin/emacs          \
 | 
						|
    --no-init-file                 \
 | 
						|
    --directory ${configDirectory} \
 | 
						|
    --eval "(require 'init)"       \
 | 
						|
    "$@"
 | 
						|
''
 |