40 lines
1.3 KiB
Nix
40 lines
1.3 KiB
Nix
# utils/modules/set-nix-channel.nix
|
|
{ config, pkgs, ... }:
|
|
|
|
{
|
|
systemd.services.set-nix-channel = {
|
|
description = "Set nix-channel from /var/bento/channel";
|
|
after = [ "network.target" ]; # Ensure network is up
|
|
wantedBy = [ "multi-user.target" ]; # Start on boot
|
|
|
|
serviceConfig = {
|
|
Type = "oneshot";
|
|
RemainAfterExit = true; # Consider the service "active" after successful run
|
|
User = "root";
|
|
ExecStart = pkgs.writeShellScript "set-nix-channel-script" ''
|
|
set -e # Exit immediately if a command exits with a non-zero status.
|
|
CHANNEL_FILE="/var/bento/channel"
|
|
CHANNEL_NAME="nixos"
|
|
|
|
if [ ! -f "$CHANNEL_FILE" ]; then
|
|
echo "Error: Channel file $CHANNEL_FILE not found." >&2
|
|
exit 1
|
|
fi
|
|
|
|
CHANNEL_URL=$(cat "$CHANNEL_FILE")
|
|
|
|
if [ -z "$CHANNEL_URL" ]; then
|
|
echo "Error: Channel file $CHANNEL_FILE is empty." >&2
|
|
exit 1
|
|
fi
|
|
|
|
# Attempt to remove existing channel to ensure clean state, ignore error if it doesn't exist
|
|
${pkgs.nix}/bin/nix-channel --remove "$CHANNEL_NAME" || true
|
|
${pkgs.nix}/bin/nix-channel --add "$CHANNEL_URL" "$CHANNEL_NAME"
|
|
${pkgs.nix}/bin/nix-channel --update "$CHANNEL_NAME"
|
|
|
|
echo "Successfully set and updated channel '$CHANNEL_NAME' from $CHANNEL_FILE."
|
|
'';
|
|
};
|
|
};
|
|
} |