Compare commits

..

No commits in common. "0f286a69749dd5b821851ef395ff8be1515cb941" and "cc72d61a8ee8075e51e5daf42b9c3e31ae6719fa" have entirely different histories.

21 changed files with 2954 additions and 104 deletions

82
Packages.txt Normal file
View file

@ -0,0 +1,82 @@
# List of basic packages I typically install. You may not need all of them.
# Adjust as necessary.
# Arch repos
bind
bspwm
dunst
emacs
galculator
git
gsimplecal
htop
dex
feh
firefox
emacs
gnome-keyring
logrotate
ncdu
neofetch
neovim
nextcloud-client
noto-fonts-cjk
noto-fonts-emoji
kitty
ranger
redshift
rofi
rxvt-unicode
papirus-icon-theme
pavucontrol
pipewire
wireplumber
pipewire-pulse
snapper # btrfs only
sxhkd
thunderbird
ttf-dejavu
ttf-fira-code
ttf-font-awesome
ttf-hack
ttf-ibm-plex
ttf-liberation
xsecurelock
xss-lock
polkit-gnome
xorg-xserver
xorg-xinit
xorg-xsetroot
xorg-xrandr
xorg-xset
xclip
maim
xdotool
dbus-pyton
# AUR
arkenfox-user.js
birdtray
btrfs-du # more accurate du for btrfs
pa-notify
polybar
pulseaudio-control
needrestart
neovim-plug-git
gruvbox-dark-gtk
sbkeys
sbupdate-git
spotify
spotify-adblock-git
polybar-spotify
rofi-power-menu
st
vimix-gtk-themes-git
xidlehook
# Laptop/Thinkpads (for xbacklight etc., your needs may vary)
tlp
acpi_call
acpi_call-lts # only if LTS kernel installed, see 'acpi_call-dkms' for other variants
acpilight # or 'light' is sometimes needed for older thinkpads
rtw89-dkms-git # wifi for thinkpad t14 gen2 amd, not needed for kernel 5.16 or later

View file

@ -5,14 +5,14 @@
export EDITOR=nvim
export VISUAL=emacs
# Ensure XDG env vars are set
export XDG_CACHE_HOME="${HOME}"/.cache
export XDG_CONFIG_HOME="${HOME}"/.config
export XDG_DATA_HOME="${HOME}"/.local/share
export XDG_STATE_HOME="${HOME}"/.local/state
# Ensure XDG env vars are set correctly
export XDG_CACHE_HOME="$HOME/.cache"
export XDG_CONFIG_HOME="$HOME/.config"
export XDG_DATA_HOME="$HOME/.local/share"
export XDG_STATE_HOME="$HOME/.local/state"
# add .local/bin to $PATH
export PATH="${HOME}/.local/bin:${PATH}"
export PATH="$HOME/.local/bin:$PATH"
# make Java behave when not using a DE
export _JAVA_AWT_WM_NONREPARENTING=1
@ -23,43 +23,56 @@ export GPG_TTY=$(tty)
# Mozilla + Wayland
export MOZ_ENABLE_WAYLAND=1
# xsecurelock settings
export XSECURELOCK_AUTH=auth_x11
export XSECURELOCK_AUTHPROTO=authproto_pam
export XSECURELOCK_BURNIN_MITIGATION=300
export XSECURELOCK_PASSWORD_PROMPT=time
{{ if eq .chezmoi.hostname "helix" -}}
# scale GTK applicatons on hidpi screens
export GDK_SCALE=2 GDK_DPI_SCALE=0.50
export GDK_SCALE=2 GDK_DPI_SCALE=0.50 thunar
export GDK_SCALE=2 GDK_DPI_SCALE="0.50 Simple-scan"
export GDK_SCALE=2 GDK_DPI_SCALE=0.50 lutris
export GDK_SCALE=2 GDK_DPI_SCALE=0.50 spotify
export GDK_SCALE=2 GDK_DPI_SCALE=0.50 pinta
export GDK_SCALE=2 GDK_DPI_SCALE=0.50 Gajim
export GDK_SCALE=2 GDK_DPI_SCALE=0.50 Ristretto
export GDK_SCALE=2 GDK_DPI_SCALE=0.50 ghex
{{- end }}
## No littering in $HOME!
# bash
export HISTFILE="${XDG_STATE_HOME}"/bash_history
export HISTFILE="$XDG_STATE_HOME"/bash_history
# cargo
export CARGO_HOME="${XDG_DATA_HOME}"/cargo
export CARGO_HOME="$XDG_DATA_HOME"/cargo
# go
export GOPATH="${XDG_DATA_HOME}"/go
export GOMODCACHE="${XDG_CACHE_HOME}"/go/mod
export GOPATH="$XDG_DATA_HOME"/go
export GOMODCACHE="$XDG_CACHE_HOME"/go/mod
# gpg
export GNUPGHOME="${XDG_DATA_HOME}"/gnupg
export GNUPGHOME="$XDG_DATA_HOME"/gnupg
# gtk2
export GTK2_RC_FILES="${XDG_CONFIG_HOME}"/gtk-2.0/gtkrc
export GTK2_RC_FILES="$XDG_CONFIG_HOME"/gtk-2.0/gtkrc
# node
export NPM_CONFIG_USERCONFIG="${XDG_CONFIG_HOME}"/npm/npmrc
export NPM_CONFIG_USERCONFIG="$XDG_CONFIG_HOME"/npm/npmrc
# python
export PYTHONSTARTUP="${XDG_CONFIG_HOME}"/python/pythonrc
export PYTHONPYCACHEPREFIX="${XDG_CACHE_HOME}"/python
export PYTHONUSERBASE="${XDG_DATA_HOME}"/python
export PYTHONSTARTUP="$XDG_CONFIG_HOME"/python/pythonrc
export PYTHONPYCACHEPREFIX="$XDG_CACHE_HOME"/python
export PYTHONUSERBASE=$XDG_DATA_HOME/python
# wine
export WINEPREFIX="${XDG_DATA_HOME}"/wine
export WINEPREFIX="$XDG_DATA_HOME"/wine
# Xorg
export XINITRC="${XDG_CONFIG_HOME}"/X11/xinitrc
export XAUTHORITY="${XDG_RUNTIME_DIR}"/Xauthority
export XINITRC="$XDG_CONFIG_HOME"/X11/xinitrc
export XAUTHORITY="$XDG_RUNTIME_DIR"/Xauthority
# Source other dotfiles
[[ -f ~/.profile ]] && . ~/.profile

View file

@ -0,0 +1,88 @@
#!/bin/bash
{{ if ne .chezmoi.hostname "hydrus" }}
bspc monitor eDP-1 -d 1 2 3 4 5 6 7 8 9 10
{{ else }}
bspc monitor DisplayPort-0 -d 1 2 3 4 5
bspc monitor DisplayPort-1 -d 6 7 8 9 10
{{ end }}
bspc config border_width 2
{{- if eq .chezmoi.hostname "helix" }}
bspc config window_gap 10
bspc config top_padding 72
bspc config bottom_padding 0
{{ else if eq .chezmoi.hostname "hydrus"}}
bspc config window_gap 4
bspc config top_padding 0
bspc config bottom_padding 24
{{ else }}
bspc config window_gap 4
bspc config top_padding 38
bspc config bottom_padding 0
{{- end}}
bspc config split_ratio 0.50
bspc config borderless_monocle true
bspc config gapless_monocle true
bspc rule -a Galculator state=floating
bspc rule -a vlc state=floating
bspc rule -a Blueman-manager state=floating
bspc rule -a Blueberry.py state=floating
bspc rule -a Bitwarden state=floating
bspc rule -a Leafpad state=floating
bspc rule -a KeePassXC state=floating
bspc rule -a Mousepad state=floating
bspc rule -a firefox desktop='^1' follow=on
bspc rule -a firefoxdeveloperedition desktop='^1' follow=on
bspc rule -a Chromium desktop='^2' follow=on
bspc rule -a Vivaldi-stable desktop='^2' follow=on
bspc rule -a Caja desktop='^3' follow=on
bspc rule -a Thunar desktop='^3' follow=on
bspc rule -a Evince desktop='^4' follow=on
bspc rule -a Soffice desktop='^4' follow=on
bspc rule -a Simple-scan='^4' follow=on
bspc rule -a Xsane desktop='^4' follow=on state=floating
bspc rule -a Steam desktop='^5' follow=on state=floating
bspc rule -a Lutris desktop='^5' follow=on state=floating
bspc rule -a eadesktop.exe desktop='^5' follow=on state=floating
bspc rule -a origin.exe desktop='^5' state=floating
bspc rule -a Alacritty desktop='^6' follow=on
bspc rule -a kitty desktop='^6' follow=on
bspc rule -a URxvt desktop='^6' follow=on
bspc rule -a Emacs desktop='^7' follow=on state=fullscreen
bspc rule -a Dino desktop='^8'
bspc rule -a Gajim desktop='^8'
bspc rule -a discord desktop='^8'
bspc rule -a Element desktop='^9'
bspc rule -a Mattermost desktop='^9'
bspc rule -a Slack desktop='^9'
bspc rule -a teams-for-linux desktop='^9'
bspc rule -a Evolution desktop='^10'
bspc rule -a thunderbird desktop='^10'
bspc rule -a tutanota-desktop desktop='^10'
### Focus on 1st workspace by default
bspc desktop -f 1
### Autostart
grep -x sxhkd > /dev/null || sxhkd &
/usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1 &
xss-lock -n /usr/lib/xsecurelock/dimmer -l -- xsecurelock &
dunst &
xsettingsd &
sh $HOME/.local/bin/fehbg &
dex -a &
redshift -r &
{{- if (or (eq .chezmoi.hostname "helix") (eq .chezmoi.hostname "hydrus")) }}
$HOME/.local/bin/pipewire-launcher &
{{- end }}
{{- if (or (eq .chezmoi.hostname "helix") (eq .chezmoi.hostname "triangulum")) }}
$HOME/.local/bin/xidlehook-laptop &
$HOME/.local/bin/single-polybar-launcher &
cbatticon -u 20 -i standard -c "loginctl suspend" &
sleep 5 && pa-notify -t 3 &
{{- end }}
{{- if eq .chezmoi.hostname "hydrus"}}
$HOME/.local/bin/xidlehook-desktop &
$HOME/.local/bin/dual-polybar-launcher &
{{- end }}

View file

