118 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			118 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
yt-audio() {
 | 
						|
  nix-shell -p yt-dlp --run "yt-dlp -x $1 --audio-format mp3"
 | 
						|
}
 | 
						|
 | 
						|
docker_mysql() {
 | 
						|
  if [ -z "$1" ]; then
 | 
						|
    echo "Usage: docker_mysql <mysql_container_name>"
 | 
						|
    return 1
 | 
						|
  fi
 | 
						|
  docker exec -it "$1" mysql -u root -ppassword
 | 
						|
}
 | 
						|
# Tab-completion for docker_mysql function
 | 
						|
_complete_docker_mysql() {
 | 
						|
  local cur=${COMP_WORDS[COMP_CWORD]}
 | 
						|
  COMPREPLY=($(compgen -W "$(docker ps --format '{{.Names}}' | grep mysql)" -- $cur))
 | 
						|
}
 | 
						|
# Register the completion for the docker_mysql function
 | 
						|
complete -F _complete_docker_mysql docker_mysql
 | 
						|
 | 
						|
# Git restore file, like git restore but works for staged changes as well
 | 
						|
gres() {
 | 
						|
  git restore --source=HEAD --staged --worktree -- "$1"
 | 
						|
}
 | 
						|
 | 
						|
# Nixos upgrade functions
 | 
						|
upgrade() {
 | 
						|
    local command="$1"
 | 
						|
    local profile="$2"
 | 
						|
    local flake_path="$HOME/nixos"
 | 
						|
    
 | 
						|
    # Define valid commands
 | 
						|
    local valid_commands=("switch" "boot" "test" "build" "dry-build" "dry-activate" "edit" "repl" "build-vm" "build-vm-with-bootloader" "build-image")
 | 
						|
    
 | 
						|
    # Check if command is provided
 | 
						|
    if [[ -z "$command" ]]; then
 | 
						|
        echo "Error: No command specified"
 | 
						|
        echo "Usage: upgrade <command> [profile]"
 | 
						|
        echo "Valid commands: ${valid_commands[*]}"
 | 
						|
        return 1
 | 
						|
    fi
 | 
						|
 | 
						|
    # Validate command
 | 
						|
    local valid_command=false
 | 
						|
    for valid_cmd in "${valid_commands[@]}"; do
 | 
						|
        if [[ "$command" == "$valid_cmd" ]]; then
 | 
						|
            valid_command=true
 | 
						|
            break
 | 
						|
        fi
 | 
						|
    done
 | 
						|
    
 | 
						|
    if [[ "$valid_command" != true ]]; then
 | 
						|
        echo "Error: Invalid command '$command'"
 | 
						|
        echo "Valid commands: ${valid_commands[*]}"
 | 
						|
        return 1
 | 
						|
    fi
 | 
						|
    
 | 
						|
    # Check if flake directory exists
 | 
						|
    if [[ ! -d "$flake_path" ]]; then
 | 
						|
        echo -e "Error: Flake directory '$flake_path' does not exist, check function definition:\n\n\t`function upgrade`"
 | 
						|
        return 1
 | 
						|
    fi
 | 
						|
    
 | 
						|
    # Check if flake.nix exists
 | 
						|
    if [[ ! -f "$flake_path/flake.nix" ]]; then
 | 
						|
        echo "Error: flake.nix not found in '$flake_path'"
 | 
						|
        return 1
 | 
						|
    fi
 | 
						|
    
 | 
						|
    # If profile is provided, validate it exists in flake.nix
 | 
						|
    if [[ -n "$profile" ]]; then
 | 
						|
        if ! awk '/nixosConfigurations = \{/,/^\s*\}/' "$flake_path/flake.nix" | \
 | 
						|
             grep -E "^\s*$profile\s*=" > /dev/null; then
 | 
						|
            echo "Error: Profile '$profile' not found in flake.nix"
 | 
						|
            echo "Available profiles:"
 | 
						|
            # Extract available profiles from nixosConfigurations section
 | 
						|
            awk '/nixosConfigurations = \{/,/^\s*\}/' "$flake_path/flake.nix" | \
 | 
						|
                grep -E "^\s*[a-zA-Z0-9_-]+\s*=.*nixpkgs\.lib\.nixosSystem" | \
 | 
						|
                sed -E 's/^\s*([a-zA-Z0-9_-]+)\s*=.*/  - \1/'
 | 
						|
            return 1
 | 
						|
        fi
 | 
						|
        # Build the full flake reference
 | 
						|
        local flake_ref="$flake_path#$profile"
 | 
						|
        echo "Running: sudo nixos-rebuild $command --flake $flake_ref"
 | 
						|
        sudo nixos-rebuild "$command" --flake "$flake_ref"
 | 
						|
    else
 | 
						|
        echo "Error: No profile provided."
 | 
						|
        echo "Usage: upgrade <command> [profile]"
 | 
						|
        return 1
 | 
						|
    fi
 | 
						|
}
 | 
						|
 | 
						|
# Add tab completion for the function
 | 
						|
_upgrade_completion() {
 | 
						|
    local cur="${COMP_WORDS[COMP_CWORD]}"
 | 
						|
    local prev="${COMP_WORDS[COMP_CWORD-1]}"
 | 
						|
    
 | 
						|
    case $COMP_CWORD in
 | 
						|
        1)
 | 
						|
            # Complete command names
 | 
						|
            local commands="switch boot test build dry-build dry-activate edit repl build-vm build-vm-with-bootloader build-image"
 | 
						|
            COMPREPLY=($(compgen -W "$commands" -- "$cur"))
 | 
						|
            ;;
 | 
						|
        2)
 | 
						|
            # Complete profile names from flake.nix
 | 
						|
            if [[ -f "$HOME/nixos/flake.nix" ]]; then
 | 
						|
                local profiles=$(grep -E "^\s*[a-zA-Z0-9_-]+\s*=" "$HOME/nixos/flake.nix" | \
 | 
						|
                    grep -A5 -B5 "nixosConfigurations" | \
 | 
						|
                    sed -n 's/^\s*\([a-zA-Z0-9_-]*\)\s*=.*/\1/p' | \
 | 
						|
                    sort -u)
 | 
						|
                COMPREPLY=($(compgen -W "$profiles" -- "$cur"))
 | 
						|
            fi
 | 
						|
            ;;
 | 
						|
    esac
 | 
						|
}
 | 
						|
 | 
						|
# Register the completion function
 | 
						|
complete -F _upgrade_completion upgrade
 |