\documentclass[11pt,a4paper]{article}
\usepackage[margin=1in]{geometry}
\usepackage{longtable}
\usepackage{booktabs}
\usepackage{hyperref}
\usepackage{xcolor}
\usepackage{titlesec}
\usepackage{fancyhdr}
\usepackage{enumitem}
\usepackage{graphicx}
\usepackage{parskip}
% Colors
\definecolor{accent}{HTML}{458588}
\definecolor{darkbg}{HTML}{282828}
\definecolor{lighttext}{HTML}{EBDBB2}
% Hyperlink styling
\hypersetup{
colorlinks=true,
linkcolor=accent,
urlcolor=accent,
pdftitle={LazyKris Documentation},
pdfauthor={Kris Yotam}
}
% Section styling
\titleformat{\section}{\Large\bfseries}{\thesection}{1em}{}
\titleformat{\subsection}{\large\bfseries}{\thesubsection}{1em}{}
% Header/footer
\pagestyle{fancy}
\fancyhf{}
\fancyhead[L]{\textbf{LazyKris}}
\fancyhead[R]{Kris Yotam}
\fancyfoot[C]{\thepage}
\renewcommand{\headrulewidth}{0.4pt}
\begin{document}
% Title Page
\begin{titlepage}
\centering
\vspace*{2cm}
{\Huge\bfseries LazyKris\par}
\vspace{0.5cm}
{\Large Kris's Auto-Rice Bootstrapping Script\par}
\vspace{2cm}
{\large An Arch Linux installer that deploys a complete,\\keyboard-driven environment in minutes.\par}
\vspace{3cm}
{\large Kris Yotam\par}
\vspace{0.5cm}
{\large \url{https://krisyotam.com}\par}
\vfill
{\large Version 1.0\par}
{\large \today\par}
\end{titlepage}
\tableofcontents
\newpage
% ==============================================================================
\section{Introduction}
% ==============================================================================
LazyKris is an auto-rice bootstrapping script for Arch Linux. It installs and configures a complete keyboard-driven environment centered around the suckless philosophy: simple, efficient software that does one thing well.
The system includes:
\begin{itemize}[noitemsep]
\item \textbf{dwm} --- Tiling window manager with 22 patches
\item \textbf{st} --- Terminal emulator with scrollback and ligatures
\item \textbf{dmenu} --- Application launcher with fuzzy matching
\item \textbf{dwmblocks} --- Modular status bar
\item \textbf{surf} --- Minimal webkit browser for focused work
\item \textbf{fish} --- Shell with syntax highlighting
\item \textbf{lf} --- Terminal file manager with previews
\item \textbf{neovim} --- Modern text editor
\end{itemize}
\subsection{Installation}
On a fresh Arch Linux system:
\begin{verbatim}
curl -LO https://raw.githubusercontent.com/krisyotam/lazykris/main/lazykris.sh
sh lazykris.sh
\end{verbatim}
The script will prompt for a username, install all packages, compile suckless builds, deploy dotfiles, and set fish as the default shell.
% ==============================================================================
\section{Window Management (dwm)}
% ==============================================================================
dwm is a dynamic window manager. Windows are organized into tags (workspaces) and can be arranged in tiled, monocle, or floating layouts.
\subsection{Essential}
\begin{longtable}{@{}ll@{}}
\toprule
\textbf{Keybinding} & \textbf{Action} \\
\midrule
\endhead
\texttt{Mod+Return} & Spawn terminal (st) / promote to master \\
\texttt{Mod+Shift+Return} & Spawn additional terminal \\
\texttt{Mod+d} & App launcher (dlaunch) \\
\texttt{Mod+q} & Kill focused window \\
\texttt{Mod+j/k} & Focus next/previous window \\
\texttt{Mod+h/l} & Decrease/increase master area size \\
\texttt{Mod+Tab} & Switch to last viewed tag \\
\texttt{Mod+1-9} & View tag 1-9 \\
\texttt{Mod+Shift+1-9} & Move window to tag 1-9 \\
\texttt{Mod+0} & View all tags \\
\texttt{Mod+Shift+0} & Tag window to all tags \\
\bottomrule
\end{longtable}
\subsection{Window Management}
\begin{longtable}{@{}ll@{}}
\toprule
\textbf{Keybinding} & \textbf{Action} \\
\midrule
\endhead
\texttt{Mod+Shift+j/k} & Move window down/up in stack \\
\texttt{Mod+Shift+Space} & Toggle floating \\
\texttt{Mod+Shift+s} & Toggle sticky \\
\texttt{Mod+i} & Increase number of masters \\
\texttt{Mod+Shift+h/l} & Increase/decrease window size (cfact) \\
\texttt{Mod+Shift+o} & Reset cfact \\
\bottomrule
\end{longtable}
\subsection{Layouts}
\begin{longtable}{@{}ll@{}}
\toprule
\textbf{Keybinding} & \textbf{Action} \\
\midrule
\endhead
\texttt{Mod+t} & Tile layout \\
\texttt{Mod+f} & Floating layout \\
\texttt{Mod+Shift+r} & Reading mode (equal-width vertical columns) \\
\texttt{Mod+Space} & Toggle last layout \\
\texttt{Mod+Ctrl+,} & Cycle layouts prev \\
\texttt{Mod+Ctrl+.} & Cycle layouts next \\
\bottomrule
\end{longtable}
Available layouts via cycle: tile, floating, monocle, bstack, centeredmaster, centeredfloatingmaster, columns, deck, spiral, dwindle, nrowgrid.
\subsection{Tag Navigation}
\begin{longtable}{@{}ll@{}}
\toprule
\textbf{Keybinding} & \textbf{Action} \\
\midrule
\endhead
\texttt{Mod+Shift+Left/Right} & Move window to prev/next tag \\
\texttt{Mod+Shift+Tab} & Shift view to previous tag \\
\texttt{Mod+Shift+\textbackslash} & Shift view to next tag \\
\bottomrule
\end{longtable}
\subsection{Multi-Monitor}
\begin{longtable}{@{}ll@{}}
\toprule
\textbf{Keybinding} & \textbf{Action} \\
\midrule
\endhead
\texttt{Mod+,/.} & Focus prev/next monitor \\
\texttt{Mod+Shift+,/.} & Move window to prev/next monitor \\
\bottomrule
\end{longtable}
\subsection{Applications}
\begin{longtable}{@{}ll@{}}
\toprule
\textbf{Keybinding} & \textbf{Action} \\
\midrule
\endhead
\texttt{Mod+b} & Browser selector (dbrowse) \\
\texttt{Mod+w} & Content writer (dwrite) \\
\texttt{Mod+r} & Library browser (dread) \\
\texttt{Mod+n} & Notes browser (dnotes) \\
\texttt{Mod+e} & Metadata editor (dedit) \\
\texttt{Mod+c} & Content creator (dcreate) \\
\texttt{Mod+p} & Password manager (passmenu) \\
\texttt{Mod+y} & World clock (dtime) \\
\texttt{Mod+m} & Mode selector (dmode) \\
\texttt{Mod+a} & Questions (questions) \\
\texttt{Mod+Shift+c} & Clipboard manager (dclip) \\
\texttt{Mod+Shift+n} & RSS reader (newsboat) \\
\texttt{Mod+Shift+m} & Toggle mute \\
\bottomrule
\end{longtable}
\subsection{Screenshots}
\begin{longtable}{@{}ll@{}}
\toprule
\textbf{Keybinding} & \textbf{Action} \\
\midrule
\endhead
\texttt{PrintScreen} & Full screenshot (screenshot) \\
\texttt{Shift+PrintScreen} & Selection screenshot (screenshot select) \\
\texttt{Mod+PrintScreen} & Screen recording (record) \\
\texttt{Mod+Shift+PrintScreen} & Stop recording \\
\bottomrule
\end{longtable}
\subsection{Media Keys}
\begin{longtable}{@{}ll@{}}
\toprule
\textbf{Keybinding} & \textbf{Action} \\
\midrule
\endhead
\texttt{XF86 AudioRaise/Lower} & Volume up/down \\
\texttt{XF86 AudioMute} & Toggle mute \\
\texttt{XF86 BrightnessUp/Down} & Screen brightness \\
\bottomrule
\end{longtable}
\subsection{System}
\begin{longtable}{@{}ll@{}}
\toprule
\textbf{Keybinding} & \textbf{Action} \\
\midrule
\endhead
\texttt{Mod+BackSpace} & System actions menu (sysact) \\
\texttt{Mod+Shift+q} & System actions menu (sysact) \\
\texttt{Mod+Ctrl+Shift+q} & Restart dwm \\
\texttt{Mod+Shift+F5} & Reload Xresources \\
\bottomrule
\end{longtable}
\subsection{Scratchpad}
\begin{longtable}{@{}ll@{}}
\toprule
\textbf{Keybinding} & \textbf{Action} \\
\midrule
\endhead
\texttt{Mod+`} & Toggle scratchpad terminal \\
\texttt{Mod+Ctrl+`} & Set window as scratchpad \\
\texttt{Mod+Shift+`} & Remove scratchpad \\
\bottomrule
\end{longtable}
\subsection{Mouse Controls}
\begin{longtable}{@{}ll@{}}
\toprule
\textbf{Action} & \textbf{Result} \\
\midrule
\endhead
\texttt{Mod+Left Click} & Move floating window \\
\texttt{Mod+Right Click} & Resize floating window \\
\texttt{Mod+Middle Click} & Toggle floating \\
Click on tag & Switch to that tag \\
Click on layout icon & Toggle last layout \\
Right click layout icon & Set monocle layout \\
\bottomrule
\end{longtable}
% ==============================================================================
\section{Terminal (st)}
% ==============================================================================
st is a simple terminal. This build includes scrollback, font ligatures, transparency, and URL handling.
\subsection{Clipboard}
\begin{longtable}{@{}ll@{}}
\toprule
\textbf{Keybinding} & \textbf{Action} \\
\midrule
\endhead
\texttt{Ctrl+Shift+c} & Copy selection \\
\texttt{Ctrl+Shift+v} & Paste \\
\texttt{Right Click} & Paste from clipboard \\
\bottomrule
\end{longtable}
\subsection{Scrollback}
\begin{longtable}{@{}ll@{}}
\toprule
\textbf{Keybinding} & \textbf{Action} \\
\midrule
\endhead
\texttt{Alt+k} & Scroll up \\
\texttt{Alt+j} & Scroll down \\
\bottomrule
\end{longtable}
\subsection{Font and Zoom}
\begin{longtable}{@{}ll@{}}
\toprule
\textbf{Keybinding} & \textbf{Action} \\
\midrule
\endhead
\texttt{Alt+,} & Zoom in \\
\texttt{Alt+.} & Zoom out \\
\texttt{Alt+g} & Reset to default size \\
\bottomrule
\end{longtable}
\subsection{Transparency}
\begin{longtable}{@{}ll@{}}
\toprule
\textbf{Keybinding} & \textbf{Action} \\
\midrule
\endhead
\texttt{Alt+s} & Increase transparency \\
\texttt{Alt+a} & Decrease transparency \\
\texttt{Alt+m} & Reset transparency \\
\bottomrule
\end{longtable}
\subsection{Other}
\begin{longtable}{@{}ll@{}}
\toprule
\textbf{Keybinding} & \textbf{Action} \\
\midrule
\endhead
\texttt{Mod+Shift+Enter} & Spawn new terminal in current directory \\
\bottomrule
\end{longtable}
% ==============================================================================
\section{Application Launcher (dmenu)}
% ==============================================================================
dmenu is a dynamic menu for X. It reads from stdin and presents matches in a bar at the top (or center) of the screen.
\subsection{Navigation}
\begin{longtable}{@{}ll@{}}
\toprule
\textbf{Keybinding} & \textbf{Action} \\
\midrule
\endhead
\texttt{Arrow Keys} & Navigate items \\
\texttt{Tab} & Copy selected item to input \\
\texttt{Ctrl+n} / \texttt{Ctrl+p} & Next/previous item \\
\texttt{PageUp} / \texttt{PageDown} & Move by page \\
\texttt{Home} / \texttt{End} & Jump to first/last item \\
\bottomrule
\end{longtable}
\subsection{Editing}
\begin{longtable}{@{}ll@{}}
\toprule
\textbf{Keybinding} & \textbf{Action} \\
\midrule
\endhead
\texttt{Ctrl+a} & Move cursor to beginning \\
\texttt{Ctrl+e} & Move cursor to end \\
\texttt{Ctrl+u} & Delete to beginning \\
\texttt{Ctrl+k} & Delete to end \\
\texttt{Ctrl+w} & Delete word backwards \\
\texttt{Ctrl+y} & Paste primary selection \\
\texttt{Ctrl+Shift+y} & Paste clipboard \\
\bottomrule
\end{longtable}
\subsection{Confirmation}
\begin{longtable}{@{}ll@{}}
\toprule
\textbf{Keybinding} & \textbf{Action} \\
\midrule
\endhead
\texttt{Enter} & Confirm selection (execute) \\
\texttt{Ctrl+Enter} & Confirm selection (output only, no exec) \\
\texttt{Shift+Enter} & Confirm input text (ignore selection) \\
\texttt{Escape} & Cancel \\
\bottomrule
\end{longtable}
% ==============================================================================
\section{Web Browser (surf)}
% ==============================================================================
surf is a minimal webkit-based browser. It's designed for focused reading and research, without the distractions of a full browser.
\subsection{Navigation}
\begin{longtable}{@{}ll@{}}
\toprule
\textbf{Keybinding} & \textbf{Action} \\
\midrule
\endhead
\texttt{Ctrl+g} & Open URL bar (dmenu) \\
\texttt{Ctrl+/} & Search in page \\
\texttt{Ctrl+n} & Find next \\
\texttt{Ctrl+Shift+n} & Find previous \\
\texttt{Ctrl+h} & Go back \\
\texttt{Ctrl+l} & Go forward \\
\texttt{Ctrl+r} & Reload page \\
\texttt{Ctrl+Shift+r} & Force reload (bypass cache) \\
\texttt{Escape} & Stop loading \\
\bottomrule
\end{longtable}
\subsection{Zooming}
\begin{longtable}{@{}ll@{}}
\toprule
\textbf{Keybinding} & \textbf{Action} \\
\midrule
\endhead
\texttt{Ctrl++} or \texttt{Ctrl+=} & Zoom in \\
\texttt{Ctrl+-} & Zoom out \\
\texttt{Ctrl+0} & Reset zoom \\
\bottomrule
\end{longtable}
\subsection{Scrolling}
\begin{longtable}{@{}ll@{}}
\toprule
\textbf{Keybinding} & \textbf{Action} \\
\midrule
\endhead
\texttt{j} / \texttt{k} & Scroll down/up \\
\texttt{h} / \texttt{l} & Scroll left/right \\
\texttt{Space} / \texttt{Shift+Space} & Page down/up \\
\texttt{g} / \texttt{G} & Go to top/bottom \\
\bottomrule
\end{longtable}
% ==============================================================================
\section{Colorscheme (pywal)}
% ==============================================================================
LazyKris uses pywal to generate colorschemes from wallpapers. Colors are applied to dwm, st, dmenu, dunst, and zathura.
\subsection{Usage}
\begin{verbatim}
setbg /path/to/wallpaper.png
\end{verbatim}
The \texttt{setbg} script:
\begin{enumerate}[noitemsep]
\item Sets the wallpaper using xwallpaper
\item Generates a colorscheme using pywal
\item Applies colors to Xresources
\item Signals dwmblocks to update
\end{enumerate}
% ==============================================================================
\section{Git Configuration}
% ==============================================================================
The system supports multiple git identities that auto-switch based on directory.
\subsection{Profiles}
\begin{longtable}{@{}lll@{}}
\toprule
\textbf{Directory} & \textbf{Profile} & \textbf{Use Case} \\
\midrule
\endhead
\texttt{\textasciitilde/dev/personal/} & krisyotam & Personal projects \\
\texttt{\textasciitilde/dev/security/} & khr1st & Pentesting, CTF \\
\texttt{\textasciitilde/dev/work/} & laelyotam & Work projects \\
\bottomrule
\end{longtable}
\subsection{Useful Aliases}
\begin{longtable}{@{}lll@{}}
\toprule
\textbf{Alias} & \textbf{Command} & \textbf{Description} \\
\midrule
\endhead
\texttt{git st} & \texttt{status -sb} & Short status \\
\texttt{git lg} & \texttt{log --oneline --graph --all} & Pretty log \\
\texttt{git sync} & \texttt{pull --rebase \&\& push} & Quick sync \\
\texttt{git undo} & \texttt{reset --soft HEAD\textasciitilde1} & Undo last commit \\
\bottomrule
\end{longtable}
% ==============================================================================
\section{Patches Reference}
% ==============================================================================
\subsection{dwm Patches}
\begin{itemize}[noitemsep]
\item \textbf{vanitygaps} --- Gaps allowed across all layouts
\item \textbf{swallow} --- Terminals swallow windows spawned by child processes
\item \textbf{scratchpad} --- Dropdown terminal accessible via keybind
\item \textbf{sticky} --- Make windows visible on all tags
\item \textbf{hide\_vacant\_tags} --- Hide tags with no windows in the bar
\item \textbf{xresources} --- Read colors and config from Xresources at startup
\item \textbf{stacker} --- Move windows up/down in the stack
\item \textbf{shiftview} --- Cycle through tags
\item \textbf{statuscmd} --- Clickable status bar for dwmblocks
\item \textbf{pertag} --- Each tag remembers its own layout settings
\item \textbf{cyclelayout} --- Cycle through layouts with keybind
\item \textbf{restartsig} --- Restart dwm in place without losing windows
\item \textbf{true fullscreen} --- Prevents focus shifting in fullscreen mode
\end{itemize}
Multiple layouts included: tile, floating, monocle, bstack, centeredmaster, centeredfloatingmaster, columns (reading mode), deck, spiral, dwindle, nrowgrid.
\subsection{st Patches}
\begin{itemize}[noitemsep]
\item \textbf{ligatures} --- HarfBuzz ligature support
\item \textbf{sixel} --- Sixel graphics support (check sixel branch)
\item \textbf{scrollback} --- Scroll history
\item \textbf{clipboard} --- Clipboard integration
\item \textbf{alpha} --- Transparency support with configurable opacity
\item \textbf{boxdraw} --- Render box-drawing characters without font glyphs
\item \textbf{patch\_column} --- Doesn't cut text while resizing
\item \textbf{font2} --- Secondary font support (emoji fallback)
\item \textbf{right click paste} --- Paste with right click
\item \textbf{newterm} --- Spawn new terminal in current directory
\item \textbf{anygeometry} --- Dynamic geometry/borders
\item \textbf{xresources} --- Live reload colors/settings from Xresources
\item \textbf{sync} --- Better draw timing to reduce flicker/tearing
\item \textbf{live reload} --- Change colors/fonts on the fly
\item \textbf{swapmouse} --- Swap mouse buttons
\end{itemize}
\subsection{dmenu Patches}
\begin{itemize}[noitemsep]
\item \textbf{xresources} --- Read colors and settings from Xresources (pywal compatible)
\item \textbf{alpha} --- Transparency support, can be embedded in transparent st
\item \textbf{password} --- Hide input for password entry (\texttt{-P} flag)
\item \textbf{mouse support} --- Click to select options
\end{itemize}
Additional features:
\begin{itemize}[noitemsep]
\item \textbf{Emoji support} --- Can view color characters like emoji
\item \textbf{Reject non-matching} --- \texttt{-r} flag rejects input that doesn't match an option
\end{itemize}
% ==============================================================================
\section{FAQ}
% ==============================================================================
\textbf{Q: How do I change the default font?}
Edit \texttt{\textasciitilde/.config/x11/xresources} and set \texttt{st.font} or \texttt{dmenu.font}. Then run:
\begin{verbatim}
xrdb -merge ~/.config/x11/xresources
\end{verbatim}
Restart the application for changes to take effect.
\textbf{Q: How do I add a keybinding to dwm?}
Edit \texttt{\textasciitilde/.local/src/dwm/config.h}, add your binding to the \texttt{keys[]} array, then rebuild:
\begin{verbatim}
cd ~/.local/src/dwm
sudo make clean install
\end{verbatim}
Restart dwm with \texttt{Mod+Ctrl+Shift+q}.
\textbf{Q: How do I change the colorscheme?}
Run \texttt{setbg} with a new wallpaper. Colors are extracted from the image:
\begin{verbatim}
setbg /path/to/wallpaper.png
\end{verbatim}
\textbf{Q: Why fish instead of bash or zsh?}
Fish provides syntax highlighting, autosuggestions, and completions out of the box without configuration. It's faster to set up and more user-friendly.
\textbf{Q: How do I update the suckless builds?}
Pull changes from GitHub and rebuild:
\begin{verbatim}
cd ~/.local/src/dwm
git pull
sudo make clean install
\end{verbatim}
\textbf{Q: How do I add a new package to the system?}
For official packages: \texttt{sudo pacman -S package}
For AUR packages: \texttt{yay -S package}
To make it part of your LazyKris config, add it to \texttt{progs.csv}.
\textbf{Q: How do I configure email?}
Use mutt-wizard to set up neomutt:
\begin{verbatim}
mw -a your@email.com
\end{verbatim}
Follow the prompts to configure your email provider.
\textbf{Q: How do I mount external drives?}
Press \texttt{Mod+F9} to open the mount menu. Select the drive to mount. Use \texttt{Mod+F10} to unmount.
% ==============================================================================
\section{Credits}
% ==============================================================================
LazyKris is inspired by \href{https://larbs.xyz}{LARBS} (Luke's Auto-Rice Bootstrapping Scripts) by Luke Smith.
The suckless software (dwm, st, dmenu, surf) is developed by \href{https://suckless.org}{suckless.org}.
% ==============================================================================
\section{License}
% ==============================================================================
This project is licensed under the GPL-3.0 License.
Source code: \url{https://github.com/krisyotam/lazykris}
\end{document}