@ -1,48 +1,151 @@
# dunstrc - dunst(5)
# See dunst(5) for all configuration options
[global]
### Display ###
# Which monitor should the notifications be displayed on.
monitor = 0
# Display notification on focused monitor. Possible modes are:
# mouse: follow mouse pointer
# keyboard: follow window with keyboard focus
# none: don't follow anything
#
# "keyboard" needs a window manager that exports the
# _NET_ACTIVE_WINDOW property.
# This should be the case for almost all modern window managers.
#
# If this option is set to mouse or keyboard, the monitor option
# will be ignored.
follow = keyboard
### Geometry ###
# dynamic width from 0 to 300
# width = (0, 300)
# constant width of 300
width = 300
# The maximum height of a single notification, excluding the frame.
height = 300
# Position the notification in the top right corner
origin = top-right
# Offset from the origin
offset = 10x50
# Scale factor. It is auto-detected if value is 0.
scale = 0
notification_limit = 5
# Maximum number of notification (0 means no limit)
notification_limit = 0
### Progress bar ###
# Turn on the progess bar. It appears when a progress hint is passed with
# for example dunstify -h int:value:12
progress_bar = true
# Set the progress bar height. This includes the frame, so make sure
# it's at least twice as big as the frame width.
progress_bar_height = 10
# Set the frame width of the progress bar
progress_bar_frame_width = 1
# Set the minimum width for the progress bar
progress_bar_min_width = 150
# Set the maximum width for the progress bar
progress_bar_max_width = 300
### Appearance ###
# Show how many messages are currently hidden (because of
# notification_limit).
indicate_hidden = yes
# The transparency of the window. Range: [0; 100].
# This option will only work if a compositing window manager is
# present (e.g. xcompmgr, compiz, etc.). (X11 only)
transparency = 10
# Draw a line of "separator_height" pixel height between two
# notifications.
# Set to 0 to disable.
# If gap_size is greater than 0, this setting will be ignored.
separator_height = 2
# Padding between text and separator.
padding = 8
# Horizontal padding.
horizontal_padding = 8
# Padding between text and icon.
text_icon_padding = 0
# Defines width in pixels of frame around the notification window.
# Set to 0 to disable.
frame_width = 3
# Defines color of the frame around the notification window.
frame_color = "#222222"
# Size of gap to display between notifications - requires a compositor.
# If value is greater than 0, separator_height will be ignored and a border
# of size frame_width will be drawn around each notification instead.
# Click events on gaps do not currently propagate to applications below.
gap_size = 0
# Define a color for the separator.
# possible values are:
# * auto: dunst tries to find a color fitting to the background;
# * foreground: use the same color as the foreground;
# * frame: use the same color as the frame;
# * anything else will be interpreted as a X color.
separator_color = frame
# Sort messages by urgency.
sort = yes
idle_threshold = 120
corner_radius = 4
# Don't remove messages, if the user is idle (no mouse or keyboard input)
# for longer than idle_threshold seconds.
# Set to 0 to disable.
# A client can set the 'transient' hint to bypass this. See the rules
# section for how to disable this if necessary
# idle_threshold = 120
### Text ###
font = Hack 11
# The spacing between lines. If the height is smaller than the
# font height, it will get raised to the font height.
line_height = 0
# Possible values are:
# full: Allow a small subset of html markup in notifications:
# <b>bold</b>
# <i>italic</i>
# <s>strikethrough</s>
# <u>underline</u>
#
# For a complete reference see
# <https://docs.gtk.org/Pango/pango_markup.html>.
#
# strip: This setting is provided for compatibility with some broken
# clients that send markup even though it's not enabled on the
# server. Dunst will try to strip the markup but the parsing is
# simplistic so using this option outside of matching rules for
# specific applications *IS GREATLY DISCOURAGED*.
#
# no: Disable markup parsing, incoming notifications will be treated as
# plain text. Dunst will not advertise that it has the body-markup
# capability if this is set as a global setting.
#
# It's important to note that markup inside the format option will be parsed
# regardless of what this is set to.
markup = full
# The format of the message. Possible variables are:
@ -57,45 +160,125 @@
# Markup is allowed
format = "<b>%s</b>\n%b"
# Alignment of message text.
# Possible values are "left", "center" and "right".
alignment = left
# Vertical alignment of message text and icon.
# Possible values are "top", "center" and "bottom".
vertical_alignment = center
# Show age of message if message is older than show_age_threshold
# seconds.
# Set to -1 to disable.
show_age_threshold = 60
# Specify where to make an ellipsis in long lines.
# Possible values are "start", "middle" and "end".
ellipsize = middle
# Ignore newlines '\n' in notifications.
ignore_newline = no
# Stack together notifications with the same content
stack_duplicates = true
# Hide the count of stacked notifications with the same content
hide_duplicate_count = false
# Display indicators for URLs (U) and actions (A).
show_indicators = yes
### Icons ###
# Recursive icon lookup. You can set a single theme, instead of having to
# define all lookup paths.
enable_recursive_icon_lookup = true
icon_theme = "Qogir-dark, Papirus-Dark, Adwaita"
# Set icon theme (only used for recursive icon lookup)
icon_theme = "Papirus-Dark, Adwaita"
# You can also set multiple icon themes, with the leftmost one being used first.
# icon_theme = "Adwaita, breeze"
# Align icons left/right/top/off
icon_position = left
# Scale small icons up to this size, set to 0 to disable. Helpful
# for e.g. small files or high-dpi screens. In case of conflict,
# max_icon_size takes precedence over this.
min_icon_size = 32
# Scale larger icons down to this size, set to 0 to disable
max_icon_size = 128
# Paths to default icons (only neccesary when not using recursive icon lookup)
icon_path = /usr/share/icons/gnome/16x16/status/:/usr/share/icons/gnome/16x16/devices/
### History ###
# Should a notification popped up from history be sticky or timeout
# as if it would normally do.
sticky_history = yes
# Maximum amount of notifications kept in history
history_length = 20
### Misc/Advanced ###
# dmenu path.
dmenu = /usr/bin/dmenu -p dunst:
# Browser for opening urls in context menu.
browser = /usr/bin/xdg-open
# Always run rule-defined scripts, even if the notification is suppressed
always_run_script = true
# Define the title of the windows spawned by dunst
title = Dunst
# Define the class of the windows spawned by dunst
class = Dunst
# Define the corner radius of the notification window
# in pixel size. If the radius is 0, you have no rounded
# corners.
# The radius will be automatically lowered if it exceeds half of the
# notification height to avoid clipping text and/or icons.
corner_radius = 0
# Ignore the dbus closeNotification message.
# Useful to enforce the timeout set by dunst configuration. Without this
# parameter, an application may close the notification sent before the
# user defined timeout.
ignore_dbusclose = false
### Wayland ###
# These settings are Wayland-specific. They have no effect when using X11
# Uncomment this if you want to let notications appear under fullscreen
# applications (default: overlay)
# layer = top
# Set this to true to use X11 output on Wayland.
force_xwayland = false
### Legacy
# Use the Xinerama extension instead of RandR for multi-monitor support.
# This setting is provided for compatibility with older nVidia drivers that
# do not support RandR and using it on systems that support RandR is highly
# discouraged.
#
# By enabling this setting dunst will not be able to detect when a monitor
# is connected or disconnected which might break follow mode if the screen
# layout changes.
force_xinerama = false
### mouse
# Defines list of actions for each mouse event
# Possible values are:
# * none: Don't do anything.
# * do_action: Invoke the action determined by the action_name rule. If there is no
# such action, open the context menu.
@ -111,19 +294,31 @@
mouse_middle_click = close_all
mouse_right_click = close_current
# Experimental features that may or may not work correctly. Do not expect them
# to have a consistent behaviour across releases.
[experimental]
# Calculate the dpi to use on a per-monitor basis.
# If this setting is enabled the Xft.dpi value will be ignored and instead
# dunst will attempt to calculate an appropriate dpi value for each monitor
# using the resolution and physical size. This might be useful in setups
# where there are multiple screens with very different dpi values.
per_monitor_dpi = false
[urgency_low]
# IMPORTANT: colors have to be defined in quotation marks.
# Otherwise the "#" and following would be interpreted as a comment.
background = "#222222"
foreground = "#555555"
timeout = 10
# Icon for notifications with low urgency, uncomment to enable
#default_icon = /path/to/icon
[urgency_normal]
background = "#222222"
foreground = "#dfdfdf"
timeout = 10
# Icon for notifications with normal urgency, uncomment to enable
#default_icon = /path/to/icon
[urgency_critical]
@ -131,4 +326,129 @@
foreground = "#8a4644"
frame_color = "#ff0000"
timeout = 0
# Icon for notifications with critical urgency, uncomment to enable
#default_icon = /path/to/icon
# Every section that isn't one of the above is interpreted as a rules to
# override settings for certain messages.
#
# Messages can be matched by
# appname (discouraged, see desktop_entry)
# body
# category
# desktop_entry
# icon
# match_transient
# msg_urgency
# stack_tag
# summary
#
# and you can override the
# background
# foreground
# format
# frame_color
# fullscreen
# new_icon
# set_stack_tag
# set_transient
# set_category
# timeout
# urgency
# icon_position
# skip_display
# history_ignore
# action_name
# word_wrap
# ellipsize
# alignment
# hide_text
#
# Shell-like globbing will get expanded.
#
# Instead of the appname filter, it's recommended to use the desktop_entry filter.
# GLib based applications export their desktop-entry name. In comparison to the appname,
# the desktop-entry won't get localized.
#
# SCRIPTING
# You can specify a script that gets run when the rule matches by
# setting the "script" option.
# The script will be called as follows:
# script appname summary body icon urgency
# where urgency can be "LOW", "NORMAL" or "CRITICAL".
#
# NOTE: It might be helpful to run dunst -print in a terminal in order
# to find fitting options for rules.
# Disable the transient hint so that idle_threshold cannot be bypassed from the
# client
#[transient_disable]
# match_transient = yes
# set_transient = no
#
# Make the handling of transient notifications more strict by making them not
# be placed in history.
#[transient_history_ignore]
# match_transient = yes
# history_ignore = yes
# fullscreen values
# show: show the notifications, regardless if there is a fullscreen window opened
# delay: displays the new notification, if there is no fullscreen window active
# If the notification is already drawn, it won't get undrawn.
# pushback: same as delay, but when switching into fullscreen, the notification will get
# withdrawn from screen again and will get delayed like a new notification
#[fullscreen_delay_everything]
# fullscreen = delay
#[fullscreen_show_critical]
# msg_urgency = critical
# fullscreen = show
#[espeak]
# summary = "*"
# script = dunst_espeak.sh
#[script-test]
# summary = "*script*"
# script = dunst_test.sh
#[ignore]
# # This notification will not be displayed
# summary = "foobar"
# skip_display = true
#[history-ignore]
# # This notification will not be saved in history
# summary = "foobar"
# history_ignore = yes
#[skip-display]
# # This notification will not be displayed, but will be included in the history
# summary = "foobar"
# skip_display = yes
#[signed_on]
# appname = Pidgin
# summary = "*signed on*"
# urgency = low
#
#[signed_off]
# appname = Pidgin
# summary = *signed off*
# urgency = low
#
#[says]
# appname = Pidgin
# summary = *says*
# urgency = critical
#
#[twitter]
# appname = Pidgin
# summary = *twitter.com*
# urgency = normal
#
#[stack-volumes]
# appname = "some_volume_notifiers"
# set_stack_tag = "volume"
#
# vim: ft=cfg

438
dot_config/picom/picom.conf Normal file
View file

