Category Archives: Linux

Forward thinking file linking

When I first used ln, I tried using it before reading the documentation. I had assumed that linking was a basic enough operation to make the syntax ln [source-target] [linkname] all I needed to do. I learned though, the common deployment of ln is otherwise. Since I created enough links and because I felt the syntax should be basic, I created a script to get this behavior.

Besides a basic syntax that was logical to me, there are a few other reasons why I created the script. To know what they are, it helps to know the basics of linking.

Principalia linkathica

The default/non-optioned use of ln creates a hard link. A “hard link” is essentially just another name for an existing file. Because the hard link and its source (“target” in the documentation’s wording) share the same file system inode, they are almost indistinguishable (the inode contains all the information about a file).

However, hard links are rarely used. For several reasons the default/non-optioned syntax is not as good as its alternative a “symbolic link”. While ln default behavior is to create a hard link, its existence is likely a inherited artifact — hard links came before symbolic links and program syntax had to be maintained to run as the users expected.

A symbolic link is more versatile than a hard link. It is sometimes referred to as a “symlink” or a “soft link” and it has some advantages — it can be:

  • readily used on directories
  • used across file system boundaries
  • created if the source/target doesn’t exist
  • color formatted with the ls command (and often is by default)

Further explanation of what a symbolic link is (as explained in ln‘s information page, lightly paraphrased):

A symbolic link is a special type of file that refers to a different file by name. Most operations that are passed to the link file (opening, reading, writing…) are deferred by the kernel to operate on its target. Some operations (e.g. removing) work on the link file itself. The owner and group of a symlink have no effect on the file access of the target — they only have an effect on the removing of the symlink itself. On the GNU system, the file mode bits of a symlink have no significance and cannot be changed.

A symlink can be defined either with absolute or relative paths — the later being commonly used on removable media.


cd $HOME
touch  file.txt
ln                 file.txt  file_hrdlink.txt
ln -s  /home/$USER/file.txt  /home/$USER/file_symlink-absolute.txt
ln -s     ../$USER/file.txt  file_symlink-relative.txt
ln -s     ../$USER/FILE.txt  file_symlink-relativebroken.txt

“Dance with the one that brung ya”

The basic syntax that I wanted was why I created the script; additionally, a couple more benefits were able to be added:

  • symbolic links used by default as they are more flexible
  • absolute paths used for consistency and because they are usually quicker to resolve
  • existence tests used on the source target and destination directory


$ lnk --help
lnk [source-target] [directory-or-linkname] — a generic linker


lnk can be installed for Arch Linux users as part of the AUR package of my general utility scripts: genscripts-git.

Keyboard outlines for key mapping

At times I mess with a program and like it enough that I write down the key mappings so I may refer to them later. I had done this enough that I just decided I might as well make a keyboard outline for key mapping. I created the four US-English model basic layouts. For those that would like to like to use them, they are under the Creative Commons Share Alike license. An example of what can be done with them can be seen on the post Knowledgeable Urban Terror setup.

Full layout:

Compact layout:

Laptop layout:

Mini layout:

Root directory residuals

root-directory-residualsThe only directory in my file system that I’d like to keep track of is my home directory. Here I keep my personal files and the a number of configurations that I love. I write notes of any configuration edits I make and record them here. However, besides the system configurations that I have edited, I also have a few more root directory configurations that I created. I wanted a way to keep track of them.

Getting down with the O C D

Previously I choose to reinstall about every six to twelve months. This allowed me to examine the install process to see if there were any new details about the operating system that I needed to learn. However, doing this procedure caused me to lose some good details I had put in the configurations. After I did this a few times, I began to do backups of them.

