tNew article about me, myself and I - monochromatic - monochromatic blog: http://blog.z3bra.org
(HTM) git clone git://z3bra.org/monochromatic
(DIR) Log
(DIR) Files
(DIR) Refs
---
(DIR) commit 6ab1a2e7730462a5d5f5e72d9a43168ea04abd7d
(DIR) parent 33857befeb807a0d546209be18f1217daa1a0282
(HTM) Author: z3bra <willy@mailoo.org>
Date: Fri, 30 May 2014 11:17:25 +0200
New article about me, myself and I
Diffstat:
A 2014/05/grok-that-workflow.txt | 360 +++++++++++++++++++++++++++++++
M config.mk | 5 +++--
M css/monochrome.css | 17 +++++++++++++----
M index.txt | 6 ++++++
4 files changed, 382 insertions(+), 6 deletions(-)
---
(DIR) diff --git a/2014/05/grok-that-workflow.txt b/2014/05/grok-that-workflow.txt
t@@ -0,0 +1,360 @@
+# [Grok that workflow](#)
+## — 30 May, 2014
+
+### Introduction
+> A workflow consists of an orchestrated and repeatable pattern of business
+> activity enabled by the systematic organization of resources into processes
+> that transform materials, provide services, or process information. It can be
+> depicted as a sequence of operations, declared as work of a person or group,
+> an organization of staff, or one or more simple or complex mechanisms.
+>
+> — <cite>From our savior Wikipedia, the free encyclopedia</cite>
+
+This has absolutely nothing to do with the subject of this post (or at least,
+not much..).
+
+The workflow I'm going to discuss here is my **personnal day-to-day
+computer workflow**. In other word, how I use my desktop. I'm not going to teach
+any trick, script, tweak or whatever you might think of. However, I'll provide
+links to software I use, piece of relevant config files, and animated images to
+illustrate some points.
+Now, shall we begin ?
+
+### Summary
+
+* [GNU/Linux distribution](#os)
+* [Managing windows](#wm)
+* [Scripting the shell](#sh)
+* [Using aaplications](#apps)
+* [Playing with the terminal](#term)
+* [FAQ](#faq)
+
+<h3 id='os'>GNU/Linux distribution</h3>
+#### crux
+I'm a fairly new [crux](http://crux.nu) user. But I must say that I love it
+already.. Crux is the kind of distro you build with your bare hands in a whole
+week, while other would just it the "*install*" button, and watch the magic
+happen for an hour or so, and get the same result. You're barely helped, you do
+almost anything from scratch, you compile **everything**, and it is not even
+working as you want ! that's how I like my personnal desktop: **raw**.
+
+Here is a typical crux workflow:
+
+1. Prepare your hard drive
+2. Compile your kernel
+3. Install the distro
+4. Update your packages
+5. Install package <xxx>
+6. Ah, it's not packaged..
+7. Create ports <xxx>
+8. Install package <xxx>
+9. Use package <xxx>
+10. GOTO 4
+
+[](/img/2014-05-26-prtutils.gif)
+<span class='caption'>Here is a show case of a package installation under crux.
+[prtmk](http://git.z3bra.org/cgit.cgi/scripts/tree/prtmk) is a small script I
+wrote that will create `Pkgfile`s using templates. Once the Pkgfile is created,
+you just need to download, compile the sources and install the package. Pretty
+easy :)</span>
+
+<h3 id='wm'>Managing windows</h3>
+My window manager of choice is venam's [2bwm](https://github.com/venam/2bwm).
+It's a light and simple
+[floater](https://wiki.archlinux.org/index.php/Window_Manager#Types) that comes
+with an impressive set of features and is configured at compile time using the
+special `config.h` file.
+
+Here is how my keybinds are organised:
+
+#### Managing windows
+
+<table>
+<tr> <th>prefix</th> <th>key</th> <th>function</th> </tr>
+<tr> <td>MOD4</td> <td>h,j,k,l</td> <td>move (10px)</td> </tr>
+<tr> <td>MOD4+SHIFT</td> <td>h,j,k,l</td> <td>move (40px)</td> </tr>
+<tr> <td>MOD4+ALT</td> <td>h,j,k,l</td> <td>resize (10px)</td> </tr>
+<tr> <td>MOD4+ALT+SHIFT</td> <td>h,j,k,l</td> <td>resize (40px)</td> </tr>
+<tr> <td>MOD4</td> <td>y,u,b,n</td> <td>put in the corner</td> </tr>
+<tr> <td>MOD4</td> <td>g</td> <td>put in the middle</td> </tr>
+<tr> <td>MOD4</td> <td>=</td> <td>maximize (horiz.)</td> </tr>
+<tr> <td>MOD4+SHIFT</td> <td>=</td> <td>maximize (vert.)</td> </tr>
+<tr> <td>MOD4</td> <td>x</td> <td>maximize (full)</td> </tr>
+<tr> <td>ALT</td> <td>TAB</td> <td>focus next window</td> </tr>
+<tr> <td>ALT+SHIFT</td> <td>TAB</td> <td>focus prev window</td> </tr>
+</table>
+
+[](/img/2014-05-27-windows.gif)
+<span class='caption'>Here are the movements I use on a daily basis. There are
+more features, but that's the one I use the most (other are just combination of
+those)</span>
+
+#### Managing groups
+
+Before using 2bwm, I was using [cwm](http://monkey.org/~marius/pages/?page=cwm),
+which is itself a rewrite of [evilwm](http://www.6809.org.uk/evilwm/). `Cwm` has
+a feature I like a lot: *groups*. These are basically like workspaces, with a
+neat-feature: you can show/hide them whenever you want.
+this allow grouping windows by tasks, and then raise groups depending on what
+you want to do. And if you wanna work on two tasks at the same time, well, just
+raise both tasks ! See the following animated image to get a visual idea of how
+it works.
+
+When I switched to `2bwm`, I missed this feature.. Because it uses only the
+traditionnal workspaces behavior (aka "*a-single-group-shown-at-the-time*"). So
+I [forked](http://git.z3bra.org/cgit.cgi/2bwm) the whole repo and implemented
+this feature. It's know perfectly working (as I can't find any bug, but there
+might be..), and you can even switch between groups and workspaces behavior with
+a hotkey !
+
+<table>
+<tr><th>prefix</th> <th>key</th> <th>function</th> </tr>
+<tr><td>ALT</td> <td>F<x></td> <td>switch to ws <x></td></tr>
+<tr><td>ALT+SHIFT</td> <td>F<x></td> <td>send to ws <x></td> </tr>
+<tr><td>ALT</td> <td>g</td> <td>change behavior</td> </tr>
+</table>
+
+[](/img/2014-05-27-groups.gif)
+<span class='caption'>Showing the two behavior: workspaces VS. groups. Each
+windows holds the number of the group it's sitting on</span>
+
+<h3 id='sh'>Scripting the shell</h3>
+The shell is a really powerfull toy. Not only because it looks badass, but
+because you can automate boring tasks by writing shell scripts. Here are my
+prefered:
+
+#### detach applications
+Sometimes, I need to start an application, and then detach it from my current
+terminal (to reattach it somewhere, or later). To solve this, `tmux` or `screen`
+could cut it, but I decided to use [dtach](http://dtach.sourceforge.net/)
+instead, which *ONLY* emulate the detach feature, without multiplexing terminal
+and such. I prefer it over `screen` or `tmux` because it's really lighter, and I
+can then move my `dtach` sessions between my `tmux` sessions.
+
+To deal with it, I use a simple script named `dm` (for "*dtach manager*") that
+let me create and attach sessions easily:
+
+ ─── dm -h
+ dm [-hl] <alias> [command]
+
+ # start a new session for IRC and fork it
+ ─── dm irc irssi &
+ [1] 4379
+
+ # list existing sessions
+ ─── dm -l
+ irc
+
+ # attach the "irc" session
+ ─── dm irc
+
+#### compile softwares
+This one might be specific to me, but when I'm programming, I often encounter
+the following issue:
+
+ ─── git pull
+ Updating 74bbe97..9b40eba
+ error: Your local changes to the following files would be overwritten by merge:
+ config.h
+ Please, commit your changes or stash them before you can merge.
+ Aborting
+
+**RRRAAAAAAHAHH !** You will have to rename the config.h to keep your changes, restore default
+config, pull the changes, then recover your saved config.h...
+
+It's not much.. But it's enough to get on my nerves. I then wrote another small
+script to help me with the boring task of constantly switching between default
+and personnal file (But you can typically use it in any case you wanna switch
+between multiple files). It goes like this:
+
+ # check which file is in use
+ ─── hm -c
+ config.h is different from stored config
+
+ # save current config
+ ─── hm -s 2bwm/$USER.h
+
+ # list stored configs
+ ─── hm -l 2bwm
+ 2bwm
+ ├── config.def.h
+ └── z3bra.h
+
+ # restore default config (previously store)
+ ─── hm -r 2b/config.def.h
+
+And now my life's much easier !
+
+I use a few others, to get links from a youtube search, translate some text,
+change my speakers, volume, ... Check my whole
+[~/bin/](http://git.z3bra.org/cgit.cgi/scripts) for more!
+
+
+<h3 id='apps'>Using applications</h3>
+To start my application, I used `xbindkeys` a lot. But I found that `sxhkd` is
+as efficient, but its config file is way more subtile and clean. I do not use my
+window manager to spawn applications, so that I don't have to tweak every WM
+config to spawn a terminal, and it even works WITHOUT a window manager :)
+
+Anyway, I don't have many shortcuts.. Here is a table to relate:
+
+<table>
+<tr> <th>shortcut</th> <th>command</th> </tr>
+<tr> <td>MOD4 + Enter</td> <td>urxvt</td> </tr>
+<tr> <td>MOD4 + m</td> <td>urxvt -e mail</td> </tr>
+<tr> <td>MOD4 + w</td> <td>dwb</td> </tr>
+<tr> <td>Menu</td> <td>~/bin/menu</td> </tr>
+<tr> <td>XF86Audio..</td> <td>~/bin/volume ..</td></tr>
+</table>
+
+I use my menu key to spawn a menu with some applications (pdf, term, web, ..),
+but I don't use it that often. It's nice though, so I just keep it.
+
+One interresting point, though. About the interaction between applications. I use `urxvt` as my terminal, and `dwb` as my web browser. This terminal has the powerful feature of being extensive in perl. I personnaly use two extensions:
+`url_select` and `keyboard_select`. The first one let you select URLs with
+`ALT+u` and open/yank them up with `Enter` or `y`. The second let you select
+text and yank it using `ALT+v`. It's pretty nice to avoid grabbing the mouse !
+
+
+<h3 id="term">Playing with the terminal</h3>
+
+Pretty much everything I do on my desktop imply to interact with the terminal.
+So that's one of my most tweaked application. But before speaking about any
+tweak, let's see how I find my way through the file system.
+
+ $ tree -L 2 $HOME
+
+ /home/z3bra
+ ├── bin
+ │ ├── backup
+ │ ├── [...]
+ │ └── ys
+ ├── etc
+ │ ├── bashrc
+ │ ├── [...]
+ │ └── zshrc
+ ├── src
+ │ ├── bf
+ │ ├── c
+ │ ├── cpp
+ │ ├── java
+ │ ├── pkg
+ │ ├── sql
+ │ └── www
+ ├── tmp
+ ├── usr
+ │ ├── doc
+ │ ├── img
+ │ ├── msc
+ │ ├── ports
+ │ └── vid
+ └── var
+ ├── btp
+ ├── irc
+ ├── log
+ ├── mail
+ ├── run
+ └── to
+
+ 31 directories, 47 files
+
+I try to mimic the unix filesystem:
+
+* `~/bin` : Holds my script and personnal binaries (it's in my $PATH, too)
+* `~/etc` : Where my config files are stored. They are then symlink everywhere
+* `~/src` : Every source of software goes there. They're sorted by language
+* `~/tmp` : A piece of ram used for download, it forces myself to class the
+ files I download, as everything in this dir will be wiped on reboot
+* `~/usr` : User files. from documents, to images, videos or distro packages
+* `~/var` : For every files created by softwares. I use it to store my emails,
+ dtach's sockets, log files, torrents, and such
+
+Now that you visited my `$HOME`, let's see how I use it. My main shell is
+`bash`. Mostly because I don't find `zsh` that useful, because I don't need all
+those plugins. So my `~/.bashrc` is pretty heavily tweaked:
+
+ $ wc ~/etc/bashrc
+ 225 733 5291 /home/willy/etc/bashrc
+
+The reason is that I hve many functions for everything that's to simple to put
+in a script or that I don't plan to run non-interactively. You could see simple
+monitoring function to get the top 10 processes, or memory usage. Or online
+pastebin.. Nothing really fancy in fact.
+
+Then there are the aliases. Most of them are just command shortener :
+
+ # command shortner
+ alias g='grep'
+ alias v="vim"
+ alias t='tmux'
+ alias btc="btcli -d ~/var/btp"
+ alias csv='column -t -s\;'
+ alias vol="alsamixer"
+
+So that's my config. There's not much to say after that.. I use `cd -`, `pushd`
+and `popd` to navigate the whole tree, and I start my application from the CLI,
+rather than menus or shortcuts (because having to remember shortcuts for the WM
+is enough, and it does not leave much room for any other shortcuts!).
+
+When I have to deal wiht USB sticks, I just start
+[ldm](https://github.com/LemonBoy/ldm) so that the stick mounts itself using my
+UID/GID. I do not start it by default because I seldom need it, and it fucks
+up the mounting of my `/` and `/home` on boot.
+
+Oh, also, I'm a big fan of text files, mostly because the GNU userland (or
+any good user space) provides enough tools to play with them:
+
+ $ grep z3bra ~/usr/doc/contacts.txt
+ z3bra, willy@mailoo.org, http://z3bra.org
+
+ $ column -t -s, ~/usr/doc/bookmarks.txt
+ Arch linux forum https://bbs.archlinux.org
+ Nixers forum http://nixers.net
+ Ypnose blog http://ypnose.org/blog/
+ Suckless website http://suckless.org
+
+ $ cat ~/usr/doc/todo.txt
+ 1. polish report's appendix
+ 2. record a video for the blog
+ 3. publish the workflow post [URGENT]
+ 4. buy some bananas
+
+ $ sed -i '/^[23]/d;s/^4/2/' $_
+
+Talking about this, Reihar wrote a nice
+[article](http://blag.necronomicon.fr/2013/12/21/libreoffice-batch-convert)
+about converting document using libreoffice. I use it from time to time to
+convert spreadsheets to CSV files, it's handy!
+
+### Bonus
+
+And there ends that narcissic article. I hope you found it interesting, even if
+everything I present here is totally specific to me. As a bonus, to thank you
+for reading this, here is a small video of my day to day workflow. Enjoy!
+
+<video controls src="/vid/2014-05-30-workflow.webm" type="video/webm">
+Your browser do not support embedded video. But you can download the files
+</video>
+
+<div class='center'>
+download :
+<a href="/vid/2014-05-30-workflow.mp4"> mp4 </a> |
+<a href="/vid/2014-05-30-workflow.webm"> webm </a>
+</div><br>
+
+<div class='caption-large'>
+That's a typical use of my desktop. IRC chat in
+bottom left (group 1), dev window on top left (group 3) and web session on the
+right for having enough space. Any other app would go on groups 4-9, and their
+placement would depend on my mood :)</div>
+
+
+<h3 id='faq'>FAQ</h3>
+This section is left *intentionnaly* empty. If I receeive interesting questions
+by mail, I'll answer back and quote the mail here, as a reference, so don't
+be shy and [feel free to ask](mailto:willy@mailoo.org) !
+
+<!-- vim: set ft=markdown ts=4 et tw=80: -->
(DIR) diff --git a/config.mk b/config.mk
t@@ -14,7 +14,8 @@ PAGES = index.html \
2014/01/images-in-terminal.html \
2014/03/toolbox.html \
2014/04/meeting-at-the-bar.html \
- 2014/04/pop-it-up.html
+ 2014/04/pop-it-up.html \
+ 2014/05/grok-that-workflow.html
FEEDS = rss/feed.xml
-EXTRA = css img favicon.ico
+EXTRA = css img vid errors favicon.ico
(DIR) diff --git a/css/monochrome.css b/css/monochrome.css
t@@ -225,9 +225,8 @@ blockquote {
margin-left: -8px;
}
-.strike {
- text-decoration: line-through;
-}
+.center { text-align: center; }
+.strike { text-decoration: line-through; }
.smiley {
font-style: normal;
t@@ -239,6 +238,7 @@ blockquote {
border-radius: 6px;
transform: rotate(90deg);
}
+
/* }}} */
/* Images and associated text {{{ */
t@@ -252,13 +252,22 @@ img {
margin-top: 8px;
}
+video { width: 100%; }
+
/* Comment images - use with <span> or <div> */
.caption {
- width:60%;
+ width: 60%;
display: inline-block;
font-style: italic;
font-size: 80%;
margin-left:20px;
margin-top:20px;
}
+
+.caption-large {
+ width: 100%;
+ display: block;
+ font-style: italic;
+ font-size: 80%;
+}
/* }}} */
(DIR) diff --git a/index.txt b/index.txt
t@@ -1,3 +1,9 @@
+# [Grok that workflow](/2014/05/grok-that-workflow.html)
+## — 30 May, 2014
+In a pretty narcissic pulsion, I decided that it could be interesting to
+describe my day-to-day workflow. I'll cover the distribution, graphical windows,
+terminal usage and even answer questions !
+
# [Pop it up !](/2014/04/pop-it-up.html)
## — 30 April, 2014
What about a dynamic way to get in touch with your system infos? Something