From 3c98a008c8184159d2d194cd041f03dae0a5157d Mon Sep 17 00:00:00 2001 From: Michael Housh Date: Mon, 10 Nov 2025 11:36:21 -0500 Subject: [PATCH] WIP: Adds kanatctl to runs/after/system, adds ability for kanatactl to install service as user or system service. --- env/.local/scripts/kanatactl | 60 ++++---- env/.local/scripts/utils/kanatactl/service | 152 +++++++++++++++------ env/etc/systemd/user/kanata.service | 12 ++ runs/after/espanso | 1 + runs/after/system | 9 +- 5 files changed, 157 insertions(+), 77 deletions(-) create mode 100644 env/etc/systemd/user/kanata.service diff --git a/env/.local/scripts/kanatactl b/env/.local/scripts/kanatactl index 34670f2..c3b2d91 100755 --- a/env/.local/scripts/kanatactl +++ b/env/.local/scripts/kanatactl @@ -15,7 +15,7 @@ DEV_ENV=${DEV_ENV:-""} KBD=${KBD:-""} # Keyboard config to use, either "voyager" or "macbook" usage() { - cat </dev/null + cp "$DEV_ENV/env/etc/systemd/user/kanata.service" ~/.config/systemd/user + systemctl --user daemon-reload + systemctl --user enable --now kanata.service + fi } start_service() { - log "Starting kanata service..." - systemctl start kanata.service + log "Starting kanata service..." + systemctl start kanata.service } stop_service() { - log "Stopping kanata service..." - sudo systemctl stop kanata.service + log "Stopping kanata service..." + sudo systemctl stop kanata.service } disable_service() { - log "Disabling kanata service..." - stop_service - sudo systemctl disable kanata.service + log "Disabling kanata service..." + stop_service + sudo systemctl disable kanata.service } restart_service() { - log "Restarting kanata service..." - sudo systemctl restart kanata.service + log "Restarting kanata service..." + sudo systemctl restart kanata.service } ################################################################################ @@ -96,26 +144,42 @@ restart_service() { source "$SCRIPTS/hypr/logging" setup-logging "$LOG_FILE" "$LOG_LABEL" +# Parse flags / arguments. while [[ $# -gt 0 ]]; do - if [[ $1 == "-h" ]] || [[ $1 == "--help" ]]; then - usage && exit 0 - elif [[ $1 == "disable" ]]; then - disable_service && exit $? - elif [[ $1 == "enable" ]]; then - enable_service && exit $? - elif [[ $1 == "install" ]]; then - shift - install_service "$@" && exit $? - elif [[ $1 == "start" ]]; then - start_service && exit $? - elif [[ $1 == "status" ]]; then - get_status && exit $? - elif [[ $1 == "stop" ]]; then - stop_service && exit $? - elif [[ $1 == "restart" ]]; then - restart_service && exit $? - fi + if [[ $1 == "-h" ]] || [[ $1 == "--help" ]]; then + usage && exit 0 + elif [[ $1 == "--user" ]]; then + user_flag="1" + elif [[ $1 == "--system" ]]; then + system_flag="1" + elif [[ $1 == "--prompt" ]]; then + prompt_flag="1" + # Set first non-flag to the mode / subcommand. + elif [[ -z $mode ]]; then + mode="$1" + # Add any other arguments to the 'args' array. + else + args+=("$1") + fi + shift done -# If we made it here, then none of the subcommands handled the args. -usage && exit 1 +# Handle mode. +if [[ $mode == "disable" ]]; then + disable_service && exit $? +elif [[ $mode == "enable" ]]; then + enable_service && exit $? +elif [[ $mode == "install" ]]; then + install_service "${args[@]}" && exit $? +elif [[ $mode == "start" ]]; then + start_service && exit $? +elif [[ $mode == "status" ]]; then + get_status && exit $? +elif [[ $mode == "stop" ]]; then + stop_service && exit $? +elif [[ $mode == "restart" ]]; then + restart_service && exit $? +else + # If we made it here, then none of the subcommands handled the args. + usage && exit 1 +fi diff --git a/env/etc/systemd/user/kanata.service b/env/etc/systemd/user/kanata.service new file mode 100644 index 0000000..8b79d84 --- /dev/null +++ b/env/etc/systemd/user/kanata.service @@ -0,0 +1,12 @@ +[Unit] +Description=Kanata Service +Documentation=https://github.com/jtroo/kanata + +[Service] +Environment=PATH=/usr/local/bin:/usr/local/sbin:/usr/bin:/bin +Type=simple +ExecStart=/bin/sh -c 'exec /usr/bin/kanata --cfg /home/michael/.config/kanata/config.kbd' +Restart=no + +[Install] +WantedBy=default.target diff --git a/runs/after/espanso b/runs/after/espanso index 22a73c0..6d05d70 100755 --- a/runs/after/espanso +++ b/runs/after/espanso @@ -8,6 +8,7 @@ install() { log " Setting up espanso." sudo setcap "cap_dac_override+p" "$(which espanso)" espanso service register + systemctl --user daemon-reload espanso service start } diff --git a/runs/after/system b/runs/after/system index 25820ab..30ca197 100755 --- a/runs/after/system +++ b/runs/after/system @@ -4,16 +4,19 @@ set -e set -o nounset set -o pipefail +SCRIPTS="${DEV_ENV}/env/.local/scripts" + install() { log " Setting user shell to 'zsh'." sudo chsh --shell "$(which zsh)" log " Enabling up systemd services." - systemctl --user daemon-reload + sudo systemctl daemon-reload + sudo systemctl enable --now pcscd.service + sudo systemctl enable --now firewalld.service systemctl --user enable --now logout-task.service systemctl --user enable --now battery-monitor.timer systemctl --user enable --now tmux-kill-sessions.timer - sudo systemctl enable --now pcscd.service - sudo systemctl enable --now firewalld.service + SCRIPTS="$SCRIPTS" "$SCRIPTS/kanatactl" service install --prompt } arg=${1:-""}