feat: lots of changes :(

This commit is contained in:
Flinner Yuu 2024-12-29 09:22:49 +03:00
parent 7be77d8555
commit cfbfc36a4a
Signed by: flinner
GPG Key ID: 95CE0DA7F0E58CA6
15 changed files with 156 additions and 105 deletions

View File

@ -74,7 +74,7 @@ foreground = "#ebdbb2"
TERM = "xterm-256color"
[font]
size = 6.0
size = 9.0
[font.bold]
style = "Bold"

View File

@ -1,7 +1,8 @@
# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples
TERM=xterm
export TERM=xterm-256color
exec zsh
# If not running interactively, don't do anything
case $- in
*i*) ;;
@ -72,3 +73,5 @@ if [ -f ~/.bash_aliases ]; then . ~/.bash_aliases ; fi
export QSYS_ROOTDIR="/home/lambda/Programs/intelQuartus/quartus/sopc_builder/bin"
[ -f "/home/lambda/.ghcup/env" ] && . "/home/lambda/.ghcup/env" # ghcup-env

View File

@ -55,3 +55,5 @@ fi
export QSYS_ROOTDIR="/home/lambda/Programs/intelQuartus/quartus/sopc_builder/bin"
[ -f "/home/lambda/.ghcup/env" ] && . "/home/lambda/.ghcup/env" # ghcup-env

View File

@ -3,8 +3,7 @@
# FOR openGL from arch wiki
export LD_PRELOAD=/usr/lib/libstdc++.so
export LD_LIBRARY_PATH=/usr/lib/xorg/modules/dri/
#export _JAVA_AWT_WM_NONREPARENTING=1
export _JAVA_AWT_WM_NONREPARENTING=1
~/Programs/MATLAB/R2024a/bin/matlab "$@"
~/Programs/Matlab/bin/matlab "$@"

View File

