Compare commits
1 commit
955b61c5a9
...
47398a409d
Author | SHA1 | Date | |
---|---|---|---|
47398a409d |
4 changed files with 64 additions and 391 deletions
55
flake.lock
generated
55
flake.lock
generated
|
@ -376,6 +376,24 @@
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"flake-utils_6": {
|
||||||
|
"inputs": {
|
||||||
|
"systems": "systems_6"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1731533236,
|
||||||
|
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
"fromYaml": {
|
"fromYaml": {
|
||||||
"flake": false,
|
"flake": false,
|
||||||
"locked": {
|
"locked": {
|
||||||
|
@ -943,6 +961,7 @@
|
||||||
"stylix": "stylix",
|
"stylix": "stylix",
|
||||||
"vscode-server": "vscode-server",
|
"vscode-server": "vscode-server",
|
||||||
"watershot": "watershot",
|
"watershot": "watershot",
|
||||||
|
"yay": "yay",
|
||||||
"zen-browser": "zen-browser"
|
"zen-browser": "zen-browser"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -1171,6 +1190,21 @@
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"systems_6": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1681028828,
|
||||||
|
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||||
|
"owner": "nix-systems",
|
||||||
|
"repo": "default",
|
||||||
|
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nix-systems",
|
||||||
|
"repo": "default",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
"tinted-foot": {
|
"tinted-foot": {
|
||||||
"flake": false,
|
"flake": false,
|
||||||
"locked": {
|
"locked": {
|
||||||
|
@ -1358,6 +1392,27 @@
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"yay": {
|
||||||
|
"inputs": {
|
||||||
|
"flake-utils": "flake-utils_6",
|
||||||
|
"nixpkgs": [
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1745783593,
|
||||||
|
"narHash": "sha256-sfaQ1N3afqKe3sPvsC4iqQFG4v5QFLFeuyoCfGjVDFY=",
|
||||||
|
"ref": "refs/heads/main",
|
||||||
|
"rev": "88b65739521e2e9b92475acf6a3665b78bc357d3",
|
||||||
|
"revCount": 2,
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://git.ryot.foo/toph/yay.nix.git"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://git.ryot.foo/toph/yay.nix.git"
|
||||||
|
}
|
||||||
|
},
|
||||||
"zen-browser": {
|
"zen-browser": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"nixpkgs": [
|
"nixpkgs": [
|
||||||
|
|
|
@ -68,6 +68,11 @@
|
||||||
inputs.nixpkgs.follows = "nixpkgs-unstable";
|
inputs.nixpkgs.follows = "nixpkgs-unstable";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
yay = {
|
||||||
|
url = "git+https://git.ryot.foo/toph/yay.nix.git";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
};
|
||||||
|
|
||||||
zen-browser = {
|
zen-browser = {
|
||||||
url = "github:youwen5/zen-browser-flake";
|
url = "github:youwen5/zen-browser-flake";
|
||||||
inputs.nixpkgs.follows = "nixpkgs-unstable";
|
inputs.nixpkgs.follows = "nixpkgs-unstable";
|
||||||
|
|
|
@ -7,6 +7,9 @@
|
||||||
pkgs,
|
pkgs,
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
|
let
|
||||||
|
yay = inputs.yay.packages.${pkgs.system}.default;
|
||||||
|
in
|
||||||
{
|
{
|
||||||
imports = lib.flatten [
|
imports = lib.flatten [
|
||||||
inputs.home-manager.nixosModules.home-manager
|
inputs.home-manager.nixosModules.home-manager
|
||||||
|
@ -29,7 +32,7 @@
|
||||||
ranger
|
ranger
|
||||||
sshfs
|
sshfs
|
||||||
wget
|
wget
|
||||||
yay # my yay @ pkgs teehee
|
yay # my yay teehee
|
||||||
];
|
];
|
||||||
|
|
||||||
# Enable CUPS to print documents.
|
# Enable CUPS to print documents.
|
||||||
|
|
|
@ -1,390 +0,0 @@
|
||||||
# I just missed writing yay in terminal
|
|
||||||
{ pkgs, lib, ... }:
|
|
||||||
let
|
|
||||||
mainScript = ''
|
|
||||||
#!${lib.getExe pkgs.fish}
|
|
||||||
|
|
||||||
# Helper functions for colored output
|
|
||||||
function __yay_red
|
|
||||||
printf "\033[31m[!] %s\033[0m\n" $argv[1]
|
|
||||||
end
|
|
||||||
|
|
||||||
function __yay_green
|
|
||||||
printf "\033[32m[+] %s\033[0m\n" $argv[1]
|
|
||||||
end
|
|
||||||
|
|
||||||
function __yay_yellow
|
|
||||||
printf "\033[33m[*] %s\033[0m\n" $argv[1]
|
|
||||||
end
|
|
||||||
|
|
||||||
function __yay_blue
|
|
||||||
printf "\033[34m[i] %s\033[0m\n" $argv[1]
|
|
||||||
end
|
|
||||||
|
|
||||||
# Function to determine the flake path
|
|
||||||
function __yay_get_flake_path
|
|
||||||
set -l path_arg $argv[1]
|
|
||||||
set -l flake_path ""
|
|
||||||
|
|
||||||
# Priority: 1. Path arg, 2. FLAKE env var, 3. Current directory
|
|
||||||
if test -n "$path_arg"
|
|
||||||
# redirect diagnostics to stderr so only the path comes out on stdout
|
|
||||||
__yay_yellow "Using flake path from argument: $path_arg" >&2
|
|
||||||
set flake_path $path_arg
|
|
||||||
else if set -q FLAKE
|
|
||||||
__yay_yellow "Using flake path from FLAKE env var: $FLAKE" >&2
|
|
||||||
set flake_path $FLAKE
|
|
||||||
else
|
|
||||||
set flake_path (pwd)
|
|
||||||
__yay_yellow "Using current directory as flake path: $flake_path" >&2
|
|
||||||
end
|
|
||||||
|
|
||||||
# Verify the flake path has a flake.nix
|
|
||||||
if not test -f "$flake_path/flake.nix"
|
|
||||||
__yay_red "No flake.nix found in $flake_path" >&2
|
|
||||||
return 1
|
|
||||||
end
|
|
||||||
|
|
||||||
# emit only the path on stdout
|
|
||||||
echo $flake_path
|
|
||||||
end
|
|
||||||
|
|
||||||
# Function to clean home manager backups
|
|
||||||
function __yay_clean_hm_backups
|
|
||||||
__yay_yellow "««« CLEARING HOME-MANAGER BACKUPS »»»"
|
|
||||||
set total_files (find ~/.config -type f -name "*.homeManagerBackupFileExtension" | wc -l)
|
|
||||||
|
|
||||||
if test $total_files -eq 0
|
|
||||||
__yay_green "No home manager backup files found"
|
|
||||||
return 0
|
|
||||||
end
|
|
||||||
|
|
||||||
set counter 0
|
|
||||||
find ~/.config -type f -name "*.homeManagerBackupFileExtension" | while read -l file
|
|
||||||
set counter (math $counter + 1)
|
|
||||||
echo -n (printf "\rDeleting file %d of %d" $counter $total_files)
|
|
||||||
rm $file
|
|
||||||
end
|
|
||||||
echo # new line after progress
|
|
||||||
__yay_green "Removed $total_files home manager backup files"
|
|
||||||
end
|
|
||||||
|
|
||||||
# Command: rebuild
|
|
||||||
function __yay_rebuild
|
|
||||||
set -l options h/help 'p/path=' 'H/host=' t/trace
|
|
||||||
argparse $options -- $argv
|
|
||||||
or return 1
|
|
||||||
|
|
||||||
if set -ql _flag_help
|
|
||||||
echo "Usage: yay rebuild [OPTIONS]"
|
|
||||||
echo "Options:"
|
|
||||||
echo " -p, --path PATH Path to the Nix configuration (overrides FLAKE env var)"
|
|
||||||
echo " -H, --host HOST Hostname to build for (default: current hostname)"
|
|
||||||
echo " -t, --trace Enable trace output"
|
|
||||||
echo " -h, --help Show this help message"
|
|
||||||
return 0
|
|
||||||
end
|
|
||||||
|
|
||||||
# Get the flake path
|
|
||||||
set -l flake_path (__yay_get_flake_path $_flag_path)
|
|
||||||
if test $status -ne 0
|
|
||||||
return 1
|
|
||||||
end
|
|
||||||
|
|
||||||
# Determine hostname
|
|
||||||
set -l host
|
|
||||||
if set -ql _flag_host
|
|
||||||
set host $_flag_host
|
|
||||||
else
|
|
||||||
set host (hostname)
|
|
||||||
end
|
|
||||||
|
|
||||||
# Clean home manager backups first
|
|
||||||
__yay_clean_hm_backups
|
|
||||||
|
|
||||||
# Run the rebuild
|
|
||||||
__yay_green "««« REBUILDING SYSTEM »»»"
|
|
||||||
__yay_green "Building configuration for host: $host"
|
|
||||||
__yay_green "Using flake at: $flake_path"
|
|
||||||
|
|
||||||
# Set the repo path for nh
|
|
||||||
set -x REPO_PATH $flake_path
|
|
||||||
|
|
||||||
# Change to the flake directory
|
|
||||||
set -l original_dir (pwd)
|
|
||||||
cd $flake_path
|
|
||||||
|
|
||||||
# Execute nh os switch
|
|
||||||
if set -ql _flag_trace
|
|
||||||
nh os switch . -- --impure --show-trace
|
|
||||||
else
|
|
||||||
nh os switch . -- --impure
|
|
||||||
end
|
|
||||||
|
|
||||||
set -l result $status
|
|
||||||
|
|
||||||
# Return to original directory
|
|
||||||
cd $original_dir
|
|
||||||
|
|
||||||
if test $result -eq 0
|
|
||||||
__yay_green "System rebuild completed successfully!"
|
|
||||||
else
|
|
||||||
__yay_red "System rebuild failed with exit code $result"
|
|
||||||
end
|
|
||||||
|
|
||||||
return $result
|
|
||||||
end
|
|
||||||
|
|
||||||
# Command: update
|
|
||||||
function __yay_update
|
|
||||||
set -l options h/help 'p/path='
|
|
||||||
argparse $options -- $argv
|
|
||||||
or return 1
|
|
||||||
|
|
||||||
if set -ql _flag_help
|
|
||||||
echo "Usage: yay update [OPTIONS]"
|
|
||||||
echo "Options:"
|
|
||||||
echo " -p, --path PATH Path to the Nix configuration (overrides FLAKE env var)"
|
|
||||||
echo " -h, --help Show this help message"
|
|
||||||
return 0
|
|
||||||
end
|
|
||||||
|
|
||||||
# Get the flake path
|
|
||||||
set -l flake_path (__yay_get_flake_path $_flag_path)
|
|
||||||
if test $status -ne 0
|
|
||||||
return 1
|
|
||||||
end
|
|
||||||
|
|
||||||
__yay_green "««« UPDATING FLAKE INPUTS »»»"
|
|
||||||
__yay_green "Using flake at: $flake_path"
|
|
||||||
|
|
||||||
# Change to the flake directory
|
|
||||||
set -l original_dir (pwd)
|
|
||||||
cd $flake_path
|
|
||||||
|
|
||||||
# Update the flake inputs
|
|
||||||
nix flake update
|
|
||||||
set -l result $status
|
|
||||||
|
|
||||||
# Return to original directory
|
|
||||||
cd $original_dir
|
|
||||||
|
|
||||||
if test $result -eq 0
|
|
||||||
__yay_green "Flake inputs updated successfully!"
|
|
||||||
else
|
|
||||||
__yay_red "Failed to update flake inputs with exit code $result"
|
|
||||||
end
|
|
||||||
|
|
||||||
return $result
|
|
||||||
end
|
|
||||||
|
|
||||||
# Command: garbage
|
|
||||||
function __yay_garbage
|
|
||||||
set -l options h/help
|
|
||||||
argparse $options -- $argv
|
|
||||||
or return 1
|
|
||||||
|
|
||||||
if set -ql _flag_help
|
|
||||||
echo "Usage: yay garbage"
|
|
||||||
echo "Clears all possible garbage from the Nix store"
|
|
||||||
echo "Options:"
|
|
||||||
echo " -h, --help Show this help message"
|
|
||||||
return 0
|
|
||||||
end
|
|
||||||
|
|
||||||
# ask for sudo once up-front
|
|
||||||
__yay_yellow "Requesting sudo credentials…"
|
|
||||||
sudo -v
|
|
||||||
|
|
||||||
__yay_green "««« CLEANING NIX GARBAGE »»»"
|
|
||||||
|
|
||||||
__yay_yellow "Running: sudo nh clean all"
|
|
||||||
sudo nh clean all
|
|
||||||
|
|
||||||
__yay_yellow "Running: nh clean all"
|
|
||||||
nh clean all
|
|
||||||
|
|
||||||
__yay_yellow "Running: sudo nix-collect-garbage --delete-old"
|
|
||||||
sudo nix-collect-garbage --delete-old
|
|
||||||
|
|
||||||
__yay_yellow "Running: nix-collect-garbage --delete-old"
|
|
||||||
nix-collect-garbage --delete-old
|
|
||||||
|
|
||||||
__yay_yellow "Running: sudo nix-store --gc"
|
|
||||||
sudo nix-store --gc
|
|
||||||
|
|
||||||
__yay_yellow "Running: nix-store --gc"
|
|
||||||
nix-store --gc
|
|
||||||
|
|
||||||
__yay_green "Garbage collection completed successfully!"
|
|
||||||
return 0
|
|
||||||
end
|
|
||||||
|
|
||||||
# Command: try
|
|
||||||
function __yay_try
|
|
||||||
set -l options h/help
|
|
||||||
argparse $options -- $argv
|
|
||||||
or return 1
|
|
||||||
|
|
||||||
if set -ql _flag_help || test (count $argv) -eq 0
|
|
||||||
echo "Usage: yay try PACKAGE [PACKAGE...]"
|
|
||||||
echo "Creates a shell with the specified package(s)"
|
|
||||||
echo "Options:"
|
|
||||||
echo " -h, --help Show this help message"
|
|
||||||
return 0
|
|
||||||
end
|
|
||||||
|
|
||||||
__yay_green "««« CREATING NIX SHELL »»»"
|
|
||||||
__yay_yellow "Loading packages: $argv"
|
|
||||||
|
|
||||||
# Run nix-shell with the provided packages and launch fish as the interactive shell
|
|
||||||
nix-shell -p $argv --command fish
|
|
||||||
|
|
||||||
return $status
|
|
||||||
end
|
|
||||||
|
|
||||||
# Show help
|
|
||||||
function __yay_help
|
|
||||||
echo "Usage: yay COMMAND [OPTIONS]"
|
|
||||||
echo ""
|
|
||||||
echo "A wrapper around Nix commands"
|
|
||||||
echo ""
|
|
||||||
echo "Commands:"
|
|
||||||
echo " rebuild Rebuild the NixOS configuration"
|
|
||||||
echo " update Update flake inputs"
|
|
||||||
echo " garbage Clean up the Nix store"
|
|
||||||
echo " try Create a shell with the specified package(s)"
|
|
||||||
echo " help Show this help message"
|
|
||||||
echo ""
|
|
||||||
echo "Run 'yay COMMAND --help' for command-specific help"
|
|
||||||
end
|
|
||||||
|
|
||||||
# Main script entry point
|
|
||||||
if test (count $argv) -eq 0
|
|
||||||
__yay_help
|
|
||||||
exit 1
|
|
||||||
end
|
|
||||||
|
|
||||||
set -l cmd $argv[1]
|
|
||||||
set -l cmd_args $argv[2..-1]
|
|
||||||
|
|
||||||
switch $cmd
|
|
||||||
case rebuild
|
|
||||||
__yay_rebuild $cmd_args
|
|
||||||
case update
|
|
||||||
__yay_update $cmd_args
|
|
||||||
case garbage
|
|
||||||
__yay_garbage $cmd_args
|
|
||||||
case try
|
|
||||||
__yay_try $cmd_args
|
|
||||||
case -h --help help
|
|
||||||
__yay_help
|
|
||||||
case '*'
|
|
||||||
__yay_red "Unknown command: $cmd"
|
|
||||||
__yay_help
|
|
||||||
exit 1
|
|
||||||
end
|
|
||||||
'';
|
|
||||||
|
|
||||||
completionsScript = ''
|
|
||||||
# Complete the main command
|
|
||||||
complete -c yay -f
|
|
||||||
|
|
||||||
# Complete the top-level subcommands
|
|
||||||
complete -c yay -n "__fish_use_subcommand" -a rebuild -d "Rebuild the NixOS configuration"
|
|
||||||
complete -c yay -n "__fish_use_subcommand" -a update -d "Update flake inputs"
|
|
||||||
complete -c yay -n "__fish_use_subcommand" -a garbage -d "Clean up the Nix store"
|
|
||||||
complete -c yay -n "__fish_use_subcommand" -a try -d "Create a shell with the specified package(s)"
|
|
||||||
complete -c yay -n "__fish_use_subcommand" -a help -d "Show help message"
|
|
||||||
|
|
||||||
# Options for 'rebuild'
|
|
||||||
complete -c yay -n "__fish_seen_subcommand_from rebuild" -s p -l path -r -d "Path to the Nix configuration"
|
|
||||||
complete -c yay -n "__fish_seen_subcommand_from rebuild" -s H -l host -r -d "Hostname to build for"
|
|
||||||
complete -c yay -n "__fish_seen_subcommand_from rebuild" -s t -l trace -d "Enable trace output"
|
|
||||||
complete -c yay -n "__fish_seen_subcommand_from rebuild" -s h -l help -d "Show help message"
|
|
||||||
|
|
||||||
# Options for 'update'
|
|
||||||
complete -c yay -n "__fish_seen_subcommand_from update" -s p -l path -r -d "Path to the Nix configuration"
|
|
||||||
complete -c yay -n "__fish_seen_subcommand_from update" -s h -l help -d "Show help message"
|
|
||||||
|
|
||||||
# Options for 'garbage'
|
|
||||||
complete -c yay -n "__fish_seen_subcommand_from garbage" -s h -l help -d "Show help message"
|
|
||||||
|
|
||||||
# Options for 'try'
|
|
||||||
complete -c yay -n "__fish_seen_subcommand_from try" -s h -l help -d "Show help message"
|
|
||||||
|
|
||||||
# Package suggestions for 'try' (using nix-env's available packages)
|
|
||||||
function __yay_list_packages
|
|
||||||
# Use persistent cache file in /tmp (lasts until reboot)
|
|
||||||
set -l cache_file "/tmp/yay_packages_cache"
|
|
||||||
|
|
||||||
# Load from cache if it exists
|
|
||||||
if test -f "$cache_file"
|
|
||||||
cat "$cache_file"
|
|
||||||
return 0
|
|
||||||
end
|
|
||||||
|
|
||||||
# Otherwise, fetch packages and store in cache
|
|
||||||
echo -n "Loading packages..." >&2
|
|
||||||
# Run nix-env but redirect warnings to /dev/null
|
|
||||||
set -l packages (nix-env -qa --json 2>/dev/null | jq -r 'keys[]' 2>/dev/null)
|
|
||||||
|
|
||||||
# Process packages to remove namespace prefix (like "nixos.", "nixpkgs.", etc.)
|
|
||||||
set -l cleaned_packages
|
|
||||||
for pkg in $packages
|
|
||||||
set -l cleaned_pkg (string replace -r '^[^.]+\.' ''\'''\' $pkg)
|
|
||||||
set -a cleaned_packages $cleaned_pkg
|
|
||||||
end
|
|
||||||
|
|
||||||
# Save to cache file for future shell sessions
|
|
||||||
printf "%s\n" $cleaned_packages > "$cache_file"
|
|
||||||
echo " done!" >&2
|
|
||||||
|
|
||||||
# Output the packages
|
|
||||||
printf "%s\n" $cleaned_packages
|
|
||||||
end
|
|
||||||
|
|
||||||
complete -c yay -n "__fish_seen_subcommand_from try; and not __fish_is_switch" -a "(__yay_list_packages)" -d "Nix package"
|
|
||||||
'';
|
|
||||||
|
|
||||||
# Create the main script
|
|
||||||
scriptFile = pkgs.writeTextFile {
|
|
||||||
name = "yay";
|
|
||||||
text = mainScript;
|
|
||||||
executable = true;
|
|
||||||
destination = "/bin/yay";
|
|
||||||
};
|
|
||||||
|
|
||||||
# Create the completions file
|
|
||||||
completionsFile = pkgs.writeTextFile {
|
|
||||||
name = "yay-completions";
|
|
||||||
text = completionsScript;
|
|
||||||
destination = "/share/fish/vendor_completions.d/yay.fish";
|
|
||||||
};
|
|
||||||
in
|
|
||||||
pkgs.symlinkJoin {
|
|
||||||
name = "yay";
|
|
||||||
paths = [
|
|
||||||
scriptFile
|
|
||||||
completionsFile
|
|
||||||
];
|
|
||||||
buildInputs = [ pkgs.makeWrapper ];
|
|
||||||
|
|
||||||
# Make sure nh is always available in PATH
|
|
||||||
postBuild = ''
|
|
||||||
wrapProgram $out/bin/yay \
|
|
||||||
--prefix PATH : ${
|
|
||||||
lib.makeBinPath [
|
|
||||||
pkgs.nh
|
|
||||||
pkgs.jq
|
|
||||||
]
|
|
||||||
}
|
|
||||||
'';
|
|
||||||
|
|
||||||
meta = with lib; {
|
|
||||||
description = "A convenient wrapper around Nix commands with fish completions";
|
|
||||||
license = licenses.mit;
|
|
||||||
platforms = platforms.unix;
|
|
||||||
maintainers = [ "Tophc7" ];
|
|
||||||
};
|
|
||||||
}
|
|
Loading…
Add table
Reference in a new issue