Several components included in this repository require local build toolchains to be available on the system. The primary build-time dependencies are:
makestow— used to install configuration files into the home directory via symbolic linksclang(required forccls)gcc(required formpv-mpris,fzy)rust(required foratuin,difftastic_nvim)nodejs(required foreslint_d,vim-jsdocand multiple tools installed viamason)luarocks(required for multiple tools installed viamason)yq(used internally bymason)
In addition, the following third-party system dependencies are assumed to be present and are configured by default as either desktop applications or TUI applications:
xrandrxrdbi3i3statusi3lockrangerpasspass-otprofirofi-passsxhkdbluemandunstxscreensaverudiskieredshift-gtkibusfcitx5fcitx5-mozcpicommaimplayerctlnoto-emojizathuraalacrittykittyweztermghosttyurxvtripgrepbatfdspotzendifftasticgh(used for git credential authentication over HTTPS)joystickwake(optionally requirespython-dbus-fastandpython-xlibwhen running under X11)helvumlogrotatecron
On Slackware systems, the following additional dependency is optional:
sun
To build all required components and install the configuration files into the home directory, run the following commands:
make
make installThe following preferences are used by the Zen browser and are expected to be defined in:
~/.zen/{profile_dir}/prefs.js
user_pref("browser.tabs.insertAfterCurrent", true);
user_pref("zen.theme.content-element-separation", 0);
user_pref("zen.view.experimental-force-window-controls-left", true);Custom uBlock Origin filters ("My filters") are declared in home/.mozilla/native-messaging-hosts/uBlock0@raymondhill.net.json, which stow links to ~/.mozilla/native-messaging-hosts/uBlock0@raymondhill.net.json. This is Firefox's managed storage native-manifest mechanism (requires uBlock Origin 1.33.0+): on startup, uBlock reads this file and applies data.toOverwrite.filters to its own "My filters" pane, so no manual dashboard/import step is required in either browser profile. Because Vendor=Mozilla in Zen's application.ini, Zen shares the same ~/.mozilla/native-messaging-hosts directory as regular Firefox, so this applies to any Mozilla-vendor profile with uBlock Origin installed.
Notes:
- A full browser restart is required to pick up changes to this file.
toOverwritefully replaces the "My filters" pane content on every launch, so any filters added manually through the uBlock UI will be reverted on restart — treat this file as the source of truth and edit it instead.
acpilight provides a backward-compatible xbacklight replacement that controls brightness via /sys/class/backlight instead of X11's RandR Backlight property, so it works for laptop panels the RandR property was never wired up for, and it's driven by a redshift hook (home/.config/redshift/hooks/backlight) that dims the display along with the day/night cycle.
Controlling an external/desktop monitor's brightness this way additionally requires the ddcci-driver-linux kernel module, which exposes DDC/CI-controlled monitors under /sys/class/backlight/ddcci* (the same interface as a native panel), so the same hook script works unmodified on both a laptop (native panel) and a desktop (DDC/CI monitor):
- Arch Linux: AUR package
ddcci-driver-linux-dkms(or-gitfor newer kernels) - Slackware:
ddcci-driver-linuxon SlackBuilds.org
System settings required:
- Registering each monitor's DDC/CI device, since
ddcci-driver-linuxdoesn't autodetect monitors on its own -- it needs the main device (address0x37) added manually per i2c bus. Add the following snippet to your system's startup (adjust thecard0-*glob to match which GPU your monitors are on):/sbin/modprobe ddcci-backlight # DisplayPort connectors expose the real DDC/CI-capable channel as a direct # i2c-N subdirectory of the connector itself (the AUX-channel-backed # adapter); their `ddc` symlink instead points to a separate, more limited # legacy adapter that can't complete the full DDC/CI handshake. HDMI # connectors have no such split -- their `ddc` symlink is the only (and # correct) adapter. ( for conn in /sys/class/drm/card0-*/; do [ "$(cat "$conn/status" 2>/dev/null)" = "connected" ] || continue direct=$(ls -d "$conn"i2c-* 2>/dev/null | head -1) if [ -n "$direct" ]; then # DP ddc_bus=$(basename "$direct") else # HDMI ddc_link="$conn/ddc" [ -e "$ddc_link" ] || continue ddc_bus=$(basename "$(readlink -f "$ddc_link")") fi bus_num=${ddc_bus#i2c-} [ -e "/sys/bus/ddcci/devices/ddcci$bus_num" ] && continue echo ddcci 0x37 > "/sys/bus/i2c/devices/$ddc_bus/new_device" 2>/dev/null done ) & # writing to new_device is a synchronous sysfs call that blocks until the driver's real I2C handshake with that monitor finishes, and it's slow
- Installing acpilight's udev rule so
xbacklightcan write to/sys/class/backlightwithout root:(also requires your user to be in thesudo install -vCDt /etc/udev/rules.d deps/acpilight/90-backlight.rules sudo udevadm trigger -s backlight -c add
videogroup)