2016-07-21 9 views

Antwort

7

Bitte beachten Sie, dass mindestens seit dem 30.03.2017 (entspricht 17.03 Nix/NixOS Channel/Release), soweit ich die offizielle, moderne, unterstützte und vorgeschlagene Lösung verstehe, die so genannten Overlays verwenden.

Siehe Chapter 11, Overlays, im nixpkgs Handbuch für eine nette Anleitung zur Verwendung des neuen Ansatzes.

Als kurze Zusammenfassung: Sie eine beliebige Anzahl von Dateien mit .nix Erweiterung in $HOME/.config/nixpkgs/overlays/ Verzeichnis setzen. Sie werden in alphabetischer Reihenfolge verarbeitet und jeder kann die verfügbaren Nix-Pakete ändern. Jede der Dateien müssen in dem folgenden Muster geschrieben werden:

self: super: 
{ 
    boost = super.boost.override { 
    python = self.python3; 
    }; 
    rr = super.callPackage ./pkgs/rr { 
    stdenv = self.stdenv_32bit; 
    }; 
} 
  • Der super Satz entspricht dem „alten“ Satz von Paketen (vor der Überlagerung angewendet wurde). Wenn Sie auf die alte Version eines Pakets (wie oben in boost) oder callPackage verweisen möchten, sollten Sie es über super referenzieren.

  • Der Satz self entspricht dem eventuellen "zukünftigen" Satz von Paketen, der das Endergebnis darstellt, nachdem alle Überlagerungen angewendet wurden. (Hinweis: keine Angst, wenn sie manchmal mit vielleicht von Nichts abgelehnt bekommen, wie es in Endlosschleife führen würde Wahrscheinlich sollten Sie lieber verwenden nur super in den Fällen statt..)

Hinweis: mit Die obigen Änderungen, die Lösung, die ich unten in der ursprünglichen Antwort erwähne, scheint jetzt "veraltet" - ich glaube, es sollte noch ab April 2017 funktionieren, aber ich habe keine Ahnung, wie lange. Es erscheint marked as "obsolete" in the nixpkgs repository.



Alte Antwort, bevor 17.03:

Angenommen, Sie apps pro Benutzer sichtbar on per-user basis, not system-wide, (als Nicht-NixOS Nichts hält so weit Anwendungen synchronisieren, wie ich weiß,), es ist möglich, es deklarativ zu tun. Es ist einfach nicht gut in der Anleitung beworben —, obwohl es sehr beliebt bei langjährigen Nixers scheint!

Sie müssen eine Textdatei erstellen unter: $HOME/.nixpkgs/config.nix — z.:

$ mkdir -p ~/.nixpkgs 
$ $EDITOR ~/.nixpkgs/config.nix 

dann folgenden Inhalt ein:

{ 
    packageOverrides = defaultPkgs: with defaultPkgs; { 
    home = with pkgs; buildEnv { 
     name = "home"; 
     paths = [ 
     nethack mc pstree #...your favourite pkgs here... 
     ]; 
    }; 
    }; 
} 

Dann sollten Sie in der Lage sein, alle aufgelisteten Pakete zu installieren mit:

$ nix-env -i home 
or: 
$ nix-env -iA nixos.home # *much* faster than above 

In paths Sie Material in ähnlicher Weise setzen können wie in /etc/nixos/configuration.nix auf NixOS. Auch ist home eigentlich ein "gefälschtes Paket" hier. Sie können weitere benutzerdefinierte Paketdefinitionen hinzufügen und ihnen dann Ihre "Pfade" hinzufügen.

(Randbemerkung:. Ich hoffe, mit einer Blog-Post zu schreiben, was ich gelernt, wie genau das funktioniert, und auch zeigt, wie es mit mehr Anpassungen zu erweitern Ich werde versuchen, es zu erinnern, hier zu verlinken wenn ich erfolgreich bin.)

+0

Vielen Dank! Genau das habe ich gesucht. Ich wünschte, es wäre besser in der offiziellen Anleitung für Anfänger wie mich dokumentiert. – Lewis

+0

Blogpost bitte! :) – tlo

+0

@tlo WILCO :) Es braut sich immer noch, ich bin ein langsamer Schriftsteller. Übrigens, wenn Sie die Gelegenheit nutzen - wären Sie mehr daran interessiert, * * früher (d. H. Nutzung) * oder * "wie genau das funktioniert" (d. H. Interna) zu lesen? Ich bin an einem Verzweigungspunkt mit, wie man die Reihe plant, also ist es ein perfekter Moment, es zu beeinflussen :) – akavel