{
  config,
  lib,
  ...
}: rec {
  # Home Manager needs a bit of information about you and the paths it should
  # manage.
  home.username = "jonas";
  home.homeDirectory = "/home/jonas";

  sops = {
    age.keyFile = "${home.homeDirectory}/.config/sops/age/keys.txt";
  };
  sops.secrets.gotifyToken = {
    sopsFile = ../secrets/jonas/gotify.yaml;
    key = "monolithToken";
  };

  # hive moduless
  hive.doom.enable = true;
  hive.doom.asDefaultEditor = true;
  hive.doom.enableCopilot = true;
  hive.doom.enableTidal = true;
  hive.doom.withNixPkgs = true;
  hive.doom.withShellPkgs = true;
  hive.doom.withPythonPkgs = true;
  hive.firefox = {
    enable = true;
    plasmaIntegration = false;
    passFF = true;
  };
  hive.kdeconnect.enable = false;
  hive.kdeconnect.indicatorOnly = false;
  hive.nextcloud.enable = false; # kwallet bug
  hive.nix-scripts.enable = true;
  hive.ranger.enable = true;
  hive.themes.layan.enable = true;
  hive.yubikey.enable = true;
  hive.zsh.enable = true;
  hive.jj.enable = true;
  hive.gotify = {
    cli.enable = true;
    daemon.enable = true;
    tokenSopsKey = config.sops.secrets.gotifyToken.name;
    host = "gotify.example.de";
  };

  # Make session variables available in systemd units
  # SEE: https://github.com/nix-community/home-manager/pull/5543
  # systemd.user.settings.Manager.DefaultEnvironment =
  #   lib.mapAttrs (_: lib.mkDefault) config.home.sessionVariables;

  xdg.mimeApps = {
    enable = true;

    defaultApplications = {
      "text/html" = "firefox.desktop";
      "x-scheme-handler/http" = "firefox.desktop";
      "x-scheme-handler/https" = "firefox.desktop";
      "x-scheme-handler/about" = "firefox.desktop";
      "x-scheme-handler/unknown" = "firefox.desktop";
    };
  };
  xdg.userDirs.enable = true;
  xdg.userDirs.createDirectories = true;
  xdg.userDirs.extraConfig = {
    XDG_WORKSPACES_DIR = "${config.home.homeDirectory}/Workspaces";
    XDG_NEXTCLOUD_DIR = "${config.home.homeDirectory}/Nextcloud";
    XDG_NOTES_DIR = "${config.home.homeDirectory}/Notes";
  };

  # This value determines the Home Manager release that your configuration is
  # compatible with. This helps avoid breakage when a new Home Manager release
  # introduces backwards incompatible changes.
  #
  # You should not change this value, even if you update Home Manager. If you do
  # want to update the value, then make sure to first check the Home Manager
  # release notes.
  home.stateVersion = "24.11"; # Please read the comment before changing.

  home.sessionVariables = {
    EDITOR = lib.mkDefault "vim";
  };

  # Let Home Manager install and manage itself.
  programs.home-manager.enable = true;

  # Git
  programs.git = {
    enable = true;
    userName = "Jonas Röger";
    userEmail = "jonas.roeger@tu-dortmund.de";
    difftastic.enable = true;
    signing = {
      signByDefault = true;
      key = "4000EB35E1AE0F07";
    };
  };
}
