{
  impermanence,
  nixNeovim,
  nixVim,
  ...
}: let
  # TODO: actually use this in the user config
  username = "soispha";
  homeDirectory = "/home/${username}";

  # xdg
  configHome = "${homeDirectory}/.config";
  dataHome = "${homeDirectory}/.local/share";
  stateHome = "${homeDirectory}/.local/state";
  cacheHome = "${homeDirectory}/.cache";
  binHome = "${homeDirectory}/.local/bin";
  # TODO: add XDG_RUNTIME_DIR
in {
  imports = [
    ./conf
    ./files
    ./impermanence
    ./pkgs
    ./wms

    impermanence.nixosModules.home-manager.impermanence
    nixNeovim.nixosModules.default
    nixVim.homeManagerModules.nixvim
  ];

  # I don't know what this does, but I've seen it a lot online, so it should be good, right?
  programs.home-manager.enable = true;

  home = {
    inherit username homeDirectory;
    stateVersion = "23.05";
    enableNixpkgsReleaseCheck = true;
  };
  xdg = {
    inherit configHome dataHome stateHome cacheHome; #binHome; # TODO: add binHome, when the standart is extended
    enable = true;

    /*
    TODO: add this
    desktopEntries = {};
    */

    userDirs = {
      enable = true;
      createDirectories = true;
      desktop = null;
      documents = "${homeDirectory}/school/general";
      download = "${homeDirectory}/media/downloads";
      music = "${homeDirectory}/media/music";
      pictures = "${homeDirectory}/media/pictures";
      videos = "${homeDirectory}/media/videos";
      templates = "${homeDirectory}/media/templates";
      publicShare = "${homeDirectory}/media/public";
    };
  };
}