This commit is contained in:
commit
95a533c876
451 changed files with 18255 additions and 0 deletions
135
apps/create/create.sh
Normal file
135
apps/create/create.sh
Normal file
|
|
@ -0,0 +1,135 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
# Default values
|
||||
GIT_NAME=""
|
||||
GIT_EMAIL=""
|
||||
FLAKE="$HOME/.config/nixos"
|
||||
TEMPLATE=""
|
||||
USERNAME=""
|
||||
HOSTNAME=""
|
||||
|
||||
# Templates with Home Manager configurations
|
||||
HM_CONFIGS=("hyprland")
|
||||
|
||||
# This will get overwritten by the derivation
|
||||
TEMPLATES_DIR=""
|
||||
|
||||
# Print usage information
|
||||
usage() {
|
||||
cat <<EOF
|
||||
Usage: $0 -t|--template TEMPLATE -u|--user USERNAME -H|--host HOSTNAME [-f|--flake PATH/TO/YOUR/NIX-CONFIG] [--git-name GIT_NAME] [--git-email GIT_EMAIL]
|
||||
|
||||
Options:
|
||||
-t, --template TEMPLATE Configuration template to use (mandatory)
|
||||
-u, --user USERNAME Specify the username (mandatory)
|
||||
-H, --host HOSTNAME Specify the hostname (mandatory)
|
||||
-f, --flake FLAKE Path to your flake directory (optional, default: $FLAKE)
|
||||
--git-name GIT_NAME Specify the git name (optional, default: USERNAME)
|
||||
--git-email GIT_EMAIL Specify the git email (optional, default: USERNAME@HOSTNAME)
|
||||
-h, --help Show this help message
|
||||
|
||||
Available configuration templates:
|
||||
hetzner-amd
|
||||
hyprland
|
||||
pi4
|
||||
server
|
||||
vm-uefi
|
||||
EOF
|
||||
}
|
||||
|
||||
# Replace placeholder strings in files
|
||||
recursive_replace() {
|
||||
local search=$1
|
||||
local replace=$2
|
||||
local dir=$3
|
||||
|
||||
find "$dir" -type f -exec sed -i "s/$search/$replace/g" {} +
|
||||
}
|
||||
|
||||
# mv wrapper
|
||||
rename_files() {
|
||||
local from=$1
|
||||
local to=$2
|
||||
|
||||
if [[ -d "$from" ]]; then
|
||||
mv "$from" "$to"
|
||||
else
|
||||
echo "Error: Directory $from not found."
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Returns true if template uses Home Manager
|
||||
has_hm() {
|
||||
local template="$1"
|
||||
|
||||
for hm_config in "${HM_CONFIGS[@]}"; do
|
||||
if [[ "$template" == "$hm_config" ]]; then
|
||||
return 0
|
||||
fi
|
||||
done
|
||||
|
||||
return 1
|
||||
}
|
||||
|
||||
# Parse command-line arguments
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case $1 in
|
||||
-u|--user)
|
||||
USERNAME=$2
|
||||
shift; shift ;;
|
||||
-H|--host)
|
||||
HOSTNAME=$2
|
||||
shift; shift ;;
|
||||
-f|--flake)
|
||||
FLAKE=$2
|
||||
shift; shift ;;
|
||||
-t|--template)
|
||||
TEMPLATE=$2
|
||||
shift; shift ;;
|
||||
--git-name)
|
||||
GIT_NAME=$2
|
||||
shift; shift ;;
|
||||
--git-email)
|
||||
GIT_EMAIL=$2
|
||||
shift; shift ;;
|
||||
-h|--help)
|
||||
usage
|
||||
exit 0 ;;
|
||||
*)
|
||||
echo "Unknown option: $1"
|
||||
usage
|
||||
exit 1 ;;
|
||||
esac
|
||||
done
|
||||
|
||||
# Validate mandatory arguments
|
||||
if [[ -z $USERNAME ]] || [[ -z $HOSTNAME ]] || [[ -z $TEMPLATE ]]; then
|
||||
echo "Error: Missing mandatory arguments."
|
||||
usage
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Assign default values for optional arguments
|
||||
GIT_NAME=${GIT_NAME:-$USERNAME}
|
||||
GIT_EMAIL=${GIT_EMAIL:-"$USERNAME@$HOSTNAME"}
|
||||
|
||||
# Apply template to flake directory
|
||||
mkdir -p "$FLAKE"
|
||||
cd "$FLAKE" || { echo "Error: Cannot change directory to $FLAKE"; exit 1; }
|
||||
nix flake init -t "git+https://git.sid.ovh/sid/synix#templates.$TEMPLATE"
|
||||
|
||||
# Move generated files
|
||||
rename_files "$FLAKE/hosts/HOSTNAME" "$FLAKE/hosts/$HOSTNAME"
|
||||
rename_files "$FLAKE/users/USERNAME" "$FLAKE/users/$USERNAME"
|
||||
|
||||
# Only check for HM config if the template has one
|
||||
has_hm "$TEMPLATE" && rename_files "$FLAKE/users/$USERNAME/home/hosts/HOSTNAME" "$FLAKE/users/$USERNAME/home/hosts/$HOSTNAME"
|
||||
|
||||
# Replace placeholders recursively
|
||||
recursive_replace "USERNAME" "$USERNAME" "$FLAKE"
|
||||
recursive_replace "HOSTNAME" "$HOSTNAME" "$FLAKE"
|
||||
recursive_replace "GIT_NAME" "$GIT_NAME" "$FLAKE"
|
||||
recursive_replace "GIT_EMAIL" "$GIT_EMAIL" "$FLAKE"
|
||||
|
||||
echo "Template $TEMPLATE successfully applied to $FLAKE."
|
||||
24
apps/create/default.nix
Normal file
24
apps/create/default.nix
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
{
|
||||
stdenv,
|
||||
coreutils,
|
||||
...
|
||||
}:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "create";
|
||||
version = "2.0";
|
||||
|
||||
src = ./.;
|
||||
|
||||
nativeBuildInputs = [ coreutils ];
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out/bin
|
||||
mkdir -p $out/share
|
||||
|
||||
cp create.sh $out/bin/${pname}
|
||||
chmod +x $out/bin/${pname}
|
||||
'';
|
||||
|
||||
meta.mainProgram = "create";
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue