This commit is contained in:
Clay Gomera 2022-07-01 02:06:16 -04:00
parent b861966c18
commit 75927f319c
83 changed files with 4115 additions and 260 deletions

View file

@ -7,12 +7,21 @@ This is just a personal repository where i store all my dotfiles, you're free cl
# Dependencies
If you want to get the full experience you need theese things:
* [my dmenu scripts](https://github.com/d4r1us-drk/drk-dmenu_scripts)
* [gruvbox-dark-gtk](https://github.com/jmattheis/gruvbox-dark-gtk)
* [gruvbox-dark-icons-gtk](https://github.com/jmattheis/gruvbox-dark-icons-gtk)
* [volantes-cursors](https://github.com/varlesh/volantes-cursors)
* [ani-cli](https://github.com/pystardust/ani-cli)
* [ytfzf](https://github.com/pystardust/ytfzf)
* [flix-cli](https://github.com/d4r1us-drk/flix-cli)
* mononoki Nerd Font
* lxsession
* picom
* dunst
* pamixer
* fd
* feh
* scrot
* NetworkManager
* j4-dmenu-desktop
* betterlockscreen
* xbacklight

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2 MiB

After

Width:  |  Height:  |  Size: 685 KiB

View file

@ -11,15 +11,11 @@ export EDITOR="emacsclient -t -a ''" # $EDITOR use Emacs in termina
export VISUAL="emacsclient -c -a emacs" # $VISUAL use Emacs in GUI mode
export READER="zathura" # Zathura as the pdf viewer
export TERMINAL="alacritty" # Alacritty as the default terminal emulator
export BROWSER="qutebrowser" # Qutebrowser as the default web browser
export WM="awesome" # AwesomeWM as the default Window Manager
export BROWSER="librewolf" # Qutebrowser as the default web browser
export WM="dwm" # AwesomeWM as the default Window Manager
export XDG_DATA_HOME=${XDG_DATA_HOME:="$HOME/.local/share"}
export XDG_CACHE_HOME=${XDG_CACHE_HOME:="$HOME/.cache"}
export XDG_CONFIG_HOME=${XDG_CONFIG_HOME:="$HOME/.config"}
export QT_QPA_PLATFORMTHEME=gtk2 # Qt theeming stuff
### AUTOSTART
/usr/bin/emacs --daemon & # Autostart the Emacs daemon
### BASHRC
source "$HOME"/.bashrc # Load the bashrc

0
user/.config/picom/picom.conf Executable file → Normal file
View file

0
user/.config/qutebrowser/config.py Executable file → Normal file
View file

0
user/.config/starship.toml Executable file → Normal file
View file

View file

@ -0,0 +1,8 @@
#!/usr/bin/env bash
# ***This script was made by Clay Gomera (Drake)***
# - Description: A simple desktop dmenu script
# - Dependencies: dmenu, j4-dmenu-desktop
DMENU="dmenu -l 10 -b -i -p Launch:"
j4-dmenu-desktop --dmenu "$DMENU" --no-generic

View file

@ -0,0 +1,26 @@
#!/usr/bin/env bash
# ***This script was made by Clay Gomera (Drake)***
# - Description: A simple script for file editing in dmenu
# - Dependencies: dmenu (Everything else can be changed)
# Show list of options
EDITOR="emacsclient -c -a emacs"
cd "$HOME" || exit 0
file=1
while [ "$file" ]; do
file=$(fd -LHpd 1 | /usr/bin/dmenu -l 10 -p "File to edit: $(basename $(pwd))")
if [ -e "$file" ]; then
owd=$(pwd)
if [ -d "$file" ]; then
cd "$file" || exit 0
else [ -f "$file" ]
if [ "$file" ]; then
$EDITOR "$owd/$file" &
exit 0
else
exit 0
fi
fi
fi
done

View file

@ -0,0 +1,35 @@
#!/usr/bin/env bash
# ***This script was made by Clay Gomera (Drake)***
# - Description: A simple power menu dmenu script
# - Dependencies: dmenu (Everything else can be changed)
## OPTIONS ##
option1=" Logout"
option2=" Reboot"
option3=" Power off"
option4="💤 Suspend"
option5="🔒lock"
option6="❌Cancel"
## OPTIONS ARRAY ##
options="$option1\n$option2\n$option3\n$option4\n$option5\n$option6"
## MAIN ACTION COMMAND ##
action=$(echo -e "$options" | dmenu -b -i -p " ")
case "$action" in
$option1*)
whoami | xargs -I % sh -c 'pkill -KILL -u %';;
$option2*)
loginctl reboot || systemctl reboot;;
$option3*)
loginctl poweroff || systemctl poweroff;;
$option4*)
betterlockscreen -l &
sleep 2
loginctl suspend || systemctl suspend;;
$option5*)
betterlockscreen -l;;
$option6*)
exit 0
esac

View file

@ -0,0 +1,63 @@
#!/usr/bin/env bash
# ***This script was made by Clay Gomera (Drake)***
# - Description: A simple screenshot dmenu script
# - Dependencies: scrot, dmenu, notify-send
## CREATING SCREENSHOT FOLDER ##
mkdir -p "$HOME/Pictures/Screenshots"
cd "$HOME/Pictures/Screenshots" || exit 0
## CHOICES ##
cho1=" Entire screen"
cho2=" Entire screen with delay"
cho3=" Focused window"
cho4=" Select area"
chos="$cho1\n$cho2\n$cho3\n$cho4"
## DELAY OPTIONS ##
del1="Take screenshot with 3 sec delay"
del2="Take screenshot with 5 sec delay"
del3="Take screenshot with 10 sec delay"
dels="$del1\n$del2\n$del3"
## DELAY FUNCTION ##
delays() {
del=$(echo -e "$dels" | dmenu -b -l 3 -i -p "Select: ");
case $del in
$del1)
scrot -d 3 && notify-send "Screenshot saved";;
$del2)
scrot -d 5 && notify-send "Screenshot saved";;
$del3)
scrot -d 10 && notify-send "Screenshot saved"
esac
}
## ENTIRE SCREEN FUNCTION ##
screen() {
scrot && notify-send "Screenshot saved"
}
## FOCUSED WINDOW FUNCTION
window() {
scrot -u -b && notify-send "Screenshot saved."
}
## SELECTED AREA FUNCTION ##
area() {
scrot -s && notify-send "Screenshot saved."
}
## MAIN ACTION ##
choice=$(echo -e "$chos" | dmenu -b -l 4 -i -p "Select: ")
case $choice in
$cho1)
screen;;
$cho2)
delays;;
$cho3)
window;;
$cho4)
area
esac

View file

@ -0,0 +1,44 @@
#!/usr/bin/env bash
# ***This script was made by Clay Gomera (Drake)***
# - Description: A simple wallpaper changer script
# - Dependencies: dmenu, fd, feh
## MAIN VARIABLES AND COMMANDS ##
walldir="Pictures/Wallpapers/" # wallpapers folder, change it to yours, make sure that it ends with a /
cd "$walldir" || exit
## SELECT PICTURE FUNCTION ##
selectpic() {
wallpaper=$(fd -p "$walldir" | dmenu -l 10 -b -i -p "Select a wallpaper:")
if [ "$wallpaper" ]; then
chosenwall=$wallpaper
else
exit 0
fi
}
selectpic
## WALLPAPER SETTING OPTIONS ##
option1="Fill"
option2="Center"
option3="Tile"
option4="Max"
option5="Scale"
options="$option1\n$option2\n$option3\n$option4\n$option5"
## MAIN ACTION ##
action=$(echo -e "$options" | dmenu -l 10 -b -i -p "Chose the format:")
case "$action" in
$option1*)
feh --bg-fill "$chosenwall";;
$option2*)
feh --bg-center "$chosenwall";;
$option3*)
feh --bg-tile "$chosenwall";;
$option4*)
feh --bg-max "$chosenwall";;
$option5*)
feh --bg-scale "$chosenwall";;
esac
exit 0

View file

@ -0,0 +1,88 @@
#!/usr/bin/env bash
# ***This script was made by Clay Gomera (Drake)***
# - Description: A simple wifi dmenu script
# - Dependencies: dmenu, NetworkManager
## DMENU VARIABLES ##
DMENU1="dmenu -l 10 -b -i -p"
DMENU2="dmenu -b -p"
DMENU3="dmenu -l 5 -b -i -p"
## MAIN OPTIONS ##
option1="Turn on WiFi"
option2="Turn off WiFi"
option3="Disconnect WiFi"
option4="Connect WiFi"
option5="Exit"
options="$option1\n$option2\n$option3\n$option4\n$option5"
wlan=$(nmcli dev | grep wifi | sed 's/ \{2,\}/|/g' | cut -d '|' -f1 | head -1)
## TURN OFF WIFI FUNCTION ##
turnoff() {
nmcli radio wifi off
notify-send "WiFi has been turned off"
}
## TURN ON WIFI FUNCTION ##
turnon() {
nmcli radio wifi on
notify-send "WiFi has been turned on"
}
## DISCONNECT WIFI FUNCTION ##
disconnect() {
nmcli device disconnect "$wlan"
sleep 3
constate=$(nmcli dev | grep wifi | sed 's/ \{2,\}/|/g' | cut -d '|' -f3 | head -1)
if [ "$constate" = "disconnected" ]; then
notify-send "WiFi has been disconnected"
fi
}
## CONNECT FUNCTION ##
connect() {
notify-send "Scannig networks, please wait"
sleep 2
bssid=$(nmcli device wifi list | sed -n '1!p' | cut -b 9- | $DMENU1 "Select Wifi  :" | cut -d' ' -f1)
}
## SELECT PASSWORD FUNCTION ##
password() {
pass=$(echo " " | $DMENU2 "Enter Password  :")
}
## MAIN CONNECTION COMMAND ##
action() {
nmcli device wifi connect "$bssid" password "$pass" || nmcli device wifi connect "$bssid"
}
## CHECKING IF WIFI IS WORKING
check() {
notify-send "Checking if connection was successful"
sleep 10
currentwfi=$(nmcli dev | grep wifi | sed 's/ \{2,\}/|/g' | cut -d '|' -f4 | head -1)
if ping -q -c 2 -W 2 google.com >/dev/null; then
notify-send "You are now connected to $currentwfi and internet is working properly"
else
notify-send "Your internet is not working :("
fi
}
## MAIN ACTION COMMANDS ##
cases=$(echo -e "$options" | $DMENU3 "What do you want to do?" )
case "$cases" in
$option1*)
turnon;;
$option2*)
turnoff;;
$option3*)
disconnect;;
$option4*)
connect;
password;
action;
check;;
$option5*)
exit 0
esac

View file

@ -0,0 +1,56 @@
## ____ __ ##
## / __ \_________ _/ /_____ ##
## / / / / ___/ __ `/ //_/ _ \ ##
## / /_/ / / / /_/ / ,< / __/ Clay Gomera (Drake) ##
## /_____/_/ \__,_/_/|_|\___/ My custom dwm build ##
# dwm - dynamic window manager
include config.mk
SRC = drw.c dwm.c util.c
OBJ = ${SRC:.c=.o}
all: options dwm
options:
@echo dwm build options:
@echo "CFLAGS = ${CFLAGS}"
@echo "LDFLAGS = ${LDFLAGS}"
@echo "CC = ${CC}"
.c.o:
${CC} -c ${CFLAGS} $<
${OBJ}: config.h config.mk
config.h:
cp config.def.h $@
dwm: ${OBJ}
${CC} -o $@ ${OBJ} ${LDFLAGS}
clean:
rm -f dwm ${OBJ} dwm-${VERSION}.tar.gz
dist: clean
mkdir -p dwm-${VERSION}
cp -R LICENSE Makefile README config.def.h config.mk\
dwm.1 drw.h util.h ${SRC} dwm.png transient.c dwm-${VERSION}
tar -cf dwm-${VERSION}.tar dwm-${VERSION}
gzip dwm-${VERSION}.tar
rm -rf dwm-${VERSION}
install: all
mkdir -p ${DESTDIR}${PREFIX}/bin
cp -f dwm ${DESTDIR}${PREFIX}/bin
chmod 755 ${DESTDIR}${PREFIX}/bin/dwm
mkdir -p ${DESTDIR}${MANPREFIX}/man1
sed "s/VERSION/${VERSION}/g" < dwm.1 > ${DESTDIR}${MANPREFIX}/man1/dwm.1
chmod 644 ${DESTDIR}${MANPREFIX}/man1/dwm.1
uninstall:
rm -f ${DESTDIR}${PREFIX}/bin/dwm\
${DESTDIR}${MANPREFIX}/man1/dwm.1\
.PHONY: all options clean dist install uninstall

View file

@ -0,0 +1,13 @@
#!/bin/sh
## ____ __ ##
## / __ \_________ _/ /_____ ##
## / / / / ___/ __ `/ //_/ _ \ ##
## / /_/ / / / /_/ / ,< / __/ Clay Gomera (Drake) ##
## /_____/_/ \__,_/_/|_|\___/ My custom dwm build ##
lxsession &
dwmblocks &
sh "$HOME"/.fehbg &
picom --config ~/.config/picom/picom.conf &
dunst --config ~/.config/dunst/dunstrc &
/usr/bin/emacs --daemon &

View file

