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:
parent
db28c68df0
commit
68b5044cc0
5 changed files with 130 additions and 0 deletions
26
pkgs/build-support/usernixos/activation.nix
Normal file
26
pkgs/build-support/usernixos/activation.nix
Normal 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;
|
||||
}
|
59
pkgs/build-support/usernixos/bashrc.nix
Normal file
59
pkgs/build-support/usernixos/bashrc.nix
Normal 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}"
|
||||
'';
|
||||
}
|
31
pkgs/build-support/usernixos/eval-config.nix
Normal file
31
pkgs/build-support/usernixos/eval-config.nix
Normal 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;
|
||||
}
|
4
pkgs/build-support/usernixos/module-list.nix
Normal file
4
pkgs/build-support/usernixos/module-list.nix
Normal file
|
@ -0,0 +1,4 @@
|
|||
[
|
||||
./activation.nix
|
||||
./bashrc.nix
|
||||
]
|
|
@ -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;
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue