first commit
This commit is contained in:
43
fish/functions/fish_prompt.fish
Normal file
43
fish/functions/fish_prompt.fish
Normal file
@@ -0,0 +1,43 @@
|
||||
function fish_prompt
|
||||
# Сохраняем код последней выполненной команды
|
||||
set -l last_status $status
|
||||
|
||||
# --- Левая (черная) часть ---
|
||||
# Устанавливаем черный фон и белый цвет текста
|
||||
set_color -b black white
|
||||
# Выводим текущую директорию. prompt_pwd - это встроенная функция fish для сокращенного пути
|
||||
echo -n ' '(prompt_pwd)' '
|
||||
|
||||
# --- Разделитель и правая (белая) часть ---
|
||||
# Используем символ powerline для плавного перехода
|
||||
set_color -b white black
|
||||
echo -n '' # Символ-разделитель
|
||||
|
||||
# Получаем информацию о Git
|
||||
set -l git_info (fish_git_prompt)
|
||||
|
||||
# Если мы находимся в Git-репозитории, отображаем информацию
|
||||
if test -n "$git_info"
|
||||
# Устанавливаем белый фон и черный цвет текста
|
||||
set_color -b white black
|
||||
echo -n $git_info' '
|
||||
set_color -b normal # Сбрасываем фон
|
||||
echo -n ' '
|
||||
else
|
||||
# Если не в репозитории, просто завершаем белую часть
|
||||
set_color -b normal
|
||||
echo -n ' '
|
||||
|
||||
|
||||
# --- Завершение командной строки ---
|
||||
# Возвращаем стандартные цвета
|
||||
set_color normal
|
||||
|
||||
# Отображаем символ '>' красным цветом, если последняя команда завершилась с ошибкой
|
||||
if test $last_status -ne 0
|
||||
set_color red
|
||||
end
|
||||
echo -n '> '
|
||||
set_color normal
|
||||
end
|
||||
end
|
||||
151
fish/functions/servicectl.fish
Normal file
151
fish/functions/servicectl.fish
Normal file
@@ -0,0 +1,151 @@
|
||||
function servicectl --description "Manage s6 services (systemd-style wrapper)"
|
||||
# --- CONFIGURATION ---
|
||||
# Папка, где лежат оригиналы скриптов сервисов
|
||||
set -l SV_DIR /etc/s6/sv
|
||||
|
||||
# "Живая" папка, которую сканирует s6 прямо сейчас (обычно в tmpfs/RAM)
|
||||
set -l SCAN_DIR /run/service
|
||||
|
||||
# ПАПКА ДЛЯ АВТОЗАГРУЗКИ (Persistent).
|
||||
# Сюда ставятся симлинки, чтобы сервис запускался после ребута.
|
||||
# В Void Linux это /var/service, в других может быть /etc/s6/enabled
|
||||
set -l PERM_DIR /var/service
|
||||
|
||||
# Пути для поиска логов
|
||||
set -l LOG_SEARCH_PATHS /var/log /var/log/s6
|
||||
# ---------------------
|
||||
|
||||
set -l cmd $argv[1]
|
||||
set -l service $argv[2]
|
||||
|
||||
if test -z "$cmd"
|
||||
echo "Usage: servicectl <start|stop|restart|status|enable|disable|activate> <service_name>"
|
||||
return 1
|
||||
end
|
||||
|
||||
switch $cmd
|
||||
# --- УПРАВЛЕНИЕ СОСТОЯНИЕМ (ВКЛ/ВЫКЛ) ---
|
||||
|
||||
case activate
|
||||
# Просто линкуем в SCAN_DIR (работает до перезагрузки)
|
||||
if not test -d $SV_DIR/$service
|
||||
echo "Error: Service '$service' does not exist in $SV_DIR."
|
||||
return 1
|
||||
end
|
||||
|
||||
if test -L $SCAN_DIR/$service; or test -d $SCAN_DIR/$service
|
||||
echo "Service '$service' is already active (linked in runtime)."
|
||||
else
|
||||
sudo ln -s $SV_DIR/$service $SCAN_DIR/$service
|
||||
echo "Service '$service' activated (runtime link created)."
|
||||
# Обычно s6 сам запускает сервис при появлении линка, но можно ускорить
|
||||
sudo s6-svscanctl -a $SCAN_DIR
|
||||
end
|
||||
|
||||
case enable
|
||||
# Линкуем в PERM_DIR (для ребута) + активируем в рантайме
|
||||
if not test -d $SV_DIR/$service
|
||||
echo "Error: Service '$service' does not exist in $SV_DIR."
|
||||
return 1
|
||||
end
|
||||
|
||||
# 1. Создаем постоянный линк
|
||||
if test -L $PERM_DIR/$service; or test -d $PERM_DIR/$service
|
||||
echo "Service '$service' is already enabled for boot."
|
||||
else
|
||||
sudo ln -s $SV_DIR/$service $PERM_DIR/$service
|
||||
echo "Service '$service' enabled (boot link created in $PERM_DIR)."
|
||||
end
|
||||
|
||||
# 2. Активируем прямо сейчас (если еще нет)
|
||||
if not test -d $SCAN_DIR/$service
|
||||
sudo ln -s $SV_DIR/$service $SCAN_DIR/$service
|
||||
sudo s6-svscanctl -a $SCAN_DIR
|
||||
echo "Service '$service' activated for current session."
|
||||
end
|
||||
|
||||
case disable
|
||||
# Удаляем отовсюду
|
||||
# 1. Останавливаем и удаляем из runtime
|
||||
if test -d $SCAN_DIR/$service
|
||||
sudo s6-svc -d $SCAN_DIR/$service # Send Down signal
|
||||
sudo rm $SCAN_DIR/$service # Remove runtime link
|
||||
echo "Service '$service' deactivated (runtime link removed)."
|
||||
else
|
||||
echo "Service '$service' was not active in runtime."
|
||||
end
|
||||
|
||||
# 2. Удаляем из автозагрузки
|
||||
if test -L $PERM_DIR/$service; or test -d $PERM_DIR/$service
|
||||
sudo rm $PERM_DIR/$service
|
||||
echo "Service '$service' disabled (boot link removed)."
|
||||
end
|
||||
|
||||
# --- УПРАВЛЕНИЕ ПРОЦЕССОМ (UP/DOWN) ---
|
||||
|
||||
case start
|
||||
if not test -d $SCAN_DIR/$service
|
||||
echo "Error: Service '$service' is not active (not linked in $SCAN_DIR)."
|
||||
echo "Hint: Run 'servicectl activate $service' or 'servicectl enable $service' first."
|
||||
return 1
|
||||
end
|
||||
sudo s6-svc -u $SCAN_DIR/$service
|
||||
echo "Service '$service' started (up signal sent)."
|
||||
|
||||
case stop
|
||||
if not test -d $SCAN_DIR/$service
|
||||
echo "Error: Service '$service' is not active."
|
||||
return 1
|
||||
end
|
||||
sudo s6-svc -d $SCAN_DIR/$service
|
||||
echo "Service '$service' stopped (down signal sent)."
|
||||
|
||||
case restart
|
||||
if not test -d $SCAN_DIR/$service
|
||||
echo "Error: Service '$service' is not active."
|
||||
return 1
|
||||
end
|
||||
sudo s6-svc -r $SCAN_DIR/$service
|
||||
echo "Service '$service' restarted."
|
||||
|
||||
case status
|
||||
if test -d $SCAN_DIR/$service
|
||||
echo "--- Service Status ($service) ---"
|
||||
sudo s6-svstat $SCAN_DIR/$service
|
||||
|
||||
if test -d $SCAN_DIR/$service/log
|
||||
echo "--- Logger Status ---"
|
||||
sudo s6-svstat $SCAN_DIR/$service/log
|
||||
end
|
||||
|
||||
set -l found_log 0
|
||||
for path in $LOG_SEARCH_PATHS
|
||||
if test -f "$path/$service/current"
|
||||
echo ""
|
||||
echo "--- Last 10 log lines ---"
|
||||
# Попытка сконвертировать TAI64N время, если есть утилита
|
||||
if type -q s6-tai64nlocal
|
||||
sudo tail -n 10 "$path/$service/current" | s6-tai64nlocal
|
||||
else
|
||||
sudo tail -n 10 "$path/$service/current"
|
||||
end
|
||||
set found_log 1
|
||||
break
|
||||
end
|
||||
end
|
||||
else
|
||||
echo "Status: Service '$service' is INACTIVE (not linked)."
|
||||
if test -L $PERM_DIR/$service
|
||||
echo " (But it IS enabled for boot in $PERM_DIR)"
|
||||
else
|
||||
echo " (Not enabled for boot)"
|
||||
end
|
||||
end
|
||||
|
||||
case '*'
|
||||
echo "Unknown command: $cmd"
|
||||
echo "Available: start, stop, restart, status, enable, disable, activate"
|
||||
return 1
|
||||
end
|
||||
end
|
||||
|
||||
3
fish/functions/zzz.fish
Normal file
3
fish/functions/zzz.fish
Normal file
@@ -0,0 +1,3 @@
|
||||
function zzz --wraps='echo mem | sudo tee /sys/power/state' --description 'alias zzz=echo mem | sudo tee /sys/power/state'
|
||||
echo mem | sudo tee /sys/power/state $argv
|
||||
end
|
||||
Reference in New Issue
Block a user