hornero-config

LOW
maintainer ulises-jeremias 0 votes scanned 2026-09-15 07:19:15.107868
View on AUR
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
10pkgname=hornero-config
11pkgver=0.1.0
12pkgrel=1
13pkgdesc="HorneroOS curated desktop defaults (compositor, terminal, GTK, fonts, XDG handlers)"
14arch=('any')
15url="https://github.com/HorneroOS/config"
16license=('MIT')
17depends=('bash' 'git' 'python')
18makedepends=('librsvg')
19optdepends=(
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.
38source=("config::git+https://github.com/HorneroOS/config.git")
39sha256sums=('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
69package() {
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)SeverityRules
2026-09-15 07:19:15 Low 1

Report a package

Reports go to the AURWatch maintainer (one person) and are read by hand. No login required.

0 / 4000
Your suggestion