install: all
mkdir -p ${DESTDIR}${PREFIX}/bin
- cp -f dwm ${DESTDIR}${PREFIX}/bin
+ cp -f dwm extras/scripts/* ${DESTDIR}${PREFIX}/bin
chmod 755 ${DESTDIR}${PREFIX}/bin/dwm
+ chmod 755 ${DESTDIR}${PREFIX}/bin/remapd
+ chmod 755 ${DESTDIR}${PREFIX}/bin/remaps
+ chmod 755 ${DESTDIR}${PREFIX}/bin/setbg
mkdir -p ${DESTDIR}${MANPREFIX}/man1
sed "s/VERSION/${VERSION}/g" < dwm.1 > ${DESTDIR}${MANPREFIX}/man1/dwm.1
chmod 644 ${DESTDIR}${MANPREFIX}/man1/dwm.1
mkdir -p ${DESTDIR}${MANPREFIX}/man7
- cp -f TuCLS.7 ${DESTDIR}${MANPREFIX}/man7
+ cp -f extras/TuCLS.7 ${DESTDIR}${MANPREFIX}/man7
chmod 644 ${DESTDIR}${MANPREFIX}/man7/TuCLS.7
uninstall:
+++ /dev/null
-_pkgname=dwm
-pkgname=$_pkgname-larbs-git
-pkgver=6.2.r1888.0ac09e0
-pkgrel=1
-pkgdesc="Luke's build of dwm"
-url=https://github.com/LukeSmithxyz/dwm
-arch=(i686 x86_64)
-license=(MIT)
-makedepends=(git)
-depends=(freetype2 libx11 libxft)
-optdepends=(
- 'dmenu: program launcher'
- 'st: terminal emulator')
-provides=($_pkgname)
-conflicts=($_pkgname)
-source=(git+https://github.com/LukeSmithxyz/dwm)
-sha256sums=('SKIP')
-
-pkgver() {
- cd "$_pkgname"
- echo "$(awk '/^VERSION =/ {print $3}' config.mk)".r"$(git rev-list --count HEAD)"."$(git rev-parse --short HEAD)"
-}
-
-prepare() {
- cd "$_pkgname"
- echo "CPPFLAGS+=${CPPFLAGS}" >> config.mk
- echo "CFLAGS+=${CFLAGS}" >> config.mk
- echo "LDFLAGS+=${LDFLAGS}" >> config.mk
- # to use a custom config.h, place it in the package directory
- if [[ -f ${SRCDEST}/config.h ]]; then
- cp "${SRCDEST}/config.h" .
- fi
-}
-
-build() {
- cd "$_pkgname"
- make X11INC=/usr/include/X11 X11LIB=/usr/lib/X11
-}
-
-package() {
- cd "$_pkgname"
- make PREFIX=/usr DESTDIR="$pkgdir" install
- install -Dm644 LICENSE "$pkgdir/usr/share/licenses/$pkgname/LICENSE"
-}
+++ /dev/null
-### included patches
-
-- [Clickable statusbar](https://dwm.suckless.org/patches/statuscmd/)
-- Reads [xresources](https://dwm.suckless.org/patches/xresources/) colors/variables (i.e. works with `pywal`, etc.).
-- scratchpad: Accessible with <kbd>mod+shift+enter</kbd>.
-- New layouts: bstack, fibonacci, deck, centered master and more. All bound to keys <kbd>super+(shift+)t/y/u/i</kbd>.
-- True fullscreen (<kbd>super+f</kbd>) and prevents focus shifting.
-- Windows can be made sticky (<kbd>super+s</kbd>).
-- [hide vacant tags](https://dwm.suckless.org/patches/hide_vacant_tags/) hides tags with no windows.
-- [stacker](https://dwm.suckless.org/patches/stacker/): Move windows up the stack manually (<kbd>super-K/J</kbd>).
-- [shiftview](https://dwm.suckless.org/patches/nextprev/): Cycle through tags (<kbd>super+g/;</kbd>).
-- [vanitygaps](https://dwm.suckless.org/patches/vanitygaps/): Gaps allowed across all layouts.
-- [swallow patch](https://dwm.suckless.org/patches/swallow/): if a program run from a terminal would make it inoperable, it temporarily takes its place to save space.
--- /dev/null
+> N.B. This copy of dmenu is modified as part of TuCLS (Tucker's configured
+> Linux System)
+>
+> Additional non-source features can be found in the 'extras' directory.
+>
+> included source code patches
+>
+> - Clickable statusbar (https://dwm.suckless.org/patches/statuscmd/)
+> - Reads xresources (https://dwm.suckless.org/patches/xresources/)
+> - scratchpad/drop-down terminal
+> - New layouts: bstack, fibonacci, deck, centered master and more
+> - True fullscreen and prevents focus shifting
+> - Windows can be made sticky
+> - hide vacant tags (https://dwm.suckless.org/patches/hide_vacant_tags/)
+> - Stacker (https://dwm.suckless.org/patches/stacker/)
+> - Shiftview (https://dwm.suckless.org/patches/nextprev/)
+> - Vanitygaps (https://dwm.suckless.org/patches/vanitygaps/)
+> - Swallow patch (https://dwm.suckless.org/patches/swallow/)
+
+dwm - dynamic window manager
+============================
+dwm is an extremely fast, small, and dynamic window manager for X.
+
+
+Requirements
+------------
+In order to build dwm you need the Xlib header files.
+
+
+Installation
+------------
+Edit config.mk to match your local setup (dwm is installed into
+the /usr/local namespace by default).
+
+Afterwards enter the following command to build and install dwm (if
+necessary as root):
+
+ make clean install
+
+
+Running dwm
+-----------
+Add the following line to your .xinitrc to start dwm using startx:
+
+ exec dwm
+
+In order to connect dwm to a specific display, make sure that
+the DISPLAY environment variable is set correctly, e.g.:
+
+ DISPLAY=foo.bar:1 exec dwm
+
+(This will start dwm on display :1 of the host foo.bar.)
+
+In order to display status info in the bar, you can do something
+like this in your .xinitrc:
+
+ while xsetroot -name "`date` `uptime | sed 's/.*,//'`"
+ do
+ sleep 1
+ done &
+ exec dwm
+
+
+Configuration
+-------------
+The configuration of dwm is done by creating a custom config.h
+and (re)compiling the source code.
+++ /dev/null
-.TH "TuCLS" 7
-.SH Name
-TuCLS \- Tucker's Configured Linux System
-.IP
-\(bu view this document with
-.B "MOD + ?"
-\~\~
-.RB "("MOD
-is the Super Key or Windows Key)
-.SH Prolepsis
-.P
-.B TuCLS
-is my personal, configured linux system built on
-.I Artix Linux.
-It is built around a set of light-weight, modifiable, and replaceable programs that are easy to customize.
-At the center of this web of programs are the suckless programs
-.MR dwm 1
-(window manager),
-.MR dwmblocks 1
-(status bar),
-.MR st 1
-(terminal emulator), and
-.MR dmenu 1
-(menu), which are incredibly customizable.
-Most other programs are terminal or ncurses programs that are significantly extensible.
-.MR Nvim 1
-is included with a custom configuration including many plugins, lua scripts, and key-bound shell scripts.
-A more complete list of programs is listed at the bottom of this document.
-.P
-I am a musician, composer, music technologist, and educator.
-Thus, the priorities and configurations of the system are built around my work.
-The big tasks here are music engraving \(en handled with
-.MR Lilypond 1 ,
-audio work \(en involving
-.IR "SuperCollider",
-.MR pd 1 ,
-.MR SoX 1 ,
-and more, in addition to compositionally related computation using any number of tools.
-.SH Key Mappings and Bindings
-Any connected keyboard is remapped using the script
-.I remaps
-in
-.BR "~/.local/bin/".
-Two keys are remapped in the process:
-the key between Alt and Ctrl (either windows or command) becomes a Mod key
-and the Capslock key becomes escape when tapped and another Mod key when held.
-Capslock becomes disabled.
-.SS dwm Bindings
-.P
-Windows in dwm are ordered in a 'stack' that can be cycled through and rearranged.
-They are also placed in different tags which can be navigated like alternate desktops.
-(N.B. the key bindings here overwrite those in the
-.MR dwm 1
-man page)
-.TP
-.B Nav
-NB move/resize windows with 'Mod + left/right click'
-.TS
-tab(|) nospaces;
-l l.
-Mod + j/k|move down/up through windows in the stack
-Mod + Space|move selected window to top (or switch second window to top)
-Mod + h/l|diminish/augment width of main window
-Mod + z/x|diminish/augment gaps between windows
-Mod + a|toggle gaps on/off
-Mod + A|reset gaps to default scale
-Mod + Shift + Space|make a window float
-Mod + s|toggle a 'sticky' window that follows you through tags
-Mod + b|toggle status bar
-Mod + v|jump to top window
-.TE
-.
-.TP
-.B Layouts
-.TS
-tab(|) nospaces;
-l l.
-Mod + t|tiling \(en default|[tlng]
-Mod + T|horizontal tiling|[htlng]
-Mod + f|fullscreen selected window|
-Mod + F|floating|[fltg]
-Mod + y|spiral|[sprl]
-Mod + Y|dwindle|[dwdl]
-Mod + u|main on left, others in deck|[ldck]
-Mod + U|deck|[sdck]
-Mod + i|center main|[cntr]
-Mod + I|center, floating main|[fcntr]
-Mod + o/O|decrease/increase main window count|
-Mod + b|show/hide status bar
-.TE
-.
-.TP
-.B Tags
-Tags function like workspaces or alternate desktops.
-.TS
-tab(|) nospaces;
-l l.
-Mod + 1-9|switch tags
-Mod + Shift + 1-9|send current window to a tag
-Mod + Tab|switch to previous tag
-Mod + Left/Right|switch displays
-Mod + Shift + Left/Right|send current window to another display
-.TE
-.
-.TP
-.B Multiple Displays
-.TS
-tab(|) nospaces;
-l l.
-Mod + left/right|navigate to another display
-Mod + Shift + left/right|send current window to another display
-.TE
-.
-.SS System and Program Bindings
-.TP
-.B System
-NB media keys are not mapped, but could be adjusted in source.
-.TS
-tab(|) nospaces;
-l l.
-Mod + backspace|dmenu system functions
-Mod + Q|dmenu system functions
-Mod + -/+|default audio volume
-Mod + M|mute audio
-Mod + F1|dmenu display selection
-Mod + F2|pulsemixer
-Mod + F3|qpwgraph
-Mod + F4|htop
-Mod + F5|dmenu drive mounter
-Mod + F6|dmenu cifs mounter
-Mod + F7|dmenu unmounter
-Mod + F9|dmenu screen select (maim)
-Mod + F10|dmenu screen recording (ffmpeg)
-Mod + F11|open webcam
-Mod + F12|remap keyboard
-Mod + W|Network Manager
-.TE
-.
-.TP
-.B Programs
-.TS
-tab(|) nospaces;
-l l.
-Mod + enter|terminal window
-Mod + shift + enter|drop-down terminal
-Mod + d|dmenu program launcher
-Mod + D|dmenu pass (password manager)
-Mod + S|dmenu stream select (see dmenu scripts)
-Mod + e|neomutt
-Mod + E|abook
-Mod + w|web browser
-Mod + n|notes (see notes)
-Mod + N|newsboat
-Mod + M|ncmpcpp (see music and media)
-.TE
-.
-.TP
-.B Media
-using the programs mpd and mpv
-.TS
-tab(|) nospaces;
-l l.
-Mod + P|pause mpd and end any mpv instance
-Mod + ,|mpd previous track
-Mod + .|mpd next track
-Mod + <|mpd restart track
-Mod + >|mpd repeat
-.TE
-.
-.SH Author
-Tucker Johnson (tucker@newer.systems, https://newer.systems)
{ MODKEY, XK_o, incnmaster, {.i = +1 } },
{ MODKEY|ShiftMask, XK_o, incnmaster, {.i = -1 } },
{ MODKEY, XK_p, spawn, {.v = (const char*[]){ "mpc", "toggle", NULL } } },
- { MODKEY|ShiftMask, XK_p, spawn, SHCMD("mpc pause; dm-kampv") },
+ { MODKEY|ShiftMask, XK_p, spawn, SHCMD("mpc pause; killall mpv") },
{ MODKEY, XK_bracketleft, spawn, {.v = (const char*[]){ "mpc", "seek", "-10", NULL } } },
{ MODKEY|ShiftMask, XK_bracketleft, spawn, {.v = (const char*[]){ "mpc", "seek", "-60", NULL } } },
{ MODKEY, XK_bracketright,spawn, {.v = (const char*[]){ "mpc", "seek", "+10", NULL } } },
--- /dev/null
+.TH "TuCLS" 7
+.SH Name
+TuCLS \- Tucker's Configured Linux System
+.IP
+\(bu view this document with
+.B "MOD + ?"
+\~\~
+.RB "("MOD
+is the Super Key or Windows Key)
+.SH Prolepsis
+.P
+.B TuCLS
+is my personal, configured linux system built on
+.I Artix Linux.
+It is built around a set of light-weight, modifiable, and replaceable programs that are easy to customize.
+At the center of this web of programs are the suckless programs
+.MR dwm 1
+(window manager),
+.MR dwmblocks 1
+(status bar),
+.MR st 1
+(terminal emulator), and
+.MR dmenu 1
+(menu), which are incredibly customizable.
+Most other programs are terminal or ncurses programs that are significantly extensible.
+.MR Nvim 1
+is included with a custom configuration including many plugins, lua scripts, and key-bound shell scripts.
+A more complete list of programs is listed at the bottom of this document.
+.P
+I am a musician, composer, music technologist, and educator.
+Thus, the priorities and configurations of the system are built around my work.
+The big tasks here are music engraving \(en handled with
+.MR Lilypond 1 ,
+audio work \(en involving
+.IR "SuperCollider",
+.MR pd 1 ,
+.MR SoX 1 ,
+and more, in addition to compositionally related computation using any number of tools.
+.SH Key Mappings and Bindings
+Any connected keyboard is remapped using the script
+.I remaps
+in
+.BR "~/.local/bin/".
+Two keys are remapped in the process:
+the key between Alt and Ctrl (either windows or command) becomes a Mod key
+and the Capslock key becomes escape when tapped and another Mod key when held.
+Capslock becomes disabled.
+.SS dwm Bindings
+.P
+Windows in dwm are ordered in a 'stack' that can be cycled through and rearranged.
+They are also placed in different tags which can be navigated like alternate desktops.
+(N.B. the key bindings here overwrite those in the
+.MR dwm 1
+man page)
+.TP
+.B Nav
+NB move/resize windows with 'Mod + left/right click'
+.TS
+tab(|) nospaces;
+l l.
+Mod + j/k|move down/up through windows in the stack
+Mod + Space|move selected window to top (or switch second window to top)
+Mod + h/l|diminish/augment width of main window
+Mod + z/x|diminish/augment gaps between windows
+Mod + a|toggle gaps on/off
+Mod + A|reset gaps to default scale
+Mod + Shift + Space|make a window float
+Mod + s|toggle a 'sticky' window that follows you through tags
+Mod + b|toggle status bar
+Mod + v|jump to top window
+.TE
+.
+.TP
+.B Layouts
+.TS
+tab(|) nospaces;
+l l.
+Mod + t|tiling \(en default|[tlng]
+Mod + T|horizontal tiling|[htlng]
+Mod + f|fullscreen selected window|
+Mod + F|floating|[fltg]
+Mod + y|spiral|[sprl]
+Mod + Y|dwindle|[dwdl]
+Mod + u|main on left, others in deck|[ldck]
+Mod + U|deck|[sdck]
+Mod + i|center main|[cntr]
+Mod + I|center, floating main|[fcntr]
+Mod + o/O|decrease/increase main window count|
+Mod + b|show/hide status bar
+.TE
+.
+.TP
+.B Tags
+Tags function like workspaces or alternate desktops.
+.TS
+tab(|) nospaces;
+l l.
+Mod + 1-9|switch tags
+Mod + Shift + 1-9|send current window to a tag
+Mod + Tab|switch to previous tag
+Mod + Left/Right|switch displays
+Mod + Shift + Left/Right|send current window to another display
+.TE
+.
+.TP
+.B Multiple Displays
+.TS
+tab(|) nospaces;
+l l.
+Mod + left/right|navigate to another display
+Mod + Shift + left/right|send current window to another display
+.TE
+.
+.SS System and Program Bindings
+.TP
+.B System
+NB media keys are not mapped, but could be adjusted in source.
+.TS
+tab(|) nospaces;
+l l.
+Mod + backspace|dmenu system functions
+Mod + Q|dmenu system functions
+Mod + -/+|default audio volume
+Mod + M|mute audio
+Mod + F1|dmenu display selection
+Mod + F2|pulsemixer
+Mod + F3|qpwgraph
+Mod + F4|htop
+Mod + F5|dmenu drive mounter
+Mod + F6|dmenu cifs mounter
+Mod + F7|dmenu unmounter
+Mod + F9|dmenu screen select (maim)
+Mod + F10|dmenu screen recording (ffmpeg)
+Mod + F11|open webcam
+Mod + F12|remap keyboard
+Mod + W|Network Manager
+.TE
+.
+.TP
+.B Programs
+.TS
+tab(|) nospaces;
+l l.
+Mod + enter|terminal window
+Mod + shift + enter|drop-down terminal
+Mod + d|dmenu program launcher
+Mod + D|dmenu pass (password manager)
+Mod + S|dmenu stream select (see dmenu scripts)
+Mod + e|neomutt
+Mod + E|abook
+Mod + w|web browser
+Mod + n|notes (see notes)
+Mod + N|newsboat
+Mod + M|ncmpcpp (see music and media)
+.TE
+.
+.TP
+.B Media
+using the programs mpd and mpv
+.TS
+tab(|) nospaces;
+l l.
+Mod + P|pause mpd and end any mpv instance
+Mod + ,|mpd previous track
+Mod + .|mpd next track
+Mod + <|mpd restart track
+Mod + >|mpd repeat
+.TE
+.
+.SH Author
+Tucker Johnson (tucker@newer.systems, https://newer.systems)
--- /dev/null
+#!/bin/bash
+
+# Rerun the remaps script whenever a new input device is added.
+
+# Tucker Johnson (git.newer.systems) (tucker@newer.systems)
+
+# This script is to add out-of the box features to my dmenu build. If you want
+# to make changes, make them in the source directory and reinstall.
+
+while :; do
+ remaps
+ grep -qP -m1 '[^un]bind.+\/[^:]+\(usb\)' <(udevadm monitor -u -t seat -s input -s usb)
+done
--- /dev/null
+#!/bin/sh
+
+# This script is called on startup to remap keys.
+
+# Tucker Johnson (git.newer.systems) (tucker@newer.systems)
+
+# This script is to add out-of the box features to my dmenu build. If you want
+# to make changes, make them in the source directory and reinstall.
+
+xset r rate 300 50
+
+setxkbmap -option caps:super,altwin:menu_win
+
+killall xcape 2>/dev/null ; xcape -e 'Super_L=Escape'
+
+xset -q | grep -q "Caps Lock:\s*on" && xdotool key Caps_Lock
--- /dev/null
+#!/bin/sh
+
+
+# Location of link to wallpaper link.
+background="${XDG_DATA_HOME:-$HOME/.local/share}/bg"
+
+while getopts "s" o; do case "${o}" in
+ s) silent='1' ;;
+esac done
+
+shift $((OPTIND - 1))
+
+newimage="$(readlink -f "$1")" &&
+case "$(file --mime-type -b "$newimage")" in
+ image/* ) cp -f "$newimage" "$background" && [ -z "$silent" ] && notify-send -i "$background" "Changing wallpaper..." ;;
+ *) [ -z "$silent" ] && notify-send "Error" "Not a valid image" ; exit 1;;
+esac
+
+xwallpaper --zoom "$background"
--- /dev/null
+keycode 1 = Caps_Lock
+keycode 58 = Escape