@ -0,0 +1,235 @@
/* ____ __ */
/* / __ \_________ _/ /_____ */
/* / / / / ___/ __ `/ //_/ _ \ */
/* / /_/ / / / /_/ / ,< / __/ Clay Gomera (Drake) */
/* /_____/_/ \__,_/_/|_|\___/ My custom dwm build */
/* |||--- APPEARANCE ---||| */
static const unsigned int borderpx = 2; /* border pixel of windows */
static const unsigned int snap = 32; /* snap pixel */
static const unsigned int gappx = 6; /* pixel gap between clients */
static const int showbar = 1; /* 0 means no bar */
static const int topbar = 1; /* 0 means bottom bar */
static const int horizpadbar = 6; /* horizontal padding for statusbar */
static const int vertpadbar = 7; /* vertical padding for statusbar */
static const char *fonts[] = {"mononoki Nerd Font:size=9:antialias=true:autohint=true"};
static const char col_1[] = "#1d2021"; /* background color of bar */
static const char col_2[] = "#928374"; /* border color unfocused windows */
static const char col_3[] = "#fbf1c7";
static const char col_4[] = "#cc241d"; /* border color focused windows and tags */
/* bar opacity
* 0xff is no transparency.
* 0xee adds wee bit of transparency.
* 0xdd adds adds a bit more transparency.
* Play with the value to get desired transparency.
*/
static const unsigned int baralpha = 0xff;
static const unsigned int borderalpha = OPAQUE;
static const char *colors[][3] = {
/* fg bg border */
[SchemeNorm] = { col_3, col_1, col_2 },
[SchemeSel] = { col_3, col_4, col_4 },
};
static const unsigned int alphas[][3] = {
/* fg bg border */
[SchemeNorm] = { OPAQUE, baralpha, borderalpha },
[SchemeSel] = { OPAQUE, baralpha, borderalpha },
};
/* |||--- TAG NAMES ---||| */
static const char *tags[] = { "EDIT", "FILE", "WEB", "CHAT", "MUSIC", "GAMES", "WORK1", "WORK2", "MISC" };
/* |||--- RULES ---||| */
static const Rule rules[] = {
/* xprop(1):
* WM_CLASS(STRING) = instance, class
* WM_NAME(STRING) = title
*/
/* class instance title tags mask isfloating monitor */
{ "Gimp", NULL, NULL, 0, 0, -1 },
{ "Firefox", NULL, NULL, 3 << 7, 0, -1 },
};
/* |||--- LAYOUTS ---||| */
static const float mfact = 0.50; /* factor of master area size [0.05..0.95] */
static const int nmaster = 1; /* number of clients in master area */
static const int resizehints = 0; /* 1 means respect size hints in tiled resizals */
#include "layouts.c"
static const Layout layouts[] = {
/* symbol arrange function */
{ "[]=", tile }, /* first entry is default */
{ "><>", NULL }, /* no layout function means floating behavior */
{ "[M]", monocle },
{ "HHH", grid },
{ NULL, NULL },
};
/* |||--- VARIABLES ---||| */
/* key definitions */
#define MODKEY Mod4Mask
#define TAGKEYS(CHAIN,KEY,TAG) \
{ MODKEY, CHAIN, KEY, view, {.ui = 1 << TAG} }, \
{ MODKEY|ControlMask, CHAIN, KEY, toggleview, {.ui = 1 << TAG} }, \
{ MODKEY|ShiftMask, CHAIN, KEY, tag, {.ui = 1 << TAG} }, \
{ MODKEY|ControlMask|ShiftMask, CHAIN, KEY, toggletag, {.ui = 1 << TAG} },
/* helper for spawning shell commands in the pre dwm-5.0 fashion */
#define CMD(cmd) { .v = (const char*[]){ "/bin/sh", "-c", cmd, NULL } }
#define SHCMD(cmd) { .v = (const char*[]){ "/bin/sh", "-c", cmd, NULL } }
/* dmenu */
static char dmenumon[2] = "0"; /* component of dmenucmd, manipulated in spawn() */
static const char *dmenucmd[] = { "dmenu_run", "-i", "-b", "-l", "10", "-p", "Run: ", NULL };
/* terminal */
static const char *termcmd[] = { "alacritty", NULL };
/* |||--- KEY BIDINGS ---||| */
static Key keys[] = {
/* modifier chain key key function argument */
/* Terminal */
{ MODKEY, -1, XK_Return, spawn, {.v = termcmd } },
/* Top bar toggle */
{ MODKEY, -1, XK_b, togglebar, {0} },
/* WINDOW TAG AND LAYOUT MANIPULATION */
/* Tag Bindings */
TAGKEYS( -1, XK_1, 0)
TAGKEYS( -1, XK_2, 1)
TAGKEYS( -1, XK_3, 2)
TAGKEYS( -1, XK_4, 3)
TAGKEYS( -1, XK_5, 4)
TAGKEYS( -1, XK_6, 5)
TAGKEYS( -1, XK_7, 6)
TAGKEYS( -1, XK_8, 7)
TAGKEYS( -1, XK_9, 8)
/* Close Window */
{ MODKEY|ShiftMask, -1, XK_c, killclient, {0} },
/* Cycle between tags */
{ MODKEY|ControlMask, -1, XK_Tab, view, {0} },
/* Window moving */
{ MODKEY|ShiftMask, -1, XK_j, rotatestack, {.i = +1 } },
{ MODKEY|ShiftMask, -1, XK_k, rotatestack, {.i = -1 } },
/* Window focusing */
{ MODKEY, -1, XK_j, focusstack, {.i = +1 } },
{ MODKEY, -1, XK_k, focusstack, {.i = -1 } },
/* Increase and decrease master windows count */
{ MODKEY, -1, XK_i, incnmaster, {.i = +1 } },
{ MODKEY, -1, XK_d, incnmaster, {.i = -1 } },
/* Increase and decrease master window size */
{ MODKEY, -1, XK_h, setmfact, {.f = -0.05} },
{ MODKEY, -1, XK_l, setmfact, {.f = +0.05} },
/* Move window to master */
{ MODKEY|ControlMask, -1, XK_Return, zoom, {0} },
/* Cycle between layouts fowards and backwards */
{ MODKEY, -1, XK_Tab, cyclelayout, {.i = -1 } },
{ MODKEY|ShiftMask, -1, XK_Tab, cyclelayout, {.i = +1 } },
/* Cycle between recently used layouts */
{ MODKEY, -1, XK_space, setlayout, {0} },
/* Switch to tiling layout */
{ MODKEY, -1, XK_t, setlayout, {.v = &layouts[0]} },
/* Switch to floating layout */
{ MODKEY, -1, XK_f, setlayout, {.v = &layouts[1]} },
/* Switch to monocle layout */
{ MODKEY, -1, XK_m, setlayout, {.v = &layouts[2]} },
/* Switch to grid layout */
{ MODKEY, -1, XK_g, setlayout, {.v = &layouts[3]} },
/* Toggle floating mode */
{ MODKEY|ShiftMask, -1, XK_space, togglefloating, {0} },
/* View all windows of all tags in the current tag */
{ MODKEY, -1, XK_0, view, {.ui = ~0 } },
/* Show focused window on all tags */
{ MODKEY|ShiftMask, -1, XK_0, tag, {.ui = ~0 } },
/* Focusing between monitors */
{ MODKEY, -1, XK_comma, focusmon, {.i = -1 } },
{ MODKEY, -1, XK_period, focusmon, {.i = +1 } },
/* Move focused window between monitors */
{ MODKEY|ShiftMask, -1, XK_comma, tagmon, {.i = -1 } },
{ MODKEY|ShiftMask, -1, XK_period, tagmon, {.i = +1 } },
/* VOLUME CONTROL */
/* Increase volume by 5% */
{ MODKEY|ShiftMask, -1, XK_equal, spawn, CMD("pamixer -i 5") },
/* Decrease volume by 5% */
{ MODKEY|ShiftMask, -1, XK_minus, spawn, CMD("pamixer -d 5") },
/* BRIGHTNESS CONTROL */
/* Increase brightness by 5% */
{ MODKEY|ControlMask, -1, XK_equal, spawn, CMD("xbacklight -inc 5") },
/* Decrease brightness by 5% */
{ MODKEY|ControlMask, -1, XK_minus, spawn, CMD("xbacklight -dec 5") },
/* KEYBOARD LAYOUTS changed with emacs-style keychords SUPER + k (keyboard) followed by "key" */
/* Switch to the spanish keyboard layout */
{ MODKEY, XK_k, XK_e, spawn, CMD("setxkbmap -layout es") },
/* Switch to the english keyboard layout */
{ MODKEY, XK_k, XK_u, spawn, CMD("setxkbmap -layout us") },
/* PROGRAMS launched with emacs-style keychords SUPER + a (app) followed by "key" */
/* Text editor */
{ MODKEY, XK_a, XK_1, spawn, CMD("/usr/bin/emacsclient -c -a emacs") },
/* File manager */
{ MODKEY, XK_a, XK_2, spawn, CMD("alacritty -e $HOME/.config/vifm/scripts/vifmrun") },
/* Web browser */
{ MODKEY, XK_a, XK_3, spawn, CMD("librewolf") },
/* Chat app */
{ MODKEY, XK_a, XK_4, spawn, CMD("alacritty -e gomuks") },
/* Music player */
{ MODKEY, XK_a, XK_5, spawn, CMD("alacritty -e cmus") },
/* Game app */
{ MODKEY, XK_a, XK_6, spawn, CMD("retroarch") },
/* MISC PROGRAMS launched with emacs-style keychords SUPER + m (app) followed by "key" */
/* Audio mixer */
{ MODKEY, XK_a, XK_F1, spawn, CMD("alacritty -e pulsemixer") },
/* Rss reader */
{ MODKEY, XK_a, XK_F2, spawn, CMD("alacritty -e newsboat") },
/* Ytfzf */
{ MODKEY, XK_a, XK_F3, spawn, CMD("alacritty -e ytfzf -flst") },
/* Ani-cli */
{ MODKEY, XK_a, XK_F4, spawn, CMD("alacritty -e ani-cli") },
/* Flix-cli */
{ MODKEY, XK_a, XK_F5, spawn, CMD("alacritty -e flix-cli") },
/* DMENU PROMPTS launched with emacs-style keychords SUPER + p (prompt) followed by "key" */
/* dmenu */
{ MODKEY, XK_p, XK_r, spawn, {.v = dmenucmd } },
/* dmenu_power */
{ MODKEY, XK_p, XK_q, spawn, CMD("$HOME/.config/suckless/dmenu/scripts/dmenu_power") },
/* dmenu_wifi */
{ MODKEY, XK_p, XK_w, spawn, CMD("$HOME/.config/suckless/dmenu/scripts/dmenu_wifi") },
/* dmenu_wall */
{ MODKEY, XK_p, XK_b, spawn, CMD("$HOME/.config/suckless/dmenu/scripts/dmenu_wall") },
/* dmenu_edit */
{ MODKEY, XK_p, XK_e, spawn, CMD("$HOME/.config/suckless/dmenu/scripts/dmenu_edit") },
/* dmenu_scrot */
{ MODKEY, XK_p, XK_s, spawn, CMD("$HOME/.config/suckless/dmenu/scripts/dmenu_scrot") },
/* dmenu_drun */
{ MODKEY, XK_p, XK_d, spawn, CMD("$HOME/.config/suckless/dmenu/scripts/dmenu_drun") },
/* DWM BOOTSTRAP */
{ MODKEY|ShiftMask, -1, XK_q, quit, {0} },
{ MODKEY|ControlMask, -1, XK_r, quit, {1} },
};
/* button definitions */
/* click can be ClkTagBar, ClkLtSymbol, ClkStatusText, ClkWinTitle, ClkClientWin, or ClkRootWin */
static Button buttons[] = {
/* click event mask button function argument */
{ ClkLtSymbol, 0, Button1, setlayout, {0} },
{ ClkLtSymbol, 0, Button3, setlayout, {.v = &layouts[2]} },
{ ClkWinTitle, 0, Button2, zoom, {0} },
{ ClkStatusText, 0, Button2, spawn, {.v = termcmd } },
{ ClkClientWin, MODKEY, Button1, movemouse, {0} },
{ ClkClientWin, MODKEY, Button2, togglefloating, {0} },
{ ClkClientWin, MODKEY, Button3, resizemouse, {0} },
{ ClkTagBar, 0, Button1, view, {0} },
{ ClkTagBar, 0, Button3, toggleview, {0} },
{ ClkTagBar, MODKEY, Button1, tag, {0} },
{ ClkTagBar, MODKEY, Button3, toggletag, {0} },
};

View file

