diff --git a/flake.nix b/flake.nix index ca0ab3e..c93ed3e 100644 --- a/flake.nix +++ b/flake.nix @@ -10,41 +10,91 @@ }; }; - outputs = - { - self, - nixpkgs, - flake-utils, - fenix, - ... - }: + outputs = { self, nixpkgs, flake-utils, fenix, ... }: let - overlay = - final: prev: + overlay = final: prev: let fenixPkgs = fenix.packages.${final.stdenv.hostPlatform.system}; - in - { rustToolchain = with fenixPkgs; - combine ( - with stable; - [ - clippy - rustc - cargo - rustfmt - rust-src - ] - ); + combine (with stable; [ + clippy + rustc + cargo + rustfmt + rust-src + ]); + in + { + inherit rustToolchain; + + mpd-discord-presence = final.rustPlatform.buildRustPackage { + pname = "mpd-discord-presence"; + version = "0.1.0"; + + src = self; + + cargoLock.lockFile = ./Cargo.lock; + + enableParallelBuild = true; + + meta = { + description = "MPD Discord daemon"; + homepage = "https://git.slendi.dev/Slendi/mpd-discord-presence"; + license = final.lib.licenses.gpl3; + mainProgram = "mpd-discord-presence"; + }; + }; }; in { overlays.default = overlay; - homeManagerModules.mpd-discord-presence = import ./nix/mpd-discord-presence.nix; + + homeManagerModules.mpd-discord-presence = { config, lib, pkgs, ... }: + let + cfg = config.services.mpd-discord-presence; + in + { + options.services.mpd-discord-presence = { + enable = lib.mkEnableOption "mpd-discord-presence (systemd user service)"; + + package = lib.mkOption { + type = lib.types.package; + default = pkgs.mpd-discord-presence; + description = "Package providing the mpd-discord-presence binary."; + }; + + extraArgs = lib.mkOption { + type = lib.types.listOf lib.types.str; + default = []; + description = "Extra CLI args passed to mpd-discord-presence."; + }; + }; + + config = lib.mkIf cfg.enable { + home.packages = [ cfg.package ]; + + systemd.user.services.mpd-discord-presence = { + Unit = { + Description = "MPD Discord Presence"; + Wants = [ "mpd.service" ]; + After = [ "mpd.service" "network-online.target" ]; + }; + + Service = { + ExecStart = "${cfg.package}/bin/mpd-discord-presence ${lib.escapeShellArgs cfg.extraArgs}"; + Restart = "on-failure"; + RestartSec = 2; + }; + + Install = { + WantedBy = [ "default.target" ]; + }; + }; + }; + }; } - // flake-utils.lib.eachDefaultSystem ( - system: + // flake-utils.lib.eachDefaultSystem (system: let pkgs = import nixpkgs { inherit system; @@ -52,6 +102,11 @@ }; in { + packages = { + mpd-discord-presence = pkgs.mpd-discord-presence; + default = pkgs.mpd-discord-presence; + }; + devShells.default = pkgs.mkShell { packages = with pkgs; [ rustToolchain @@ -67,27 +122,5 @@ export RUST_SRC_PATH="${pkgs.rustToolchain}/lib/rustlib/src/rust/library" ''; }; - - packages = rec { - mpd-discord-presence = pkgs.rustPlatform.buildRustPackage { - pname = "mpd-discord-presence"; - version = "0.1.0"; - - src = ./.; - - cargoLock.lockFile = ./Cargo.lock; - - enableParallelBuild = true; - - meta = { - description = "MPD Discord daemon"; - homepage = "https://git.slendi.dev/Slendi/mpd-discord-presence"; - license = pkgs.lib.licenses.gpl3; - mainProgrma = "mpd-discord-presence"; - }; - }; - default = mpd-discord-presence; - }; - } - ); + }); } diff --git a/nix/mpd-discord-presence.nix b/nix/mpd-discord-presence.nix deleted file mode 100644 index 03b3be5..0000000 --- a/nix/mpd-discord-presence.nix +++ /dev/null @@ -1,45 +0,0 @@ -{ config, lib, pkgs, self, ... }: -let - cfg = config.services.mpd-discord-presence; - defaultPkg = - self.packages.${pkgs.stdenv.hostPlatform.system}.mpd-discord-presence; -in -{ - options.services.mpd-discord-presence = { - enable = lib.mkEnableOption "mpd-discord-presence (systemd user service)"; - - package = lib.mkOption { - type = lib.types.package; - default = defaultPkg; - description = "Package providing the mpd-discord-presence binary."; - }; - - extraArgs = lib.mkOption { - type = lib.types.listOf lib.types.str; - default = []; - description = "Extra CLI args passed to mpd-discord-presence."; - }; - }; - - config = lib.mkIf cfg.enable { - home.packages = [ cfg.package ]; - - systemd.user.services.mpd-discord-presence = { - Unit = { - Description = "MPD Discord Presence"; - Wants = [ "mpd.service" ]; - After = [ "mpd.service" "network-online.target" ]; - }; - - Service = { - ExecStart = "${cfg.package}/bin/mpd-discord-presence ${lib.escapeShellArgs cfg.extraArgs}"; - Restart = "on-failure"; - RestartSec = 2; - }; - - Install = { - WantedBy = [ "default.target" ]; - }; - }; - }; -}