mirror of
https://github.com/foo-dogsquared/nixos-config.git
synced 2025-01-31 04:58:01 +00:00
65 lines
2.5 KiB
Nix
65 lines
2.5 KiB
Nix
# All of the functions suitable only for NixOS.
|
|
{ pkgs, lib, self }:
|
|
|
|
{
|
|
# Checks if the NixOS configuration is part of the nixos-generator build.
|
|
# Typically, we just check if there's a certain attribute that is imported
|
|
# from it.
|
|
hasNixosFormat = config: lib.hasAttrByPath [ "formatAttr" ] config;
|
|
|
|
# Checks if the NixOS config is being built for a particular format.
|
|
isFormat = config: format: (config.formatAttr or "") == format;
|
|
|
|
# Create a separate environment similar to NixOS `system.path`. This is
|
|
# typically used to create isolated environments for custom desktop sessions
|
|
# which makes it possible to have them installed side-by-side with their own
|
|
# set of applications and everything (except for overlapping NixOS services
|
|
# that will just add them into the NixOS environment itself).
|
|
mkNixoslikeEnvironment = config: args:
|
|
pkgs.buildEnv (args // {
|
|
inherit (config.environment) pathsToLink extraOutputsToInstall;
|
|
ignoreCollisions = true;
|
|
postBuild = ''
|
|
# Remove wrapped binaries, they shouldn't be accessible via PATH.
|
|
find $out/bin -maxdepth 1 -name ".*-wrapped" -type l -delete
|
|
|
|
if [ -x $out/bin/glib-compile-schemas -a -w $out/share/glib-2.0/schemas ]; then
|
|
$out/bin/glib-compile-schemas $out/share/glib-2.0/schemas
|
|
fi
|
|
|
|
${config.environment.extraSetup}
|
|
'';
|
|
});
|
|
|
|
# Given an environment (built with `pkgs.buildEnv`), create a systemd
|
|
# environment attrset meant to be used as part of the desktop service.
|
|
mkSystemdDesktopEnvironment = env: {
|
|
PATH = "${lib.getBin env}\${PATH:+:$PATH}";
|
|
XDG_DATA_DIRS = "${env}/share\${XDG_DATA_DIRS:+:$XDG_DATA_DIRS}";
|
|
XDG_CONFIG_DIRS = "${env}/etc/xdg\${XDG_CONFIG_DIRS:+:$XDG_CONFIG_DIRS}";
|
|
};
|
|
|
|
# Create a range object (as [start, end) in notation) that is typically used
|
|
# in module options that accept them.
|
|
makeRange = start: range: {
|
|
from = start;
|
|
to = start + range;
|
|
};
|
|
|
|
# Create a range object (as [start + 1, end + 1] in notation) that is typically used
|
|
# in module options that accept them except that the starting port is included.
|
|
makeRange' = start: range:
|
|
let start' = start + 1;
|
|
in {
|
|
from = start';
|
|
to = start' + range;
|
|
};
|
|
|
|
# A specific function that checks if specific filesystem setups are set.
|
|
isFilesystemSet = config: setupName:
|
|
config.suites.filesystem.setups.${setupName}.enable or false;
|
|
|
|
# Get the path from the state variable.
|
|
getFilesystem = config: setupName: config.state.paths.${setupName};
|
|
}
|