diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index d8072da..0e75651 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -42,7 +42,7 @@ jobs: run: | set -euo pipefail BIN_NAMES=$(cargo metadata --no-deps --format-version 1 \ - | jq -r '.packages[0].targets[] | select(.kind[] | contains("bin")) | .name') + | jq -r '.packages[].targets[] | select(.kind[] | contains("bin")) | .name') echo "bin_names<> $GITHUB_OUTPUT echo "$BIN_NAMES" >> $GITHUB_OUTPUT echo "EOF" >> $GITHUB_OUTPUT @@ -93,7 +93,8 @@ jobs: cargo install --locked cargo-deb export PATH="$HOME/.cargo/bin:$PATH" - cargo-deb + cargo build --release --locked + cargo-deb -p pwsp-gui - name: Upload .deb(s) as artifacts uses: actions/upload-artifact@v4 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 3bdfb48..0fb79d0 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -94,7 +94,7 @@ jobs: run: | set -euo pipefail BIN_NAMES=$(cargo metadata --no-deps --format-version 1 \ - | jq -r '.packages[0].targets[] | select(.kind[] | contains("bin")) | .name') + | jq -r '.packages[].targets[] | select(.kind[] | contains("bin")) | .name') echo "bin_names<> $GITHUB_OUTPUT echo "$BIN_NAMES" >> $GITHUB_OUTPUT echo "EOF" >> $GITHUB_OUTPUT @@ -146,7 +146,8 @@ jobs: cargo install --locked cargo-deb export PATH="$HOME/.cargo/bin:$PATH" - cargo-deb + cargo build --release --locked + cargo-deb -p pwsp-gui - name: Upload .deb(s) to release uses: softprops/action-gh-release@v2 diff --git a/Cargo.lock b/Cargo.lock index a136f08..80174fd 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3279,28 +3279,45 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d595e54a326bc53c1c197b32d295e14b169e3cfeaa8dc82b529f947fba6bcf5" [[package]] -name = "pwsp" +name = "pwsp-cli" version = "1.10.0" dependencies = [ "anyhow", - "async-trait", "clap", - "dirs", + "pwsp-lib", + "serde_json", + "tokio", +] + +[[package]] +name = "pwsp-daemon" +version = "1.10.0" +dependencies = [ + "anyhow", + "clap", + "pipewire", + "pwsp-lib", + "serde_json", + "tokio", +] + +[[package]] +name = "pwsp-gui" +version = "1.10.0" +dependencies = [ + "anyhow", "eframe", "egui", "egui_dnd", "egui_extras", "egui_material_icons", - "evdev", "itertools 0.14.0", "opener", "percent-encoding", - "pipewire", + "pwsp-lib", "reqwest", "rfd", - "rodio", "rust-i18n", - "rustix 1.1.4", "serde", "serde_json", "sys-locale", @@ -3308,6 +3325,25 @@ dependencies = [ "tokio", ] +[[package]] +name = "pwsp-lib" +version = "1.10.0" +dependencies = [ + "anyhow", + "async-trait", + "dirs", + "egui", + "evdev", + "itertools 0.14.0", + "pipewire", + "reqwest", + "rodio", + "rustix 1.1.4", + "serde", + "serde_json", + "tokio", +] + [[package]] name = "pxfm" version = "0.1.29" diff --git a/Cargo.toml b/Cargo.toml index 025738f..52f71f2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,17 +1,28 @@ -[package] -name = "pwsp" +[workspace] +members = [ + "pwsp-lib", + "pwsp-daemon", + "pwsp-cli", + "pwsp-gui" +] +resolver = "2" + +[workspace.package] version = "1.10.0" edition = "2024" authors = ["arabian"] -description = "PWSP lets you play audio files through your microphone. Has both CLI and GUI clients." -readme = "README.md" homepage = "https://pwsp.arabianq.ru" repository = "https://github.com/arabianq/pipewire-soundpad" license = "MIT" +description = "PWSP lets you play audio files through your microphone. Has both CLI and GUI clients." keywords = ["soundpad", "pipewire", "linux", "cli", "gui"] +[workspace.dependencies] +pwsp-lib = { path = "pwsp-lib" } +pwsp-daemon = { path = "pwsp-daemon" } +pwsp-cli = { path = "pwsp-cli" } +pwsp-gui = { path = "pwsp-gui" } -[dependencies] tokio = { version = "1.52.3", features = ["full"] } async-trait = "0.1.89" @@ -31,9 +42,7 @@ dirs = "6.0.0" itertools = "0.14.0" evdev = { version = "0.13.2", features = ["tokio"] } rfd = { version = "0.17.2", default-features = false, features = [ - "xdg-portal", - ] } opener = { version = "0.8.4", features = ["reveal"] } system-fonts = "0.1.1" @@ -67,18 +76,6 @@ egui_dnd = "0.15.0" reqwest = "0.13.4" percent-encoding = "2.3.2" -[[bin]] -name = "pwsp-daemon" -path = "src/bin/daemon.rs" - -[[bin]] -name = "pwsp-cli" -path = "src/bin/cli.rs" - -[[bin]] -name = "pwsp-gui" -path = "src/main.rs" - [profile.release] strip = true lto = true @@ -86,36 +83,3 @@ codegen-units = 1 opt-level = "z" panic = "abort" -[package.metadata.deb] -assets = [ - [ - "target/release/pwsp-daemon", - "usr/bin/", - "755", - ], - [ - "target/release/pwsp-cli", - "usr/bin/", - "755", - ], - [ - "target/release/pwsp-gui", - "usr/bin/", - "755", - ], - [ - "assets/pwsp-gui.desktop", - "usr/share/applications/pwsp.desktop", - "644", - ], - [ - "assets/icon.png", - "usr/share/icons/hicolor/256x256/apps/pwsp.png", - "644", - ], - [ - "assets/pwsp-daemon.service", - "usr/lib/systemd/user/pwsp-daemon.service", - "644", - ], -] diff --git a/README.md b/README.md index 64640ac..ced8d32 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@