To keep the system running as expected, I learned I had to keep track of my configurations. The system configurations that I had edited originally I could keep track of by package updates (where I have to regularly merge the new versions to the old). However for the system configurations I created, I pretty much forgot them. These files occasionally I would rediscover when I had to do some troubleshooting. I came to the conclusion that if I wanted to track them, the best way to do so was to put them in a package`.

(I choose now to avoid installs when I can. These days, researching the install guide is enough to keep me up-to-date of operating system changes.)

Hunter and gatherer

I wasn’t always good at recording what configurations I created — I would test something out, or get excited when an experiment worked… Therefore, I had to search through the file system to re-track these files. This involved me making a list of all the files in the file system and comparing that to a list of files of the packages themselves. This sounds like a laborious process but isn’t terribly difficult and can be trimmed down greatly.

Because configurations are generally only in several directories less searching is required.

A file list of all packages, can be created with:

for p in $(pacman -Qq); do pacman -Qql $p; done | sed 's#/$##g' | sort -u -o pkgs-filelist.txt

A file list of the root directory, can be created with:

find / -not -path "/dev/*" -not -path "/home/*" -not -path "/media/*" -not -path "/mnt/*" -not -path "/proc/*" -not -path "/root/*" -not -path "/run/*" -not -path "/srv/*" -not -path "/sys/*" -not -path "/tmp/*" -not -path "/var/cache/*"  -not -path "/var/lib/pacman/*" -not -path "/var/lib/systemd/*" -not -path "/var/log/journal/*" -not -path "/var/tmp/*" | sed 's#/$##g' | sort -u -o root-filelist.txt

The differences can be viewed with:

vimdiff pkgs-filelist.txt root-filelist.txt

The package please… emmhh!

Creating a configuration package is the same as creating any other package. I put the configurations in the PKGBUILD directory and in it directed where to install them. In the future if an edit is required, I edit them there and rebuild it.


Command line dictionary


As a person who likes to write, it has always been helpful for me to have a dictionary nearby. As a regular command line user, it would be nice if there was a dictionary program that I could access from there. I hadn’t predicted this would be much of a task, however I found it a bit of an uphill battle.


I needed a dictionary that had:

  1. a basic description that is accurate
  2. offline access capability
  3. formatting that is logically ordered and easy to read


In my original attempt, I didn’t find any. I looked at and tried a number of programs but most were inadequate in one way or another. It took me a while to whittle them out. I was baffled… and I almost gave up looking. I did eventually find one, but before that the two most promising progrms looked to be dictd and sdcv.


Dictd is a protocol/software-framework for a networking dictionary; it contains both a server and a client. The idea is to have a server where numerous clients can connect to it. This would be useful for local network use, or for something like an online dictionary group. However, it seems that the development has been quiet, and I had trouble installing several of its dictionaries… I could never get it to work.

The basic setup steps that are required to make it function are:

  1. Install package and a dictionary for it.
  2. Start the dictd daemon (requires very little overhead) and check if the dictionaries are available:
    dict -I
  3. Look up a word definition using a particular dictionary:
    dict --database gcide 


I used to use this program (_S_tar_D_ict _C_onsole _V_ersion) — for years. It provided a basic, easy-to-use, unambiguous, definition. These days, however, the parent program StarDict is no longer in development. Additionaly, there were formatting problems that broke reading flow, and made it difficult to read.

Forest through the trees

I may not always get what I want, but sometimes when I pay attention, I get more than I need. I discovered a program that while not a full-blown dictionary does pretty good. It techinically might not even be a dictionary. From the man page:

wn – command line interface to [the] WordNet lexical database[…] [it outputs] synsets and relations to be displayed as formatted text.

In more human-speak, it details relationships between words. Its use as a thesaurus would be of a more direct comparasion. However it can work for a dictionary as it does provide definitions and some contextual examples. The definitions are basic but to the point. Word pronunciations, however, are not available.

    wn lexical -over
    The adj lexical has 2 senses (first 1 from tagged texts)
    1. (2) lexical -- (of or relating to words; "lexical decision task")
    2. lexical -- (of or relating to dictionaries)

Making good enough alone

The output of wn can be difficult to read — it jumbles a lot of information together and only roughly organizes it. (FYI, in the above example I’ve filtered out a couple lines.) To help the reading of it in a smooth natural way I’ve created a couple scripts to format the output. One script is called dict and the other is called thes. I’ve put them in the AUR.


Fine DAE scripts


Anybody that knows my command line habits, or me in general, knows that my memory is terrible. It can be good when I need it to be — if I don’t have to though, I don’t. This leads me to writing a lot of things down. This is why I built my DAE scripts. (DAE, pronounced day, is an acronym for Digital Audio Extraction, and is more commonly known as “ripping” audio CDs). The scripts encapsulate a command that has only a few options, yet I have no way to memorizing the command that I may not use again for quite some time. Hence, I created the basic scripts, they are extremely straightforward scripts, just to cover the essentials. So now, after all this, I’m free to think.

How they look

There are two scripts. They are demonstrated here in use, as it is the best way to describe them.

daeme (pronounced like lame) is for MP3s:


daefe is for MP4s:


After these steps, RipIt does a CDDB query from the Internet (if available), followed by tag editing if desired.


I bypassed adding a few settings in the script and rather put them in the configuration file as their values won’t change:

dirtemplate="${artist} — ${album}"


The daefe script can also be used for audiobooks. The procedure encodes an entire CD to a file and writes a track/chapter index to another file. The chapter index file can be merged into the audiobook for an integrated audiobook, read Arch Linux Wiki:Audiobook for more details.

Package available

(These scripts are only basic wrappers, most of the work is done by the RipIT developer(s)… I thank them very much for their effort.)

Both scripts have error checking, so they should be reliable. I have put them in the AUR.

What audio I do?

posticonWhen I looked at my audio files recently I realized that they weren’t organized in a consistent way: naming standards varied, some tags were missing, different encoding types were used… I decided I was gonna Feng Shui my way out of it.

The reorganization department of the reorganization department

I decided there should be consistent naming and it should be condensed as much as possible… while still being, understandable.

For the directory format I use $artist — $album. Normally, the format is $artist/$album. However, I came to terms, that I would have to have about 100 CDs in my collection before the list would get too long.

I decided also to do “one directory per album“. Before I had directory names like Fleetwood Mac — The Very Best of Fleetwood Mac (disc 1). But I discovered it was much tidier to use just Fleetwood Mac — The Very Best of Fleetwood Mac. So, rather, I prepended the disc number to the audio files:

ls Fleetwood Mac — The Very Best of Fleetwood Mac/
1-15 Songbird.m4a
1-16 Big Love (Live, 1997).m4a
1-17 Storms.m4a
2-01 The Chain.m4a
2-02 Don't Stop.m4a
2-03 What Makes You Think You're the One.m4a

There are other programs that organize multiple CDs in the fashion and I like the thought behind it.

Just the FAACs

I had been using high-quality MP3s (256kbps) and just accidentally stumbled into trying MP4s — and was delighted by the difference. Similar bitrates of audio sounded fractionally, but for me, appreciatively better. So I encoded all CDs to .m4a (MPEG-4 audio extension). (I will probably go to loss-free audio format in the future if the gods favor.)

By the way, I think (clearly subjectively`) that FAAC (Free Advanced Audio Coding encoder) is great. It mentions in the manual that “it is not up to par with the currently best AAC encoders” but from my semi-proficient audio setup its pretty good.

