{
  lib,
  pkgs,
  inputs,
  ...
}: let
  equibop = with pkgs; (vesktop.overrideAttrs (final: prev: rec {
    pname = "Equibop";
    version = "2.0.9";

    src = fetchFromGitHub {
      owner = "Equicord";
      repo = "equibop";
      rev = "v${version}";
      hash = "sha256-imRqr6Gd29t/zFcH73JRJIMozEhig1lHXLyefgB74yM=";
    };

    pnpmDeps = pnpm_9.fetchDeps {
      inherit
        (final)
        pname
        version
        src
        ;
      inherit (prev) patches;
      hash = "sha256-YaZA1Oz9lJcEm9Ihx37Iooc7l6Zsy65kYAK2KWffh/c=";
    };

    installPhase =
      ''
        runHook preInstall
      ''
      + lib.optionalString stdenv.hostPlatform.isLinux ''
        mkdir -p $out/opt/Equibop
        cp -r dist/*unpacked/resources $out/opt/Equibop/

        for file in build/icon_*x32.png; do
          file_suffix=''${file//build\/icon_}
          install -Dm0644 $file $out/share/icons/hicolor/''${file_suffix//x32.png}/apps/equibop.png
        done
      ''
      + lib.optionalString stdenv.hostPlatform.isDarwin ''
        mkdir -p $out/{Applications,bin}
        mv dist/mac*/Equibop.App $out/Applications
      ''
      + ''
        runHook postInstall
      '';

    postFixup =
      lib.optionalString stdenv.hostPlatform.isLinux ''
        makeWrapper ${electron}/bin/electron $out/bin/equibop \
          --add-flags $out/opt/Equibop/resources/app.asar \
          --add-flags \"--enable-speech-dispatcher\" \
          --add-flags \"--enable-blink-features=MiddleClickAutoscroll\" \
          --add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations --enable-wayland-ime}}"
      ''
      + lib.optionalString stdenv.hostPlatform.isDarwin ''
        makeWrapper $out/Applications/equicord.app/Contents/MacOS/Equibop $out/bin/equibop
      '';

    desktopItems = lib.optional stdenv.hostPlatform.isLinux (makeDesktopItem {
      name = "equibop";
      desktopName = "Equibop";
      exec = "equibop %U";
      icon = "equibop";
      startupWMClass = "Equibop";
      genericName = "Internet Messenger";
      keywords = [
        "discord"
        "vencord"
        "electron"
        "chat"
        "equicord"
      ];
      categories = [
        "Network"
        "InstantMessaging"
        "Chat"
      ];
    });
  }));
