{ ... }:
let
  shellAliases = {
    update-switch = "darwin-rebuild switch --flake ~/nix-config";
    update-flake = "nix flake update ~/nix-config";
    ducks = "du -cksh * | sort -hr | head -n 15";
  };

  gitAliases = {
    co = "checkout";
    ci = "commit";
    cia = "commit --amend";
    s = "status";
    st = "status";
    b = "branch";
    p = "pull --rebase";
    pu = "push";
  };
in
{
  imports = [ ./trampoline-apps ];
  # Home Manager needs a bit of information about you and the
  # paths it should manage.
  home.username = "mattjallen";
  home.homeDirectory = "/Users/mattjallen";

  # 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 can update Home Manager without changing this value. See
  # the Home Manager release notes for a list of state version
  # changes in each release.
  home.stateVersion = "23.11";

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

    vscode = {
      enable = true;
    };

    btop.enable = true;

    zsh = {
      enable = true;
      enableCompletion = true;
      autosuggestion.enable = true;
      syntaxHighlighting.enable = true;

      shellAliases = shellAliases;

      oh-my-zsh = {
        enable = true;
        plugins = [ "git" ];
        theme = "fishy";
      };
    };

    librewolf = {
      enable = true;
      settings = {
        "identity.fxaccounts.enabled" = true; # Enable Firefox Accounts
        "privacy.clearOnShutdown.history" = false; # Disable clearing history on shutdown
        "privacy.clearOnShutdown.downloads" = false; # Disable clearing downloads on shutdown
        "privacy.clearOnShutdown.cache" = false; # Disable clearing cache on shutdown
        "privacy.clearOnShutdown.cookiesAndStorage" = false; # Disable clearing cookies and storage on shutdown
        "privacy.clearOnShutdown.cookies" = false; # Disable clearing cookies on shutdown
        "privacy.clearOnShutdown_v2.cache" = false; # Disable clearing cache on shutdown
        "privacy.clearOnShutdown_v2.cookiesAndStorage" = false; # Disable clearing cookies and storage on shutdown
        "privacy.clearOnShutdown.formdata" = false; # Disable clearing form data on shutdown
        "privacy.clearOnShutdown.offlineApps" = false; # Disable clearing offline apps on shutdown
        "privacy.clearHistory.cache" = false; # Disable clearing cache on history clear
        "privacy.clearHistory.cookiesAndStorage" = false; # Disable clearing cookies on history clear
        "privacy.clearHistory.historyFormDataAndDownloads" = false; # Disable clearing history, form data, and downloads on history clear
        "privacy.clearHistory.browsingHistoryAndDownloads" = false; # Disable clearing browsing history and downloads on history clear
        "privacy.clearSiteData.cache" = false; # Disable clearing cache on site data clear
        "privacy.clearSiteData.cookiesAndStorage" = false; # Disable clearing cookies on site data clear
        "services.sync.prefs.sync.privacy.clearOnShutdown.cache" = true; # Enable syncing cache clear on shutdown
        "services.sync.prefs.sync.privacy.clearOnShutdown.cookies" = true; # Enable syncing cookies clear on shutdown
        "services.sync.prefs.sync.privacy.clearOnShutdown.downloads" = true; # Enable syncing downloads clear on shutdown
        "services.sync.prefs.sync.privacy.clearOnShutdown.formdata" = true; # Enable syncing form data clear on shutdown
        "services.sync.prefs.sync.privacy.clearOnShutdown.history" = true; # Enable syncing history clear on shutdown
        "services.sync.prefs.sync.privacy.clearOnShutdown.offlineApps" = true; # Enable syncing offline apps clear on shutdown
        "services.sync.prefs.sync.privacy.clearOnShutdown.sessions" = true; # Enable syncing sessions clear on shutdown
        "services.sync.prefs.sync.privacy.clearOnShutdown.siteSettings" = true; # Enable syncing site settings clear on shutdown
        "services.sync.prefs.sync.privacy.clearOnShutdown_v2.cache" = true; # Enable syncing cache clear on shutdown
        "services.sync.prefs.sync.privacy.clearOnShutdown_v2.cookiesAndStorage" = true; # Enable syncing cookies clear on shutdown
        "services.sync.prefs.sync.privacy.clearOnShutdown_v2.downloads" = true; # Enable syncing downloads clear on shutdown
        "services.sync.prefs.sync.privacy.clearOnShutdown_v2.historyFormDataAndDownloads" = true; # Enable syncing form data clear on shutdown
        "services.sync.prefs.sync.privacy.clearOnShutdown_v2.siteSettings" = true; # Enable syncing site settings clear on shutdown
        "browser.newtabpage.activity-stream.feeds.topsites" = true; # Enable top sites on new tab page
        "browser.newtabpage.activity-stream.topSitesRows" = 3; # Set number of rows for top sites on new tab page
      };
    };
  };

  programs.git = {
    enable = true;
    userName = "mjallen18";
    userEmail = "matt.l.jallen@gmail.com";
    aliases = gitAliases;
  };

  # Manage bug in compilations - who uses manpages in 2024 anyways? :P
  manual.manpages.enable = false;
}
