\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}