Nix Cookbook: Difference between revisions
imported>Dustinlacewell m Fix some formatting for "Creating Shell Scripts" |
imported>Dustinlacewell Added "Creating Periodic Services" recipe |
||
Line 15: | Line 15: | ||
in { | in { | ||
environment.systemPackages = [ helloWorld ]; | environment.systemPackages = [ helloWorld ]; | ||
} | |||
</syntaxHighlight> | |||
=== Creating Periodic Services === | |||
Using the [https://nixos.org/nixos/manual/#sec-systemctl systemd support] periodic services can be defined. In this case a service named <code>simple-timer</code> writes out the current time to <code>/tmp/simple-timer.log</code> every minute. | |||
<syntaxHighlight lang="nix> | |||
{ pkgs, ... }: | |||
{ | |||
systemd = { | |||
timers.simple-timer = { | |||
wantedBy = [ "timers.target" ]; | |||
partOf = [ "simple-timer.service" ]; | |||
timerConfig.OnCalendar = "minutely"; | |||
}; | |||
services.simple-timer = { | |||
serviceConfig.Type = "oneshot"; | |||
script = '' | |||
echo "Time: $(date)." >> /tmp/simple-timer.log | |||
chmod +r /tmp/simple-timer.log | |||
''; | |||
}; | |||
}; | |||
} | } | ||
</syntaxHighlight> | </syntaxHighlight> |
Revision as of 12:49, 5 August 2018
Environment Tasks
Creating Shell Scripts
Arbitrary system shell scripts can be created with pkgs.writeScriptBin. It creates a derivation which you add to environment.systemPackages.
{ pkgs, ... }:
let
helloWorld = pkgs.writeScriptBin "helloWorld" ''
#!${pkgs.stdenv.shell}
echo Hello World
'';
in {
environment.systemPackages = [ helloWorld ];
}
Creating Periodic Services
Using the systemd support periodic services can be defined. In this case a service named simple-timer
writes out the current time to /tmp/simple-timer.log
every minute.
{ pkgs, ... }:
{
systemd = {
timers.simple-timer = {
wantedBy = [ "timers.target" ];
partOf = [ "simple-timer.service" ];
timerConfig.OnCalendar = "minutely";
};
services.simple-timer = {
serviceConfig.Type = "oneshot";
script = ''
echo "Time: $(date)." >> /tmp/simple-timer.log
chmod +r /tmp/simple-timer.log
'';
};
};
}
Debugging
Common Errors
Bad configuration option: gssapikexalgorithms
Found when using an SSH binary from Nix on typically RPM-based distros like CentOS, Fedora, Scientific Linux, Redhat, etc. The quick fix: Just comment out the configuration option in the ssh config file, you probably don't need it.
Desktop Environment does not find .desktop files
IF your DE does not look in $HOME/.nix-profile/share
for .desktop files.
You need to add that path to the XDG_DATA_DIRS
, the position reflects precedence so files in earlier directories shadow files in later directories. This can be accomplished in various ways depending on your login manager, see Arch wiki: Xprofile for more information.
For example using ~/.xprofile
as follows:
$ export XDG_DATA_DIRS=$HOME/.nix-profile/share:/usr/local/share:/usr/share
Notice that you have to include the default locations on your system, otherwise they will be overwritten. Find out the proper paths using echo $XDG_DATA_DIRS
. (Note: export XDG_DATA_DIRS=$HOME/.nix-profile/share:$XDG_DATA_DIRS
did not work, XDG_DATA_DIRS ended up containing only $HOME/.nix-profile/share:
which isn't even a valid path.)