From 2ee1f047a6501e636a6d9f651dc8e33a7140853c Mon Sep 17 00:00:00 2001 From: Charles Gould Date: Tue, 14 Dec 2021 22:23:38 -0500 Subject: [PATCH] fish: add nix_upgrade function --- fish/functions/nix_upgrade.fish | 27 +++++++++++++++++++++++++++ fish/functions/npm_upgrade.fish | 2 +- fish/functions/pip_upgrade.fish | 2 +- install/install-nix-packages.sh | 2 +- install/install-symlinks.sh | 2 ++ {install => nix}/packages.nix | 2 +- 6 files changed, 33 insertions(+), 4 deletions(-) create mode 100644 fish/functions/nix_upgrade.fish rename {install => nix}/packages.nix (77%) diff --git a/fish/functions/nix_upgrade.fish b/fish/functions/nix_upgrade.fish new file mode 100644 index 0000000..9da3f6a --- /dev/null +++ b/fish/functions/nix_upgrade.fish @@ -0,0 +1,27 @@ +function nix_upgrade --description "Upgrade nix packages" + # Step 1: Update Nixpkgs channel + nix-channel --update + + # Step 2: Determine changes, if any + set --local nix_pkgs_filepath "$HOME/.config/nix/packages.nix" + set --local nix_pkgs_available (nix-env -qacf "$nix_pkgs_filepath" | grep -v ' = ' | string collect) + set --local nix_pkgs_installed (nix-env -qcf "$nix_pkgs_filepath" | grep -v ' = ' | string collect) + + if test -z "$nix_pkgs_available" && test -z "$nix_pkgs_installed" + echo "All packages up-to-date." + return 0 + end + + set --local nix_pkgs_upd (echo $nix_pkgs_available | grep -v ' - \? ' | awk '{print $1}') + set --local nix_pkgs_add (echo $nix_pkgs_available | grep ' - \? ' | awk '{print $1}') + set --local nix_pkgs_rem (echo $nix_pkgs_installed | grep ' - \? ' | awk '{print $1}') + + test -z "$nix_pkgs_add" || echo "Added packages: $nix_pkgs_add" + test -z "$nix_pkgs_upd" || echo "Outdated packages: $nix_pkgs_upd" + test -z "$nix_pkgs_rem" || echo "Removed packages: $nix_pkgs_rem" + + # Step 3: Confirm changes + if confirm + nix-env -irf "$nix_pkgs_filepath" + end +end diff --git a/fish/functions/npm_upgrade.fish b/fish/functions/npm_upgrade.fish index 829dcd1..2032e73 100644 --- a/fish/functions/npm_upgrade.fish +++ b/fish/functions/npm_upgrade.fish @@ -1,7 +1,7 @@ function npm_upgrade --description "Upgrade npm packages" set --local npm_pkgs_outdated (npm outdated -g | awk 'NR > 1 {print $1}') - if test (count $npm_pkgs_outdated) = 0 + if test (count $npm_pkgs_outdated) -eq 0 echo "All packages up-to-date." else echo "Outdated packages: $npm_pkgs_outdated" diff --git a/fish/functions/pip_upgrade.fish b/fish/functions/pip_upgrade.fish index 5d4696e..b97fb0e 100644 --- a/fish/functions/pip_upgrade.fish +++ b/fish/functions/pip_upgrade.fish @@ -1,7 +1,7 @@ function pip_upgrade --description "Upgrade python packages" set --local py_pkgs_outdated (python3 -m pip list --outdated | awk 'NR > 2 {print $1}') - if test (count $py_pkgs_outdated) = 0 + if test (count $py_pkgs_outdated) -eq 0 echo "All packages up-to-date." else echo "Outdated packages: $py_pkgs_outdated" diff --git a/install/install-nix-packages.sh b/install/install-nix-packages.sh index 3d00ad0..8be94df 100755 --- a/install/install-nix-packages.sh +++ b/install/install-nix-packages.sh @@ -6,7 +6,7 @@ ROOTDIR=$(cd "$(dirname "$0")/.." && pwd) NIX_ENV="$HOME/.nix-profile/bin/nix-env" if [ -x "$NIX_ENV" ]; then - "$NIX_ENV" --install --remove-all --file "$ROOTDIR/install/packages.nix" + "$NIX_ENV" --install --remove-all --file "$ROOTDIR/nix/packages.nix" else echo "Cannot install Nix packages! $NIX_ENV is not executable." fi diff --git a/install/install-symlinks.sh b/install/install-symlinks.sh index 36a2b18..71cdc30 100755 --- a/install/install-symlinks.sh +++ b/install/install-symlinks.sh @@ -19,6 +19,7 @@ mkdir -p "$HOME/.config" backup_existing "$HOME/.bashrc" backup_existing "$HOME/.config/fish" backup_existing "$HOME/.config/kitty" +backup_existing "$HOME/.config/nix" backup_existing "$HOME/.config/nvim" backup_existing "$HOME/.config/git" @@ -26,6 +27,7 @@ backup_existing "$HOME/.config/git" ln -fsv "$ROOTDIR/bash/.bashrc" "$HOME/.bashrc" # Bash does not support XDG config ln -fsv "$ROOTDIR/fish" "$HOME/.config" ln -fsv "$ROOTDIR/kitty" "$HOME/.config" +ln -fsv "$ROOTDIR/nix" "$HOME/.config" ln -fsv "$ROOTDIR/nvim" "$HOME/.config" ln -fsv "$ROOTDIR/git" "$HOME/.config" diff --git a/install/packages.nix b/nix/packages.nix similarity index 77% rename from install/packages.nix rename to nix/packages.nix index 8584ca5..2252519 100644 --- a/install/packages.nix +++ b/nix/packages.nix @@ -1,6 +1,6 @@ # Moving toward a more declarative user environment... # This "Nix expression" describes the set of packages I want in my user environment. -# Whenever it changes, run `nix-env -irf /path/to/packages.nix` to reinstall the environment. +# Whenever it changes, run `nix-env -irf ~/.config/nix/packages.nix` to reinstall the environment. with import {}; [ bat