liminalOS/hm/modules/linux/tidal-hifi/default.nix

721 lines
22 KiB
Nix

{
config,
osConfig,
lib,
pkgs,
...
}:
let
cfg = config.programs.tidal-hifi;
in
# TODO: add check for unfree: ++ lib.optionals osConfig.liminalOS.config.allowUnfree [ tidal-hifi ]
{
options.programs.tidal-hifi = {
enable = lib.mkEnableOption "tidal Hi-Fi client";
theme = lib.mkOption {
type = lib.types.nullOr lib.types.str;
default = null;
description = ''
Custom CSS to use as theme for Tidal HiFi.
'';
};
};
config = lib.mkIf pkgs.stdenv.targetPlatform.isx86_64 {
home.packages = lib.mkIf cfg.enable [ pkgs.tidal-hifi ];
xdg.configFile."tidal-hifi/themes/stylix.css".text = lib.mkIf (cfg.theme != null) cfg.theme;
programs.tidal-hifi =
lib.mkIf (config.liminalOS.programs.enable && osConfig.liminalOS.config.allowUnfree)
{
enable = lib.mkDefault true;
theme =
with config.lib.stylix.colors.withHashtag;
lib.mkDefault ''
/*
{
"name": "Tidal Light",
"author": "Interstellar_1",
"description": "A light theme for Tidal. v0.3.5b"
"license": "MIT License"
}
*/
:root {
/*background color*/
--wave-color-solid-base-fill: ${base00} !important;
--wave-color-solid-accent-darkest: ${base01} !important;
--wave-color-solid-base-brighter: ${base01} !important;
--wave-color-solid-base-bright: ${base01} !important;
--wave-color-opacity-base-bright-thick: ${base05} !important;
/*hover*/
--wave-color-solid-base-brightest: ${base03} !important;
--wave-color-opacity-base-brightest-regular: ${base01} !important;
--wave-color-opacity-contrast-fill-regular: ${base04} !important;
--wave-color-solid-contrast-dark: ${base03} !important;
--transparent-play-hover: #e1e1e166 !important;
/*border*/
--wave-color-opacity-contrast-fill-ultra-thin: ${base02} !important;
/*button color*/
--wave-color-opacity-contrast-fill-thin: ${base03} !important;
--wave-color-solid-accent-darker: ${base0C} !important;
--wave-color-solid-rainbow-red-darkest: ${base08} !important;
--wave-color-solid-rainbow-red-darker: ${base08} !important;
--button-light: ${base03} !important;
--button-medium: ${base04} !important;
/*accents*/
--wave-color-solid-accent-fill: ${base0E} !important;
--text-accent: ${base0E} !important;
[data-w="textUrl"] {
color: var(--text-accent) !important;
}
--switch-accent: ${base0E} !important;
--wave-color-solid-rainbow-yellow-fill: ${base0A} !important;
/*primary text*/
[data-wave-color="textDefault"] {
color: ${base05} !important;
}
[data-wave-color="textWhite"] {
color: ${base05} !important;
}
/*secondary text*/
--wave-color-text-secondary: ${base06} !important;
[data-wave-color="textSecondary"] {
color: ${base05}000b3 !important;
}
--wave-color-solid-contrast-darker: ${base06} !important;
--wave-color-opacity-contrast-fill-ultra-thick: ${base06} !important;
/*icons*/
--wave-color-solid-contrast-fill: ${base05} !important;
--wave-color-opacity-contrast-fill-thick: ${base05}0009a !important;
/*search*/
--wave-color-opacity-base-brighter-ultra-thick: ${base04} !important;
--search-background: ${base01}e0 !important;
/*user profile image*/
--user-profile-linear-gradient: linear-gradient(
160deg,
${base0B} 1.22%,
${base0D} 40.51%,
${base04} 79.07%
) !important;
}
body {
background-color: ${base00} !important;
}
/*GENERAL*/
/*hide right shadow*/
#playQueueSidebar {
box-shadow: none !important;
}
/*buttons*/
._activeTab_f47dafa {
background: ${base03};
}
/*HOMEPAGE*/
/*artists*/
.isLoggedIn--CEJH_::after {
background: none;
}
/*hide album + playlist + mix bg*/
._dataContainer_66f4f40::before,
._dataContainer_5bb6028::before,
._dataContainer_7feb4a2::before {
background-image: none;
}
/*artist name*/
.css-5pl3ge {
color: ${base05}000ab;
}
/*icons*/
.icon--rmikT,
.icon--VV33E {
color: ${base05};
}
._icon_77f3f89 {
fill: ${base05} !important;
}
/*SIDEBAR*/
._active_3451dba:is(a._sidebarItem_730d27e, button._sidebarItem_730d27e) span {
color: var(--wave-color-solid-accent-fill) !important;
}
/*player shadow*/
.player--gAOQG.notFullscreen--xbpBL {
box-shadow: 0 -6px 24px ${base04}26;
}
/*ACCENT TEXT*/
/*yellow*/
._wave-badge-color-max_1oxl7_22 {
color: ${base0A};
background-color: ${base0A}38;
}
/*blue*/
._wave-badge-color-high_1oxl7_17 {
color: var(--text-accent);
}
.wave-text-title-bold {
color: ${base00} !important;
}
/*none*/
._wave-badge-color-default_1oxl7_7 {
background-color: ${base03};
color: ${base05};
}
svg._accentedIcon_d6d54e4 {
color: var(--wave-color-solid-accent-fill);
fill: var(--wave-color-solid-accent-fill) !important;
}
.smallHeader--rfQsR {
--img: url(https://blocks.astratic.com/img/general-img-landscape.png) !important;
}
/*shortcuts*/
._shortcutItem_6c8e7b4 {
box-shadow: none !important;
background-color: var(--wave-color-solid-base-brighter) !important;
}
._shortcutItem_6c8e7b4::after {
background: linear-gradient(${base05}0, ${base00}9);
}
/*search*/
.container--cl4MJ,
div.searchField--fgDKc,
div.searchField--fgDKc:focus,
._container_f1be359 {
background-color: var(--search-background) !important;
border-color: var(--wave-color-opacity-contrast-fill-ultra-thin) !important;
}
.container--sRPa5 {
border-color: var(--wave-color-opacity-contrast-fill-ultra-thin) !important;
}
.icon--nNXej,
._icon_49dd0aa {
background: linear-gradient(180deg, ${base00}, ${base03}) !important;
}
a.searchPill--ED7eQ.active--e_BIx {
background: var(--wave-color-opacity-contrast-fill-thin) !important;
}
.css-10jmp6g {
color: var(--wave-color-text-secondary) !important;
}
._imageContainer_dfdf7bd::after,
._imageContainer_23303c1::after {
background: var(--transparent-play-hover) !important;
}
/*updates*/
.css-5pl3ge {
color: ${base05}000ab !important;
}
/*explict badge*/
._explicitBadge_b93510b {
filter: invert(40%) brightness(110%) contrast(140%);
}
#explicit-badge {
color: ${base05} !important;
}
/*video badge*/
.videoBadge--Tpdav {
fill: var(--wave-color-text-secondary);
filter: brightness(0.3) invert(0);
}
/*canvas nav buttons*/
.viewAllButton--Nb87U,
.css-7l8ggf {
background: ${base03};
}
.viewAllButton--Nb87U:hover,
.css-7l8ggf:hover {
background: ${base04};
}
/*album hover*/
.overlay--ces1Z,
.overlay--Dn4ax,
.overlay--Cb6su,
.css-17bbmu3,
.css-ohr3gy,
._overlay_3c15650,
._overlay_aa1ee83,
._overlay_62e2cfd,
._overlay_e0e48ef,
._overlay_7fd73e6,
._overlay_f627136,
.css-1ug9uri,
.css-u7yq00 {
background: linear-gradient(${base05}0, ${base00}9e) !important;
}
:is(._dataContainer_66f4f40 ._coverArtContainer_2eafdf9)
._creditsOverlay_b234d8c {
background: ${base00}80;
}
/*artist hover*/
.css-179fhoi,
.css-fvlky0 {
background: linear-gradient(${base05}0, ${base00}9e) !important;
}
/*play button hover*/
.css-75d7zy {
background-color: ${base00}a6;
transition: 100ms;
}
.css-75d7zy:hover {
background-color: var(--wave-color-solid-base-brighter);
}
button.button--W_J5g.gray--tvcIF.contextMenuButton--Bcnyd:hover {
background-size: 200%;
}
/*playlist hover*/
.css-1voubjj:hover {
background-color: var(--wave-color-solid-base-brighter);
border: 5px var(--wave-color-opacity-contrast-fill-ultra-thin);
}
/*queue popup*/
.bottomGradient--BngZe,
._bottomGradient_104d99b {
background-image: none;
}
#playQueueSidebar {
box-shadow: 0 20px 25px 5px ${base00}57;
}
/*audio quality popup*/
._containerMax_611862e {
background-color: transparent;
}
/*PLAYER PANE*/
.range--JNSfg {
background-color: ${base04};
}
:is(._player_1d16b04 button).withBackground[aria-checked="true"] {
background-color: ${base02};
}
._range_ce0e571 {
background-color: var(--wave-color-opacity-contrast-fill-regular);
}
/*album hover*/
._notFullscreenOverlay_1442d60 {
background: linear-gradient(0deg, ${base00}a6, ${base00}a6);
}
/*FULL VIEW*/
.activeTab--bqTiv {
background: ${base02};
}
.container--cl4MJ {
background: ${base00}63 !important;
}
.css-u7yq00 {
background: ${base00}75;
}
._bottomGradient_5c344de {
background: none;
}
._button_84b8ffe {
background-color: var(--wave-color-solid-base-brighter);
}
._button_84b8ffe:hover {
background-color: var(--wave-color-solid-base-brightest);
}
._baseButton_15fc215:focus {
background: ${base03};
}
#nowPlaying {
background-image: none !important;
}
/*thumbnail*/
._albumImageOverlay_2eabc2b {
background: ${base00}4f;
}
/*ALBUM*/
.albumImage--i2CqD {
box-shadow:
0 20px 50px 5px ${base04}38,
0 20px 40px 0 ${base05}00024;
}
._button_f1c7fcb {
background: var(--wave-color-solid-base-brighter);
}
.artist-link {
color: ${base05};
}
/*remove bg image*/
[class^="_dataContainer_"]:before {
--img: none !important;
background-image: none !important;
}
/*playlist*/
.refreshButton--bRrPi {
color: ${base05};
}
/*tracks page*/
.variantPrimary--pjymy,
._button_3357ce6 {
background-color: var(--button-light);
}
.wave-text-body-demi {
color: ${base05};
}
/*track hover*/
._rowContainer_ebb4cfc:hover {
background: var(--wave-color-solid-base-brightest) !important;
}
/*DIALOUGES*/
.ReactModal__Content {
background: ${base01} !important;
}
.label--fycqD.unchecked--goEjz {
background-color: ${base04};
}
.label--fycqD.checked--RVmZV {
background-color: var(--switch-accent);
}
.primary--NLSX4 {
background-color: ${base03};
}
.primary--NLSX4:hover {
background-color: var(--wave-color-opacity-contrast-fill-regular) !important;
}
.primary--NLSX4:disabled {
background-color: ${base02};
}
.primary--NLSX4:disabled:hover {
background-color: ${base02};
}
/*popups*/
.notification--hckxF,
.native-range {
box-shadow: 0 20px 50px 5px ${base00}2e;
}
._notification_99c9c6e {
box-shadow: 0 16px 32px ${base05}0;
}
._notification_99c9c6e._error_0b778e5 {
background: var(--wave-color-solid-rainbow-red-darker);
}
.errorIcon--VvndK {
fill: ${base05} !important;
}
/*PROFILE*/
.followingTag--CKRME,
.wave-text-footnote-medium {
color: var(--text-accent) !important;
}
._wave-btn-rank-primary_1lao2_58:hover {
background-color: ${base0E};
}
._button_94c5125 {
background-color: transparent !important;
}
.profilePicture--yrdRB {
box-shadow: none;
}
._input_15c0d78:focus {
color: var(--wave-color-solid-contrast-darker);
}
/*my picks*/
#My\ favorite\ track\ on\ repeat,
._selectedPrompt_dac4cfc[style*="--prompt-base-color: ${base0D}1A"] {
--prompt-base-color: ${base0D} !important;
--prompt-color: ${base0E} !important;
}
#My\ major\ mood\ booster,
._selectedPrompt_dac4cfc[style*="--prompt-base-color: #FF91531A"] {
--prompt-base-color: ${base09} !important;
--prompt-color: ${base0A} !important;
}
#My\ go-to\ artist\ right\ now,
._selectedPrompt_dac4cfc[style*="--prompt-base-color: #FF53531A"] {
--prompt-base-color: ${base08} !important;
--prompt-color: ${base0F} !important;
}
#My\ top\ album\ recently,
._selectedPrompt_dac4cfc[style*="--prompt-base-color: #53FF981A"] {
--prompt-base-color: ${base0B} !important;
--prompt-color: ${base0B} !important;
}
._wave-btn-rank-clean_1lao2_127:hover {
color: ${base00};
background-color: ${base05}38 !important;
}
#pick-promt-item-search-field {
color: ${base05};
}
/*ARTIST PAGE*/
._background_4a10ea2:after {
content: "" !important;
position: absolute !important;
top: 0 !important;
left: 0 !important;
right: 0 !important;
bottom: 0 !important;
background-color: ${base00}4a !important;
}
:is(._background_a548b6d ._image_7ba9b97):before {
background-color: ${base00}21 !important;
background-image: none !important;
background-blend-mode: normal !important;
}
._background_a548b6d {
background-image: linear-gradient(180deg, ${base00}66 0, ${base00}) !important;
}
:is(._background_a548b6d ._image_7ba9b97):after {
background-image: var(--img) !important;
background-position: center !important;
background-repeat: no-repeat !important;
background-size: cover !important;
content: "" !important;
filter: blur(5px) brightness(30%) !important;
inset: -20px 0 !important;
mask-image: linear-gradient(0deg, ${base00}0 43%, ${base00}) !important;
position: absolute !important;
}
._mainImage_433f1ff:is(._background_a548b6d ._image_7ba9b97):after {
mask-image: linear-gradient(0deg, ${base00}0, ${base00}) !important;
filter: brightness(100%) !important;
height: 87% !important;
}
.buttonText--LMsAT {
color: ${base00} !important;
}
.css-10jmp6g {
color: ${base05};
}
.button--_0I_t {
background-color: var(--button-light);
}
.button--_0I_t:hover {
background-color: var(--wave-color-opacity-contrast-fill-regular);
}
#player__play {
color: ${base05};
}
.primary--NLSX4:hover {
background-color: ${base04};
}
:is(._buttons_ff12873 ._following_657edad) ._icon_29252d0 {
fill: var(--wave-color-solid-accent-fill) !important;
}
/*bio*/
._dialog_148b5df {
color: ${base05};
}
/*producer discography*/
.css-1thhtwd {
background: var(--wave-color-solid-base-brighter);
}
.css-1thhtwd:hover {
background: var(--wave-color-opacity-contrast-fill-regular);
}
._buttonActive_5125b72 {
background: var(--button-light);
}
._buttonActive_5125b72:hover {
background: var(--wave-color-opacity-contrast-fill-regular);
}
._buttonActive_5125b72 > .wave-text-body-medium {
color: ${base05};
}
/*SETTINGS*/
._container_b4f1e20._fillDark_a1e5896 > div,
._container_9a0abb9 {
background: ${base01} !important;
}
._select_ef84104 {
background: var(--wave-color-solid-accent-darker) !important;
}
.licenseFrame--C_hup {
background: ${base06};
}
svg#lastfm path {
fill: ${base05};
}
._button_94c5125 {
background: var(--wave-color-solid-base-brighter);
}
/*scrollbars*/
::-webkit-scrollbar {
background-color: transparent !important;
border: none !important;
width: 8px !important;
}
::-webkit-scrollbar-track {
background-color: var(--wave-color-solid-base-brighter) !important;
box-shadow: none;
}
::-webkit-scrollbar-thumb {
background-color: ${base04} !important;
border: none !important;
}
/*luna*/
body
> div.ReactModalPortal
> div
> div
> div.modalBody--TFBWU.selectableText--UDUkZ.modalText--gCapb.subtitle--dYfEG
> neptune-reactive-root
> div
> button,
#main
> div.__NEPTUNE_PAGE
> neptune-reactive-root
> div
> div
> div:nth-child(2)
> div
> div.neptune-card
> div
> div:nth-child(2)
> div:nth-child(1)
> button:nth-child(1),
#main
> div.__NEPTUNE_PAGE
> neptune-reactive-root
> div
> div
> div:nth-child(2)
> div
> div.neptune-card
> div
> div:nth-child(2)
> div:nth-child(1)
> button:nth-child(2) {
color: ${base05} !important;
}
.neptune-switch::after {
background-color: ${base00} !important;
}
.css-16hze37,
#main
> div:nth-child(3)
> div
> div.MuiContainer-root.MuiContainer-maxWidthLg.css-sot3eg
> div
> div:nth-child(2)
> div.MuiStack-root.css-16a8gxx
> div {
color: ${base07} !important;
}
.css-yc8597,
.css-pfqxe1,
.css-axw7ok {
color: ${base00} !important;
}
to {
opacity: 1;
transform: scale(1);
}
'';
};
};
}