mirror of
https://github.com/nix-community/nix-on-droid.git
synced 2025-11-08 19:46:07 +01:00
Add environment variable management
This commit is contained in:
parent
abbafa9549
commit
1e2f21748a
5 changed files with 108 additions and 5 deletions
|
|
@ -111,6 +111,12 @@ in
|
||||||
internal = true;
|
internal = true;
|
||||||
description = "Package containing /etc files.";
|
description = "Package containing /etc files.";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
sessionInit = mkOption {
|
||||||
|
type = types.path;
|
||||||
|
internal = true;
|
||||||
|
description = "File containing session init commands like exposing environment variables.";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -17,10 +17,9 @@ writeText "login-inner" ''
|
||||||
[ "$#" -gt 0 ] || echo "If nothing works, use the rescue shell and read ${config.build.installationDir}/usr/lib/login-inner"
|
[ "$#" -gt 0 ] || echo "If nothing works, use the rescue shell and read ${config.build.installationDir}/usr/lib/login-inner"
|
||||||
[ "$#" -gt 0 ] || echo "If it does not help, report bugs at https://github.com/t184256/nix-on-droid-bootstrap/issues"
|
[ "$#" -gt 0 ] || echo "If it does not help, report bugs at https://github.com/t184256/nix-on-droid-bootstrap/issues"
|
||||||
|
|
||||||
export USER="${config.user.userName}"
|
set +u
|
||||||
export HOME="${config.user.home}"
|
. "/nix/var/nix/profiles/per-user/$USER/profile/etc/profile.d/nix-on-droid-session-init.sh"
|
||||||
|
set -u
|
||||||
export GC_NPROCS=1 # to prevent gc warnings of nix, see https://github.com/NixOS/nix/issues/3237
|
|
||||||
|
|
||||||
${lib.optionalString config.build.initialBuild ''
|
${lib.optionalString config.build.initialBuild ''
|
||||||
if [ -e /etc/UNINTIALISED ]; then
|
if [ -e /etc/UNINTIALISED ]; then
|
||||||
|
|
|
||||||
94
modules/environment/session-init.nix
Normal file
94
modules/environment/session-init.nix
Normal file
|
|
@ -0,0 +1,94 @@
|
||||||
|
# Licensed under GNU Lesser General Public License v3 or later, see COPYING.
|
||||||
|
# Copyright (c) 2019 Alexander Sosedkin and other contributors, see AUTHORS.
|
||||||
|
|
||||||
|
{ config, lib, pkgs, ... }:
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
|
||||||
|
let
|
||||||
|
cfg = config.environment;
|
||||||
|
|
||||||
|
export = n: v: "export ${n}=\"${toString v}\"";
|
||||||
|
|
||||||
|
exportAll = vars: concatStringsSep "\n" (mapAttrsToList export vars);
|
||||||
|
|
||||||
|
sessionInit = pkgs.writeTextFile {
|
||||||
|
name = "nix-on-droid-session-init.sh";
|
||||||
|
destination = "/etc/profile.d/nix-on-droid-session-init.sh";
|
||||||
|
text = ''
|
||||||
|
# Only source this once.
|
||||||
|
[ -n "$__NOD_SESS_INIT_SOURCED" ] && return
|
||||||
|
export __NOD_SESS_INIT_SOURCED=1
|
||||||
|
|
||||||
|
${exportAll cfg.sessionVariables}
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
in
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
###### interface
|
||||||
|
|
||||||
|
options = {
|
||||||
|
|
||||||
|
environment.sessionVariables = mkOption {
|
||||||
|
default = {};
|
||||||
|
type = types.attrs;
|
||||||
|
example = { EDITOR = "emacs"; GS_OPTIONS = "-sPAPERSIZE=a4"; };
|
||||||
|
description = ''
|
||||||
|
Environment variables to always set at login.
|
||||||
|
</para><para>
|
||||||
|
The values may refer to other environment variables using
|
||||||
|
POSIX.2 style variable references. For example, a variable
|
||||||
|
<varname>parameter</varname> may be referenced as
|
||||||
|
<code>$parameter</code> or <code>''${parameter}</code>. A
|
||||||
|
default value <literal>foo</literal> may be given as per
|
||||||
|
<code>''${parameter:-foo}</code> and, similarly, an alternate
|
||||||
|
value <literal>bar</literal> can be given as per
|
||||||
|
<code>''${parameter:+bar}</code>.
|
||||||
|
</para><para>
|
||||||
|
Note, these variables may be set in any order so no session
|
||||||
|
variable may have a runtime dependency on another session
|
||||||
|
variable. In particular code like
|
||||||
|
<programlisting language="nix">
|
||||||
|
environment.sessionVariables = {
|
||||||
|
FOO = "Hello";
|
||||||
|
BAR = "$FOO World!";
|
||||||
|
};
|
||||||
|
</programlisting>
|
||||||
|
may not work as expected. If you need to reference another
|
||||||
|
session variable, then do so inside Nix instead. The above
|
||||||
|
example then becomes
|
||||||
|
<programlisting language="nix">
|
||||||
|
environment.sessionVariables = {
|
||||||
|
FOO = "Hello";
|
||||||
|
BAR = "''${config.environment.sessionVariables.FOO} World!";
|
||||||
|
};
|
||||||
|
</programlisting>
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
###### implementation
|
||||||
|
|
||||||
|
config = {
|
||||||
|
|
||||||
|
build = { inherit sessionInit; };
|
||||||
|
|
||||||
|
environment = {
|
||||||
|
packages = [ sessionInit ];
|
||||||
|
|
||||||
|
sessionVariables = {
|
||||||
|
HOME = config.user.home;
|
||||||
|
USER = config.user.userName;
|
||||||
|
|
||||||
|
# To prevent gc warnings of nix, see https://github.com/NixOS/nix/issues/3237
|
||||||
|
GC_NPROCS = 1;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -9,6 +9,7 @@
|
||||||
./environment/links.nix
|
./environment/links.nix
|
||||||
./environment/login
|
./environment/login
|
||||||
./environment/path.nix
|
./environment/path.nix
|
||||||
|
./environment/session-init.nix
|
||||||
./home-manager.nix
|
./home-manager.nix
|
||||||
./user.nix
|
./user.nix
|
||||||
./version.nix
|
./version.nix
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,10 @@ let
|
||||||
];
|
];
|
||||||
|
|
||||||
prootTermuxClosure = closureInfo {
|
prootTermuxClosure = closureInfo {
|
||||||
rootPaths = [ prootTermux ];
|
rootPaths = [
|
||||||
|
config.build.sessionInit
|
||||||
|
prootTermux
|
||||||
|
];
|
||||||
};
|
};
|
||||||
in
|
in
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue