nixpkgs/pkgs/by-name/oh/oh-my-zsh/package.nix
Silvan Mosberger 4f0dadbf38 treewide: format all inactive Nix files
After final improvements to the official formatter implementation,
this commit now performs the first treewide reformat of Nix files using it.
This is part of the implementation of RFC 166.

Only "inactive" files are reformatted, meaning only files that
aren't being touched by any PR with activity in the past 2 months.
This is to avoid conflicts for PRs that might soon be merged.
Later we can do a full treewide reformat to get the rest,
which should not cause as many conflicts.

A CI check has already been running for some time to ensure that new and
already-formatted files are formatted, so the files being reformatted here
should also stay formatted.

This commit was automatically created and can be verified using

    nix-build a08b3a4d19.tar.gz \
      --argstr baseRev b32a094368
    result/bin/apply-formatting $NIXPKGS_PATH
2024-12-10 20:26:33 +01:00

141 lines
3.4 KiB
Nix

# This script was inspired by the ArchLinux User Repository package:
#
# https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=oh-my-zsh-git
{
lib,
stdenv,
fetchFromGitHub,
nixosTests,
writeScript,
common-updater-scripts,
git,
nix,
nixfmt-classic,
jq,
coreutils,
gnused,
curl,
cacert,
bash,
}:
stdenv.mkDerivation rec {
version = "2024-10-01";
pname = "oh-my-zsh";
src = fetchFromGitHub {
owner = "ohmyzsh";
repo = "ohmyzsh";
rev = "f4423ebd09fbc7670815c3c20cc86c81b7319e5f";
sha256 = "sha256-JlYgWssS1DT1/Jlk6fOZqyEr6ta3ky6tlDqDZbJ1A9k=";
};
strictDeps = true;
buildInputs = [ bash ];
installPhase = ''
runHook preInstall
outdir=$out/share/oh-my-zsh
template=templates/zshrc.zsh-template
mkdir -p $outdir
cp -r * $outdir
cd $outdir
rm LICENSE.txt
rm -rf .git*
chmod -R +w templates
# Change the path to oh-my-zsh dir and disable auto-updating.
sed -i -e "s#ZSH=\$HOME/.oh-my-zsh#ZSH=$outdir#" \
-e 's/\# \(DISABLE_AUTO_UPDATE="true"\)/\1/' \
$template
chmod +w oh-my-zsh.sh
# Both functions expect oh-my-zsh to be in ~/.oh-my-zsh and try to
# modify the directory.
cat >> oh-my-zsh.sh <<- EOF
# Undefine functions that don't work on Nix.
unfunction uninstall_oh_my_zsh
unfunction upgrade_oh_my_zsh
EOF
# Look for .zsh_variables, .zsh_aliases, and .zsh_funcs, and source
# them, if found.
cat >> $template <<- EOF
# Load the variables.
if [ -f ~/.zsh_variables ]; then
. ~/.zsh_variables
fi
# Load the functions.
if [ -f ~/.zsh_funcs ]; then
. ~/.zsh_funcs
fi
# Load the aliases.
if [ -f ~/.zsh_aliases ]; then
. ~/.zsh_aliases
fi
EOF
runHook postInstall
'';
passthru = {
tests = { inherit (nixosTests) oh-my-zsh; };
updateScript = writeScript "update.sh" ''
#!${stdenv.shell}
set -o errexit
PATH=${
lib.makeBinPath [
common-updater-scripts
curl
cacert
git
nixfmt-classic
nix
jq
coreutils
gnused
]
}
oldVersion="$(nix-instantiate --eval -E "with import ./. {}; lib.getVersion oh-my-zsh" | tr -d '"')"
latestSha="$(curl -L -s https://api.github.com/repos/ohmyzsh/ohmyzsh/commits\?sha\=master\&since\=$oldVersion | jq -r '.[0].sha')"
if [ ! "null" = "$latestSha" ]; then
nixpkgs="$(git rev-parse --show-toplevel)"
default_nix="$nixpkgs/pkgs/shells/zsh/oh-my-zsh/default.nix"
latestDate="$(curl -L -s https://api.github.com/repos/ohmyzsh/ohmyzsh/commits/$latestSha | jq '.commit.committer.date' | sed 's|"\(.*\)T.*|\1|g')"
update-source-version oh-my-zsh "$latestDate" --rev="$latestSha"
nixfmt "$default_nix"
else
echo "${pname} is already up-to-date"
fi
'';
};
meta = with lib; {
description = "Framework for managing your zsh configuration";
longDescription = ''
Oh My Zsh is a framework for managing your zsh configuration.
To copy the Oh My Zsh configuration file to your home directory, run
the following command:
$ cp -v $(nix-env -q --out-path oh-my-zsh | cut -d' ' -f3)/share/oh-my-zsh/templates/zshrc.zsh-template ~/.zshrc
'';
homepage = "https://ohmyz.sh/";
license = licenses.mit;
platforms = platforms.all;
maintainers = with maintainers; [ nequissimus ];
};
}