args @ { pkgs
, lib
, home
, username
, ...
}:
let
  utils = import ../utils lib;
in
{
  config = {
    environment = {
      variables = {
        EDITOR = "${pkgs.neovim}/bin/nvim";
      };
      defaultPackages = [
        pkgs.perl
        pkgs.rsync
        pkgs.strace
        pkgs.neovim
      ]; # The basic default packages, although with nvim replacing nano
      persistence."/nix/persist".users.${username}.directories = [ ".local/share/cspell" ];
    };
  };

  home = {
    imports = lib.pipe ./neovim [
      utils.dirsIn
      utils.importAll
      (map (f:
        if builtins.typeOf f == "lambda"
        then f args
        else f))
    ];
    programs.neovim = {
      enable = true;
      viAlias = true;
      vimAlias = true;
      vimdiffAlias = true;
    };
    home = {
      packages = with pkgs; [ neovide xclip ];
      sessionVariables = {
        EDITOR = "${home.programs.neovim.finalPackage}/bin/nvim";
      };
    };
  };
}