@ -0,0 +1,438 @@
#################################
# Shadows #
#################################
# Enabled client-side shadows on windows. Note desktop windows
# (windows with '_NET_WM_WINDOW_TYPE_DESKTOP') never get shadow,
# unless explicitly requested using the wintypes option.
#
# shadow = false
shadow = true;
# The blur radius for shadows, in pixels. (defaults to 12)
# shadow-radius = 12
shadow-radius = 7;
# The opacity of shadows. (0.0 - 1.0, defaults to 0.75)
# shadow-opacity = .75
# The left offset for shadows, in pixels. (defaults to -15)
# shadow-offset-x = -15
shadow-offset-x = -7;
# The top offset for shadows, in pixels. (defaults to -15)
# shadow-offset-y = -15
shadow-offset-y = -7;
# Red color value of shadow (0.0 - 1.0, defaults to 0).
# shadow-red = 0
# Green color value of shadow (0.0 - 1.0, defaults to 0).
# shadow-green = 0
# Blue color value of shadow (0.0 - 1.0, defaults to 0).
# shadow-blue = 0
# Hex string color value of shadow (#000000 - #FFFFFF, defaults to #000000). This option will override options set shadow-(red/green/blue)
# shadow-color = "#000000"
# Specify a list of conditions of windows that should have no shadow.
#
# examples:
# shadow-exclude = "n:e:Notification";
#
# shadow-exclude = []
shadow-exclude = [
"name = 'Notification'",
"class_g = 'Conky'",
"class_g ?= 'Notify-osd'",
"class_g = 'Cairo-clock'",
"_GTK_FRAME_EXTENTS@:c",
"class_g = 'firefox' && argb"
];
# Specify a list of conditions of windows that should have no shadow painted over, such as a dock window.
# clip-shadow-above = []
# Specify a X geometry that describes the region in which shadow should not
# be painted in, such as a dock window region. Use
# shadow-exclude-reg = "x10+0+0"
# for example, if the 10 pixels on the bottom of the screen should not have shadows painted on.
#
# shadow-exclude-reg = ""
# Crop shadow of a window fully on a particular Xinerama screen to the screen.
# xinerama-shadow-crop = false
#################################
# Fading #
#################################
# Fade windows in/out when opening/closing and when opacity changes,
# unless no-fading-openclose is used.
# fading = false
fading = true;
# Opacity change between steps while fading in. (0.01 - 1.0, defaults to 0.028)
# fade-in-step = 0.028
fade-in-step = 0.03;
# Opacity change between steps while fading out. (0.01 - 1.0, defaults to 0.03)
# fade-out-step = 0.03
fade-out-step = 0.03;
# The time between steps in fade step, in milliseconds. (> 0, defaults to 10)
# fade-delta = 10
# Specify a list of conditions of windows that should not be faded.
fade-exclude = [ "class_g = 'xsecurelock'" ];
# Do not fade on window open/close.
# no-fading-openclose = false
# Do not fade destroyed ARGB windows with WM frame. Workaround of bugs in Openbox, Fluxbox, etc.
# no-fading-destroyed-argb = false
#################################
# Transparency / Opacity #
#################################
# Opacity of inactive windows. (0.1 - 1.0, defaults to 1.0)
# inactive-opacity = 1
inactive-opacity = 0.95;
# Opacity of window titlebars and borders. (0.1 - 1.0, disabled by default)
# frame-opacity = 1.0
frame-opacity = 0.9;
# Let inactive opacity set by -i override the '_NET_WM_WINDOW_OPACITY' values of windows.
# inactive-opacity-override = true
inactive-opacity-override = false;
# Default opacity for active windows. (0.0 - 1.0, defaults to 1.0)
# active-opacity = 1.0
# Dim inactive windows. (0.0 - 1.0, defaults to 0.0)
# inactive-dim = 0.0
# Specify a list of conditions of windows that should never be considered focused.
# focus-exclude = []
focus-exclude = [ "class_g = 'Cairo-clock'" ];
# Use fixed inactive dim value, instead of adjusting according to window opacity.
# inactive-dim-fixed = 1.0
# Specify a list of opacity rules, in the format `PERCENT:PATTERN`,
# like `50:name *= "Firefox"`. picom-trans is recommended over this.
# Note we don't make any guarantee about possible conflicts with other
# programs that set '_NET_WM_WINDOW_OPACITY' on frame or client windows.
# example:
# opacity-rule = [ "80:class_g = 'URxvt'" ];
#
# opacity-rule = [
# "90:class_g = 'URxvt' && focused",
# "60:class_g = 'URxvt' && !focused"
# ];
#################################
# Corners #
#################################
# Sets the radius of rounded window corners. When > 0, the compositor will
# round the corners of windows. Does not interact well with
# `transparent-clipping`.
corner-radius = 5
# Exclude conditions for rounded corners.
rounded-corners-exclude = [
"window_type = 'dock'",
"window_type = 'desktop'"
];
#################################
# Background-Blurring #
#################################
# Parameters for background blurring, see the *BLUR* section for more information.
blur-method = "dual_kawase"
# blur-size = 12
#
# blur-deviation = false
#
blur-strength = 3
# Blur background of semi-transparent / ARGB windows.
# Bad in performance, with driver-dependent behavior.
# The name of the switch may change without prior notifications.
#
blur-background = true
# Blur background of windows when the window frame is not opaque.
# Implies:
# blur-background
# Bad in performance, with driver-dependent behavior. The name may change.
#
blur-background-frame = true
# Use fixed blur strength rather than adjusting according to window opacity.
# blur-background-fixed = false
# Specify the blur convolution kernel, with the following format:
# example:
# blur-kern = "5,5,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1";
#
# blur-kern = ""
blur-kern = "3x3box";
# Exclude conditions for background blur.
# blur-background-exclude = []
blur-background-exclude = [
#"window_type = 'dock'",
"window_type = 'desktop'",
"_GTK_FRAME_EXTENTS@:c",
"class_g = 'slop'"
];
#################################
# General Settings #
#################################
# Enable remote control via D-Bus. See the man page for more details.
# dbus = true
# Daemonize process. Fork to background after initialization. Causes issues with certain (badly-written) drivers.
# daemon = false
# Specify the backend to use: `xrender`, `glx`, or `xr_glx_hybrid`.
# `xrender` is the default one.
#
backend = "glx"
# backend = "xrender";
# Enable/disable VSync.
# vsync = false
vsync = true;
# Enable remote control via D-Bus. See the *D-BUS API* section below for more details.
# dbus = false
# Try to detect WM windows (a non-override-redirect window with no
# child that has 'WM_STATE') and mark them as active.
#
# mark-wmwin-focused = false
mark-wmwin-focused = true;
# Mark override-redirect windows that doesn't have a child window with 'WM_STATE' focused.
# mark-ovredir-focused = false
mark-ovredir-focused = false;
# Try to detect windows with rounded corners and don't consider them
# shaped windows. The accuracy is not very high, unfortunately.
#
# detect-rounded-corners = false
detect-rounded-corners = true;
# Detect '_NET_WM_WINDOW_OPACITY' on client windows, useful for window managers
# not passing '_NET_WM_WINDOW_OPACITY' of client windows to frame windows.
#
# detect-client-opacity = false
detect-client-opacity = true;
# Use EWMH '_NET_ACTIVE_WINDOW' to determine currently focused window,
# rather than listening to 'FocusIn'/'FocusOut' event. Might have more accuracy,
# provided that the WM supports it.
#
# use-ewmh-active-win = false
# Unredirect all windows if a full-screen opaque window is detected,
# to maximize performance for full-screen windows. Known to cause flickering
# when redirecting/unredirecting windows.
#
# unredir-if-possible = false
# Delay before unredirecting the window, in milliseconds. Defaults to 0.
# unredir-if-possible-delay = 0
# Conditions of windows that shouldn't be considered full-screen for unredirecting screen.
# unredir-if-possible-exclude = []
# Use 'WM_TRANSIENT_FOR' to group windows, and consider windows
# in the same group focused at the same time.
#
# detect-transient = false
detect-transient = true;
# Use 'WM_CLIENT_LEADER' to group windows, and consider windows in the same
# group focused at the same time. This usually means windows from the same application
# will be considered focused or unfocused at the same time.
# 'WM_TRANSIENT_FOR' has higher priority if detect-transient is enabled, too.
#
# detect-client-leader = false
# Resize damaged region by a specific number of pixels.
# A positive value enlarges it while a negative one shrinks it.
# If the value is positive, those additional pixels will not be actually painted
# to screen, only used in blur calculation, and such. (Due to technical limitations,
# with use-damage, those pixels will still be incorrectly painted to screen.)
# Primarily used to fix the line corruption issues of blur,
# in which case you should use the blur radius value here
# (e.g. with a 3x3 kernel, you should use `--resize-damage 1`,
# with a 5x5 one you use `--resize-damage 2`, and so on).
# May or may not work with *--glx-no-stencil*. Shrinking doesn't function correctly.
#
# resize-damage = 1
# Specify a list of conditions of windows that should be painted with inverted color.
# Resource-hogging, and is not well tested.
#
# invert-color-include = []
# GLX backend: Avoid using stencil buffer, useful if you don't have a stencil buffer.
# Might cause incorrect opacity when rendering transparent content (but never
# practically happened) and may not work with blur-background.
# My tests show a 15% performance boost. Recommended.
#
glx-no-stencil = true;
# GLX backend: Avoid rebinding pixmap on window damage.
# Probably could improve performance on rapid window content changes,
# but is known to break things on some drivers (LLVMpipe, xf86-video-intel, etc.).
# Recommended if it works.
#
# glx-no-rebind-pixmap = false
# Disable the use of damage information.
# This cause the whole screen to be redrawn every time, instead of the part of the screen
# has actually changed. Potentially degrades the performance, but might fix some artifacts.
# The opposing option is use-damage
#
# no-use-damage = false
use-damage = true;
# Use X Sync fence to sync clients' draw calls, to make sure all draw
# calls are finished before picom starts drawing. Needed on nvidia-drivers
# with GLX backend for some users.
#
# xrender-sync-fence = false
# GLX backend: Use specified GLSL fragment shader for rendering window
# contents. Read the man page for a detailed explanation of the interface.
#
# window-shader-fg = "default"
# Use rules to set per-window shaders. Syntax is SHADER_PATH:PATTERN, similar
# to opacity-rule. SHADER_PATH can be "default". This overrides window-shader-fg.
#
# window-shader-fg-rule = [
# "my_shader.frag:window_type != 'dock'"
# ]
# Force all windows to be painted with blending. Useful if you
# have a glx-fshader-win that could turn opaque pixels transparent.
#
# force-win-blend = false
# Do not use EWMH to detect fullscreen windows.
# Reverts to checking if a window is fullscreen based only on its size and coordinates.
#
# no-ewmh-fullscreen = false
# Dimming bright windows so their brightness doesn't exceed this set value.
# Brightness of a window is estimated by averaging all pixels in the window,
# so this could comes with a performance hit.
# Setting this to 1.0 disables this behaviour. Requires --use-damage to be disabled. (default: 1.0)
#
# max-brightness = 1.0
# Make transparent windows clip other windows like non-transparent windows do,
# instead of blending on top of them.
#
# transparent-clipping = false
# Specify a list of conditions of windows that should never have transparent
# clipping applied. Useful for screenshot tools, where you need to be able to
# see through transparent parts of the window.
#
# transparent-clipping-exclude = []
# Set the log level. Possible values are:
# "trace", "debug", "info", "warn", "error"
# in increasing level of importance. Case doesn't matter.
# If using the "TRACE" log level, it's better to log into a file
# using *--log-file*, since it can generate a huge stream of logs.
#
# log-level = "debug"
log-level = "warn";
# Set the log file.
# If *--log-file* is never specified, logs will be written to stderr.
# Otherwise, logs will to written to the given file, though some of the early
# logs might still be written to the stderr.
# When setting this option from the config file, it is recommended to use an absolute path.
#
# log-file = "/path/to/your/log/file"
# Show all X errors (for debugging)
# show-all-xerrors = false
# Write process ID to a file.
# write-pid-path = "/path/to/your/log/file"
# Window type settings
#
# 'WINDOW_TYPE' is one of the 15 window types defined in EWMH standard:
# "unknown", "desktop", "dock", "toolbar", "menu", "utility",
# "splash", "dialog", "normal", "dropdown_menu", "popup_menu",
# "tooltip", "notification", "combo", and "dnd".
#
# Following per window-type options are available: ::
#
# fade, shadow:::
# Controls window-type-specific shadow and fade settings.
#
# opacity:::
# Controls default opacity of the window type.
#
# focus:::
# Controls whether the window of this type is to be always considered focused.
# (By default, all window types except "normal" and "dialog" has this on.)
#
# full-shadow:::
# Controls whether shadow is drawn under the parts of the window that you
# normally won't be able to see. Useful when the window has parts of it
# transparent, and you want shadows in those areas.
#
# clip-shadow-above:::
# Controls whether shadows that would have been drawn above the window should
# be clipped. Useful for dock windows that should have no shadow painted on top.
#
# redir-ignore:::
# Controls whether this type of windows should cause screen to become
# redirected again after been unredirected. If you have unredir-if-possible
# set, and doesn't want certain window to cause unnecessary screen redirection,
# you can set this to `true`.
#
wintypes:
{
tooltip = { fade = true; shadow = true; opacity = false; focus = true; full-shadow = false; };
dock = { shadow = false; clip-shadow-above = true; opacity = 0.9; }
dnd = { shadow = false; }
popup_menu = { opacity = false; }
dropdown_menu = { opacity = false; }
menu = { shadow = false; };
# dropdown_menu = { shadow = false; };
# popup_menu = { shadow = false; };
# utility = { shadow = false; };
};

View file

@ -0,0 +1,21 @@
[color]
background = ${xrdb:background}
foreground = ${xrdb:foreground}
sep = ${xrdb:color8}
white = ${xrdb:color15}
black = ${xrdb:color0}
dark-grey = ${xrdb:color8}
light-grey = ${xrdb:color7}
dark-red = ${xrdb:color1}
red = ${xrdb:color9}
dark-green = ${xrdb:color2}
green = ${xrdb:color10}
dark-yellow = ${xrdb:color3}
yellow = ${xrdb:color11}
dark-blue = ${xrdb:color4}
blue = ${xrdb:color12}
dark-magenta = ${xrdb:color5}
magenta = ${xrdb:color13}
dark-cyan = ${xrdb:color6}
cyan = ${xrdb:color14}

