Preface

The first time I come to GNU/Linux at 2014, installed my machine using Ubuntu 14.04 LTS, using Unity as my DE, and dual-booting with Windows 8. At 2015 when I got partition miss-match, I removed all my OSes, installing just Ubuntu 14.04, since then I never touch Windows Os until now*. In the end of 2015 I try to learn GNU/Linux more, I think I have to migrate to Debian, because it is the base of most GNU/Linux distribution, I think if I use Debian and accostomed with it, and make my Os of choice, I can dive deep into GNU/Linux world. Unlike others, I tend to spend very long time to decide my choice, because I don’t like to move or switch, so i really choose what is best suit with my self. I decide to choose Debian and love it, I want to learn debian to it’s root. respect Debian for it’s DFSG. so I removed my Ubuntu and start using Debian in the end of 2015.

using Debian more than 2 years with KDE, I am pretty satisfied, I have all my tasks done on Debian. But because I am running some heavyweight app as like Netbeans in my low end machine, I consider to buy another machine after having enough money. Two weeks ago I bought new machine, I am sure now I can be much productive with it, including acomplishing my old dream to contribute here and there.

Rationale

Before, I was an huge fan of KDE, I love many of KDE features, KDE has great detailed setting, I like the ability to put images on the top of the wallpaper, it’s called “image frames”, because I like to see many images at one time for my learning motivation. Moreover, I am the hard user of Okular and KOrganizer, until know I did not find any replacement for them.

After KDE Plasma 5 Release, Plasma 5 make me think twice, Plasma 5 has many great and shiny features that I don’t need. I think if I depend on KDE to accomplish my work, it will hard for me to switch to new machine and start working. In work, I am required to have a machine and apps that easy and fast to set up.I don’t need that shiny features for me to have my task done, and of course it has so many dependency on KDE. this is the starting point when I think that I need to build the portable machine, by mean, that my machine configuration can be easily move beetween one and other, so I can start working on new machine and just need couple of minutes to set up.

To achive this, I need apps that have small depedency on eiter Gnome or KDE and other packages as well and I need scriptable app config.

My Set up

this is my machine looks like:

machine1

