diff --git a/home-config/home-configuration.scm b/home-config/home-configuration.scm
index 5c4eb8b..3651d6c 100644
--- a/home-config/home-configuration.scm
+++ b/home-config/home-configuration.scm
@@ -17,6 +17,7 @@
(gnu home services gnupg)
(gnu home services)
(ryan-services pipewire)
+ (ryan-services spotify)
(ryan-packages freedesktop)
(ryan-packages mozilla))
@@ -128,6 +129,7 @@
("sway" ,(local-file "sway" #:recursive? #t))
("hypr" ,(local-file "hypr" #:recursive? #t))
("foot" ,(local-file "foot" #:recursive? #t))
+ ("spotify-player" ,(local-file "spotify-player" #:recursive? #t))
("pulse/client.conf" ,(local-file "pulseaudio/client.conf"))
("waybar" ,(local-file "waybar" #:recursive? #t))
("alacritty" ,(local-file "alacritty" #:recursive? #t))
@@ -142,6 +144,7 @@
(".docker/cli-plugins" ,(local-file "docker/cli-plugins" #:recursive? #t))
(".nix-channels" ,(local-file "nix-channels"))))
(service home-pipewire-service-type)
+ (service home-spotifyd-service-type)
(service home-dbus-service-type)
(service home-gpg-agent-service-type
(home-gpg-agent-configuration
diff --git a/home-config/nix-home-manager/home.nix b/home-config/nix-home-manager/home.nix
index e1ec08a..5c0ee46 100644
--- a/home-config/nix-home-manager/home.nix
+++ b/home-config/nix-home-manager/home.nix
@@ -40,6 +40,7 @@
gifski
waypaper
gdu
+ spotify-player
# # It is sometimes useful to fine-tune packages, for example, by applying
# # overrides. You can do that directly here, just don't forget the
diff --git a/home-config/spotify-player/app.toml b/home-config/spotify-player/app.toml
new file mode 100644
index 0000000..4eac5e4
--- /dev/null
+++ b/home-config/spotify-player/app.toml
@@ -0,0 +1,34 @@
+theme = "dracula"
+client_id = "4b1219bdc29945bc8ca914f80a8a6a47"
+client_port = 8888
+playback_format = """
+{track} • {artists}
+{album}
+{metadata}"""
+tracks_playback_limit = 50
+app_refresh_duration_in_ms = 32
+playback_refresh_duration_in_ms = 0
+cover_image_refresh_duration_in_ms = 2000
+page_size_in_rows = 20
+play_icon = "▶"
+pause_icon = "▌▌"
+liked_icon = "♥"
+border_type = "Plain"
+progress_bar_type = "Rectangle"
+playback_window_position = "Top"
+cover_img_length = 9
+cover_img_width = 5
+cover_img_scale = 1.0
+playback_window_width = 6
+enable_media_control = true
+enable_streaming = "DaemonOnly"
+enable_cover_image_cache = true
+default_device = "RyanThinkpad"
+
+[copy_command]
+command = "wlcopy"
+args = []
+
+[notify_format]
+summary = "{track} • {artists}"
+body = "{album}"
diff --git a/modules/ryan-services/spotify.scm b/modules/ryan-services/spotify.scm
new file mode 100644
index 0000000..1ddb9cf
--- /dev/null
+++ b/modules/ryan-services/spotify.scm
@@ -0,0 +1,43 @@
+(define-module (ryan-services spotify)
+ #:use-module (gnu packages)
+ #:use-module (gnu packages rust-apps)
+ #:use-module (gnu services)
+ #:use-module (gnu services configuration)
+ #:use-module (gnu home services)
+ #:use-module (gnu home services shepherd)
+ #:use-module (guix gexp))
+
+(define (home-spotifyd-profile-service config)
+ (map specification->package
+ (list "spotifyd")))
+
+(define (home-spotifyd-shepherd-service config)
+ ;; spotifyd daemon
+ (list (shepherd-service
+ (requirement '(pipewire))
+ (provision '(spotifyd))
+ (stop #~(make-kill-destructor))
+ (start #~(make-forkexec-constructor
+ (list #$(file-append spotifyd "/bin/spotifyd")
+ "--volume-normalisation"
+ "-B320"
+ (format #f "--device-name=~a" (gethostname))
+ "--device-type=computer"
+ "--no-daemon")
+ #:log-file (string-append
+ (or (getenv "XDG_LOG_HOME")
+ (format #f "~a/.local/var/log"
+ (getenv "HOME")))
+ "/spotifyd.log"))))))
+
+(define-public home-spotifyd-service-type
+ (service-type (name 'home-spotifyd)
+ (extensions
+ (list (service-extension
+ home-profile-service-type
+ home-spotifyd-profile-service)
+ (service-extension
+ home-shepherd-service-type
+ home-spotifyd-shepherd-service)))
+ (default-value #f)
+ (description "Provides spotifyd daemon in the background")))