@ -0,0 +1,44 @@
## ____ __ ##
## / __ \_________ _/ /_____ ##
## / / / / ___/ __ `/ //_/ _ \ ##
## / /_/ / / / /_/ / ,< / __/ Clay Gomera (Drake) ##
## /_____/_/ \__,_/_/|_|\___/ My custom dwm build ##
# dwm version
VERSION = 6.2
# Customize below to fit your system
# paths
PREFIX = /usr
MANPREFIX = ${PREFIX}/share/man
X11INC = /usr/X11R6/include
X11LIB = /usr/X11R6/lib
# Xinerama, comment if you don't want it
XINERAMALIBS = -lXinerama
XINERAMAFLAGS = -DXINERAMA
# freetype
FREETYPELIBS = -lfontconfig -lXft
FREETYPEINC = /usr/include/freetype2
# OpenBSD (uncomment)
#FREETYPEINC = ${X11INC}/freetype2
# includes and libs
INCS = -I${X11INC} -I${FREETYPEINC}
LIBS = -L${X11LIB} -lX11 ${XINERAMALIBS} ${FREETYPELIBS} -lXrender
# flags
CPPFLAGS = -D_DEFAULT_SOURCE -D_BSD_SOURCE -D_POSIX_C_SOURCE=2 -DVERSION=\"${VERSION}\" ${XINERAMAFLAGS}
#CFLAGS = -g -std=c99 -pedantic -Wall -O0 ${INCS} ${CPPFLAGS}
CFLAGS = -std=c99 -pedantic -Wall -Wno-deprecated-declarations -Os ${INCS} ${CPPFLAGS}
LDFLAGS = ${LIBS}
# Solaris
#CFLAGS = -fast ${INCS} -DVERSION=\"${VERSION}\"
#LDFLAGS = ${LIBS}
# compiler and linker
CC = cc

View file

@ -0,0 +1,424 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <X11/Xlib.h>
#include <X11/Xft/Xft.h>
#include "drw.h"
#include "util.h"
#define UTF_INVALID 0xFFFD
#define UTF_SIZ 4
static const unsigned char utfbyte[UTF_SIZ + 1] = {0x80, 0, 0xC0, 0xE0, 0xF0};
static const unsigned char utfmask[UTF_SIZ + 1] = {0xC0, 0x80, 0xE0, 0xF0, 0xF8};
static const long utfmin[UTF_SIZ + 1] = { 0, 0, 0x80, 0x800, 0x10000};
static const long utfmax[UTF_SIZ + 1] = {0x10FFFF, 0x7F, 0x7FF, 0xFFFF, 0x10FFFF};
static long
utf8decodebyte(const char c, size_t *i)
{
for (*i = 0; *i < (UTF_SIZ + 1); ++(*i))
if (((unsigned char)c & utfmask[*i]) == utfbyte[*i])
return (unsigned char)c & ~utfmask[*i];
return 0;
}
static size_t
utf8validate(long *u, size_t i)
{
if (!BETWEEN(*u, utfmin[i], utfmax[i]) || BETWEEN(*u, 0xD800, 0xDFFF))
*u = UTF_INVALID;
for (i = 1; *u > utfmax[i]; ++i)
;
return i;
}
static size_t
utf8decode(const char *c, long *u, size_t clen)
{
size_t i, j, len, type;
long udecoded;
*u = UTF_INVALID;
if (!clen)
return 0;
udecoded = utf8decodebyte(c[0], &len);
if (!BETWEEN(len, 1, UTF_SIZ))
return 1;
for (i = 1, j = 1; i < clen && j < len; ++i, ++j) {
udecoded = (udecoded << 6) | utf8decodebyte(c[i], &type);
if (type)
return j;
}
if (j < len)
return 0;
*u = udecoded;
utf8validate(u, len);
return len;
}
Drw *
drw_create(Display *dpy, int screen, Window root, unsigned int w, unsigned int h, Visual *visual, unsigned int depth, Colormap cmap)
{
Drw *drw = ecalloc(1, sizeof(Drw));
drw->dpy = dpy;
drw->screen = screen;
drw->root = root;
drw->w = w;
drw->h = h;
drw->visual = visual;
drw->depth = depth;
drw->cmap = cmap;
drw->drawable = XCreatePixmap(dpy, root, w, h, depth);
drw->gc = XCreateGC(dpy, drw->drawable, 0, NULL);
XSetLineAttributes(dpy, drw->gc, 1, LineSolid, CapButt, JoinMiter);
return drw;
}
void
drw_resize(Drw *drw, unsigned int w, unsigned int h)
{
if (!drw)
return;
drw->w = w;
drw->h = h;
if (drw->drawable)
XFreePixmap(drw->dpy, drw->drawable);
drw->drawable = XCreatePixmap(drw->dpy, drw->root, w, h, drw->depth);
}
void
drw_free(Drw *drw)
{
XFreePixmap(drw->dpy, drw->drawable);
XFreeGC(drw->dpy, drw->gc);
free(drw);
}
/* This function is an implementation detail. Library users should use
* drw_fontset_create instead.
*/
static Fnt *
xfont_create(Drw *drw, const char *fontname, FcPattern *fontpattern)
{
Fnt *font;
XftFont *xfont = NULL;
FcPattern *pattern = NULL;
if (fontname) {
/* Using the pattern found at font->xfont->pattern does not yield the
* same substitution results as using the pattern returned by
* FcNameParse; using the latter results in the desired fallback
* behaviour whereas the former just results in missing-character
* rectangles being drawn, at least with some fonts. */
if (!(xfont = XftFontOpenName(drw->dpy, drw->screen, fontname))) {
fprintf(stderr, "error, cannot load font from name: '%s'\n", fontname);
return NULL;
}
if (!(pattern = FcNameParse((FcChar8 *) fontname))) {
fprintf(stderr, "error, cannot parse font name to pattern: '%s'\n", fontname);
XftFontClose(drw->dpy, xfont);
return NULL;
}
} else if (fontpattern) {
if (!(xfont = XftFontOpenPattern(drw->dpy, fontpattern))) {
fprintf(stderr, "error, cannot load font from pattern.\n");
return NULL;
}
} else {
die("no font specified.");
}
font = ecalloc(1, sizeof(Fnt));
font->xfont = xfont;
font->pattern = pattern;
font->h = xfont->ascent + xfont->descent;
font->dpy = drw->dpy;
return font;
}
static void
xfont_free(Fnt *font)
{
if (!font)
return;
if (font->pattern)
FcPatternDestroy(font->pattern);
XftFontClose(font->dpy, font->xfont);
free(font);
}
Fnt*
drw_fontset_create(Drw* drw, const char *fonts[], size_t fontcount)
{
Fnt *cur, *ret = NULL;
size_t i;
if (!drw || !fonts)
return NULL;
for (i = 1; i <= fontcount; i++) {
if ((cur = xfont_create(drw, fonts[fontcount - i], NULL))) {
cur->next = ret;
ret = cur;
}
}
return (drw->fonts = ret);
}
void
drw_fontset_free(Fnt *font)
{
if (font) {
drw_fontset_free(font->next);
xfont_free(font);
}
}
void
drw_clr_create(Drw *drw, Clr *dest, const char *clrname, unsigned int alpha)
{
if (!drw || !dest || !clrname)
return;
if (!XftColorAllocName(drw->dpy, drw->visual, drw->cmap,
clrname, dest))
die("error, cannot allocate color '%s'", clrname);
dest->pixel = (dest->pixel & 0x00ffffffU) | (alpha << 24);
}
/* Wrapper to create color schemes. The caller has to call free(3) on the
* returned color scheme when done using it. */
Clr *
drw_scm_create(Drw *drw, const char *clrnames[], const unsigned int alphas[], size_t clrcount)
{
size_t i;
Clr *ret;
/* need at least two colors for a scheme */
if (!drw || !clrnames || clrcount < 2 || !(ret = ecalloc(clrcount, sizeof(XftColor))))
return NULL;
for (i = 0; i < clrcount; i++)
drw_clr_create(drw, &ret[i], clrnames[i], alphas[i]);
return ret;
}
void
drw_setfontset(Drw *drw, Fnt *set)
{
if (drw)
drw->fonts = set;
}
void
drw_setscheme(Drw *drw, Clr *scm)
{
if (drw)
drw->scheme = scm;
}
void
drw_rect(Drw *drw, int x, int y, unsigned int w, unsigned int h, int filled, int invert)
{
if (!drw || !drw->scheme)
return;
XSetForeground(drw->dpy, drw->gc, invert ? drw->scheme[ColBg].pixel : drw->scheme[ColFg].pixel);
if (filled)
XFillRectangle(drw->dpy, drw->drawable, drw->gc, x, y, w, h);
else
XDrawRectangle(drw->dpy, drw->drawable, drw->gc, x, y, w - 1, h - 1);
}
int
drw_text(Drw *drw, int x, int y, unsigned int w, unsigned int h, unsigned int lpad, const char *text, int invert)
{
char buf[1024];
int ty;
unsigned int ew;
XftDraw *d = NULL;
Fnt *usedfont, *curfont, *nextfont;
size_t i, len;
int utf8strlen, utf8charlen, render = x || y || w || h;
long utf8codepoint = 0;
const char *utf8str;
FcCharSet *fccharset;
FcPattern *fcpattern;
FcPattern *match;
XftResult result;
int charexists = 0;
if (!drw || (render && !drw->scheme) || !text || !drw->fonts)
return 0;
if (!render) {
w = ~w;
} else {
XSetForeground(drw->dpy, drw->gc, drw->scheme[invert ? ColFg : ColBg].pixel);
XFillRectangle(drw->dpy, drw->drawable, drw->gc, x, y, w, h);
d = XftDrawCreate(drw->dpy, drw->drawable, drw->visual, drw->cmap);
x += lpad;
w -= lpad;
}
usedfont = drw->fonts;
while (1) {
utf8strlen = 0;
utf8str = text;
nextfont = NULL;
while (*text) {
utf8charlen = utf8decode(text, &utf8codepoint, UTF_SIZ);
for (curfont = drw->fonts; curfont; curfont = curfont->next) {
charexists = charexists || XftCharExists(drw->dpy, curfont->xfont, utf8codepoint);
if (charexists) {
if (curfont == usedfont) {
utf8strlen += utf8charlen;
text += utf8charlen;
} else {
nextfont = curfont;
}
break;
}
}
if (!charexists || nextfont)
break;
else
charexists = 0;
}
if (utf8strlen) {
drw_font_getexts(usedfont, utf8str, utf8strlen, &ew, NULL);
/* shorten text if necessary */
for (len = MIN(utf8strlen, sizeof(buf) - 1); len && ew > w; len--)
drw_font_getexts(usedfont, utf8str, len, &ew, NULL);
if (len) {
memcpy(buf, utf8str, len);
buf[len] = '\0';
if (len < utf8strlen)
for (i = len; i && i > len - 3; buf[--i] = '.')
; /* NOP */
if (render) {
ty = y + (h - usedfont->h) / 2 + usedfont->xfont->ascent;
XftDrawStringUtf8(d, &drw->scheme[invert ? ColBg : ColFg],
usedfont->xfont, x, ty, (XftChar8 *)buf, len);
}
x += ew;
w -= ew;
}
}
if (!*text) {
break;
} else if (nextfont) {
charexists = 0;
usedfont = nextfont;
} else {
/* Regardless of whether or not a fallback font is found, the
* character must be drawn. */
charexists = 1;
fccharset = FcCharSetCreate();
FcCharSetAddChar(fccharset, utf8codepoint);
if (!drw->fonts->pattern) {
/* Refer to the comment in xfont_create for more information. */
die("the first font in the cache must be loaded from a font string.");
}
fcpattern = FcPatternDuplicate(drw->fonts->pattern);
FcPatternAddCharSet(fcpattern, FC_CHARSET, fccharset);
FcPatternAddBool(fcpattern, FC_SCALABLE, FcTrue);
FcPatternAddBool(fcpattern, FC_COLOR, FcFalse);
FcConfigSubstitute(NULL, fcpattern, FcMatchPattern);
FcDefaultSubstitute(fcpattern);
match = XftFontMatch(drw->dpy, drw->screen, fcpattern, &result);
FcCharSetDestroy(fccharset);
FcPatternDestroy(fcpattern);
if (match) {
usedfont = xfont_create(drw, NULL, match);
if (usedfont && XftCharExists(drw->dpy, usedfont->xfont, utf8codepoint)) {
for (curfont = drw->fonts; curfont->next; curfont = curfont->next)
; /* NOP */
curfont->next = usedfont;
} else {
xfont_free(usedfont);
usedfont = drw->fonts;
}
}
}
}
if (d)
XftDrawDestroy(d);
return x + (render ? w : 0);
}
void
drw_map(Drw *drw, Window win, int x, int y, unsigned int w, unsigned int h)
{
if (!drw)
return;
XCopyArea(drw->dpy, drw->drawable, win, drw->gc, x, y, w, h, x, y);
XSync(drw->dpy, False);
}
unsigned int
drw_fontset_getwidth(Drw *drw, const char *text)
{
if (!drw || !drw->fonts || !text)
return 0;
return drw_text(drw, 0, 0, 0, 0, 0, text, 0);
}
void
drw_font_getexts(Fnt *font, const char *text, unsigned int len, unsigned int *w, unsigned int *h)
{
XGlyphInfo ext;
if (!font || !text)
return;
XftTextExtentsUtf8(font->dpy, font->xfont, (XftChar8 *)text, len, &ext);
if (w)
*w = ext.xOff;
if (h)
*h = font->h;
}
Cur *
drw_cur_create(Drw *drw, int shape)
{
Cur *cur;
if (!drw || !(cur = ecalloc(1, sizeof(Cur))))
return NULL;
cur->cursor = XCreateFontCursor(drw->dpy, shape);
return cur;
}
void
drw_cur_free(Drw *drw, Cur *cursor)
{
if (!cursor)
return;
XFreeCursor(drw->dpy, cursor->cursor);
free(cursor);
}