I tested encoding with a FAAC at a setting of 320 (~256kbps) versus the iTunes setting of 256kbps. I did find iTunes better. Audiophiles looking for every detail my have stage, but for me it was marginal enough to dismiss it.

Here is a partially non-scientific (but should be fairly representative) graph of FAAC’s quality settings compared to kilobytes per second:

I can verify for the first and fourth values as I have tested a number of times. The second and third values I got from hydrogen audio. The fifth value is a projected value based from the other values.

A FAAC setting of 150 has been recommended for “casual, non-critical listening”; however, I use FAAC 320 for my tunes and 55 for voice. (Though similiar bitrates to iTunes created a quality that was a bit less, the file size reflected too: iTunes 8.4MB, FAAC 7.6MB.)

Plailer trash

Software audio players that I have used tended to put a good amount of junk in my audio folders. I’ve seen album cover art put here, lyrics, some useless metadata, and hidden folders. I did myself a favor and cleared it out. Nothing should be here but the audio files. If an audio player insists on putting stuff here, I would recommend to someone to either file a bug or get a new audio player. Some may argue that album playlists should be put here but I find a lot of that relates to the audio players setup and I delete them as well.

Book ’em Dano

I discovered a nice feature call the audiobook format. Instead of 100 tracks littering a directory or directories from a audiobook CD, I can reduce this to a reasonable amount (say, one file per disc or whatever I choose). These book formats can also contain chapter indexes so navigating a file is just like navigating a disc. The process isn’t incredibly difficult and I documented it here. Additionally, my audio player supports them.

Organizing my home directory.


Being type A, I’ve probably thought more about this more than many, I have a certain organization and formatting to how I store my files.

How its laid out

I keep all my home directories about the same as everyone:

# cd ~; ls -1p


One exception to the above is the "Audio" directory which I use for multiple audio types:

# tree -L 1 -d Audio/
├── Audiobooks
├── Music
├── Other
└── Podcasts