View file

@ -0,0 +1,152 @@
[global/wm]
include-file = ~/.config/polybar/colors.ini
include-file = ~/.config/polybar/modules.ini
include-file = ~/.config/polybar/custom_modules.ini
margin-bottom = 0
margin-top = 0
[bar/one]
{{- if eq .chezmoi.hostname "hydrus"}}
monitor = DisplayPort-0
height = 24
bottom = true
{{- else }}
monitor = eDP-1
height = 72
bottom = false
{{- end}}
monitor-fallback =
monitor-strict = false
enable-ipc = true
override-redirect = true
fixed-center = true
width = 99.5%
offset-x = 0.25%
offset-y = 0.25%
{{- if eq .chezmoi.hostname "helix" }}
dpi-x = 216
dpi-y = 216
{{- end }}
background = ${color.background}
foreground = ${color.foreground}
radius = 5.0
line-size = 0
line-color = ${color.background}
border-bottom-size = 0
border-bottom-color = ${color.foreground}
padding = 1
module-margin-left = 1
module-margin-right = 0
seperator =
dim-value = 1.0
locale = en_US.UTF-8
font-0 = Hack:size=10;3
font-1 = Font Awesome 6 Free:style=Solid:size=12;3
font-2 = Font Awesome 6 Free:style=Regular:size=12;3
font-3 = Font Awesome 6 Brands:style=Regular:size=12;3
modules-left = workspaces sep title
modules-center =
modules-right = keyboard sep pulseaudio-control sep date sep
tray-position = right
tray-detached = false
{{- if eq .chezmoi.hostname "helix" }}
tray-maxsize = 40
{{- else }}
tray-maxsize = 16
{{- end }}
tray-background = ${color.background}
tray-offset-x = 0
tray-offset-y = 0
tray-padding = 0
tray-scale = 1.0
wm-name = bspwm
wm-restack = bspwm
scroll-up = bspwm-desknext
scroll-down = bspwm-deskprev
click-left =
click-middle =
click-right =
;scroll-up = bspc desktop -f prev.local
;scroll-down = bspc desktop -f next.local
double-click-left =
double-click-middle =
double-click-right =
cursor-click =
cursor-scroll =
[bar/two]
{{- if eq .chezmoi.hostname "hydrus"}}
monitor = DisplayPort-1
height = 24
{{- else }}
monitor = eDP-1
height = 72
{{- end}}
bottom = true
monitor-fallback =
monitor-strict = false
enable-ipc = true
override-redirect = true
fixed-center = true
width = 99.5%
offset-x = 0.25%
offset-y = 0.25%
{{- if eq .chezmoi.hostname "helix" }}
dpi-x = 216
dpi-y = 216
{{- end }}
background = ${color.background}
foreground = ${color.foreground}
radius = 5.0
line-size = 0
line-color = ${color.background}
border-bottom-size = 0
border-bottom-color = ${color.foreground}
padding = 1
module-margin-left = 1
module-margin-right = 1
seperator =
dim-value = 1.0
locale = en_US.UTF-8
font-0 = Hack:size=10;3
font-1 = Font Awesome 6 Free:style=Solid:size=12;3
font-2 = Font Awesome 6 Free:style=Regular:size=12;3
font-3 = Font Awesome 6 Brands:style=Regular:size=12;3
modules-left = workspaces sep title
modules-center = spotify
modules-right = network sep cpu sep memory sep filesystem
tray-position = none
tray-detached = false
tray-maxsize = 16
tray-background = ${color.background}
tray-offset-x = 0
tray-offset-y = 0
tray-padding = 0
tray-scale = 1.0
wm-name = bspwm
wm-restack = bspwm
scroll-up = bspwm-desknext
scroll-down = bspwm-deskprev
click-left =
click-middle =
click-right =
;scroll-up = bspc desktop -f prev.local
;scroll-down = bspc desktop -f next.local
double-click-left =
double-click-middle =
double-click-right =
cursor-click =
cursor-scroll =
[settings]
screenchange-reload = false
pseudo-transparency = false

View file

@ -0,0 +1,107 @@
[module/sep]
type = custom/text
content = |
content-foreground = ${color.sep}
[module/powermenu]
type = custom/menu
; If true, <label-toggle> will be to the left of the menu items (default).
; If false, it will be on the right of all the items.
expand-right = true
; "menu-LEVEL-N" has the same properties as "label-NAME" with
; the additional "exec" property
;
; Available exec commands:
; menu-open-LEVEL
; menu-close
; Other commands will be executed using "/usr/bin/env sh -c $COMMAND"
menu-0-0 = " Log Out |"
menu-0-0-exec = menu-open-1
menu-0-1 = " Suspend |"
menu-0-1-exec = menu-open-2
menu-0-2 = " Reboot |"
menu-0-2-exec = menu-open-3
menu-0-3 = " Shutdown "
menu-0-3-exec = menu-open-4
menu-1-0 = " Back |"
menu-1-0-exec = menu-open-0
menu-1-1 = " Log Out "
menu-1-1-exec = loginctl kill-session $XDG_SESSION_ID
menu-2-0 = " Back |"
menu-2-0-exec = menu-open-0
menu-2-1 = " Suspend "
menu-2-1-exec = systemctl suspend
menu-2-2 = " Suspend-then-Hibernate "
menu-2-2-exec = systemctl suspend-then-hibernate
menu-2-3 = " Hibernate "
menu-2-3-exec = systemctl hibernate
menu-3-0 = " Back |"
menu-3-0-exec = menu-open-0
menu-3-1 = " Reboot "
menu-3-1-exec = systemctl reboot
menu-4-0 = " Back |"
menu-4-0-exec = menu-open-0
menu-4-1 = " Shutdown "
menu-4-1-exec = systemctl poweroff
; Available tags:
; <label-toggle> (default) - gets replaced with <label-(open|close)>
; <menu> (default)
; Note that if you use <label-toggle> you must also include
; the definition for <label-open>
format = <label-toggle><menu>
label-open =
label-open-foreground = ${color.dark-cyan}
label-open-padding = 1
label-close =
label-close-foreground = ${color.red}
label-close-padding = 1
; Optional item separator
; Default: none
;label-separator = " | "
;label-separator-foreground = ${color.foreground}
;label-separator-background = ${color.background-alt}
;;label-open-foreground = ${color.foreground}
;;label-close-foreground = ${color.background}
[module/pulseaudio-control]
type = custom/script
tail = true
;format-underline = ${colors.cyan}
;label-padding = 2
;label-foreground = ${color.foreground}
label-foreground = ${color.blue}
# You can copy-paste your options for each possible action, which is more
# trouble-free but repetitive, or apply only the relevant ones (for example
# --sink-blacklist is only needed for next-sink).
exec = pulseaudio-control --icons-volume " , , " --icon-muted " " --node-nicknames-from "device.profile.description" listen
#exec = pulseaudio-control --icons-volume " , , " --icon-muted " " --sink-nicknames-from "device.description" --sink-nickname "alsa_output.pci-0000_00_1b.0.analog-stereo: Speakers" --sink-nickname "alsa_output.usb-Kingston_HyperX_Virtual_Surround_Sound_00000000-00.analog-stereo: Headphones" listen
click-right = exec pavucontrol &
click-left = pulseaudio-control togmute
click-middle = pulseaudio-control next-sink
#click-middle = pulseaudio-control --sink-blacklist "alsa_output.pci-0000_01_00.1.hdmi-stereo-extra2" next-sink
scroll-up = pulseaudio-control --volume-max 130 up
scroll-down = pulseaudio-control --volume-max 130 down
[module/spotify]
type = custom/script
interval = 1
format-prefix = " "
format = <label>
exec = python /usr/bin/polybar-spotify -f '{artist}: {song}'
format-prefix-foreground = ${color.dark-green}
;format-underline = ${color.green}

View file

