Nix Cookbook: Difference between revisions
imported>Ixxie m Fixed section levels. |
imported>Dustinlacewell Added "Creating Shell Scripts" cookbook |
||
Line 1: | Line 1: | ||
== Environment Tasks == | |||
=== Creating Shell Scripts === | |||
Arbitrary system shell scripts can be created with [https://github.com/NixOS/nixpkgs/blob/master/pkgs/build-support/trivial-builders.nix#L58 pkgs.writeScriptBin]. It creates a derivation which you add to [https://nixos.org/nixos/manual/#sec-declarative-package-mgmt environment.systemPackages]. | |||
<syntaxHighlight lang="nix"> | |||
{ config, pkgs, lib, ... }: | |||
with lib; | |||
let | |||
helloWorld = pkgs.writeScriptBin "helloWorld" '' | |||
#!${pkgs.stdenv.shell} | |||
echo Hello World''; | |||
in { | |||
config.environment.systemPackages = [ helloWorld ]; | |||
} | |||
</syntaxHighlight> | |||
== Debugging == | == Debugging == |
Revision as of 12:18, 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.
{ config, pkgs, lib, ... }:
with lib;
let
helloWorld = pkgs.writeScriptBin "helloWorld" ''
#!${pkgs.stdenv.shell}
echo Hello World'';
in {
config.environment.systemPackages = [ helloWorld ];
}
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.)