diff --git a/README.md b/README.md index 50af24b..cdfd1da 100644 --- a/README.md +++ b/README.md @@ -82,7 +82,7 @@ in ${builtins.readFile "${nix-userstyles.packages.${pkgs.stdenv.hostPlatform.system}.mkUserStyles palette userStyles}"} ''; } -``` +``` ## Credits diff --git a/lib/mkUserStyles.nix b/lib/mkUserStyles.nix index c2487e0..bb0ee2a 100644 --- a/lib/mkUserStyles.nix +++ b/lib/mkUserStyles.nix @@ -5,12 +5,13 @@ catppuccin-userstyles, discord-userstyle, ... -}@inputs: -palette: userStyles: -let - inherit (builtins) +} @ inputs: palette: userStyles: let + inherit + (builtins) isAttrs concatStringsSep + filter + elem ; inherit (lib) getExe; inherit (lib.attrsets) mapAttrsToList; @@ -21,14 +22,14 @@ let extraPkgs = lib.map ( x: - pkgs.callPackage x { - inherit palette nix-colors discord-userstyle; - } + pkgs.callPackage x { + inherit palette nix-colors discord-userstyle; + } ) (listNixModulesRecursive ../userstyles); extraPkg = pkgs.stdenvNoCC.mkDerivation { name = "extra-userstyles"; - phases = [ "installPhase" ]; + phases = ["installPhase"]; installPhase = '' mkdir -p $out for pkg in ${concatStringsSep " " extraPkgs}; do @@ -40,15 +41,24 @@ let ''; }; + localStyleNames = + map (f: lib.strings.removeSuffix ".nix" (baseNameOf f)) + (filter (f: lib.strings.hasSuffix ".nix" f) + (listNixModulesRecursive ../userstyles)); + + catppuccinStyles = filter (s: !elem s localStyleNames) userStyles; + catppuccin = import ./catppuccin.nix; - palette24 = palette // { - base11 = palette.base00; - base12 = palette.base08; - base15 = palette.base0C; - base16 = palette.base0D; - base17 = palette.base0E; - }; + palette24 = + palette + // { + base11 = palette.base00; + base12 = palette.base08; + base15 = palette.base0C; + base16 = palette.base0D; + base17 = palette.base0E; + }; cssVars = '' :root { @@ -56,16 +66,15 @@ let } ''; - lessVarDecl = - vars: prefix: + lessVarDecl = vars: prefix: concatStringsSep " " ( mapAttrsToList ( name: value: - if isAttrs value then - "@${prefix}${name}: { ${lessVarDecl value ""} };" - else - "@${prefix}${name}: ${toString value};" - ) vars + if isAttrs value + then "@${prefix}${name}: { ${lessVarDecl value ""} };" + else "@${prefix}${name}: ${toString value};" + ) + vars ); lessVars = { @@ -99,46 +108,48 @@ let }; userStylesStr = concatStringsSep " " userStyles; + catppuccinStylesStr = concatStringsSep " " catppuccinStyles; in -pkgs.stdenvNoCC.mkDerivation { - name = "userstyles.css"; - phases = [ "buildPhase" ]; - buildInputs = with pkgs; [ - lessc - nodePackages_latest.sass - ]; - - buildPhase = '' - export NODE_PATH=${pkgs.nodePackages.less-plugin-clean-css}/lib/node_modules - - # build catppuccin userstyles - for style in ${userStylesStr}; do - file="${catppuccin-userstyles}/styles/$style/catppuccin.user.less" - if [ -f "$file" ]; then - (cat "${catppuccin-userstyles}/lib/lib.less"; cat "$file" | sed '\|@import "https://userstyles.catppuccin.com/lib/lib.less";|d'; echo ${escapeShellArg (lessVarDecl lessVars "")}) | \ - lessc --source-map-no-annotation --clean-css="-b --s0 --skip-rebase --skip-advanced --skip-aggressive-merging --skip-shorthand-compacting" - >> catppuccin.userstyles.css - fi - done - - # build extra userstyles - for style in ${userStylesStr}; do - file="${extraPkg}/$style/userstyle.css" - echo "$file" - if [ -f "$file" ]; then - (echo "${cssVars}"; cat "$file") | sass --quiet - >> extra.userstyles.css - fi - done - - # replace catppuccin mocha colors with user-defined palette colors - cat *.userstyles.css > userstyles.css - substituteInPlace userstyles.css \ - ${concatStringsSep " \\\n " ( + pkgs.stdenvNoCC.mkDerivation { + name = "userstyles.css"; + phases = ["buildPhase"]; + buildInputs = with pkgs; [ + lessc + nodePackages_latest.sass + ]; + + buildPhase = '' + export NODE_PATH=${pkgs.nodePackages.less-plugin-clean-css}/lib/node_modules + + # build catppuccin userstyles + for style in ${catppuccinStylesStr}; do + file="${catppuccin-userstyles}/styles/$style/catppuccin.user.less" + if [ -f "$file" ]; then + (cat "${catppuccin-userstyles}/lib/lib.less"; cat "$file" | sed '\|@import "https://userstyles.catppuccin.com/lib/lib.less";|d'; echo ${escapeShellArg (lessVarDecl lessVars "")}) | \ + lessc --source-map-no-annotation --clean-css="-b --s0 --skip-rebase --skip-advanced --skip-aggressive-merging --skip-shorthand-compacting" - >> catppuccin.userstyles.css + fi + done + + # build extra userstyles + for style in ${userStylesStr}; do + file="${extraPkg}/$style/userstyle.css" + echo "$file" + if [ -f "$file" ]; then + (echo "${cssVars}"; cat "$file") | sass --quiet - >> extra.userstyles.css + fi + done + + # replace catppuccin mocha colors with user-defined palette colors + cat *.userstyles.css > userstyles.css + substituteInPlace userstyles.css \ + ${concatStringsSep " \\\n " ( map ( mapping: "--replace-warn '${catppuccin.palette.${mapping.name}}' '${palette24.${mapping.base}}'" - ) catppuccin.replacements + ) + catppuccin.replacements )} - # !important - cat userstyles.css | ${getExe importantize} > $out - ''; -} + # !important + cat userstyles.css | ${getExe importantize} > $out + ''; + }