Compare commits
50 commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9bf071b406 | ||
|
|
d7a8f408b5 | ||
|
|
0aeb2c4b6b | ||
|
|
29a0070748 | ||
|
|
e471bfe83e | ||
|
|
7e97b5c04e | ||
|
|
20af38f826 | ||
|
|
b85e0e32fb | ||
|
|
7652d92b81 | ||
|
|
1f53377914 | ||
|
|
c46e348d6a | ||
|
|
31d0875791 | ||
|
|
3dd53f3fe6 | ||
|
|
4a16e18cf3 | ||
|
|
d484c8e933 | ||
|
|
a4af3aa938 | ||
|
|
9ea57d87c0 | ||
|
|
2a866144f4 | ||
|
|
122cd39cb1 | ||
|
|
356cc08dfe | ||
|
|
3a30cd004f | ||
|
|
23e60dffe0 | ||
|
|
b9544d517b | ||
|
|
12dbec5f32 | ||
|
|
de4e3b09ba | ||
|
|
2cbf46a836 | ||
|
|
6c3c33e4ae | ||
|
|
a7b3f70930 | ||
|
|
cbdeccd03e | ||
|
|
337d280f2b | ||
|
|
6135b2215d | ||
|
|
5a14288025 | ||
|
|
82c63bc4c4 | ||
|
|
0d550a1bda | ||
|
|
ed0eea3cb1 | ||
|
|
8e41d9fc2b | ||
|
|
30d94aa286 | ||
|
|
1bcd9588de | ||
|
|
12a8fa00bb | ||
|
|
0ee174e16e | ||
|
|
eda2c44c48 | ||
|
|
f98f21bbdd | ||
|
|
7ef51e8722 | ||
|
|
c259aa9e93 | ||
|
|
a2973b91eb | ||
|
|
769b6283e0 | ||
|
|
2c6feb4ea0 | ||
|
|
6f148e9a06 | ||
|
|
8682698402 | ||
|
|
c744e45c90 |
|
|
@ -1,35 +0,0 @@
|
||||||
name: Build and publish powerlevel10k
|
|
||||||
|
|
||||||
# Powerlevel10k (the BOS default zsh prompt) is AUR-only, so BOS maintains an
|
|
||||||
# in-house PKGBUILD and publishes the built package to the [breadway] repo.
|
|
||||||
# Builds gitstatus + libgit2 from source, so it needs cmake + zsh beyond base-devel.
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
paths:
|
|
||||||
- 'packaging/powerlevel10k/**'
|
|
||||||
workflow_dispatch:
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
powerlevel10k:
|
|
||||||
runs-on: [self-hosted, hestia]
|
|
||||||
container:
|
|
||||||
image: archlinux:latest
|
|
||||||
steps:
|
|
||||||
- name: Build and publish
|
|
||||||
env:
|
|
||||||
PUBLISH_TOKEN: ${{ secrets.REGISTRY_TOKEN }}
|
|
||||||
run: |
|
|
||||||
set -euo pipefail
|
|
||||||
pacman -Syu --noconfirm base-devel git cmake zsh
|
|
||||||
useradd -m builder
|
|
||||||
git config --global --add safe.directory '*'
|
|
||||||
git clone --depth 1 --branch "${GITHUB_REF_NAME}" \
|
|
||||||
"https://git.breadway.dev/${GITHUB_REPOSITORY}.git" /home/builder/src
|
|
||||||
chown -R builder:builder /home/builder/src
|
|
||||||
su builder -c "cd /home/builder/src/packaging/powerlevel10k && makepkg -f --noconfirm --nocheck"
|
|
||||||
PKG=$(find /home/builder/src/packaging/powerlevel10k -name '*.pkg.tar.zst' | head -1)
|
|
||||||
curl -fsS -X PUT \
|
|
||||||
-H "Authorization: token ${PUBLISH_TOKEN}" \
|
|
||||||
-H "Content-Type: application/octet-stream" \
|
|
||||||
--data-binary "@${PKG}" \
|
|
||||||
"https://git.breadway.dev/api/packages/Breadway/arch/os"
|
|
||||||
|
|
@ -1,207 +0,0 @@
|
||||||
name: Build and release ISO
|
|
||||||
|
|
||||||
# Builds the BOS ISO on the hestia self-hosted runner (native Arch container),
|
|
||||||
# downloads all bakery ecosystem binaries from their GitHub releases, compiles
|
|
||||||
# bread-theme from source, and uploads the resulting ISO to a Forgejo pre-release.
|
|
||||||
# A matching GitHub release is created that points to Forgejo for the download
|
|
||||||
# (GitHub releases cannot host files larger than 2 GB).
|
|
||||||
#
|
|
||||||
# Required secrets:
|
|
||||||
# RELEASE_TOKEN — Forgejo API token with write:repository scope
|
|
||||||
# MIRROR_TOKEN — GitHub personal access token with repo scope (already used by mirror.yml)
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
tags: ['v*']
|
|
||||||
workflow_dispatch:
|
|
||||||
inputs:
|
|
||||||
tag:
|
|
||||||
description: 'Git tag to build (e.g. v0.4.0)'
|
|
||||||
required: true
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
release-iso:
|
|
||||||
runs-on: [self-hosted, hestia]
|
|
||||||
container:
|
|
||||||
image: archlinux:latest
|
|
||||||
# --privileged: mkarchiso needs CAP_SYS_ADMIN for loop mounts + mknod
|
|
||||||
# --network=host: gives localhost:3002 access to Forgejo (avoids the
|
|
||||||
# public git.breadway.dev → Aegis → Tailscale round-trip for pacman)
|
|
||||||
options: --privileged --network=host
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Install build dependencies
|
|
||||||
run: |
|
|
||||||
pacman -Syu --noconfirm archiso curl python git rust
|
|
||||||
|
|
||||||
- name: Determine tag and version
|
|
||||||
id: vars
|
|
||||||
run: |
|
|
||||||
if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
|
|
||||||
TAG="${{ github.event.inputs.tag }}"
|
|
||||||
else
|
|
||||||
TAG="${{ github.ref_name }}"
|
|
||||||
fi
|
|
||||||
echo "tag=$TAG" >> "$GITHUB_OUTPUT"
|
|
||||||
echo "version=${TAG#v}" >> "$GITHUB_OUTPUT"
|
|
||||||
|
|
||||||
- name: Clone repository at tag
|
|
||||||
run: |
|
|
||||||
git clone --branch "${{ steps.vars.outputs.tag }}" --depth 1 \
|
|
||||||
"https://git.breadway.dev/${GITHUB_REPOSITORY}.git" /bos
|
|
||||||
|
|
||||||
- name: Download bakery ecosystem binaries
|
|
||||||
run: |
|
|
||||||
set -euo pipefail
|
|
||||||
mkdir -p /build-home/.local/bin \
|
|
||||||
/build-home/.local/state/bakery \
|
|
||||||
/build-home/.cache/bakery
|
|
||||||
|
|
||||||
# Fetch the canonical bakery index
|
|
||||||
curl -fsSL "https://dl.breadway.dev/index.json" \
|
|
||||||
-o /build-home/.cache/bakery/index.json
|
|
||||||
|
|
||||||
# Download each binary from dl.breadway.dev (canonical source; github_url
|
|
||||||
# is not always published for dev/patch releases) and generate the
|
|
||||||
# installed.json that bakery expects in ~/.local/state.
|
|
||||||
python3 << 'PYEOF'
|
|
||||||
import json, urllib.request, os
|
|
||||||
|
|
||||||
with open('/build-home/.cache/bakery/index.json') as f:
|
|
||||||
idx = json.load(f)
|
|
||||||
|
|
||||||
BIN_DIR = '/build-home/.local/bin'
|
|
||||||
installed = {}
|
|
||||||
|
|
||||||
for pkg_name, pkg in idx['packages'].items():
|
|
||||||
bins = []
|
|
||||||
for b in pkg['binaries']:
|
|
||||||
dest_name = b['name'].removesuffix('-x86_64')
|
|
||||||
dest = os.path.join(BIN_DIR, dest_name)
|
|
||||||
url = b['dl_url']
|
|
||||||
print(f' {dest_name} <- {url}', flush=True)
|
|
||||||
urllib.request.urlretrieve(url, dest)
|
|
||||||
os.chmod(dest, 0o755)
|
|
||||||
bins.append(dest_name)
|
|
||||||
|
|
||||||
# installed.json services field is a flat list of unit-name strings
|
|
||||||
services = [
|
|
||||||
(s['unit'] if isinstance(s, dict) else s)
|
|
||||||
for s in pkg.get('services', [])
|
|
||||||
]
|
|
||||||
installed[pkg_name] = {
|
|
||||||
'name': pkg_name,
|
|
||||||
'version': pkg['version'],
|
|
||||||
'binaries': bins,
|
|
||||||
'services': services,
|
|
||||||
'installed_at': '2024-01-01T00:00:00+00:00',
|
|
||||||
}
|
|
||||||
|
|
||||||
with open('/build-home/.local/state/bakery/installed.json', 'w') as f:
|
|
||||||
json.dump({'packages': installed}, f, indent=2)
|
|
||||||
print('installed.json written', flush=True)
|
|
||||||
PYEOF
|
|
||||||
|
|
||||||
- name: Build bread-theme from source
|
|
||||||
run: |
|
|
||||||
set -euo pipefail
|
|
||||||
# bread-theme is not in the bakery index; build it at the tag pinned
|
|
||||||
# in bos-settings/Cargo.toml so the CLI matches the library version.
|
|
||||||
THEME_TAG=$(grep 'bread-theme.*tag' /bos/bos-settings/Cargo.toml \
|
|
||||||
| grep -oP '"v[^"]+"' | tr -d '"')
|
|
||||||
echo "Building bread-theme @ $THEME_TAG"
|
|
||||||
git clone --branch "$THEME_TAG" --depth 1 \
|
|
||||||
https://github.com/Breadway/bread-ecosystem /bread-ecosystem
|
|
||||||
cd /bread-ecosystem
|
|
||||||
cargo build --release -p bread-theme
|
|
||||||
install -m 755 target/release/bread-theme /build-home/.local/bin/bread-theme
|
|
||||||
echo "bread-theme built OK"
|
|
||||||
|
|
||||||
- name: Build ISO
|
|
||||||
run: |
|
|
||||||
set -euo pipefail
|
|
||||||
mkdir -p /bos-work /bos-out
|
|
||||||
cd /bos
|
|
||||||
LAPTOP_HOME=/build-home \
|
|
||||||
WORK=/bos-work \
|
|
||||||
OUT=/bos-out \
|
|
||||||
CI_BUILD=1 \
|
|
||||||
bash build-local.sh
|
|
||||||
ls -lh /bos-out/*.iso
|
|
||||||
|
|
||||||
- name: Create Forgejo release and upload ISO
|
|
||||||
env:
|
|
||||||
FORGEJO_TOKEN: ${{ secrets.RELEASE_TOKEN }}
|
|
||||||
run: |
|
|
||||||
set -euo pipefail
|
|
||||||
TAG="${{ steps.vars.outputs.tag }}"
|
|
||||||
VERSION="${{ steps.vars.outputs.version }}"
|
|
||||||
ISO=$(ls /bos-out/*.iso | head -1)
|
|
||||||
ISO_NAME="bos-${VERSION}-x86_64.iso"
|
|
||||||
|
|
||||||
# Use an existing release for this tag if one exists (e.g. created
|
|
||||||
# manually or by a prior re-run), otherwise create a fresh one.
|
|
||||||
EXISTING=$(curl -sf \
|
|
||||||
-H "Authorization: token ${FORGEJO_TOKEN}" \
|
|
||||||
"http://localhost:3002/api/v1/repos/${GITHUB_REPOSITORY}/releases/tags/${TAG}" \
|
|
||||||
2>/dev/null || true)
|
|
||||||
RELEASE_ID=$(echo "${EXISTING}" | python3 -c \
|
|
||||||
"import json,sys; d=json.load(sys.stdin); print(d.get('id',''))" 2>/dev/null || true)
|
|
||||||
|
|
||||||
if [ -z "${RELEASE_ID}" ]; then
|
|
||||||
RELEASE=$(curl -fsS -X POST \
|
|
||||||
-H "Authorization: token ${FORGEJO_TOKEN}" \
|
|
||||||
-H "Content-Type: application/json" \
|
|
||||||
"http://localhost:3002/api/v1/repos/${GITHUB_REPOSITORY}/releases" \
|
|
||||||
-d "{
|
|
||||||
\"tag_name\": \"${TAG}\",
|
|
||||||
\"name\": \"BOS ${TAG}\",
|
|
||||||
\"prerelease\": false,
|
|
||||||
\"body\": \"ISO image attached below.\\n\\nSee the [README](https://github.com/Breadway/bos#testing-in-a-vm) for VM testing instructions.\"
|
|
||||||
}")
|
|
||||||
RELEASE_ID=$(echo "${RELEASE}" | python3 -c "import json,sys; print(json.load(sys.stdin)['id'])")
|
|
||||||
fi
|
|
||||||
echo "Using release ID: ${RELEASE_ID}"
|
|
||||||
|
|
||||||
# Remove any existing asset with the same name before uploading
|
|
||||||
ASSET_ID=$(curl -sf \
|
|
||||||
-H "Authorization: token ${FORGEJO_TOKEN}" \
|
|
||||||
"http://localhost:3002/api/v1/repos/${GITHUB_REPOSITORY}/releases/${RELEASE_ID}/assets" \
|
|
||||||
| python3 -c "
|
|
||||||
import json,sys
|
|
||||||
assets=json.load(sys.stdin)
|
|
||||||
match=[a['id'] for a in assets if a['name']=='${ISO_NAME}']
|
|
||||||
print(match[0] if match else '')
|
|
||||||
" 2>/dev/null || true)
|
|
||||||
|
|
||||||
if [ -n "${ASSET_ID}" ]; then
|
|
||||||
curl -fsS -X DELETE \
|
|
||||||
-H "Authorization: token ${FORGEJO_TOKEN}" \
|
|
||||||
"http://localhost:3002/api/v1/repos/${GITHUB_REPOSITORY}/releases/${RELEASE_ID}/assets/${ASSET_ID}"
|
|
||||||
echo "Removed existing ${ISO_NAME} asset"
|
|
||||||
fi
|
|
||||||
|
|
||||||
curl -fsS -X POST \
|
|
||||||
-H "Authorization: token ${FORGEJO_TOKEN}" \
|
|
||||||
-F "attachment=@${ISO};filename=${ISO_NAME}" \
|
|
||||||
"http://localhost:3002/api/v1/repos/${GITHUB_REPOSITORY}/releases/${RELEASE_ID}/assets"
|
|
||||||
echo "Uploaded: ${ISO_NAME}"
|
|
||||||
|
|
||||||
- name: Create GitHub release
|
|
||||||
env:
|
|
||||||
GH_TOKEN: ${{ secrets.MIRROR_TOKEN }}
|
|
||||||
run: |
|
|
||||||
set -euo pipefail
|
|
||||||
TAG="${{ steps.vars.outputs.tag }}"
|
|
||||||
VERSION="${{ steps.vars.outputs.version }}"
|
|
||||||
FORGEJO_URL="https://git.breadway.dev/${GITHUB_REPOSITORY}/releases/tag/${TAG}"
|
|
||||||
|
|
||||||
printf '**Download ISO:** %s\n\nGitHub releases cannot host files >2 GB; the `bos-%s-x86_64.iso` (~2.5 GB) is on Forgejo.\n\nSee the [README](https://github.com/Breadway/bos#testing-in-a-vm) for VM testing instructions.' \
|
|
||||||
"${FORGEJO_URL}" "${VERSION}" > /tmp/gh-release-notes.md
|
|
||||||
|
|
||||||
gh release create "${TAG}" \
|
|
||||||
--repo "Breadway/bos" \
|
|
||||||
--title "BOS ${TAG}" \
|
|
||||||
\
|
|
||||||
--notes-file /tmp/gh-release-notes.md \
|
|
||||||
2>/dev/null || echo "GitHub release already exists — skipping"
|
|
||||||
1
.gitignore
vendored
|
|
@ -27,7 +27,6 @@ secrets/
|
||||||
# archiso build artifacts (these are large and reproducible)
|
# archiso build artifacts (these are large and reproducible)
|
||||||
/iso-build/
|
/iso-build/
|
||||||
/iso-out/
|
/iso-out/
|
||||||
/out/
|
|
||||||
*.iso
|
*.iso
|
||||||
*.img
|
*.img
|
||||||
|
|
||||||
|
|
|
||||||
4
Cargo.lock
generated
|
|
@ -28,7 +28,7 @@ checksum = "b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "bos-settings"
|
name = "bos-settings"
|
||||||
version = "0.4.0"
|
version = "0.3.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"async-channel",
|
"async-channel",
|
||||||
"bread-theme",
|
"bread-theme",
|
||||||
|
|
@ -43,7 +43,7 @@ dependencies = [
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "bread-theme"
|
name = "bread-theme"
|
||||||
version = "0.2.3"
|
version = "0.2.3"
|
||||||
source = "git+https://github.com/Breadway/bread-ecosystem?tag=v0.2.8#77417d552130281ff787e07d52541eb25e9d533b"
|
source = "git+https://github.com/Breadway/bread-ecosystem?tag=v0.2.6#0c8c5c00e435fedff4f81e36d603424c153519a9"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"dirs",
|
"dirs",
|
||||||
"gtk4",
|
"gtk4",
|
||||||
|
|
|
||||||
|
Before Width: | Height: | Size: 42 KiB |
|
Before Width: | Height: | Size: 9.5 KiB |
|
Before Width: | Height: | Size: 20 KiB |
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "bos-settings"
|
name = "bos-settings"
|
||||||
version = "0.4.0"
|
version = "0.3.0"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
|
@ -8,7 +8,7 @@ gtk4 = { version = "0.11", features = ["v4_12"] }
|
||||||
glib = "0.22"
|
glib = "0.22"
|
||||||
# Shared ecosystem theming — bos-settings loads the same generated stylesheet as
|
# Shared ecosystem theming — bos-settings loads the same generated stylesheet as
|
||||||
# breadbar/breadbox/breadpad so the whole desktop looks consistent.
|
# breadbar/breadbox/breadpad so the whole desktop looks consistent.
|
||||||
bread-theme = { git = "https://github.com/Breadway/bread-ecosystem", tag = "v0.2.8", features = ["gtk"] }
|
bread-theme = { git = "https://github.com/Breadway/bread-ecosystem", tag = "v0.2.6", features = ["gtk"] }
|
||||||
serde = { version = "1", features = ["derive"] }
|
serde = { version = "1", features = ["derive"] }
|
||||||
serde_json = "1"
|
serde_json = "1"
|
||||||
toml = "0.8"
|
toml = "0.8"
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,7 @@ fn css_path() -> PathBuf {
|
||||||
crate::config::config_dir().join("breadbar/style.css")
|
crate::config::config_dir().join("breadbar/style.css")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
pub fn build() -> GBox {
|
pub fn build() -> GBox {
|
||||||
let path = css_path();
|
let path = css_path();
|
||||||
let existing_css = std::fs::read_to_string(&path).unwrap_or_default();
|
let existing_css = std::fs::read_to_string(&path).unwrap_or_default();
|
||||||
|
|
|
||||||
|
|
@ -50,10 +50,9 @@ fn stream_command(args: &[&str], log_buf: gtk4::TextBuffer) {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// Merge stderr into the channel too.
|
// Merge stderr into the channel too
|
||||||
// Both are Some because we spawned with Stdio::piped() above.
|
let stdout = child.stdout.take().unwrap();
|
||||||
let stdout = child.stdout.take().expect("stdout piped");
|
let stderr = child.stderr.take().unwrap();
|
||||||
let stderr = child.stderr.take().expect("stderr piped");
|
|
||||||
|
|
||||||
let tx2 = sender.clone();
|
let tx2 = sender.clone();
|
||||||
std::thread::spawn(move || {
|
std::thread::spawn(move || {
|
||||||
|
|
|
||||||
|
Before Width: | Height: | Size: 4 KiB After Width: | Height: | Size: 4 KiB |
|
|
@ -14,10 +14,7 @@
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
|
||||||
REPO="$(cd "$(dirname "$0")" && pwd)"
|
REPO="$(cd "$(dirname "$0")" && pwd)"
|
||||||
# WORK defaults to /tmp, but on hermes /tmp is a 16 GB tmpfs — a full xz build
|
WORK=/tmp/bos-work
|
||||||
# (uncompressed rootfs + squashfs + work copies) can exhaust it mid-build. Allow
|
|
||||||
# pointing it at the NVMe instead: WORK=/home/.../bos-work sudo ./build-local.sh
|
|
||||||
WORK="${WORK:-/tmp/bos-work}"
|
|
||||||
OUT="${OUT:-$REPO/out}"
|
OUT="${OUT:-$REPO/out}"
|
||||||
|
|
||||||
# Build against a throwaway copy of the profile so the working tree stays clean
|
# Build against a throwaway copy of the profile so the working tree stays clean
|
||||||
|
|
@ -25,15 +22,10 @@ OUT="${OUT:-$REPO/out}"
|
||||||
STAGE=/tmp/bos-iso-stage
|
STAGE=/tmp/bos-iso-stage
|
||||||
rm -rf "$STAGE" && cp -a "$REPO/iso" "$STAGE"
|
rm -rf "$STAGE" && cp -a "$REPO/iso" "$STAGE"
|
||||||
|
|
||||||
# Rewrite the [breadway] pacman repo URL to the fastest reachable address.
|
# The public git.breadway.dev URL is flaky/unreachable from hermes; Forgejo is
|
||||||
# CI_BUILD=1 — container runs on hestia with --network=host; localhost:3002 is direct
|
# directly reachable over Tailscale (hestia 100.66.238.26:3002). Only rewrites
|
||||||
# default — building on hermes; git.breadway.dev is flaky from there, use Tailscale
|
# the staged copy, never the committed pacman.conf.
|
||||||
# Only ever rewrites the staged copy, never the committed pacman.conf.
|
sed -i 's#https://git.breadway.dev/api/packages/Breadway/arch/os#http://100.66.238.26:3002/api/packages/Breadway/arch/os#' "$STAGE/pacman.conf"
|
||||||
if [ "${CI_BUILD:-0}" = "1" ]; then
|
|
||||||
sed -i 's#https://git.breadway.dev/api/packages/Breadway/arch/os#http://localhost:3002/api/packages/Breadway/arch/os#' "$STAGE/pacman.conf"
|
|
||||||
else
|
|
||||||
sed -i 's#https://git.breadway.dev/api/packages/Breadway/arch/os#http://100.66.238.26:3002/api/packages/Breadway/arch/os#' "$STAGE/pacman.conf"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "${FAST_BUILD:-0}" = "1" ]; then
|
if [ "${FAST_BUILD:-0}" = "1" ]; then
|
||||||
echo "=== FAST_BUILD: squashfs -> zstd level 6 ==="
|
echo "=== FAST_BUILD: squashfs -> zstd level 6 ==="
|
||||||
|
|
@ -49,7 +41,7 @@ grep airootfs_image_tool_options "$STAGE/profiledef.sh"
|
||||||
# created from skel (the live user and the installed user) then gets the same
|
# created from skel (the live user and the installed user) then gets the same
|
||||||
# versions `bakery list` reports here, fully offline. Copied at build time so the
|
# versions `bakery list` reports here, fully offline. Copied at build time so the
|
||||||
# binaries never bloat the git repo and always track the current bakery state.
|
# binaries never bloat the git repo and always track the current bakery state.
|
||||||
BREAD_BINS=(bakery bread breadd breadman breadbar breadbox breadbox-sync breadcrumbs breadpad breadpaper bread-theme)
|
BREAD_BINS=(bakery bread breadd breadman breadbar breadbox breadbox-sync breadcrumbs breadpad bread-theme)
|
||||||
LAPTOP_HOME="${LAPTOP_HOME:-$(getent passwd "${SUDO_USER:-$USER}" | cut -d: -f6)}"
|
LAPTOP_HOME="${LAPTOP_HOME:-$(getent passwd "${SUDO_USER:-$USER}" | cut -d: -f6)}"
|
||||||
BAKERY_BIN="$LAPTOP_HOME/.local/bin"
|
BAKERY_BIN="$LAPTOP_HOME/.local/bin"
|
||||||
BAKERY_STATE="$LAPTOP_HOME/.local/state/bakery"
|
BAKERY_STATE="$LAPTOP_HOME/.local/state/bakery"
|
||||||
|
|
|
||||||
|
Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 9 KiB |
|
|
@ -24,46 +24,23 @@ userdel -r liveuser 2>/dev/null || true
|
||||||
passwd -l root || true
|
passwd -l root || true
|
||||||
|
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
# Pacman keyring. The live medium's /etc/pacman.d/gnupg doesn't reliably carry
|
# Boot splash (Plymouth) — BOS logo + spinner instead of kernel text. Done
|
||||||
# over to the target (unpackfs may skip it / perms differ), leaving the installed
|
# BEFORE grub so grub.cfg picks up the new cmdline and the rebuilt initramfs.
|
||||||
# system unable to verify package signatures — the first `pacman -Syu` then dies
|
# All best-effort: if anything here fails the system still boots (just without
|
||||||
# with "keyring is not writable / required key missing". Initialise it here so a
|
# the splash) — the initramfs the initcpio module already built stays valid.
|
||||||
# fresh install can update out of the box. archlinux-keyring is already present;
|
|
||||||
# [breadway] is SigLevel=Never so it needs no key.
|
|
||||||
# ---------------------------------------------------------------------------
|
|
||||||
if command -v pacman-key &>/dev/null; then
|
|
||||||
pacman-key --init || echo "WARN: pacman-key --init failed"
|
|
||||||
pacman-key --populate archlinux || echo "WARN: pacman-key --populate failed"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# ---------------------------------------------------------------------------
|
|
||||||
# Initramfs HOOKS: microcode + plymouth. Edit HOOKS first, rebuild once below.
|
|
||||||
# microcode — embeds the (autodetect-pruned) CPU microcode into the initramfs
|
|
||||||
# so it loads at early boot. The live ISO embeds ucode the same way, so the
|
|
||||||
# ISO /boot carries no separate ucode image and bos-copy-kernel stages none
|
|
||||||
# onto the target — the installed initramfs must therefore carry it itself.
|
|
||||||
# Must sit AFTER `autodetect` so it's pruned to the running CPU's microcode.
|
|
||||||
# plymouth — the BOS boot splash. Only the udev `plymouth` hook exists (there
|
|
||||||
# is NO `sd-plymouth`), so always insert it after `udev`.
|
|
||||||
# All best-effort: a failure here still leaves a bootable initramfs.
|
|
||||||
# ---------------------------------------------------------------------------
|
|
||||||
if [[ -f /etc/mkinitcpio.conf ]]; then
|
|
||||||
if ! grep -qE '^HOOKS=.*\bmicrocode\b' /etc/mkinitcpio.conf; then
|
|
||||||
sed -i 's/^\(HOOKS=.*\bautodetect\b\)/\1 microcode/' /etc/mkinitcpio.conf \
|
|
||||||
|| echo "WARN: adding microcode hook failed"
|
|
||||||
fi
|
|
||||||
if command -v plymouth-set-default-theme &>/dev/null \
|
|
||||||
&& ! grep -qE '^HOOKS=.*\bplymouth\b' /etc/mkinitcpio.conf; then
|
|
||||||
sed -i 's/^\(HOOKS=.*\budev\b\)/\1 plymouth/' /etc/mkinitcpio.conf \
|
|
||||||
|| echo "WARN: adding plymouth hook failed"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# ---------------------------------------------------------------------------
|
|
||||||
# Boot splash (Plymouth) — BOS logo + spinner instead of kernel text. Set the
|
|
||||||
# theme + cmdline BEFORE grub so grub.cfg picks up the new cmdline.
|
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
if command -v plymouth-set-default-theme &>/dev/null; then
|
if command -v plymouth-set-default-theme &>/dev/null; then
|
||||||
|
# Ensure the plymouth hook is in HOOKS (plymouthcfg/initcpiocfg usually add it;
|
||||||
|
# this is the belt). Handle both the udev and systemd initramfs styles.
|
||||||
|
if ! grep -q 'plymouth' /etc/mkinitcpio.conf 2>/dev/null; then
|
||||||
|
if grep -qE '^HOOKS=.*\bsystemd\b' /etc/mkinitcpio.conf; then
|
||||||
|
sed -i 's/^\(HOOKS=.*\bsystemd\b\)/\1 sd-plymouth/' /etc/mkinitcpio.conf \
|
||||||
|
|| echo "WARN: adding sd-plymouth hook failed"
|
||||||
|
else
|
||||||
|
sed -i 's/^\(HOOKS=.*\budev\b\)/\1 plymouth/' /etc/mkinitcpio.conf \
|
||||||
|
|| echo "WARN: adding plymouth hook failed"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
# Clean boot: splash activates plymouth; hiding systemd status removes the
|
# Clean boot: splash activates plymouth; hiding systemd status removes the
|
||||||
# "[ OK ] Started ..." text (what looked like kernel output) even if the
|
# "[ OK ] Started ..." text (what looked like kernel output) even if the
|
||||||
# splash itself doesn't grab the display (e.g. in some VMs).
|
# splash itself doesn't grab the display (e.g. in some VMs).
|
||||||
|
|
@ -71,13 +48,10 @@ if command -v plymouth-set-default-theme &>/dev/null; then
|
||||||
sed -i 's/^\(GRUB_CMDLINE_LINUX_DEFAULT="\)/\1splash quiet vt.global_cursor_default=0 systemd.show_status=false rd.systemd.show_status=false rd.udev.log_level=3 /' \
|
sed -i 's/^\(GRUB_CMDLINE_LINUX_DEFAULT="\)/\1splash quiet vt.global_cursor_default=0 systemd.show_status=false rd.systemd.show_status=false rd.udev.log_level=3 /' \
|
||||||
/etc/default/grub || echo "WARN: adding splash cmdline failed"
|
/etc/default/grub || echo "WARN: adding splash cmdline failed"
|
||||||
fi
|
fi
|
||||||
plymouth-set-default-theme bos || echo "WARN: plymouth-set-default-theme failed"
|
# Set the BOS theme and rebuild the initramfs (-R) with the plymouth hook.
|
||||||
|
plymouth-set-default-theme -R bos || echo "WARN: plymouth-set-default-theme failed"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Rebuild every preset (default + fallback that bos-copy-kernel wrote) so the
|
|
||||||
# microcode + plymouth HOOKS above are actually baked into the initramfs.
|
|
||||||
mkinitcpio -P || echo "WARN: mkinitcpio -P failed"
|
|
||||||
|
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
# Install GRUB (UEFI). /boot now has the kernel + initramfs, and the mount
|
# Install GRUB (UEFI). /boot now has the kernel + initramfs, and the mount
|
||||||
# module has bind-mounted /proc /sys /dev /run + efivars into this chroot, so
|
# module has bind-mounted /proc /sys /dev /run + efivars into this chroot, so
|
||||||
|
|
|
||||||
|
|
@ -1,7 +0,0 @@
|
||||||
SHELL=/usr/bin/zsh
|
|
||||||
GROUP=users
|
|
||||||
HOME=/home
|
|
||||||
INACTIVE=-1
|
|
||||||
EXPIRE=
|
|
||||||
SKEL=/etc/skel
|
|
||||||
CREATE_MAIL_SPOOL=no
|
|
||||||
|
|
@ -35,8 +35,7 @@ Include = /etc/pacman.d/mirrorlist
|
||||||
#
|
#
|
||||||
# Forgejo signs the repo db with a key pacman can't look up, so TrustAll
|
# Forgejo signs the repo db with a key pacman can't look up, so TrustAll
|
||||||
# fails. SigLevel = Never skips verification (acceptable for this private
|
# fails. SigLevel = Never skips verification (acceptable for this private
|
||||||
# repo over TLS). Future improvement: import Forgejo's signing key and
|
# repo over TLS). TODO: import Forgejo's signing key + SigLevel = Required.
|
||||||
# switch to SigLevel = Required for full package verification.
|
|
||||||
# -----------------------------------------------------------------------
|
# -----------------------------------------------------------------------
|
||||||
# The section name must match Forgejo's served db filename
|
# The section name must match Forgejo's served db filename
|
||||||
# ({owner}.{group}.{domain}.db) — pacman fetches "<section>.db" from Server.
|
# ({owner}.{group}.{domain}.db) — pacman fetches "<section>.db" from Server.
|
||||||
|
|
|
||||||
|
|
@ -90,7 +90,6 @@ end
|
||||||
-- ---------------------------------------------------------------------------
|
-- ---------------------------------------------------------------------------
|
||||||
hl.window_rule({ name = "bos-keybinds", match = { class = "^(bos-keybinds)$" }, float = true, size = { 760, 720 } })
|
hl.window_rule({ name = "bos-keybinds", match = { class = "^(bos-keybinds)$" }, float = true, size = { 760, 720 } })
|
||||||
hl.window_rule({ name = "bos-welcome", match = { class = "^(bos-welcome)$" }, float = true, size = { 700, 560 } })
|
hl.window_rule({ name = "bos-welcome", match = { class = "^(bos-welcome)$" }, float = true, size = { 700, 560 } })
|
||||||
hl.window_rule({ name = "bos-netsetup", match = { class = "^(bos-netsetup)$" }, float = true, size = { 700, 560 } })
|
|
||||||
|
|
||||||
-- ---------------------------------------------------------------------------
|
-- ---------------------------------------------------------------------------
|
||||||
-- Environment (vendor-neutral; no GPU-specific vars so it works on Intel/AMD).
|
-- Environment (vendor-neutral; no GPU-specific vars so it works on Intel/AMD).
|
||||||
|
|
@ -204,12 +203,7 @@ hl.on("hyprland.start", function()
|
||||||
"awww-daemon",
|
"awww-daemon",
|
||||||
-- set the default wallpaper once the daemon is up (retry until ready)
|
-- set the default wallpaper once the daemon is up (retry until ready)
|
||||||
[[bash -c 'until awww img /usr/share/backgrounds/bos/bread-background.png 2>/dev/null; do sleep 0.3; done']],
|
[[bash -c 'until awww img /usr/share/backgrounds/bos/bread-background.png 2>/dev/null; do sleep 0.3; done']],
|
||||||
-- breadd runs as a systemd user service (~/.config/systemd/user/breadd.service,
|
"breadd",
|
||||||
-- enabled in skel). It autostarts at login but before Hyprland exists, so
|
|
||||||
-- push the compositor's Wayland env into the user manager and restart breadd
|
|
||||||
-- to pick it up — that's how it gets HYPRLAND_INSTANCE_SIGNATURE to talk to Hyprland.
|
|
||||||
"dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP HYPRLAND_INSTANCE_SIGNATURE",
|
|
||||||
"systemctl --user restart breadd",
|
|
||||||
"breadbar",
|
"breadbar",
|
||||||
"breadbox-sync",
|
"breadbox-sync",
|
||||||
"hypridle",
|
"hypridle",
|
||||||
|
|
|
||||||
|
|
@ -1,21 +0,0 @@
|
||||||
[Unit]
|
|
||||||
Description=Bread Runtime Daemon
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
Type=simple
|
|
||||||
# %h = the user's home — works for any account created from this skel.
|
|
||||||
ExecStart=%h/.local/bin/breadd
|
|
||||||
Restart=on-failure
|
|
||||||
RestartSec=2
|
|
||||||
UMask=0077
|
|
||||||
RuntimeDirectory=bread
|
|
||||||
RuntimeDirectoryMode=0700
|
|
||||||
# Keep /run/user/<uid>/bread across restarts so the shared theme.css that
|
|
||||||
# bread-theme writes there (and the daemon socket) survive a `restart breadd`.
|
|
||||||
RuntimeDirectoryPreserve=yes
|
|
||||||
KillSignal=SIGTERM
|
|
||||||
TimeoutStopSec=5
|
|
||||||
Environment=RUST_LOG=info
|
|
||||||
|
|
||||||
[Install]
|
|
||||||
WantedBy=default.target
|
|
||||||
|
|
@ -1 +0,0 @@
|
||||||
../breadd.service
|
|
||||||
|
|
@ -1,15 +1,4 @@
|
||||||
# BOS default zsh config — Powerlevel10k prompt + plugins + pywal palette.
|
# BOS default zsh config — quality-of-life defaults, easy to extend.
|
||||||
#
|
|
||||||
# Mirrors the BOS dev shell, but sources plugins from the distro packages
|
|
||||||
# (/usr/share/zsh/...) instead of oh-my-zsh, so there's no framework to manage.
|
|
||||||
# Customise the prompt with `p10k configure` (rewrites ~/.p10k.zsh).
|
|
||||||
|
|
||||||
# Enable Powerlevel10k instant prompt. Should stay close to the top of ~/.zshrc.
|
|
||||||
# Initialization code that may require console input (password prompts, [y/n]
|
|
||||||
# confirmations, etc.) must go above this block; everything else may go below.
|
|
||||||
if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then
|
|
||||||
source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# History
|
# History
|
||||||
HISTFILE=~/.zsh_history
|
HISTFILE=~/.zsh_history
|
||||||
|
|
@ -22,21 +11,10 @@ autoload -Uz compinit && compinit
|
||||||
zstyle ':completion:*' menu select
|
zstyle ':completion:*' menu select
|
||||||
zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}'
|
zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}'
|
||||||
|
|
||||||
# Emacs-style key bindings
|
# Key bindings (emacs style + common extras)
|
||||||
bindkey -e
|
bindkey -e
|
||||||
|
bindkey '^[[A' history-search-backward
|
||||||
# Prompt — Powerlevel10k (republished to [breadway] as zsh-theme-powerlevel10k).
|
bindkey '^[[B' history-search-forward
|
||||||
source /usr/share/zsh-theme-powerlevel10k/powerlevel10k.zsh-theme
|
|
||||||
|
|
||||||
# Plugins (order matters: syntax-highlighting must be sourced LAST).
|
|
||||||
ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE='fg=60'
|
|
||||||
source /usr/share/zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh 2>/dev/null
|
|
||||||
source /usr/share/zsh/plugins/zsh-history-substring-search/zsh-history-substring-search.zsh 2>/dev/null
|
|
||||||
source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh 2>/dev/null
|
|
||||||
|
|
||||||
# history-substring-search: ↑/↓ search history by the typed prefix.
|
|
||||||
bindkey '^[[A' history-substring-search-up
|
|
||||||
bindkey '^[[B' history-substring-search-down
|
|
||||||
|
|
||||||
# fzf — fuzzy history search on Ctrl+R, fuzzy file find on Ctrl+T
|
# fzf — fuzzy history search on Ctrl+R, fuzzy file find on Ctrl+T
|
||||||
if command -v fzf &>/dev/null; then
|
if command -v fzf &>/dev/null; then
|
||||||
|
|
@ -76,18 +54,12 @@ alias free='free -h'
|
||||||
alias grep='grep --color=auto'
|
alias grep='grep --color=auto'
|
||||||
alias ip='ip --color=auto'
|
alias ip='ip --color=auto'
|
||||||
|
|
||||||
# Updates — bos-update runs both channels (pacman + bakery). pacman aliased to
|
# bakery / bread
|
||||||
# sudo so `pacman -Syu` etc. just work.
|
alias update='bakery update'
|
||||||
alias update='bos-update'
|
|
||||||
alias pacman='sudo pacman'
|
|
||||||
|
|
||||||
# ~/.local/bin holds the bread* binaries baked in at build time.
|
# Prompt — simple and fast (no starship dep)
|
||||||
export PATH="$HOME/.local/bin:$PATH"
|
autoload -Uz vcs_info
|
||||||
|
precmd() { vcs_info }
|
||||||
# Powerlevel10k prompt configuration.
|
zstyle ':vcs_info:git:*' formats ' (%b)'
|
||||||
[[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh
|
setopt PROMPT_SUBST
|
||||||
|
PROMPT='%F{cyan}%~%f%F{yellow}${vcs_info_msg_0_}%f %(?.%F{green}.%F{red})❯%f '
|
||||||
# Import pywal colour palette (drives the terminal colours from the wallpaper).
|
|
||||||
if [ -f "$HOME/.cache/wal/sequences" ]; then
|
|
||||||
cat "$HOME/.cache/wal/sequences"
|
|
||||||
fi
|
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@ set -e
|
||||||
# (breadd + breadbar + breadbox + keybinds) — proper live-media functionality,
|
# (breadd + breadbar + breadbox + keybinds) — proper live-media functionality,
|
||||||
# not an installer kiosk.
|
# not an installer kiosk.
|
||||||
if ! id liveuser &>/dev/null; then
|
if ! id liveuser &>/dev/null; then
|
||||||
useradd -m -s /usr/bin/zsh liveuser
|
useradd -m -s /bin/bash liveuser
|
||||||
for g in wheel video input audio storage power; do
|
for g in wheel video input audio storage power; do
|
||||||
getent group "$g" >/dev/null 2>&1 && gpasswd -a liveuser "$g" >/dev/null || true
|
getent group "$g" >/dev/null 2>&1 && gpasswd -a liveuser "$g" >/dev/null || true
|
||||||
done
|
done
|
||||||
|
|
|
||||||
|
|
@ -1,32 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
# bos-update — update all of BOS in one go.
|
|
||||||
#
|
|
||||||
# BOS packages come from two channels, so a full update touches both:
|
|
||||||
# 1. pacman — Arch base/desktop + the [breadway] repo (bos-settings, etc.).
|
|
||||||
# Every transaction is snapshotted by snap-pac, so you can roll
|
|
||||||
# back from the GRUB "snapshots" submenu or BOS Settings.
|
|
||||||
# 2. bakery — the bread ecosystem apps in ~/.local/bin (bread, breadbar,
|
|
||||||
# breadbox, breadcrumbs, breadpad, breadman, bread-theme).
|
|
||||||
#
|
|
||||||
# Best-effort: a failure in one channel doesn't abort the other.
|
|
||||||
set -uo pipefail
|
|
||||||
|
|
||||||
bold() { printf '\033[1m%s\033[0m\n' "$1"; }
|
|
||||||
|
|
||||||
bold "==> System packages (pacman -Syu)"
|
|
||||||
if command -v pacman >/dev/null; then
|
|
||||||
sudo pacman -Syu || echo "WARN: pacman update failed"
|
|
||||||
else
|
|
||||||
echo "pacman not found; skipping"
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo
|
|
||||||
bold "==> Bread ecosystem (bakery update --all)"
|
|
||||||
if command -v bakery >/dev/null; then
|
|
||||||
bakery update --all || echo "WARN: bakery update failed"
|
|
||||||
else
|
|
||||||
echo "bakery not found; skipping"
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo
|
|
||||||
bold "==> BOS is up to date."
|
|
||||||
|
|
@ -10,25 +10,6 @@ set -u
|
||||||
marker="${XDG_CONFIG_HOME:-$HOME/.config}/bos/.welcomed"
|
marker="${XDG_CONFIG_HOME:-$HOME/.config}/bos/.welcomed"
|
||||||
[[ -f "$marker" ]] && exit 0
|
[[ -f "$marker" ]] && exit 0
|
||||||
mkdir -p "$(dirname "$marker")"
|
mkdir -p "$(dirname "$marker")"
|
||||||
|
|
||||||
# First-run network check. A fresh install usually boots with no connection
|
|
||||||
# (Wi-Fi isn't configured during install), and the first `bos-update`/pacman run
|
|
||||||
# then fails with confusing DNS/"could not resolve host" errors. If
|
|
||||||
# NetworkManager reports we're not fully online, open nmtui so the user can join
|
|
||||||
# a network before anything else. Best-effort: missing nmcli/nmtui/kitty, or the
|
|
||||||
# user quitting nmtui, must never block the welcome below.
|
|
||||||
if command -v nmcli &>/dev/null; then
|
|
||||||
conn="$(nmcli networking connectivity check 2>/dev/null)"
|
|
||||||
if [[ "$conn" != "full" ]]; then
|
|
||||||
notify-send -u normal "BOS" "No internet yet — opening network setup so updates work." 2>/dev/null || true
|
|
||||||
if command -v nmtui &>/dev/null; then
|
|
||||||
kitty --class bos-netsetup --title "Connect to a network" -- nmtui connect 2>/dev/null || true
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Mark welcomed only now, so an interrupted/aborted network step still re-prompts
|
|
||||||
# next login rather than being suppressed forever.
|
|
||||||
touch "$marker"
|
touch "$marker"
|
||||||
|
|
||||||
exec kitty --class bos-welcome --title "Welcome to BOS" -- less -R /usr/share/bos/welcome.txt
|
exec kitty --class bos-welcome --title "Welcome to BOS" -- less -R /usr/share/bos/welcome.txt
|
||||||
|
|
|
||||||
|
Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 6.2 KiB |
|
|
@ -1,5 +0,0 @@
|
||||||
title Bread OS install medium (copy to RAM, UEFI)
|
|
||||||
sort-key 015
|
|
||||||
linux /%INSTALL_DIR%/boot/%ARCH%/vmlinuz-linux
|
|
||||||
initrd /%INSTALL_DIR%/boot/%ARCH%/initramfs-linux.img
|
|
||||||
options archisobasedir=%INSTALL_DIR% archisosearchuuid=%ARCHISO_UUID% copytoram=y
|
|
||||||
|
|
@ -139,13 +139,10 @@ file-roller
|
||||||
|
|
||||||
# GUI applications a general desktop is expected to have out of the box.
|
# GUI applications a general desktop is expected to have out of the box.
|
||||||
# gnome-text-editor: graphical editor (terminal editors aside); gnome-calculator:
|
# gnome-text-editor: graphical editor (terminal editors aside); gnome-calculator:
|
||||||
# calculator; loupe: Wayland-native image viewer (default for image files);
|
# calculator; loupe: Wayland-native image viewer (default for image files).
|
||||||
# zathura(+pdf-mupdf): lightweight Wayland PDF viewer (BOS had no PDF reader).
|
|
||||||
gnome-text-editor
|
gnome-text-editor
|
||||||
gnome-calculator
|
gnome-calculator
|
||||||
loupe
|
loupe
|
||||||
zathura
|
|
||||||
zathura-pdf-mupdf
|
|
||||||
# Media player — BOS ships gstreamer codecs but otherwise has no player app.
|
# Media player — BOS ships gstreamer codecs but otherwise has no player app.
|
||||||
vlc
|
vlc
|
||||||
# Web browser (served from the [Breadway] repo; AUR zen-browser-bin republished
|
# Web browser (served from the [Breadway] repo; AUR zen-browser-bin republished
|
||||||
|
|
@ -193,12 +190,6 @@ plymouth
|
||||||
gst-plugins-good
|
gst-plugins-good
|
||||||
gst-plugins-bad
|
gst-plugins-bad
|
||||||
gst-plugins-ugly
|
gst-plugins-ugly
|
||||||
# Hardware video acceleration (VA-API) — lets the AMD/Intel GPU decode H.264/HEVC/
|
|
||||||
# VP9 in mpv, VLC, and browsers instead of the CPU (cooler, longer battery on
|
|
||||||
# video). The open Mesa VA-API backend (radeonsi_drv_video.so etc.) now ships in
|
|
||||||
# the `mesa` package itself (pulled in already), so only libva (deps) + the
|
|
||||||
# `vainfo` verification tool need listing here.
|
|
||||||
libva-utils
|
|
||||||
# GUI audio mixer — useful when output device needs manual switching.
|
# GUI audio mixer — useful when output device needs manual switching.
|
||||||
pavucontrol
|
pavucontrol
|
||||||
|
|
||||||
|
|
@ -216,15 +207,8 @@ man-pages
|
||||||
less
|
less
|
||||||
|
|
||||||
# Base CLI tools every install should have.
|
# Base CLI tools every install should have.
|
||||||
# Shell — zsh with the same prompt + plugins as the dev laptop. Powerlevel10k is
|
# Shell
|
||||||
# AUR-only, so it's republished to [breadway] (see packaging/powerlevel10k). The
|
|
||||||
# three plugins come from the official repos; skel/.zshrc sources them in order
|
|
||||||
# (autosuggestions → history-substring-search → syntax-highlighting LAST).
|
|
||||||
zsh
|
zsh
|
||||||
zsh-theme-powerlevel10k
|
|
||||||
zsh-autosuggestions
|
|
||||||
zsh-history-substring-search
|
|
||||||
zsh-syntax-highlighting
|
|
||||||
# Editors
|
# Editors
|
||||||
nano
|
nano
|
||||||
micro
|
micro
|
||||||
|
|
|
||||||
|
|
@ -35,8 +35,7 @@ Include = /etc/pacman.d/mirrorlist
|
||||||
#
|
#
|
||||||
# Forgejo signs the repo db with a key pacman can't look up, so TrustAll
|
# Forgejo signs the repo db with a key pacman can't look up, so TrustAll
|
||||||
# fails. SigLevel = Never skips verification (acceptable for this private
|
# fails. SigLevel = Never skips verification (acceptable for this private
|
||||||
# repo over TLS). Future improvement: import Forgejo's signing key and
|
# repo over TLS). TODO: import Forgejo's signing key + SigLevel = Required.
|
||||||
# switch to SigLevel = Required for full package verification.
|
|
||||||
# -----------------------------------------------------------------------
|
# -----------------------------------------------------------------------
|
||||||
# The section name must match Forgejo's served db filename
|
# The section name must match Forgejo's served db filename
|
||||||
# ({owner}.{group}.{domain}.db) — pacman fetches "<section>.db" from Server.
|
# ({owner}.{group}.{domain}.db) — pacman fetches "<section>.db" from Server.
|
||||||
|
|
|
||||||
|
|
@ -23,5 +23,4 @@ file_permissions=(
|
||||||
["/usr/local/bin/bos-session"]="0:0:755"
|
["/usr/local/bin/bos-session"]="0:0:755"
|
||||||
["/usr/local/bin/bos-keybinds"]="0:0:755"
|
["/usr/local/bin/bos-keybinds"]="0:0:755"
|
||||||
["/usr/local/bin/bos-welcome"]="0:0:755"
|
["/usr/local/bin/bos-welcome"]="0:0:755"
|
||||||
["/usr/local/bin/bos-update"]="0:0:755"
|
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -8,19 +8,6 @@ LINUX /%INSTALL_DIR%/boot/%ARCH%/vmlinuz-linux
|
||||||
INITRD /%INSTALL_DIR%/boot/%ARCH%/initramfs-linux.img
|
INITRD /%INSTALL_DIR%/boot/%ARCH%/initramfs-linux.img
|
||||||
APPEND archisobasedir=%INSTALL_DIR% archisosearchuuid=%ARCHISO_UUID%
|
APPEND archisobasedir=%INSTALL_DIR% archisosearchuuid=%ARCHISO_UUID%
|
||||||
|
|
||||||
# Copy-to-RAM boot option — loads airootfs.sfs entirely into RAM, so the
|
|
||||||
# installer reads from memory rather than a possibly-flaky USB (avoids SquashFS
|
|
||||||
# read errors during unpackfs). Needs enough RAM for the image (~3 GB).
|
|
||||||
LABEL archtoram
|
|
||||||
TEXT HELP
|
|
||||||
Boot Bread OS, copying the image into RAM first.
|
|
||||||
More reliable installs from USB; needs a few GB of RAM.
|
|
||||||
ENDTEXT
|
|
||||||
MENU LABEL Bread OS install medium (%ARCH%, BIOS) ^copy to RAM
|
|
||||||
LINUX /%INSTALL_DIR%/boot/%ARCH%/vmlinuz-linux
|
|
||||||
INITRD /%INSTALL_DIR%/boot/%ARCH%/initramfs-linux.img
|
|
||||||
APPEND archisobasedir=%INSTALL_DIR% archisosearchuuid=%ARCHISO_UUID% copytoram=y
|
|
||||||
|
|
||||||
# Accessibility boot option
|
# Accessibility boot option
|
||||||
LABEL archspeech
|
LABEL archspeech
|
||||||
TEXT HELP
|
TEXT HELP
|
||||||
|
|
|
||||||
|
|
@ -1,105 +0,0 @@
|
||||||
# BOS in-house rebuild of zsh-theme-powerlevel10k (AUR-only upstream).
|
|
||||||
# Republished to [breadway] so the ISO can pull the BOS default prompt via pacman
|
|
||||||
# (same pattern as bibata / zen-browser-bin). Upstream maintainer header kept below.
|
|
||||||
# Maintainer: Mark Wagie <mark dot wagie at proton dot me>
|
|
||||||
# Contributor: Christian Rebischke <chris.rebischke@archlinux.org>
|
|
||||||
# Contributor: Jeff Henson <jeff@henson.io>
|
|
||||||
# Contributor: Ron Asimi <ron dot asimi at gmail dot com>
|
|
||||||
# Contributor: Roman Perepelitsa <roman.perepelitsa@gmail.com>
|
|
||||||
pkgname=zsh-theme-powerlevel10k
|
|
||||||
# Whenever pkgver is updated, _libgit2ver below must also be updated.
|
|
||||||
pkgver=1.20.17 ## see P9K_VERSION in internal/p10k.zsh
|
|
||||||
_libgit2ver="tag-2ecf33948a4df9ef45a66c68b8ef24a5e60eaac6"
|
|
||||||
pkgrel=1
|
|
||||||
epoch=1
|
|
||||||
pkgdesc="Powerlevel10k is a theme for Zsh. It emphasizes speed, flexibility and out-of-the-box experience."
|
|
||||||
arch=('x86_64' 'aarch64')
|
|
||||||
url='https://github.com/romkatv/powerlevel10k'
|
|
||||||
license=('MIT')
|
|
||||||
depends=(
|
|
||||||
'glibc'
|
|
||||||
'zsh'
|
|
||||||
)
|
|
||||||
makedepends=(
|
|
||||||
'git'
|
|
||||||
'cmake'
|
|
||||||
)
|
|
||||||
optdepends=(
|
|
||||||
# It works well with Nerd Fonts, Source Code Pro, Font Awesome, Powerline,
|
|
||||||
# and even the default system fonts. The full choice of style options is
|
|
||||||
# available only when using Nerd Fonts.
|
|
||||||
'ttf-meslo-nerd-font-powerlevel10k: recommended font'
|
|
||||||
'powerline-fonts: patched fonts for powerline'
|
|
||||||
'ttf-font-nerd: full choice of style options'
|
|
||||||
)
|
|
||||||
replaces=('zsh-theme-powerlevel9k')
|
|
||||||
_commit=9253fb1c5034410c43a0c681ff8294181c54016c
|
|
||||||
|
|
||||||
# _libgit2ver depends on pkgver. They must be updated together. See libgit2_version in:
|
|
||||||
# https://raw.githubusercontent.com/romkatv/powerlevel10k/v${pkgver}/gitstatus/build.info
|
|
||||||
source=(
|
|
||||||
"git+https://github.com/romkatv/powerlevel10k.git#commit=${_commit}"
|
|
||||||
# "powerlevel10k-${pkgver}.tar.gz::https://github.com/romkatv/powerlevel10k/archive/v${pkgver}.tar.gz"
|
|
||||||
# "https://github.com/romkatv/powerlevel10k/releases/download/v$pkgver/powerlevel10k-$pkgver.tar.gz.asc"
|
|
||||||
"libgit2-${_libgit2ver}.tar.gz::https://github.com/romkatv/libgit2/archive/${_libgit2ver}.tar.gz")
|
|
||||||
sha256sums=('f0edc2cc5bfcdfcf3b94f10597c252873567a990e651d04059c887046fba6701'
|
|
||||||
'4ce11d71ee576dbbc410b9fa33a9642809cc1fa687b315f7c23eeb825b251e93')
|
|
||||||
#validpgpkeys=('8B060F8B9EB395614A669F2A90ACE942EB90C3DD') # Roman Perepelitsa <roman.perepelitsa@gmail.com>
|
|
||||||
|
|
||||||
build() {
|
|
||||||
cd "libgit2-${_libgit2ver}"
|
|
||||||
local cmake_options=(
|
|
||||||
-W no-dev
|
|
||||||
-D CMAKE_BUILD_TYPE='None'
|
|
||||||
-D ZERO_NSEC='ON'
|
|
||||||
-D THREADSAFE='ON'
|
|
||||||
-D USE_BUNDLED_ZLIB='ON'
|
|
||||||
-D REGEX_BACKEND='builtin'
|
|
||||||
-D USE_HTTP_PARSER='builtin'
|
|
||||||
-D USE_SSH='OFF'
|
|
||||||
-D USE_HTTPS='OFF'
|
|
||||||
-D BUILD_CLAR='OFF'
|
|
||||||
-D USE_GSSAPI='OFF'
|
|
||||||
-D USE_NTLMCLIENT='OFF'
|
|
||||||
-D BUILD_SHARED_LIBS='OFF'
|
|
||||||
-D ENABLE_REPRODUCIBLE_BUILDS='ON'
|
|
||||||
)
|
|
||||||
cmake "${cmake_options[@]}" .
|
|
||||||
make
|
|
||||||
|
|
||||||
# build gitstatus
|
|
||||||
cd "$srcdir/powerlevel10k/gitstatus"
|
|
||||||
export CXXFLAGS+=" -I${srcdir}/libgit2-${_libgit2ver}/include -DGITSTATUS_ZERO_NSEC -D_GNU_SOURCE"
|
|
||||||
export LDFLAGS+=" -L${srcdir}/libgit2-${_libgit2ver}"
|
|
||||||
make
|
|
||||||
}
|
|
||||||
|
|
||||||
package() {
|
|
||||||
cd powerlevel10k
|
|
||||||
find . -type f -exec install -D '{}' "$pkgdir/usr/share/${pkgname}/{}" ';'
|
|
||||||
|
|
||||||
install -d "${pkgdir}/usr/share/licenses/${pkgname}"
|
|
||||||
ln -s "/usr/share/${pkgname}/LICENSE" "${pkgdir}/usr/share/licenses/${pkgname}"
|
|
||||||
|
|
||||||
# delete unnecessary files. See also: https://bugs.archlinux.org/task/66737
|
|
||||||
rm -r "${pkgdir}/usr/share/${pkgname}/.git"
|
|
||||||
rm -r "${pkgdir}/usr/share/${pkgname}/gitstatus/deps/"
|
|
||||||
rm -r "${pkgdir}/usr/share/${pkgname}/gitstatus/obj"
|
|
||||||
rm -r "${pkgdir}/usr/share/${pkgname}/gitstatus/src/"
|
|
||||||
rm -r "${pkgdir}/usr/share/${pkgname}/gitstatus/.vscode/"
|
|
||||||
rm "${pkgdir}/usr/share/${pkgname}/.gitattributes"
|
|
||||||
rm "${pkgdir}/usr/share/${pkgname}/.gitignore"
|
|
||||||
rm "${pkgdir}/usr/share/${pkgname}/Makefile"
|
|
||||||
rm "${pkgdir}/usr/share/${pkgname}/gitstatus/build"
|
|
||||||
rm "${pkgdir}/usr/share/${pkgname}/gitstatus/Makefile"
|
|
||||||
rm "${pkgdir}/usr/share/${pkgname}/gitstatus/mbuild"
|
|
||||||
rm "${pkgdir}/usr/share/${pkgname}/gitstatus/.clang-format"
|
|
||||||
rm "${pkgdir}/usr/share/${pkgname}/gitstatus/.gitignore"
|
|
||||||
rm "${pkgdir}/usr/share/${pkgname}/gitstatus/.gitattributes"
|
|
||||||
rm "${pkgdir}/usr/share/${pkgname}/gitstatus/usrbin/.gitkeep"
|
|
||||||
|
|
||||||
cd "${pkgdir}/usr/share/${pkgname}"
|
|
||||||
for file in *.zsh-theme internal/*.zsh gitstatus/*.zsh gitstatus/install; do
|
|
||||||
zsh -fc "emulate zsh -o no_aliases && zcompile -R -- $file.zwc $file"
|
|
||||||
done
|
|
||||||
}
|
|
||||||