@ -0,0 +1,897 @@
[module/alsa]
type = internal/alsa
; Soundcard to be used
; Usually in the format hw:# where # is the card number
; You can find the different card numbers in `/proc/asound/cards`
master-soundcard = default
speaker-soundcard = default
headphone-soundcard = default
; Name of the master, speaker and headphone mixers
; Use the following command to list available mixer controls:
; $ amixer scontrols | sed -nr "s/.*'([[:alnum:]]+)'.*/\1/p"
; If master, speaker or headphone-soundcard isn't the default,
; use `amixer -c # scontrols` instead where # is the number
; of the master, speaker or headphone soundcard respectively
;
; Default: Master
master-mixer = Master
; Optionally define speaker and headphone mixers
; Default: none
;speaker-mixer = Speaker
; Default: none
;headphone-mixer = Headphone
; NOTE: This is required if headphone_mixer is defined
; Use the following command to list available device controls
; $ amixer controls | sed -r "/CARD/\!d; s/.*=([0-9]+).*name='([^']+)'.*/printf '%3.0f: %s\n' '\1' '\2'/e" | sort
; You may also need to use `amixer -c # controls` as above for the mixer names
; Default: none
;headphone-id = 9
; Use volume mapping (similar to amixer -M and alsamixer), where the increase in volume is linear to the ear
; Default: false
mapped = true
; Interval for volume increase/decrease (in percent points)
; Default: 5
interval = 5
; Available tags:
; <label-volume> (default)
; <ramp-volume>
; <bar-volume>
format-volume = <ramp-volume> <label-volume>
; Available tags:
; <label-muted> (default)
; <ramp-volume>
; <bar-volume>
format-muted = <label-muted>
format-muted-prefix =
format-muted-prefix-foreground = ${color.red}
; Available tokens:
; %percentage% (default)
label-volume = %percentage%%
; Available tokens:
; %percentage% (default)
label-muted = " Muted"
label-muted-foreground = ${color.sep}
; Only applies if <ramp-volume> is used
ramp-volume-0 =
ramp-volume-1 =
ramp-volume-2 =
ramp-volume-foreground = ${color.blue}
; If defined, it will replace <ramp-volume> when
; headphones are plugged in to `headphone_control_numid`
; If undefined, <ramp-volume> will be used for both
; Only applies if <ramp-volume> is used
ramp-headphones-0 =
ramp-headphones-1 =
ramp-headphones-foreground = ${color.blue}
[module/battery0]
type = internal/battery
; This is useful in case the battery never reports 100% charge
full-at = 99
; Use the following command to list batteries and adapters:
; $ ls -1 /sys/class/power_supply/
battery = BAT0
adapter = AC
; If an inotify event haven't been reported in this many
; seconds, manually poll for new values.
;
; Needed as a fallback for systems that don't report events
; on sysfs/procfs.
;
; Disable polling by setting the interval to 0.
;
; Default: 5
poll-interval = 2
; see "man date" for details on how to format the time string
; NOTE: if you want to use syntax tags here you need to use %%{...}
; Default: %H:%M:%S
time-format = %H:%M
; Available tags:
; <label-charging> (default)
; <bar-capacity>
; <ramp-capacity>
; <animation-charging>
format-charging = <animation-charging> <label-charging>
; Available tags:
; <label-discharging> (default)
; <bar-capacity>
; <ramp-capacity>
; <animation-discharging>
format-discharging = <ramp-capacity> <label-discharging>
; Available tags:
; <label-full> (default)
; <bar-capacity>
; <ramp-capacity>
format-full = <label-full>
format-full-prefix =
format-full-prefix-foreground = ${color.dark-green}
; Available tokens:
; %percentage% (default)
; %time%
; %consumption% (shows current charge rate in watts)
label-charging = %percentage%%
; Available tokens:
; %percentage% (default)
; %time%
; %consumption% (shows current discharge rate in watts)
label-discharging = %percentage%%
; Available tokens:
; %percentage% (default)
label-full = " Full"
; Only applies if <ramp-capacity> is used
ramp-capacity-0 =
ramp-capacity-1 =
ramp-capacity-2 =
ramp-capacity-3 =
ramp-capacity-4 =
ramp-capacity-foreground = ${color.dark-yellow}
; Only applies if <bar-capacity> is used
;bar-capacity-width = 10
; Only applies if <animation-charging> is used
animation-charging-0 =
animation-charging-1 =
animation-charging-2 =
animation-charging-3 =
animation-charging-4 =
animation-charging-foreground = ${color.green}
; Framerate in milliseconds
animation-charging-framerate = 750
; Only applies if <animation-discharging> is used
animation-discharging-0 =
animation-discharging-1 =
animation-discharging-2 =
animation-discharging-3 =
animation-discharging-4 =
; Framerate in milliseconds
animation-discharging-framerate = 500
[module/battery1]
type = internal/battery
; This is useful in case the battery never reports 100% charge
full-at = 89
; Use the following command to list batteries and adapters:
; $ ls -1 /sys/class/power_supply/
battery = BAT1
adapter = AC
; If an inotify event haven't been reported in this many
; seconds, manually poll for new values.
;
; Needed as a fallback for systems that don't report events
; on sysfs/procfs.
;
; Disable polling by setting the interval to 0.
;
; Default: 5
poll-interval = 2
; see "man date" for details on how to format the time string
; NOTE: if you want to use syntax tags here you need to use %%{...}
; Default: %H:%M:%S
time-format = %H:%M
; Available tags:
; <label-charging> (default)
; <bar-capacity>
; <ramp-capacity>
; <animation-charging>
format-charging = <animation-charging> <label-charging>
; Available tags:
; <label-discharging> (default)
; <bar-capacity>
; <ramp-capacity>
; <animation-discharging>
format-discharging = <ramp-capacity> <label-discharging>
; Available tags:
; <label-full> (default)
; <bar-capacity>
; <ramp-capacity>
format-full = <label-full>
format-full-prefix =
format-full-prefix-foreground = ${color.dark-green}
; Available tokens:
; %percentage% (default)
; %time%
; %consumption% (shows current charge rate in watts)
label-charging = %percentage%%
; Available tokens:
; %percentage% (default)
; %time%
; %consumption% (shows current discharge rate in watts)
label-discharging = %percentage%%
; Available tokens:
; %percentage% (default)
label-full = " Full"
; Only applies if <ramp-capacity> is used
ramp-capacity-0 =
ramp-capacity-1 =
ramp-capacity-2 =
ramp-capacity-3 =
ramp-capacity-4 =
ramp-capacity-foreground = ${color.dark-yellow}
; Only applies if <bar-capacity> is used
;bar-capacity-width = 10
; Only applies if <animation-charging> is used
animation-charging-0 =
animation-charging-1 =
animation-charging-2 =
animation-charging-3 =
animation-charging-4 =
animation-charging-foreground = ${color.green}
; Framerate in milliseconds
animation-charging-framerate = 750
; Only applies if <animation-discharging> is used
animation-discharging-0 =
animation-discharging-1 =
animation-discharging-2 =
animation-discharging-3 =
animation-discharging-4 =
; Framerate in milliseconds
animation-discharging-framerate = 500
[module/bspwm]
type = internal/bspwm
; Only show workspaces defined on the same output as the bar
; NOTE: The bspwm and XRandR monitor names must match, which they do by default.
; Default: true
pin-workspaces = true
; Output mode flags after focused state label
; Default: false
;;inline-mode = false
; Create click handler used to focus workspace
; Default: true
enable-click = true
; Create scroll handlers used to cycle workspaces
; Default: true
enable-scroll = true
; Set the scroll cycle direction
; Default: true
;;reverse-scroll = false
; Use fuzzy (partial) matching on labels when assigning
; icons to workspaces
; Example: code;♚ will apply the icon to all workspaces
; containing 'code' in the label
; Default: false
;;fuzzy-match = true
; ws-icon-[0-9]+ = label;icon
; Note that the label needs to correspond with the bspwm workspace name
;;ws-icon-0 = code;♚
;;ws-icon-1 = office;♛
;;ws-icon-2 = graphics;♜
;;ws-icon-3 = mail;♝
;;ws-icon-4 = web;♞
;;ws-icon-default = ♟
; Available tags:
; <label-monitor>
; <label-state> - gets replaced with <label-(focused|urgent|occupied|empty)>
; <label-mode> - gets replaced with <label-(monocle|tiled|fullscreen|floating|locked|sticky|private)>
; Default: <label-state>
format = <label-state> <label-mode>
; Available tokens:
; %name%
; Default: %name%
label-monitor = %name%
; If any values for label-dimmed-N are defined, the workspace/mode
; colors will get overridden with those values if the monitor is out of focus
; To only override workspaces in a specific state, use:
; label-dimmed-focused
; label-dimmed-occupied
; label-dimmed-urgent
; label-dimmed-empty
;;label-dimmed-foreground = #555
;;label-dimmed-underline = ${bar/top.background}
;;label-dimmed-focused-background = #f00
; Available tokens:
; %name%
; %icon%
; %index%
; Default: %icon% %name%
label-focused = %icon%
label-focused-foreground = ${color.foreground}
label-focused-background = ${color.background}
;label-focused-underline = #fba922
; Available tokens:
; %name%
; %icon%
; %index%
; Default: %icon% %name%
label-occupied = %icon%
;label-occupied-underline = #555555
; Available tokens:
; %name%
; %icon%
; %index%
; Default: %icon% %name%
label-urgent = %icon%
label-urgent-foreground = ${color.white}
label-urgent-background = ${color.red}
;label-urgent-underline = #9b0a20
; Available tokens:
; %name%
; %icon%
; %index%
; Default: %icon% %name%
label-empty = %icon%
label-empty-foreground = ${color.foreground}
; The following labels will be used to indicate the layout/mode
; for the focused workspace. Requires <label-mode>
;
; Available tokens:
; None
label-monocle =
label-tiled =
label-fullscreen =
label-floating =
label-pseudotiled = P
label-locked =
label-locked-foreground = #bd2c40
label-sticky =
label-sticky-foreground = #fba922
label-private =
label-private-foreground = #bd2c40
; Separator in between workspaces
label-separator = |
label-separator-padding = 2
label-separator-foreground = ${color.sep}
[module/cpu]
type = internal/cpu
; Seconds to sleep between updates
; Default: 1
interval = 1
; Available tags:
; <label> (default)
; <bar-load>
; <ramp-load>
; <ramp-coreload>
;;format = <label> <ramp-coreload>
format = <label>
format-prefix =
format-prefix-foreground = ${color.red}
; Available tokens:
; %percentage% (default) - total cpu load averaged over all cores
; %percentage-sum% - Cumulative load on all cores
; %percentage-cores% - load percentage for each core
; %percentage-core[1-9]% - load percentage for specific core
label = " %percentage%%"
; Spacing between individual per-core ramps
;;ramp-coreload-spacing = 1
;;ramp-coreload-0 = ${cpu.load0}
;;ramp-coreload-1 = ${cpu.load1}
;;ramp-load-0 = ${cpu.load0}
;;ramp-load-1 = ${cpu.load1}i
[module/date]
type = internal/date
; Seconds to sleep between updates
interval = 1.0
; See "http://en.cppreference.com/w/cpp/io/manip/put_time" for details on how to format the date string.
; NOTE: if you want to use syntax tags here you need to use %%{...}
date = %a, %d %b
; Optional time format
time = @ %R
; if `date-alt` or `time-alt` is defined, clicking
; the module will toggle between formats
date-alt = %m/%d
time-alt = %R
; Available tags:
; <label> (default)
format = %{A3:gsimplecal:} <label> %{A}
format-prefix = " "
format-prefix-foreground = ${color.red}
; Available tokens:
; %date%
; %time%
; Default: %date%
label = %date% %time%
[module/filesystem]
type = internal/fs
; Mountpoints to display
mount-0 = /
#mount-1 = /home
;mount-2 = /var
; Seconds to sleep between updates
; Default: 30
interval = 30
; Display fixed precision values
; Default: false
fixed-values = true
; Spacing between entries
; Default: 2
spacing = 0
; Available tags:
; <label-mounted> (default)
; <bar-free>
; <bar-used>
; <ramp-capacity>
format-mounted = <label-mounted>
format-mounted-prefix =
format-mounted-prefix-foreground = ${color.dark-green}
; Available tags:
; <label-unmounted> (default)
format-unmounted = <label-unmounted>
format-unmounted-prefix =
format-unmounted-prefix-foreground = ${color.red}
; Available tokens:
; %mountpoint%
; %type%
; %fsname%
; %percentage_free%
; %percentage_used%
; %total%
; %free%
; %used%
; Default: %mountpoint% %percentage_free%%
label-mounted = " %used% / %total% "
; Available tokens:
; %mountpoint%
; Default: %mountpoint% is not mounted
label-unmounted = " %mountpoint%: NA"
[module/memory]
type = internal/memory
; Seconds to sleep between updates
; Default: 1
interval = 5
; Available tags:
; <label> (default)
; <bar-used>
; <bar-free>
; <ramp-used>
; <ramp-free>
; <bar-swap-used>
; <bar-swap-free>
; <ramp-swap-used>
; <ramp-swap-free>
format = <label>
format-prefix =
format-prefix-foreground = ${color.blue}
; Available tokens:
; %percentage_used% (default)
; %percentage_free%
; %gb_used%
; %gb_free%
; %gb_total%
; %mb_used%
; %mb_free%
; %mb_total%
; %percentage_swap_used%
; %percentage_swap_free%
; %mb_swap_total%
; %mb_swap_free%
; %mb_swap_used%
; %gb_swap_total%
; %gb_swap_free%
; %gb_swap_used%
label = " %mb_used% / %gb_total%"
; Only applies if <ramp-used> is used
;;ramp-used-0 = ${memory.used0}
;;ramp-used-1 = ${memory.used1}
;;ramp-used-2 = ${memory.used2}
; Only applies if <ramp-free> is used
;;ramp-free-0 = ${memory.free0}
;;ramp-free-1 = ${memory.free1}
;;ramp-free-2 = ${memory.free2}
; If you use both a wired and a wireless network, just add 2 module definitions.
[module/wired-network]
type = internal/network
interface = eth0
[module/wireless-network]
type = internal/network
interface = wlp4s0
; Normal Module
[module/network]
type = internal/network
interface = wlan0
; Seconds to sleep between updates
; Default: 1
interval = 1.0
; Test connectivity every Nth update
; A value of 0 disables the feature
; NOTE: Experimental (needs more testing)
; Default: 0
;ping-interval = 3
; @deprecated: Define min width using token specifiers (%downspeed:min% and %upspeed:min%)
; Minimum output width of upload/download rate
; Default: 3
;;udspeed-minwidth = 5
; Accumulate values from all interfaces
; when querying for up/downspeed rate
; Default: false
accumulate-stats = false
; Consider an `UNKNOWN` interface state as up.
; Some devices have an unknown state, even when they're running
; Default: false
unknown-as-up = false
; Available tags:
; <label-connected> (default)
; <ramp-signal>
format-connected = <label-connected>
; Available tags:
; <label-disconnected> (default)
format-disconnected = <label-disconnected>
format-disconnected-prefix =
format-disconnected-prefix-foreground = ${color.dark-yellow}
; Available tags:
; <label-connected> (default)
; <label-packetloss>
; <animation-packetloss>
;;format-packetloss = <animation-packetloss> <label-connected>
; Available tokens:
; %ifname% [wireless+wired]
; %local_ip% [wireless+wired]
; %local_ip6% [wireless+wired]
; %essid% [wireless]
; %signal% [wireless]
; %upspeed% [wireless+wired]
; %downspeed% [wireless+wired]
; %linkspeed% [wired]
; Default: %ifname% %local_ip%
label-connected = " %signal%%  %upspeed%  %downspeed%"
label-connected-foreground = ${color.magenta}
; Available tokens:
; %ifname% [wireless+wired]
; Default: (none)
label-disconnected = "Offline"
label-disconnected-foreground = ${color.dark-red}
; Available tokens:
; %ifname% [wireless+wired]
; %local_ip% [wireless+wired]
; %local_ip6% [wireless+wired]
; %essid% [wireless]
; %signal% [wireless]
; %upspeed% [wireless+wired]
; %downspeed% [wireless+wired]
; %linkspeed% [wired]
; Default: (none)
;label-packetloss = %essid%
;label-packetloss-foreground = #eefafafa
; Only applies if <ramp-signal> is used
;ramp-signal-0 = 
;ramp-signal-1 = 
;ramp-signal-2 = 
;ramp-signal-3 = 
;ramp-signal-foreground = ${color.purple}
; Only applies if <animation-packetloss> is used
;;animation-packetloss-0 = ⚠
;;animation-packetloss-0-foreground = #ffa64c
;;animation-packetloss-1 = ⚠
;;animation-packetloss-1-foreground = #000000
; Framerate in milliseconds
;;animation-packetloss-framerate = 500
[module/pulseaudio]
type = internal/pulseaudio
; Sink to be used, if it exists (find using `pacmd list-sinks`, name field)
; If not, uses default sink
sink = alsa_output.pci-0000_12_00.3.analog-stereo
; Use PA_VOLUME_UI_MAX (~153%) if true, or PA_VOLUME_NORM (100%) if false
; Default: true
use-ui-max = true
; Interval for volume increase/decrease (in percent points)
; Default: 5
interval = 5
; Available tags:
; <label-volume> (default)
; <ramp-volume>
; <bar-volume>
format-volume = <ramp-volume> <label-volume>
; Available tags:
; <label-muted> (default)
; <ramp-volume>
; <bar-volume>
format-muted = <label-muted>
format-muted-prefix =
format-muted-prefix-foreground = ${color.red}
; Available tokens:
; %percentage% (default)
; %decibels%
label-volume = %percentage%%
; Available tokens:
; %percentage% (default)
; %decibels%
label-muted = " Muted"
label-muted-foreground = ${color.sep}
; Only applies if <ramp-volume> is used
ramp-volume-0 =
ramp-volume-1 =
ramp-volume-2 =
ramp-volume-foreground = ${color.dark-blue}
; Right and Middle click
click-right = pavucontrol
; click-middle =
[module/temperature]
type = internal/temperature
; Seconds to sleep between updates
; Default: 1
interval = 5
; Thermal zone to use
; To list all the zone types, run
; $ for i in /sys/class/thermal/thermal_zone*; do echo "$i: $(<$i/type)"; done
; Default: 0
thermal-zone = 1
; Full path of temperature sysfs path
; Use `sensors` to find preferred temperature source, then run
; $ for i in /sys/class/hwmon/hwmon*/temp*_input;
; do echo "$(<$(dirname $i)/name): $(cat ${i%_*}_label 2>/dev/null ||
; echo $(basename ${i%_*})) $(readlink -f $i)"; done
; to find path to desired file
; Default reverts to thermal zone setting
;;hwmon-path = /sys/devices/platform/coretemp.0/hwmon/hwmon2/temp1_input
hwmon-path = /sys/devices/platform/coretemp.0/hwmon/hwmon2/temp1_input
;hwmon-path = /sys/class/hwmon/hwmon1/temp1_input
; Threshold temperature to display warning label (in degrees celsius)
; Default: 80
warn-temperature = 84
; Whether or not to show units next to the temperature tokens (°C, °F)
; Default: true
units = true
; Available tags:
; <label> (default)
; <ramp>
format = <ramp> <label>
; Available tags:
; <label-warn> (default)
; <ramp>
format-warn = <ramp> <label-warn>
; Available tokens:
; %temperature% (deprecated)
; %temperature-c% (default, temperature in °C)
; %temperature-f% (temperature in °F)
label = %temperature-c%
; Available tokens:
; %temperature% (deprecated)
; %temperature-c% (default, temperature in °C)
; %temperature-f% (temperature in °F)
label-warn = "%temperature-c%"
label-warn-foreground = ${color.red}
; Requires the <ramp> tag
; The icon selection will range from 0 to `warn-temperature`
; with the current temperature as index.
ramp-0 =
ramp-1 =
ramp-2 =
ramp-3 =
ramp-4 =
ramp-foreground = ${color.cyan}
[module/keyboard]
type = internal/xkeyboard
; List of indicators to ignore
blacklist-0 = num lock
blacklist-1 = scroll lock
; Available tags:
; <label-layout> (default)
; <label-indicator> (default)
format = <label-layout> <label-indicator>
format-prefix =
format-prefix-foreground = ${color.magenta}
; Available tokens:
; %layout%
; %name%
; %number%
; Default: %layout%
label-layout = " %layout%"
; Available tokens:
; %name%
; Default: %name%
label-indicator-on = "%name%"
label-indicator-on-foreground = ${color.white}
label-indicator-on-background = ${color.dark-red}
[module/title]
type = internal/xwindow
; Available tags:
; <label> (default)
format = <label>
format-prefix =
format-foreground = ${color.foreground}
; Available tokens:
; %title%
; Default: %title%
label = " %title%"
label-maxlen = 30
; Used instead of label when there is no window title
label-empty = " Desktop"
[module/workspaces]
type = internal/xworkspaces
; Only show workspaces defined on the same output as the bar
;
; Useful if you want to show monitor specific workspaces
; on different bars
;
; Default: false
pin-workspaces = true
; Create click handler used to focus desktop
; Default: true
enable-click = true
; Create scroll handlers used to cycle desktops
; Default: true
enable-scroll = true
; icon-[0-9]+ = <desktop-name>;<icon>
; NOTE: The desktop name needs to match the name configured by the WM
; You can get a list of the defined desktops using:
; $ xprop -root _NET_DESKTOP_NAMES
icon-0 = 1;
icon-1 = 2;
icon-2 = 3;
icon-3 = 4;
icon-4 = 5;
icon-5 = 6;
icon-6 = 7;
icon-7 = 8;
;
icon-8 = 9;
icon-9 = 10;
icon-default =
; Available tags:
; <label-monitor>
; <label-state> - gets replaced with <label-(active|urgent|occupied|empty)>
; Default: <label-state>
format = <label-state>
; Available tokens:
; %name%
; Default: %name%
label-monitor = %name%
; Available tokens:
; %name%
; %icon%
; %index%
; Default: %icon% %name%
label-active = %icon%
label-active-foreground = ${color.red}
; Available tokens:
; %name%
; %icon%
; %index%
; Default: %icon% %name%
label-occupied = %icon%
label-occupied-foreground = ${color.cyan}
; Available tokens:
; %name%
; %icon%
; %index%
; Default: %icon% %name%
label-urgent = %icon%
label-urgent-foreground = ${color.dark-red}
; Available tokens:
; %name%
; %icon%
; %index%
; Default: %icon% %name%
label-empty = %icon%
label-empty-foreground = ${color.foreground}
label-active-padding = 1
label-urgent-padding = 1
label-occupied-padding = 1
label-empty-padding = 1

