From cbe74de69e19e88cfa07bd0bb0c616e623db18e3 Mon Sep 17 00:00:00 2001 From: "Reid \"reidlab" Date: Wed, 11 Sep 2024 15:29:00 -0700 Subject: [PATCH] untested hm module --- README.md | 29 ++++++++++++++++++++-- flake.nix | 73 +++++++++++++++++++++++++++++++++++++++++++++---------- 2 files changed, 87 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index a123a85..2eb8491 100644 --- a/README.md +++ b/README.md @@ -2,8 +2,6 @@ a rust application to scrobble your currently playing song on last.fm with mpris -upd 2024-08-27: i'm adding a home-manager module, eventually! - ## limitations unfortunately, because of how most mpris players work, the [Track_Id](https://specifications.freedesktop.org/mpris-spec/latest/Player_Interface.html#Simple-Type:Track_Id) (unique identifier for every song in the tracklist) object is very rarely supported, or, if supported, implemented incorrectly (looking at you, [Cider](https://cider.sh/)) meaning it is impossible to tell if the track has been played twice in a row. this means you cannot have succssive scrobbles of the same song, sorry! besides this, i'd say the program is feature complete. @@ -20,10 +18,37 @@ you also have the option to define your mpris bus name, which will instead wait 1. the nix way + simply just run it: + ```sh nix run git+https://git.reidlab.pink/reidlab/lastfmpris.git ``` + or import it into your flake like so: + + ```nix + lastfmpris.url = "git+https://git.reidlab.pink/reidlab/lastfmpris.git"; + # in your `homeManagerConfiguration`: + imports = [ + inputs.lastfmpris.homeManagerModules.lastfmpris; + ]; + ``` + + and then use it as a service in your `homeManagerConfiguration`: + + ```nix + services.lastfmpris = { + enable = true; + settings = { + # player_bus = "org.mpris.MediaPlayer2.mpv"; + username = "ILoveLastDotFm"; + password = builtins.readFile /etc/lastfm-password; + api_key = builtins.readFile /etc/lastfm-api-key; + api_secret = builtins.readFile /etc/lastfm-api-secret; + }; + }; + ``` + 2. the normal way first, clone repository: diff --git a/flake.nix b/flake.nix index 3f14fd1..82acbcb 100644 --- a/flake.nix +++ b/flake.nix @@ -15,14 +15,15 @@ overlays = [rust-overlay.overlays.default]; }; package = (builtins.fromTOML (builtins.readFile ./Cargo.toml)).package; - rustPlatform = pkgs.makeRustPlatform { - cargo = pkgs.cargo; - rustc = pkgs.rustc; - }; toolchain = pkgs.rust-bin.fromRustupToolchainFile ./toolchain.toml; + rustPlatform = pkgs.makeRustPlatform { + cargo = toolchain; + rustc = toolchain; + }; in rec { - packages = flake-utils.lib.flattenTree { + packages = flake-utils.lib.flattenTree rec { + default = lastfmpris; lastfmpris = rustPlatform.buildRustPackage { pname = package.name; inherit (package) version; @@ -31,21 +32,21 @@ # very scuffed but endorsed! #cargoSha256 = "sha256-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="; cargoSha256 = "sha256-KOMEvg3iGjmMEFxsrIqD4SaDw63ojiNNNqCfzRlbYLw="; + + nativeBuildInputs = with pkgs; [ pkg-config ]; - buildInputs = with pkgs; [ pkg-config ]; - - nativeBuildInputs = with pkgs; [ openssl dbus ]; + buildInputs = with pkgs; [ openssl dbus ]; src = ./.; + + meta.mainProgram = package.name; }; }; - defaultPackage = packages.lastfmpris; - devShells.default = pkgs.mkShell { - buildInputs = with pkgs; [ pkg-config ]; + nativeBuildInputs = with pkgs; [ pkg-config ]; - nativeBuildInputs = with pkgs; [ openssl dbus ]; + buildInputs = with pkgs; [ openssl dbus ]; packages = with pkgs; [ toolchain @@ -54,5 +55,51 @@ RUST_SRC_PATH = "${toolchain}/lib/rustlib/src/rust/library"; }; - }); + }) // { + homeManagerModules = rec { + default = lastfmpris; + lastfmpris = { config, lib, pkgs, ... }: + with lib; + let + cfg = config.services.lastfmpris; + + iniFmt = pkgs.formats.ini; + in { + options.services.lastfmpris = { + enable = mkEnableOption "Enables the lastfmpris mpris scrobbling daemon"; + package = mkOption { + type = types.package; + default = self.packages.${pkgs.stdenv.hostPlatform.system}.default; + }; + settings = mkOption { + type = iniFmt.type; + description = "Configuration (https://git.reidlab.pink/reidlab/lastfmpris/src/branch/main/config.example.ini)"; + example = literalExpression '' + { + username = "ILoveLastDotFm"; + password = "lastfm4lyfe"; + api_key = "t8mb4e0kn9it150amaeezbcfe3iusy8o"; + api_secret = "jd47iz6h1u2kbnbfm8c763lzrj1o89h3"; + } + ''; + }; + }; + + config = mkIf cfg.enable { + systemd.user.services.lastfmpris = { + Unit = { + Description = "a rust application to scrobble your currently playing song on last.fm with mpris"; + Requires = ["graphical-session.target"]; + }; + Service = { + Type = "simple"; + ExecStart = "${lib.getExe cfg.package}"; + }; + }; + + xdg.configFile."lastfmpris/config.ini".text = generators.toINI {} cfg.settings; + }; + }; + }; + }; }