CASCADE/common/cascade-source.nix

68 lines
2.2 KiB
Nix

with builtins;
with import (toString ../functions);
{pkgs, config, lib, ...}: {
options = with lib; with types; {
cascade.nixpkgs-source = mkOption {
default = null;
type = nullOr str;
description = ''
where to point nixpkgs in NIX_PATH for the system.
if null, nixpkgs will not be set by this module
'';
};
cascade.source.enable = mkOption {
default = true;
type = bool;
description = ''
Include cascade source code configured for nixos-rebuild.
'';
};
cascade.source.git-url = mkOption {
default = "https://gitlab.com/jamesandariese/cascade";
type = str;
description = ''
git URL where cascade sources can be found
'';
};
cascade.source.set-nix-path = mkOption {
default = true;
type = bool;
description = ''
set cascade=/usr/src/cascade in NIX_PATH if cascade.source.enable is also true.
if this option or cascade.source.enable are false, this will not be done.
'';
};
};
config = with lib; {
system.activationScripts.cascade-source = mkMerge [
(mkIf config.cascade.source.enable ''
if [ ! -f /usr/src/cascade/.created-by-nixos ];then
mkdir -m 0755 -p /usr/src /etc/nixos
# if it's just a symlink, delete it.
[ -e /usr/src/cascade ] && mv /usr/src/cascade /usr/src/cascade.before-nixos
${pkgs.git}/bin/git clone ${config.cascade.source.git-url} /usr/src/cascade
touch /usr/src/cascade/.created-by-nixos
fi
'')
(mkIf (!config.cascade.source.enable) ''
# only cleanup if we actually created /usr/src/cascade
if [ -f /usr/src/cascade/.created-by-nixos ];then
rm -rf /usr/src/cascade && \
[ -e /usr/src/cascade.before-nixos ] && mv /usr/src/cascade.before-nixos /usr/src/cascade
fi
'')
];
nix.nixPath = mkMerge [
(mkIf (config.cascade.nixpkgs-source != null) [ "nixpkgs=${config.cascade.nixpkgs-source}" ])
(mkIf (config.cascade.source.set-nix-path && config.cascade.source.enable) [ "cascade=/usr/src/cascade" ])
(mkIf (!(config.cascade.source.set-nix-path && config.cascade.source.enable)) [ "cascade=https://gitlab.com/jamesandariese/cascade/-/archive/main/cascade-main.tar.gz" ])
];
};
}