@ -1,18 +1,18 @@
#!/bin/bash
#!/usr/bin/env bash
# ----- Parameters ------ #
# Coordinates: https://www.mapcoordinates.net/en
# Set explicitly, or leave commented to get them automatically from ipinfo.io
# lat='100.00000'
# long='100.00000'
# Set lat and long explicitly, or leave commented to get them automatically from ipinfo.io
lat=''
long=''
# Calculation Method: https://api.aladhan.com/v1/methods
method='4'
# Print Text Language (en/ar)
print_lang="en"
print_lang='en'
# Notifcation Daemon
notify="mako"
notify='mako'
# ----------------------- #
prayers_json="$HOME/.local/share/prayers.json"
prayers_json="${HOME}/.local/share/prayers.json"
prayers=("Fajr" "Dhuhr" "Asr" "Maghrib" "Isha")
declare -A date
declare -A epochtimes
@ -33,43 +33,42 @@ date=(
)
nameof() {
if [[ "$print_lang" != "en" ]]; then
local array_name="prayers_$print_lang"
eval "echo -n \${${array_name}[$1]}"
if [[ "${print_lang}" != "en" ]]; then
local array_name="prayers_${print_lang}"
eval "echo -n \${${array_name}[${1}]}"
else
echo -n "$1"
echo -n "${1}"
fi
}
check() {
local available_month
if [[ -r $prayers_json ]]; then
available_month=$(jq -r ".data[0].date.gregorian.month.number" "$prayers_json")
local response
local location
if [[ -r "${prayers_json}" ]]; then
available_month=$(jq -r ".data[0].date.gregorian.month.number" "${prayers_json}")
else
local fetch_prayers=1
fi
if [[ "$fetch_prayers" || "$available_month" != "${date[month]}" ]]; then
# Fetch the geolocation data from ipinfo.io
response=$(curl -s https://ipinfo.io)
echo "-- fetching latitude and longitude"
# Parse the latitude and longitude
location=$(echo $response | jq -r '.loc')
# Separate latitude and longitude
latitude=$(echo $location | cut -d',' -f1)
longitude=$(echo $location | cut -d',' -f2)
# Set `lat` to `latitude`, or default to the specified value above
lat=${latitude:lat}
long=${longitude:long}
if ((fetch_prayers)) || [[ "${available_month}" != "${date[month]}" ]]; then
if [[ -z "${lat}" ]] || [[ -z "${long}" ]]; then
echo "-- fetching latitude and longitude (from ipinfo.io)"
response="$(curl -s https://ipinfo.io)"
# parse city name
city=$(echo "${response}" | jq -r '.city')
echo "-- city: ${city}"
# parse the latitude and longitude
mapfile -t location < <(echo "${response}" | jq -r ' (.loc | split(","))[] ')
# set `lat` to `latitude`, or default to the specified value above
lat=${location[0]:-${lat}}
long=${location[1]:-${long}}
fi
echo "-- latitude: ${lat}, longitude: ${long}"
echo "-- fetching current month prayer calendar (${date[month]}-${date[year]})"
# Documentation: https://aladhan.com/prayer-times-api#GetCalendar
curl -Lso "$prayers_json" "https://api.aladhan.com/v1/calendar/${date[year]}/${date[month]}?latitude=$lat&longitude=$long&method=$method"
curl -Lso "${prayers_json}" "https://api.aladhan.com/v1/calendar/${date[year]}/${date[month]}?latitude=${lat}&longitude=${long}&method=${method}"
fi
}
@ -78,49 +77,49 @@ add-jobs() {
echo "-- removing all jobs in queue 'p'"
if [[ "$(at -q p -l | wc -l)" != "0" ]]; then
for i in $(at -q p -l | awk '{ print $1 }'); do
atrm "$i"
atrm "${i}"
done
fi
for prayer in "${prayers[@]}"; do
echo "-- creating at job for $prayer prayer"
if [[ "$notify" == "mako" ]]; then
printf 'notify-send -t 30000 --icon="clock-applet-symbolic" "Prayer Times" "It is time for %s prayer 🕌"' "$prayer" | at -q p "$(timeof "$prayer" '%H:%M %F')"
echo "-- creating at job for ${prayer} prayer"
if [[ "${notify}" == "mako" ]]; then
printf 'notify-send -t 30000 --icon="clock-applet-symbolic" "Prayer Times" "It is time for %s prayer 🕌"' "${prayer}" | at -q p "$(timeof "${prayer}" '%H:%M %F')"
else
printf '[ "$(dunstify --icon="clock-applet-symbolic" --action="Reply,reply" "Prayer Times" "Time for %s prayer 🕌" -t 30000)" = "2" ] && %s' "$prayer" "$HOME/.local/bin/toggle-athan" | at -q p "$(timeof "$prayer" '%H:%M %F')"
printf '[ "$(dunstify --icon="clock-applet-symbolic" --action="Reply,reply" "Prayer Times" "Time for %s prayer 🕌" -t 30000)" = "2" ] && %s' "${prayer}" "${HOME}/.local/bin/toggle-athan" | at -q p "$(timeof "${prayer}" '%H:%M %F')"
fi
done
}
timeof() {
[[ "$#" -lt "1" ]] && echo "atleast 1 argument is needed" && return 1
echo -n "$(date -d "$(jq -r ".data[${date[day_idx]}].timings.$1" "$prayers_json")" "+${2:-%I:%M}")"
[[ "${#}" -lt "1" ]] && echo "atleast 1 argument is needed" && return 1
echo -n "$(date -d "$(jq -r ".data[${date[day_idx]}].timings.${1}" "${prayers_json}")" "+${2:-%I:%M}")"
}
hijri() {
case "$1" in
case "${1}" in
weekday)
if [[ "$print_lang" == "ar" ]]; then
echo -n "$(jq -r ".data[${date[day_idx]}].date.hijri.weekday.ar" "$prayers_json")"
if [[ "${print_lang}" == "ar" ]]; then
echo -n "$(jq -r ".data[${date[day_idx]}].date.hijri.weekday.ar" "${prayers_json}")"
else
echo -n "$(jq -r ".data[${date[day_idx]}].date.hijri.weekday.en" "$prayers_json")"
echo -n "$(jq -r ".data[${date[day_idx]}].date.hijri.weekday.en" "${prayers_json}")"
fi
;;
day)
echo -n "$(jq -r ".data[${date[day_idx]}].date.hijri.day" "$prayers_json")"
echo -n "$(jq -r ".data[${date[day_idx]}].date.hijri.day" "${prayers_json}")"
;;
month)
if [[ "$print_lang" == "ar" ]]; then
echo -n "$(jq -r ".data[${date[day_idx]}].date.hijri.month.ar" "$prayers_json")"
if [[ "${print_lang}" == "ar" ]]; then
echo -n "$(jq -r ".data[${date[day_idx]}].date.hijri.month.ar" "${prayers_json}")"
else
echo -n "$(jq -r ".data[${date[day_idx]}].date.hijri.month.en" "$prayers_json")"
echo -n "$(jq -r ".data[${date[day_idx]}].date.hijri.month.en" "${prayers_json}")"
fi
;;
year)
echo -n "$(jq -r ".data[${date[day_idx]}].date.hijri.year" "$prayers_json")"
echo -n "$(jq -r ".data[${date[day_idx]}].date.hijri.year" "${prayers_json}")"
;;
*)
echo "unsupported argument: $1" && return 1
echo "unsupported argument: ${1}" && return 1
;;
esac
}
@ -141,37 +140,37 @@ settimes() {
local nxt_idx=0
local curr_idx=4
for i in {4..0}; do
local prayer_key="${prayers[$i],,}"
if [[ "${epochtimes[now]}" -ge "${epochtimes[$prayer_key]}" ]]; then
[[ "$i" -lt "4" ]] && curr_idx=$i && nxt_idx=$((i + 1))
local prayer_key="${prayers[${i}],,}"
if [[ "${epochtimes[now]}" -ge "${epochtimes[${prayer_key}]}" ]]; then
[[ "${i}" -lt "4" ]] && curr_idx=${i} && nxt_idx=$((i + 1))
break
fi
done
local next_key="${prayers[$nxt_idx],,}"
epochtimes[next]="${epochtimes[$next_key]}"
currentprayer="${prayers[$curr_idx]}"
nextprayer="${prayers[$nxt_idx]}"
if [[ "$nxt_idx" == "1" && "${date[weekday]}" == "Fri" ]]; then
local next_key="${prayers[${nxt_idx}],,}"
epochtimes[next]="${epochtimes[${next_key}]}"
currentprayer="${prayers[${curr_idx}]}"
nextprayer="${prayers[${nxt_idx}]}"
if [[ "${nxt_idx}" == "1" && "${date[weekday]}" == "Fri" ]]; then
nextprayer="Jumuaa"
fi
}
timeto() {
[[ "$#" -lt "1" ]] && echo "atleast 1 argument are needed" && return 1
[[ "${#}" -lt "1" ]] && echo "atleast 1 argument are needed" && return 1
settimes
remain="$((epochtimes["${1,,}"] - epochtimes[now]))"
[[ "$remain" -lt "0" ]] && remain="$((remain + 86400))"
date -u -d"@$remain" "+${2:-%H:%M}"
[[ "${remain}" -lt "0" ]] && remain="$((remain + 86400))"
date -u -d"@${remain}" "+${2:-%H:%M}"
}
print() {
local format="📅 %s،%s\n%-12s%-10s\n%-12s%-10s\n%-12s%-10s\n%-12s%-10s\n%-12s%-10s\n%-12s%-10s\n"
if [[ "$print_lang" == "ar" ]]; then
if [[ "${print_lang}" == "ar" ]]; then
format="📅 %s،%s\n%s%11s\n%s%10s\n%s%11s\n%s%11s\n%s%10s\n%s%10s\n"
fi
printf "$format" \
printf "${format}" \
"$(hijri weekday)" \
"$(hijri day)-$(hijri month)-$(hijri year)" \
"۞ $(nameof Fajr)" "$(timeof Fajr)" \
@ -190,9 +189,7 @@ yad-en() {
"<span font-size='large'><b>📅 $(hijri weekday),$(hijri day)-$(hijri month)-$(hijri year)</b></span>" \
--list \
--width=300 \
--posx=550 \
--posy=20 \
--height=270 \
--height=250 \
--title="Prayers" \
--column="Prayer" \
--column="Time" \
@ -217,9 +214,7 @@ yad-ar() {
"<span font-size='large'><b>📅 $(hijri weekday),$(hijri day)-$(hijri month)-$(hijri year)</b></span>" \
--list \
--width=250 \
--posx=550 \
--posy=20 \
--height=280 \
--height=240 \
--title="Prayers" \
--column="الوقت" \
--column="الصلاة" \
@ -239,26 +234,26 @@ yad-toggle() {
local yad_pid
yad_pid=$(pgrep -f 'yad.*Prayers')
if [[ -z "$yad_pid" ]]; then
if [[ "$print_lang" == "ar" ]]; then
if [[ -z "${yad_pid}" ]]; then
if [[ "${print_lang}" == "ar" ]]; then
yad-ar
else
yad-en
fi
else
kill "$yad_pid"
kill "${yad_pid}"
fi
}
current() {
settimes
echo "$currentprayer"
echo "${currentprayer}"
}
next() {
settimes
echo "$nextprayer"
echo "${nextprayer}"
}
remaining() {
@ -270,18 +265,18 @@ status() {
settimes
local remain
remain="$(timeto next)"
echo "$nextprayer in $remain"
echo "${nextprayer} in ${remain}"
}
waybar-status() {
settimes
local remain
remain="$(timeto next)"
local next_text="$nextprayer in $remain"
printf '{ "text": "%s", "class": "%s" }' "$next_text" "$nextprayer"
local next_text="${nextprayer} in ${remain}"
printf '{ "text": "%s", "class": "%s" }' "${next_text}" "${nextprayer}"
}
case "$1" in
case "${1}" in
check)
check
;;
@ -314,12 +309,12 @@ waybar)
waybar-status
;;
timeto)
if [[ -n "$2" ]]; then
if [[ "$2" == "next" ]]; then
if [[ -n "${2}" ]]; then
if [[ "${2}" == "next" ]]; then
valid=1
else
for p in "${prayers[@]}"; do
if [[ "${2^}" == "$p" ]]; then
if [[ "${2^}" == "${p}" ]]; then
valid=1
break
fi
@ -327,16 +322,16 @@ timeto)
fi
fi
if [[ -z "$valid" ]]; then
if [[ -z "${valid}" ]]; then
IFS='|'
echo "Usage: $(basename "$0") timeto (next|${prayers[*],,})"
echo "Usage: $(basename "${0}") timeto (next|${prayers[*],,})"
exit 1
fi
timeto "$2"
timeto "${2}"
;;
*)
echo "Usage: $(basename "$0") [command]"
echo "Usage: $(basename "${0}") [command]"
echo "Command:"
echo " check Check if prayer time data needs to be fetched"
echo " jobs Add prayer time notifications as at jobs"

