{
  inputs,
  pkgs,
  config,
  lib,
  ...
}:
let
  spicePkgs = inputs.spicetify-nix.legacyPackages.${pkgs.system};
  themeMap = lib.fix (self: {
    "Catppuccin Mocha" = spicePkgs.themes.comfy;
    "Catppuccin Latte" = spicePkgs.themes.comfy;
    "Catppuccin Frappe" = spicePkgs.themes.comfy;
    "Catppuccin Macchiato" = spicePkgs.themes.comfy;

    default.light = self."Catppuccin Latte";
    default.dark = self."Catppuccin Macchiato";
  });

  colorschemeMap = lib.fix (self: {
    "Catppuccin Mocha" = "catppuccin-mocha";
    "Catppuccin Latte" = "catppuccin-latte";
    "Catppuccin Frappe" = "catppuccin-frappe";
    "Catppuccin Macchiato" = "catppuccin-macchiato";

    default.light = self."Catppuccin Latte";
    default.dark = self."Catppuccin Macchiato";
  });
in
{
  imports = [ ./audio.nix ];
  home.packages = [ pkgs.spot ];

  programs.spicetify = {
    enable = true;

    theme = config.satellite.theming.get themeMap;
    colorScheme = config.satellite.theming.get colorschemeMap;

    enabledExtensions = with spicePkgs.extensions; [
      adblock
      betterGenres
      bookmark
      fullAlbumDate
      fullAppDisplayMod
      groupSession
      keyboardShortcut
      listPlaylistsWithSong # Adds button to show playlists which contain a song
      playlistIntersection # Shows stuff that's in two different playlists
      savePlaylists # Adds a button to duplicate playlists
      showQueueDuration
      shuffle # Working shuffle
      skipStats # Track my skips
      songStats
      trashbin
      wikify # Shows an artist's wikipedia entry
    ];
  };

  # {{{ Persistence
  satellite.persistence.at.state.apps.spotify.directories = [ "${config.xdg.configHome}/spotify" ];

  satellite.persistence.at.cache.apps.spotify.directories = [ "${config.xdg.cacheHome}/spotify" ];
  # }}}
}