St: Difference between revisions
imported>Artturin add troubleshooting |
No edit summary |
||
| (13 intermediate revisions by 8 users not shown) | |||
| Line 1: | Line 1: | ||
{{ | {{DISPLAYTITLE:st}} | ||
[[Category:Applications]] | [[Category:Applications]] | ||
| Line 44: | Line 44: | ||
Followed by: | Followed by: | ||
<syntaxhighlight> | <syntaxhighlight lang=console> | ||
$ nix-env -i -f my-custom-st | $ nix-env -i -f my-custom-st | ||
</syntaxhighlight> | </syntaxhighlight> | ||
| Line 51: | Line 51: | ||
Most customization of <code>st</code> that alters its base feature set comes in the form of applying patches to the source code. | Most customization of <code>st</code> that alters its base feature set comes in the form of applying patches to the source code. | ||
=== Obtaining hashes === | |||
To apply a patch you need to obtain the hash, the hash should be obtained with the following command | |||
<syntaxhighlight lang="console"> | |||
$ nix-prefetch-url <url> | |||
</syntaxhighlight> | |||
example | |||
<syntaxhighlight lang="console"> | |||
$ nix-prefetch-url https://st.suckless.org/patches/rightclickpaste/st-rightclickpaste-0.8.2.diff | |||
</syntaxhighlight> | |||
=== Patches === | === Patches === | ||
| Line 69: | Line 81: | ||
# Or from any other source | # Or from any other source | ||
(fetchpatch { | (fetchpatch { | ||
url = "https://raw.githubusercontent.com/fooUser/barRepo/ | url = "https://raw.githubusercontent.com/fooUser/barRepo/1111111/somepatch.diff"; | ||
sha256 = "222222222222222222222222222222222222222222"; | sha256 = "222222222222222222222222222222222222222222"; | ||
}) | }) | ||
| Line 106: | Line 118: | ||
# Or one pulled from GitHub | # Or one pulled from GitHub | ||
# configFile = writeText "config.def.h" (builtins.readFile "${fetchFromGitHub { owner = "LukeSmithxyz"; repo = "st"; rev = "8ab3d03681479263a11b05f7f1b53157f61e8c3b"; sha256 = "1brwnyi1hr56840cdx0qw2y19hpr0haw4la9n0rqdn0r2chl8vag"; }}/config.h"); | # configFile = writeText "config.def.h" (builtins.readFile "${fetchFromGitHub { owner = "LukeSmithxyz"; repo = "st"; rev = "8ab3d03681479263a11b05f7f1b53157f61e8c3b"; sha256 = "1brwnyi1hr56840cdx0qw2y19hpr0haw4la9n0rqdn0r2chl8vag"; }}/config.h"); | ||
postPatch = oldAttrs.postPatch | postPatch = "${oldAttrs.postPatch}\n cp ${configFile} config.def.h"; | ||
})) | })) | ||
];</syntaxhighlight> | ];</syntaxhighlight> | ||
| Line 129: | Line 141: | ||
})) | })) | ||
];</syntaxhighlight> | ];</syntaxhighlight> | ||
== Using DWM == | |||
However, this will not work for <code>dwm</code>. (Probably <code>services.xserver.windowManager.dwm</code> can only see the <code>dwm</code> in <code>pkgs</code>, not the one in <code>environment.systemPackages</code>.) But you can use an overlay, like this: | |||
<syntaxhighlight lang="nix"> | |||
nixpkgs.overlays = [ | |||
(self: super: { | |||
dwm = super.dwm.overrideAttrs (oldAttrs: rec { | |||
patches = [ | |||
./path/to/my-dwm-patch.patch | |||
]; | |||
configFile = super.writeText "config.h" (builtins.readFile ./dwm-config.h); | |||
postPatch = oldAttrs.postPatch or "" + "\necho 'Using own config file...'\n cp ${configFile} config.def.h"; | |||
}); | |||
}) | |||
]; | |||
</syntaxhighlight> | |||
It should also be mentioned that the <code>st.overrideAttrs</code> should be added to the overlays when using <code>dwm</code> with dwm changes and st changes the overlay could look like this | |||
<syntaxhighlight lang="nix"> | |||
nixpkgs.overlays = [ | |||
(self: super: { | |||
dwm = super.dwm.overrideAttrs (oldAttrs: rec { | |||
patches = [ | |||
./path/to/my-dwm-patch.patch | |||
]; | |||
configFile = super.writeText "config.h" (builtins.readFile ./dwm-config.h); | |||
postPatch = oldAttrs.postPatch or "" + "\necho 'Using own config file...'\n cp ${configFile} config.def.h"; | |||
}); | |||
}) | |||
st = super.st.overrideAttrs (oldAttrs: rec { | |||
patches = [ | |||
./path/to/my-dwm-patch.patch | |||
]; | |||
configFile = super.writeText "config.h" (builtins.readFile ./st-config.h); | |||
postPatch = "${oldAttrs.postPatch}\ncp ${configFile} config.def.h\n" | |||
}); | |||
}) | |||
]; | |||
</syntaxhighlight> | |||
== Remote config == | == Remote config == | ||
| Line 150: | Line 204: | ||
buildInputs = oldAttrs.buildInputs ++ [ harfbuzz ]; | buildInputs = oldAttrs.buildInputs ++ [ harfbuzz ]; | ||
# If you want it to be always up to date use fetchTarball instead of fetchFromGitHub | # If you want it to be always up to date use fetchTarball instead of fetchFromGitHub | ||
# src = | # src = builtins.fetchTarball { | ||
# url = "https://github.com/lukesmithxyz/st/archive/master.tar.gz"; | # url = "https://github.com/lukesmithxyz/st/archive/master.tar.gz"; | ||
# }; | # }; | ||
| Line 160: | Line 214: | ||
=== See files after patching === | === See files after patching === | ||
{{file|st-test.nix|nix| | {{file|st-test.nix|nix| | ||
with import <nixpkgs> {}; | with import <nixpkgs> {}; | ||
<nowiki> | |||
(st.overrideAttrs (oldAttrs: rec { | (st.overrideAttrs (oldAttrs: rec { | ||
buildInputs = oldAttrs.buildInputs ++ [ harfbuzz ]; | buildInputs = oldAttrs.buildInputs ++ [ harfbuzz ]; | ||
| Line 174: | Line 228: | ||
</nowiki>}} | </nowiki>}} | ||
<syntaxhighlight lang=" | <syntaxhighlight lang="console"> | ||
nix-shell st-test.nix | $ nix-shell st-test.nix | ||
unpackPhase | $ unpackPhase | ||
ls | $ ls | ||
cd theunpackeddir | $ cd theunpackeddir | ||
patchPhase | $ patchPhase | ||
</syntaxhighlight> | </syntaxhighlight> | ||
[https://nixos.org/manual/nixpkgs/stable/#sec-stdenv-phases Additional phases] | [https://nixos.org/manual/nixpkgs/stable/#sec-stdenv-phases Additional phases] | ||