in {
  imports = with inputs; [
    catppuccin.homeManagerModules.catppuccin
    chaotic.homeManagerModules.default
    hyprland.homeManagerModules.default
    nix-colors.homeManagerModules.default
    nix-index-database.hmModules.nix-index

    ./hyprland
    ./screenshot
  ];

  snowfallorg.user = {
    enable = true;
    name = "marshall";
  };

  colorScheme = inputs.nix-colors.colorSchemes.catppuccin-mocha;

  home = {
    packages = with pkgs;
      [
        alejandra
        beeper
        duf
        eternal-terminal
        equibop
        glow
        grc
        jamesdsp
        jdk21
        killall
        libnotify
        lm_sensors
        loupe
        neovide
        playerctl
        prismlauncher
        python3
        slack
        telegram-desktop
        xdotool
        (xwinwrap.overrideAttrs {
          src = fetchFromGitHub {
            owner = "camonater62";
            repo = "xwinwrap";
            rev = "ec74e730072225ffa740bf5076a1dd0a343bb113";
            sha256 = "0vfwbcx5y1aphiaix2zps1bl7lhbhdvm6vhys2m0kwvl6igy0cc8";
          };

          buildPhase = ''
            make all
          '';

          installPhase = ''
            mkdir -p $out/bin
            mv xwinwrap $out/bin
          '';
        })
        youki
        zed-editor
      ]
      ++ (with jetbrains; [
        clion
        rust-rover
        webstorm
        idea-ultimate
      ])
      ++ (with inputs; [
        cider.packages.${pkgs.system}.default
        nixvim.packages.${pkgs.system}.default
        zen-browser.packages.${pkgs.system}.specific
        chaotic.packages.${pkgs.system}.distrobox_git
      ]);

    stateVersion = "24.05";
  };

  dconf.settings = {
    "org/virt-manager/virt-manager/connections" = {
      autoconnect = ["qemu:///system"];
      uris = ["qemu:///system"];
    };
  };

  xdg.enable = true;

  catppuccin = {
    enable = true;
    flavor = "mocha";
    accent = "green";
    pointerCursor.enable = true;
  };

  gtk = let
    gradiencePreset = pkgs.fetchurl {
      url = "https://raw.githubusercontent.com/GradienceTeam/Community/next/official/catppuccin-macchiato.json";
      hash = "sha256-FgQvmK/Pjn980o+UVc2a70kGa6sGse045zPS9hzCs14=";
    };

    gradienceBuild = pkgs.stdenv.mkDerivation {
      name = "gradience-build";
      phases = ["buildPhase" "installPhase"];
      nativeBuildInputs = [pkgs.gradience];
      buildPhase = ''
        shopt -s nullglob
        export HOME=$TMPDIR
        mkdir -p $HOME/.config/presets
        gradience-cli apply -p ${gradiencePreset} --gtk both
      '';
      installPhase = ''
        mkdir -p $out
        cp -r .config/gtk-4.0 $out/
        cp -r .config/gtk-3.0 $out/
      '';
    };
  in {
    enable = true;
    theme.name = "adw-gtk3-dark";
    theme.package = pkgs.adw-gtk3;

    gtk3 = {
      extraCss = builtins.readFile "${gradienceBuild}/gtk-3.0/gtk.css";
      extraConfig = {
        gtk-application-prefer-dark-theme = 1;
      };
    };

    gtk4 = {
      extraCss = builtins.readFile "${gradienceBuild}/gtk-4.0/gtk.css";
      extraConfig = {
        gtk-application-prefer-dark-theme = 1;
      };
    };
  };

  qt = {
    enable = true;
    platformTheme.name = "kvantum";
    style.name = "kvantum";
    style.catppuccin.enable = true;
  };

  programs = {
    xmobar.enable = true;

    emacs = {
      enable = true;
      package = inputs.emacs.packages.${pkgs.system}.default;
    };

    wezterm.extraConfig = builtins.readFile ./wezterm.lua;

    git = {
      extraConfig.credential.helper = "libsecret";
      signing.key = "0FF5B8826803F895";
    };

    mpv = {
      enable = true;
      scripts = [pkgs.mpvScripts.uosc];
      catppuccin.enable = true;
    };
  };

  services = {
    picom = {
      enable = true;
      backend = "glx";
      fadeDelta = 5;
      fade = true;
      shadow = true;
      vSync = true;

      shadowExclude = [
        "class_g = 'firefox' && argb"
        "class_g *?= 'slop'"
      ];

      settings = {
        corner-radius = 10;

        blur-background-exclude = [
          "class_g = 'slop'"
        ];

        rounded-corners-exclude = [
          "window_type = 'dock'"
          "window_type = 'desktop'"
        ];

        blur = {
          method = "gaussian";
          size = 10;
          deviation = 5.0;
        };
      };
    };

    dunst = {
      enable = true;
      settings.global = {
        corner_radius = 10;
        offset = "18x53";
        frame_width = 2;
        font = "SN Pro 12";
        frame_color = lib.mkForce "#a6e3a1";
      };
      catppuccin.enable = true;
    };
  };

  systemd.user.startServices = "sd-switch";

  nix.package = lib.mkForce inputs.nix-super.packages.${pkgs.system}.default;
}
