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
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;
|
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;
|
platforms = import ./platforms.nix;
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user