Skip to content

feat: add home manager module#150

Open
frostplexx wants to merge 3 commits intoInrixia:masterfrom
frostplexx:flake
Open

feat: add home manager module#150
frostplexx wants to merge 3 commits intoInrixia:masterfrom
frostplexx:flake

Conversation

@frostplexx
Copy link
Contributor

This PR adds a nix home manager module that lets users manage install TidaLuna and manage the following things in home manager:

  • installed stores
  • installed plugins
  • plugin settings

Themes and feature flag are currently missing from the module.

This module works by creating a luna-settings.json file inside tidalunas app directory. On startup this json is then read and the configuration applied. Any plugins and stores not defined in the json file are removed and their settings are cleared, meaning that the luna-settings.json is the only source of truth.

The additions to the readme should explain how to use the home manager module and I'm specifically looking for someone to test this on Linux. For reference, my own working configuration is added in this description too.

Click to see config
  programs.tidaluna = {
    enable = true;
    stores = [
      "https://github.com/meowarex/TidalLuna-Plugins/releases/download/latest/store.json"
      "https://github.com/Inrixia/luna-plugins/releases/download/dev/store.json"
    ];

    #To list settingsNames and settings:  const idb = await luna.core.ReactiveStore.getStore("@luna/pluginStorage").dump(); console.log(JSON.stringify(idb, null, 2));
    plugins = [
      {
        shortURL = "@meowarex/radiant-lyrics";
        settingsName = "RadiantLyrics";
        settings = {
          "lyricsGlowEnabled" = false;
          "trackTitleGlow" = false;
          "hideUIEnabled" = false;
          "playerBarVisible" = false;
          "qualityProgressColor" = false;
          "floatingPlayerBar" = true;
          "playerBarTint" = 10;
          "playerBarTintColor" = "#000000";
          "playerBarTintCustomColors" = [];
          "playerBarRadius" = 8;
          "playerBarSpacing" = 10;
          "CoverEverywhere" = false;
          "performanceMode" = false;
          "spinningArt" = true;
          "textGlow" = 20;
          "backgroundScale" = 15;
          "backgroundRadius" = 25;
          "backgroundContrast" = 120;
          "backgroundBlur" = 80;
          "backgroundBrightness" = 40;
          "spinSpeed" = 45;
          "settingsAffectNowPlaying" = true;
          "stickyLyrics" = false;
          "stickyLyricsIcon" = "sparkle";
          "lyricsStyle" = 2;
          "syllableStyle" = 0;
          "contextAwareLyrics" = true;
          "blurInactive" = true;
          "bubbledLyrics" = true;
          "syllableLogging" = false;
          "lyricsFontSize" = 100;
          "romanizeLyrics" = false;
        };
      }
      {
        shortURL = "DiscordRPC";
        settingsName = "DiscordRPC";
        settings = {
          "displayOnPause" = false;
          "displayArtistIcon" = true;
          "displayPlaylistButton" = true;
          "customStatusText" = "{track} by {artist}";
        };
      }
      {
        shortURL = "DesktopConnect";
      }
      {
        shortURL = "NoBuffer";
      }
      {
        shortURL = "Themer";
        settingsName = "Themer";
        settings = {
          "css" = builtins.readFile (
            pkgs.fetchurl {
              url = "https://raw.githubusercontent.com/frostplexx/catppuccin-tidal/refs/heads/main/mocha.css";
              sha256 = "sha256-eN17wamb5sz3cY2ZfFwS2nYkYaUZTJV11chWhEKVrfU=";
            }
          );
        };
      }
    ];
  };

@xaiyadev
Copy link
Contributor

Wanted to this for a longer time but didnt get to deep into it because the Luna store was a bit funky.

This is actually pretty cool, if it works, gonna maybe try it out later !! Thank you <3

Just wanted to mention that themes in general dont work just yet, iirc
And feature flags are a funky thing of tidal themselfes,, enabling them also kinda disables them and yadayadayada

@frostplexx
Copy link
Contributor Author

My current approach also isn't super clean, especially the weird division between settingsName and shortURL so I'm definitely open for discussion regarding that! I haven't looked into how feature flags work at all but I imagined something like:

featureFlags = {
	Ai_chatbox = true;
	Compact_player = true;
	...
}

Which will tell TidaLuna to try and activate those flags and if anything is not working it will just silently fail.

@Inrixia
Copy link
Owner

Inrixia commented Mar 25, 2026

So sorry I never commented. I reviewed this and it looks ok.

But I'm planning to change how some settings are being handled and would like to hold off merging until that's done. 💜

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.

3 participants