View File

@ -8,7 +8,7 @@ pgrep ~/bin/wm/bspswallow || ~/bin/wm/bspswallow &
# not sure if I can count using Roman Numerals :)
bspc monitor eDP1 -d I II III IV V VI VII VIII IX X
bspc monitor -d I II III IV V VI VII VIII IX X
#bspc config ignore_ewmh_fullscreen all
bspc config ignore_ewmh_focus true

View File

@ -40,7 +40,7 @@ monitor = , preferred, auto, 1
# See https://wiki.hyprland.org/Configuring/Keywords/
# Set programs that you use
$terminal = kitty
$terminal = alacritty
$fileManager = dolphin
$menu = rofi -show drun
@ -78,6 +78,7 @@ exec-once = swayidle -w
env = XCURSOR_SIZE,24
env = HYPRCURSOR_SIZE,24
env = ELECTRON_OZONE_PLATFORM_HINT,auto
#####################
@ -169,6 +170,7 @@ animations {
animation = workspaces, 1, 1.94, almostLinear, fade
animation = workspacesIn, 1, 1.21, almostLinear, fade
animation = workspacesOut, 1, 1.94, almostLinear, fade
#animation = workspaces, 1, 5, default, slide
}
# Ref https://wiki.hyprland.org/Configuring/Workspace-Rules/
@ -212,10 +214,10 @@ misc {
# https://wiki.hyprland.org/Configuring/Variables/#input
input {
kb_layout = us
kb_layout = us,ara
kb_variant =
kb_model =
kb_options = altwin:swap_lalt_lwin, ctrl:swapcaps
kb_options = altwin:swap_lalt_lwin, ctrl:swapcaps, grp:shifts_toggle
kb_rules =
follow_mouse = 1
@ -241,6 +243,10 @@ device {
sensitivity = -0.5
}
# FIX: make hjkl not exit fullscreen ;)
binds {
movefocus_cycles_fullscreen = 0
}
###################
### KEYBINDINGS ###
@ -258,7 +264,9 @@ bind = $mainMod SHIFT, Q, killactive,
bind = $mainMod, E, exec, emacsclient -nc -alternate-editor="emacs"
bind = $mainMod, R, exec, $menu
bind = $mainMod, V, exec, cliphist list | rofi -dmenu | cliphist decode | wl-copy
bind = , Print, exec, grim -g "$(slurp -d)" - | wl-copy
# bind = , Print, exec, grim -g "$(slurp -d)" - | wl-copy
bind = SHIFT, Print, exec, env XDG_CURRENT_DESKTOP=sway XDG_SESSION_DESKTOP=sway QT_QPA_PLATFORM=wayland flameshot gui
bind = , Print, exec, grim -g "$(slurp -o -r -c '##FF0000FF')" -t ppm - | satty --early-exit --initial-tool rectangle --copy-command wl-copy --annotation-size-factor 2 --fullscreen --filename -
# Lock
bind = $mainMod, HOME, exec, hyprlock >> ~/hyprlock_logfile.txt
@ -293,7 +301,7 @@ bind = $mainMod, 2, workspace, 2
bind = $mainMod, 3, workspace, 3
bind = $mainMod, 4, workspace, 4
bind = $mainMod, 5, workspace, 5
bind = $mainMod, 6, workspace, 6 bind = $mainMod, 7, workspace, 7 bind = $mainMod, 8, workspace, 8
bind = $mainMod, 6, workspace, 6
bind = $mainMod, 7, workspace, 7
bind = $mainMod, 8, workspace, 8
bind = $mainMod, 9, workspace, 9
@ -442,6 +450,22 @@ windowrulev2 = nofocus, class: ^(MATLAB [\w\d]* - academic use)$, title: ^(Defau
windowrulev2 = float,class:(yad)
windowrulev2 = move cursor -50% 25,title:(Prayers)
# Flameshot
# noanim isn't necessary but animations with these rules might look bad. use at your own discretion.
windowrulev2 = noanim, class:^(flameshot)$
windowrulev2 = fullscreenstate, class:(flameshot), title:(flameshot)
windowrulev2 = float, class:^(flameshot)$
windowrulev2 = move 0 -395, class:^(flameshot)$
windowrulev2 = pin, class:^(flameshot)$
# set this to your leftmost monitor id, otherwise you have to move your cursor to the leftmost monitor
# before executing flameshot
windowrulev2 = monitor 1, class:^(flameshot)$
# SATTY (for screenshots)
windowrulev2 = noanim, class:^(flameshot)$
windowrulev2 = fullscreen, class:^(com.gabm.satty)$, title:^(satty)$
windowrulev2 = float, class:^(com.gabm.satty)$, title:^(satty)$
# bind workspaces
#workspace = [1-5], monitor: $mainMonitor
workspace=1, monitor:$mainMonitor

View File

@ -1,3 +1,4 @@
timeout 250 'notify-send --app-name=screenlockwarning "Screen will lock in 30 seconds"'
timeout 300 'hyprlock >> ~/hyprlock_logfile.txt'
timeout 315 'hyprctl dispatch dpms off' resume 'hyprctl dispatch dpms on'
timeout 600 'hyprctl dispatch dpms off' resume 'hyprctl dispatch dpms on'
before-sleep 'hyprlock'

View File

@ -4,9 +4,11 @@ $ENV{max_print_line} = $log_wrap = 1000;
$out_dir = '/tmp/tex';
$pdf_mode = 1;
$pdflatex = 'pdflatex --shell-escape -interaction=nonstopmode -synctex=1 %O %S;';
$pdflualatex = 'lualatex --shell-escape -interaction=nonstopmode -synctex=1 %O %S;';
#$pdflatex = 'pdflatex -shell-escape -interaction=nonstopmode -synctex=1 %O %S;';
$pdflatex = 'lualatex -shell-escape -interaction=nonstopmode -synctex=1 %O %S;';
$pdflualatex = 'lualatex -shell-escape -interaction=nonstopmode -synctex=1 %O %S;';
# https://stackoverflow.com/questions/71868294/set-zathura-as-a-default-viewer-while-using-latexmk
# $pdf_previewer = 'Evince';
$pdf_previewer = 'zathura';

View File

@ -14,7 +14,7 @@
;; main colors
background = #FFFFFF
foreground = #1F1F1F
primary = #ffb300
primary = #00acc1
red = #FF5250
green = #43a047
yellow = #fdd835

View File

@ -37,7 +37,7 @@ include-file = ~/.config/polybar/hack/user_modules.ini
; If unspecified, the application will pick the first one it finds.
; $ polybar -m | cut -d ':' -f 1
; $ xrandr -q | grep " connected" | cut -d ' ' -f1
monitor =
monitor = ${env:MONITOR}
; Use the specified monitor as a fallback if the main one is not found.
monitor-fallback =

View File

@ -3,7 +3,7 @@
* {
al: #00000000;
bg: #FFFFFFFF;
ac: #ffb300FF;
se: #ffb30026;
ac: #00acc1FF;
se: #00acc126;
fg: #1F1F1FFF;
}

View File

@ -133,7 +133,7 @@ set unicode_ellipsis false
# BIDI support - try to properly display file names in RTL languages (Hebrew, Arabic).
# Requires the python-bidi pip package
set bidi_support false
set bidi_support true
# Show dotfiles in the bookmark preview box?
set show_hidden_bookmarks true

View File

@ -2,3 +2,15 @@ unbind C-b
set -g prefix C-a
bind C-a send-prefix
set -g prefix C-Space
bind C-Space send-prefix
setw -g mouse on
set -g mode-keys vi
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R

View File

@ -1,3 +1,4 @@
########
# INIT #
########
@ -35,6 +36,9 @@ autoload -Uz _zinit
### End of Zinit's installer chunk
#===============================================================================================
# Get a random preset
fastfetch --config $(printf "%s\n" examples/{6,7,9,13,17,20,21,22} | shuf -n 1)
###########
# PLUGINS #
###########
@ -61,9 +65,12 @@ zplugin light zsh-users/zsh-autosuggestions
zplugin ice wait'0' lucid
zinit load agkozak/zsh-z
zplugin ice wait'0' lucid
zinit load "MichaelAquilina/zsh-auto-notify"
zplugin ice wait'5' lucid
zplugin load chisui/zsh-nix-shell
#zplugin ice wait'5' lucid
#zplugin load chisui/zsh-nix-shell
#zplugin ice wait'1' lucid
@ -191,7 +198,7 @@ alias sudo='sudo '
alias fm='ranger'
alias fm.='. ranger'
alias books="fm ~/Nextcloud/Books"
alias books="fm ~/Documents/Books"
alias ll='ls -alF'
alias la='ls -A'
@ -232,7 +239,7 @@ export CARGO_HOME="$XDG_DATA_HOME"/cargo
export GOPATH="$XDG_DATA_HOME"/go
export GOBIN="$XDG_DATA_HOME"/go
export DOOM_PATH="$HOME/.emacs.d/bin"
#export YARN_PATH="$HOME/.yarn/bin"
export YARN_PATH="$HOME/.yarn/bin"
export PATH="$DOOM_PATH:$HOME/.local/bin:$HOME/bin:$CARGO_HOME/bin:$YARN_PATH:$GOPATH:$PATH"
@ -271,6 +278,7 @@ else
fi
export TERMINAL="alacritty"
export TERM=xterm-256color
# man colors
export LESS_TERMCAP_mb=$(printf '\e[01;31m') # enter blinking mode - red
@ -295,6 +303,8 @@ WINIT_X11_SCALE_FACTOR=1
# Load the pure theme, with zsh-async library that's bundled with it
PS1="> "
RPS1=" "
# TODO: Check if starship binary exist, and choose to eval one of the next two
# lines of code
#zplugin ice wait'!0' lucid pick"async.zsh" src"pure.zsh"; zplugin light sindresorhus/pure
eval "$(starship init zsh)"
@ -304,3 +314,6 @@ eval "$(starship init zsh)"
export QSYS_ROOTDIR="/home/lambda/Programs/intelQuartus/quartus/sopc_builder/bin"
export JUPYTERLAB_DIR=$HOME/.local/share/jupyter/lab
#[ -f "/home/lambda/.ghcup/env" ] && . "/home/lambda/.ghcup/env" # ghcup-env