This commit is contained in:
Nathan 2022-02-18 15:44:19 -06:00
commit 642ec4e2fe
64 changed files with 1316790 additions and 0 deletions

264
README.md Normal file
View File

@ -0,0 +1,264 @@
# Catppuccin
*A [LeftWM](https://github.com/leftwm/leftwm) minimalistic theme inspired by the adorable [homonymous pastel theme](https://github.com/catppuccin)*
s
- [Catppuccin](#catppuccin)
- [Screenshots](#screenshots)
- [Dependencies](#dependencies)
- [Installation](#installation)
- [Configuration](#configuration)
- [Colors](#colors)
- [Applets](#applets)
- [Wallpapers](#wallpapers)
- [Polybar](#polybar)
- [Pulseaudio Control](#pulseaudio-control)
- [Systray](#systray)
- [Changelog](#changelog)
- [v0.1.2](#v012)
- [v0.1.1](#v011)
- [v0.1.0](#v010)
- [To do](#to-do)
- [Credit / Sources](#credit--sources)
# Screenshots
![screenshot1](./screenshots/screenshot1.png)
![screenshot2](./screenshots/screenshot2.png)
![launcher](./screenshots/launcher.png)
![launcher2](./screenshots/launcher2.png)
![powermenu](./screenshots/powermenu.png)
![powermenu2](./screenshots/powermenu2.png)
![layout](./screenshots/layout.png)
![layout2](./screenshots/layout2.png)
# Dependencies
- [LeftWM](https://github.com/leftwm/leftwm) - duh
`Fonts`
- Iosevka Nerd Font
- Roboto
- Noto Sans
- FontAwesome
Fee free to install some fonts from the theme root folder
```
./installfonts.sh
```
In general it might be a good idea to install all [nerd fonts](https://www.nerdfonts.com/).
`Run by up script`
- polybar
- feh
- numlockx
- picom
`Run by polybar (and keybindings)`
- pavucontrol
- nm-connection-editor
- blueberry
- pamac
`Misc`
- alacritty (or change configs to match your terminal emulator)
- dunst / xfce4-notifyd (adapt *up* script accordingly)
- [papirus-icon-theme](https://github.com/PapirusDevelopmentTeam/papirus-icon-theme)
# Installation
1. Install all required dependencies
2. Clone the repository in ~/.config/leftwm/themes
```BASH
cd ~/.config/leftwm/themes
git clone https://github.com/di-effe/catppuccin.git
```
3. Remove the symlink to your current theme if set
```BASH
rm ~/.config/leftwm/themes/current
```
4. Set this as your current theme
```BASH
ln -s ~/.config/leftwm/themes/catppuccin ~/.config/leftwm/themes/current
```
5. Restart your window manager
```Default shortcut
$MOD + Shift + r
```
# Configuration
## Colors
In a theme like this colors are spread all over the place and it's not fun keep track of everything, every time you want to change something. That's why I am using a custom color script to do the dirty job for me.
Colors are set each time the *UP* script run
```
source $SCRIPTPATH/scripts/colors.sh catppuccin
```
Two color themes are already available to choose from:
- catppuccin
- catppuccin2
Long story short `colors.sh` performs different tasks, mostly `sed`, in all files where colors are set.
The parameter after the script is communicating `colors.sh` to read from the colors variables from `scripts/colors_<THEME_NAME>.sh`, and by default that would be `scripts/colors_catppuccin.sh`
```
## Catppuccin theme
COLOR_BAR_BACKGROUND="#332E41"
COLOR_BAR_FOREGROUND="#B7E5E6"
COLOR_BACKGROUND="#332E41"
COLOR_FOREGROUND="#DFDEF1"
COLOR_FOREGROUND_DARK="#988BA2"
COLOR_PRIMARY="#C6AAE8"
COLOR_SECONDARY="#DFDEF1"
COLOR_ALTERNATE="#C6AAE8"
COLOR_INACTIVE="#6E6C7E"
COLOR_BORDER_ACTIVE="#C6AAE8"
COLOR_BORDER_INACTIVE="#1E1E28"
COLOR_BORDER_FLOATING="#F2CDCD"
COLOR_APPLET_BACKGROUND="#332E41"
COLOR_APPLET_BACKGROUND_LIGHT="#575268"
```
So, if you want to change colors manually comment the source `$SCRIPTPATH/scripts/colors.sh catppuccin` or your changes will be overwritten.
My suggestion, to avoid going crazy, would be to use the same method and
- create a custom color theme
- add your theme to the `themes=(catppuccin catppuccin2);` array in `colors.sh`
- optionally adapt `colors.sh` to your needs
## Applets
This theme doesn´t have a launcher and powermenu modules configured in Polybar, but you can configured a few keybindings to launch some Rofi applets.
For example you could add these to your `config.toml`
```
# Theme applets
# Launcher
[[keybind]]
command = "Execute"
value = "$HOME/.config/leftwm/themes/current/scripts/launcher.sh"
modifier = ["modkey"]
key = "space"
# Powermenu
[[keybind]]
command = "Execute"
value = "$HOME/.config/leftwm/themes/current/scripts/powermenu.sh"
modifier = ["modkey", "Shift"]
key = "p"
# Layout switcher
[[keybind]]
command = "Execute"
value = "$HOME/.config/leftwm/themes/current/scripts/layout.sh"
modifier = ["modkey", "Shift"]
key = "l"
```
Run a `leftwm-check` to ensure you don´t have multiple bindings on the same keys.
## Wallpapers
*up* is configured with the options to
- set random wallpapers from the /wallpapers folder
- set ONE wallpaper for all displays
- set MULTIPLE wallpapers for all displays (default)
Uncomment what you prefer and comment the rest. It should be clear enough reading the file.
## Polybar
### Pulseaudio Control
This is an interesting module you might want to use, just keep in mind it will grab your device description from
```
pactl list sinks | grep device.description
```
and that is usually a very long string.
The pulseaudio-control module in *polybar.modules* has been configured to use fancier nicknames for speakers and headphone, but you have to replace my values with yours.
For speakers (without any wired or bluetooth headphone connected) check
```
pactl list sinks short | cut -f2
```
and use the output here
```
--sink-nickname "VALUE_DETECTED_HERE:蓼 Speakers"
```
For wired headphones, plug them, check again
```
pactl list sinks short | cut -f2
```
and use the output here
```
--sink-nickname "VALUE_DETECTED_HER: Headphones"
```
### Systray
Systray has beed disabled by default in *polybar.config*
```
tray-position = none
```
If you want to use it change position and adjust the **tray-offset-x** value.
# Changelog
## v0.1.2
- catppuccino 1.2 updates
## v0.1.1
- Multiple color themes
- catppuccin
- catppuccin2
- Updated documentation
- Minor changes
## v0.1.0
- First release
## To do
- [x] More color schemes from the catppuccin project
# Credit / Sources
- Polybar modules configuration style (plus snippets and scripts) from [Peter Dauwe](https://github.com/PeterDauwe) and [adi1090x](https://github.com/adi1090x/polybar-themes)
- Application launcher is based on the [rofi-themes-collection](https://github.com/lr-tech/rofi-themes-collection) by [LR Tech](https://github.com/lr-tech) covered by a GNU General Public License v3.0
- Powermenu is loosely based on the [rofi-themes](hhttps://github.com/adi1090x/rofi) by [adi1090x](https://github.com/adi1090x) covered by a GNU General Public License v3.0
- Wallpapers and color schemes by [catppuccin](https://github.com/catppuccin/), of course

2
change_to_tag Executable file
View File

@ -0,0 +1,2 @@
#!/usr/bin/env bash
leftwm-command "SendWorkspaceToTag $1 $2"

314
conf/dunst.config Normal file
View File

@ -0,0 +1,314 @@
[global]
frame_width = 1
frame_color = "#788388"
corner_radius = 4
font = Noto Sans 10
# Allow a small subset of html markup:
# <b>bold</b>
# <i>italic</i>
# <s>strikethrough</s>
# <u>underline</u>
#
# For a complete reference see
# <http://developer.gnome.org/pango/stable/PangoMarkupFormat.html>.
# If markup is not allowed, those tags will be stripped out of the
# message.
markup = yes
# The format of the message. Possible variables are:
# %a appname
# %s summary
# %b body
# %i iconname (including its path)
# %I iconname (without its path)
# %p progress value if set ([ 0%] to [100%]) or nothing
# Markup is allowed
format = "<b>%s</b> %p\n%b"
# Sort messages by urgency.
sort = yes
# Show how many messages are currently hidden (because of geometry).
indicate_hidden = yes
# Alignment of message text.
# Possible values are "left", "center" and "right".
alignment = left
# The frequency with wich text that is longer than the notification
# window allows bounces back and forth.
# This option conflicts with "word_wrap".
# Set to 0 to disable.
bounce_freq = 5
# Show age of message if message is older than show_age_threshold
# seconds.
# Set to -1 to disable.
show_age_threshold = 60
# Split notifications into multiple lines if they don't fit into
# geometry.
word_wrap = no
# Ignore newlines '\n' in notifications.
ignore_newline = no
# The geometry of the window:
# [{width}]x{height}[+/-{x}+/-{y}]
# The geometry of the message window.
# The height is measured in number of notifications everything else
# in pixels. If the width is omitted but the height is given
# ("-geometry x2"), the message window expands over the whole screen
# (dmenu-like). If width is 0, the window expands to the longest
# message displayed. A positive x is measured from the left, a
# negative from the right side of the screen. Y is measured from
# the top and down respectevly.
# The width can be negative. In this case the actual width is the
# screen width minus the width defined in within the geometry option.
geometry = "0x4-25+25"
# Shrink window if it's smaller than the width. Will be ignored if
# width is 0.
shrink = yes
# The transparency of the window. Range: [0; 100].
# This option will only work if a compositing windowmanager is
# present (e.g. xcompmgr, compiz, etc.).
transparency = 15
# 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.
# default 120
idle_threshold = 120
# 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 windowmanager that exports the
# _NET_ACTIVE_WINDOW property.
# This should be the case for almost all modern windowmanagers.
#
# If this option is set to mouse or keyboard, the monitor option
# will be ignored.
follow = mouse
# 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
# Display indicators for URLs (U) and actions (A).
show_indicators = yes
# The height of a single line. If the height is smaller than the
# font height, it will get raised to the font height.
# This adds empty space above and under the text.
line_height = 0
# Draw a line of "separator_height" pixel height between two
# notifications.
# Set to 0 to disable.
separator_height = 1
# Padding between text and separator.
# padding = 8
padding = 8
# Horizontal padding.
horizontal_padding = 10
# 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 = #263238
# Print a notification on startup.
# This is mainly for error detection, since dbus (re-)starts dunst
# automatically after a crash.
startup_notification = false
# dmenu path.
dmenu = /usr/bin/dmenu -p dunst:
# Browser for opening urls in context menu.
browser = firefox
# Align icons left/right/off
icon_position = left
# Paths to default icons.
#icon_path = /usr/share/icons/Adwaita/16x16/status/:/usr/share/icons/Adwaita/16x16/devices/:/usr/share/icons/Adwaita/16x16/emblems/:/usr/share/icons/Adwaita/16x16/actions/:/usr/share/icons/Adwaita/16x16/emotes/
icon_path = /usr/share/icons/Papirus-Dark/16x16/status/:/usr/share/icons/Papirus-Dark/16x16/devices/:/usr/share/icons/Papirus-Dark/16x16/emblems/:/usr/share/icons/Papirus-Dark/16x16/actions/
# Limit icons size.
max_icon_size=32
[shortcuts]
# Shortcuts are specified as [modifier+][modifier+]...key
# Available modifiers are "ctrl", "mod1" (the alt-key), "mod2",
# "mod3" and "mod4" (windows-key).
# Xev might be helpful to find names for keys.
# Close notification.
#close = mod1+space
# Close all notifications.
# close_all = ctrl+shift+space
#close_all = ctrl+mod1+space
# Redisplay last message(s).
# On the US keyboard layout "grave" is normally above TAB and left
# of "1".
#history = ctrl+mod4+h
# Context menu.
#context = ctrl+mod1+c
[urgency_low]
# IMPORTANT: colors have to be defined in quotation marks.
# Otherwise the "#" and following would be interpreted as a comment.
background = "#263238"
foreground = "#556064"
timeout = 10
[urgency_normal]
background = "#1E1F29"
foreground = "#F9FAF9"
timeout = 10
#icon = /usr/share/icons/Adwaita/16x16/status/dialog-information-symbolic.symbolic.png
[urgency_critical]
background = "#b71c1c"
foreground = "#F9FAF9"
timeout = 0
# 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", "summary", "body", "icon", "category",
# "msg_urgency" and you can override the "timeout", "urgency", "foreground",
# "background", "new_icon" and "format".
# Shell-like globbing will get expanded.
#
# 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: if you don't want a notification to be displayed, set the format
# to "".
# NOTE: It might be helpful to run dunst -print in a terminal in order
# to find fitting options for rules.
#[espeak]
# summary = "*"
# script = dunst_espeak.sh
#[script-test]
# summary = "*script*"
# script = dunst_test.sh
#[ignore]
# # This notification will not be displayed
# summary = "foobar"
# format = ""
#[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
#
#[Claws Mail]
# appname = claws-mail
# category = email.arrived
# urgency = normal
# background = "#2F899E"
# foreground = "#FFA247"
#
#[mute.sh]
# appname = mute
# category = mute.sound
# script = mute.sh
#
#[JDownloader]
# appname = JDownloader
# category = JD
# background = "#FFA247"
# foreground = "#FFFFFF"
#
#[newsbeuter]
# summary = *Feeds*
# background = "#A8EB41"
# foreground = "#FFFFFF"
#
#[irc]
# appname = weechat
# timeout = 0
# background = "#0033bb"
# foreground = "#dddddd"
#
#[weechat hl]
# appname = weechat
# category = weechat.HL
# background = "#FF5C47"
# foreground = "#FFFFFF"
#
#[weechat pn]
# appname = weechat
# category = weechat.PM
# background = "#D53B84"
# foreground = "#FFFFFF"
#
#[CMUS]
# appname = CMUS
# category = cmus
# background = "#6C4AB7"
# foreground = "#FFE756"
#
#
# background = "#30AB70"
# foreground = "#F67245"
#
# vim: ft=cfg
#[speech]
#summary = "*"
#script = dunst-notify-speech.sh
# Tests
#dunstify -a "dunst tester" "normal" "<i>italic body</i>"
#dunstify -a "dunst tester" -u c "critical" "<b>bold body</b>"
#dunstify -a "dunst tester" "long body" "This is a notification with a very long body"

422
conf/picom.config Normal file
View File

@ -0,0 +1,422 @@
#################################
# 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 = false;
# The blur radius for shadows, in pixels. (defaults to 12)
# shadow-radius = 12
# shadow-radius = 12;
# The opacity of shadows. (0.0 - 1.0, defaults to 0.75)
# shadow-opacity = .8
# The left offset for shadows, in pixels. (defaults to -15)
# shadow-offset-x = -16
# shadow-offset-x = -2;
# The top offset for shadows, in pixels. (defaults to -15)
# shadow-offset-y = 2
# shadow-offset-y = -0;
# Avoid drawing shadows on dock/panel windows. This option is deprecated,
# you should use the *wintypes* option in your config file instead.
#
# no-dock-shadow = false
# Don't draw shadows on drag-and-drop windows. This option is deprecated,
# you should use the *wintypes* option in your config file instead.
#
# no-dnd-shadow = false
# 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
# Do not paint shadows on shaped windows. Note shaped windows
# here means windows setting its shape through X Shape extension.
# Those using ARGB background is beyond our control.
# Deprecated, use
# shadow-exclude = 'bounding_shaped'
# or
# shadow-exclude = 'bounding_shaped && !rounded_corners'
# instead.
#
# shadow-ignore-shaped = ''
# 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'",
"class_g ?= 'Rofi'",
"_GTK_FRAME_EXTENTS@:c"
];
# 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 = 3
# Specify a list of conditions of windows that should not be faded.
# fade-exclude = []
# 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 = 1;
# Default opacity for dropdown menus and popup menus. (0.0 - 1.0, defaults to 1.0)
#menu-opacity = 1.0
opacity = 1.0
# Let inactive opacity set by -i override the '_NET_WM_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 always 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 = []
#################################
# Background-Blurring #
#################################
# Parameters for background blurring, see the *BLUR* section for more information.
# blur-method =
# blur-size = 12
#
# blur-deviation = false
# 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 = false
# 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 = false
# 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"
];
#################################
# General Settings #
#################################
# 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 = "glx";
# 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 = false;
# 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_OPACITY' on client windows, useful for window managers
# not passing '_NET_WM_OPACITY' of client windows to frame windows.
#
# detect-client-opacity = false
# detect-client-opacity = true;
# Specify refresh rate of the screen. If not specified or 0, picom will
# try detecting this with X RandR extension.
#
# refresh-rate = 60
refresh-rate = 60
# Limit picom to repaint at most once every 1 / 'refresh_rate' second to
# boost performance. This should not be used with
# vsync drm/opengl/opengl-oml
# as they essentially does sw-opti's job already,
# unless you wish to specify a lower refresh rate than the actual value.
#
# sw-opti =
# 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 = false
# Use 'WM_CLIENT_LEADER' to group windows, and consider windows in the same
# group focused at the same time. 'WM_TRANSIENT_FOR' has higher priority if
# detect-transient is enabled, too.
#
# detect-client-leader = false
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 everytime, 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.
# See `compton-default-fshader-win.glsl` and `compton-fake-transparency-fshader-win.glsl`
# in the source tree for examples.
#
# glx-fshader-win = ''
# 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
# 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 = "error";
# 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.
#
# 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; opacity = 1.0; focus = true; full-shadow = false; };
popup_menu = { opacity = 1.0; }
dropdown_menu = { opacity = 1.0; }
dock = { shadow = false; };
};

448
conf/picom.default.config Normal file
View File

@ -0,0 +1,448 @@
#################################
# 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;
# Avoid drawing shadows on dock/panel windows. This option is deprecated,
# you should use the *wintypes* option in your config file instead.
#
# no-dock-shadow = false
# Don't draw shadows on drag-and-drop windows. This option is deprecated,
# you should use the *wintypes* option in your config file instead.
#
# no-dnd-shadow = false
# 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
# Do not paint shadows on shaped windows. Note shaped windows
# here means windows setting its shape through X Shape extension.
# Those using ARGB background is beyond our control.
# Deprecated, use
# shadow-exclude = 'bounding_shaped'
# or
# shadow-exclude = 'bounding_shaped && !rounded_corners'
# instead.
#
# shadow-ignore-shaped = ''
# 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 ?= 'Notify-osd'",
"name = 'Plank'",
"name = 'Docky'",
"name = 'Kupfer'",
"name = 'xfce4-notifyd'",
"name *= 'VLC'",
"name *= 'compton'",
"name *= 'Chromium'",
"name *= 'Chrome'",
"class_g = 'Firefox' && argb",
"class_g = 'Conky'",
"class_g = 'Kupfer'",
"class_g = 'Synapse'",
"class_g ?= 'Notify-osd'",
"class_g ?= 'Cairo-dock'",
"class_g = 'Cairo-clock'",
"class_g ?= 'Xfce4-notifyd'",
"class_g ?= 'Xfce4-power-manager'",
"_GTK_FRAME_EXTENTS@:c",
"class_g = 'Dunst'",
"class_g = 'slop'",
"class_g = 'Rofi'",
"_NET_WM_STATE@:32a *= '_NET_WM_STATE_HIDDEN'"
];
# Add this one too for ...
# "_NET_WM_STATE@:32a *= '_NET_WM_STATE_HIDDEN'"
# Add this one above to the list to have no shadow in Openbox menu
# "! name~=''",
# 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.028;
# Opacity change between steps while fading out. (0.01 - 1.0, defaults to 0.03)
# fade-out-step = 0.03
fade-out-step = 0.08;
# The time between steps in fade step, in milliseconds. (> 0, defaults to 10)
fade-delta = 8
# Specify a list of conditions of windows that should not be faded.
# fade-exclude = []
# 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 = true
#################################
# Transparency / Opacity #
#################################
# Opacity of inactive windows. (0.1 - 1.0, defaults to 1.0)
# inactive-opacity = 1
inactive-opacity = 1;
# Opacity of window titlebars and borders. (0.1 - 1.0, disabled by default)
# frame-opacity = 1.0
frame-opacity = 0.9;
# Default opacity for dropdown menus and popup menus. (0.0 - 1.0, defaults to 1.0)
# menu-opacity = 1.0
# Let inactive opacity set by -i override the '_NET_WM_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 always 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 = [ "80:class_g = 'Alacritty'" ]
#################################
# Background-Blurring #
#################################
# Parameters for background blurring, see the *BLUR* section for more information.
# blur-method =
# blur-size = 12
#
# blur-deviation = false
# 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 = false
# 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 = false
# 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"
];
#################################
# General Settings #
#################################
# 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 = "xr_glx_hybrid"
backend = "glx";
# Enable/disable VSync.
vsync = true
#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 = true;
# 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_OPACITY' on client windows, useful for window managers
# not passing '_NET_WM_OPACITY' of client windows to frame windows.
#
# detect-client-opacity = false
detect-client-opacity = true;
# Specify refresh rate of the screen. If not specified or 0, picom will
# try detecting this with X RandR extension.
#
# refresh-rate = 60
refresh-rate = 0
# Limit picom to repaint at most once every 1 / 'refresh_rate' second to
# boost performance. This should not be used with
# vsync drm/opengl/opengl-oml
# as they essentially does sw-opti's job already,
# unless you wish to specify a lower refresh rate than the actual value.
#
# sw-opti =
# 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. 'WM_TRANSIENT_FOR' has higher priority if
# detect-transient is enabled, too.
#
# detect-client-leader = false
detect-client-leader = true
# 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 = false
# 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 everytime, 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.
# See `compton-default-fshader-win.glsl` and `compton-fake-transparency-fshader-win.glsl`
# in the source tree for examples.
#
# glx-fshader-win = ''
# 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
# 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 = '~/.config/picom.log'
# Show all X errors (for debugging)
show-all-xerrors = true
# 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.
#
# 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 = 0.9; focus = true; full-shadow = false; };
dock = { shadow = false; }
dnd = { shadow = false; }
popup_menu = { opacity = 0.9; }
dropdown_menu = { opacity = 0.9; }
};

323
config.toml Normal file
View File

@ -0,0 +1,323 @@
modkey = "Mod4"
mousekey = "Mod4"
workspaces = []
tags = ["1", "2", "3", "4", "5", "6"]
layouts = [
"LeftWiderRightStack",
"MainAndDeck",
"MainAndVertStack",
"MainAndHorizontalStack",
"GridHorizontal",
"EvenHorizontal",
"EvenVertical",
"Fibonacci",
"CenterMain",
"CenterMainBalanced",
"Monocle",
"RightWiderLeftStack",
]
layout_mode = "Workspace"
scratchpad = []
disable_current_tag_swap = false
focus_behaviour = "Sloppy"
focus_new_windows = true
[[keybind]]
command = "Execute"
value = "dmenu_run -p 'Run: '"
modifier = ["modkey"]
key = "p"
[[keybind]]
command = "Execute"
value = "firefox"
modifier = ["modkey", "Shift"]
key = "b"
[[keybind]]
command = "Execute"
value = "nemo"
modifier = ["modkey", "Shift"]
key = "e"
[[keybind]]
command = "Execute"
value = "alacritty"
modifier = ["modkey", "Shift"]
key = "Return"
[[keybind]]
command = "CloseWindow"
modifier = ["modkey", "Shift"]
key = "q"
[[keybind]]
command = "SoftReload"
modifier = ["modkey", "Shift"]
key = "r"
[[keybind]]
command = "Execute"
value = "loginctl kill-session $XDG_SESSION_ID"
modifier = ["modkey", "Shift"]
key = "x"
[[keybind]]
command = "Execute"
value = "slock"
modifier = ["modkey", "Control"]
key = "l"
[[keybind]]
command = "MoveToLastWorkspace"
modifier = ["modkey", "Shift"]
key = "w"
[[keybind]]
command = "SwapTags"
modifier = ["modkey"]
key = "w"
[[keybind]]
command = "MoveWindowUp"
modifier = ["modkey", "Shift"]
key = "k"
[[keybind]]
command = "MoveWindowDown"
modifier = ["modkey", "Shift"]
key = "j"
[[keybind]]
command = "MoveWindowTop"
modifier = ["modkey"]
key = "Return"
[[keybind]]
command = "FocusWindowUp"
modifier = ["modkey"]
key = "k"
[[keybind]]
command = "FocusWindowDown"
modifier = ["modkey"]
key = "j"
[[keybind]]
command = "NextLayout"
modifier = ["modkey", "Control"]
key = "k"
[[keybind]]
command = "PreviousLayout"
modifier = ["modkey", "Control"]
key = "j"
[[keybind]]
command = "FocusWorkspaceNext"
modifier = ["modkey"]
key = "l"
[[keybind]]
command = "FocusWorkspacePrevious"
modifier = ["modkey"]
key = "h"
[[keybind]]
command = "MoveWindowUp"
modifier = ["modkey", "Shift"]
key = "Up"
[[keybind]]
command = "MoveWindowDown"
modifier = ["modkey", "Shift"]
key = "Down"
[[keybind]]
command = "FocusWindowUp"
modifier = ["modkey"]
key = "Up"
[[keybind]]
command = "FocusWindowDown"
modifier = ["modkey"]
key = "Down"
[[keybind]]
command = "NextLayout"
modifier = ["modkey", "Control"]
key = "Up"
[[keybind]]
command = "PreviousLayout"
modifier = ["modkey", "Control"]
key = "Down"
[[keybind]]
command = "FocusWorkspaceNext"
modifier = ["modkey"]
key = "Right"
[[keybind]]
command = "FocusWorkspacePrevious"
modifier = ["modkey"]
key = "Left"
[[keybind]]
command = "GotoTag"
value = "1"
modifier = ["modkey"]
key = "1"
[[keybind]]
command = "GotoTag"
value = "2"
modifier = ["modkey"]
key = "2"
[[keybind]]
command = "GotoTag"
value = "3"
modifier = ["modkey"]
key = "3"
[[keybind]]
command = "GotoTag"
value = "4"
modifier = ["modkey"]
key = "4"
[[keybind]]
command = "GotoTag"
value = "5"
modifier = ["modkey"]
key = "5"
[[keybind]]
command = "GotoTag"
value = "6"
modifier = ["modkey"]
key = "6"
[[keybind]]
command = "GotoTag"
value = "7"
modifier = ["modkey"]
key = "7"
[[keybind]]
command = "GotoTag"
value = "8"
modifier = ["modkey"]
key = "8"
[[keybind]]
command = "GotoTag"
value = "9"
modifier = ["modkey"]
key = "9"
[[keybind]]
command = "MoveToTag"
value = "1"
modifier = ["modkey", "Shift"]
key = "1"
[[keybind]]
command = "MoveToTag"
value = "2"
modifier = ["modkey", "Shift"]
key = "2"
[[keybind]]
command = "MoveToTag"
value = "3"
modifier = ["modkey", "Shift"]
key = "3"
[[keybind]]
command = "MoveToTag"
value = "4"
modifier = ["modkey", "Shift"]
key = "4"
[[keybind]]
command = "MoveToTag"
value = "5"
modifier = ["modkey", "Shift"]
key = "5"
[[keybind]]
command = "MoveToTag"
value = "6"
modifier = ["modkey", "Shift"]
key = "6"
[[keybind]]
command = "MoveToTag"
value = "7"
modifier = ["modkey", "Shift"]
key = "7"
[[keybind]]
command = "MoveToTag"
value = "8"
modifier = ["modkey", "Shift"]
key = "8"
[[keybind]]
command = "MoveToTag"
value = "9"
modifier = ["modkey", "Shift"]
key = "9"
[[keybind]]
command = "IncreaseMainWidth"
value = "5"
modifier = ["modkey"]
key = "a"
[[keybind]]
command = "DecreaseMainWidth"
value = "5"
modifier = ["modkey"]
key = "x"
[[keybind]]
command = "ToggleFullScreen"
modifier = ["modkey"]
key = "f"
[[keybind]]
command = "FocusNextTag"
modifier = ["modkey", "Shift"]
key = "Right"
[[keybind]]
command = "FocusPreviousTag"
modifier = ["modkey", "Shift"]
key = "Left"
# Theme applets
[[keybind]]
command = "Execute"
value = "$HOME/.config/leftwm/themes/current/scripts/launcher.sh"
modifier = ["modkey"]
key = "space"
[[keybind]]
command = "Execute"
value = "$HOME/.config/leftwm/themes/current/scripts/powermenu.sh"
modifier = ["modkey", "Shift"]
key = "p"
[[keybind]]
command = "Execute"
value = "$HOME/.config/leftwm/themes/current/scripts/layout.sh"
modifier = ["modkey", "Shift"]
key = "l"

25
down Executable file
View File

@ -0,0 +1,25 @@
#!/usr/bin/env bash
SCRIPTPATH="$( cd "$(dirname "$0")" ; pwd -P )"
# Set background
if [ -x "$(command -v feh)" ]; then
feh --bg-fill $SCRIPTPATH/down.jpg
fi
echo "UnloadTheme" > $XDG_RUNTIME_DIR/leftwm/commands.pipe
# Kill procs
pkill picom &
pkill compton &
pkill polybar &
pkill nm-applet &
pkill pamac-tray &
pkill xfce4-power-manager &
pkill blueberry-tray &
pkill volumeicon &
pkill xfce4-notifyd &
pkill dunst &
pkill wired &
pkill sxhkd &

BIN
down.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 539 B

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
fonts/Feather.ttf Normal file

Binary file not shown.

Binary file not shown.

BIN
fonts/Iosevka-Nerd-Font.ttf Normal file

Binary file not shown.

BIN
fonts/Material.ttf Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

41
installfonts.sh Executable file
View File

@ -0,0 +1,41 @@
#!/usr/bin/env bash
# Dirs
DIR=`pwd`
FONT_DIR="$HOME/.local/share/fonts"
# Install Fonts
install_fonts() {
echo -e "\n[*] Installing fonts..."
if [[ -d "$FONT_DIR" ]]; then
cp -rf $DIR/fonts/* "$FONT_DIR"
else
mkdir -p "$FONT_DIR"
cp -rf $DIR/fonts/* "$FONT_DIR"
fi
}
# Main
main() {
clear
cat <<- EOF
[*] Installing Fonts in $FONT_DIR
[1] Continue
[2] Exit
EOF
read -p "[?] Select Option : "
if [[ $REPLY == "1" ]]; then
install_fonts
elif [[ $REPLY == "2" ]]; then
exit 1
else
echo -e "\n[!] Invalid Option, Exiting...\n"
exit 1
fi
}
main

40
polybar.colors Normal file
View File

@ -0,0 +1,40 @@
;; ┌────────────────────────────────────────────────────────────┐
;; │░█▀█░█▀█░█░░░█░█░█▀▄░█▀█░█▀▄░░░░░░░░░█▀▀░█▀█░█░░░█▀█░█▀▄░█▀▀│
;; │░█▀▀░█░█░█░░░░█░░█▀▄░█▀█░█▀▄░░░░▀░░░░█░░░█░█░█░░░█░█░█▀▄░▀▀█│
;; │░▀░░░▀▀▀░▀▀▀░░▀░░▀▀░░▀░▀░▀░▀░░░░▀░░░░▀▀▀░▀▀▀░▀▀▀░▀▀▀░▀░▀░▀▀▀│
;; └────────────────────────────────────────────────────────────┘
[color]
;; Main colors
background = #332E41
foreground = #B7E5E6
;;foreground-alt = #9C9C9C
primary = #C6AAE8
secondary = #DFDEF1
alternate = #FFE70D
trans = #00000000
white = #FFFFFF
black = #000000
;; Material Colors
red = #e53935
pink = #d81b60
purple = #8e24aa
deep-purple = #5e35b1
indigo = #3949ab
blue = #1e88e5
light-blue = #039be5
cyan = #00acc1
teal = #00897b
green = #43a047
light-green = #7cb342
lime = #c0ca33
yellow = #fdd835
amber = #ffb300
orange = #fb8c00
deep-orange = #f4511e
brown = #6d4c41
grey = #757575
blue-gray = #546e7a

63
polybar.config Normal file
View File

@ -0,0 +1,63 @@
;; ┌────────────────────────────────────────────────────────────┐
;; │░█▀█░█▀█░█░░░█░█░█▀▄░█▀█░█▀▄░░░░░░░░░█▀▀░█▀█░█▀█░█▀▀░▀█▀░█▀▀│
;; │░█▀▀░█░█░█░░░░█░░█▀▄░█▀█░█▀▄░░░░▀░░░░█░░░█░█░█░█░█▀▀░░█░░█░█│
;; │░▀░░░▀▀▀░▀▀▀░░▀░░▀▀░░▀░▀░▀░▀░░░░▀░░░░▀▀▀░▀▀▀░▀░▀░▀░░░▀▀▀░▀▀▀│
;; └────────────────────────────────────────────────────────────┘
;; File Inclusion
include-file = $HOME/.config/leftwm/themes/current/polybar.colors
include-file = $HOME/.config/leftwm/themes/current/polybar.modules
[bar/mainbar0]
inherit = bar/barbase
modules-left = workspace0
[bar/mainbar1]
inherit = bar/barbase
modules-left = workspace1
[bar/barbase]
width = ${env:width}
monitor = ${env:monitor}
offset-x = 15
offset-y = 4
height = 24
fixed-center = true
bottom = false
background = ${color.background}
foreground = ${color.foreground}
radius-top = 8
radius-bottom = 8
padding-left = 1
padding-right = 2
module-margin-left = 0
module-margin-right = 0
font-0 = "Iosevka Nerd Font:size=8;2"
font-1 = "Roboto:size=11:weight=bold;2"
font-2 = "Noto Sans:size=11;1"
font-3 = "FontAwesome:size=10"
font-4 = "Feather:size=9;2"
modules-right = arch-updates spacer date
border-bottom = 0
cursor-click = pointer
cursor-scroll = ns-resize
tray-position = none
[settings]
screenchange-reload = true
throttle-output = 5
throttle-output-for = 10
compositing-background = source
compositing-foreground = over
compositing-overline = over
compositing-underline = over
compositing-border = over
pseudo-transparency = true
[global/wm]
margin-top = 0
margin-bottom = 0

19
polybar.liquid Normal file
View File

@ -0,0 +1,19 @@
{% for tag in workspace.tags %}
%{T1}
{% if tag.mine %}%{A1:$SCRIPTPATH/change_to_tag {{workspace.index}} {{tag.index}}:}%{F#C6AAE8}  %{F-}%{A}
{% elsif tag.visible %}%{A1:$SCRIPTPATH/change_to_tag {{workspace.index}} {{tag.index}}:}%{F#C6AAE8}  %{F-}%{A}
{% elsif tag.busy %}%{A1:$SCRIPTPATH/change_to_tag {{workspace.index}} {{tag.index}}:}%{F#DFDEF1}  %{F-}%{A}
{% else tag.visible %}%{A1:$SCRIPTPATH/change_to_tag {{workspace.index}} {{tag.index}}:}%{F#DFDEF1}  %{F-}%{A}
{% endif %}
%{T-}
{% endfor %}
%{T5}%{O20}%{T-}
%{T1}
%{A1:leftwm-command "NextLayout" :}%{A3:leftwm-command "PreviousLayout" :}
%{B#332E41}%{F#B7E5E6} {{ workspace.layout }} %{F-}%{B-}
%{A}%{A}
%{T-}

390
polybar.modules Normal file
View File

@ -0,0 +1,390 @@
;; ┌────────────────────────────────────────────────────────────────┐
;; │░█▀█░█▀█░█░░░█░█░█▀▄░█▀█░█▀▄░░░░░░░░░█▄█░█▀█░█▀▄░█░█░█░░░█▀▀░█▀▀│
;; │░█▀▀░█░█░█░░░░█░░█▀▄░█▀█░█▀▄░░░░▀░░░░█░█░█░█░█░█░█░█░█░░░█▀▀░▀▀█│
;; │░▀░░░▀▀▀░▀▀▀░░▀░░▀▀░░▀░▀░▀░▀░░░░▀░░░░▀░▀░▀▀▀░▀▀░░▀▀▀░▀▀▀░▀▀▀░▀▀▀│
;; └────────────────────────────────────────────────────────────────┘
###### List of available modules ######
;; arch-updates
;; battery
;; cpu
;; cpu-graph
;; date
;; ewmh
;; layout
;; layout0
;; layout1
;; launcher
;; mem
;; mem-graph
;; powermenu
;; pulseaudio
;; pulseaudio-control
;; spacer
;; spacer-dot
;; temperature
;; wlan
;; workspace0
;; workspace1
###### Modules ######
[module/arch-updates]
type = custom/script
exec = $HOME/.config/leftwm/themes/current/scripts/check-arch-updates.sh
interval = 1000
label = %output%
format-foreground = ${color.foreground}
format-background = ${color.background}
format-prefix-foreground = ${color.foreground}
click-left = alacritty -e sudo pacman -Syu
click-right = pamac-manager --updates
[module/battery]
;https://github.com/jaagr/polybar/wiki/Module:-battery
type = internal/battery
battery = BAT1
adapter = AC0
full-at = 100
format-charging = <animation-charging> <label-charging>
label-charging =  %percentage%%
format-charging-foreground = ${color.foreground}
format-charging-background = ${color.background}
;format-charging-underline = #a3c725
format-discharging = <ramp-capacity> <label-discharging>
label-discharging =  %percentage%%
;format-discharging-underline = #c7ae25
format-discharging-foreground = ${color.foreground}
format-discharging-background = ${color.background}
format-full-prefix = " "
format-full-prefix-foreground = #a3c725
;format-full-underline = #a3c725
format-full-foreground = ${color.foreground}
format-full-background = ${color.background}
ramp-capacity-0 = 
ramp-capacity-1 = 
ramp-capacity-2 = 
ramp-capacity-3 = 
ramp-capacity-4 = 
ramp-capacity-foreground = #c7ae25
animation-charging-0 = 
animation-charging-1 = 
animation-charging-2 = 
animation-charging-3 = 
animation-charging-4 = 
animation-charging-foreground = #a3c725
animation-charging-framerate = 750
[module/bluetooth]
type = custom/script
exec = $HOME/.config/leftwm/themes/current/scripts/bluetooth.sh
interval = 2
click-left = blueberry
click-right = $HOME/.config/leftwm/themes/current/scripts/bluetooth_toggle.sh
format-padding = 1
[module/cpu]
type = internal/cpu
interval = 2
;format-prefix = " "
;format-prefix-foreground = ${color.shade4}
;format-foreground = ${color.modulefg}
;format-background = ${color.shade6}
;format-underline = #f90000
label = CPU %percentage:2%%
[module/cpu-graph]
type = internal/cpu
interval = 0.08
;format = " <ramp-coreload>"
format = " <ramp-coreload>"
format-margin = 1
ramp-coreload-0 = ▁
ramp-coreload-0-foreground = ${color.foreground}
ramp-coreload-1 = ▂
ramp-coreload-1-foreground = ${color.foreground}
ramp-coreload-2 = ▃
ramp-coreload-2-foreground = ${color.light-green}
ramp-coreload-3 = ▄
ramp-coreload-3-foreground = ${color.green}
ramp-coreload-4 = ▅
ramp-coreload-4-foreground = ${color.yellow}
ramp-coreload-5 = ▆
ramp-coreload-5-foreground = ${color.yellow}
ramp-coreload-6 = ▇
ramp-coreload-6-foreground = ${color.red}
ramp-coreload-7 = █
ramp-coreload-7-foreground = ${color.red}
ramp-coreload-font = 3
format-background = ${color.background}
format-foreground = ${color.foreground}
format-underline =
format-padding = 1
[module/date]
type = internal/date
interval = 1.0
time = %a %H:%M
time-alt = %B %d, %Y
format = <label>
label = %time%
format-prefix = " "
[module/ewmh]
type = internal/xworkspaces
pin-workspaces = true
enable-click = true
enable-scroll = true
format = <label-state>
label-monitor = %name%
[module/layout]
type = custom/script
exec = leftwm-state -w "$index" -s "{{ workspace.layout }}"
tail = true
[module/layout0]
type = custom/script
format-prefix = " "
format-prefix-foreground = ${color..primary}
exec = leftwm-state -w 0 -s "{{ workspace.layout }}"
tail = true
click-left = leftwm-command "NextLayout"
click-right = leftwm-command "PreviousLayout"
[module/layout1]
type = custom/script
format-prefix = " "
format-prefix-foreground = ${color.primary}
exec = leftwm-state -w 1 -s "{{ workspace.layout }}"
tail = true
click-left = leftwm-command "NextLayout"
click-right = leftwm-command "PreviousLayout"
[module/launcher]
type = custom/text
content = ""
content-padding = 2
content-foreground = ${color.background}
content-background = ${color.primary}
click-left = $HOME/.config/leftwm/themes/current/rofi/launcher.sh
[module/mem]
type = internal/memory
interval = 2
label = MEM %percentage_used%%
[module/mem-graph]
type = internal/memory
; Seconds to sleep between updates
; Default: 1
interval = 2
; 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 = " <bar-used>  <ramp-swap-used>"
;format = "<label>"
ramp-swap-used-0 = ▁
ramp-swap-used-1 = ▂
ramp-swap-used-2 = ▃
ramp-swap-used-3 = ▄
ramp-swap-used-4 = ▅
ramp-swap-used-5 = ▆
ramp-swap-used-6 = ▇
ramp-swap-used-7 = █
ramp-swap-used-0-foreground = ${color.foreground}
ramp-swap-used-1-foreground = ${color.light-green}
ramp-swap-used-2-foreground = ${color.green}
ramp-swap-used-3-foreground = ${color.yellow}
ramp-swap-used-4-foreground = ${color.red}
ramp-swap-used-5-foreground = ${color.red}
ramp-swap-used-6-foreground = ${color.red}
ramp-swap-used-7-foreground = ${color.red}
ramp-swap-used-font = 3
;ramp-swap-used-underline = ${color.foreground}
; 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 = " %percentage_used%%"
; Only applies if <bar-used> is used
bar-used-indicator =
bar-used-width = 10
bar-used-fill = ━
bar-used-empty = ━
bar-used-indicator-foreground = ${color.foreground}
bar-used-empty-foreground = ${color.foreground}
bar-used-foreground-0 = ${color.green}
bar-used-foreground-1 = ${color.yellow}
bar-used-foreground-2 = ${color.red}
; Only applies if <ramp-used> is used
ramp-used-0 = ▁
ramp-used-1 = ▂
ramp-used-2 = ▃
ramp-used-3 = ▄
ramp-used-4 = ▅
ramp-used-5 = ▆
ramp-used-6 = ▇
ramp-used-7 = █
ramp-used-0-foreground = ${color.foreground}
ramp-used-1-foreground = ${color.foreground}
ramp-used-2-foreground = ${color.light-green}
ramp-used-3-foreground = ${color.green}
ramp-used-4-foreground = ${color.yellow}
ramp-used-5-foreground = ${color.yellow}
ramp-used-6-foreground = ${color.red}
ramp-used-7-foreground = ${color.red}
ramp-used-font = 3
; Only applies if <ramp-free> is used
ramp-free-0 = ▁
ramp-free-1 = ▂
ramp-free-2 = ▃
ramp-free-3 = ▄
ramp-free-4 = ▅
ramp-free-5 = ▆
ramp-free-6 = ▇
ramp-free-7 = █
format-background = ${color.background}
format-foreground = ${color.foreground}
;format-underline = ${color.foreground
format-padding = 1
[module/powermenu]
type = custom/text
content = "襤"
content-padding = 2
content-foreground = ${color.background}
content-background = ${color.primary}
click-left = $HOME/.config/leftwm/themes/current/rofi/powermenu.sh
[module/pulseaudio]
type = internal/pulseaudio
format-volume = <ramp-volume> <label-volume>
label-volume = %percentage%%
ramp-volume-0 = 奄
ramp-volume-1 = 奔
ramp-volume-2 = 墳
label-muted = 婢 muted
label-muted-foreground = ${color..primary}
click-right = pavucontrol
[module/pulseaudio-control]
type = custom/script
tail = true
format-underline = ${colors.cyan}
label-padding = 0
label-foreground = ${colors.foreground}
# Icons mixed from Font Awesome 5 and Material Icons
# 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 = $HOME/.config/leftwm/themes/current/scripts/pulseaudio-control.sh --icons-volume " , " --icon-muted " " --sink-nicknames-from "device.description" --sink-nickname "alsa_output.pci-0000_07_00.6.iec958-stereo:蓼 Speakers" --sink-nickname "alsa_output.pci-0000_07_00.6.analog-stereo: Headphones" listen
click-right = exec pavucontrol &
click-left = $HOME/.config/leftwm/themes/current/scripts/pulseaudio-control.sh togmute
click-middle = $HOME/.config/leftwm/themes/current/scripts/pulseaudio-control.sh --sink-blacklist "alsa_output.pci-0000_01_00.1.hdmi-stereo-extra2" next-sink
scroll-up = $HOME/.config/leftwm/themes/current/scripts/pulseaudio-control.sh --volume-max 130 up
scroll-down = $HOME/.config/leftwm/themes/current/scripts/pulseaudio-control.sh --volume-max 130 down
[module/spacer]
type = custom/text
content = " "
[module/spacer-dot]
type = custom/text
content-foreground = ${color.grey}
content = "·"
[module/temperature]
type = internal/temperature
thermal-zone = 0
warn-temperature = 60
format = <label>
format-underline = #f50a4d
format-warn = <label-warn>
format-warn-underline = ${self.format-underline}
format-background = ${color.background}
format-foreground = ${color.foreground}
label = %temperature-c%
label-warn =    %temperature-c%
label-warn-foreground = ${color.orange}
[module/wlan]
type = internal/network
interface = wlp5s0
interval = 3.0
format-connected = <label-connected>
format-connected-padding = 0
label-connected = "%{A1:nm-connection-editor:}直 %{A}"
[module/workspace0]
type = custom/script
exec = leftwm-state -w 0 -t "$SCRIPTPATH/polybar.liquid"
tail = true
[module/workspace1]
type = custom/script
exec = leftwm-state -w 1 -t "$SCRIPTPATH/polybar.liquid"
tail = true

BIN
screenshots/launcher.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

BIN
screenshots/launcher2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

BIN
screenshots/layout.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

BIN
screenshots/layout2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

BIN
screenshots/powermenu.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

BIN
screenshots/powermenu2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

BIN
screenshots/screenshot1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 332 KiB

BIN
screenshots/screenshot2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 338 KiB

12
scripts/bluetooth.sh Executable file
View File

@ -0,0 +1,12 @@
#!/bin/sh
if [ $(bluetoothctl show | grep "Powered: yes" | wc -c) -eq 0 ]
then
echo "%{F#6E6C7E}  Off %{F-}"
else
if [ $(echo info | bluetoothctl | grep 'Device' | wc -c) -eq 0 ]
then
echo "  "
else
echo "%{F#C6AAE8}  %{F-}"
fi
fi

7
scripts/bluetooth_toggle.sh Executable file
View File

@ -0,0 +1,7 @@
#!/bin/sh
if [ $(bluetoothctl show | grep "Powered: yes" | wc -c) -eq 0 ]
then
bluetoothctl power on
else
bluetoothctl power off
fi

11
scripts/check-arch-updates.sh Executable file
View File

@ -0,0 +1,11 @@
#!/bin/sh
#source https://github.com/x70b1/polybar-scripts
#source https://github.com/polybar/polybar-scripts
if ! updates_arch=$(checkupdates 2> /dev/null | wc -l ); then
updates_arch=0
fi
if [ $updates_arch -gt 0 ]; then
echo %{F#C6AAE8}  Arch: $updates_arch %{F-}
fi

62
scripts/colors.sh Executable file
View File

@ -0,0 +1,62 @@
#!/usr/bin/env bash
# Checking that you are screwing up :)
theme=$1
if [ -z "$1" ]
then
# No theme supplied by UP script / falling back to Amber
theme="catppuccin"
fi
# Available themes array
themes=(catppuccin catppuccin2);
if [[ " "${themes[@]}" " == *" "$1" "* ]] ;then
echo "Good boy.."
else
# Invalid theme supplied by UP script / falling back to Amber
theme="catppuccin"
fi
source $HOME/.config/leftwm/themes/current/scripts/colors_$theme.sh
# Color files
THEME_FILE="$HOME/.config/leftwm/themes/current/theme.toml"
POLYBAR_FILE="$HOME/.config/leftwm/themes/current/polybar.colors"
LIQUID_POLYBAR_FILE="$HOME/.config/leftwm/themes/current/polybar.liquid"
ROFI_FILE="$HOME/.config/leftwm/themes/current/scripts/rasi/colors.rasi"
SCRIPT_BT_FILE="$HOME/.config/leftwm/themes/current/scripts/bluetooth.sh"
SCRIPT_CAU_FILE="$HOME/.config/leftwm/themes/current/scripts/check-arch-updates.sh"
# Change LeftWM theme colors
sed -i -e "s/default_border_color = '#.*/default_border_color = '$COLOR_BORDER_INACTIVE'/g" $THEME_FILE
sed -i -e "s/floating_border_color = '#.*/floating_border_color = '$COLOR_BORDER_FLOATING'/g" $THEME_FILE
sed -i -e "s/focused_border_color = '#.*/focused_border_color = '$COLOR_BORDER_ACTIVE'/g" $THEME_FILE
# Change rofi colors
sed -i -e "s/background: #.*/background: $COLOR_APPLET_BACKGROUND;/g" $ROFI_FILE
sed -i -e "s/background-light: #.*/background-light: $COLOR_APPLET_BACKGROUND_LIGHT;/g" $ROFI_FILE
sed -i -e "s/foreground: #.*/foreground: $COLOR_FOREGROUND;/g" $ROFI_FILE
sed -i -e "s/foreground-dark: #.*/foreground-dark: $COLOR_FOREGROUND_DARK;/g" $ROFI_FILE
sed -i -e "s/primary: #.*/primary: $COLOR_PRIMARY;/g" $ROFI_FILE
sed -i -e "s/bordercolor: #.*/bordercolor: $COLOR_BORDER_ACTIVE;/g" $ROFI_FILE
# Change polybar config colors
sed -i -e "s/background = #.*/background = $COLOR_BAR_BACKGROUND/g" $POLYBAR_FILE
sed -i -e "s/foreground = #.*/foreground = $COLOR_BAR_FOREGROUND/g" $POLYBAR_FILE
sed -i -e "s/primary = #.*/primary = $COLOR_PRIMARY/g" $POLYBAR_FILE
sed -i -e "s/secondary = #.*/secondary = $COLOR_SECONDARY/g" $POLYBAR_FILE
sed -i -e "s/alternate = #.*/alternate = $COLOR_ALTERNATE/g" $POLYBAR_FILEFILE
# Change polybar liquid colors
sed -i -e "/^{% if tag.mine %}/s/#[a-zA-Z0-9]\{6\}/$COLOR_PRIMARY/g" $LIQUID_POLYBAR_FILE
sed -i -e "/^{% elsif tag.visible %}/s/#[a-zA-Z0-9]\{6\}/$COLOR_PRIMARY/g" $LIQUID_POLYBAR_FILE
sed -i -e "/^{% elsif tag.busy %}/s/#[a-zA-Z0-9]\{6\}/$COLOR_SECONDARY/g" $LIQUID_POLYBAR_FILE
sed -i -e "/^{% else tag.visible %}%/s/#[a-zA-Z0-9]\{6\}/$COLOR_FOREGROUND/g" $LIQUID_POLYBAR_FILE
sed -i -e "s/%{B#[A-Za-z0-9_]*}%{F#[A-Za-z0-9_]*} {{ workspace.layout }}/%{B$COLOR_BAR_BACKGROUND}%{F$COLOR_BAR_FOREGROUND} {{ workspace.layout }}/g" $LIQUID_POLYBAR_FILE
# Change Bluetooth script colors
sed -i -e "s/%{F#[A-Za-z0-9_]*/%{F$COLOR_PRIMARY/g" $SCRIPT_BT_FILE
sed -i -e "s/%{F#[A-Za-z0-9_]*}  Off/%{F$COLOR_INACTIVE}  Off/g" $SCRIPT_BT_FILE
# Change Check Arch updates script colors
sed -i -e "s/%{F#[A-Za-z0-9_]*/%{F$COLOR_PRIMARY/g" $SCRIPT_CAU_FILE

17
scripts/colors_catppuccin.sh Executable file
View File

@ -0,0 +1,17 @@
#!/usr/bin/env bash
## Catppuccin theme
COLOR_BAR_BACKGROUND="#332E41"
COLOR_BAR_FOREGROUND="#B7E5E6"
COLOR_BACKGROUND="#332E41"
COLOR_FOREGROUND="#DFDEF1"
COLOR_FOREGROUND_DARK="#988BA2"
COLOR_PRIMARY="#C6AAE8"
COLOR_SECONDARY="#DFDEF1"
COLOR_ALTERNATE="#C6AAE8"
COLOR_INACTIVE="#6E6C7E"
COLOR_BORDER_ACTIVE="#C6AAE8"
COLOR_BORDER_INACTIVE="#1E1E28"
COLOR_BORDER_FLOATING="#F2CDCD"
COLOR_APPLET_BACKGROUND="#332E41"
COLOR_APPLET_BACKGROUND_LIGHT="#575268"

17
scripts/colors_catppuccin2.sh Executable file
View File

@ -0,0 +1,17 @@
#!/usr/bin/env bash
## Catppuccin2 theme
COLOR_BAR_BACKGROUND="#332E41"
COLOR_BAR_FOREGROUND="#F5E0DC"
COLOR_BACKGROUND="#332E41"
COLOR_FOREGROUND="#DFDEF1"
COLOR_FOREGROUND_DARK="#988BA2"
COLOR_PRIMARY="#B7E5E6"
COLOR_SECONDARY="#DFDEF1"
COLOR_ALTERNATE="#B7E5E6"
COLOR_INACTIVE="#6E6C7E"
COLOR_BORDER_ACTIVE="#B7E5E6"
COLOR_BORDER_INACTIVE="#1E1E28"
COLOR_BORDER_FLOATING="#F2CDCD"
COLOR_APPLET_BACKGROUND="#332E41"
COLOR_APPLET_BACKGROUND_LIGHT="#575268"

2
scripts/getram Executable file
View File

@ -0,0 +1,2 @@
#!/bin/sh
printf "%.0f\n" $(free -m | grep Mem | awk '{print ($3/$2)*100}')

2
scripts/getvol Executable file
View File

@ -0,0 +1,2 @@
#!/bin/sh
amixer -D pulse sget Master | grep 'Left:' | awk -F'[][]' '{ print $2 }' | tr -d '%' | head -1

24
scripts/launcher.sh Executable file
View File

@ -0,0 +1,24 @@
#!/usr/bin/env bash
# SETTINGS ####################################################
# Possible positions:
# center
# north
# northeast
# east
# southeast
# south
# southwest
# west
# northwest
LOCATION="center"
###############################################################
LPATH="$( cd "$(dirname "$0")" ; pwd -P )"
# Rofi config
rofi_cmd="rofi -theme $LPATH/rasi/launcher.rasi"
# Main
$rofi_cmd -no-lazy-grab -show drun -modi drun \
-theme-str 'window {location: '$LOCATION';}'

46
scripts/layout.sh Executable file
View File

@ -0,0 +1,46 @@
#!/usr/bin/env bash
# SETTINGS ####################################################
# Possible positions:
# center
# north
# northeast
# east
# southeast
# south
# southwest
# west
# northwest
LOCATION="center"
###############################################################
LPATH="$( cd "$(dirname "$0")" ; pwd -P )"
WSACTIVE="$(leftwm-state -q -t $LPATH/misc/workspaceid.liquid)"
# Items to display
LAYOUT="$(leftwm-state -q -n -w $WSACTIVE -s "{{workspace.layout}}")"
PREV=""
NEXT=""
# Rofi config
rofi_cmd="rofi -theme $LPATH/rasi/layout.rasi"
display="$PREV\n$NEXT"
# Main
chosen="$(echo -e "$display" | \
$rofi_cmd -p "$LAYOUT" -dmenu \
-theme-str 'window {location: '$LOCATION';}' \
-selected-row 1\
)"
# Use choosen
case $chosen in
$PREV)
leftwm-command "PreviousLayout"
${0}
;;
$NEXT)
leftwm-command "NextLayout"
${0}
;;
esac

73
scripts/misc/lockscreen Executable file
View File

@ -0,0 +1,73 @@
#!/usr/bin/env bash
# Cleanup
rm -f /tmp/screenshot*.png
# Take screenshot
scrot /tmp/screenshot.png
# Pixelate
convert /tmp/screenshot.png \
-scale 10% \
-scale 1000% \
-fill "#282828" \
-colorize 30% \
/tmp/lockscreen.png
# i3Lock
alpha="D9"
base03="#002b36"
base02="#212121"
base01="#586e75"
base00="#657b83"
base0="#839496"
base1="#93a1a1"
base2="#eee8d5"
base3="#fdf6e3"
yellow="#fdd835"
orange="#fb8c00"
red="#e53935"
magenta="#d33682"
violet="#8e24aa"
blue="#0DD7FF"
cyan="#00acc1"
green="#43a047"
amber="#ffb300"
white="#f5f5f5"
lime="#c0ca33"
black="#212121"
i3lock \
--image="/tmp/lockscreen.png" \
--insidever-color=$base02$alpha \
--insidewrong-color=$base02$alpha \
--inside-color=$base02$alpha \
--ringver-color=$green$alpha \
--ringwrong-color=$red$alpha \
--ringver-color=$green$alpha \
--ringwrong-color=$red$alpha \
--ring-color=$amber$alpha \
--line-uses-ring \
--keyhl-color=$blue$alpha \
--bshl-color=$orange$alpha \
--separator-color=$base01$alpha \
--verif-color=$green \
--wrong-color=$red \
--layout-color=$white \
--date-color=$white \
--time-color=$white \
--screen 1 \
--clock \
--indicator \
--time-str="%H:%M:%S" \
--date-str="%a %b %e %Y" \
--verif-text="Verifying..." \
--wrong-text="Auth Failed" \
--noinput="No Input" \
--lock-text="Locking..." \
--lockfailed="Lock Failed" \
--radius=120 \
--ring-width=15 \
--pass-media-keys \
--pass-screen-keys \
--pass-volume-keys \

14
scripts/misc/tags.liquid Normal file
View File

@ -0,0 +1,14 @@
{% for tag in workspace.tags %}
{% if tag.mine %}
{{tag.index}},{{tag.name}},m;
{% elsif tag.visible %}
{{tag.index}},{{tag.name}},v;
{% elsif tag.busy %}
{{tag.index}},{{tag.name}},b;
{% else tag.visible %}
{{tag.index}},{{tag.name}},e;
{% endif %}
{% endfor %}

View File

@ -0,0 +1,9 @@
{% for ws in workspaces %}
{% for tag in ws.tags %}
{% if tag.mine %}
{% if tag.focused %}
{{ ws.index }}
{% endif %}
{% endif %}
{% endfor %}
{% endfor %}

156
scripts/powermenu.sh Executable file
View File

@ -0,0 +1,156 @@
#!/usr/bin/env bash
# SETTINGS ####################################################
# Feather font icons:
shutdown=""
reboot=""
lock=""
suspend=""
logout=""
#
# Possible positions:
# center
# north
# northeast
# east
# southeast
# south
# southwest
# west
# northwest
LOCATION="center"
#
CONFIRMATION_MSG="Are You Sure? : "
CONFIRMATION_OPT="Available Options: [y/yes] [n/no]"
###############################################################
LPATH="$( cd "$(dirname "$0")" ; pwd -P )"
# Rofi config
rofi_cmd="rofi -theme $LPATH/rasi/powermenu.rasi"
options="$shutdown\n$reboot\n$lock\n$suspend\n$logout"
# Confirmation
confirm_option() {
rofi -dmenu\
-i\
-no-fixed-num-lines\
-p "$CONFIRMATION_MSG"\
-theme $LPATH/rasi/confirm.rasi
}
# Message
msg() {
rofi -theme "$LPATH/rasi/message.rasi" \
-e "$CONFIRMATION_OPT"
}
# Main
chosen="$(echo -e "$options" | \
$rofi_cmd -dmenu \
-theme-str 'window {location: '$LOCATION';}' \
-selected-row 2\
)"
# Use choosen
case $chosen in
$lock)
confirm=$(confirm_option &)
if [[ $confirm == "yes" || \
$confirm == "YES" || \
$confirm == "y" || \
$confirm == "Y" ]]; \
then
$LPATH/misc/lockscreen
elif [[ $confirm == "no" || \
$confirm == "NO" || \
$confirm == "n" || \
$aconfirmns == "N" ]]; \
then
${0}
else
msg
${0}
fi
;;
$shutdown)
confirm=$(confirm_option &)
if [[ $confirm == "yes" || \
$confirm == "YES" || \
$confirm == "y" || \
$confirm == "Y" ]]; \
then
systemctl poweroff
elif [[ $confirm == "no" || \
$confirm == "NO" || \
$confirm == "n" || \
$aconfirmns == "N" ]]; \
then
${0}
else
msg
${0}
fi
;;
$reboot)
confirm=$(confirm_option &)
if [[ $confirm == "yes" || \
$confirm == "YES" || \
$confirm == "y" || \
$confirm == "Y" ]]; \
then
systemctl reboot
elif [[ $confirm == "no" || \
$confirm == "NO" || \
$confirm == "n" || \
$aconfirmns == "N" ]]; \
then
${0}
else
msg
${0}
fi
;;
$suspend)
confirm=$(confirm_option &)
if [[ $confirm == "yes" || \
$confirm == "YES" || \
$confirm == "y" || \
$confirm == "Y" ]]; \
then
mpc -q pause &
amixer set Master mute &
systemctl suspend
elif [[ $confirm == "no" || \
$confirm == "NO" || \
$confirm == "n" || \
$aconfirmns == "N" ]]; \
then
${0}
else
msg
${0}
fi
;;
$logout)
confirm=$(confirm_option &)
if [[ $confirm == "yes" || \
$confirm == "YES" || \
$confirm == "y" || \
$confirm == "Y" ]]; \
then
loginctl terminate-session ${XDG_SESSION_ID-}
elif [[ $confirm == "no" || \
$confirm == "NO" || \
$confirm == "n" || \
$aconfirmns == "N" ]]; \
then
${0}
else
msg
${0}
fi
;;
esac

View File

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2019 Mario
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

519
scripts/pulseaudio-control.sh Executable file
View File

@ -0,0 +1,519 @@
#!/usr/bin/env bash
##################################################################
# Polybar Pulseaudio Control v2.2.5 #
# https://github.com/marioortizmanero/polybar-pulseaudio-control #
##################################################################
# Defaults for configurable values, expected to be set by command-line arguments
AUTOSYNC="no"
COLOR_MUTED="%{F#6b6b6b}"
ICON_MUTED=
ICON_SINK=
NOTIFICATIONS="no"
OSD="no"
SINK_NICKNAMES_PROP=
VOLUME_STEP=2
VOLUME_MAX=130
# shellcheck disable=SC2016
FORMAT='$VOL_ICON ${VOL_LEVEL}% $ICON_SINK $SINK_NICKNAME'
declare -A SINK_NICKNAMES
declare -a ICONS_VOLUME
declare -a SINK_BLACKLIST
# Environment & global constants for the script
export LC_ALL=C # Some calls depend on English outputs of pactl
END_COLOR="%{F-}" # For Polybar colors
# Saves the currently default sink into a variable named `curSink`. It will
# return an error code when pulseaudio isn't running.
function getCurSink() {
if ! pactl info &>/dev/null; then return 1; fi
local curSinkName
curSinkName=$(pactl info | awk '/Default Sink: / {print $3}')
curSink=$(pactl list sinks | grep -B 4 -E "Name: $curSinkName\$" | sed -nE 's/^Sink #([0-9]+)$/\1/p')
}
# Saves the sink passed by parameter's volume into a variable named `VOL_LEVEL`.
function getCurVol() {
VOL_LEVEL=$(pactl list sinks | grep -A 15 -E "^Sink #$1\$" | grep 'Volume:' | grep -E -v 'Base Volume:' | awk -F : '{print $3; exit}' | grep -o -P '.{0,3}%' | sed 's/.$//' | tr -d ' ')
}
# Saves the name of the sink passed by parameter into a variable named
# `sinkName`.
function getSinkName() {
sinkName=$(pactl list sinks short | awk -v sink="$1" '{ if ($1 == sink) {print $2} }')
portName=$(pactl list sinks | grep -e 'Sink #' -e 'Active Port: ' | sed -n "/^Sink #$1\$/,+1p" | awk '/Active Port: / {print $3}')
}
# Saves the name to be displayed for the sink passed by parameter into a
# variable called `SINK_NICKNAME`.
# If a mapping for the sink name exists, that is used. Otherwise, the string
# "Sink #<index>" is used.
function getNickname() {
getSinkName "$1"
unset SINK_NICKNAME
if [ -n "$sinkName" ] && [ -n "$portName" ] && [ -n "${SINK_NICKNAMES[$sinkName/$portName]}" ]; then
SINK_NICKNAME="${SINK_NICKNAMES[$sinkName/$portName]}"
elif [ -n "$sinkName" ] && [ -n "${SINK_NICKNAMES[$sinkName]}" ]; then
SINK_NICKNAME="${SINK_NICKNAMES[$sinkName]}"
elif [ -n "$sinkName" ] && [ -n "$SINK_NICKNAMES_PROP" ]; then
getNicknameFromProp "$SINK_NICKNAMES_PROP" "$sinkName"
# Cache that result for next time
SINK_NICKNAMES["$sinkName"]="$SINK_NICKNAME"
fi
if [ -z "$SINK_NICKNAME" ]; then
SINK_NICKNAME="Sink #$1"
fi
}
# Gets sink nickname based on a given property.
function getNicknameFromProp() {
local nickname_prop="$1"
local for_name="$2"
SINK_NICKNAME=
while read -r property value; do
case "$property" in
Name:)
sink_name="$value"
unset sink_desc
;;
"$nickname_prop")
if [ "$sink_name" != "$for_name" ]; then
continue
fi
SINK_NICKNAME="${value:3:-1}"
break
;;
esac
done < <(pactl list sinks)
}
# Saves the status of the sink passed by parameter into a variable named
# `IS_MUTED`.
function getIsMuted() {
IS_MUTED=$(pactl list sinks | grep -E "^Sink #$1\$" -A 15 | awk '/Mute: / {print $2}')
}
# Saves all the sink inputs of the sink passed by parameter into a string
# named `sinkInputs`.
function getSinkInputs() {
sinkInputs=$(pactl list sink-inputs | grep -B 4 "Sink: $1" | sed -nE 's/^Sink Input #([0-9]+)$/\1/p')
}
function volUp() {
# Obtaining the current volume from pulseaudio into $VOL_LEVEL.
if ! getCurSink; then
echo "PulseAudio not running"
return 1
fi
getCurVol "$curSink"
local maxLimit=$((VOLUME_MAX - VOLUME_STEP))
# Checking the volume upper bounds so that if VOLUME_MAX was 100% and the
# increase percentage was 3%, a 99% volume would top at 100% instead
# of 102%. If the volume is above the maximum limit, nothing is done.
if [ "$VOL_LEVEL" -le "$VOLUME_MAX" ] && [ "$VOL_LEVEL" -ge "$maxLimit" ]; then
pactl set-sink-volume "$curSink" "$VOLUME_MAX%"
elif [ "$VOL_LEVEL" -lt "$maxLimit" ]; then
pactl set-sink-volume "$curSink" "+$VOLUME_STEP%"
fi
if [ $OSD = "yes" ]; then showOSD "$curSink"; fi
if [ $AUTOSYNC = "yes" ]; then volSync; fi
}
function volDown() {
# Pactl already handles the volume lower bounds so that negative values
# are ignored.
if ! getCurSink; then
echo "PulseAudio not running"
return 1
fi
pactl set-sink-volume "$curSink" "-$VOLUME_STEP%"
if [ $OSD = "yes" ]; then showOSD "$curSink"; fi
if [ $AUTOSYNC = "yes" ]; then volSync; fi
}
function volSync() {
if ! getCurSink; then
echo "PulseAudio not running"
return 1
fi
getSinkInputs "$curSink"
getCurVol "$curSink"
# Every output found in the active sink has their volume set to the
# current one. This will only be called if $AUTOSYNC is `yes`.
for each in $sinkInputs; do
pactl set-sink-input-volume "$each" "$VOL_LEVEL%"
done
}
function volMute() {
# Switch to mute/unmute the volume with pactl.
if ! getCurSink; then
echo "PulseAudio not running"
return 1
fi
if [ "$1" = "toggle" ]; then
getIsMuted "$curSink"
if [ "$IS_MUTED" = "yes" ]; then
pactl set-sink-mute "$curSink" "no"
else
pactl set-sink-mute "$curSink" "yes"
fi
elif [ "$1" = "mute" ]; then
pactl set-sink-mute "$curSink" "yes"
elif [ "$1" = "unmute" ]; then
pactl set-sink-mute "$curSink" "no"
fi
if [ $OSD = "yes" ]; then showOSD "$curSink"; fi
}
function nextSink() {
# The final sinks list, removing the blacklisted ones from the list of
# currently available sinks.
if ! getCurSink; then
echo "PulseAudio not running"
return 1
fi
# Obtaining a tuple of sink indexes after removing the blacklisted devices
# with their name.
sinks=()
local i=0
while read -r line; do
index=$(echo "$line" | cut -f1)
name=$(echo "$line" | cut -f2)
# If it's in the blacklist, continue the main loop. Otherwise, add
# it to the list.
for sink in "${SINK_BLACKLIST[@]}"; do
if [ "$sink" = "$name" ]; then
continue 2
fi
done
sinks[$i]="$index"
i=$((i + 1))
done < <(pactl list short sinks | sort -n)
# If the resulting list is empty, nothing is done
if [ ${#sinks[@]} -eq 0 ]; then return; fi
# If the current sink is greater or equal than last one, pick the first
# sink in the list. Otherwise just pick the next sink avaliable.
local newSink
if [ "$curSink" -ge "${sinks[-1]}" ]; then
newSink=${sinks[0]}
else
for sink in "${sinks[@]}"; do
if [ "$curSink" -lt "$sink" ]; then
newSink=$sink
break
fi
done
fi
# The new sink is set
pactl set-default-sink "$newSink"
# Move all audio threads to new sink
local inputs
inputs="$(pactl list short sink-inputs | cut -f 1)"
for i in $inputs; do
pactl move-sink-input "$i" "$newSink"
done
if [ $NOTIFICATIONS = "yes" ]; then
getNickname "$newSink"
if command -v dunstify &>/dev/null; then
notify="dunstify --replace 201839192"
else
notify="notify-send"
fi
$notify "PulseAudio" "Changed output to $SINK_NICKNAME" --icon=audio-headphones-symbolic &
fi
}
# This function assumes that PulseAudio is already running. It only supports
# KDE OSDs for now. It will show a system message with the status of the
# sink passed by parameter, or the currently active one by default.
function showOSD() {
if [ -z "$1" ]; then
curSink="$1"
else
getCurSink
fi
getCurVol "$curSink"
getIsMuted "$curSink"
qdbus org.kde.kded /modules/kosd showVolume "$VOL_LEVEL" "$IS_MUTED"
}
function listen() {
local firstRun=0
# Listen for changes and immediately create new output for the bar.
# This is faster than having the script on an interval.
pactl subscribe 2>/dev/null | {
while true; do
{
# If this is the first time just continue and print the current
# state. Otherwise wait for events. This is to prevent the
# module being empty until an event occurs.
if [ $firstRun -eq 0 ]; then
firstRun=1
else
read -r event || break
# Avoid double events
if ! echo "$event" | grep -e "on card" -e "on sink" -e "on server"; then
continue
fi
fi
} &>/dev/null
output
done
}
}
function output() {
if ! getCurSink; then
echo "PulseAudio not running"
return 1
fi
getCurVol "$curSink"
getIsMuted "$curSink"
# Fixed volume icons over max volume
local iconsLen=${#ICONS_VOLUME[@]}
if [ "$iconsLen" -ne 0 ]; then
local volSplit=$((VOLUME_MAX / iconsLen))
for i in $(seq 1 "$iconsLen"); do
if [ $((i * volSplit)) -ge "$VOL_LEVEL" ]; then
VOL_ICON="${ICONS_VOLUME[$((i-1))]}"
break
fi
done
else
VOL_ICON=""
fi
getNickname "$curSink"
# Showing the formatted message
if [ "$IS_MUTED" = "yes" ]; then
# shellcheck disable=SC2034
VOL_ICON=$ICON_MUTED
echo "${COLOR_MUTED}$(eval echo "$FORMAT")${END_COLOR}"
else
eval echo "$FORMAT"
fi
}
function usage() {
echo "\
Usage: $0 [OPTION...] ACTION
Options:
--autosync | --no-autosync
Whether to maintain same volume for all programs.
Default: $AUTOSYNC
--color-muted <rrggbb>
Color in which to format when muted.
Default: ${COLOR_MUTED:4:-1}
--notifications | --no-notifications
Whether to show notifications when changing sinks.
Default: $NOTIFICATIONS
--osd | --no-osd
Whether to display KDE's OSD message.
Default: $OSD
--icon-muted <icon>
Icon to use when muted.
Default: none
--icon-sink <icon>
Icon to use for sink.
Default: none
--format <string>
Use a format string to control the output.
Available variables:
* \$VOL_ICON
* \$VOL_LEVEL
* \$ICON_SINK
* \$SINK_NICKNAME
* \$IS_MUTED (yes/no)
Default: $FORMAT
--icons-volume <icon>[,<icon>...]
Icons for volume, from lower to higher.
Default: none
--volume-max <int>
Maximum volume to which to allow increasing.
Default: $VOLUME_MAX
--volume-step <int>
Step size when inc/decrementing volume.
Default: $VOLUME_STEP
--sink-blacklist <name>[,<name>...]
Sinks to ignore when switching.
Default: none
--sink-nicknames-from <prop>
pactl property to use for sink names, unless overriden by
--sink-nickname. Its possible values are listed under the 'Properties'
key in the output of \`pactl list sinks\`
Default: none
--sink-nickname <name>:<nick>
Nickname to assign to given sink name, taking priority over
--sink-nicknames-from. May be given multiple times, and 'name' is
exactly as listed in the output of \`pactl list sinks short | cut -f2\`.
Note that you can also specify a port name for the sink with
\`<name>/<port>\`.
Default: none
Actions:
help display this message and exit
output print the PulseAudio status once
listen listen for changes in PulseAudio to automatically update
this script's output
up, down increase or decrease the default sink's volume
mute, unmute mute or unmute the default sink's audio
togmute switch between muted and unmuted
next-sink switch to the next available sink
sync synchronize all the output streams volume to be the same as
the current sink's volume
Author:
Mario Ortiz Manero
More info on GitHub:
https://github.com/marioortizmanero/polybar-pulseaudio-control"
}
while [[ "$1" = --* ]]; do
unset arg
unset val
if [[ "$1" = *=* ]]; then
arg="${1//=*/}"
val="${1//*=/}"
shift
else
arg="$1"
# Support space-separated values, but also value-less flags
if [[ "$2" != --* ]]; then
val="$2"
shift
fi
shift
fi
case "$arg" in
--autosync)
AUTOSYNC=yes
;;
--no-autosync)
AUTOSYNC=no
;;
--color-muted|--colour-muted)
COLOR_MUTED="%{F#$val}"
;;
--notifications)
NOTIFICATIONS=yes
;;
--no-notifications)
NOTIFICATIONS=no
;;
--osd)
OSD=yes
;;
--no-osd)
OSD=no
;;
--icon-muted)
ICON_MUTED="$val"
;;
--icon-sink)
# shellcheck disable=SC2034
ICON_SINK="$val"
;;
--icons-volume)
IFS=, read -r -a ICONS_VOLUME <<< "${val//[[:space:]]/}"
;;
--volume-max)
VOLUME_MAX="$val"
;;
--volume-step)
VOLUME_STEP="$val"
;;
--sink-blacklist)
IFS=, read -r -a SINK_BLACKLIST <<< "${val//[[:space:]]/}"
;;
--sink-nicknames-from)
SINK_NICKNAMES_PROP="$val"
;;
--sink-nickname)
SINK_NICKNAMES["${val//:*/}"]="${val//*:}"
;;
--format)
FORMAT="$val"
;;
*)
echo "Unrecognised option: $arg" >&2
exit 1
;;
esac
done
case "$1" in
up)
volUp
;;
down)
volDown
;;
togmute)
volMute toggle
;;
mute)
volMute mute
;;
unmute)
volMute unmute
;;
sync)
volSync
;;
listen)
listen
;;
next-sink)
nextSink
;;
output)
output
;;
help)
usage
;;
*)
echo "Unrecognised action: $1" >&2
exit 1
;;
esac

10
scripts/rasi/colors.rasi Normal file
View File

@ -0,0 +1,10 @@
/* colors */
* {
background: #332E41;
background-light: #575268;
foreground: #DFDEF1;
foreground-dark: #988BA2;
primary: #C6AAE8;
bordercolor: #C6AAE8;
}

22
scripts/rasi/confirm.rasi Normal file
View File

@ -0,0 +1,22 @@
@import "colors.rasi"
* {
background-color: @background-light;
text-color: @foreground;
font: "Iosevka Nerd Font 15";
}
window {
width: 240px;
padding: 15px;
border: 0px;
border-radius: 0px;
border-color: @background;
location: center;
y-offset: -20px;
}
entry {
expand: true;
text-color: @primary;
}

View File

@ -0,0 +1,95 @@
@import "colors.rasi"
configuration {
font: "Iosevka Nerd Font 12";
show-icons: true;
icon-theme: "Papirus";
display-drun: "Apps:";
drun-display-format: "{name}";
disable-history: false;
sidebar-mode: false;
}
* {
background-color: transparent;
text-color: @foreground;
margin: 0px;
padding: 0px;
spacing: 0px;
}
window {
location: center;
width: 480;
y-offset: -200;
border-radius: 4px;
background-color: @background;
}
mainbox {
padding: 12px;
}
inputbar {
background-color: @background;
border-color: @bordercolor;
border: 2px;
border-radius: 4px;
padding: 8px 16px;
spacing: 8px;
children: [ prompt, entry ];
}
prompt {
text-color: @foreground;
}
entry {
placeholder: "search";
placeholder-color: @foreground-dark;
}
message {
margin: 12px 0 0;
border-radius: 4px;
border-color: @bordercolor;
background-color: @background;
}
textbox {
padding: 8px 24px;
}
listview {
background-color: transparent;
margin: 12px 0 0;
lines: 8;
columns: 1;
fixed-height: false;
}
element {
padding: 8px 16px;
spacing: 8px;
border-radius: 4px;
}
element selected normal, element selected active {
background-color: @primary;
text-color: @background;
}
element-icon {
size: 1em;
vertical-align: 0.5;
}
element-text {
text-color: inherit;
}

124
scripts/rasi/layout.rasi Normal file
View File

@ -0,0 +1,124 @@
/*
################################################
# Original design by Aditya Shakya (@adi1090x) #
################################################
*/
@import "colors.rasi"
configuration {
show-icons: false;
font: "Iosevka Nerd Font 12";
disable-history: false;
sidebar-mode: false;
}
* {
background-color: @background;
text-color: @foreground;
}
window {
transparency: "real";
border-radius: 0px;
location: center;
width: 400px;
x-offset: 0px;
y-offset: 0px;
}
prompt {
enabled: true;
padding: 3px 10px 3px 10px;
background-color: @background-light;
text-color: @primary;
border: 2px 2px 3px 2px;
border-radius: 0px;
border-color: @primary;
}
textbox-prompt-colon {
expand: false;
str: " Layout";
background-color: @primary;
text-color: @background;
padding: 5px 5px 0px 5px;
}
inputbar {
children: [ textbox-prompt-colon, prompt ];
spacing: 0px;
background-color: @background;
text-color: @foreground;
expand: false;
border: 0px;
border-radius: 0px;
border-color: @primary;
margin: 0px;
padding: 0px;
position: center;
}
listview {
columns: 3;
lines: 1;
spacing: 0;
cycle: true;
dynamic: true;
layout: vertical;
}
mainbox {
background-color: @background;
children: [ inputbar, listview ];
spacing: 12px;
margin: 12px;
}
element {
background-color: @background-light;
text-color: @foreground;
orientation: vertical;
border-radius: 0px;
}
element-text {
background-color: inherit;
text-color: inherit;
font: "Iosevka Nerd Font 30";
expand: true;
horizontal-align: 0.5;
vertical-align: 0.5;
margin: 0px;
}
element normal.urgent,
element alternate.urgent {
background-color: @off;
text-color: @background;
border-radius: 4px;
}
element normal.active,
element alternate.active {
background-color: @on;
text-color: @background;
}
element selected {
background-color: @primary;
text-color: @background;
border: 0px;
border-radius: 4px;
border-color: @bordercolor;
}
element selected.urgent {
background-color: @on;
text-color: @background;
}
element selected.active {
background-color: @off;
color: @background;
}

22
scripts/rasi/message.rasi Normal file
View File

@ -0,0 +1,22 @@
@import "colors.rasi"
* {
background-color: @background-light;
text-color: @foreground;
font: "Iosevka Nerd Font 13";
}
window {
width: 300px;
padding: 15px;
border: 2px;
border-radius: 4px;
border-color: @primary;
location: center;
y-offset: -20px;
}
entry {
expand: true;
text-color: @primary;
}

View File

@ -0,0 +1,56 @@
@import "colors.rasi"
configuration {
font: "Feather 30";
disable-history: false;
sidebar-mode: false;
show-icons: false;
}
* {
background-color: @background;
text-color: @foreground;
}
window {
transparency: "real";
border-radius: 4px;
location: center;
width: 600px;
}
listview {
columns: 5;
lines: 1;
spacing: 12px;
cycle: true;
dynamic: true;
layout: vertical;
}
mainbox {
children: [ listview ];
spacing: 20px;
margin: 20px;
}
element {
background-color: @background-light;
border-radius: 4px;
}
element-text {
background-color: inherit;
text-color: inherit;
expand: true;
horizontal-align: 0.5;
vertical-align: 0.5;
margin: 20px 15px 20px 15px;
}
element selected {
text-color: @background;
background-color: @primary;
border-radius: 4px;
}

3
sizes.liquid Normal file
View File

@ -0,0 +1,3 @@
{% for workspace in workspaces %}
{{workspace.w}} {{workspace.x}} {{workspace.y}}
{% endfor %}

5
theme.toml Normal file
View File

@ -0,0 +1,5 @@
border_width = 4
margin = 15
default_border_color = '#1E1E28'
floating_border_color = '#F2CDCD'
focused_border_color = '#C6AAE8'

1313010
unifont.bdf Normal file

File diff suppressed because it is too large Load Diff

100
up Executable file
View File

@ -0,0 +1,100 @@
#!/usr/bin/env bash
export SCRIPTPATH="$( cd "$(dirname "$0")" ; pwd -P )"
# [ COLOR SCHEME ] ###########################################################
# Available themes:
# - catppuccin
#
# NOTE:
# To avoid issues colors.sh will check the theme name provided below and try
# to fallback to the amber theme if what you provide is NULL or does not exist
# in the array on line 12.
source $SCRIPTPATH/scripts/colors.sh catppuccin
##############################################################################
# [ BASIC ] ##################################################################
# down the last running theme
if [ -f "/tmp/leftwm-theme-down" ]; then
/tmp/leftwm-theme-down
rm /tmp/leftwm-theme-down
fi
ln -s $SCRIPTPATH/down /tmp/leftwm-theme-down
# set the theme.toml config
echo "LoadTheme $SCRIPTPATH/theme.toml" > $XDG_RUNTIME_DIR/leftwm/commands.pipe
##############################################################################
# [ RUN STUFF ] ##############################################################
# keybindings daemon (if it exist)
if [ -x "$(command -v sxhkd)" ]; then
sxhkd -c $HOME/.config/leftwm/sxhkd/sxhkdrc &
fi
# apps
numlockx on &
# notifications
if [ -x "$(command -v dunst)" ]; then
pkill dunst
dunst -config $HOME/.config/leftwm/themes/current/conf/dunst.config &
fi
#/usr/lib/xfce4/notifyd/xfce4-notifyd &
# picom (if it exists)
if [ -x "$(command -v picom)" ]; then
picom --config $HOME/.config/leftwm/themes/current/conf/picom.config &> /dev/null &
fi
##############################################################################
# [ WALLPAPERS ] #############################################################
# - Comment/uncomment the option you prefer
# 1) START - set random wallpapers -----------------------------------------+
if [ -x "$(command -v feh)" ]; then
feh --randomize --bg-fill "$SCRIPTPATH"/wallpapers/*
fi
# END ----------------------------------------------------------------------+
# 2) START - set ONE wallpaper for all displays ----------------------------+
#if [ -x "$(command -v feh)" ]; then
# feh --bg-fill "$SCRIPTPATH"/wallpapers/atlas-ark-gruvbox-simple-lines.png
#fi
# END ----------------------------------------------------------------------+
# 3) START - set MULTIPLE wallpapers for all displays ----------------------+
# NOTE: the last image path DO NOT end with "\"
#if [ -x "$(command -v feh)" ]; then
# feh --bg-fill \
# "$SCRIPTPATH"/wallpapers/blue_unicat.png \
# "$SCRIPTPATH"/wallpapers/pink_unicat.png
#fi
# END ----------------------------------------------------------------------+
##############################################################################
# [ START STATUSBAR ] #########################################################
pkill polybar &
index=0
monitor="$(polybar -m | grep +0+0 | sed s/:.*// | tac)"
leftwm-state -q -n -t $SCRIPTPATH/sizes.liquid | sed -r '/^\s*$/d' | \
while read -r width x y
do
barname="mainbar$index"
monitor="$(polybar -m | awk -v i="$(( index + 1 ))" 'NR==i{print}' | sed s/:.*// | tr -d '\n')"
monitor=$monitor width=$(( width - 30 )) polybar -c "$SCRIPTPATH"/polybar.config $barname &
let index=index+1
done
;;
######################################################################

BIN
wallpapers/302315.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 269 KiB

BIN
wallpapers/394198.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 125 KiB

BIN
wallpapers/394279.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 107 KiB