108 lines
3.6 KiB
Nix
108 lines
3.6 KiB
Nix
{ lib
|
|
, buildPythonApplication
|
|
, fetchPypi
|
|
, cryptography
|
|
, requests
|
|
, pyyaml
|
|
, packaging
|
|
, colorama
|
|
, pyinotify
|
|
, distro
|
|
, psutil
|
|
}:
|
|
let
|
|
remove-completion-patch = builtins.toFile "remove-completion-patch" ''
|
|
diff --git a/src/isisdl/utils.py b/src/isisdl/utils.py
|
|
index 691e18f..8597bf0 100644
|
|
--- a/src/isisdl/utils.py
|
|
+++ b/src/isisdl/utils.py
|
|
@@ -399,55 +399,6 @@ def startup() -> None:
|
|
with open(config_file_location, "w") as f:
|
|
f.write(f"# You probably want to start by copying {example_config_file_location} and adapting it.\n")
|
|
|
|
- if not is_windows and not is_static:
|
|
- # Install completions if they don't exist already
|
|
- user_dir = os.path.expanduser("~")
|
|
-
|
|
- if shutil.which("zsh") is not None:
|
|
- default_path = f"{user_dir}/.local/share/zsh/site-functions"
|
|
- whitelist_paths = [
|
|
- f"{user_dir}/.oh-my-zsh/completions",
|
|
- f"{user_dir}/.oh-my-zsh/custom/plugins/zsh-completions/src",
|
|
- ]
|
|
-
|
|
- # Since the session is interactive it might contain stuff like neofetch etc.
|
|
- rand_string = "".join(random.choice(string.ascii_letters) for _ in range(32))
|
|
- fpath = subprocess.check_output(["zsh", "-c", "-i", f"echo {rand_string}; echo $FPATH"]) \
|
|
- .decode().split(rand_string)[-1].strip().split(":")
|
|
-
|
|
- # 1. Find install path (default .local/share/zsh/site-functions or .local/share/isisdl/)
|
|
- # 2. copy _isisdl there
|
|
-
|
|
- # 3. Export this path to $FPATH via .zshrc (make this transparent to user)
|
|
- # 4. autoload [path]/_isisdl
|
|
-
|
|
- for final_path in whitelist_paths:
|
|
- for p in fpath:
|
|
- if final_path == p and not (os.path.exists(final_path) and not os.access(final_path, os.W_OK | os.X_OK)):
|
|
- break
|
|
-
|
|
- else:
|
|
- final_path = default_path
|
|
-
|
|
- # Here the file is always copied to the destination dir.
|
|
- # This is fine since the Filesystem will (hopefully) realize that the files are the same and thus ignore it.
|
|
- os.makedirs(final_path, exist_ok=True)
|
|
-
|
|
- completion_source = source_code_location.joinpath("resources", "completions", "zsh", "_isisdl")
|
|
- if completion_source.exists():
|
|
- shutil.copy(completion_source, final_path)
|
|
-
|
|
- # TODO: Also tag this file as autoloadable
|
|
-
|
|
- if shutil.which("fish") is not None:
|
|
- # TODO
|
|
- pass
|
|
-
|
|
- if shutil.which("bash") is not None:
|
|
- final_path = f"{user_dir}/.local/share/bash-completion/completions"
|
|
- os.makedirs(final_path, exist_ok=True)
|
|
- shutil.copy(source_code_location.joinpath("resources", "completions", "zsh", "_isisdl"), final_path)
|
|
-
|
|
|
|
def clear() -> None:
|
|
if is_windows:
|
|
'';
|
|
in
|
|
buildPythonApplication rec {
|
|
pname = "isisdl";
|
|
version = "1.3.19";
|
|
|
|
src = fetchPypi {
|
|
inherit pname version;
|
|
hash = "sha256-VcqaFqcoH+d1NpKq7QBVbXcbe0HfZ67kStGFiYmr/kE=";
|
|
};
|
|
|
|
patches = [
|
|
remove-completion-patch
|
|
];
|
|
|
|
propagatedBuildInputs = [
|
|
cryptography
|
|
requests
|
|
pyyaml
|
|
packaging
|
|
colorama
|
|
pyinotify
|
|
distro
|
|
psutil
|
|
];
|
|
|
|
doCheck = false;
|
|
|
|
meta = with lib; {
|
|
homepage = "https://github.com/Emily3403/isisdl";
|
|
description = "A downloader for ISIS of TU-Berlin";
|
|
license = licenses.mit;
|
|
};
|
|
}
|