From 47398a409de0e8a00ec81113e5e3d3931f738cf6 Mon Sep 17 00:00:00 2001 From: Chris Toph Date: Sun, 27 Apr 2025 17:40:23 -0400 Subject: [PATCH] Replace yay pkg with yay.nix flake --- flake.lock | 55 +++++ flake.nix | 5 + hosts/common/core/default.nix | 5 +- pkgs/yay/package.nix | 390 ---------------------------------- 4 files changed, 64 insertions(+), 391 deletions(-) delete mode 100644 pkgs/yay/package.nix diff --git a/flake.lock b/flake.lock index 67b0792..a1d59cc 100644 --- a/flake.lock +++ b/flake.lock @@ -376,6 +376,24 @@ "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": { "flake": false, "locked": { @@ -943,6 +961,7 @@ "stylix": "stylix", "vscode-server": "vscode-server", "watershot": "watershot", + "yay": "yay", "zen-browser": "zen-browser" } }, @@ -1171,6 +1190,21 @@ "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": { "flake": false, "locked": { @@ -1358,6 +1392,27 @@ "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": { "inputs": { "nixpkgs": [ diff --git a/flake.nix b/flake.nix index 2fd6ee9..20972ca 100644 --- a/flake.nix +++ b/flake.nix @@ -68,6 +68,11 @@ inputs.nixpkgs.follows = "nixpkgs-unstable"; }; + yay = { + url = "git+https://git.ryot.foo/toph/yay.nix.git"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + zen-browser = { url = "github:youwen5/zen-browser-flake"; inputs.nixpkgs.follows = "nixpkgs-unstable"; diff --git a/hosts/common/core/default.nix b/hosts/common/core/default.nix index 6c8045f..9b427e1 100644 --- a/hosts/common/core/default.nix +++ b/hosts/common/core/default.nix @@ -7,6 +7,9 @@ pkgs, ... }: +let + yay = inputs.yay.packages.${pkgs.system}.default; +in { imports = lib.flatten [ inputs.home-manager.nixosModules.home-manager @@ -29,7 +32,7 @@ ranger sshfs wget - yay # my yay @ pkgs teehee + yay # my yay teehee ]; # Enable CUPS to print documents. diff --git a/pkgs/yay/package.nix b/pkgs/yay/package.nix deleted file mode 100644 index e16fe14..0000000 --- a/pkgs/yay/package.nix +++ /dev/null @@ -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" ]; - }; -}