Skip to content

feat: add optional Spicetify Material You theming for Spotify#80

Open
yukazakiri wants to merge 12 commits intosnowarch:mainfrom
yukazakiri:feature/feat/spicetify-wallpaper-theming
Open

feat: add optional Spicetify Material You theming for Spotify#80
yukazakiri wants to merge 12 commits intosnowarch:mainfrom
yukazakiri:feature/feat/spicetify-wallpaper-theming

Conversation

@yukazakiri
Copy link
Contributor

@yukazakiri yukazakiri commented Mar 10, 2026

Summary

  • Add enableSpicetify config flag (default off) for opt-in Spotify theming
  • Expose Spotify theming toggle in both settings UIs
  • Generate/apply Spicetify theme from wallpaper colors in color pipeline
  • Implement live reload via spicetify watch -s - no Spotify restarts on wallpaper change
  • Use custom "Inir" theme with matugen color scheme for Material You integration
  • Add lock file mechanism to prevent duplicate watch processes
  • CSS base from Sleek theme (provides styling foundation)

Motivation

Spotify's default theming doesn't integrate with system color schemes. This PR enables automatic Material You color theming for Spotify via Spicetify, with live updates when wallpaper changes without restarting Spotify. Uses custom "Inir" theme for brand consistency.

here is the result

compressO-recording_2026-03-10_20.20.28.mp4

Testing Steps to verify this works:

  1. Enable enableSpicetify: true in config.json
  2. Change wallpaper via wallpaper picker
  3. Verify Spotify colors update live without restart
  4. Check ~/.config/spicetify/Themes/Inir/color.ini is generated
  5. Verify watch process running: pgrep -f "spicetify watch"

Checklist

  • Tested on Niri (or Hyprland if applicable)
  • Tested both ii and waffle families for UI changes (N/A - script only)
  • Tested material, aurora, and inir styles for ii changes (N/A - uses colors.json)
  • No hardcoded values (colors, fonts, durations use design tokens)
  • Config changes synced in Config.qml and defaults/config.json
  • Config access uses optional chaining: Config.options?.section?.option ?? default
  • IPC functions have explicit return types (: void, : string, etc.) (N/A - bash script)
  • Shell restarted after changes: qs kill -c ii; qs -c ii
  • Logs checked for errors: ~/.local/state/quickshell/user/generated/spicetify_theme.log
  • Lazy-loaded components tested (Settings, overlays)
  • No console errors or warnings

Related

Implements Spicetify theming integration requested by users wanting consistent Material You colors across all desktop applications.

yukazakiri and others added 12 commits March 8, 2026 10:05
… swap

Instead of dealing with missing/dynamic kitty sockets (/tmp/kitty-<PID>)
and missing --configured flags on 'kitty @ set-colors' (which caused new
tabs to spawn with the old theme), we now use Kitty's native config reload
mechanism via SIGUSR1.

Sending SIGUSR1 to all kitty processes forces them to reload kitty.conf,
which seamlessly re-evaluates 'include current-theme.conf', instantly
updating both running windows and the tab bar, and correctly updating the
internal palette so future tabs/windows inherit the new theme.

To eliminate race conditions when Kitty reads the file exactly as it is
being written, we write the config to a secondary file and perform an
atomic mv on a symlink swap.

Additionally, --signal SIGUSR1 is explicitly used in the pkill command
for maximal portability.
fix(kitty): update tab bar colors live via SIGUSR1 config reload
- add `enableSpicetify` config flag (default off)
- expose Spotify theming toggle in both settings UIs
- generate/apply Spicetify theme from wallpaper colors in color pipeline
- Move declare -A COLORS to global scope (fixes undefined variable bug)
- Remove redundant local declaration in generate_color_ini
- Ensures colors are properly read from colors.json and applied to theme
- Changed THEME_NAME from 'Sleek' to 'Inir'
- Updated log messages to reflect new theme name
- CSS still downloaded from Sleek as base (provides styling foundation)
- Theme directory now: ~/.config/spicetify/Themes/Inir/
@yukazakiri
Copy link
Contributor Author

Ohh Shoot sorry it sseems my merge from my branch was inclulded XD, feel free to check if you like it, and just cherry pick it

anyway im satisfied on my spotify now

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant