diff --git a/.env.sample b/.env.sample index 5d9ab2f..3c1574b 100644 --- a/.env.sample +++ b/.env.sample @@ -1,3 +1,3 @@ -DISCORD_APP_ID= -LASTFM_USERNAME= -LASTFM_API_KEY= +DISCORD_APP_ID="906984497524903937" +LASTFM_API_KEY="71e8ca3f186b0a68342577b4401658e4" +LASTFM_USERNAME="strnophix" diff --git a/README.md b/README.md index 29025db..456b7ba 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,29 @@ # lfm-discord-presence -Discord RPC for LastFM +Discord Rich Presence for LastFM. + +![](./assets/screenshot.png) + +## Dependencies +- [Rust](https://www.rust-lang.org/) +- [Just](https://github.com/casey/just) + +## Usage +### Setup +```bash +git clone https://git.cesium.pw/niku/lfm-discord-presence.git && cd $_ +cp .env.sample .env +``` +### Using systemd +Install: +```bash +just install +``` +Uninstall: +```bash +just uninstall +``` + +### Using cargo +```bash +cargo run +``` \ No newline at end of file diff --git a/assets/screenshot.png b/assets/screenshot.png new file mode 100644 index 0000000..77a55b2 Binary files /dev/null and b/assets/screenshot.png differ diff --git a/justfile b/justfile index f81e607..590f536 100644 --- a/justfile +++ b/justfile @@ -1,6 +1,24 @@ load-dotenv: - set -a; source .env; set +a + set -a; source ./.env; set +a build-release: - cross build --target x86_64-pc-windows-gnu --release - cross build --target x86_64-unknown-linux-gnu --release \ No newline at end of file + cargo build --target x86_64-unknown-linux-gnu --release + +install: + just build-release + sudo cp ./target/x86_64-unknown-linux-gnu/release/lfm-discord-presence /usr/local/bin + + mkdir -p ~/.config/systemd/user + cp ./systemd/lfm-discord-presence.service ~/.config/systemd/user + + sed -i "s/LASTFM_USERNAME/$LASTFM_USERNAME/g" ~/.config/systemd/user/lfm-discord-presence.service + + systemctl enable --user lfm-discord-presence.service --now + +uninstall: + systemctl disable --user lfm-discord-presence.service --now + sudo rm /usr/local/bin/lfm-discord-presence + +reinstall: + just uninstall + just install diff --git a/src/main.rs b/src/main.rs index b26242c..649204e 100644 --- a/src/main.rs +++ b/src/main.rs @@ -13,19 +13,20 @@ use tokio::{ sync::oneshot::{self, channel}, }; +const DISCORD_APP_ID: &'static str = env!("DISCORD_APP_ID", "Missing DISCORD_APP_ID in env"); +const LFM_API_KEY: &'static str = env!("LASTFM_API_KEY", "Missing LASTFM_API_KEY in env"); + #[tokio::main] async fn main() -> Result<(), Box> { - let discord_app_id = env::var("DISCORD_APP_ID").expect("Missing DISCORD_APP_ID in env"); - let lfm_username = env::var("LASTFM_USERNAME").expect("Missing LASTFM_USERNAME in env"); - let lfm_api_key = env::var("LASTFM_API_KEY").expect("Missing LASTFM_API_KEY in env"); - let (send_stop, mut recv_stop) = channel::<()>(); - let mut lfm = lastfm_rs::Client::new(lfm_api_key.as_str()); + let lfm_username = std::env::args() + .nth(1) + .expect("No LastFM username provided"); + let mut lfm = lastfm_rs::Client::new(LFM_API_KEY); let _ipc_client = Arc::new(Mutex::new( - DiscordIpcClient::new(discord_app_id.as_str()) - .expect("failed to create Discord IPC-client"), + DiscordIpcClient::new(DISCORD_APP_ID).expect("failed to create Discord IPC-client"), )); let _ipc_client2 = Arc::clone(&_ipc_client); diff --git a/systemd/lfm-discord-presence.service b/systemd/lfm-discord-presence.service new file mode 100644 index 0000000..73676d7 --- /dev/null +++ b/systemd/lfm-discord-presence.service @@ -0,0 +1,11 @@ +[Unit] +Description=Discord Rich Presence for LastFM +After=network.target + +[Service] +Type=simple +ExecStart=/usr/local/bin/lfm-discord-presence LASTFM_USERNAME +Restart=always + +[Install] +WantedBy=multi-user.target