justfiles for automating various tasks on my workstation
1# Setup systemd services
2[group('setup')]
3setup-services:
4 #!/usr/bin/env bash
5 enable_services=(
6 "atop.service"
7 "atopacct.service"
8 "atop-rotate.timer"
9 "firewalld.service"
10 "snapper-cleanup.timer"
11 "snapper-timeline.timer"
12 "tailscaled.service"
13 )
14 for svc in "${enable_services[@]}"; do
15 if ! sudo systemctl is-active --quiet "$svc"; then
16 sudo systemctl enable --now "$svc"
17 fi
18 done
19
20 disable_services=(
21 "bluetooth.service"
22 "cups.service"
23 "cups-browsed.service"
24 "ufw.service"
25 )
26 for svc in "${disable_services[@]}"; do
27 if ! sudo systemctl is-active --quiet "$svc"; then
28 sudo systemctl disable --now "$svc"
29 fi
30 done
31
32# Setup XDG user dirs
33[group('setup')]
34setup-xdg-user-dirs:
35 #!/usr/bin/env bash
36 cat <<EOF | sudo tee /etc/xdg/user-dirs.defaults
37 DESKTOP=desktop
38 DOWNLOAD=downloads
39 TEMPLATES=
40 PUBLICSHARE=nextcloud
41 DOCUMENTS=documents
42 MUSIC=
43 PICTURES=pictures
44 VIDEOS=
45 EOF
46
47 rm -fv "${HOME}/.config/user-dirs.dirs"
48 for dir in "Desktop" "Documents" "Downloads" "Music" "Pictures" "Public" "Templates" "Videos"; do
49 rm -rfv "${HOME}/${dir}"
50 done
51 ln -sf "${HOME}/nextcloud/Documents" "${HOME}/documents"
52 ln -sf "${HOME}/nextcloud/Pictures" "${HOME}/pictures"
53 xdg-user-dirs-update
54
55# Setup git repos locally
56[group('setup')]
57setup-repos:
58 #!/usr/bin/env bash
59 set -euo pipefail
60
61 if [ ! -f "${HOME}/.ssh/id_ed25519" ]; then
62 echo "SSH key not found. Please ensure your SSH key is available."
63 exit 1
64 fi
65
66 echo "Preparing local git directories..."
67 mkdir -p "${HOME}/repos/knot.moonshadow.dev"
68 mkdir -p "${HOME}/repos/tildegit.org/hyperreal"
69
70 echo "Cloning repos from knot.moonshadow.dev..."
71 tangled_repos=(
72 "ansible-homelab"
73 "dotfiles"
74 "hyperreal.coffee"
75 )
76 for repo in "${tangled_repos[@]}"; do
77 if [ -d "${HOME}/repos/knot.moonshadow.dev/${repo}" ]; then
78 rm -rf "${HOME}/repos/knot.moonshadow.dev/${repo}"
79 fi
80 git clone "git@knot.moonshadow.dev:hyperreal.bsky.moonshadow.dev/${repo}.git" "${HOME}/repos/knot.moonshadow.dev/${repo}"
81 done
82 echo "Cloning repos from tildegit.org/hyperreal..."
83 tildegit_repos=(
84 "feelslog"
85 )
86 for repo in "${tildegit_repos[@]}"; do
87 if [ -d "${HOME}/repos/tildegit.org/hyperreal/${repo}" ]; then
88 rm -rf "${HOME}/repos/tildegit.org/hyperreal/${repo}"
89 fi
90 git clone "git@tildegit.org:hyperreal/${repo}" "${HOME}/repos/tildegit.org/hyperreal/${repo}"
91 done
92
93# Setup hyperreal configs
94[group('setup')]
95setup-cli:
96 #!/usr/bin/env bash
97 set -euo pipefail
98
99 DOTFILES_DIR="${HOME}/repos/knot.moonshadow.dev/dotfiles"
100 if [ ! -d "$DOTFILES_DIR" ]; then
101 echo "${DOTFILES_DIR} not found."
102 exit 1
103 fi
104
105 find "${DOTFILES_DIR}/config" -maxdepth 1 -mindepth 1 -exec ln -sf {} "${HOME}/.config" \;
106 find "${DOTFILES_DIR}/zsh" -maxdepth 1 -mindepth 1 -exec ln -sf {} "${HOME}" \;
107
108# vim: ts=4 sts=4 sw=4 et ft=just