View file

@ -56,8 +56,8 @@ riverctl map normal Super Grave send-to-output previous
riverctl map normal Super+Shift Return zoom
# Increase/decrease the main ratio of rivertile(1)
riverctl map normal Super B send-layout-cmd rivertile "main-ratio -0.05"
riverctl map normal Super F send-layout-cmd rivertile "main-ratio +0.05"
riverctl map normal Super F send-layout-cmd rivertile "main-ratio -0.05"
riverctl map normal Super B send-layout-cmd rivertile "main-ratio +0.05"
# Increment/decrement the main count of rivertile(1)
riverctl map normal Super+Alt F send-layout-cmd rivertile "main-count +1"
@ -212,7 +212,7 @@ riverctl map-switch normal lid close 'waylock-launcher'
# Default layout generator - rivertile(1)
riverctl default-layout rivertile
rivertile -view-padding 4 -outer-padding 4 -main-ratio .55 &
rivertile -view-padding 4 -outer-padding 4 -main-ratio .55 -main-location right &
# Autostart
dbus-update-activation-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP=river &
@ -224,15 +224,14 @@ gnome-keyring-daemon --start --components=ssh &
kanshi &
pipewire-launcher &
swayidle-launcher &
waybar-launcher &
dunst &
gammastep -r &
{{- if eq .chezmoi.hostname "hydrus" }}
waybar-launcher &
river-tag-overlay &
blueman-applet &
swaybg -m fill -i "${HOME}/Pictures/Wallpapers/dark-forest-path.jpg" &
{{- if eq .chezmoi.hostname "hydrus" }}
swaybg -m fill -i ${HOME}/Pictures/Wallpapers/dark-forest-path.jpg &
{{- else if eq .chezmoi.hostname "helix" }}
yambar-launcher &
swaybg -m center -i "${HOME}/Pictures/Wallpapers/Mountain Retreat.jpg" &
{{- end }}
blueman-applet &
sleep 10 && nextcloud --background &

185
dot_config/rofi/config.rasi Normal file
View file

@ -0,0 +1,185 @@
/* ==========================================================================
Everforest dark theme for rofi
Based on the Everforest color scheme for Vim by sainnhe
https://github.com/sainnhe/everforest/
========================================================================== */
* {
/* Theme settings */
highlight: bold italic;
scrollbar: true;
/* Everforest colors */
everforest-bg0: #323d43;
everforest-bg1: #525c6d;
everforest-fg: #d8cacc;
everforest-black: #4a555b;
everforest-dark-grey: #525c62;
everforest-dark-red: #e26c6e;
everforest-red: #e68183;
everforest-dark-yellow: #d5b26b;
everforest-yellow: #dbbc7f;
everforest-dark-blue: #6eb2a9;
everforest-blue: #7fbbb3;
everforest-dark-magenta: #cf87a9;
everforest-magenta: #d699b6;
everforest-dark-cyan: #72b783;
everforest-cyan: #83c092;
everforest-light-grey: #d8caac;
everforest-white: #d8caac;
/* Theme colors */
background: @everforest-bg0;
background-color: @background;
foreground: @everforest-fg;
border-color: @everforest-dark-yellow;
separatorcolor: @border-color;
scrollbar-handle: @border-color;
normal-background: @background;
normal-foreground: @foreground;
alternate-normal-background: @everforest-bg1;
alternate-normal-foreground: @foreground;
selected-normal-background: @everforest-dark-cyan;
selected-normal-foreground: @everforest-black;
active-background: @everforest-yellow;
active-foreground: @background;
alternate-active-background: @active-background;
alternate-active-foreground: @active-foreground;
selected-active-background: @everforest-cyan;
selected-active-foreground: @active-foreground;
urgent-background: @everforest-dark-red;
urgent-foreground: @background;
alternate-urgent-background: @urgent-background;
alternate-urgent-foreground: @urgent-foreground;
selected-urgent-background: @everforest-red;
selected-urgent-foreground: @urgent-foreground;
}
window {
background-color: @background;
border: 2;
padding: 2;
}
mainbox {
border: 0;
padding: 0;
}
message {
border: 2px 0 0;
border-color: @separatorcolor;
padding: 1px;
}
textbox {
highlight: @highlight;
text-color: @foreground;
}
listview {
border: 2px solid 0 0;
padding: 2px 0 0;
border-color: @separatorcolor;
spacing: 2px;
scrollbar: @scrollbar;
}
element {
border: 0;
padding: 2px;
}
element.normal.normal {
background-color: @normal-background;
text-color: @normal-foreground;
}
element.normal.urgent {
background-color: @urgent-background;
text-color: @urgent-foreground;
}
element.normal.active {
background-color: @active-background;
text-color: @active-foreground;
}
element.selected.normal {
background-color: @selected-normal-background;
text-color: @selected-normal-foreground;
}
element.selected.urgent {
background-color: @selected-urgent-background;
text-color: @selected-urgent-foreground;
}
element.selected.active {
background-color: @selected-active-background;
text-color: @selected-active-foreground;
}
element.alternate.normal {
background-color: @alternate-normal-background;
text-color: @alternate-normal-foreground;
}
element.alternate.urgent {
background-color: @alternate-urgent-background;
text-color: @alternate-urgent-foreground;
}
element.alternate.active {
background-color: @alternate-active-background;
text-color: @alternate-active-foreground;
}
scrollbar {
width: 4px;
border: 0;
handle-color: @scrollbar-handle;
handle-width: 8px;
padding: 0;
}
mode-switcher {
border: 2px 0 0;
border-color: @separatorcolor;
}
inputbar {
spacing: 0;
text-color: @normal-foreground;
padding: 2px;
children: [ prompt, textbox-prompt-sep, entry, case-indicator ];
}
case-indicator,
entry,
prompt,
button {
spacing: 0;
text-color: @normal-foreground;
}
button.selected {
background-color: @selected-normal-background;
text-color: @selected-normal-foreground;
}
textbox-prompt-sep {
expand: false;
str: ":";
text-color: @normal-foreground;
margin: 0 0.3em 0 0;
}
element-text, element-icon {
background-color: inherit;
text-color: inherit;
}

