Merge pull request #57 from cnsta/mymy

mysql apps and again with the cleanup script
This commit is contained in:
cnsta
2024-09-15 12:20:25 +02:00
committed by GitHub
10 changed files with 124 additions and 98 deletions

View File

@@ -1,15 +1,6 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# Script to clean up old initrd and kernel files in /boot/EFI/nixos # Script to clean up old initrd and kernel files in /boot/EFI/nixos
#
# Build the script with:
# nix build .#packages.x86_64-linux.cleanup-boot
# Run the script with:
# nix run .#cleanup-boot -- --dry-run
# The '--' is required to pass arguments to the script.
#
# This script keeps the latest N versions and allows you to specify how many
# kernel/initrd files to keep per version.
# Exit on any error, undefined variable, or pipeline failure # Exit on any error, undefined variable, or pipeline failure
set -euo pipefail set -euo pipefail
@@ -20,11 +11,9 @@ if ((BASH_VERSINFO[0] < 4)); then
exit 1 exit 1
fi fi
# Default number of versions to keep # Default number of versions and files to keep
KEEP_VERSIONS=4 KEEP_KERNEL=4
KEEP_INITRD=6
# Default number of files to keep per version (0 means keep all)
KEEP_FILES_PER_VERSION=0
# Log file for cleanup actions # Log file for cleanup actions
LOG_FILE="/var/log/cleanup-boot.log" LOG_FILE="/var/log/cleanup-boot.log"
@@ -34,19 +23,17 @@ DRY_RUN=false
# Function to display usage information # Function to display usage information
usage() { usage() {
echo "Usage: $0 [--dry-run] [--keep N] [--keep-per-version M] [--help]" echo "Usage: $0 [--dry-run] [--keep-kernel N] [--keep-initrd N] [--help]"
echo
echo "Note: When running with 'nix run', use '--' before script arguments."
echo echo
echo "Options:" echo "Options:"
echo " --dry-run Perform a trial run with no changes made." echo " --dry-run Perform a trial run with no changes made."
echo " --keep N Keep the latest N versions (default: 4)." echo " --keep-kernel N Keep the latest N kernel files (default: 4)."
echo " --keep-per-version M Keep the latest M files per version (default: keep all)." echo " --keep-initrd N Keep the latest N initrd files (default: 6)."
echo " --help, -h Show this help message." echo " --help, -h Show this help message."
echo echo
echo "Examples:" echo "Examples:"
echo " nix run .#cleanup-boot -- --dry-run" echo " ./cleanup-boot.sh --dry-run"
echo " ./result --keep 5 --keep-per-version 2" echo " ./cleanup-boot.sh --keep-kernel 3 --keep-initrd 5"
exit 1 exit 1
} }
@@ -56,21 +43,21 @@ while [[ "$#" -gt 0 ]]; do
--dry-run) --dry-run)
DRY_RUN=true DRY_RUN=true
;; ;;
--keep) --keep-kernel)
if [[ -n "${2:-}" && "$2" =~ ^[1-9][0-9]*$ ]]; then if [[ -n "${2:-}" && "$2" =~ ^[1-9][0-9]*$ ]]; then
KEEP_VERSIONS="$2" KEEP_KERNEL="$2"
shift shift
else else
echo "Error: --keep requires a positive integer." echo "Error: --keep-kernel requires a positive integer."
usage usage
fi fi
;; ;;
--keep-per-version) --keep-initrd)
if [[ -n "${2:-}" && "$2" =~ ^[0-9]+$ ]]; then if [[ -n "${2:-}" && "$2" =~ ^[1-9][0-9]*$ ]]; then
KEEP_FILES_PER_VERSION="$2" KEEP_INITRD="$2"
shift shift
else else
echo "Error: --keep-per-version requires a non-negative integer." echo "Error: --keep-initrd requires a positive integer."
usage usage
fi fi
;; ;;
@@ -105,12 +92,7 @@ log() {
logger -t cleanup-boot "$message" logger -t cleanup-boot "$message"
} }
log "Starting cleanup script. Keeping the latest $KEEP_VERSIONS versions." log "Starting cleanup script. Keeping $KEEP_KERNEL kernel files and $KEEP_INITRD initrd files."
if [ "$KEEP_FILES_PER_VERSION" -gt 0 ]; then
log "Keeping the latest $KEEP_FILES_PER_VERSION files per version."
else
log "Keeping all files per version."
fi
# Collect all .efi files in /boot/EFI/nixos # Collect all .efi files in /boot/EFI/nixos
mapfile -d '' -t efi_files < <(find /boot/EFI/nixos -type f -name '*.efi' -print0) mapfile -d '' -t efi_files < <(find /boot/EFI/nixos -type f -name '*.efi' -print0)
@@ -183,46 +165,31 @@ version_count=${#sorted_versions[@]}
log "Found $version_count versions." log "Found $version_count versions."
if [ "$version_count" -le "$KEEP_VERSIONS" ]; then if [ "$version_count" -eq 0 ]; then
log "Fewer than or equal to $KEEP_VERSIONS versions found. No files will be deleted." log "No versions found."
exit 0 exit 0
fi fi
# Determine versions to delete
versions_to_delete=("${sorted_versions[@]:$KEEP_VERSIONS}")
# Initialize delete_files array # Initialize delete_files array
delete_files=() delete_files=()
# Log the files identified for deletion # Log the files identified for deletion
log "Files identified for deletion:" log "Files identified for deletion:"
# Process versions to delete # Process initrd files
for version in "${versions_to_delete[@]}"; do for version in "${sorted_versions[@]}"; do
kernel_files="${kernels_files_by_version["$version"]:-}"
initrd_files="${initrds_files_by_version["$version"]:-}" initrd_files="${initrds_files_by_version["$version"]:-}"
# Delete all kernel files
if [ -n "$kernel_files" ]; then
IFS=''
mapfile -t kernel_files_array <<<"$kernel_files"
unset IFS
if [ "${#kernel_files_array[@]}" -gt 0 ]; then
for entry in "${kernel_files_array[@]}"; do
file="${entry#*|}"
delete_files+=("$file")
log "$file"
done
fi
fi
# Delete all initrd files
if [ -n "$initrd_files" ]; then if [ -n "$initrd_files" ]; then
IFS='' IFS=''
mapfile -t initrd_files_array <<<"$initrd_files" mapfile -t initrd_files_array <<<"$initrd_files"
unset IFS unset IFS
if [ "${#initrd_files_array[@]}" -gt 0 ]; then # Sort initrd files by mtime and filename (newest first)
for entry in "${initrd_files_array[@]}"; do mapfile -t sorted_initrd_files < <(printf '%s\n' "${initrd_files_array[@]}" | sort -rn -k1,1 -k2,2)
initrd_file_count=${#sorted_initrd_files[@]}
if [ "$KEEP_INITRD" -gt 0 ] && [ "$initrd_file_count" -gt "$KEEP_INITRD" ]; then
files_to_delete=("${sorted_initrd_files[@]:$KEEP_INITRD}")
for entry in "${files_to_delete[@]}"; do
file="${entry#*|}" file="${entry#*|}"
delete_files+=("$file") delete_files+=("$file")
log "$file" log "$file"
@@ -231,10 +198,10 @@ for version in "${versions_to_delete[@]}"; do
fi fi
done done
# Process versions to keep # Process kernel files
for version in "${sorted_versions[@]:0:$KEEP_VERSIONS}"; do for version in "${sorted_versions[@]}"; do
# Process kernel files
kernel_files="${kernels_files_by_version["$version"]:-}" kernel_files="${kernels_files_by_version["$version"]:-}"
if [ -n "$kernel_files" ]; then if [ -n "$kernel_files" ]; then
IFS='' IFS=''
mapfile -t kernel_files_array <<<"$kernel_files" mapfile -t kernel_files_array <<<"$kernel_files"
@@ -242,27 +209,8 @@ for version in "${sorted_versions[@]:0:$KEEP_VERSIONS}"; do
# Sort kernel files by mtime and filename (newest first) # Sort kernel files by mtime and filename (newest first)
mapfile -t sorted_kernel_files < <(printf '%s\n' "${kernel_files_array[@]}" | sort -rn -k1,1 -k2,2) mapfile -t sorted_kernel_files < <(printf '%s\n' "${kernel_files_array[@]}" | sort -rn -k1,1 -k2,2)
kernel_file_count=${#sorted_kernel_files[@]} kernel_file_count=${#sorted_kernel_files[@]}
if [ "$KEEP_FILES_PER_VERSION" -gt 0 ] && [ "$kernel_file_count" -gt "$KEEP_FILES_PER_VERSION" ]; then if [ "$KEEP_KERNEL" -gt 0 ] && [ "$kernel_file_count" -gt "$KEEP_KERNEL" ]; then
files_to_delete=("${sorted_kernel_files[@]:$KEEP_FILES_PER_VERSION}") files_to_delete=("${sorted_kernel_files[@]:$KEEP_KERNEL}")
for entry in "${files_to_delete[@]}"; do
file="${entry#*|}"
delete_files+=("$file")
log "$file"
done
fi
fi
# Process initrd files
initrd_files="${initrds_files_by_version["$version"]:-}"
if [ -n "$initrd_files" ]; then
IFS=''
mapfile -t initrd_files_array <<<"$initrd_files"
unset IFS
# Sort initrd files by mtime and filename (newest first)
mapfile -t sorted_initrd_files < <(printf '%s\n' "${initrd_files_array[@]}" | sort -rn -k1,1 -k2,2)
initrd_file_count=${#sorted_initrd_files[@]}
if [ "$KEEP_FILES_PER_VERSION" -gt 0 ] && [ "$initrd_file_count" -gt "$KEEP_FILES_PER_VERSION" ]; then
files_to_delete=("${sorted_initrd_files[@]:$KEEP_FILES_PER_VERSION}")
for entry in "${files_to_delete[@]}"; do for entry in "${files_to_delete[@]}"; do
file="${entry#*|}" file="${entry#*|}"
delete_files+=("$file") delete_files+=("$file")
@@ -284,8 +232,14 @@ fi
# Remove old files # Remove old files
for file in "${delete_files[@]}"; do for file in "${delete_files[@]}"; do
# Skip empty entries
if [[ -z "$file" ]]; then
continue
fi
# Resolve absolute path # Resolve absolute path
resolved_file=$(realpath "$file") resolved_file=$(realpath "$file")
# Security check: Ensure the file is within /boot/EFI/nixos # Security check: Ensure the file is within /boot/EFI/nixos
if [[ "$resolved_file" != /boot/EFI/nixos/* ]]; then if [[ "$resolved_file" != /boot/EFI/nixos/* ]]; then
log "Warning: Attempted to delete file outside of /boot/EFI/nixos: $resolved_file" log "Warning: Attempted to delete file outside of /boot/EFI/nixos: $resolved_file"

View File

@@ -63,6 +63,12 @@
inkscape = { inkscape = {
enable = true; enable = true;
}; };
beekeeper = {
enable = true;
};
mysql-workbench = {
enable = true;
};
}; };
sysd = { sysd = {
network = { network = {
@@ -156,6 +162,7 @@
}; };
misc = { misc = {
enable = true; enable = true;
desktop.enable = true;
}; };
npm = { npm = {
enable = true; enable = true;

View File

@@ -63,6 +63,12 @@
inkscape = { inkscape = {
enable = false; enable = false;
}; };
beekeeper = {
enable = false;
};
mysql-workbench = {
enable = false;
};
}; };
sysd = { sysd = {
network = { network = {
@@ -151,6 +157,7 @@
}; };
misc = { misc = {
enable = true; enable = true;
desktop.enable = false;
}; };
npm = { npm = {
enable = true; enable = true;

View File

@@ -64,6 +64,12 @@
inkscape = { inkscape = {
enable = true; enable = true;
}; };
beekeeper = {
enable = true;
};
mysql-workbench = {
enable = true;
};
}; };
sysd = { sysd = {
network = { network = {
@@ -149,6 +155,7 @@
}; };
misc = { misc = {
enable = true; enable = true;
desktop.enable = true;
}; };
npm = { npm = {
enable = true; enable = true;

View File

@@ -4,6 +4,8 @@ let
./nix ./nix
./modules ./modules
]; ];
desktop = [
];
in { in {
inherit shared; inherit shared desktop;
} }

View File

@@ -14,6 +14,8 @@
"${systemModules}/studio/blender" "${systemModules}/studio/blender"
"${systemModules}/studio/gimp" "${systemModules}/studio/gimp"
"${systemModules}/studio/inkscape" "${systemModules}/studio/inkscape"
"${systemModules}/studio/beekeeper"
"${systemModules}/studio/mysql-workbench"
"${systemModules}/sysd/network/blueman" "${systemModules}/sysd/network/blueman"
"${systemModules}/sysd/network/mullvad" "${systemModules}/sysd/network/mullvad"
"${systemModules}/sysd/network/samba" "${systemModules}/sysd/network/samba"

View File

@@ -0,0 +1,18 @@
{
pkgs,
config,
lib,
...
}: let
inherit (lib) mkIf mkEnableOption;
cfg = config.modules.studio.beekeeper;
in {
options = {
modules.studio.beekeeper.enable = mkEnableOption "Enables Beekeeper Studio";
};
config = mkIf cfg.enable {
environment.systemPackages = with pkgs; [
beekeeper-studio
];
};
}

View File

@@ -0,0 +1,18 @@
{
pkgs,
config,
lib,
...
}: let
inherit (lib) mkIf mkEnableOption;
cfg = config.modules.studio.mysql-workbench;
in {
options = {
modules.studio.mysql-workbench.enable = mkEnableOption "Enables MySQL Workbench";
};
config = mkIf cfg.enable {
environment.systemPackages = with pkgs; [
mysql-workbench
];
};
}

View File

@@ -4,20 +4,33 @@
lib, lib,
... ...
}: let }: let
inherit (lib) mkIf mkEnableOption; inherit (lib) mkIf mkEnableOption mkOption mkMerge;
cfg = config.modules.utils.misc; cfg = config.modules.utils.misc;
in { in {
options = { options = {
modules.utils.misc.enable = mkEnableOption "Enables miscellaneous pacakges"; modules.utils.misc = {
enable = mkEnableOption "Enables miscellaneous packages";
desktop.enable = mkOption {
type = lib.types.bool;
default = false;
description = "Whether to install desktop-specific packages.";
}; };
};
};
config = mkIf cfg.enable { config = mkIf cfg.enable {
environment.systemPackages = [ environment.systemPackages = mkMerge [
[
pkgs.nodejs_22 pkgs.nodejs_22
pkgs.ripgrep pkgs.ripgrep
pkgs.fd pkgs.fd
pkgs.beekeeper-studio
pkgs.gnused pkgs.gnused
pkgs.tree pkgs.tree
]
(mkIf cfg.desktop.enable [
pkgs.protonup
pkgs.winetricks
])
]; ];
}; };
} }

View File

@@ -16,8 +16,6 @@
git git
scx scx
stow stow
winetricks
protonup
]; ];
localBinInPath = true; localBinInPath = true;
}; };
@@ -49,7 +47,7 @@
automatic = true; automatic = true;
dates = "weekly"; dates = "weekly";
# Keep the last 3 generations # Keep the last 3 generations
options = "--delete-older-than +3"; options = "--delete-older-than 30d";
}; };
}; };
} }