mysql apps and again with the cleanup script
This commit is contained in:
@@ -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,77 +165,21 @@ 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
|
|
||||||
for version in "${versions_to_delete[@]}"; do
|
|
||||||
kernel_files="${kernels_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
|
|
||||||
IFS=''
|
|
||||||
mapfile -t initrd_files_array <<<"$initrd_files"
|
|
||||||
unset IFS
|
|
||||||
if [ "${#initrd_files_array[@]}" -gt 0 ]; then
|
|
||||||
for entry in "${initrd_files_array[@]}"; do
|
|
||||||
file="${entry#*|}"
|
|
||||||
delete_files+=("$file")
|
|
||||||
log "$file"
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
# Process versions to keep
|
|
||||||
for version in "${sorted_versions[@]:0:$KEEP_VERSIONS}"; do
|
|
||||||
# Process kernel files
|
|
||||||
kernel_files="${kernels_files_by_version["$version"]:-}"
|
|
||||||
if [ -n "$kernel_files" ]; then
|
|
||||||
IFS=''
|
|
||||||
mapfile -t kernel_files_array <<<"$kernel_files"
|
|
||||||
unset IFS
|
|
||||||
# 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)
|
|
||||||
kernel_file_count=${#sorted_kernel_files[@]}
|
|
||||||
if [ "$KEEP_FILES_PER_VERSION" -gt 0 ] && [ "$kernel_file_count" -gt "$KEEP_FILES_PER_VERSION" ]; then
|
|
||||||
files_to_delete=("${sorted_kernel_files[@]:$KEEP_FILES_PER_VERSION}")
|
|
||||||
for entry in "${files_to_delete[@]}"; do
|
|
||||||
file="${entry#*|}"
|
|
||||||
delete_files+=("$file")
|
|
||||||
log "$file"
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Process initrd files
|
# Process initrd files
|
||||||
|
for version in "${sorted_versions[@]}"; do
|
||||||
initrd_files="${initrds_files_by_version["$version"]:-}"
|
initrd_files="${initrds_files_by_version["$version"]:-}"
|
||||||
|
|
||||||
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"
|
||||||
@@ -261,8 +187,30 @@ for version in "${sorted_versions[@]:0:$KEEP_VERSIONS}"; do
|
|||||||
# Sort initrd files by mtime and filename (newest first)
|
# 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)
|
mapfile -t sorted_initrd_files < <(printf '%s\n' "${initrd_files_array[@]}" | sort -rn -k1,1 -k2,2)
|
||||||
initrd_file_count=${#sorted_initrd_files[@]}
|
initrd_file_count=${#sorted_initrd_files[@]}
|
||||||
if [ "$KEEP_FILES_PER_VERSION" -gt 0 ] && [ "$initrd_file_count" -gt "$KEEP_FILES_PER_VERSION" ]; then
|
if [ "$KEEP_INITRD" -gt 0 ] && [ "$initrd_file_count" -gt "$KEEP_INITRD" ]; then
|
||||||
files_to_delete=("${sorted_initrd_files[@]:$KEEP_FILES_PER_VERSION}")
|
files_to_delete=("${sorted_initrd_files[@]:$KEEP_INITRD}")
|
||||||
|
for entry in "${files_to_delete[@]}"; do
|
||||||
|
file="${entry#*|}"
|
||||||
|
delete_files+=("$file")
|
||||||
|
log "$file"
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# Process kernel files
|
||||||
|
for version in "${sorted_versions[@]}"; do
|
||||||
|
kernel_files="${kernels_files_by_version["$version"]:-}"
|
||||||
|
|
||||||
|
if [ -n "$kernel_files" ]; then
|
||||||
|
IFS=''
|
||||||
|
mapfile -t kernel_files_array <<<"$kernel_files"
|
||||||
|
unset IFS
|
||||||
|
# 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)
|
||||||
|
kernel_file_count=${#sorted_kernel_files[@]}
|
||||||
|
if [ "$KEEP_KERNEL" -gt 0 ] && [ "$kernel_file_count" -gt "$KEEP_KERNEL" ]; then
|
||||||
|
files_to_delete=("${sorted_kernel_files[@]:$KEEP_KERNEL}")
|
||||||
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"
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -4,6 +4,8 @@ let
|
|||||||
./nix
|
./nix
|
||||||
./modules
|
./modules
|
||||||
];
|
];
|
||||||
|
desktop = [
|
||||||
|
];
|
||||||
in {
|
in {
|
||||||
inherit shared;
|
inherit shared desktop;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
18
system/modules/studio/beekeeper/default.nix
Normal file
18
system/modules/studio/beekeeper/default.nix
Normal 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
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
||||||
18
system/modules/studio/mysql-workbench/default.nix
Normal file
18
system/modules/studio/mysql-workbench/default.nix
Normal 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
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -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
|
||||||
|
])
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user