View file

@ -0,0 +1,65 @@
/* ____ __ */
/* / __ \_________ _/ /_____ */
/* / / / / ___/ __ `/ //_/ _ \ */
/* / /_/ / / / /_/ / ,< / __/ Clay Gomera (Drake) */
/* /_____/_/ \__,_/_/|_|\___/ My custom dwm build */
typedef struct {
Cursor cursor;
} Cur;
typedef struct Fnt {
Display *dpy;
unsigned int h;
XftFont *xfont;
FcPattern *pattern;
struct Fnt *next;
} Fnt;
enum { ColFg, ColBg, ColBorder }; /* Clr scheme index */
typedef XftColor Clr;
typedef struct {
unsigned int w, h;
Display *dpy;
int screen;
Window root;
Visual *visual;
unsigned int depth;
Colormap cmap;
Drawable drawable;
GC gc;
Clr *scheme;
Fnt *fonts;
} Drw;
/* Drawable abstraction */
Drw *drw_create(Display *dpy, int screen, Window win, unsigned int w, unsigned int h, Visual *visual, unsigned int depth, Colormap cmap);
void drw_resize(Drw *drw, unsigned int w, unsigned int h);
void drw_free(Drw *drw);
/* Fnt abstraction */
Fnt *drw_fontset_create(Drw* drw, const char *fonts[], size_t fontcount);
void drw_fontset_free(Fnt* set);
unsigned int drw_fontset_getwidth(Drw *drw, const char *text);
void drw_font_getexts(Fnt *font, const char *text, unsigned int len, unsigned int *w, unsigned int *h);
/* Colorscheme abstraction */
void drw_clr_create(Drw *drw, Clr *dest, const char *clrname, unsigned int alpha);
Clr *drw_scm_create(Drw *drw, const char *clrnames[], const unsigned int alphas[], size_t clrcount);
/* Cursor abstraction */
Cur *drw_cur_create(Drw *drw, int shape);
void drw_cur_free(Drw *drw, Cur *cursor);
/* Drawing context manipulation */
void drw_setfontset(Drw *drw, Fnt *set);
void drw_setscheme(Drw *drw, Clr *scm);
/* Drawing functions */
void drw_rect(Drw *drw, int x, int y, unsigned int w, unsigned int h, int filled, int invert);
int drw_text(Drw *drw, int x, int y, unsigned int w, unsigned int h, unsigned int lpad, const char *text, int invert);
/* Map functions */
void drw_map(Drw *drw, Window win, int x, int y, unsigned int w, unsigned int h);

View file

