Adding 'usernixos', where I start a modular kind-of-nixos that can go into

"nix-env -i" profiles, as a container for flexible configuration at the style
of nixos, to be defined in .nixpkgs/config.nix, with the main target of
generating an activation script.


svn path=/nixpkgs/trunk/; revision=33445
This commit is contained in:
Lluís Batlle i Rossell 2012-03-27 20:33:49 +00:00
parent db28c68df0
commit 68b5044cc0
5 changed files with 130 additions and 0 deletions

View File

@ -0,0 +1,26 @@
{ pkgs, config, ... }:
let
script = pkgs.writeScriptBin "usernixos" (''
#!${pkgs.bash}/bin/bash
'' + config.activationContents);
in
with pkgs.lib;
{
options = {
activation = mkOption {
default = {};
};
activationContents = mkOption {
default = "";
internal = true;
merge = concatStringsSep "\n";
description = ''
Commands to run at activation
'';
};
};
config.activation.toplevel = script;
}

View File

@ -0,0 +1,59 @@
# Generator for .bashrc
{pkgs, config, ...}:
with pkgs.lib;
let
bashrcFile = pkgs.writeScript "bashrc" config.bashrc.contents;
cfg = config.bashrc;
in
{
options = {
environment.editor = mkOption {
default = "${pkgs.vim}/bin/vim";
type = types.string;
description = ''
Editor
'';
};
bashrc = {
enable = mkOption {
default = false;
type = types.bool;
description = ''
Enable of .bashrc generation on activation
'';
};
destination = mkOption {
default = "~/.bashrc";
type = types.string;
description = ''
The symlink that will point to the generated bashrc at activation time
'';
};
contents = mkOption {
default = "";
type = types.string;
merge = concatStringsSep "\n";
description = ''
Enable of .bashrc generation on activation
'';
};
};
};
config.bashrc.contents = ''
export EDITOR="${config.environment.editor}"
'';
config.activationContents = mkIf cfg.enable ''
if [ -e "${cfg.destination}" ]; then
echo Cannot set "${cfg.destination}", it exists
exit 1
fi
ln -sf ${bashrcFile} "${cfg.destination}"
'';
}

View File

@ -0,0 +1,31 @@
{ system ? builtins.currentSystem
, pkgs ? null
, baseModules ? import ./module-list.nix
, extraArgs ? {}
, modules
}:
let extraArgs_ = extraArgs; pkgs_ = pkgs; system_ = system; in
rec {
# These are the NixOS modules that constitute the system configuration.
configComponents = modules ++ baseModules;
# Merge the option definitions in all modules, forming the full
# system configuration. It's not checked for undeclared options.
systemModule =
pkgs.lib.fixMergeModules configComponents extraArgs;
optionDefinitions = systemModule.config;
optionDeclarations = systemModule.options;
inherit (systemModule) options;
# These are the extra arguments passed to every module. In
# particular, Nixpkgs is passed through the "pkgs" argument.
extraArgs = extraArgs_ // {
inherit pkgs modules baseModules;
};
config = systemModule.config;
}

View File

@ -0,0 +1,4 @@
[
./activation.nix
./bashrc.nix
]

View File

@ -353,6 +353,16 @@ let
inherit pkgs lib;
};
usernixos = let
configmodule = getConfig [ "usernixos" ] null;
eval = (import ../build-support/usernixos/eval-config.nix) {
inherit pkgs system;
modules = [ configmodule ];
};
in
assert configmodule != null;
eval.config.activation.toplevel;
platforms = import ./platforms.nix;