so I came with this,

  • Window manager : i3

    I love Common Lisp, so it is good for me to improve the study of Lisp with hacking on StumpWM, But I need so much time to configure it, I got so many erors and can’t figure it out how to solve, StumpWM is great, but lack of documentation, wiki and community support, so it’s a bit pain for any person who first come to Window Manager like me, I search other option, the second phase candidate are i3 and xmonad. Because 6 months ago I installed i3 on Debian in VirtualBox, and I can use i3 with just copule of minutes. It start when I read ESR blog about his machine, and he is using I3, so I give it a try, i3 is very easy to learn. and when installing this new machine. I chose i3. I have xfce installed, just in case,if any emergency and I need a Desktop Environment.

    I choose i3-gaps rather than original i3, with the gaps configuration gaps I use is :

    # set gaps (i3-gaps only)
    gaps inner 10
    gaps outer 0
    

    the result is I always have the gaps beetween windows when I make the windwos tiled. I use emacs extensively so I change the default modifier key to Mod4 instead of Mod1, I use rofi to lauch program and run command, and using rofi feature to switch beetween windows.

    bindsym $mod+Shift+d exec rofi -show run -opacity 90
    # list open windows to switch to
    bindsym $mod+Tab exec rofi -show window -opacity 90
    

    i3 is hybrid, so you can use tabbed layout, stacking layout or default layout. I use named workspace or tag so I can easily remember what is the content of the workspace e.g term for workspace number 1, net for workscpae number two, and so on.

    You can move the window to another workspace using Mod+Shift+(any number).

    I use some additional config to make i3 bar more pretty, using FontAwesome font to display nice icon in i3status, I also change the time to use ISO 8601time.

    Sometimes I use touchpad for browsing, so I put this line exec --no-startup-id synclient VertEdgeScroll=1 TapButton1=1 TapButton2=3 TapButton3=2 to configure synclient when i3 start, to use more complex setting, you can refer to arch wiki

    for shutdown, reboot, suspend and lock, I use nice script that I get from V0id in i3 forum,

    #i3 shutdown, reboot, suspend, lock
    set $mode_system System (l) lock, (e) logout, (s) suspend, (h) hibernate, (r) reboot, (Shift+s) shutdown
    mode "$mode_system" {
      bindsym l exec --no-startup-id ~/.config/i3/i3exit lock, mode "default"
      bindsym e exec --no-startup-id ~/.config/i3/i3exit logout, mode "default"
      bindsym s exec --no-startup-id ~/.config/i3/i3exit suspend, mode "default"
      bindsym h exec --no-startup-id ~/.config/i3/i3exit hibernate, mode "default"
      bindsym r exec --no-startup-id ~/.config/i3/i3exit reboot, mode "default"
      bindsym Shift+s exec --no-startup-id ~/.config/i3/i3exit shutdown, mode "default"
    
      # back to normal: Enter or Escape
      bindsym Return mode "default"
      bindsym Escape mode "default"
    }
    bindsym $mod+Pause mode "$mode_system"
    

    in Lenovo laptops, pause are bind to fn+b

    sometimes I tend to forget abot my battery precentage, so I use i3-battery-popup script from Reindert-Jan Ekker which really nice and helpfull, it uses tk as default GUI toolkit for poping up a warning.

    To take screenshot, I use scrot. My current scrot setting is fine. But someday I want to have the ability to give a name of screenshot, this can be achived using scrot feature scrot -cd 4 'foo.png', but to use this i have to excute the command on terminal and switch to app, maybe it will be nicer if we put zenity pop-up to ask filenames, but it will be bloated feature I think.

    Don’t forget to reload your i3 configuration after you made some changes, with Mod+Shift+C, and you will see the changes, but there are some changes that you need to restart X or logout.

  • Text editor : Emacs

    I heard of emacs long time ago, maybe around 4 years ago. I often hear and read someone mention emacs emacs and emacs, in 2015 I try to search what is the importance of using emacs or vi, and trying to code java just to know how it feel. I never try it again after that time. In the mid of 2016, I have one week of holiday for preparing second semester exam. In the first day I try to find new skill that I must have, I remembered emacs, so I try to search emacs tutorial, history and wiki. and I find Jekor’s video, he explained how to use emacs for begginer in really great way, easy to follow and structured explanation. Since then, I use emacs to take notes, planning, self-management, writing letter, and code. even I use emacs in unversity exam of PHP programming

    You can read my history of my Emacs experience, I know others programmer or non-programmers, that heavily use emacs, on of them is Sacha Chua, she is very kind, she once said that even we love emacs, we have to know the basic use of vi, because emacs is not included in fresh instalation of OSes. thanks Sacha Chua for this advice.

    Emacs is my favorite editor, I manage my planz with org-mode, coding in emacs, writing daily notes, letter and other activity, I used to run pomodoro timer when I work with emacs, so I can focus on my work, and know when to take rest. you can read my emacs workflow

  • Terminal Emulator : urxvt

    I need the simple terminal emulator. Before learning tmux, I need terminal that supports tabs, so I choose urxvt with some perl extension, but after learnin tmux, I can work on any terminal, because I can have panes and windows in tmux.

    I dont have so much configuration in urxvt, because I run tmux on urxvt. In urxvt, I just configure the colour to mimic zenburn, changing the font, disable the ISO mode because I do not need it. and adding some kebinding to change the size of font in the fly.

    !change urxvt font size on the fly
    URxvt.keysym.M-plus:    command:\033]710;xft:InconsolataGo:pixelsize=19\007
    URxvt.keysym.M-minus:    command:\033]710;xft:InconsolataGo:pixelsize=14\007
    
  • tmux

    Great for productivity and programming. with tmux, I can have windows and panes, it make me easy to attach emacsclient with GUI here and there, opening multiple midnight commander in different panes.

    what I love in tmux is, I can have emacs-like keybinding, so I can easily move the cursor and copy the region.

    Tmux is one of the great piece of app that support my work, most of the configuration I took from kind person named Hamvocke. by the way, he had nice looking blog. I love the way hamvocke set up his tmux, with changing the prefix key to C-a, splitting using - and | is really fun, rather than using default " and %, moreover he use metakey+arrow to move between panes, Great!. tmux use prefix and command keys, as like emacs does.

    I use emacs-like keybinding in tmux, and using this to copy and paste the buffer.

    # To copy:
    bind-key -n -t emacs-copy M-w copy-pipe "xclip -i -sel p -f | xclip -i -sel c "
    # To paste:
    bind-key -n C-y run "xclip -o | tmux load-buffer - ; tmux paste-buffer"
    

    so as like emacs buffer, to copy and paste content in tmux, start the prefix C-a, followed by command [, and emacs keybinding to copy Ctrl+Space, using arrow keys to highligth region, and Alt+w to copy. To paste any content to tmux, just press Ctrl+y (yanking). So, in tmux I dont need urxvt keybinding to copy and paste Ctrl+Alt+V and Ctl+Alt+C or Shift+Insert.

    I also use tmux design that Hamvocke got from dothebarbwa’s tmux design, it is cool.

    There is nice and shiny tmux config that show battery precentage, visual theme and lot of features from Gregory Pakosz, but I still does not need it. I think it focused for people who spent lot of time working in terminal emulator without any Windows Managers.

  • File manager : Midnight Commander, SpaceFM, Dired+.

    before, I was a Dolphin filemanager user, but now I search the app manager that easy to move the config between macine, So I choose mc as my primary file manager. I like the Lynx-like motion, I can travel beetween dir so fast. because dired, sunrise-commander does not have Lynx-like feature ( and I think it never have, because everything is buffer), and for accessing some favorite dir, I use autojump.

    I dont configure it yet, in the following days, I want to have default open with in mc. now I just use mc wrapper for cd, and add bashrc config to not have duplicate history.

    I have tried ranger, but I dont like the Miller columns view, so I choose mc.

    In mc, I hold my horses using mc wrapper that take my pwd into current mc position, by using alias mc='. /usr/share/mc/bin/mc-wrapper.sh' in bash aliases. I can use mc edit, and mc bring me to emacsclient when I open a file. everything work well, but in future maybe I want to add default app to open this file and that file. Sometimes I use dired+. but lynx-like feature from mc make me move between directory really fast, and dired+ did not have progress information when moving files.

  • Personal Management

    Korganizer is really great for this, but it is not simple enough, it uses akonadi and many depedency. Now, I am in searching for good personal management app for GNU/Linux. the candidate is osmo.

    after writing this sentence above, I type “emacs calender foo” and I am surprised,I immediately pulled away from the computer in surprise, I am really grateful, really unnoticed, I never expect to find this program, I have long Looking for a replacement for KOrganizer. I find Osmo, but I want a visual calendar that show my event or agenda in nice table. I really thanks to Masashi Sakurai for making this great app emacs-calwf. I will explore how it’s work.

  • Other apps I choose

    • pdf viewer = okular, qpdfview

      for viewing random pdf’s I use qpdfview, it fast and simple. but sometimes I need to anotate pdf, highlight, putting comments and etc. okular supports this. I like the way okular anotate the file, it does not add the anotation right away in pdf file, but using xml in separate folder. so I can easily share my pdf with my friends without bothering deleting all the comments and anotation or make the original copy first. You can share the pdf with anotation with export feature.

    • network manager = wicd-curses

      before I use wicd-gtk, now I use wicd-curses.

    • password manager = pass, keepassx

      I have 200 passwords, before I save it in protected odt, after 4 years, I moved to keepass2,Unwittingly I swam with a lot of mono dependency, so I want fully move to pass, and reduce my passwords to around only some little amount, to support this migration, I use keepassX.

      If you dont want mono depedency, I really recommmend keepassx over keepass2. you can use this migration script, to convert kdbx to kdb, but the recent version of keepassx support kdbx by default.

    • Music Player = audacious.

      I dont like music so much, but sometimes I hear slow music from audacious, I like audacious UI, tabbed playlist, really cool. in everyday life, I hear some ambient noises, using local apache2 web-server, and open the app in firefox. thanks lot Stefan Petrovic.

    • web browser = uzbl, firefox.

    • scenshot = scrot
    • automount = ~~udiskie~~, no it doesn’t work in my Debian. I use udisksctl, it’s really powerfull.

      to mount a device udisksctl mount -b /dev/sda<AnyNumber>

      to see the list of availiable device sudo fdisk -l

      my favorite one is turning off the devive, I often do this before plug off any external drive or usb-stick, this app is really great. udisksctl power-off -b /dev/sda<AnyNumber>. -b stands for block-device.

      thanks David Zeuthen for making this great app.

    • display manager = lightdm

    • shell = bash, I feel I still does not need fish or zsh.

      I have pretty bash prompt, taken from Nicolas Gallagher. I was stuck when trying to adapt it to my config, but TheBloke aka Tom Jobbins come to help and tidy it all.

    • VCS = git.

      Sometimes, I use hg(mercurial), but most of the time I use git. I have pretty git log from Cătălin Mariș gitconfig.

    • theme = Zenburn. “Just some alien fruit salad to keep you in the zone” .

    • others = autojump.

Thanks to…

I use Anthony Campbell’s i3 config as a base of my i3 config, because he provides comments, and I learn how to use named workspace and configure rofi form Epsi R Nurwijayadi config, inspired the bash prompt from Nicolas Gallagher cool bash prompt, love Hamvocke tmux keybinding, thanks for Chris Forno aka jekor I can’t learn emacs without your videos

you can see detailed information in my dotfiles repository

I wrote this article, hoping you can take some insight on how to do some task in my daily workflow, maybe you can take small benefit from here. I am really glad if this article can help you.

NB : English is not my mothertongue so any advice on grammar welcome.

I dont write every tiny detail on how to do a or b in these apps, instead i just write what i love in my configuration, if you want to learn the complete tutorial you should visit emacs wiki, i3 manual, tmux tutorial from hamvocke (wow, Hamvocke article mentioned in tmux official repo, great job Hamvocke), arch wiki about urxvt, and hamvocke article about tmux is cool, jekor’s videos for emacs begginers is really great. Sacha chua also talks many things about emacs.

Article Changelog

2017-08-22

  • Initial publication
  • change wicd-gtk to wicd-curses
Comments

So what do you think ? Leave your comments below.


Keep Reading


Reading Time

~11 min read

Published

Category

CS

Tags