@ -0,0 +1,192 @@
.TH DWM 1 dwm\-VERSION
.SH NAME
dwm \- dynamic window manager
.SH SYNOPSIS
.B dwm
.RB [ \-v ]
.SH DESCRIPTION
dwm is a dynamic window manager for X. It manages windows in tiled, monocle
and floating layouts. Either layout can be applied dynamically, optimising the
environment for the application in use and the task performed.
.P
In tiled layouts windows are managed in a master and stacking area. The master
area on the left contains one window by default, and the stacking area on the
right contains all other windows. The number of master area windows can be
adjusted from zero to an arbitrary number. In monocle layout all windows are
maximised to the screen size. In floating layout windows can be resized and
moved freely. Dialog windows are always managed floating, regardless of the
layout applied.
.P
Windows are grouped by tags. Each window can be tagged with one or multiple
tags. Selecting certain tags displays all windows with these tags.
.P
Each screen contains a small status bar which displays all available tags, the
layout, the title of the focused window, and the text read from the root window
name property, if the screen is focused. A floating window is indicated with an
empty square and a maximised floating window is indicated with a filled square
before the windows title. The selected tags are indicated with a different
color. The tags of the focused window are indicated with a filled square in the
top left corner. The tags which are applied to one or more windows are
indicated with an empty square in the top left corner.
.P
dwm draws a small border around windows to indicate the focus state.
.SH OPTIONS
.TP
.B \-v
prints version information to standard output, then exits.
.SH USAGE
.SS Status bar
.TP
.B X root window name
is read and displayed in the status text area. It can be set with the
.BR xsetroot (1)
command.
.TP
.B Button1
click on a tag label to display all windows with that tag, click on the layout
label toggles between tiled and floating layout.
.TP
.B Button3
click on a tag label adds/removes all windows with that tag to/from the view.
.TP
.B Mod1\-Button1
click on a tag label applies that tag to the focused window.
.TP
.B Mod1\-Button3
click on a tag label adds/removes that tag to/from the focused window.
.SS Keyboard commands
.TP
.B Mod1\-Shift\-Return
Start
.BR st(1).
.TP
.B Mod1\-p
Spawn
.BR dmenu(1)
for launching other programs.
.TP
.B Mod1\-,
Focus previous screen, if any.
.TP
.B Mod1\-.
Focus next screen, if any.
.TP
.B Mod1\-Shift\-,
Send focused window to previous screen, if any.
.TP
.B Mod1\-Shift\-.
Send focused window to next screen, if any.
.TP
.B Mod1\-b
Toggles bar on and off.
.TP
.B Mod1\-t
Sets tiled layout.
.TP
.B Mod1\-f
Sets floating layout.
.TP
.B Mod1\-m
Sets monocle layout.
.TP
.B Mod1\-space
Toggles between current and previous layout.
.TP
.B Mod1\-Control\-,
Cycles backwards in layout list.
.TP
.B Mod1\-Control\-.
Cycles forwards in layout list.
.TP
.B Mod1\-j
Focus next window.
.TP
.B Mod1\-k
Focus previous window.
.TP
.B Mod1\-i
Increase number of windows in master area.
.TP
.B Mod1\-d
Decrease number of windows in master area.
.TP
.B Mod1\-l
Increase master area size.
.TP
.B Mod1\-h
Decrease master area size.
.TP
.B Mod1\-Return
Zooms/cycles focused window to/from master area (tiled layouts only).
.TP
.B Mod1\-Shift\-c
Close focused window.
.TP
.B Mod1\-Shift\-space
Toggle focused window between tiled and floating state.
.TP
.B Mod1\-Tab
Toggles to the previously selected tags.
.TP
.B Mod1\-Shift\-[1..n]
Apply nth tag to focused window.
.TP
.B Mod1\-Shift\-0
Apply all tags to focused window.
.TP
.B Mod1\-Control\-Shift\-[1..n]
Add/remove nth tag to/from focused window.
.TP
.B Mod1\-[1..n]
View all windows with nth tag.
.TP
.B Mod1\-0
View all windows with any tag.
.TP
.B Mod1\-Control\-[1..n]
Add/remove all windows with nth tag to/from the view.
.TP
.B Mod1\-Shift\-q
Quit dwm.
.TP
.B Mod1\-Control\-Shift\-q
Restart dwm.
.SS Mouse commands
.TP
.B Mod1\-Button1
Move focused window while dragging. Tiled windows will be toggled to the floating state.
.TP
.B Mod1\-Button2
Toggles focused window between floating and tiled state.
.TP
.B Mod1\-Button3
Resize focused window while dragging. Tiled windows will be toggled to the floating state.
.SH CUSTOMIZATION
dwm is customized by creating a custom config.h and (re)compiling the source
code. This keeps it fast, secure and simple.
.SH SIGNALS
.TP
.B SIGHUP - 1
Restart the dwm process.
.TP
.B SIGTERM - 15
Cleanly terminate the dwm process.
.SH SEE ALSO
.BR dmenu (1),
.BR st (1)
.SH ISSUES
Java applications which use the XToolkit/XAWT backend may draw grey windows
only. The XToolkit/XAWT backend breaks ICCCM-compliance in recent JDK 1.5 and early
JDK 1.6 versions, because it assumes a reparenting window manager. Possible workarounds
are using JDK 1.4 (which doesn't contain the XToolkit/XAWT backend) or setting the
environment variable
.BR AWT_TOOLKIT=MToolkit
(to use the older Motif backend instead) or running
.B xprop -root -f _NET_WM_NAME 32a -set _NET_WM_NAME LG3D
or
.B wmname LG3D
(to pretend that a non-reparenting window manager is running that the
XToolkit/XAWT backend can recognize) or when using OpenJDK setting the environment variable
.BR _JAVA_AWT_WM_NONREPARENTING=1 .
.SH BUGS
Send all bug reports with a patch to hackers@suckless.org.

File diff suppressed because it is too large Load diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 373 B

View file

@ -0,0 +1,33 @@
/* ____ __ */
/* / __ \_________ _/ /_____ */
/* / / / / ___/ __ `/ //_/ _ \ */
/* / /_/ / / / /_/ / ,< / __/ Clay Gomera (Drake) */
/* /_____/_/ \__,_/_/|_|\___/ My custom dwm build */
void
grid(Monitor *m) {
unsigned int i, n, cx, cy, cw, ch, aw, ah, cols, rows;
Client *c;
for(n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next))
n++;
/* grid dimensions */
for(rows = 0; rows <= n/2; rows++)
if(rows*rows >= n)
break;
cols = (rows && (rows - 1) * rows >= n) ? rows - 1 : rows;
/* window geoms (cell height/width) */
ch = m->wh / (rows ? rows : 1);
cw = m->ww / (cols ? cols : 1);
for(i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next)) {
cx = m->wx + (i / rows) * cw;
cy = m->wy + (i % rows) * ch;
/* adjust height/width of last row/column's windows */
ah = ((i + 1) % rows == 0) ? m->wh - ch * rows : 0;
aw = (i >= rows * (cols - 1)) ? m->ww - cw * cols : 0;
resize(c, cx, cy, cw - 2 * c->bw + aw, ch - 2 * c->bw + ah, False);
i++;
}
}

View file

@ -0,0 +1,47 @@
/* ____ __ */
/* / __ \_________ _/ /_____ */
/* / / / / ___/ __ `/ //_/ _ \ */
/* / /_/ / / / /_/ / ,< / __/ Clay Gomera (Drake) */
/* /_____/_/ \__,_/_/|_|\___/ My custom dwm build */
/* cc transient.c -o transient -lX11 */
#include <stdlib.h>
#include <unistd.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
int main(void) {
Display *d;
Window r, f, t = None;
XSizeHints h;
XEvent e;
d = XOpenDisplay(NULL);
if (!d)
exit(1);
r = DefaultRootWindow(d);
f = XCreateSimpleWindow(d, r, 100, 100, 400, 400, 0, 0, 0);
h.min_width = h.max_width = h.min_height = h.max_height = 400;
h.flags = PMinSize | PMaxSize;
XSetWMNormalHints(d, f, &h);
XStoreName(d, f, "floating");
XMapWindow(d, f);
XSelectInput(d, f, ExposureMask);
while (1) {
XNextEvent(d, &e);
if (t == None) {
sleep(5);
t = XCreateSimpleWindow(d, r, 50, 50, 100, 100, 0, 0, 0);
XSetTransientForHint(d, t, f);
XStoreName(d, t, "transient");
XMapWindow(d, t);
XSelectInput(d, t, ExposureMask);
}
}
XCloseDisplay(d);
exit(0);
}

View file

@ -0,0 +1,41 @@
/* ____ __ */
/* / __ \_________ _/ /_____ */
/* / / / / ___/ __ `/ //_/ _ \ */
/* / /_/ / / / /_/ / ,< / __/ Clay Gomera (Drake) */
/* /_____/_/ \__,_/_/|_|\___/ My custom dwm build */
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "util.h"
void *
ecalloc(size_t nmemb, size_t size)
{
void *p;
if (!(p = calloc(nmemb, size)))
die("calloc:");
return p;
}
void
die(const char *fmt, ...) {
va_list ap;
va_start(ap, fmt);
vfprintf(stderr, fmt, ap);
va_end(ap);
if (fmt[0] && fmt[strlen(fmt)-1] == ':') {
fputc(' ', stderr);
perror(NULL);
} else {
fputc('\n', stderr);
}
exit(1);
}

View file

@ -0,0 +1,13 @@
/* ____ __ */
/* / __ \_________ _/ /_____ */
/* / / / / ___/ __ `/ //_/ _ \ */
/* / /_/ / / / /_/ / ,< / __/ Clay Gomera (Drake) */
/* /_____/_/ \__,_/_/|_|\___/ My custom dwm build */
#define MAX(A, B) ((A) > (B) ? (A) : (B))
#define MIN(A, B) ((A) < (B) ? (A) : (B))
#define BETWEEN(X, A, B) ((A) <= (X) && (X) <= (B))
void die(const char *fmt, ...);
void *ecalloc(size_t nmemb, size_t size);

