{ description = "A beautiful and feature-packed Apple Music CLI"; nixConfig = { extra-substituters = [ "https://cache.garnix.io" ]; extra-trusted-public-keys = [ "cache.garnix.io:CTFPyKSLcx5RMJKfLo5EEPUObbA78b0YQ2DTCJXqr9g=" ]; }; inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; nix-filter.url = "github:numtide/nix-filter"; }; outputs = { self, nixpkgs, nix-filter, }: let inherit (nixpkgs) lib; systems = [ "x86_64-darwin" "aarch64-darwin" ]; forAllSystems = lib.genAttrs systems; nixpkgsFor = forAllSystems (system: nixpkgs.legacyPackages.${system}); in { checks = forAllSystems ( system: let pkgs = nixpkgsFor.${system}; mkFlakeCheck = { name, nativeBuildInputs ? [ ], command, }: pkgs.stdenv.mkDerivation { name = "check-${name}"; inherit nativeBuildInputs; inherit (self.packages.${system}.am) src cargoDeps; buildPhase = '' ${command} touch "$out" ''; doCheck = false; dontInstall = true; dontFixup = true; }; in { nixfmt = mkFlakeCheck { name = "nixfmt"; nativeBuildInputs = with pkgs; [ nixfmt-rfc-style ]; command = "nixfmt --check ."; }; rustfmt = mkFlakeCheck { name = "rustfmt"; nativeBuildInputs = with pkgs; [ cargo rustfmt ]; command = "cargo fmt --check"; }; clippy = mkFlakeCheck { name = "clippy"; nativeBuildInputs = with pkgs; [ rustPlatform.cargoSetupHook cargo rustc clippy clippy-sarif sarif-fmt ]; command = '' cargo clippy --all-features --all-targets --tests \ --offline --message-format=json \ | clippy-sarif | tee $out | sarif-fmt ''; }; } ); devShells = forAllSystems ( system: let pkgs = nixpkgsFor.${system}; in { default = pkgs.mkShell { packages = with pkgs; [ rustfmt clippy rust-analyzer cargo-audit cargo-bloat cargo-expand libiconv ]; inputsFrom = [ self.packages.${system}.am ]; env = { RUST_BACKTRACE = 1; RUST_SRC_PATH = toString pkgs.rustPlatform.rustLibSrc; }; }; } ); packages = forAllSystems ( system: let pkgs = nixpkgsFor.${system}; packages = self.overlays.default null pkgs; in { inherit (packages) am; default = packages.am; } // (lib.attrsets.mapAttrs' ( name: value: lib.nameValuePair "check-${name}" value ) self.checks.${system}) ); formatter = forAllSystems (system: nixpkgsFor.${system}.nixfmt-rfc-style); overlays.default = _: prev: { am = prev.callPackage ./default.nix { inherit nix-filter self; }; }; homeManagerModules.default = { lib, config, pkgs, ... }: let cfg = config.services.am-discord-rich-presence; inherit (lib) mkEnableOption mkIf mkOption mkPackageOption types ; in { options.services.am-discord-rich-presence = { enable = mkEnableOption "am-discord-rich-presence"; package = mkPackageOption pkgs "am" { }; logFile = mkOption { type = types.nullOr types.path; default = null; description = '' Path to where am's Discord presence will store its log file ''; example = ''''${config.xdg.cacheHome}/am-discord-rich-presence.log''; }; }; config = mkIf cfg.enable { assertions = [ (lib.hm.assertions.assertPlatform "launchd.agents.am-discord-rich-presence" pkgs lib.platforms.darwin ) ]; launchd.agents.am-discord-rich-presence = { enable = true; config = { ProgramArguments = [ "${lib.getExe cfg.package}" "discord" ]; KeepAlive = true; RunAtLoad = true; StandardOutPath = cfg.logFile; StandardErrorPath = cfg.logFile; }; }; }; }; }; }