pkgs: let
  inherit (builtins) readDir;
  inherit (pkgs.lib) filterAttrs mapAttrsToList hasSuffix;

  fnls = d: readDir d |> filterAttrs (k: v: v == "regular" && hasSuffix ".fnl" k) |> mapAttrsToList (k: _: "${d}/${k}");

  compile = input: /* bash */ ''
    fennel --require-as-include -c --add-fennel-path ${./.}/?.fnl ${input} > $out/${input} # output path
  '';
in {
  programs.neovim = {
    enable = true;
    viAlias = true;
    vimAlias = true;
    defaultEditor = true;
  };

  programs.neovide = {
    # too heavy to build
    enable = false;
    settings = {
      font = {
        normal = [{family =  "PlemolJP35 Console NF"; }];
        size = 8;
      };
    };
  };

  xdg.configFile."nvim/init.lua".source = ./init.lua;
  xdg.configFile."nvim/lua".source = ./lua;
}