hornero-config
LOW
maintainer ulises-jeremias
0 votes
scanned 2026-09-15 07:19:15.107868
Why flagged
Uploaded within the last 14 days with 2 or fewer community votes — little peer review so far.
Triggered rules
Low
Few votes, recently uploaded
zero_votes_recent
Uploaded within the last 14 days with 2 or fewer community votes — little peer review so far.
PKGBUILD
1
# Maintainer: HorneroOS contributors <https://github.com/HorneroOS/config>
2
# Package: hornero-config - curated HorneroOS desktop defaults.
3
# Profile selection: HORNERO_PROFILE=base|desktop|developer (default: base).
4
# All three names currently resolve to profiles/base, the only curated
5
# composition in this repo. Desktop and developer remain accepted aliases
6
# so callers can request them today without breaking when curated
7
# desktop/developer compositions land later.
8
# shellcheck shell=bash disable=SC2034,SC2154,SC2164
9
10
pkgname=hornero-config
11
pkgver=0.1.0
12
pkgrel=1
13
pkgdesc="HorneroOS curated desktop defaults (compositor, terminal, GTK, fonts, XDG handlers)"
14
arch=('any')
15
url="https://github.com/HorneroOS/config"
16
license=('MIT')
17
depends=('bash' 'git' 'python')
18
makedepends=('librsvg')
19
optdepends=(
20
'hyprland: compositor defaults under /etc/xdg/hypr'
21
'kitty: terminal defaults under /etc/xdg/kitty'
22
'gtk3: GTK 3 defaults under /etc/xdg/gtk-3.0'
23
'fontconfig: font defaults under /etc/xdg/fontconfig'
24
'fastfetch: system info defaults under /etc/xdg/fastfetch'
25
'btop: monitor defaults under /etc/xdg/btop'
26
'cava: visualizer defaults under /etc/xdg/cava'
27
'thunar: file manager defaults under /etc/xdg/Thunar'
28
'copyq: clipboard defaults under /etc/xdg/copyq'
29
'handlr: default-application handler under /etc/xdg/handlr'
30
'qt6ct: Qt6 platform-theme defaults under /etc/xdg/qt6ct'
31
'papirus-icon-theme: Papirus-Dark factory icons'
32
'orchis-theme: Orchis factory GTK themes'
33
'ttf-material-symbols-variable: Material Symbols shell icon font'
34
)
35
# Named "config" (not "$pkgname") so the checkout lands at
36
# "${srcdir}/config", matching _hornero_repo_root() below and keeping
37
# AUR chroot builds identical to local packaging/ builds.
38
source=("config::git+https://github.com/HorneroOS/config.git")
39
sha256sums=('SKIP')
40
41
# Locate the checkout root both when building from a local clone
42
# (makepkg run inside packaging/) and when built from an exported source.
43
_hornero_repo_root() {
44
if [[ -x "${startdir}/../scripts/materialize.sh" ]]; then
45
printf '%s' "${startdir}/.."
46
elif [[ -x "${srcdir}/config/scripts/materialize.sh" ]]; then
47
printf '%s' "${srcdir}/config"
48
else
49
echo "error: cannot locate scripts/materialize.sh" >&2
50
return 1
51
fi
52
}
53
54
# Resolve HORNERO_PROFILE to the profile manifest shipped by this package.
55
# Prints "<requested-name>:<manifest-relative-path>".
56
_hornero_profile_manifest() {
57
local profile="${HORNERO_PROFILE:-base}"
58
case "$profile" in
59
base|desktop|developer)
60
printf '%s:%s' "$profile" "profiles/base/profile.toml"
61
;;
62
*)
63
echo "error: unknown HORNERO_PROFILE='$profile' (want base, desktop, or developer)" >&2
64
return 1
65
;;
66
esac
67
}
68
69
package() {
70
local repo_root stage profile_info profile_name profile_src
71
repo_root="$(_hornero_repo_root)"
72
73
# Packaging-time personal-data check: fail the build on leaked
74
# identity or secrets (the no-identity guarantee).
75
bash "$repo_root/scripts/guard-personal-data.sh"
76
77
profile_info="$(_hornero_profile_manifest)"
78
profile_name="${profile_info%%:*}"
79
profile_src="${profile_info#*:}"
80
if [[ ! -f "$repo_root/$profile_src" ]]; then
81
echo "error: profile manifest missing: $profile_src" >&2
82
return 1
83
fi
84
85
# Reuse the canonical install mapping instead of duplicating it:
86
# materialize into a staging HOME, then rearrange that staged HOME
87
# into the system layout below. Per-application file lists live
88
# only in scripts/materialize.sh.
89
stage="${srcdir}/stage-home"
90
rm -rf "$stage"
91
mkdir -p "$stage"
92
bash "$repo_root/scripts/materialize.sh" --dest "$stage"
93
94
install -dm755 "$pkgdir/etc/xdg" "$pkgdir/usr/share/hornero/bin" \
95
"$pkgdir/usr/share/hornero/profiles/base"
96
97
# Staged per-user config -> system-wide XDG defaults. This loop is
98
# generic on purpose: new modules picked up by materialize.sh flow
99
# through here with no per-application list to keep in sync.
100
local entry base
101
for entry in "$stage"/.config/*; do
102
[[ -e "$entry" ]] || continue
103
base="$(basename "$entry")"
104
if [[ -d "$entry" ]]; then
105
mkdir -p "$pkgdir/etc/xdg/$base"
106
cp -a "$entry/." "$pkgdir/etc/xdg/$base/"
107
else
108
install -Dm644 "$entry" "$pkgdir/etc/xdg/$base"
109
fi
110
done
111
112
# GTK 2 skeleton (per-user ~/.gtkrc-2.0 upstream, system default here).
113
install -Dm644 "$stage/.gtkrc-2.0" "$pkgdir/etc/xdg/gtkrc-2.0"
114
115
# Factory shell default (path-contract row 6): content owned by
116
# HorneroOS/shell, packaged here to the system location. The user-root
117
# ~/.config/hornero/shell.json is owned by the shell runtime and is
118
# never materialized (see shell/README.md).
119
if [[ ! -f "$repo_root/shell/shell.default.json" ]]; then
120
echo "error: factory shell default missing: shell/shell.default.json" >&2
121
return 1
122
fi
123
install -Dm644 "$repo_root/shell/shell.default.json" \
124
"$pkgdir/etc/xdg/hornero/shell.json"
125
126
# Implementation libraries, CLI adapters, and theme recipes.
127
# Staged canonical hornero/* is the source; dots/* are back-compat symlinks.
128
mkdir -p "$pkgdir/usr/share/hornero/lib"
129
cp -a "$stage/.local/lib/dots" "$pkgdir/usr/share/hornero/lib/dots"
130
cp -a "$stage/.local/bin"/dots-* "$pkgdir/usr/share/hornero/bin/"
131
mkdir -p "$pkgdir/usr/share/hornero/themes"
132
cp -a "$stage/.local/share/hornero/themes/." "$pkgdir/usr/share/hornero/themes/"
133
134
# Brand identity (vector sources only, never binaries). This block owns
135
# /usr/share/hornero/brand exclusively. Coordination: config-gtk work owns
136
# desktop/gtk-theme* + /usr/share/themes — this block touches neither.
137
mkdir -p "$pkgdir/usr/share/hornero/brand"
138
cp -a "$stage/.local/share/hornero/brand/." "$pkgdir/usr/share/hornero/brand/"
139
# Real Hornero GTK themes (standard lookup path, discoverable by GTK 3+4
140
# with no extra env). Ownership: these three trees own /usr/share/themes
141
# exclusively — the recipe JSONs above own /usr/share/hornero/themes and
142
# no file is shipped twice. Dev-only sources (src/, build.sh, gallery.py)
143
# never enter the stage, so they cannot leak into the package.
144
for variant in Dark Light Pampa; do
145
if [[ ! -f "$stage/.local/share/themes/Hornero-$variant/gtk-3.0/gtk.css" ]] \
146
|| [[ ! -f "$stage/.local/share/themes/Hornero-$variant/gtk-4.0/gtk.css" ]] \
147
|| [[ ! -f "$stage/.local/share/themes/Hornero-$variant/index.theme" ]]; then
148
echo "error: staged Hornero-$variant theme tree incomplete" >&2
149
return 1
150
fi
151
done
152
mkdir -p "$pkgdir/usr/share/themes"
153
cp -a "$stage/.local/share/themes/Hornero-Dark" \
154
"$stage/.local/share/themes/Hornero-Light" \
155
"$stage/.local/share/themes/Hornero-Pampa" \
156
"$pkgdir/usr/share/themes/"
157
# Flagship wallpaper rasters (rendered by materialize.sh from vector
158
# sources): the apply chain resolves them under hornero/wallpapers/.
159
if [[ ! -f "$stage/.local/share/hornero/wallpapers/hornero-dark/hornero-dark-01.png" ]]; then
160
echo "error: staged flagship wallpapers missing (rsvg-convert at build time?)" >&2
161
return 1
162
fi
163
mkdir -p "$pkgdir/usr/share/hornero/wallpapers"
164
cp -a "$stage/.local/share/hornero/wallpapers/." \
165
"$pkgdir/usr/share/hornero/wallpapers/"
166
167
168
# Profile manifests plus the resolved selection record.
169
install -Dm644 "$repo_root/$profile_src" \
170
"$pkgdir/usr/share/hornero/profiles/base/profile.toml"
171
install -Dm644 "$repo_root/$profile_src" \
172
"$pkgdir/usr/share/hornero/profile.toml"
173
printf '%s\n' "$profile_name" > "$pkgdir/usr/share/hornero/HORNERO_PROFILE"
174
175
# Permissions mirror scripts/materialize.sh: dirs 755, files 644,
176
# with executables restored for CLI adapters and hypr helpers.
177
find "$pkgdir/etc/xdg" "$pkgdir/usr/share/hornero" "$pkgdir/usr/share/themes" \
178
-type d -exec chmod 755 {} +
179
find "$pkgdir/etc/xdg" "$pkgdir/usr/share/hornero" "$pkgdir/usr/share/themes" \
180
-type f -exec chmod 644 {} +
181
chmod 755 "$pkgdir"/usr/share/hornero/bin/dots-*
182
chmod 755 "$pkgdir"/etc/xdg/hypr/scripts/*.sh
183
184
# Ship the license alongside the payload for offline inspection.
185
install -Dm644 "$repo_root/LICENSE" \
186
"$pkgdir/usr/share/licenses/$pkgname/LICENSE"
187
}
188
Scan history
| Scanned at (UTC) | Severity | Rules |
|---|---|---|
| 2026-09-15 07:19:15 | Low | 1 |