The other exceptions is I also hide the Templates directory (.Templates) as I don’t use it often.


Even though I use GNOME I’ve enabled the Desktop. This is my workspace — if I can see them, I can remember them.

# ls -1 Desktop/ | head -n 3


I’ve come to be a big fan of VCSs. If I build something that others can use on their computer, I’ll create a VCS for it. I’ve put all of these VCS directories in their own directory:

# tree -L 1 -F -i --dirsfirst Development/


I put all the Documents in one directory whether I wrote them or obtained them:

# ls -1p Documents/


I do the same with Pictures as I do my Documents; whether I designed, photographed, or obtained them, I put them here:

# ls -1p Pictures/ | head -n 7
aqua pr09studios.png

As far as naming goes…

For folders, I use single words with the first letter uppercase, following the default Home directories formatting, whenever possible. For files I try to keep to the traditional UNIX method of naming my files as lowercase. For spaces in files, I generally use a hyphen (-) which I see used a lot these days though I think an underscore was originally used. Underscores I will use if there is a category I would like separated in the name (portrait-of-bach_etching.svg).

Audio files

Read What audio I do to learn how I do my audio files.


When I come across I file that I won’t use anymore… is outdated… a misdirection… I create a folder called _vault that I place them in. I rarely ever go back to them but at times find that is is necessary.

Setup GNOME on Arch Linux 3.14



This is a basic install/re-install and configuration guide to an Arch Linux, GNOME 3 desktop.

Sorry, in a few locations, wordpress is doing an odd thing and converting “angle brackets” to > (their HTML entities).

Reinstall preparation

Arpa is used occasionally here in place of pacman. arpa is a pacman wrapper script.

Update system and configuration files (i.e. .pacnew files).

arpa -u

Package list create:

arpa -L

Partitions record:

lsblk >>                              ~/Desktop/arch-prev-notes.txt
df -h | grep -e '^File' -e '^/dev' >> ~/Desktop/arch-prev-notes.txt
blkid -s LABEL >>                     ~/Desktop/arch-prev-notes.txt

Group list record:

id >> ~/Desktop/arch-prev-notes.txt

Free disk space.

baobab   # empty trash, ...

Trash old packages in cache:

pacman -Sc


rback --repo linxconf -xecute backup
rback --repo linxfull -xecute backup


Reboot to a LiveCD, set hostname:

hostnamectl set-hostname aspr

Split the screen

tmux splits the screen so that one side can have install notes while the other is used to do the commands. Ctrl + b command mode, % to split vertically, ; to switch panes.

pacman -S tmux

Setup storage device

Partition device:

diskspace=$(( $(grep sda$ /proc/partitions | awk '{print $3}') * 2 / 2048 - 1 ))
swapspace=$(( $(head -n1 /proc/meminfo | awk '{print $2}') / 1024 + 2 ))
rootspace=$(( $diskspace - $swapspace ))
sgdisk --clear --new 1:0:+${rootspace}MiB --new 2:0:+${swapspace}MiB --typecode 2:8200 --new 3:0:+1MiB --typecode 3:8300 --pretend --print /dev/sda

gdisk /dev/sda
r  # recovery/transformation menu
h  # make hybrid mbr
3  # add partition 3 to hybrid mbr
Place EFI GPT (0xEE) partition first in MBR (good for GRUB)? (Y/N): N
Enter an MBR hex code (default 83): [enter]
Set the bootable flag? (Y/N): Y
Unused partition space(s) found. Use one to protect more partitions? (Y/N): N
w  # write table to disk and exit

Format and mount:

mkfs.btrfs /dev/sda1 --label Linux
mkswap     /dev/sda2 --label Swap
mount      /dev/sda1 /mnt

Install base(ish) packages

mkdir -p       /mnt/var/{cache/pacman/pkg,lib/pacman} /mnt/dev
mkdir -m 555   /mnt/{proc,sys}
mount --bind   /dev     /mnt/dev
mount --bind   /dev/pts /mnt/dev/pts
mount -t proc  proc     /mnt/proc
mount -t sysfs sys      /mnt/sys

Install base and other low-level packages:

pacman --root /mnt -Sy base base-devel  abs alsa-utils dkms dnsmasq ethtool grub iw linux-headers msmtp-mta ntp smartmontools syslinux tlp vim
umount --recursive /mnt/{dev,proc,sys}