View file

@ -0,0 +1,16 @@
PREFIX ?= /usr
CC ?= cc
output: dwmblocks.c blocks.def.h blocks.h
${CC} `pkg-config --cflags x11 --libs x11` dwmblocks.c -o dwmblocks
blocks.h:
cp blocks.def.h $@
clean:
rm -f *.o *.gch dwmblocks
install: output
mkdir -p $(DESTDIR)$(PREFIX)/bin
install -m 0755 dwmblocks $(DESTDIR)$(PREFIX)/bin/dwmblocks
uninstall:
rm -f $(DESTDIR)$(PREFIX)/bin/dwmblocks

View file

@ -0,0 +1,16 @@
//Modify this file to change what commands output to your statusbar, and recompile using the make command.
static const Block blocks[] = {
/*Command*/ /*Update Interval*/ /*Update Signal*/
{"", "$HOME/.config/dwmblocks/scripts/memory", 1, 1},
{"", "$HOME/.config/dwmblocks/scripts/layout", 1, 1},
{"", "$HOME/.config/dwmblocks/scripts/battery", 1, 1},
{"", "$HOME/.config/dwmblocks/scripts/volume", 1, 1},
{"", "$HOME/.config/dwmblocks/scripts/clock", 5, 0},
};
//sets delimeter between status commands. NULL character ('\0') means no delimeter.
static char delim = '|';

View file

@ -0,0 +1,175 @@
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<unistd.h>
#include<signal.h>
#include<X11/Xlib.h>
#define LENGTH(X) (sizeof(X) / sizeof (X[0]))
#define CMDLENGTH 50
typedef struct {
char* icon;
char* command;
unsigned int interval;
unsigned int signal;
} Block;
void sighandler(int num);
void replace(char *str, char old, char new);
void getcmds(int time);
#ifndef __OpenBSD__
void getsigcmds(int signal);
void setupsignals();
void sighandler(int signum);
#endif
int getstatus(char *str, char *last);
void setroot();
void statusloop();
void termhandler(int signum);
#include "blocks.h"
static Display *dpy;
static int screen;
static Window root;
static char statusbar[LENGTH(blocks)][CMDLENGTH] = {0};
static char statusstr[2][256];
static int statusContinue = 1;
static void (*writestatus) () = setroot;
void replace(char *str, char old, char new)
{
int N = strlen(str);
for(int i = 0; i < N; i++)
if(str[i] == old)
str[i] = new;
}
//opens process *cmd and stores output in *output
void getcmd(const Block *block, char *output)
{
strcpy(output, block->icon);
char *cmd = block->command;
FILE *cmdf = popen(cmd,"r");
if (!cmdf)
return;
char c;
int i = strlen(block->icon);
fgets(output+i, CMDLENGTH-i, cmdf);
i = strlen(output);
if (delim != '\0' && --i)
output[i++] = delim;
output[i++] = '\0';
pclose(cmdf);
}
void getcmds(int time)
{
const Block* current;
for(int i = 0; i < LENGTH(blocks); i++)
{
current = blocks + i;
if ((current->interval != 0 && time % current->interval == 0) || time == -1)
getcmd(current,statusbar[i]);
}
}
#ifndef __OpenBSD__
void getsigcmds(int signal)
{
const Block *current;
for (int i = 0; i < LENGTH(blocks); i++)
{
current = blocks + i;
if (current->signal == signal)
getcmd(current,statusbar[i]);
}
}
void setupsignals()
{
for(int i = 0; i < LENGTH(blocks); i++)
{
if (blocks[i].signal > 0)
signal(SIGRTMIN+blocks[i].signal, sighandler);
}
}
#endif
int getstatus(char *str, char *last)
{
strcpy(last, str);
str[0] = '\0';
for(int i = 0; i < LENGTH(blocks); i++)
strcat(str, statusbar[i]);
str[strlen(str)-1] = '\0';
return strcmp(str, last);//0 if they are the same
}
void setroot()
{
if (!getstatus(statusstr[0], statusstr[1]))//Only set root if text has changed.
return;
Display *d = XOpenDisplay(NULL);
if (d) {
dpy = d;
}
screen = DefaultScreen(dpy);
root = RootWindow(dpy, screen);
XStoreName(dpy, root, statusstr[0]);
XCloseDisplay(dpy);
}
void pstdout()
{
if (!getstatus(statusstr[0], statusstr[1]))//Only write out if text has changed.
return;
printf("%s\n",statusstr[0]);
fflush(stdout);
}
void statusloop()
{
#ifndef __OpenBSD__
setupsignals();
#endif
int i = 0;
getcmds(-1);
while(statusContinue)
{
getcmds(i);
writestatus();
sleep(1.0);
i++;
}
}
#ifndef __OpenBSD__
void sighandler(int signum)
{
getsigcmds(signum-SIGRTMIN);
writestatus();
}
#endif
void termhandler(int signum)
{
statusContinue = 0;
exit(0);
}
int main(int argc, char** argv)
{
for(int i = 0; i < argc; i++)
{
if (!strcmp("-d",argv[i]))
delim = argv[++i][0];
else if(!strcmp("-p",argv[i]))
writestatus = pstdout;
}
signal(SIGTERM, termhandler);
signal(SIGINT, termhandler);
statusloop();
}

View file

@ -0,0 +1,21 @@
#!/bin/sh
# Loop through all attached batteries and format the info
for battery in /sys/class/power_supply/BAT?*; do
# If non-first battery, print a space separator.
[ -n "${capacity+x}" ] && printf " "
# Sets up the status and capacity
case "$(cat "$battery/status" 2>&1)" in
"Full") status="⚡" ;;
"Discharging") status="🔋" ;;
"Charging") status="🔌" ;;
"Not charging") status="🔋" ;;
"Unknown") status="♻" ;;
*) exit 1 ;;
esac
capacity="$(cat "$battery/capacity" 2>&1)"
# Will make a warn variable if discharging and low
[ "$status" = "🔋" ] && [ "$capacity" -le 25 ] && warn="❗"
# Prints the info
printf "%s%s%d%% " " $status" "$warn " "$capacity "; unset warn
done && printf "\\n"

View file

@ -0,0 +1,22 @@
#!/bin/sh
clock=$(date '+%I')
case "$clock" in
"00") icon="🕛" ;;
"01") icon="🕐" ;;
"02") icon="🕑" ;;
"03") icon="🕒" ;;
"04") icon="🕓" ;;
"05") icon="🕔" ;;
"06") icon="🕕" ;;
"07") icon="🕖" ;;
"08") icon="🕗" ;;
"09") icon="🕘" ;;
"10") icon="🕙" ;;
"11") icon="🕚" ;;
"12") icon="🕛" ;;
esac
date=$(date "+%Y %b %d (%a) | $icon %I:%M%p")
echo " $date"

View file

@ -0,0 +1,3 @@
#!/bin/sh
layout=$(setxkbmap -query | grep -oP 'layout:\s*\K\w+');
echo " ⌨ $layout ";

View file

@ -0,0 +1,4 @@
#! /bin/bash
mem="$(free -h | awk '/^Mem:/ {print $3 "/" $2}')"
echo -e "💻 $mem RAM "

View file

@ -0,0 +1,19 @@
#!/bin/sh
# Prints the current volume or 🔇 if muted.
[ $(pamixer --get-mute) = true ] && echo " 🔇 " && exit
vol="$(pamixer --get-volume)"
if [ "$vol" -gt "70" ]; then
icon="🔊"
elif [ "$vol" -gt "30" ]; then
icon="🔉"
elif [ "$vol" -gt "0" ]; then
icon="🔈"
else
echo " 🔇 " && exit
fi
echo " $icon $vol% "

0
user/.config/vifm/vifmrc Executable file → Normal file
View file

View file

@ -23,5 +23,18 @@ if [ -f "$usermodmap" ]; then
xmodmap "$usermodmap"
fi
### ENVIRONMENT VARIABLES
export GST_VAAPI_ALL_DRIVERS=1
export EDITOR="emacsclient -t -a ''" # $EDITOR use Emacs in terminal
export VISUAL="emacsclient -c -a emacs" # $VISUAL use Emacs in GUI mode
export READER="zathura" # Zathura as the pdf viewer
export TERMINAL="alacritty" # Alacritty as the default terminal emulator
export BROWSER="librewolf" # Librewolf as the default web browser
export WM="dwm" # DWM as the default Window Manager
export XDG_DATA_HOME=${XDG_DATA_HOME:="$HOME/.local/share"}
export XDG_CACHE_HOME=${XDG_CACHE_HOME:="$HOME/.cache"}
export XDG_CONFIG_HOME=${XDG_CONFIG_HOME:="$HOME/.config"}
export QT_QPA_PLATFORMTHEME=qt5ct # Qt theeming stuff
# start window manager / desktop environment
exec awesome
exec dwm

