KDE: Difference between revisions
m Fix outdated config path |
Add section "Hacking" |
||
Line 143: | Line 143: | ||
You can add a profile picture to your user by using a png file in <code>~/.face.icon</code>. | You can add a profile picture to your user by using a png file in <code>~/.face.icon</code>. | ||
== Hacking == | |||
There are many reasons to modify the KDE packages, such as testing patches from other KDE developers, applying a fix before it is officially released and finds its way into ''nixpkgs'' or developing contributions for the KDE project. | |||
=== Customizing ''nixpkgs'' === | |||
To override KDE packages, the common way using <code>overrideAttrs</code> won't work, since they are part of the <code>kdePackages</code>scope, which requires the usage of <code>overrideScope</code> first:<syntaxhighlight lang="nix"> | |||
nixpkgs-overlay = final: prev: { | |||
kdePackages = prev.kdePackages.overrideScope(kdeFinal: kdePrev: { | |||
somepackage = kdePrev.somepackage.overrideAttrs(prevPkgAttrs: { | |||
someattribute = …; | |||
}; | |||
}; | |||
}; | |||
</syntaxhighlight>The following examples will demonstrate various ways how to achieve the customization of the KDE package <code>powerdevil</code> in different scenarios: | |||
==== Using a single diff from a remote URL ==== | |||
A KDE developer might have provided a diff that one wants to utilize locally to test it or to make use of it until it's included in an upcoming release. | |||
# Generate the SRI hash of the file:<code>nix store prefetch-file <nowiki>https://invent.kde.org/plasma/powerdevil/-/commit/f731c18e377b87c57f7205d9c1812a34f588c577.diff</nowiki> --json --name toggle-nightlight.diff</code> | |||
# Override the <code>patches</code> attribute of the <code>powerdevil</code>package:<syntaxhighlight lang="nix"> | |||
kdePackages = prev.kdePackages.overrideScope(kdeFinal: kdePrev: { | |||
powerdevil = kdePrev.powerdevil.overrideAttrs (prevPdAttrs: { | |||
patches = prevPdAttrs.patches or [] ++ [ | |||
(prev.fetchpatch { | |||
name = "toggle-nightlight.diff"; | |||
url = "https://invent.kde.org/plasma/powerdevil/-/commit/f731c18e377b87c57f7205d9c1812a34f588c577.diff"; | |||
sha256 = "sha256-X0ZHSRnSLqmp2fcLGx9DUTn7F9BFh5puh9Q4YAj6/5o="; | |||
}) | |||
]; | |||
}); | |||
}); | |||
</syntaxhighlight> | |||
==== Using commits of a repository ==== | |||
Either a local clone or remote repository might provide the code that should be used to build the package in question instead. | |||
===== Remote repository ===== | |||
<syntaxhighlight lang="nix"> | |||
kdePackages = prev.kdePackages.overrideScope(kdeFinal: kdePrev: { | |||
powerdevil = kdePrev.powerdevil.overrideAttrs (prevPdAttrs: { | |||
src = builtins.fetchGit { | |||
url = "https://invent.kde.org/plasma/powerdevil"; | |||
rev = "f731c18e377b87c57f7205d9c1812a34f588c577"; | |||
}; | |||
}); | |||
}); | |||
</syntaxhighlight> | |||
===== Local repository ===== | |||
{{Note|This will ignore files that are present in the worktree, but not committed yet.}} | |||
<syntaxhighlight lang="nix"> | |||
kdePackages = prev.kdePackages.overrideScope(kdeFinal: kdePrev: { | |||
powerdevil = kdePrev.powerdevil.overrideAttrs (prevPdAttrs: { | |||
src = builtins.fetchGit { | |||
url = "file:///home/eliasp/code-repositories/public/KDE/plasma/powerdevil"; | |||
rev = "f731c18e377b87c57f7205d9c1812a34f588c577"; | |||
}; | |||
}); | |||
}); | |||
</syntaxhighlight> | |||
==== Using the worktree of a local repository ==== | |||
Now one might not want to commit each and every change during development to iterate more quickly, but to just rebuild after having saved the latest changes. | |||
By just redirecting <code>src</code>to the path of the working directory, where the required code resides, quick & dirty rebuilds are possible:<syntaxhighlight lang="nix"> | |||
kdePackages = prev.kdePackages.overrideScope(kdeFinal: kdePrev: { | |||
powerdevil = kdePrev.powerdevil.overrideAttrs (prevPdAttrs: { | |||
src = /home/eliasp/code-repositories/public/KDE/plasma/powerdevil; | |||
}); | |||
}); | |||
</syntaxhighlight> | |||
{{Note|Since this relies on reading directly from the filesystem during the build, the impure mode has to be used, e.g.: <code>nixos-rebuild --impure …</code>}} | |||
[[Category:Desktop environment]] | [[Category:Desktop environment]] | ||
[[Category:Applications]] | [[Category:Applications]] | ||
[[Category:KDE]] | [[Category:KDE]] |