systemd-nspawn -bD /mnt  # should be enought to boot, otherwise:
systemd-nspawn --capability=CAP_MKNOD --register=no -M "${HOSTNAME}-chroot" -D /mnt

Configure base (basic)

No fstab, handled by GPT autodiscover (done by udisks/systemd?!).

locale-gen  # First, uncomment en_US.UTF-8 UTF-8 in /etc/locale.gen 
echo -e "LANG=en_US.UTF-8\nLC_COLLATE=C" > /etc/locale.conf
source /etc/profile.d/
ln -sf /usr/share/zoneinfo/America/New_York /etc/localtime
echo aspr > /etc/hostname

Configure package manager

  • Check log (/var/log/pacman.log) that base and base-devel were setup right.
  • Setup authorization keys pacman-key --init; pacman-key --populate archlinux.
  • Repository mirrors setup with script:

curl -L -o armrr
chmod +x armrr
armrr US
pacman -Syy

Add user

useradd -g users -G \
  adm,audio,games,optical,power,scanner,storage,video,wheel todd
passwd todd

Block insecure packages

# block in pacman.conf: flashplugin pywebkitgtk qtwebkit 
#                       webkitgtk webkit2gtk
#                       doom3 doom3-data etqw etqw-data
# Uncomment multilib
mkdir {webkitgtk-dummy,webkit2gtk-dummy}
curl -L -o webkitgtk-dummy/PKGBUILD
curl -L       -o webkit2gtk-dummy/PKGBUILD

Install display server

pacman -S xorg-server xorg-server-utils xorg-xinit \
  xf86-input-synaptics mesa-demos
pacman -S xf86-video-ati
pacman -S firefox firefox-adblock-plus hunspell-en

Install desktop environment

pacman -S gnome gnome-extra
  • gnome ^but : epiphany mousetweaks vino yelp
  • gnome-extra: brasero cheese devhelp file-roller gedit gnome-color-manager gnome-devel-docs gnome-getting-started-docs gnome-logs gnome-maps gnome-nettool gnome-photos gnome-weather nautilus-sendto polari rygel seahorse
  • Application descriptions.

Configure base


grub-install --target=i386-pc --recheck /dev/sda
grub-mkconfig -o /boot/grub/grub.cfg

syslinux-install_update -i -a -m

Initial RAM filesystem add suspend support:

sed -i '/^HOOKS/ s/block/block resume/' /etc/mkinitcpio.conf
mkinitcpio -p linux

Kernel parameters:

echo -e "# Magic sysreq key enable\nkernel.sysrq=1\n\n# Swapiness priority (def: 60)\nvm.swappiness=10" | tee -a /etc/sysctl.d/99-sysctl.conf

Elevated privledges:

Defaults editor=/usr/bin/vim:
% wheel... allow members in group wheel to execute...
todd  ALL = (root) NOPASSWD: /usr/bin/systemctl

NumLock enable on boot:

mkdir /etc/systemd/system/getty@.service.d
echo -e "[Service]\nExecStartPre=/bin/sh -c 'setleds +num  _Shortcuts_: (uses[pwr](/2012/02/24/power-management-from-the-command-line/) script):
Action Path/Command Key
Show desktop Navigation > Hide all… Ctrl + Alt + _D
Suspend Custom Shortcuts > +pwr -b Ctrl + Alt + B
Suspend Custom Shortcuts > +pwr -s Ctrl + Alt + S

Mouse and Touchpad

Mouse scroll speed (default: acceleration 20; sensitivity 10):

gsettings set $gset_tpad_path disable-while-typing true
gsettings set $gset_tpad_path horiz-scroll-enabled false
gsettings set $gset_tpad_path scroll-method disabled
gsettings set $gset_tpad_path tap-to-click false


gsettings set $gset_powr_path button-power                   hibernate
gsettings set $gset_powr_path sleep-inactive-ac-timeout      3600
gsettings set $gset_powr_path sleep-inactive-ac-type         hibernate
gsettings set $gset_powr_path sleep-inactive-battery-timeout 1800
gsettings set $gset_powr_path sleep-inactive-battery-type    hibernate
gsettings set org.gnome.desktop.lockdown disable-lock-screen false

Date & Time

Time Format AM/PM:

gsettings set org.gnome.desktop.interface clock-format 12h


Default Applications:

Type Program
Web Firefox
Mail Gnome Gmail
Calendar Evolution
Music Videos
Videos VLC
Photos Image Viewer

