justfiles for automating various tasks on my workstation
1# Upgrade Python tools
2[group('install')]
3upgrade-python-tools:
4 #!/usr/bin/env bash
5 pipx list --short | awk '{print $1}' | xargs pipx upgrade
6
7# Ensure lsps and formatters are installed
8[group('install')]
9ensure-lsp:
10 #!/usr/bin/env bash
11 go install github.com/reteps/dockerfmt@latest
12 go install github.com/google/yamlfmt/cmd/yamlfmt@latest
13 go install github.com/wader/jq-lsp@latest
14 sudo npm install -g markdownlint-cli2
15 sudo npm install -g ansible-language-server
16 sudo npm install -g bash-language-server
17 sudo npm install -g vscode-langservers-extracted
18 sudo npm install -g dockerfile-language-server-nodejs
19 command -v cargo-binstall || cargo install cargo-binstall
20 cargo-binstall -y just-lsp
21 cargo-binstall -y taplo-cli
22 cargo-binstall -y kdlfmt
23 cargo-binstall -y systemd-lsp
24 pipx install ansible-lint
25 pipx install basedpyright
26 pipx install black
27 pipx install isort
28 pipx install nginxfmt
29 echo "Install shellcheck shfmt jq with your distro's package manager"
30
31# Install todo.txt
32[group('install')]
33install-todotxt:
34 #!/usr/bin/env bash
35 URL=$(curl --silent https://api.github.com/repos/todotxt/todo.txt-cli/releases/latest | jq -r '.assets[] | select(.name| test(".*.tar.gz$")).browser_download_url')
36 FILENAME=$(basename "$URL")
37 DIRNAME=$(basename "$URL" .tar.gz)
38 TEMP_DIR=$(mktemp -d)
39 wget "$URL" -O "${TEMP_DIR}/${FILENAME}"
40 tar -zxvf "${TEMP_DIR}/${FILENAME}" -C "${TEMP_DIR}"
41 sudo cp -fv "${TEMP_DIR}/${DIRNAME}/todo.sh" /usr/local/bin/
42 rm -rf "$TEMP_DIR"
43 echo "todo.sh successfully installed to /usr/local/bin/"
44
45# Install Go tools
46[group('install')]
47install-go-tools:
48 #!/usr/bin/env bash
49 go_tools=(
50 "golang.org/x/tools/gopls@latest"
51 "github.com/fatih/gomodifytags@latest"
52 "github.com/cweill/gotests/...@latest"
53 "github.com/x-motemen/gore/cmd/gore@latest"
54 "golang.org/x/tools/cmd/guru@latest"
55 "github.com/themimitoof/ipg@latest"
56 )
57 for x in "${go_tools[@]}"; do
58 go install "$x"
59 done
60
61# Install Python tools
62[group('install')]
63install-python-tools:
64 #!/usr/bin/env bash
65 pipx install ansible --include-deps --force
66 py_tools=(
67 "black"
68 "bpython"
69 "pyflakes"
70 "isort"
71 "pipenv"
72 "nose"
73 "poetry"
74 "pytest"
75 "uv"
76 "qbt-helper"
77 "get-def"
78 "print-wp-sources"
79 )
80 for x in "${py_tools[@]}"; do
81 pipx install "$x"
82 done
83 bpy_inject_tools=(
84 "bs4"
85 "matplotlib"
86 "pandas"
87 "qbittorrent-api"
88 "requests"
89 "rich"
90 )
91 for x in "${bpy_inject_tools[@]}"; do
92 pipx inject bpython "$x"
93 done
94
95# Install Node tools
96[group('install')]
97install-node-tools:
98 #!/usr/bin/env bash
99 node_tools=(
100 "@bitwarden/cli"
101 "@catppuccin/inkcat"
102 "prettier"
103 "js-beautify"
104 "stylelint"
105 )
106 for x in "${node_tools[@]}"; do
107 sudo npm install -g "$x"
108 done
109
110# Install Flatpaks
111[group('install')]
112install-flatpaks:
113 #!/usr/bin/env bash
114 sudo flatpak install -y \
115 app.zen_browser.zen \
116 com.calibre_ebook.calibre \
117 com.discordapp.Discord \
118 com.github.iwalton3.jellyfin-media-player \
119 com.nextcloud.desktopclient.nextcloud \
120 fi.skyjake.Lagrange \
121 org.signal.Signal
122
123# vim: ts=4 sts=4 sw=4 et ft=just