Compare commits
15 commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8e41d9fc2b | ||
|
|
30d94aa286 | ||
|
|
1bcd9588de | ||
|
|
12a8fa00bb | ||
|
|
0ee174e16e | ||
|
|
eda2c44c48 | ||
|
|
f98f21bbdd | ||
|
|
7ef51e8722 | ||
|
|
c259aa9e93 | ||
|
|
a2973b91eb | ||
|
|
769b6283e0 | ||
|
|
2c6feb4ea0 | ||
|
|
6f148e9a06 | ||
|
|
8682698402 | ||
|
|
c744e45c90 |
25 changed files with 306 additions and 35 deletions
21
.forgejo/workflows/mirror.yml
Normal file
21
.forgejo/workflows/mirror.yml
Normal file
|
|
@ -0,0 +1,21 @@
|
||||||
|
name: Mirror to GitHub
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: ['**']
|
||||||
|
tags: ['**']
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
mirror:
|
||||||
|
runs-on: [self-hosted, hestia]
|
||||||
|
steps:
|
||||||
|
- name: Mirror to GitHub
|
||||||
|
run: |
|
||||||
|
set -euo pipefail
|
||||||
|
git clone --mirror "https://git.breadway.dev/${GITHUB_REPOSITORY}.git" repo.git
|
||||||
|
cd repo.git
|
||||||
|
# Mirror only branches and tags (not refs/pull/*, which GitHub rejects);
|
||||||
|
# --prune deletes GitHub refs that no longer exist on Forgejo.
|
||||||
|
git push --prune \
|
||||||
|
"https://x-access-token:${{ secrets.MIRROR_TOKEN }}@github.com/Breadway/bos.git" \
|
||||||
|
'+refs/heads/*:refs/heads/*' '+refs/tags/*:refs/tags/*'
|
||||||
40
.forgejo/workflows/package.yml
Normal file
40
.forgejo/workflows/package.yml
Normal file
|
|
@ -0,0 +1,40 @@
|
||||||
|
name: Build and publish package
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
tags: ['v*']
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
package:
|
||||||
|
runs-on: [self-hosted, hestia]
|
||||||
|
container:
|
||||||
|
image: archlinux:latest
|
||||||
|
steps:
|
||||||
|
# Note: no actions/checkout — the archlinux image has no Node, which JS
|
||||||
|
# actions require. Everything runs as shell steps and clones manually.
|
||||||
|
- name: Build and publish
|
||||||
|
env:
|
||||||
|
PUBLISH_TOKEN: ${{ secrets.REGISTRY_TOKEN }}
|
||||||
|
run: |
|
||||||
|
set -euo pipefail
|
||||||
|
VERSION="${GITHUB_REF_NAME#v}"
|
||||||
|
pacman -Syu --noconfirm base-devel git rust cargo gtk4 glib2
|
||||||
|
useradd -m builder
|
||||||
|
git config --global --add safe.directory '*'
|
||||||
|
git clone --branch "${GITHUB_REF_NAME}" --depth 1 \
|
||||||
|
"https://git.breadway.dev/${GITHUB_REPOSITORY}.git" /home/builder/src
|
||||||
|
cd /home/builder/src
|
||||||
|
git archive --format=tar.gz --prefix="bos-settings-${VERSION}/" HEAD \
|
||||||
|
> packaging/arch/bos-settings-${VERSION}.tar.gz
|
||||||
|
SHA=$(sha256sum packaging/arch/bos-settings-${VERSION}.tar.gz | awk '{print $1}')
|
||||||
|
sed -i "s/^pkgver=.*/pkgver=${VERSION}/" packaging/arch/PKGBUILD
|
||||||
|
sed -i "s/^sha256sums=.*/sha256sums=('${SHA}')/" packaging/arch/PKGBUILD
|
||||||
|
chown -R builder:builder /home/builder/src
|
||||||
|
# --nocheck: packaging builds the artifact; tests belong in a CI job.
|
||||||
|
su builder -c "cd /home/builder/src/packaging/arch && makepkg -f --noconfirm --nocheck"
|
||||||
|
PKG=$(find /home/builder/src/packaging/arch -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"
|
||||||
40
.gitignore
vendored
Normal file
40
.gitignore
vendored
Normal file
|
|
@ -0,0 +1,40 @@
|
||||||
|
# Rust build artifacts
|
||||||
|
/target/
|
||||||
|
**/*.pdb
|
||||||
|
|
||||||
|
# Editor / IDE
|
||||||
|
.vscode/
|
||||||
|
.idea/
|
||||||
|
*.swp
|
||||||
|
*.swo
|
||||||
|
*~
|
||||||
|
.direnv/
|
||||||
|
|
||||||
|
# OS artifacts
|
||||||
|
.DS_Store
|
||||||
|
Thumbs.db
|
||||||
|
desktop.ini
|
||||||
|
|
||||||
|
# Environment / secrets
|
||||||
|
.env
|
||||||
|
.env.local
|
||||||
|
*.env.*
|
||||||
|
secrets/
|
||||||
|
*.pem
|
||||||
|
*.key
|
||||||
|
*.p12
|
||||||
|
|
||||||
|
# archiso build artifacts (these are large and reproducible)
|
||||||
|
/iso-build/
|
||||||
|
/iso-out/
|
||||||
|
*.iso
|
||||||
|
*.img
|
||||||
|
|
||||||
|
# Runtime / logs
|
||||||
|
*.log
|
||||||
|
logs/
|
||||||
|
*.pid
|
||||||
|
*.sock
|
||||||
|
|
||||||
|
# Claude Code local agent state
|
||||||
|
.claude/
|
||||||
55
Cargo.lock
generated
55
Cargo.lock
generated
|
|
@ -2,6 +2,18 @@
|
||||||
# It is not intended for manual editing.
|
# It is not intended for manual editing.
|
||||||
version = 4
|
version = 4
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "async-channel"
|
||||||
|
version = "2.5.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "924ed96dd52d1b75e9c1a3e6275715fd320f5f9439fb5a4a11fa51f4221158d2"
|
||||||
|
dependencies = [
|
||||||
|
"concurrent-queue",
|
||||||
|
"event-listener-strategy",
|
||||||
|
"futures-core",
|
||||||
|
"pin-project-lite",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "autocfg"
|
name = "autocfg"
|
||||||
version = "1.5.1"
|
version = "1.5.1"
|
||||||
|
|
@ -18,6 +30,7 @@ checksum = "b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8"
|
||||||
name = "bos-settings"
|
name = "bos-settings"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
|
"async-channel",
|
||||||
"glib",
|
"glib",
|
||||||
"gtk4",
|
"gtk4",
|
||||||
"serde",
|
"serde",
|
||||||
|
|
@ -58,12 +71,48 @@ dependencies = [
|
||||||
"target-lexicon",
|
"target-lexicon",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "concurrent-queue"
|
||||||
|
version = "2.5.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973"
|
||||||
|
dependencies = [
|
||||||
|
"crossbeam-utils",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "crossbeam-utils"
|
||||||
|
version = "0.8.21"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "equivalent"
|
name = "equivalent"
|
||||||
version = "1.0.2"
|
version = "1.0.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f"
|
checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "event-listener"
|
||||||
|
version = "5.4.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "e13b66accf52311f30a0db42147dadea9850cb48cd070028831ae5f5d4b856ab"
|
||||||
|
dependencies = [
|
||||||
|
"concurrent-queue",
|
||||||
|
"parking",
|
||||||
|
"pin-project-lite",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "event-listener-strategy"
|
||||||
|
version = "0.5.4"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93"
|
||||||
|
dependencies = [
|
||||||
|
"event-listener",
|
||||||
|
"pin-project-lite",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "field-offset"
|
name = "field-offset"
|
||||||
version = "0.3.6"
|
version = "0.3.6"
|
||||||
|
|
@ -457,6 +506,12 @@ dependencies = [
|
||||||
"system-deps",
|
"system-deps",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "parking"
|
||||||
|
version = "2.2.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "pin-project-lite"
|
name = "pin-project-lite"
|
||||||
version = "0.2.17"
|
version = "0.2.17"
|
||||||
|
|
|
||||||
21
LICENSE
Normal file
21
LICENSE
Normal file
|
|
@ -0,0 +1,21 @@
|
||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2025 Breadway
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
12
bakery.toml
Normal file
12
bakery.toml
Normal file
|
|
@ -0,0 +1,12 @@
|
||||||
|
name = "bos-settings"
|
||||||
|
description = "System settings app for Bread OS"
|
||||||
|
binaries = ["bos-settings"]
|
||||||
|
system_deps = ["gtk4", "glib2"]
|
||||||
|
optional_system_deps = ["snapper"]
|
||||||
|
bread_deps = []
|
||||||
|
|
||||||
|
[config]
|
||||||
|
dir = "~/.config"
|
||||||
|
|
||||||
|
[install]
|
||||||
|
post_install = []
|
||||||
|
|
@ -15,10 +15,13 @@ pub fn save<T: serde::Serialize>(path: &Path, val: &T) -> Result<(), Box<dyn Err
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn config_dir() -> PathBuf {
|
pub fn config_dir() -> PathBuf {
|
||||||
let home = std::env::var("HOME").unwrap_or_else(|_| {
|
// Honour XDG_CONFIG_HOME if set; otherwise fall back to $HOME/.config.
|
||||||
std::env::var("XDG_CONFIG_HOME")
|
if let Ok(xdg) = std::env::var("XDG_CONFIG_HOME") {
|
||||||
.map(|p| PathBuf::from(p).parent().unwrap_or(Path::new("/")).to_string_lossy().to_string())
|
let p = PathBuf::from(xdg);
|
||||||
.unwrap_or_else(|_| "/home/user".to_string())
|
if p.is_absolute() {
|
||||||
});
|
return p;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
let home = std::env::var("HOME").unwrap_or_else(|_| "/root".to_string());
|
||||||
PathBuf::from(home).join(".config")
|
PathBuf::from(home).join(".config")
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,8 @@ mod config;
|
||||||
mod theme;
|
mod theme;
|
||||||
mod ui;
|
mod ui;
|
||||||
|
|
||||||
|
use gtk4::prelude::*;
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let app = gtk4::Application::builder()
|
let app = gtk4::Application::builder()
|
||||||
.application_id("com.breadway.bos-settings")
|
.application_id("com.breadway.bos-settings")
|
||||||
|
|
|
||||||
|
|
@ -1,11 +0,0 @@
|
||||||
pub struct AppState {
|
|
||||||
pub current_view: String,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl AppState {
|
|
||||||
pub fn new() -> Self {
|
|
||||||
Self {
|
|
||||||
current_view: "snapshots".to_string(),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,4 +1,3 @@
|
||||||
use gtk4::prelude::*;
|
|
||||||
use gtk4::CssProvider;
|
use gtk4::CssProvider;
|
||||||
|
|
||||||
const CSS: &str = r#"
|
const CSS: &str = r#"
|
||||||
|
|
|
||||||
|
|
@ -3,10 +3,10 @@ use gtk4::{Box as GBox, Button, Label, Orientation, ScrolledWindow, TextView};
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
|
|
||||||
fn css_path() -> PathBuf {
|
fn css_path() -> PathBuf {
|
||||||
let home = std::env::var("HOME").unwrap_or_else(|_| "/home/user".to_string());
|
crate::config::config_dir().join("breadbar/style.css")
|
||||||
PathBuf::from(home).join(".config/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();
|
||||||
|
|
|
||||||
|
|
@ -23,8 +23,7 @@ fn get_monitors() -> Vec<String> {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn hypr_path(name: &str) -> std::path::PathBuf {
|
fn hypr_path(name: &str) -> std::path::PathBuf {
|
||||||
let home = std::env::var("HOME").unwrap_or_else(|_| "/home/user".to_string());
|
crate::config::config_dir().join("hypr").join(name)
|
||||||
std::path::PathBuf::from(home).join(".config/hypr").join(name)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn build() -> GBox {
|
pub fn build() -> GBox {
|
||||||
|
|
@ -51,7 +50,7 @@ pub fn build() -> GBox {
|
||||||
for mon in &monitors {
|
for mon in &monitors {
|
||||||
let lbl = Label::new(Some(mon));
|
let lbl = Label::new(Some(mon));
|
||||||
lbl.set_xalign(0.0);
|
lbl.set_xalign(0.0);
|
||||||
lbl.set_monospace(true);
|
lbl.add_css_class("monospace");
|
||||||
vbox.append(&lbl);
|
vbox.append(&lbl);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@ use std::io::{BufRead, BufReader};
|
||||||
use std::process::{Command, Stdio};
|
use std::process::{Command, Stdio};
|
||||||
|
|
||||||
fn read_installed() -> HashMap<String, String> {
|
fn read_installed() -> HashMap<String, String> {
|
||||||
let home = std::env::var("HOME").unwrap_or_else(|_| "/home/user".to_string());
|
let home = std::env::var("HOME").unwrap_or_else(|_| "/root".to_string());
|
||||||
let path = std::path::Path::new(&home)
|
let path = std::path::Path::new(&home)
|
||||||
.join(".local/state/bakery/installed.json");
|
.join(".local/state/bakery/installed.json");
|
||||||
|
|
||||||
|
|
@ -132,7 +132,7 @@ pub fn build() -> GBox {
|
||||||
Ok(mut child) => {
|
Ok(mut child) => {
|
||||||
std::thread::spawn(move || { let _ = child.wait(); });
|
std::thread::spawn(move || { let _ = child.wait(); });
|
||||||
}
|
}
|
||||||
Err(e) => eprintln!("bakery update failed: {e}"),
|
Err(_) => {} // bakery not found; button is a no-op
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
use gtk4::prelude::*;
|
use gtk4::prelude::*;
|
||||||
use gtk4::{Application, ApplicationWindow, Box as GBox, Orientation, Paned, Stack};
|
use gtk4::{Application, ApplicationWindow, Orientation, Paned, Stack};
|
||||||
|
|
||||||
use super::sidebar;
|
use super::sidebar;
|
||||||
use super::views;
|
use super::views;
|
||||||
|
|
@ -12,7 +12,7 @@ pub fn build_ui(app: &Application) {
|
||||||
.default_height(640)
|
.default_height(640)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
crate::theme::load(&window.display());
|
crate::theme::load(&WidgetExt::display(&window));
|
||||||
|
|
||||||
let hpaned = Paned::new(Orientation::Horizontal);
|
let hpaned = Paned::new(Orientation::Horizontal);
|
||||||
hpaned.set_position(190);
|
hpaned.set_position(190);
|
||||||
|
|
|
||||||
4
bread_white.svg
Normal file
4
bread_white.svg
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 677 369" width="677" height="369" role="img" aria-label="Bread terminal logo">
|
||||||
|
<path fill="#FFFFFF" d="M 233.00 96.00 C 228.18 100.52 224.36 105.12 222.00 111.00 C 219.37 117.57 218.50 127.32 219.00 134.00 C 219.39 139.29 220.67 143.48 223.00 148.00 C 225.68 153.19 232.13 154.83 235.00 163.00 C 242.25 183.68 230.25 267.37 235.00 286.00 C 236.52 291.95 238.13 294.33 241.00 297.00 C 243.82 299.62 245.92 300.68 252.00 302.00 C 274.95 306.97 399.57 308.16 424.00 302.00 C 431.16 300.20 434.14 297.95 437.00 295.00 C 439.23 292.71 439.95 291.45 441.00 287.00 C 444.91 270.42 433.78 182.71 441.00 163.00 C 443.68 155.70 449.32 154.77 452.00 150.00 C 454.58 145.40 456.36 140.55 457.00 135.00 C 457.76 128.44 457.34 119.48 455.00 113.00 C 452.81 106.92 448.70 101.69 444.00 97.00 C 438.89 91.90 431.52 87.55 425.00 84.00 C 418.83 80.64 414.26 78.40 406.00 76.00 C 391.93 71.90 363.58 67.13 347.00 66.00 C 335.07 65.19 326.39 66.02 316.00 67.00 C 305.39 68.00 294.29 69.44 284.00 72.00 C 273.98 74.49 263.78 77.77 255.00 82.00 C 246.91 85.90 238.71 90.65 233.00 96.00 Z"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" fill="#22272B" d="M 233.00 96.00 C 228.18 100.52 224.36 105.12 222.00 111.00 C 219.37 117.57 218.50 127.32 219.00 134.00 C 219.39 139.29 220.67 143.48 223.00 148.00 C 225.68 153.19 232.13 154.83 235.00 163.00 C 242.25 183.68 230.25 267.37 235.00 286.00 C 236.52 291.95 238.13 294.33 241.00 297.00 C 243.82 299.62 245.92 300.68 252.00 302.00 C 274.95 306.97 399.57 308.16 424.00 302.00 C 431.16 300.20 434.14 297.95 437.00 295.00 C 439.23 292.71 439.95 291.45 441.00 287.00 C 444.91 270.42 433.78 182.71 441.00 163.00 C 443.68 155.70 449.32 154.77 452.00 150.00 C 454.58 145.40 456.36 140.55 457.00 135.00 C 457.76 128.44 457.34 119.48 455.00 113.00 C 452.81 106.92 448.70 101.69 444.00 97.00 C 438.89 91.90 431.52 87.55 425.00 84.00 C 418.83 80.64 414.26 78.40 406.00 76.00 C 391.93 71.90 363.58 67.13 347.00 66.00 C 335.07 65.19 326.39 66.02 316.00 67.00 C 305.39 68.00 294.29 69.44 284.00 72.00 C 273.98 74.49 263.78 77.77 255.00 82.00 C 246.91 85.90 238.71 90.65 233.00 96.00 Z M 236.00 111.00 C 240.70 104.95 252.16 97.27 260.00 93.00 C 266.44 89.50 271.52 88.07 279.00 86.00 C 289.20 83.18 303.07 80.21 316.00 79.00 C 329.97 77.69 345.66 77.61 360.00 79.00 C 373.97 80.35 388.66 82.80 401.00 87.00 C 412.06 90.77 423.64 96.26 431.00 102.00 C 436.45 106.26 440.67 110.64 443.00 116.00 C 445.31 121.32 445.92 128.39 445.00 134.00 C 444.12 139.36 440.97 145.01 438.00 149.00 C 435.46 152.40 431.30 151.88 429.00 157.00 C 421.48 173.75 434.77 272.07 429.00 286.00 C 427.65 289.26 427.35 289.61 424.00 291.00 C 407.50 297.83 268.52 298.74 252.00 291.00 C 248.48 289.35 248.34 288.69 247.00 285.00 C 241.59 270.06 254.49 173.67 247.00 157.00 C 244.70 151.89 240.54 152.40 238.00 149.00 C 235.03 145.01 232.05 138.72 231.00 134.00 C 230.15 130.15 230.27 126.67 231.00 123.00 C 231.80 119.01 232.90 114.98 236.00 111.00 Z M 250.00 114.00 C 247.10 116.53 245.19 118.87 244.00 122.00 C 242.69 125.44 242.28 130.28 243.00 134.00 C 243.69 137.59 245.68 140.95 248.00 144.00 C 250.55 147.34 255.50 147.38 258.00 153.00 C 265.57 170.01 255.06 263.56 258.00 276.00 C 258.56 278.37 258.16 278.85 260.00 280.00 C 270.82 286.73 401.52 284.73 414.00 281.00 C 415.91 280.43 416.14 280.60 417.00 279.00 C 422.10 269.55 409.97 170.96 418.00 153.00 C 420.76 146.83 426.43 146.39 429.00 143.00 C 430.99 140.37 432.40 138.08 433.00 135.00 C 433.73 131.28 433.45 125.75 432.00 122.00 C 430.64 118.49 428.73 115.87 425.00 113.00 C 418.39 107.92 402.93 102.18 392.00 99.00 C 381.94 96.07 371.95 95.00 362.00 94.00 C 352.28 93.03 343.91 92.52 333.00 93.00 C 318.78 93.62 295.80 96.46 284.00 99.00 C 277.13 100.48 273.37 101.70 268.00 104.00 C 262.05 106.55 254.16 110.38 250.00 114.00 Z M 292.00 152.00 L 294.00 152.00 L 334.00 192.00 L 334.00 194.00 L 294.00 234.00 L 291.00 234.00 L 283.00 223.00 L 312.00 194.00 L 312.00 192.00 L 283.00 163.00 Z M 337.00 222.00 L 339.00 220.00 L 393.00 220.00 L 394.00 234.00 L 339.00 235.00 L 337.00 233.00 Z"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 4 KiB |
|
|
@ -26,4 +26,4 @@ style:
|
||||||
sidebarBackground: "#3b4252"
|
sidebarBackground: "#3b4252"
|
||||||
sidebarText: "#eceff4"
|
sidebarText: "#eceff4"
|
||||||
sidebarTextSelect: "#5e81ac"
|
sidebarTextSelect: "#5e81ac"
|
||||||
sidebarTextHighlight:"#eceff4"
|
sidebarTextHighlight: "#eceff4"
|
||||||
|
|
|
||||||
BIN
iso/airootfs/etc/calamares/branding/bos/languages.png
Normal file
BIN
iso/airootfs/etc/calamares/branding/bos/languages.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 12 KiB |
BIN
iso/airootfs/etc/calamares/branding/bos/logo.png
Normal file
BIN
iso/airootfs/etc/calamares/branding/bos/logo.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 9 KiB |
4
iso/airootfs/etc/calamares/branding/bos/logo.svg
Normal file
4
iso/airootfs/etc/calamares/branding/bos/logo.svg
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 677 369" width="677" height="369" role="img" aria-label="Bread terminal logo">
|
||||||
|
<path fill="#FFFFFF" d="M 233.00 96.00 C 228.18 100.52 224.36 105.12 222.00 111.00 C 219.37 117.57 218.50 127.32 219.00 134.00 C 219.39 139.29 220.67 143.48 223.00 148.00 C 225.68 153.19 232.13 154.83 235.00 163.00 C 242.25 183.68 230.25 267.37 235.00 286.00 C 236.52 291.95 238.13 294.33 241.00 297.00 C 243.82 299.62 245.92 300.68 252.00 302.00 C 274.95 306.97 399.57 308.16 424.00 302.00 C 431.16 300.20 434.14 297.95 437.00 295.00 C 439.23 292.71 439.95 291.45 441.00 287.00 C 444.91 270.42 433.78 182.71 441.00 163.00 C 443.68 155.70 449.32 154.77 452.00 150.00 C 454.58 145.40 456.36 140.55 457.00 135.00 C 457.76 128.44 457.34 119.48 455.00 113.00 C 452.81 106.92 448.70 101.69 444.00 97.00 C 438.89 91.90 431.52 87.55 425.00 84.00 C 418.83 80.64 414.26 78.40 406.00 76.00 C 391.93 71.90 363.58 67.13 347.00 66.00 C 335.07 65.19 326.39 66.02 316.00 67.00 C 305.39 68.00 294.29 69.44 284.00 72.00 C 273.98 74.49 263.78 77.77 255.00 82.00 C 246.91 85.90 238.71 90.65 233.00 96.00 Z"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" fill="#22272B" d="M 233.00 96.00 C 228.18 100.52 224.36 105.12 222.00 111.00 C 219.37 117.57 218.50 127.32 219.00 134.00 C 219.39 139.29 220.67 143.48 223.00 148.00 C 225.68 153.19 232.13 154.83 235.00 163.00 C 242.25 183.68 230.25 267.37 235.00 286.00 C 236.52 291.95 238.13 294.33 241.00 297.00 C 243.82 299.62 245.92 300.68 252.00 302.00 C 274.95 306.97 399.57 308.16 424.00 302.00 C 431.16 300.20 434.14 297.95 437.00 295.00 C 439.23 292.71 439.95 291.45 441.00 287.00 C 444.91 270.42 433.78 182.71 441.00 163.00 C 443.68 155.70 449.32 154.77 452.00 150.00 C 454.58 145.40 456.36 140.55 457.00 135.00 C 457.76 128.44 457.34 119.48 455.00 113.00 C 452.81 106.92 448.70 101.69 444.00 97.00 C 438.89 91.90 431.52 87.55 425.00 84.00 C 418.83 80.64 414.26 78.40 406.00 76.00 C 391.93 71.90 363.58 67.13 347.00 66.00 C 335.07 65.19 326.39 66.02 316.00 67.00 C 305.39 68.00 294.29 69.44 284.00 72.00 C 273.98 74.49 263.78 77.77 255.00 82.00 C 246.91 85.90 238.71 90.65 233.00 96.00 Z M 236.00 111.00 C 240.70 104.95 252.16 97.27 260.00 93.00 C 266.44 89.50 271.52 88.07 279.00 86.00 C 289.20 83.18 303.07 80.21 316.00 79.00 C 329.97 77.69 345.66 77.61 360.00 79.00 C 373.97 80.35 388.66 82.80 401.00 87.00 C 412.06 90.77 423.64 96.26 431.00 102.00 C 436.45 106.26 440.67 110.64 443.00 116.00 C 445.31 121.32 445.92 128.39 445.00 134.00 C 444.12 139.36 440.97 145.01 438.00 149.00 C 435.46 152.40 431.30 151.88 429.00 157.00 C 421.48 173.75 434.77 272.07 429.00 286.00 C 427.65 289.26 427.35 289.61 424.00 291.00 C 407.50 297.83 268.52 298.74 252.00 291.00 C 248.48 289.35 248.34 288.69 247.00 285.00 C 241.59 270.06 254.49 173.67 247.00 157.00 C 244.70 151.89 240.54 152.40 238.00 149.00 C 235.03 145.01 232.05 138.72 231.00 134.00 C 230.15 130.15 230.27 126.67 231.00 123.00 C 231.80 119.01 232.90 114.98 236.00 111.00 Z M 250.00 114.00 C 247.10 116.53 245.19 118.87 244.00 122.00 C 242.69 125.44 242.28 130.28 243.00 134.00 C 243.69 137.59 245.68 140.95 248.00 144.00 C 250.55 147.34 255.50 147.38 258.00 153.00 C 265.57 170.01 255.06 263.56 258.00 276.00 C 258.56 278.37 258.16 278.85 260.00 280.00 C 270.82 286.73 401.52 284.73 414.00 281.00 C 415.91 280.43 416.14 280.60 417.00 279.00 C 422.10 269.55 409.97 170.96 418.00 153.00 C 420.76 146.83 426.43 146.39 429.00 143.00 C 430.99 140.37 432.40 138.08 433.00 135.00 C 433.73 131.28 433.45 125.75 432.00 122.00 C 430.64 118.49 428.73 115.87 425.00 113.00 C 418.39 107.92 402.93 102.18 392.00 99.00 C 381.94 96.07 371.95 95.00 362.00 94.00 C 352.28 93.03 343.91 92.52 333.00 93.00 C 318.78 93.62 295.80 96.46 284.00 99.00 C 277.13 100.48 273.37 101.70 268.00 104.00 C 262.05 106.55 254.16 110.38 250.00 114.00 Z M 292.00 152.00 L 294.00 152.00 L 334.00 192.00 L 334.00 194.00 L 294.00 234.00 L 291.00 234.00 L 283.00 223.00 L 312.00 194.00 L 312.00 192.00 L 283.00 163.00 Z M 337.00 222.00 L 339.00 220.00 L 393.00 220.00 L 394.00 234.00 L 339.00 235.00 L 337.00 233.00 Z"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 4 KiB |
|
|
@ -62,13 +62,18 @@ foot
|
||||||
# File manager
|
# File manager
|
||||||
nautilus
|
nautilus
|
||||||
|
|
||||||
# Installer — sourced from [breadway] repo (see pacman.conf)
|
# Installer — from the official extra repo
|
||||||
calamares
|
calamares
|
||||||
calamares-qt6
|
calamares-qt6
|
||||||
|
|
||||||
# Bread ecosystem — sourced from [breadway] repo
|
# Bread ecosystem — sourced from [breadway] repo
|
||||||
bakery
|
bakery
|
||||||
|
|
||||||
|
# Input / screen utilities
|
||||||
|
brightnessctl
|
||||||
|
grim
|
||||||
|
slurp
|
||||||
|
|
||||||
# Utilities
|
# Utilities
|
||||||
sudo
|
sudo
|
||||||
git
|
git
|
||||||
|
|
|
||||||
|
|
@ -26,13 +26,18 @@ Include = /etc/pacman.d/mirrorlist
|
||||||
Include = /etc/pacman.d/mirrorlist
|
Include = /etc/pacman.d/mirrorlist
|
||||||
|
|
||||||
# -----------------------------------------------------------------------
|
# -----------------------------------------------------------------------
|
||||||
# Breadway custom repo — provides: bakery, calamares (pre-built), and the
|
# Breadway custom repo — provides: bakery and the bread ecosystem packages
|
||||||
# bread ecosystem packages (bread, breadbar, breadbox, breadcrumbs, breadpad,
|
# (bread, breadbar, breadbox, breadcrumbs, breadpad, bos-settings).
|
||||||
# bos-settings).
|
# (calamares comes from the official extra repo, not here.)
|
||||||
#
|
#
|
||||||
# TODO: Replace this URL with the actual hosted repo before building.
|
# Packages are published to the Forgejo Arch registry (group "os") by the
|
||||||
# See: https://github.com/Breadway/repo for setup instructions.
|
# .forgejo/workflows/package.yml workflow in each repo, on tag push.
|
||||||
|
#
|
||||||
|
# TODO: packages are currently unsigned (TrustAll). For production, sign
|
||||||
|
# them in CI with a GPG key and switch to SigLevel = Required.
|
||||||
# -----------------------------------------------------------------------
|
# -----------------------------------------------------------------------
|
||||||
[breadway]
|
# The section name must match Forgejo's served db filename
|
||||||
|
# ({owner}.{group}.{domain}.db) — pacman fetches "<section>.db" from Server.
|
||||||
|
[Breadway.os.git.breadway.dev]
|
||||||
SigLevel = Optional TrustAll
|
SigLevel = Optional TrustAll
|
||||||
Server = https://repo.breadway.dev/$arch
|
Server = https://git.breadway.dev/api/packages/Breadway/arch/os/$arch
|
||||||
|
|
|
||||||
38
packaging/arch/PKGBUILD
Normal file
38
packaging/arch/PKGBUILD
Normal file
|
|
@ -0,0 +1,38 @@
|
||||||
|
# Maintainer: Breadway <rileyhorsham@gmail.com>
|
||||||
|
|
||||||
|
pkgname=bos-settings
|
||||||
|
pkgver=0.1.0
|
||||||
|
pkgrel=1
|
||||||
|
pkgdesc="System settings app for Bread OS"
|
||||||
|
arch=('x86_64')
|
||||||
|
url="https://github.com/Breadway/bos"
|
||||||
|
license=('MIT')
|
||||||
|
# Some Rust deps (ring/mlua) build vendored C/asm into static archives; makepkg's
|
||||||
|
# default -flto=auto emits GCC LTO bitcode the Rust (lld) link cannot read,
|
||||||
|
# causing undefined-symbol errors. Disable LTO.
|
||||||
|
options=(!lto !debug)
|
||||||
|
depends=('gtk4' 'glib2' 'hicolor-icon-theme')
|
||||||
|
optdepends=(
|
||||||
|
'snapper: snapshot management view'
|
||||||
|
)
|
||||||
|
makedepends=('rust' 'cargo')
|
||||||
|
source=("${pkgname}-${pkgver}.tar.gz")
|
||||||
|
sha256sums=('SKIP')
|
||||||
|
|
||||||
|
build() {
|
||||||
|
cd "${srcdir}/${pkgname}-${pkgver}"
|
||||||
|
cargo build --release --locked -p bos-settings
|
||||||
|
}
|
||||||
|
|
||||||
|
check() {
|
||||||
|
cd "${srcdir}/${pkgname}-${pkgver}"
|
||||||
|
cargo test --release --locked -p bos-settings
|
||||||
|
}
|
||||||
|
|
||||||
|
package() {
|
||||||
|
cd "${srcdir}/${pkgname}-${pkgver}"
|
||||||
|
install -Dm755 target/release/bos-settings "${pkgdir}/usr/bin/bos-settings"
|
||||||
|
install -Dm644 packaging/arch/bos-settings.desktop \
|
||||||
|
"${pkgdir}/usr/share/applications/bos-settings.desktop"
|
||||||
|
install -Dm644 LICENSE "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE"
|
||||||
|
}
|
||||||
25
packaging/arch/README.md
Normal file
25
packaging/arch/README.md
Normal file
|
|
@ -0,0 +1,25 @@
|
||||||
|
Arch packaging
|
||||||
|
==============
|
||||||
|
|
||||||
|
`PKGBUILD` builds and installs `bos-settings` from source.
|
||||||
|
|
||||||
|
## Local build
|
||||||
|
|
||||||
|
```bash
|
||||||
|
makepkg -si
|
||||||
|
```
|
||||||
|
|
||||||
|
## Before publishing to [breadway] repo
|
||||||
|
|
||||||
|
1. Tag a release on GitHub.
|
||||||
|
2. Update `pkgver` to match the tag.
|
||||||
|
3. Update `source` to the release tarball URL.
|
||||||
|
4. Run `updpkgsums` (or manually set `sha256sums`).
|
||||||
|
|
||||||
|
## Runtime dependencies
|
||||||
|
|
||||||
|
| Package | Required | Notes |
|
||||||
|
|---------|----------|-------|
|
||||||
|
| `gtk4` | yes | UI toolkit |
|
||||||
|
| `glib2` | yes | always |
|
||||||
|
| `snapper` | optional | snapshot management view |
|
||||||
9
packaging/arch/bos-settings.desktop
Normal file
9
packaging/arch/bos-settings.desktop
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
[Desktop Entry]
|
||||||
|
Name=BOS Settings
|
||||||
|
Comment=System settings for Bread OS
|
||||||
|
Exec=bos-settings
|
||||||
|
Icon=preferences-system
|
||||||
|
Terminal=false
|
||||||
|
Type=Application
|
||||||
|
Categories=Settings;System;
|
||||||
|
StartupWMClass=bos-settings
|
||||||
Loading…
Add table
Add a link
Reference in a new issue