View file

@ -1,252 +0,0 @@
## ____ __
## / __ \_________ _/ /_____
## / / / / ___/ __ `/ //_/ _ \
## / /_/ / / / /_/ / ,< / __/ Clay Gomera (Drake)
## /_____/_/ \__,_/_/|_|\___/ My custom zsh config
##
### EXPORT
export TERM="xterm-256color" # getting proper colors
export HISTORY_IGNORE="(ls|cd|pwd|exit|sudo reboot|history|cd -|cd ..)"
# If not running interactively, don't do anything
[[ $- != *i* ]] && return
# use neovim for vim if present.
[ -x "$(command -v nvim)" ] && alias vim="nvim" vimdiff="nvim -d"
# use $XINITRC variable if file exists.
[ -f "$XINITRC" ] && alias startx="startx $XINITRC"
### SET VI MODE ###
# Comment this line out to enable default emacs-like bindings
bindkey -v
### PATH
if [ -d "$HOME/.bin" ] ;
then PATH="$HOME/.bin:$PATH"
fi
if [ -d "$HOME/.local/bin" ] ;
then PATH="$HOME/.local/bin:$PATH"
fi
if [ -d "$HOME/Applications" ] ;
then PATH="$HOME/Applications:$PATH"
fi
### CHANGE TITLE OF TERMINALS
case ${TERM} in
xterm*|rxvt*|Eterm*|aterm|kterm|gnome*|alacritty|st|konsole*)
PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:${PWD/#$HOME/\~}\007"'
;;
screen*)
PROMPT_COMMAND='echo -ne "\033_${USER}@${HOSTNAME%%.*}:${PWD/#$HOME/\~}\033\\"'
;;
esac
### Function extract for common file formats ###
SAVEIFS=$IFS
IFS=$(echo -en "\n\b")
function extract {
if [ -z "$1" ]; then
# display usage if no parameters given
echo "Usage: extract <path/file_name>.<zip|rar|bz2|gz|tar|tbz2|tgz|Z|7z|xz|ex|tar.bz2|tar.gz|tar.xz>"
echo " extract <path/file_name_1.ext> [path/file_name_2.ext] [path/file_name_3.ext]"
else
for n in "$@"
do
if [ -f "$n" ] ; then
case "${n%,}" in
*.cbt|*.tar.bz2|*.tar.gz|*.tar.xz|*.tbz2|*.tgz|*.txz|*.tar)
tar xvf "$n" ;;
*.lzma) unlzma ./"$n" ;;
*.bz2) bunzip2 ./"$n" ;;
*.cbr|*.rar) unrar x -ad ./"$n" ;;
*.gz) gunzip ./"$n" ;;
*.cbz|*.epub|*.zip) unzip ./"$n" ;;
*.z) uncompress ./"$n" ;;
*.7z|*.arj|*.cab|*.cb7|*.chm|*.deb|*.dmg|*.iso|*.lzh|*.msi|*.pkg|*.rpm|*.udf|*.wim|*.xar)
7z x ./"$n" ;;
*.xz) unxz ./"$n" ;;
*.exe) cabextract ./"$n" ;;
*.cpio) cpio -id < ./"$n" ;;
*.cba|*.ace) unace x ./"$n" ;;
*)
echo "extract: '$n' - unknown archive method"
return 1
;;
esac
else
echo "'$n' - file does not exist"
return 1
fi
done
fi
}
IFS=$SAVEIFS
### ALIASES ###
# navigation
up () {
local d=""
local limit="$1"
# Default to limit of 1
if [ -z "$limit" ] || [ "$limit" -le 0 ]; then
limit=1
fi
for ((i=1;i<=limit;i++)); do
d="../$d"
done
# perform cd. Show error if cd fails
if ! cd "$d"; then
echo "Couldn't go up $limit dirs.";
fi
}
# cd
alias \
..="cd .." \
.2="cd ../.." \
.3="cd ../../.." \
.4="cd ../../../.." \
.5="cd ../../../../.."
# bat as cat
[ -x "$(command -v bat)" ] && alias cat="bat"
# DOOM Emacs
[ -x "$(command -v emacs)" ] && alias \
em="/usr/bin/emacs -nw" \
emacs="emacsclient -c -a 'emacs'" \
doomsync="~/.emacs.d/bin/doom sync" \
doomdoctor="~/.emacs.d/bin/doom doctor" \
doomupgrade="~/.emacs.d/bin/doom upgrade" \
doompurge="~/.emacs.d/bin/doom purge"
# Changing "ls" to "exa"
alias \
ls="exa -al --color=always --group-directories-first" \
la="exa -a --color=always --group-directories-first" \
ll="exa -l --color=always --group-directories-first" \
lt="exa -aT --color=always --group-directories-first" \
l.='exa -a | egrep "^\."'
# xbps
[ -x "$(command -v xbps-query)" ] && alias \
xb-up="sudo xbps-install -Su && xcheckrestart" \
xb-get="sudo xbps-install -S" \
xb-rmv="sudo xbps-remove -R" \
xb-rmv-sec="sudo xbps-remove" \
xb-qry="sudo xbps-query" \
xb-cln="sudo xbps-remove -o && sudo xbps-remove -O"
# pacman
[ -x "$(command -v pacman)" ] && alias \
pac-up="sudo pacman -Syyu" \
pac-get="sudo pacman -S" \
pac-rmv="sudo pacman -Rcns" \
pac-rmv-sec="sudo pacman -Runs" \
pac-qry="sudo pacman -Ss" \
pac-cln="sudo pacman -Scc"
# colorize grep output (good for log files)
alias \
grep="grep --color=auto" \
egrep="egrep --color=auto" \
fgrep="fgrep --color=auto"
# git
alias \
addup="git add -u" \
addall="git add ." \
branch="git branch" \
checkout="git checkout" \
clone="git clone" \
commit="git commit -m" \
fetch="git fetch" \
pull="git pull origin" \
push="git push origin" \
stat="git status" \
tag="git tag" \
newtag="git tag -a"
# adding flags
alias \
df="df -h" \
free="free -m" \
newsboat="newsboat -u ~/.config/newsboat/urls"
# multimedia scripts
alias \
fli="flix-cli" \
ani="ani-cli" \
aniq="ani-cli -q"
# audio
alias \
mx="pulsemixer" \
amx="alsamixer" \
mk="cmus" \
ms="cmus" \
music="cmus"
# power management
[ -x "$(command -v xbps-query)" ] && alias \
po="loginctl poweroff" \
sp="loginctl suspend" \
rb="loginctl reboot"
[ -x "$(command -v pacman)" ] && alias \
po="systemctl poweroff" \
sp="systemctl suspend" \
rb="systemctl reboot"
# file management
alias \
fm="./.config/vifm/scripts/vifmrun" \
file="./.config/vifm/scripts/vifmrun" \
flm="./.config/vifm/scripts/vifmrun" \
vifm="./.config/vifm/scripts/vifmrun" \
rm="rm -vI" \
mv="mv -iv" \
cp="cp -iv" \
mkd="mkdir -pv"
# ps
alias \
psa="ps auxf" \
psgrep="ps aux | grep -v grep | grep -i -e VSZ -e" \
psmem="ps auxf | sort -nr -k 4" \
pscpu="ps auxf | sort -nr -k 3"
# youtube
alias \
yta-aac="yt-dlp --extract-audio --audio-format aac" \
yta-best="yt-dlp --extract-audio --audio-format best" \
yta-flac="yt-dlp --extract-audio --audio-format flac" \
yta-m4a="yt-dlp --extract-audio --audio-format m4a" \
yta-mp3="yt-dlp --extract-audio --audio-format mp3" \
yta-opus="yt-dlp --extract-audio --audio-format opus" \
yta-vorbis="yt-dlp --extract-audio --audio-format vorbis" \
yta-wav="yt-dlp --extract-audio --audio-format wav" \
ytv-best="yt-dlp -f bestvideo+bestaudio" \
yt="ytfzf -f -t" \
ytm="ytfzf -m"
# network and bluetooth
alias \
netstats="nmcli dev" \
wfi="nmtui-connect" \
wfi-scan="nmcli dev wifi list" \
wfi-edit="nmtui-edit" \
wfi-on="nmcli radio wifi on" \
wfi-off="nmcli radio wifi off" \
blt="bluetoothctl"
### SETTING THE STARSHIP PROMPT ###
eval "$(starship init bash)"