parent
b53d9c3e5c
commit
c2ea196a53
@ -0,0 +1,125 @@ |
||||
{ lib, stdenv, fetchFromGitLab, bc, librsvg, xcursorgen }: |
||||
|
||||
let |
||||
dimensions = { |
||||
color = [ "Black" "Blue" "Green" "Orange" "Red" "White" ]; |
||||
opacity = [ "" "Opaque_" ]; # Translucent or opaque. |
||||
thickness = [ "" "Slim_" ]; # Thick or slim edges. |
||||
handedness = [ "" "LH_" ]; # Right- or left-handed. |
||||
}; |
||||
product = lib.cartesianProductOfSets dimensions; |
||||
variantName = |
||||
{ color, opacity, thickness, handedness }: |
||||
"${handedness}${opacity}${thickness}${color}"; |
||||
variants = |
||||
# (The order of this list is already good looking enough to show in the |
||||
# meta.longDescription.) |
||||
map variantName product; |
||||
in |
||||
stdenv.mkDerivation rec { |
||||
pname = "comixcursors"; |
||||
version = "0.9.2"; |
||||
|
||||
src = fetchFromGitLab { |
||||
owner = "limitland"; |
||||
repo = "comixcursors"; |
||||
# https://gitlab.com/limitland/comixcursors/-/issues/3 |
||||
rev = "8c327c8514ab3a352583605c1ddcb7eb3d1d302b"; |
||||
sha256 = "0bpxqw4izj7m0zb9lnxnmsjicfw60ppkdyv5nwrrz4x865wb296a"; |
||||
}; |
||||
|
||||
nativeBuildInputs = [ bc librsvg xcursorgen ]; |
||||
|
||||
patches = [ ./makefile-shell-var.patch ]; |
||||
|
||||
postPatch = '' |
||||
patchShebangs ./install-all ./bin/ |
||||
''; |
||||
|
||||
# install-all is used instead of the directions in upstream's INSTALL file, |
||||
# because using its Makefile directly is broken. Upstream itself seems to use |
||||
# its build-distribution script instead, which also uses install-all, but we |
||||
# do not use it because it does extra things for other distros. |
||||
# |
||||
# When not all of the variants, i.e. only a smaller subset of them, are |
||||
# desired (i.e. when a subset of outputs are chosen), install-all will still |
||||
# build all of them. While upstream appears to provide old functionality for |
||||
# building only a subset, it is broken and we do not use it. With prebuilt |
||||
# substitutions, installers of this package will get only the outputs they |
||||
# chose. |
||||
buildPhase = '' |
||||
ICONSDIR=$TMP/staged ./install-all |
||||
''; |
||||
|
||||
installPhase = '' |
||||
for outputName in $outputs ; do |
||||
if [ $outputName != out ]; then |
||||
local outputDir=''${!outputName}; |
||||
local iconsDir=$outputDir/share/icons |
||||
local cursorName=$(tr _ - <<<"$outputName") |
||||
|
||||
mkdir -p $iconsDir |
||||
cp -r -d $TMP/staged/ComixCursors-$cursorName $iconsDir |
||||
|
||||
unset outputDir iconsDir cursorName |
||||
fi |
||||
done |
||||
|
||||
# Need this directory (empty) to prevent the builder scripts from breaking. |
||||
mkdir -p $out |
||||
''; |
||||
|
||||
outputs = let |
||||
default = "Opaque_Black"; |
||||
in |
||||
# Have the most-traditional variant be the default output (as the first). |
||||
# Even with outputsToInstall=[], the default/first still has an effect on |
||||
# some Nix tools (e.g. nix-build). |
||||
[ default ] ++ (lib.remove default variants) |
||||
# Need a dummy "out" output to prevent the builder scripts from breaking. |
||||
++ [ "out" ]; |
||||
|
||||
# No default output (to the extent possible). Instead, the outputs' |
||||
# attributes are used to choose which variant(s) to have. |
||||
outputsToInstall = []; |
||||
|
||||
meta = with lib; { |
||||
description = "The Comix Cursors mouse themes"; |
||||
longDescription = '' |
||||
There are many (${toString ((length outputs) - 1)}) variants of color, |
||||
opacity, edge thickness, and right- or left-handedness, for this cursor |
||||
theme. This package's derivation has an output for each of these |
||||
variants, named following the upstream convention, and the attribute for |
||||
an output must be used to install a variant. E.g.: |
||||
<programlisting language="nix"> |
||||
environment.systemPackages = [ |
||||
comixcursors.Blue |
||||
comixcursors.Opaque_Orange |
||||
comixcursors.Slim_Red |
||||
comixcursors.Opaque_Slim_White |
||||
comixcursors.LH_Green |
||||
comixcursors.LH_Opaque_Black |
||||
comixcursors.LH_Slim_Orange |
||||
comixcursors.LH_Opaque_Slim_Blue |
||||
]; |
||||
</programlisting> |
||||
|
||||
Attempting to use just <literal>comixcursors</literal>, i.e. without an |
||||
output attribute, will not install any variants. To install all the |
||||
variants, use <literal>comixcursors.all</literal> (which is a list), e.g.: |
||||
<programlisting language="nix"> |
||||
environment.systemPackages = comixcursors.all ++ [...]; |
||||
</programlisting> |
||||
|
||||
The complete list of output attributes is: |
||||
<programlisting> |
||||
${concatStringsSep "\n" variants} |
||||
</programlisting> |
||||
''; |
||||
homepage = "https://gitlab.com/limitland/comixcursors"; |
||||
changelog = "https://gitlab.com/limitland/comixcursors/-/blob/HEAD/NEWS"; |
||||
license = licenses.gpl3Plus; |
||||
maintainers = [ maintainers.DerickEddington ]; |
||||
platforms = platforms.all; |
||||
}; |
||||
} |
@ -0,0 +1,11 @@ |
||||
--- a/Makefile
|
||||
+++ b/Makefile
|
||||
@@ -22,8 +22,6 @@
|
||||
|
||||
# Makefile for ComixCursors project.
|
||||
|
||||
-SHELL = /bin/bash
|
||||
-
|
||||
CURSORSNAME = ComixCursors
|
||||
PACKAGENAME ?= ${CURSORSNAME}
|
||||
SUMMARY ?= The original Comix Cursors
|
Loading…
Reference in new issue