View file

@ -0,0 +1,188 @@
#
# wm independent hotkeys
#
# terminal emulator
super + Return
kitty
{{ if eq .chezmoi.hostname "helix"}}
# power menu
super + @End
rofi -eh 2 -dpi 240 -show power-menu -modi power-menu:rofi-power-menu
# program launcher
super + @space
rofi -dpi 240 -modi drun, run -show drun -show-icons
{{ else }}
# power menu
super + @End
rofi -show power-menu -modi power-menu:/usr/bin/rofi-power-menu
# program launcher
super + @space
rofi -modi drun, run -show drun -show-icons
{{ end }}
# make sxhkd reload its configuration files:
super + Escape
pkill -USR1 -x sxhkd
# Show list of open windows
alt + @Tab
rofi -show window
# Lock the screen
ctrl + alt + l
xset s activate
# Screenshot
Print
maim | xclip -selection clipboard -t image/png
alt + Print
maim -s | xclip -selection clipboard -t image/png
shift + Print
maim -i $(xdotool getactivewindow) | xclip -selection clipboard -t image/png
# bspwm hotkeys
#
# quit/restart bspwm
super + alt + {q,r}
bspc {quit,wm -r}
# close and kill
super + {_,shift + }q
bspc node -{c,k}
# alternate between the tiled and monocle layout
super + m
bspc desktop -l next
# send the newest marked node to the newest preselected node
super + y
bspc node newest.marked.local -n newest.!automatic.local
# swap the current node and the biggest window
super + g
bspc node -s biggest.window
#
# state/flags
#
# set the window state
super + {t,shift + t,s,f}
bspc node -t {tiled,pseudo_tiled,floating,fullscreen}
# set the node flags
super + ctrl + {m,x,y,z}
bspc node -g {marked,locked,sticky,private}
#
# focus/swap
#
# focus the node in the given direction
super + {_,shift + }{h,j,k,l}
bspc node -{f,s} {west,south,north,east}
# focus the node for the given path jump
super + {p,b,comma,period}
bspc node -f @{parent,brother,first,second}
# focus the next/previous window in the current desktop
super + {_,shift + }c
bspc node -f {next,prev}.local.!hidden.window
# focus the next/previous desktop in the current monitor
super + bracket{left,right}
bspc desktop -f {prev,next}.local
# focus the last node/desktop
super + {grave,Tab}
bspc {node,desktop} -f last
# focus the older or newer node in the focus history
super + {o,i}
bspc wm -h off; \
bspc node {older,newer} -f; \
bspc wm -h on
# focus or send to the given desktop
super + {_,shift + }{1-9,0}
bspc {desktop -f,node -d} '^{1-9,10}'
#
# preselect
#
# preselect the direction
super + ctrl + {h,j,k,l}
bspc node -p {west,south,north,east}
# preselect the ratio
super + ctrl + {1-9}
bspc node -o 0.{1-9}
# cancel the preselection for the focused node
super + ctrl + space
bspc node -p cancel
# cancel the preselection for the focused desktop
super + ctrl + shift + space
bspc query -N -d | xargs -I id -n 1 bspc node id -p cancel
#
# move/resize
#
# expand a window by moving one of its side outward
super + alt + {h,j,k,l}
bspc node -z {left -20 0,bottom 0 20,top 0 -20,right 20 0}
# contract a window by moving one of its side inward
super + alt + shift + {h,j,k,l}
bspc node -z {right -20 0,top 0 20,bottom 0 -20,left 20 0}
# move a floating window
super + {Left,Down,Up,Right}
bspc node -v {-20 0,0 20,0 -20,20 0}
### Function Keys
XF86AudioMute
pactl set-sink-mute @DEFAULT_SINK@ toggle
XF86AudioLowerVolume
pactl set-sink-volume @DEFAULT_SINK@ -5%
XF86AudioRaiseVolume
pactl set-sink-volume @DEFAULT_SINK@ +5%
XF86AudioMicMute
pactl set-source-mute @DEFAULT_SOURCE@ toggle
XF86MonBrightnessDown
xbacklight -dec 2
XF86MonBrightnessUp
xbacklight -inc 2
XF86Display
mirror-outputs
XF86WLAN
toggle-wifi
XF86Tools
lxappearance
XF86Search
pamac-manager
XF86LaunchA
rofi -show window
XF86Explorer
thunar

304
dot_config/tint2/tint2rc Normal file
View file

@ -0,0 +1,304 @@
#---- Generated by tint2conf aeaf ----
# See https://gitlab.com/o9000/tint2/wikis/Configure for
# full documentation of the configuration options.
#-------------------------------------
# Gradients
# Gradient 1: thin film effect
gradient = horizontal
start_color = #111122 30
end_color = #112211 30
color_stop = 60 #221111 30
# Gradient 2: radial glow
gradient = radial
start_color = #ffffff 20
end_color = #ffffff 0
#-------------------------------------
# Backgrounds
# Background 1: Panel
rounded = 8
border_width = 0
border_sides = TBLR
background_color = #323d43 90
border_color = #323d43 30
background_color_hover = #323d43 70
border_color_hover = #323d43 30
background_color_pressed = #323d43 100
border_color_pressed = #323d43 30
# Background 2: Default task, Iconified task
rounded = 4
border_width = 1
border_sides = TBLR
background_color = #4a555b 20
border_color = #525c62 30
background_color_hover = #aaaaaa 22
border_color_hover = #eaeaea 44
background_color_pressed = #555555 4
border_color_pressed = #eaeaea 44
# Background 3: Active task
rounded = 4
border_width = 1
border_sides = TBLR
background_color = #7fbbb3 40
border_color = #d8caac 40
background_color_hover = #aaaaaa 22
border_color_hover = #eaeaea 44
background_color_pressed = #555555 4
border_color_pressed = #eaeaea 44
# Background 4: Urgent task
rounded = 4
border_width = 1
border_sides = TBLR
background_color = #e26c6e 100
border_color = #d5b26b 100
background_color_hover = #dbbc7f 100
border_color_hover = #d5b26b 100
background_color_pressed = #555555 4
border_color_pressed = #d5b26b 100
# Background 5: Tooltip
rounded = 1
border_width = 1
border_sides = TBLR
background_color = #9bb86f 100
border_color = #4a555b 100
background_color_hover = #ffffaa 100
border_color_hover = #000000 100
background_color_pressed = #ffffaa 100
border_color_pressed = #000000 100
#-------------------------------------
# Panel
panel_items = TE:B:SCP
panel_size = 99% 48
scale_relative_to_dpi = 216
panel_margin = 0 8
panel_padding = 2 0 2
panel_background_id = 1
wm_menu = 1
panel_dock = 0
panel_position = top center horizontal
panel_layer = bottom
panel_monitor = all
panel_shrink = 0
autohide = 0
autohide_show_timeout = 0
autohide_hide_timeout = 0.5
autohide_height = 2
strut_policy = follow_size
panel_window_name = tint2
disable_transparency = 0
mouse_effects = 1
font_shadow = 0
mouse_hover_icon_asb = 100 0 10
mouse_pressed_icon_asb = 100 0 0
#-------------------------------------
# Taskbar
taskbar_mode = multi_desktop
taskbar_hide_if_empty = 1
taskbar_padding = 0 0 2
taskbar_background_id = 0
taskbar_active_background_id = 0
taskbar_name = 1
taskbar_hide_inactive_tasks = 0
taskbar_hide_different_monitor = 0
taskbar_hide_different_desktop = 0
taskbar_always_show_all_desktop_tasks = 0
taskbar_name_padding = 4 2
taskbar_name_background_id = 0
taskbar_name_active_background_id = 0
taskbar_name_font = Hack 18
taskbar_name_font_color = #d8caac 100
taskbar_name_active_font_color = #d0bf9b 100
taskbar_distribute_size = 0
taskbar_sort_order = none
task_align = left
#-------------------------------------
# Task
task_text = 1
task_icon = 1
task_centered = 1
urgent_nb_of_blink = 100000
task_maximum_size = 150 35
task_padding = 2 4 2
task_tooltip = 1
task_thumbnail = 0
task_thumbnail_size = 210
task_font = Hack 10
task_font_color = #d8caac 100
task_background_id = 2
task_active_background_id = 3
task_urgent_background_id = 4
task_iconified_background_id = 2
mouse_left = toggle
mouse_middle = none
mouse_right = close
mouse_scroll_up = prev_task
mouse_scroll_down = next_task
#-------------------------------------
# System tray (notification area)
systray_padding = 2 4 4
systray_background_id = 0
systray_sort = ascending
systray_icon_size = 28
systray_icon_asb = 100 0 0
systray_monitor = 1
systray_name_filter =
#-------------------------------------
# Launcher
launcher_padding = 2 4 2
launcher_background_id = 0
launcher_icon_background_id = 0
launcher_icon_size = 24
launcher_icon_asb = 100 0 0
launcher_icon_theme_override = 0
startup_notifications = 1
launcher_tooltip = 1
launcher_item_app = tint2conf.desktop
launcher_item_app = firefox.desktop
launcher_item_app = iceweasel.desktop
launcher_item_app = chromium-browser.desktop
launcher_item_app = google-chrome.desktop
#-------------------------------------
# Clock
time1_format = %H:%M
time2_format = %a %d %b
time1_font = Hack 14
time2_font = Hack 10
time1_timezone =
time2_timezone =
clock_font_color = #d8caac 100
clock_padding = 6 0
clock_background_id = 0
clock_tooltip = %H:%M %A %d %B %Y
clock_tooltip_timezone =
clock_lclick_command = gsimplecal
clock_rclick_command =
clock_mclick_command =
clock_uwheel_command =
clock_dwheel_command =
#-------------------------------------
# Battery
battery_tooltip = 1
battery_low_status = 10
battery_low_cmd = notify-send "Low battery: 10%"
battery_full_cmd = notify-send "Battery done charging"
bat1_font = Hack 14
battery_font_color = #d8caac 100
bat1_format = | BAT: %s %p %t
bat2_format =
battery_padding = 1 0
battery_background_id = 0
battery_hide = 101
battery_lclick_command =
battery_rclick_command =
battery_mclick_command =
battery_uwheel_command =
battery_dwheel_command =
ac_connected_cmd = notify-send "AC Power connected"
ac_disconnected_cmd = "AC Power disconnected"
#-------------------------------------
# Tooltip
tooltip_show_timeout = 0.5
tooltip_hide_timeout = 0.1
tooltip_padding = 4 4
tooltip_background_id = 5
tooltip_font_color = #4a555b 100
tooltip_font = Hack 14
#-------------------------------------
# Separators
# Separator1
separator = new
separator_background_id = 0
separator_color = #7fbbb3
separator_style = empty
separator_size = 4
separator_padding = 0 0
# Separator2
separator = new
separator_background_id = 0
separator_color = #7fbbb3
separator_style = dots
separator_size = 4
separator_padding = 12 0
# Separator3
separator = new
separator_background_id = 0
separator_color = #7fbbb3 80
separator_style = line
separator_size = 2
separator_padding = 12 0
# Separator4
separator = new
separator_background_id = 0
separator_color = #7fbbb3
separator_style = empty
separator_size = 6
separator_padding = 12 0
#-------------------------------------
# Executors
# Exec1
# Note the use of "stdbuf -oL" to force the program to flush the output line by line.
#execp = new
#execp_command = free -b -s10| stdbuf -oL awk '/^Mem:/ { printf "Mem: %s / \n", $3 }' | stdbuf -oL numfmt --to=iec-i --field=2 -d' '
#execp_interval = 30
#execp_continuous = 1
#execp_font = Hack 14
#execp_font_color = #d8caac 100
# Exec2
#execp = new
#execp_command = free -b -s10| stdbuf -oL awk '/^Mem:/ { printf "%s %.0f%%\n", $2, 100 * ($2 - $7) / $2 }' | stdbuf -oL numfmt --to=iec-i --field=1 -d' '
#execp_interval = 30
#execp_continuous = 1
#execp_font = Hack 14
#execp_font_color = #d8caac 100
# Exec3
execp = new
execp_command = sys-mon.py -CatMu -N
execp_interval = 10
execp_has_icon = 0
execp_cache_icon = 0
execp_continuous = 0
execp_markup = 0
execp_font_color = #d8caac 100
execp_padding = 0 0
execp_font = Hack 14
execp_background_id = 0
execp_centered = 1
execp_icon_w = 0
execp_icon_h = 0
#-------------------------------------
# Buttons
#Button1
button = new
button_text =
button_icon = /usr/share/icons/Papirus-Dark/24x24/actions/exit.svg
button_background_id = 0
button_lclick_command = rofi -dpi 240 -show power-menu -modi power-menu:/usr/bin/rofi-power-menu
button_mclick_command = rofi -dpi 240 -show power-menu -modi power-menu:"/usr/bin/rofi-power-menu --choose suspend/hibernate"
button_rclick_command = rofi -dpi 240 -show power-menu -modi power-menu:"/usr/bin/rofi-power-menu --choices reboot/shutdown"

