Compare commits
6 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| bf279c5f2f | |||
| ae292eea52 | |||
| 81fa622963 | |||
| c0f9563997 | |||
| b8674ce5f0 | |||
| cfd1dbd4f4 |
2
Cargo.lock
generated
2
Cargo.lock
generated
@@ -1042,7 +1042,7 @@ checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b"
|
||||
|
||||
[[package]]
|
||||
name = "waydock"
|
||||
version = "0.1.0"
|
||||
version = "0.1.1"
|
||||
dependencies = [
|
||||
"async-channel",
|
||||
"gtk4",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "waydock"
|
||||
version = "0.1.0"
|
||||
version = "0.1.1"
|
||||
edition = "2021"
|
||||
description = "Modern, resurssnål dock för Wayfire — transparent, JSON-konfigurerad, per-skärm"
|
||||
license = "MIT"
|
||||
|
||||
34
README.md
34
README.md
@@ -6,6 +6,40 @@ Rust/GTK4 som **en enda binär**. Pinnade appar, körande fönster med
|
||||
gruppering, per-skärm-kontext, konfigurerbara menyer, settings-GUI och
|
||||
live-omladdning av JSON-configen.
|
||||
|
||||
## Skärmbilder
|
||||
|
||||

|
||||
|
||||
| Dockan (pins, grupper, indikatorer) | Inställningar (per skärm, live) |
|
||||
|---|---|
|
||||
|  |  |
|
||||
|
||||
Samma dock, sex olika configar — bara JSON-filen ändrades mellan bilderna:
|
||||
|
||||

|
||||
|
||||
## Vad kan konfigureras?
|
||||
|
||||
- **Placering**: nere/uppe/vänster/höger; centrerad/vänster-/högerjusterad ö
|
||||
eller expanderad över hela kanten; tre marginaler (från kanten + start/slut,
|
||||
minusvärden ok) — med ritad illustration i settings som visar måtten
|
||||
- **Utseende**: panelfärg + transparens, accentfärg, hörnradie, kant, skugga,
|
||||
ikonstorlek/-avstånd, hover-zoom, animationer, indikatorstil
|
||||
- **Beteende**: klick (fokus/minimera/växla), mittklick, skroll (växla fönster
|
||||
eller starta stoppad app), gruppering, fönsterlista vid klick eller hover,
|
||||
peek/fokus vid hover i listan, tooltips, urgency-puls
|
||||
- **Menyer**: välj exakt vilka val högerklicksmenyn ska ha
|
||||
(minimera/maximera/flytta till skärm/pinna/stäng)
|
||||
- **Per skärm**: vilken inställning som helst kan överridas per skärm —
|
||||
egna pins, position, färger, filter för bara-den-skärmens-fönster
|
||||
- **Autohide**: dodge (göm vid fönsteröverlapp) eller göm alltid, med
|
||||
sensor vid kanten och animation
|
||||
- **Hotspots**: hot corners/edges som kör kommandon eller Wayfire-IPC
|
||||
(t.ex. scale-översikten)
|
||||
|
||||
Allt via `~/.config/waydock/config.json` (live-omladdning) **eller**
|
||||
settings-GUI:t — högerklicka på tom dockyta → Inställningar…
|
||||
|
||||
- Config: `~/.config/waydock/config.json` (skapas automatiskt första starten)
|
||||
- Djupare docs: [`doc/plan.md`](doc/plan.md),
|
||||
[`doc/architecture.md`](doc/architecture.md),
|
||||
|
||||
BIN
assets/screenshots/dock-closeup.png
Normal file
BIN
assets/screenshots/dock-closeup.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 59 KiB |
BIN
assets/screenshots/dock-hero.png
Normal file
BIN
assets/screenshots/dock-hero.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 439 KiB |
BIN
assets/screenshots/gallery.png
Normal file
BIN
assets/screenshots/gallery.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2.1 MiB |
BIN
assets/screenshots/settings.png
Normal file
BIN
assets/screenshots/settings.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 65 KiB |
@@ -42,6 +42,8 @@ skriver samma fil. Schema dokumenteras i `doc/usage.md`.
|
||||
## Milestones
|
||||
|
||||
1. **M0 Scaffold** — repo, docs, CI, VS Code-tasks, release-flöde *(klar)*
|
||||
(M1–M7 klara 2026-08-30 — v0.1.0 släppt: binär 1,6 MB, en-raders-install
|
||||
verifierad, repot publikt. M8 klar — waydock är Wayfire-DE:s dock.)
|
||||
2. **M1 Panelskelett** — layer-shell-fönster per skärm; position
|
||||
(top/bottom/left/right), centrering, marginal, layer, exclusive zone;
|
||||
CSS-pipeline från config (bakgrund/opacity/radie/skugga/kant);
|
||||
@@ -64,8 +66,8 @@ skriver samma fil. Schema dokumenteras i `doc/usage.md`.
|
||||
hot corners/edges med exec- eller IPC-actions
|
||||
8. **M7 Polish & släpp** — profilering (mål: 0 % CPU i vila, < 70 MB RAM),
|
||||
release v0.1.0, wiki-docs
|
||||
9. **M8 Wayfire-DE-integration** — ersätt `autostart/11-dock.sh`
|
||||
(sfwbar) med waydock, pensionera sfwbar-configen
|
||||
9. **M8 Wayfire-DE-integration** *(klar 2026-08-30)* — `autostart/11-dock.sh`
|
||||
kör waydock, sfwbar-configen pensionerad
|
||||
|
||||
## Roadmap / expansions (överenskomna)
|
||||
|
||||
|
||||
14
doc/usage.md
14
doc/usage.md
@@ -7,6 +7,7 @@ waydock # normal start
|
||||
waydock --log debug # pratigare logg till stderr
|
||||
waydock --log-file ~/.cache/waydock.log
|
||||
waydock --config /annan/väg.json
|
||||
waydock --settings # öppna inställningsfönstret direkt
|
||||
```
|
||||
|
||||
Vid första start skapas `~/.config/waydock/config.json` med defaults.
|
||||
@@ -44,6 +45,14 @@ inställningar; "Återställ skärmen till globalt" tar bort dem.
|
||||
|
||||
## Configreferens (`config.json`)
|
||||
|
||||
I korthet kan du styra: **placering** (kant, justering, ö/expanderad,
|
||||
marginaler), **utseende** (färger, transparens, radie, skugga, ikoner,
|
||||
indikatorer, animationer), **beteende** (klick/mittklick/skroll,
|
||||
gruppering, fönsterlistans öppning och hover-effekt), **menyinnehåll**,
|
||||
**specialknappar**, **per-skärm-överridar**, **autohide/dodge**,
|
||||
**hotspots** och **loggning**. Exempelgalleri med färdiga teman finns i
|
||||
[wikin](https://gitea.brasse-pc.eu/brasse/waydock/wiki/Konfiguration).
|
||||
|
||||
```jsonc
|
||||
{
|
||||
"position": "bottom", // bottom | top | left | right
|
||||
@@ -55,7 +64,10 @@ inställningar; "Återställ skärmen till globalt" tar bort dem.
|
||||
// skuggutrymme läggs aldrig på förankrade sidor,
|
||||
// så 0 = verkligen kant i kant
|
||||
"layer": "top", // top | overlay | bottom (always-on-top = overlay)
|
||||
"avoid_windows": false, // true = reservera plats (exclusive zone)
|
||||
"avoid_windows": false, // true = reservera plats: maximerade fönster
|
||||
// stannar vid dockan. Funkar IHOP med autohide —
|
||||
// då gömmer dodge bara för fönster du själv
|
||||
// drar in över dockan
|
||||
|
||||
"appearance": {
|
||||
"background": "#222222", // panelfärg
|
||||
|
||||
0
install.sh
Normal file → Executable file
0
install.sh
Normal file → Executable file
0
release.sh
Normal file → Executable file
0
release.sh
Normal file → Executable file
@@ -133,7 +133,10 @@ fn configure_layer(win: >k::ApplicationWindow, cfg: &Config, monitor: &gdk::Mo
|
||||
}
|
||||
}
|
||||
}
|
||||
if cfg.avoid_windows && !cfg.autohide.enabled {
|
||||
// reservera plats fungerar ihop med autohide: maximerade fönster
|
||||
// stannar vid dockan (och triggar då aldrig dodge) — bara fönster
|
||||
// man själv drar in i zonen gömmer den
|
||||
if cfg.avoid_windows {
|
||||
win.auto_exclusive_zone_enable();
|
||||
} else {
|
||||
win.set_exclusive_zone(0);
|
||||
|
||||
14
src/main.rs
14
src/main.rs
@@ -28,14 +28,16 @@ struct Cli {
|
||||
config: Option<PathBuf>,
|
||||
log: Option<String>,
|
||||
log_file: Option<String>,
|
||||
open_settings: bool,
|
||||
}
|
||||
|
||||
fn parse_cli() -> Cli {
|
||||
let mut cli = Cli { config: None, log: None, log_file: None };
|
||||
let mut cli = Cli { config: None, log: None, log_file: None, open_settings: false };
|
||||
let mut args = std::env::args().skip(1);
|
||||
while let Some(arg) = args.next() {
|
||||
match arg.as_str() {
|
||||
"--config" => cli.config = args.next().map(PathBuf::from),
|
||||
"--settings" => cli.open_settings = true,
|
||||
"--log" => cli.log = args.next(),
|
||||
"--log-file" => cli.log_file = args.next(),
|
||||
"--version" | "-V" => {
|
||||
@@ -49,6 +51,7 @@ fn parse_cli() -> Cli {
|
||||
--config <fil> annan configfil (default ~/.config/waydock/config.json)\n \
|
||||
--log <nivå> error|warn|info|debug|trace (även env WAYDOCK_LOG)\n \
|
||||
--log-file <fil> skriv logg till fil\n \
|
||||
--settings öppna inställningsfönstret vid start\n \
|
||||
--version visa version"
|
||||
);
|
||||
std::process::exit(0);
|
||||
@@ -128,20 +131,21 @@ fn main() -> glib::ExitCode {
|
||||
let started = Rc::new(Cell::new(false));
|
||||
|
||||
let cfg_path2 = cfg_path.clone();
|
||||
let open_settings = cli.open_settings;
|
||||
app.connect_activate(move |app| {
|
||||
if started.get() {
|
||||
info!("waydock kör redan — ignorerar andra instansen");
|
||||
return;
|
||||
}
|
||||
started.set(true);
|
||||
activate(app, cfg_path2.clone());
|
||||
activate(app, cfg_path2.clone(), open_settings);
|
||||
});
|
||||
|
||||
// ge inte GTK våra egna flaggor
|
||||
app.run_with_args::<&str>(&[])
|
||||
}
|
||||
|
||||
fn activate(app: >k::Application, cfg_path: PathBuf) {
|
||||
fn activate(app: >k::Application, cfg_path: PathBuf, open_settings: bool) {
|
||||
let cfg: config::SharedConfig = Rc::new(RefCell::new(config::load_or_create(&cfg_path)));
|
||||
|
||||
let ctx = Rc::new(dock::Ctx {
|
||||
@@ -224,6 +228,10 @@ fn activate(app: >k::Application, cfg_path: PathBuf) {
|
||||
);
|
||||
}
|
||||
|
||||
if open_settings {
|
||||
settings::open(&ctx);
|
||||
}
|
||||
|
||||
// skärmar in/ut → bygg om (debouncat, skärmar kommer i klungor)
|
||||
{
|
||||
let ctx2 = ctx.clone();
|
||||
|
||||
@@ -467,7 +467,7 @@ fn build_layout_page(ctx: &Rc<Ctx>) -> gtk::ScrolledWindow {
|
||||
_ => Layer::Top,
|
||||
};
|
||||
}));
|
||||
row(&list, "Reservera plats (undvik fönster)", &switch(ctx, cfg.avoid_windows, |c, v| c.avoid_windows = v));
|
||||
row(&list, "Reservera plats (maximerade fönster stannar vid dockan)", &switch(ctx, cfg.avoid_windows, |c, v| c.avoid_windows = v));
|
||||
|
||||
heading(&list, "Marginaler");
|
||||
list.append(&margin_illustration(ctx));
|
||||
|
||||
Reference in New Issue
Block a user