Wrappers vs. Dotfiles: Difference between revisions
imported>Fzakaria Added a link to the cookbook to keep all output files |
imported>IgorM m Added to category "Configuration" |
||
(One intermediate revision by one other user not shown) | |||
Line 16: | Line 16: | ||
The disadvantage of this way is that it doesn't propagate man pages and other paths from the old derivation. | The disadvantage of this way is that it doesn't propagate man pages and other paths from the old derivation. | ||
Please refer to [[Nix_Cookbook#Wrapping_packages]] to possible solutions to retain all outputs. | Please refer to [[Nix_Cookbook#Wrapping_packages]] to possible solutions to retain all outputs. | ||
You can use this simple function which takes care of wrapping the script & symlinking | |||
<syntaxhighlight lang="nix"> | |||
writeShellScriptBinAndSymlink = name: text: super.symlinkJoin { | |||
name = name; | |||
paths = [ | |||
super."${name}" | |||
(super.writeShellScriptBin name text) | |||
]; | |||
}; | |||
</syntaxhighlight> | |||
=== Downside of the Wrapper Approach === | === Downside of the Wrapper Approach === | ||
Line 23: | Line 34: | ||
=== Alternatives === | === Alternatives === | ||
* [[Home Manager]] manages dotfiles in the user's home directory | * [[Home Manager]] manages dotfiles in the user's home directory | ||
[[Category:Configuration]] |
Latest revision as of 11:09, 27 September 2023
Usually user applications (like editors, etc.) get configured through dotfiles in the user's home directory. An alternative, declarative approach is to create wrappers for application on a per-user basis, like this:
{
users.users.root.packages = [
(pkgs.writeScriptBin "htop" ''
#! ${pkgs.bash}/bin/bash
export HTOPRC=${pkgs.writeText "htoprc" ...}
exec ${pkgs.htop}/bin/htop "$@"
'')
];
}
The disadvantage of this way is that it doesn't propagate man pages and other paths from the old derivation. Please refer to Nix_Cookbook#Wrapping_packages to possible solutions to retain all outputs.
You can use this simple function which takes care of wrapping the script & symlinking
writeShellScriptBinAndSymlink = name: text: super.symlinkJoin {
name = name;
paths = [
super."${name}"
(super.writeShellScriptBin name text)
];
};
Downside of the Wrapper Approach
- There might be applications that don't provide means to specify configuration. One could override
$HOME
, but then there might be applications that require$HOME
for other stuff than configuration. - Applications cannot write their configuration anymore, e.g.
htop
will just terminate without error and nothing changed.
Alternatives
- Home Manager manages dotfiles in the user's home directory