Removable Media:

Media Action
CD Audio Ask what to do
DVD video VLC
Music player Ask what to do
Photos Ask what to do
Software Run Software



System settings (other)

Other settings that may be of importance.

Tweak Tool

Tab Option Setting
Appearance Global Dark Theme: On
Window, GTK+, Cursor, Shell defaults
Icon: faience-icon-theme
Desktop Icons on Desktop On
Home, Trash, Mounted Volumes Unselect
Extensions Places status indicator On
Removable drive menu On
Systemmonitor On
Windows list On
Insensitive message tray On
Lock keys On
No topleft hot corner On
Fonts Window Titles Cantarell Bold, 11
Interface Cantarell, 11
Documents Sans, 11
Monospace Monospace, 10
Hinting Slight
Antialiasing Rgba


From the GNOME disk utility:

  • Enable write cache (since have battery):

    Settings > Drive Settings > Write Cache > On.

  • Mount options handled automatically ([erases fstab entries]):

    Partition Settings > Edit Mount Options > Automatic Mount Options > On.

  • Reboot and re-enable swap.


Select Main Menu from menu to and remove unused apps.

Login sound


GNOME Program Settings

Various program setups.


Trailing newline eliminate:

gsettings set org.gnome.gedit.preferences.editor ensure-trailing-newline false
Tab Option Setting
View Display right margin at column: Check, 80
Highlight current line Check
Editor Tab width: 2
Insert space instead of tabs Check
Autosave file every X minutes Check
Font & Colors Color Scheme Oblivion
Plugin Color Scheme Editor Check


Tab Option Setting
Views View new folders using: List View
Sort folders before files check
Behavior Include Delete command… check

Passwords and Keys

Create a key to encrypt files (takes about 10 minutes):

File > New > PGP Key > Name > Email > Defaults > Passphrase.


Tab Option Setting
General Show menubar by default on new uncheck
Use dark theme variant check
Open new terminals in: Tab
Profile > Edit sub-menu
General Terminal bell uncheck

Terminal inset to match gedit width:

echo -e "TerminalScreen {\n  -VtrTerminal-inner-border: 0px 2px 2px 0px;\n}" > ~/.config/gtk-3.0/gtk.css


Default save directory:

gsettings set org.gnome.gnome-screenshot auto-save-directory file:///home/todd/Desktop

Program Settings

Other program setups.


Some setting changes require an application-restart.

Tab Option Setting
Initial document settings Mime-type text/css
Show line numbers uncheck
Wrap lines check
Tab width: 2
Insert spaces instead of tabs check
Editor settings Wrap lines on right margin ind. check
Editor settings: Fonts & Highlight cursor position check
Cursor highlight color Green1
Current line color DarkGrey2
Editor settings: Text sty. searchresult #BF75D0
blockmatch fg:LghtGray2
function Purple1
string-no-spell-check #7E7103
string #C5B000
attribute Blue1
Files Strip trailing spaces on save check
User interface Sidebar position right
User interface: Fonts and Document tab error color #681B1B
Document tab loading color
Document tab modified color Blue1


mkdir ~/.config/burp
echo -e "User=Gently\nCookies=~/.config/burp/cookies" > \



Gmail as default

Run “Gnome Gmail” from menu.


lnk /usr/share/applications/keepassx.desktop ~/.config/autostart/
# xorg not a serviceyet #echo -e "[Unit]\nDescription=Password Manager\n\n[Service]\nExecStart=/usr/bin/keepassx\nEnvironment=DISPLAY=:0\n\n[Install]\nWantedBy=????" > ~/.config/systemd/user/keepassx.service


mkdir ~/.config/mpd/
vimdiff /usr/share/doc/mpd/mpdconf.example ~/.config/mpd/mpd.conf
ln -s /usr/lib/systemd/user/mpd.service ~/.config/systemd/user/
systemctl --user start  mpd
systemctl --user enable mpd


cp /etc/rygel.conf ~/.config/
curl -L -o ~/.config/systemd/user/rygel.service
systemctl --user enable rygel
systemctl --user start  rygel


sudo modprobe vboxdrv
echo "vboxdrv" | sudo tee /etc/modules-load.d/virtualbox.conf
sudo gpasswd -a $USER vboxusers
mkdir -p  ~/.config/VirtualBox/vm # keep everything together
chattr +C ~/.config/VirtualBox/vm # no COW btrfs
  • File > Preferences (VirtualBox GUI preferences):
  • General > Default Machine Folder: ~/.config/VirtualBox/vm
  • Update > Check for Updates: uncheck


