Skip to content

lost-melody/neodock

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

70 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

NeoDock

A simple App Dock for the Niri compositor, built with gtk-rs.

Requirements

  • Niri, a scrollable-tiling Wayland compositor.
  • libadwaita, building blocks for modern GNOME applications.
  • Tela icon theme, a flat colorful design icon theme.

Screenshots

Dark

neodock-dark.png neodock-dark-menu.png

Light

neodock-light.png neodock-light-menu.png

Build

Build release binary:

# build release binary to `./target/release/`.
cargo build --release

Run debug binary:

# build debug binary to `./target/debug/` and run it.
cargo run

Install into ~/.cargo/bin:

# install from crates.io.
cargo install neodock
# install from local repository.
cargo install --path .
# install from GitHub.
cargo install --git https://github.com/lost-melody/neodock

Configuration

NeoDock is configured with a config file instead of GSettings, typically ~/.config/io.github.lost-melody.NeoDock/config.toml. I believe that by this way the configuration can be easily managed across devices.

Example (refer to neodock::config::Config):

# whether dock should hide automatically after a delay.
# zone is enabled when `auto_hide` is off.
auto_hide = true
# delay before dock auto hiding in milliseconds.
auto_hide_delay = 800
# whether dock should always display in overview even when auto hide is on.
show_in_overview = true
# in which layer dock window should display.
dock_layer = "top"
# filters windows and apps by whether they are in the
# same output or workspace where the dock window is in.
# valid values:
# - "All"/"all";
# - "SameOutput"/"same_output"/"output";
# - "SameWorkspace"/"same_workspace"/"workspace".
filter_windows = "same_output"
# command to run on launcher button clicked.
launcher_command = [
    "qs", "-c", "noctalia-shell", "ipc", "call", "launcher", "toggle",
]
# list of application ids pinned to dock, where app_id is generally filenames
# in `/usr/share/applications/` without a `.desktop` extension.
pinned_apps = [
    "firefox",
    "kitty",
    "org.gnome.Nautilus",
    "steam",
]
# application id substitution dictionary.
[app_id_substitution]
Chromium = "chromium"
QQ = "com.qq.QQ"

Example Niri layer rule:

layer-rule {
    match namespace="^neodock$"
    geometry-corner-radius 12
    shadow {
        on
    }
    background-effect {
        blur true
        xray false
    }
    popups {
        geometry-corner-radius 15
        background-effect {
            blur true
        }
    }
}

Styles can be overridden by configuring user styles, typically ~/.config/io.github.lost-melody.NeoDock/style.css.

/* variables in the scope of dock window. */
.neodock-window {
  --dock-border-color: alpha(var(--headerbar-border-color), 0.25);
  --dock-border-radius: 12px;
  --dock-peek-border-radius: 4px;
  --dock-view-padding: 0.25em;
  --dock-view-min-width: 24em;
  --dock-icon-margin: 0.25em;
  --dock-transition-duration: 0.25s;
  --dock-animation-duration: var(--dock-transition-duration);
}
/* popover menu's background. */
popover.menu > contents {
  background-color: alpha(var(--view-bg-color), 0.3);
}

See style.css.

About

An app dock for the niri compositor. Created as a practice project while learning gtk4-rs.

Topics

Resources

License

Stars

Watchers

Forks

Contributors