🎵 PipeWire Soundpad (PWSP)

A simple, modern, and powerful soundboard for Linux, written in Rust.

- PWSP Screenshot + PWSP Screenshot
## 🌟 Overview diff --git a/packages/aur/standart/PKGBUILD b/packages/aur/standart/PKGBUILD index af11412..569224e 100644 --- a/packages/aur/standart/PKGBUILD +++ b/packages/aur/standart/PKGBUILD @@ -40,8 +40,8 @@ package() { install -Dm755 "target/release/pwsp-daemon" "${pkgdir}/usr/bin/pwsp-daemon" install -Dm755 "target/release/pwsp-gui" "${pkgdir}/usr/bin/pwsp-gui" - install -Dm644 "assets/pwsp-gui.desktop" "${pkgdir}/usr/share/applications/pwsp-gui.desktop" - install -Dm644 "assets/icon.png" "${pkgdir}/usr/share/icons/hicolor/256x256/apps/pwsp.png" + install -Dm644 "pwsp-gui/assets/pwsp-gui.desktop" "${pkgdir}/usr/share/applications/pwsp-gui.desktop" + install -Dm644 "pwsp-gui/assets/icon.png" "${pkgdir}/usr/share/icons/hicolor/256x256/apps/pwsp.png" - install -Dm644 "assets/pwsp-daemon.service" "${pkgdir}/usr/lib/systemd/user/pwsp-daemon.service" + install -Dm644 "pwsp-gui/assets/pwsp-daemon.service" "${pkgdir}/usr/lib/systemd/user/pwsp-daemon.service" } diff --git a/packages/flatpak/ru.arabianq.pwsp.metainfo.xml b/packages/flatpak/ru.arabianq.pwsp.metainfo.xml index 2dbeb7e..e35f340 100644 --- a/packages/flatpak/ru.arabianq.pwsp.metainfo.xml +++ b/packages/flatpak/ru.arabianq.pwsp.metainfo.xml @@ -15,7 +15,7 @@ ru.arabianq.pwsp.desktop - https://raw.githubusercontent.com/arabianq/pipewire-soundpad/master/assets/screenshot.png + https://raw.githubusercontent.com/arabianq/pipewire-soundpad/main/pwsp-gui/assets/screenshot.png https://pwsp.arabianq.ru diff --git a/packages/flatpak/ru.arabianq.pwsp.yaml b/packages/flatpak/ru.arabianq.pwsp.yaml index 532491a..eda8411 100644 --- a/packages/flatpak/ru.arabianq.pwsp.yaml +++ b/packages/flatpak/ru.arabianq.pwsp.yaml @@ -35,7 +35,7 @@ modules: - install -Dm755 target/release/pwsp-cli /app/bin/pwsp-cli - install -Dm755 target/release/pwsp-gui /app/bin/pwsp-gui - install -Dm755 packages/flatpak/pwsp-wrapper.py /app/bin/pwsp-wrapper.py - - install -Dm644 assets/icon.png /app/share/icons/hicolor/256x256/apps/ru.arabianq.pwsp.png + - install -Dm644 pwsp-gui/assets/icon.png /app/share/icons/hicolor/256x256/apps/ru.arabianq.pwsp.png - install -Dm644 packages/flatpak/ru.arabianq.pwsp.desktop /app/share/applications/ru.arabianq.pwsp.desktop - install -Dm644 packages/flatpak/ru.arabianq.pwsp.metainfo.xml /app/share/metainfo/ru.arabianq.pwsp.metainfo.xml sources: diff --git a/packages/rpm/pwsp.spec b/packages/rpm/pwsp.spec index 48676c9..158dbc4 100644 --- a/packages/rpm/pwsp.spec +++ b/packages/rpm/pwsp.spec @@ -39,10 +39,10 @@ install -Dm755 target/release/pwsp-cli %{buildroot}%{_bindir}/pwsp-cli install -Dm755 target/release/pwsp-daemon %{buildroot}%{_bindir}/pwsp-daemon install -Dm755 target/release/pwsp-gui %{buildroot}%{_bindir}/pwsp-gui -install -Dm644 assets/pwsp-gui.desktop %{buildroot}%{_datadir}/applications/pwsp.desktop -install -Dm644 assets/icon.png %{buildroot}%{_datadir}/icons/hicolor/256x256/apps/pwsp.png +install -Dm644 pwsp-gui/assets/pwsp-gui.desktop %{buildroot}%{_datadir}/applications/pwsp.desktop +install -Dm644 pwsp-gui/assets/icon.png %{buildroot}%{_datadir}/icons/hicolor/256x256/apps/pwsp.png -install -Dm644 assets/pwsp-daemon.service %{buildroot}/usr/lib/systemd/user/pwsp-daemon.service +install -Dm644 pwsp-gui/assets/pwsp-daemon.service %{buildroot}/usr/lib/systemd/user/pwsp-daemon.service %files %license LICENSE diff --git a/pwsp-cli/Cargo.toml b/pwsp-cli/Cargo.toml new file mode 100644 index 0000000..d785b11 --- /dev/null +++ b/pwsp-cli/Cargo.toml @@ -0,0 +1,18 @@ +[package] +name = "pwsp-cli" +version.workspace = true +edition.workspace = true +authors.workspace = true +homepage.workspace = true +repository.workspace = true +license.workspace = true + +[dependencies] +pwsp-lib.workspace = true + +tokio.workspace = true + +anyhow.workspace = true +clap.workspace = true + +serde_json.workspace = true diff --git a/src/bin/cli.rs b/pwsp-cli/src/main.rs similarity index 99% rename from src/bin/cli.rs rename to pwsp-cli/src/main.rs index 907fd1d..00db169 100644 --- a/src/bin/cli.rs +++ b/pwsp-cli/src/main.rs @@ -1,6 +1,6 @@ use anyhow::{Result, anyhow}; use clap::{Parser, Subcommand}; -use pwsp::{ +use pwsp_lib::{ types::socket::Request, utils::daemon::{make_request, wait_for_daemon}, }; diff --git a/pwsp-daemon/Cargo.toml b/pwsp-daemon/Cargo.toml new file mode 100644 index 0000000..a6c9272 --- /dev/null +++ b/pwsp-daemon/Cargo.toml @@ -0,0 +1,20 @@ +[package] +name = "pwsp-daemon" +version.workspace = true +edition.workspace = true +authors.workspace = true +homepage.workspace = true +repository.workspace = true +license.workspace = true + +[dependencies] +pwsp-lib.workspace = true + +tokio.workspace = true + +serde_json.workspace = true + +clap.workspace = true +anyhow.workspace = true + +pipewire.workspace = true diff --git a/src/bin/daemon.rs b/pwsp-daemon/src/main.rs similarity index 99% rename from src/bin/daemon.rs rename to pwsp-daemon/src/main.rs index 9a1a6a9..87cc27e 100644 --- a/src/bin/daemon.rs +++ b/pwsp-daemon/src/main.rs @@ -1,5 +1,5 @@ use anyhow::{Result, anyhow}; -use pwsp::{ +use pwsp_lib::{ types::socket::{MAX_MESSAGE_SIZE, Request, Response}, utils::{ commands::parse_command, diff --git a/pwsp-gui/Cargo.toml b/pwsp-gui/Cargo.toml new file mode 100644 index 0000000..cb708f2 --- /dev/null +++ b/pwsp-gui/Cargo.toml @@ -0,0 +1,69 @@ +[package] +name = "pwsp-gui" +version.workspace = true +edition.workspace = true +authors.workspace = true +homepage.workspace = true +repository.workspace = true +license.workspace = true +description.workspace = true + +[dependencies] +pwsp-lib.workspace = true + +tokio.workspace = true + +opener.workspace = true +rfd.workspace = true +itertools.workspace = true +anyhow.workspace = true + +serde.workspace = true +serde_json.workspace = true + +egui.workspace = true +eframe.workspace = true +egui_extras.workspace = true +egui_material_icons.workspace = true +egui_dnd.workspace = true + +system-fonts.workspace = true +rust-i18n.workspace = true +sys-locale.workspace = true + +reqwest.workspace = true +percent-encoding.workspace = true + +[package.metadata.deb] +assets = [ + [ + "target/release/pwsp-daemon", + "usr/bin/", + "755", + ], + [ + "target/release/pwsp-cli", + "usr/bin/", + "755", + ], + [ + "target/release/pwsp-gui", + "usr/bin/", + "755", + ], + [ + "assets/pwsp-gui.desktop", + "usr/share/applications/pwsp.desktop", + "644", + ], + [ + "assets/icon.png", + "usr/share/icons/hicolor/256x256/apps/pwsp.png", + "644", + ], + [ + "assets/pwsp-daemon.service", + "usr/lib/systemd/user/pwsp-daemon.service", + "644", + ], +] diff --git a/assets/icon.png b/pwsp-gui/assets/icon.png similarity index 100% rename from assets/icon.png rename to pwsp-gui/assets/icon.png diff --git a/assets/pwsp-daemon.service b/pwsp-gui/assets/pwsp-daemon.service similarity index 100% rename from assets/pwsp-daemon.service rename to pwsp-gui/assets/pwsp-daemon.service diff --git a/assets/pwsp-gui.desktop b/pwsp-gui/assets/pwsp-gui.desktop similarity index 100% rename from assets/pwsp-gui.desktop rename to pwsp-gui/assets/pwsp-gui.desktop diff --git a/assets/screenshot.png b/pwsp-gui/assets/screenshot.png similarity index 100% rename from assets/screenshot.png rename to pwsp-gui/assets/screenshot.png diff --git a/locales/app.toml b/pwsp-gui/locales/app.toml similarity index 100% rename from locales/app.toml rename to pwsp-gui/locales/app.toml diff --git a/src/gui/input.rs b/pwsp-gui/src/gui/input.rs similarity index 98% rename from src/gui/input.rs rename to pwsp-gui/src/gui/input.rs index 61d51ec..eb1b5bd 100644 --- a/src/gui/input.rs +++ b/pwsp-gui/src/gui/input.rs @@ -1,7 +1,7 @@ use crate::gui::SoundpadGui; use egui::{Context, Id, Key, Modifiers}; -use pwsp::types::socket::Request; -use pwsp::utils::gui::make_request_async; +use pwsp_lib::types::socket::Request; +use pwsp_lib::utils::gui::make_request_async; /// Convert an egui Key + Modifiers to a normalized chord string like "Ctrl+Shift+A". fn chord_from_event(modifiers: &Modifiers, key: &Key) -> Option { diff --git a/src/gui/mod.rs b/pwsp-gui/src/gui/mod.rs similarity index 99% rename from src/gui/mod.rs rename to pwsp-gui/src/gui/mod.rs index 3cbc458..61b979e 100644 --- a/src/gui/mod.rs +++ b/pwsp-gui/src/gui/mod.rs @@ -6,7 +6,7 @@ use anyhow::{Result, anyhow}; use eframe::{HardwareAcceleration, NativeOptions, icon_data::from_png_bytes, run_native}; use egui::{Context, FontData, FontDefinitions, FontFamily, FontTweak, Vec2, ViewportBuilder}; use itertools::Itertools; -use pwsp::{ +use pwsp_lib::{ types::{ audio_player::PlayerState, config::GuiConfig, diff --git a/src/gui/update.rs b/pwsp-gui/src/gui/update.rs similarity index 99% rename from src/gui/update.rs rename to pwsp-gui/src/gui/update.rs index 5f9fb4f..a5cc986 100644 --- a/src/gui/update.rs +++ b/pwsp-gui/src/gui/update.rs @@ -1,7 +1,7 @@ use crate::gui::SoundpadGui; use eframe::{App, Frame as EFrame}; use egui::{CentralPanel, Context, ThemePreference}; -use pwsp::{ +use pwsp_lib::{ types::{config::PreferredTheme, socket::Request}, utils::{daemon::get_daemon_config, gui::make_request_async}, }; diff --git a/src/gui/views/body.rs b/pwsp-gui/src/gui/views/body.rs similarity index 99% rename from src/gui/views/body.rs rename to pwsp-gui/src/gui/views/body.rs index c0cf69b..93c5313 100644 --- a/src/gui/views/body.rs +++ b/pwsp-gui/src/gui/views/body.rs @@ -5,7 +5,7 @@ use egui::{ }; use egui_dnd::dnd; use egui_material_icons::icons::*; -use pwsp::types::{gui::AppState, gui::AudioPlayerState}; +use pwsp_lib::types::{gui::AppState, gui::AudioPlayerState}; use rust_i18n::t; use std::{cmp::Ordering, path::Path, path::PathBuf}; diff --git a/src/gui/views/footer.rs b/pwsp-gui/src/gui/views/footer.rs similarity index 100% rename from src/gui/views/footer.rs rename to pwsp-gui/src/gui/views/footer.rs diff --git a/src/gui/views/header.rs b/pwsp-gui/src/gui/views/header.rs similarity index 96% rename from src/gui/views/header.rs rename to pwsp-gui/src/gui/views/header.rs index 0795a8d..4500246 100644 --- a/src/gui/views/header.rs +++ b/pwsp-gui/src/gui/views/header.rs @@ -1,8 +1,8 @@ use crate::gui::SoundpadGui; use egui::{Button, CollapsingHeader, FontFamily, Label, RichText, Slider, Ui}; use egui_material_icons::icons::*; -use pwsp::types::{audio_player::TrackInfo, gui::AppState}; -use pwsp::utils::gui::format_time_pair; +use pwsp_lib::types::{audio_player::TrackInfo, gui::AppState}; +use pwsp_lib::utils::gui::format_time_pair; use std::time::Instant; pub(crate) enum TrackAction { @@ -91,7 +91,7 @@ impl SoundpadGui { fn draw_position_control( ui: &mut Ui, - ui_state: &mut pwsp::types::gui::TrackUiState, + ui_state: &mut pwsp_lib::types::gui::TrackUiState, track: &TrackInfo, default_slider_width: f32, ) { @@ -117,7 +117,7 @@ impl SoundpadGui { fn draw_volume_control( ui: &mut Ui, - ui_state: &mut pwsp::types::gui::TrackUiState, + ui_state: &mut pwsp_lib::types::gui::TrackUiState, track: &TrackInfo, default_slider_width: f32, ) { diff --git a/src/gui/views/hotkey_capture.rs b/pwsp-gui/src/gui/views/hotkey_capture.rs similarity index 100% rename from src/gui/views/hotkey_capture.rs rename to pwsp-gui/src/gui/views/hotkey_capture.rs diff --git a/src/gui/views/hotkeys.rs b/pwsp-gui/src/gui/views/hotkeys.rs similarity index 99% rename from src/gui/views/hotkeys.rs rename to pwsp-gui/src/gui/views/hotkeys.rs index f45f081..7a40d3d 100644 --- a/src/gui/views/hotkeys.rs +++ b/pwsp-gui/src/gui/views/hotkeys.rs @@ -2,8 +2,8 @@ use crate::gui::SoundpadGui; use egui::{Button, Color32, Label, RichText, TextEdit, Ui}; use egui_extras::{Column, TableBuilder}; use egui_material_icons::icons::*; -use pwsp::types::socket::Request; -use pwsp::utils::gui::make_request_async; +use pwsp_lib::types::socket::Request; +use pwsp_lib::utils::gui::make_request_async; use rust_i18n::t; use std::path::Path; diff --git a/src/gui/views/mod.rs b/pwsp-gui/src/gui/views/mod.rs similarity index 100% rename from src/gui/views/mod.rs rename to pwsp-gui/src/gui/views/mod.rs diff --git a/src/gui/views/settings.rs b/pwsp-gui/src/gui/views/settings.rs similarity index 98% rename from src/gui/views/settings.rs rename to pwsp-gui/src/gui/views/settings.rs index 30a6998..b17633c 100644 --- a/src/gui/views/settings.rs +++ b/pwsp-gui/src/gui/views/settings.rs @@ -1,7 +1,7 @@ use crate::gui::SoundpadGui; use egui::{Align, Button, Color32, ComboBox, Layout, RichText, Ui}; use egui_material_icons::icons::ICON_ARROW_BACK; -use pwsp::types::config::PreferredTheme; +use pwsp_lib::types::config::PreferredTheme; use rust_i18n::t; impl SoundpadGui { diff --git a/src/gui/views/waiting_for_daemon.rs b/pwsp-gui/src/gui/views/waiting_for_daemon.rs similarity index 100% rename from src/gui/views/waiting_for_daemon.rs rename to pwsp-gui/src/gui/views/waiting_for_daemon.rs diff --git a/src/main.rs b/pwsp-gui/src/main.rs similarity index 96% rename from src/main.rs rename to pwsp-gui/src/main.rs index 086944b..db8f384 100644 --- a/src/main.rs +++ b/pwsp-gui/src/main.rs @@ -1,7 +1,7 @@ mod gui; use anyhow::{Context, Result}; -use pwsp::utils::gui::ensure_pwsp_audio_dir; +use pwsp_lib::utils::gui::ensure_pwsp_audio_dir; use rust_i18n::i18n; use std::{env, path::PathBuf}; diff --git a/pwsp-lib/Cargo.toml b/pwsp-lib/Cargo.toml new file mode 100644 index 0000000..4ce0548 --- /dev/null +++ b/pwsp-lib/Cargo.toml @@ -0,0 +1,28 @@ +[package] +name = "pwsp-lib" +version.workspace = true +edition.workspace = true +authors.workspace = true +homepage.workspace = true +repository.workspace = true +license.workspace = true + +[dependencies] +tokio.workspace = true +async-trait.workspace = true + +serde.workspace = true +serde_json.workspace = true + +dirs.workspace = true +itertools.workspace = true +evdev.workspace = true +anyhow.workspace = true +rustix.workspace = true + +rodio.workspace = true +pipewire.workspace = true + +egui.workspace = true + +reqwest.workspace = true diff --git a/src/lib.rs b/pwsp-lib/src/lib.rs similarity index 100% rename from src/lib.rs rename to pwsp-lib/src/lib.rs diff --git a/src/types/audio_player.rs b/pwsp-lib/src/types/audio_player.rs similarity index 100% rename from src/types/audio_player.rs rename to pwsp-lib/src/types/audio_player.rs diff --git a/src/types/commands.rs b/pwsp-lib/src/types/commands.rs similarity index 100% rename from src/types/commands.rs rename to pwsp-lib/src/types/commands.rs diff --git a/src/types/config.rs b/pwsp-lib/src/types/config.rs similarity index 100% rename from src/types/config.rs rename to pwsp-lib/src/types/config.rs diff --git a/src/types/gui.rs b/pwsp-lib/src/types/gui.rs similarity index 100% rename from src/types/gui.rs rename to pwsp-lib/src/types/gui.rs diff --git a/src/types/mod.rs b/pwsp-lib/src/types/mod.rs similarity index 100% rename from src/types/mod.rs rename to pwsp-lib/src/types/mod.rs diff --git a/src/types/pipewire.rs b/pwsp-lib/src/types/pipewire.rs similarity index 100% rename from src/types/pipewire.rs rename to pwsp-lib/src/types/pipewire.rs diff --git a/src/types/socket.rs b/pwsp-lib/src/types/socket.rs similarity index 100% rename from src/types/socket.rs rename to pwsp-lib/src/types/socket.rs diff --git a/src/utils/commands.rs b/pwsp-lib/src/utils/commands.rs similarity index 100% rename from src/utils/commands.rs rename to pwsp-lib/src/utils/commands.rs diff --git a/src/utils/config.rs b/pwsp-lib/src/utils/config.rs similarity index 100% rename from src/utils/config.rs rename to pwsp-lib/src/utils/config.rs diff --git a/src/utils/daemon.rs b/pwsp-lib/src/utils/daemon.rs similarity index 100% rename from src/utils/daemon.rs rename to pwsp-lib/src/utils/daemon.rs diff --git a/src/utils/global_hotkeys.rs b/pwsp-lib/src/utils/global_hotkeys.rs similarity index 100% rename from src/utils/global_hotkeys.rs rename to pwsp-lib/src/utils/global_hotkeys.rs diff --git a/src/utils/gui.rs b/pwsp-lib/src/utils/gui.rs similarity index 100% rename from src/utils/gui.rs rename to pwsp-lib/src/utils/gui.rs diff --git a/src/utils/mod.rs b/pwsp-lib/src/utils/mod.rs similarity index 100% rename from src/utils/mod.rs rename to pwsp-lib/src/utils/mod.rs diff --git a/src/utils/pipewire.rs b/pwsp-lib/src/utils/pipewire.rs similarity index 100% rename from src/utils/pipewire.rs rename to pwsp-lib/src/utils/pipewire.rs