View file

@ -1,7 +1,6 @@
# Colors
.everforest:
0: &foreground d8caacff
1: &background 323d43dd
1: &background 323d43cc
2: &black 4a555bff
3: &dark_grey 525c62ff
4: &dark_red e26c6eff
@ -18,22 +17,20 @@
15: &cyan 83c092ff
16: &light_grey d0bf9bff
17: &white d8caacff
transparent_light_grey: &transparent_light_grey d0bf9b99
transparent_black: &transparent_black 4a555b99
# Fonts
{{- if eq .chezmoi.hostname "helix" }}
hack: &hack Hack:pixelsize=24
awesome: &awesome Font Awesome 6 Free:style=solid:pixelsize=24
hack: &hack Hack:pixelsize=28
awesome: &awesome Font Awesome 6 Free:style=solid:pixelsize=26
{{- else}}
hack: &hack Hack:pixelsize=13
awesome: &awesome Font Awesome 6 Free:style=solid:pixelsize=12
{{- end }}
# Labels
separator: &separator {string: {text: " ", font: *hack, foreground: *light_grey}}
separator: &separator {string: {text: " | ", font: *hack, foreground: *light_grey}}
light_underline: &light_underline d0bf9b99
dark_underline: &dark_underline 4a555b99
bar:
{{- if eq .chezmoi.hostname "helix" }}
height: 64
height: 72
location: top
{{- else if eq .chezmoi.hostname "hydrus" }}
monitor: DP-1
@ -51,16 +48,16 @@ bar:
background: *background
border:
{{- if eq .chezmoi.hostname "hydrus" }}
bottom-margin: 4
left-margin: 8
right-margin: 8
top-width: 0
bottom-width: 2
{{- else }}
top-margin: 8
left-margin: 16
right-margin: 16
top-width: 4
bottom-width: 0
{{- end }}
width: 0
color: *transparent_light_grey
left-width: 0
right-width: 0
color: *light_underline
margin: 0
left:
- river:
@ -84,32 +81,32 @@ bar:
urgent:
string:
<<: *river_base
deco: {stack: [{background: {color: *dark_red}}, {border: {size: 6, color: *black}}]}
deco: {stack: [{background: {color: *dark_red}}, {underline: {size: 4, color: *black}}]}
foreground: *black
focused:
string:
<<: *river_base
deco: {stack: [{background: {color: *light_grey}}, {underline: {size: 6, color: *transparent_black}}]}
deco: {stack: [{background: {color: *light_grey}}, {underline: {size: 4, color: *dark_underline}}]}
foreground: *dark_grey
visible && occupied:
string:
<<: *river_base
deco: {stack: [{background: {color: *transparent_light_grey}}, {underline: {size: 6, color: *transparent_black}}]}
deco: {stack: [{background: {color: *light_underline}}, {underline: {size: 4, color: *dark_underline}}]}
foreground: *light_grey
visible && ~occupied:
string:
<<: *river_base
deco: {stack: [{background: {color: *transparent_light_grey}}, {underline: {size: 6, color: *transparent_black}}]}
deco: {stack: [{background: {color: *light_underline}}, {underline: {size: 4, color: *dark_underline}}]}
foreground: *light_grey
~visible && occupied:
string:
<<: *river_base
deco: {stack: [{background: {color: *dark_grey}}, {underline: {size: 6, color: *transparent_light_grey}}]}
deco: {stack: [{background: {color: *dark_grey}}, {underline: {size: 4, color: *light_underline}}]}
foreground: *light_grey
~focused && occupied:
string:
<<: *river_base
deco: {stack: [{background: {color: *dark_grey}}, {underline: {size: 6, color: *transparent_light_grey}}]}
deco: {stack: [{background: {color: *dark_grey}}, {underline: {size: 4, color: *light_underline}}]}
foreground: *light_grey
id < 10 && ~visible && ~occupied:
string:
@ -136,8 +133,8 @@ bar:
wheel-down: sh -c "pactl set-sink-volume @DEFAULT_SINK@ -5%"
conditions:
sink_muted:
- string: {text: , font: *awesome, foreground: *transparent_light_grey}
- string: {text: " {sink_percent}% ({sink_port})", foreground: *transparent_light_grey}
- string: {text: , font: *awesome, foreground: *light_underline}
- string: {text: " {sink_percent}% ({sink_port})", foreground: *light_underline}
~sink_muted:
- ramp:
tag: sink_percent
@ -162,38 +159,23 @@ bar:
content: *separator
- network:
name: wlan0
poll-interval: 60
poll-interval: 1000
content:
map:
default: {string: {text: , font: *awesome}}
conditions:
state == down: {string: {text: , font: *awesome, foreground: *dark_grey}}
state == down: {string: {text: , font: *awesome, foreground: *dark_grey}}
state == up:
map:
default:
- string: {text: , font: *awesome}
- string: {text: " {name}: {state}"}
#- string: {text: " {ssid} {dl-speed:mb}/{ul-speed:mb} Mb/s", foreground: *light_grey}
conditions:
ipv4 == "":
- string: {text: , font: *awesome}
- string: {text: " {name}: {state}"}
- network:
name: eth0
poll-interval: 60
content:
map:
conditions:
~carrier: {empty: {}}
carrier:
map:
default:
- string: {text: , font: *awesome}
- string: {text: " {name}: {state}"}
conditions:
state == down: {string: {text: , font: *awesome}}
ipv4 == "":
- string: {text: , font: *awesome}
- string: {text: " {name}: {state}"}
#- string: {text: " {ssid} {dl-speed:mb}/{ul-speed:mb} Mb/s", foreground: *light_grey}
- label:
content: *separator
- battery:
@ -236,6 +218,6 @@ bar:
time-format: "%R"
content:
- string: {text: , font: *awesome}
- string: {text: " {date} "}
- string: {text: " {date} | "}
- string: {text: , font: *awesome}
- string: {text: " {time} "}

View file

@ -0,0 +1,21 @@
#!/bin/bash
START_TIME=`date +"%b %d, %Y %T"`
LOG_FILE_BAR1="${XDG_STATE_HOME}"/polybar1.log
LOG_FILE_BAR2="${XDG_STATE_HOME}"/polybar2.log
echo "--- ${START_TIME} ---" > "$LOG_FILE_BAR1"
echo "--- ${START_TIME} ---" > "$LOG_FILE_BAR2"
# Terminate already running bar instances
#killall -q polybar # needed if ipc disabled
polybar-msg cmd quit
# Wait until the processes have been shut down
while pgrep -u $UID -x polybar >/dev/null; do sleep 1; done
# Launch Polybar
polybar one -r --config=~/.config/polybar/config.ini 2>&1 | tee -a "$LOG_FILE_BAR1" & disown
polybar two -r --config=~/.config/polybar/config.ini 2>&1 | tee -a "$LOG_FILE_BAR2" & disown
echo "Polybar launched..."

View file

@ -0,0 +1,17 @@
#!/bin/bash
START_TIME=`date +"%b %d, %Y %T"`
LOG_FILE="${XDG_STATE_HOME}"/polybar.log
echo "--- ${START_TIME} ---" > "$LOG_FILE"
# Terminate already running bar instances
#killall -q polybar # needed if ipc disabled
polybar-msg cmd quit
# Wait until the processes have been shut down
while pgrep -u $UID -x polybar >/dev/null; do sleep 1; done
# Launch Polybar
polybar one -r --config=~/.config/polybar/config.ini 2>&1 | tee -a "$LOG_FILE" & disown

View file

@ -0,0 +1,23 @@
#!/bin/bash
START_TIME=`date +"%b %d, %Y %T"`
LOG_FILE="${XDG_STATE_HOME}"/tint2.log
echo "--- ${START_TIME} ---" > "$LOG_FILE"
# Terminate already running bar instances
killall -q tint2
# Wait until the processes have been shut down
while pgrep -u $UID -x tint2 >/dev/null; do sleep 1; done
# Launch tint2
tint2 2>&1 | tee -a "$LOG_FILE" & disown
# Final command won't work without sleep
sleep 1 &&
# Keep tint2 below other windows in fullscreen
if pgrep -x "tint2" > /dev/null ; then
xdo above -t "$(xdo id -N Bspwm -n root | sort | head -n 1)" $(xdo id -n tint2)
fi

View file

@ -0,0 +1,16 @@
#!/bin/bash
START_TIME=`date +"%b %d, %Y %T"`
LOG_FILE="${XDG_STATE_HOME}"/xidlehook.log
echo "--- ${START_TIME} ---" > "$LOG_FILE"
# Wait on pipewire or "--not-when-audio" will break everything
until pgrep -u $UID -x pipewire-pulse >/dev/null; do sleep 1; done
# lock screen after 10 minutes
xidlehook \
--not-when-audio \
--not-when-fullscreen \
--timer 600 'xset s activate' '' \
2>&1 | tee -a "$LOG_FILE" & disown

View file

@ -0,0 +1,18 @@
#!/bin/bash
START_TIME=`date +"%b %d, %Y %T"`
LOG_FILE="${XDG_STATE_HOME}"/xidlehook.log
echo "--- ${START_TIME} ---" > "$LOG_FILE"
# Wait on pipewire or "--not-when-audio" will break everything
until pgrep -u $UID -x pipewire-pulse >/dev/null; do sleep 1; done
# dim screen after 2 minutes, lock screen after 10, suspend after an hour
xidlehook \
--not-when-audio \
--not-when-fullscreen \
--timer 120 'killall -q redshift && xrandr --output eDP-1 --brightness .1' 'xrandr --output eDP-1 --brightness 1 && redshift -r & disown' \
--timer 480 'xset s activate' 'xrandr --output eDP-1 --brightness 1 && redshift -r & disown' \
--timer 3000 'loginctl suspend' 'xrandr --output eDP-1 --brightness 1 && redshift -r & disown' \
2>&1 | tee -a "$LOG_FILE" & disown

View file

@ -1,21 +0,0 @@
#!/bin/bash
START_TIME=`date +"%b %d, %Y %T"`
LOG_FILE_BAR1="${XDG_STATE_HOME}"/yambar1.log
echo "--- ${START_TIME} ---" > "$LOG_FILE_BAR1"
{{- if eq .chezmoi.hostname "hydrus" }}
LOG_FILE_BAR2="${XDG_STATE_HOME}"/yambar2.log
echo "--- ${START_TIME} ---" > "$LOG_FILE_BAR2"
{{- end }}
# Terminate already running bar instances
killall -q yambar
# Wait until the processes have been shut down
while pgrep -u $UID -x yambar >/dev/null; do sleep 1; done
# Launch Yambar
yambar -s 2>&1 | tee -a "$LOG_FILE_BAR1" & disown
{{- if eq .chezmoi.hostname "hydrus" }}
yambar -s -c "${XDG_CONFIG_HOME}/yambar/bar2.yml" 2>&1 | tee -a "$LOG_FILE_BAR2" & disown
{{- end }}