When window managers suck, people resort to doing window management in-app.
## There's a better way...
- No browser tabs.
- No vim-windows.
- ...still working on adapting this to my IDE.
### The major benefit here is that tab-management works the same across most of my system
- reduces thinking about context
- bring and goto window can grab an individual tab, instead of the whole browser/editor instance
- can grab an editor and web page or any other combo, and put them side-by-side with a keystroke
See also: [tabbed](http://tools.suckless.org/tabbed/), a generic tabbed application container
[demo of stack-windows] This, in combination with workspaces, is my solution. It works for me, but this is one of the most personal parts of window manager configuration
- Deceptively simple: Pipe it some lines on `STDIN`, and it will print the one you choose to `STDOUT`.
- Makes you realize how many things amount to 'pick a thing from a list'.
- Many WMs use it as a default launch menu by piping in the executable contents of `$PATH`.
- A quick way of collecting commonly-used commands
- We've already seen `shistory`
- Replace your _Start Menu_ with a very small shell script: [`dmenu-xdg`](https://github.com/lharding/dmenu-xdg)
- Hacker General's warning: `dmenu-xdg` may contain Python
- There are many scripts for picking `netcfg` profiles, etc
[demo of dlaunch]
## Good Terminal Emulator
- Fast to launch
- Low memory usage (to allow lots of terminals)
- Doesn't enforce a window management paradigm
- Enables lots of short-lived terms you bring up for a task and then kill when done
### I like [`rxvt-unicode`](https://wiki.archlinux.org/index.php/rxvt-unicode):
- Various builds available, most fairly light
- Still has nice frivolous features like background images
- Get [urxvt-perls](https://github.com/muennich/urxvt-perls) for copy & paste, vi-style select mode, url-select
- Setup [urxvtd](https://wiki.archlinux.org/index.php/rxvt-unicode#Daemon-client_setup_through_systemd) so that each new term is practically free
### Other people like [`st`](http://st.suckless.org/) with [`tmux`](http://tmux.sourceforge.net/).
`st` intentionally has almost no features, but `tmux` implements most of the features gotten with the above `urxvt` config.
## Drawer Terminals
Basically like the drop-terminal in Quake, etc. In cojunction with other tools, these replace much of the function of the system tray and quick launch bars in traditional desktops.
### To Accomplish
- Some WMs implement this natively, or through modules like Awesome-WM's [`scratchpad`](http://awesome.naquadah.org/wiki/Scratchpad_manager) module
- Through scripting via [`xdotool`](http://www.semicomplete.com/projects/xdotool/) and/or [`wmctrl`](http://tomas.styblo.name/wmctrl/)
### To Not Accomplish
- Via a whole dedicated program like `kuake`.
- Remember the principles of modularity and one-tool-for-one-job
- Note the `conky` in the example above: single-purpose drawer terminal programs can't give you that
- You're adding a whole new terminal emulator to configure and maintain
## Good Text Editor
#### Your biggest chef knife
#### I won't endorse a particular editor. Instead, necessary features:
- Finding a file to open, editing, and saving should all be quick and painless
- By which I mean possible without use of a file dialog
- Should have the ability to launch-and-fork from the command line opening a specified file (helps with the above)
- Syntax hilighting for a variety of languages
- Versatile completion
#### I will note that vim sucks unless you take the time to configure it
- Recommended: [`vim-powerline`](https://github.com/Lokaltog/vim-powerline) or [`vim-airline`](https://github.com/bling/vim-airline), [`ctrlp.vim`](https://github.com/kien/ctrlp.vim), [`syntastic`](https://github.com/scrooloose/syntastic)
#### REMAP YOUR FSCKING CAPSLOCK KEY. IT'S LIFECHANGING.
- Emacs style? Map it to control
- Vim style? Map it to escape
- See `xmodmap`, previously
class: center, middle
# Web Browser
## Seriously, though, make your browser not suck:
- Vimium for Chrome/Chromium
- Vimperator for Firefox
Find 'em and lots of similar stuff on your browser's extension store.
### Or go really indie and get something from the 'Web Browsers' section of [Suckless](http://suckless.org)' recommended projects page:
- I use `dwb` on my [OpenPandora](http://openpandora.org) because it's nice and small
## Not everything can be a chef knife
Sometimes that special-purpose gadget is the right thing for the job.
- Config profile handling
- Playing music
- Status monitors
- Image/document viewers
## What makes a good gadget?
- Does one thing
- Does only that thing
- Does it well, predictably, and reliably
- Minimal need for documentation
- It's okay to need to glance at the manpage, but sucks if you have to reread the entire thing every time
- `imagemagick` lives in a grey area here because its command syntax is practically a programming language
### Network config handling: Anything but NetworkManager
- Personal quirk: I don't care about auto network config
- bit of a demerit for keeping a daemon around unnecessarily, but nice otherwise
- WILL run on non-Arch
- no daemon, reasonable CLI, easy-to-grok configs, many GUIs available, A+++ would hack again
- see also [Automatic Operation](https://wiki.archlinux.org/index.php/netctl#Automatic_operation)
- `wifi-menu` for painless laptop roaming
- [Wicd](https://wiki.archlinux.org/index.php/wicd) if you really liked NetworkManager
- [`wpa_gui`](http://linux.die.net/man/8/wpa_gui) if you're only going to ever connect via wifi
- Actually, raw [`wpa_supplicant`](https://wiki.archlinux.org/index.php/WPA_supplicant) isn't _too_ bad
- Similarly, running [`dhcpcd`](https://wiki.archlinux.org/index.php/Dhcpcd) manually if you're only wired isn't bad
- Example command line: `dhcpcd -4 -L enp4s0`
- Don't be intimidated by the manpage, this just means 'ipv4 only, ignore Bonjour, interface enp4s0'.
- A good example of the "just write a little script" principle: if your setup is simple, you can call these from your .xinitrc or whatever.
# [sxhkd](https://github.com/baskerville/sxhkd) or other hotkey daemon
Just a little process launched from your `.xinitrc` that sits around listening for keypresses.
- Lets you bind shell commands to key combinations
- Many window managers build in this functionality, but...
- A window manager is not a program launcher
- Changing your keymap usually requires restarting your WM
- You have to redo your keybinds if you change WMs
- If you've never had a hotkey for 'create terminal' before, try it, it'll change the way you use computers permanently
- I recommend `sxhkd` because:
- Versatile: does sequences, detects mouse motion, can bind to key release, etc.
- Can map every button on your computer, including mouse and media hotkeys
- To find out the symbol for a key, use the `xev` tool (`man xev`, but it's pretty self explanatory)
# Status Monitoring
A tool for detailed system monitoring. Supremely configurable.
## Tray Widgets
One of the little things that comes with most DEs. Here are some minimal alternatives that don't depend on anything (except maybe python).
- Battery monitor: [cbatticon](https://github.com/valr/cbatticon)
- Volume display/control: [volti](https://code.google.com/p/volti/)
- Bluetooth control: [blueman](https://wiki.archlinux.org/index.php/Blueman)
- CPU graph: [gatotray](https://github.com/kafene/gatotray)
- These are just the ones I use, many, _many_ alternatives exist
- Most use the GTK systray protocol. If your WM doesn't support this natively, look for something like [trayer](https://github.com/sargon/trayer-srg) to handle it.
# Printing: [CUPS](https://wiki.archlinux.org/index.php/CUPS)
Basically, you should just install and use CUPS, it's pretty nice these days, and not much else is under active development.
- Once CUPS is installed, `lpr` actually works and does the right thing
- Most DEs are just giving you an interface to CUPS anyway
- Disclaimer: I last printed something at least 3 months ago.
# Device Mounting
- If you use removable media only very rarely, consider it may not be worth your time to automount
- I use [`ldm`](https://github.com/LemonBoy/ldm)
- Many other such tools are available
- See also [`autofs`](https://wiki.archlinux.org/index.php/autofs)
# More Recommended Apps:
- small integrated music player
- powerful music organizing tool
- warning: currently teetering on the over-integration precipice
- [`ii`](http://tools.suckless.org/ii/) + [`pcw` and friends](http://tools.suckless.org/ii/usage)
- IRC client that doesn't try to do its own window management
- See also [`sic`](http://tools.suckless.org/sic) if you're not a heavy ircer
- [`feh`](http://feh.finalrewind.org/) image viewing tool
- [`mupdf`](http://www.mupdf.com/) PDF viewer
- often easier than dragging out The Gimp for basic image munging tasks
- [randrctl](https://github.com/edio/randrctl) and [autorandr](https://github.com/wertarbyte/autorandr)
# Parting Thoughts
## My way is only one way of putting the pieces together
## Remember you can have your cake and eat it too
- Many apps from desktop environments will work fine on their own
- I use KDE [Filelight](http://methylblue.com/filelight/) and [Thunar](http://docs.xfce.org/xfce/thunar/start) (from XFCE) all the time
class: center, middle
# Q & A