Home directory re-genesis

When something goes unexpected on my computer, I may begin by looking in the home directory. I was having several program loadings that were taking a good bit of time that I couldn’t discover a reason of its occurrence. This was a new behavior and I couldn’t solve the reason for it. What I ended up doing was creating a new user and copying the files I trusted over there… it wasn’t as hard a process as I thought it might be.

The quick and the damned

In the past, I found myself getting into a routine of cleaning out my home directory. I did this every year, twice a year. I did this because usually a quirk developed here or there, but also because I’m very type A. Why this happens can be of one of several reasons like with the development of a new feature to a program, or an older setting interfering with that new feature, databases get too large…

Losing settings is a drag. The methodology we learn to interact with our programs is much better respected. However, performing this action can become necessary. I do this only when I have to these days.

All work and no play is alright

… if things get done ☺. Going through all the files, is nodoubt, a laborious process. However, the result is worth it when everything is running correctly again.

To begin, I create a new user:

useradd --gid users --groups games,wheel --shell "/bin/bash" newuser
install --directory --owner=username --group=users --mode=700 /home/newuser
passwd newuser

I then put all the directories and trusted configurations in a list:


Then transfer them using rsync:

rsync --archive --files-from=include.txt --exclude-from=exclude.txt /home/olduser/ /home/newuser/

Since both users are in the same initial group (users) I just need to change user ownership from the old own to the new and then I’m done:

find /home/newuser/ -user olduser -exec chown newuser {} \;

Vim colorscheme tailoring

If wanting to try a an edit in a colorscheme it can be done in a way that will not require writing to the original file.

Design considerations

Overrides for the colorscheme resemble that which are in the colorscheme file itself. It may be useful to begin by reading the original colorscheme file. Doing so can give an idea to the author’s thinking and at times they will detail their design philosophy. Global Vim colorschemes that are located in the /usr/share/vim/vimfiles/colors/ directory.

Override temporarily


To override a new value, Vim has built-in, on-the-fly, colorscheme alteration support. To get an overview of what all the values look like:


To see a specific value (tip: have wildmenu enabled to see tab-completions):

:highlight CursorLine


To override a value, enter the value:

:highlight CursorLine ctermbg=234

To know what colors are available in the xterminal, a number of references/programs can likely be used. I myself have created a script called xtermcolors that will display them; it is part of my genscripts package.

Override plugin

To begin, the plugin will need obtained. Arch Linux users can install it from the AUR with the vim-plugin-aftercolors package. This plugin enables the vim/after/colors directories. In these directories, files can be added that have the ability to override colorscheme values. The local version of the directory is located at ~/.vim/after/colors. Create it if it doesn’t exist.

Override file

Override values are put in a file with the name that matches the colorscheme file (e.g. ~/.vim/after/colors/desert.vim). The values are in the same format as from the colorscheme file and from temporary overrides. An example:

"highlight Visual     ctermbg=240
highlight CursorLine ctermbg=234

Save the file. If the colorscheme is open in another terminal, the colorscheme can be reloaded to view the edit:

:colorscheme desert

rback – a generic, local, rsync-based, backup and restore script


rback is a generic backup and restore script. rback wraps common functions of rsync to aggregate backup necessities. rback defines:

  1. The copy options.
  2. The source and destination directories.
  3. The files, folders… to include or exclude.

rback is repository-based to allow for multiple backup types (like full system backups, configurations…). It is only for local backups (i.e. the same computer that it resides on). Additionally, rback includes a diff method for working with text files.


rback - a generic, local, rsync-based, backup and restore script
  -r, --repo    - repository select                     : -R repository new
  -i, --include - include list add files, folders...    : -I include list edit
  -e, --exclude - exclude list add files, folders...    : -E exclude list edit
  -x, --xecute  - execute a: restore, backup, or diff
  = overrides  =
  -c, --confdir - configuration dir. from livecd, e.g.  : -C configuration edit
  -s, --srcdir  - source directory,  alternate specify
  -d, --dstdir  - destination dir.,  alternate specify
  -j, --justdo  - no confirm

For more information, RTFW (read the fun manual). :)


Get every new post delivered to your Inbox.

Join 58 other followers