aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/justfile
blob: fe58d8dac9d3d95ba9533e888737c90d0c24aabc (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# Install git hooks
install-hooks:
    git config core.hooksPath .githooks

# Deploy dotfiles
apply:
    chezmoi apply

# Install packages from one or more groups (e.g. just install base dev wayland)
install *groups:
    #!/bin/sh
    for group in {{ groups }}; do
        grep -v '^\s*#' "meta/${group}.txt" | grep -v '^\s*$' | paru -S --needed -
    done

# Install all package groups
install-all:
    #!/bin/sh
    cat meta/*.txt | grep -v '^\s*#' | grep -v '^\s*$' | sort -u | paru -S --needed -

# Add a package to a group and install it (e.g. just add dev ripgrep)
add group pkg:
    #!/bin/sh
    set -eu
    file="meta/{{ group }}.txt"
    if [ ! -f "$file" ]; then
        echo "error: $file does not exist" >&2
        exit 1
    fi
    if grep -qxF '{{ pkg }}' "$file"; then
        echo "{{ pkg }} already in {{ group }}.txt"
    else
        echo '{{ pkg }}' >> "$file"
        echo "added {{ pkg }} to {{ group }}.txt"
    fi
    paru -S --needed '{{ pkg }}'

# Show package and dotfile drift
status:
    #!/bin/sh
    echo "=== Package drift ==="
    declared=$(cat meta/*.txt | grep -v '^\s*#' | grep -v '^\s*$' | sort -u)
    echo "$declared" | while read -r pkg; do
        pacman -Qi "$pkg" >/dev/null 2>&1 || echo "  missing:    $pkg"
    done
    pacman -Qqe | while read -r pkg; do
        echo "$declared" | grep -qxF "$pkg" || echo "  undeclared: $pkg"
    done
    echo ""
    echo "=== Dotfile drift ==="
    chezmoi status || true

# Show install coverage for each group
groups:
    #!/bin/sh
    for file in meta/*.txt; do
        group=$(basename "$file" .txt)
        pkgs=$(grep -v '^\s*#' "$file" | grep -v '^\s*$')
        total=$(echo "$pkgs" | wc -l)
        installed=0
        for pkg in $pkgs; do
            pacman -Qi "$pkg" >/dev/null 2>&1 && installed=$((installed + 1))
        done
        if [ "$installed" -eq "$total" ]; then
            printf '  \033[32m✓\033[0m %-10s %d/%d\n' "$group" "$installed" "$total"
        elif [ "$installed" -eq 0 ]; then
            printf '  \033[31m✗\033[0m %-10s %d/%d\n' "$group" "$installed" "$total"
        else
            printf '  \033[33m~\033[0m %-10s %d/%d\n' "$group" "$installed" "$total"
        fi
    done