I have been working on a project I call overkill for the past few months or so. It's is a publish-subscribe framework (or a functional-reactive programming framework if you want to use the latest buzz word) for collecting and distributing information on a local machine. Personally, I use it to generate my status bar (hence the name, overkill). See the project page for more information.
Blog
Overkill Initial Release
May 2013 Screenshots
New GPG Key
It's been a while but I figured I should probably make a new GPG key with increase security (1024 to 4096 bits) and expiring subkeys.
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
As of 'Tue, 07 May 2013 00:50:01 -0400', I have transitioned from my old key
to a new one in order to increase the security and sign with expiering
subkeys instead of my secure master key.
My old key fingerprint was:
8F12 8D02 2B69 004E 8CF3 1890 D854 9F57 252B A385
My new key fingerprint is:
327B 20CE 21EA 68CF A774 8675 7C92 3221 5899 410C
And the full new key:
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v2.0.19 (GNU/Linux)
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
MXJjnYZCKLva+UJATvt09dQ=
=hRIT
-----END PGP PUBLIC KEY BLOCK-----
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.19 (GNU/Linux)
iQIcBAEBAgAGBQJRiI01AAoJEHySMiFYmUEMZzIP/Asu/YJ6QloHkLso3rT4ihFP
suVLXWouks6IyiCLr96Erf/+50D36KXd07/aMD54rNrvIPiq7RNhcQasyH7zAQtq
bGJIQqZATLfp3EjVvHx3H4szHyA+pW+HU1uzh6HigAfQMGTpOsZsvf8SLmB8sohj
HzMyJdQCzDKXQLotGaSQ4n79Xr2K7lQATz10aOc0qGZBENHkFvYJ7MNEFv+LuWio
vVwduuStvBOYRts6z8pHv7M3ZgzOiqSx7vtRCXRwuRLAzisc09ogNRp9CXKWkO9F
bkiMKOhHvRWMpthPcgVxbA9151n8LNDL02hdSJ2LhJm10I6XKX1dhzqVtaVLXkbd
pLRvkyNg4PbFD5bd5TPmsDoVI3mW/CsNgDlCHDeMf8aS1fGxhBQVO6+X/YmiUc9o
lqSdOnt2Kf1gTWSFFjJ32GgpLD6ajAkvxqcDZTCXbdaqr83jBbAaZ4EiHIKruOqT
slIEI8KbY9LItMVZk55435H2MzDvazPOPrW0uRrWExnE5A4n6szcLrkEIaG99AS3
YVC+ycEHWNtaDyvyXb2mbJICtIs8y/Nhrz2WT52fDYFJLakVp04Zgvdbn732ISpg
AW+sJ6Sg/sHpX4V2SV290W4wDCJ6LBqxPzb0zs/2JvGR+J/ByIQpoD5W6XdaHJn5
tTcsGtiQ0e7BNC/poqLViEYEARECAAYFAlGIjTUACgkQ2FSfVyUro4W2wwCcCEEf
kUu9EqFYq0Vdrhqsd5bOIp0An237odqQt2MFZVNM7YtsH6cPwk2z
=/NJg
-----END PGP SIGNATURE-----
My Configuration Files
I have finally got around to making a git repository for my configuration files.
Here they are: http://github.com/Stebalien/dotfiles
Turn the Zim Desktop Wiki into a calendar
Why
I recently switched to Arch Linux and decided to ditch evolution (a good but bloated program). Claws Mail works perfectly as an email manager but I couldn't get its calendar plugin to work properly. I have been using Zim for a while and noticed that it had a very basic calendar plugin; this was exactly what I needed. The plugin allows users to create pages in their wikis for individual days: no complex forms to fill out, just a simple page to keep track of what you are doing on a given day.
What
As Zim lacks desktop integration so I wrote two python scripts for conky integration:
zim-conky_cal.py
Prints a calendar (like the cal command) with the current date and appointments highlighted.
zim-conky_events.py
Lists the next 5 events or all of the events in the current month and the next, whichever comes first.
I also wrote a program for adding events to the calendar (zim-cal.py and zim-cal.ui). Select some text, run the program and double click the date to add your text to calendar. You can also input your own text by clicking the edit button (the big button on the right).
How
First: Enable the calendar plugin (Edit->Preferences->Plugins->Calendar).
Download: zimcal.tar.bz2
Conky scripts
- Edit CAL_PATH to point to the folder that stores your Zim calendar.
- Add
${execpi 300 /path/to/zim-conky_cal.py}
and${execpi 300 /path/to/zim-conky_events.py}
to your conkyrc
Zim-Cal program
- Edit CAL_PATH to point to the folder that stores your Zim calendar.
- Make PROG_PATH point to the directory where you put "zim-cal.ui"
- If you intend to use this program regularly, you should probably assign a global hotkey to it in your window manager.
Make Gksu and Policykit red
I was bored one day and decided to make my gksu(do) and policykit dialogs red. The results are actually quite nice.
Add this to the bottom of your gtkrc file:
style "gksu" {
bg[NORMAL] = "#770000"
bg[ACTIVE] = "#550000"
bg[PRELIGHT] = "#990000"
bg[SELECTED] = "#550000"
bg[INSENSITIVE] = "#220000"
}
widget "GksuuiDialog*" style "gksu"widget "PolkitGnomeAuthenticationDialog*" style "gksu"
Packagekit with apturl
Although I no longer use packagekit, I still have my apturl script so I thought I would post it. This script will allow you to open apt:// scripts with packagekit. (Just save this to a file, mark it executable, and tell your browser to open apt scripts with it).
#!/bin/bash
/usr/bin/gpk-install-package-name $(echo $* | sed -e 's/apt:\/\?\/\?//')
Useful Bash functions
cdd: cd and list the files.
function cdd(){ cd $* ls --color}
changelog: get the change log for a program
changelog() {
log=/usr/share/doc/"$*"/changelog*
if [ -r $log ]; then
less $log
unset log
else
log=/usr/share/doc/"$*"/CHANGELOG*
if [ -r $log ]; then
less $log
fi
fi
}
mkdircd: make a directory and move in.
function mkdircd() {
mkdir $* cd ${!#}
}