SEARCH

Enter your search query in the box above ^, or use the forum search tool.

You are not logged in.

#1 2009-09-16 19:52:43

benj1
Wiki Wizard
From: Yorkshire, England
Registered: 2009-09-05
Posts: 1,084

the ultimate pipe menu thread

ok ive just discovered the joys of pipe menus
and as there doesnt seem to be a crunchbang forum thread so i thought i would start one.

ok heres mine, used for controlling MPD


#!/usr/bin/env python
#
# Author: Ben Holroyd <holroyd.ben@gmail.com>
# License: GPL 3.0+
#
# This script requires python-mpd
#
# Usage:
# Put an entry in ~/.config/openbox/menu.xml:
# <menu id="mpd" label="MPD" execute="~/.config/openbox/scripts/ompb.py" />
#
import mpd, os, sys, socket
mpdport = 6600
musicfolder ='/home/ben/music/'
filelist = True  #potentially slow and unwieldy with a large collection of music
playlist = True #same for this
program = sys.argv[0]

client = mpd.MPDClient()  
try:
    client.connect("localhost", mpdport)    
except socket.error:
    print "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
    print "<openbox_pipe_menu>"
    print "  <item label=\"MPD not running, click to start\">"
    print "    <action name=\"Execute\"><execute>mpd</execute></action>"
    print "  </item>"
    print "</openbox_pipe_menu>"
    sys.exit(0)    

song = client.currentsong()                      
stats = client.stats()
status = client.status() 

def play():
    if status['state'] == "stop" or status['state'] == "pause":
        client.play()
    elif status['state'] == "play":
        client.pause()
    
def volume(vol):
    if vol == "up":
        client.setvol(int(status['volume'])+10)
    elif vol == "down":
        client.setvol(int(status['volume'])-10)
           
try:
    if (sys.argv[1] == "play"):       play()
    elif (sys.argv[1] == "stop"):     client.stop()
    elif (sys.argv[1] == "prev"):     client.previous()
    elif (sys.argv[1] == "next"):     client.next()
    elif (sys.argv[1] == "add"):      client.add(sys.argv[2]); client.play()
    elif (sys.argv[1] == "clear"):    client.clear()
    elif (sys.argv[1] == "volume"):   volume(sys.argv[2])
    elif (sys.argv[1] == "playlist"): 
        client.delete(client.playlist().index(sys.argv[2]))
    elif sys.argv[1] == "random":
        client.random(int(not int(client.status()['random'])and True or False))
    elif sys.argv[1] == "repeat":
        client.repeat(int(not int(client.status()['repeat'])and True or False))
except IndexError:
    pass

def item_entry(indent, label, option = '', song = ''):
    """label = label on menu, option = play/pause/stop etc, song = path to song  """
    print "%s<item label=\"%s\">"%(indent, label)
    print "%s  <action name=\"Execute\"><execute>%s %s '%s'</execute></action>" % (indent, program, option, song)
    print "%s</item>" % (indent)
    
def file_walk(dir,indent):
    """ walks through music directory building a menu to view albums"""
    files = os.listdir(dir)
    files.sort()
    for file in files:
        path = os.path.join(dir,file)
        if os.path.isdir(path):
            print "%s<menu id=\"%s\" label=\"%s\">"%(indent, file, file)
            item_entry(indent+'  ','Add all to playlist','add' ,path.replace(musicfolder,''))
            print "%s  <separator />" % indent
            file_walk(path,indent+'  ')
            print "%s</menu>" % indent
        else:
            item_entry(indent,file,'add',path.replace(musicfolder,''))          
    indent = indent[2:]

def track_info(label):
    print "  <menu id=\"%s\" label=\"%s\">"%(label,label)
    print "    <item label=\"Artist: %s\"/>" % song['artist']
    print "    <item label=\"Album: %s\"/>" % song['album']
    print "    <item label=\"Tracklength: %.2f\"/>" % ((int(song['time'])/60)+(int(song['time'])%60.0/100))  
    print "    <item label=\"Track: %s\"/>" % song['track']
    print "    <item label=\"filetype: %s\"/>" % song['file'][song['file'].rfind('.')+1:]
    #print "    <item label=\"Genre: %s\"/>" % song['genre']
    print "  </menu>"


print "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
print "<openbox_pipe_menu>"
if status['state'] != "stop":
    track_info("Playing: %s - " % song['artist'])
    track_info(song['title'])
    print "  <separator />"
print "  <item label=\"Status: %s\"/>" % {'play':'Playing','pause':'Paused','stop':'Stopped'}[status['state']]    
print "  <separator />"
item_entry('  ', 'Play/Pause', 'play')    
item_entry('  ', 'Stop', 'stop')
item_entry('  ', 'Prev', 'prev')
item_entry('  ', 'Next', 'next')
print "  <separator />"
if filelist == True:
    print "  <menu id=\"Albums\" label=\"Albums\">"
    file_walk(musicfolder,'  ')
    print "  </menu>"
    print "  <separator />"
if playlist == True:
    print "  <menu id=\"Playlist\" label=\"Playlist\">"
    print "    <item label=\"Click to remove from playlist\"/>"
    print "    <separator />"
    for entries in client.playlist():
        item_entry('    ', entries, 'playlist', entries)
    print "  </menu>"
    print "  <separator />"
item_entry('  ', 'Clear Playlist', 'clear')
item_entry('  ', 'Random %s' % (int(status['random']) and '[On]' or '[Off]'), 'random')    
item_entry('  ', 'Repeat %s' % (int(status['repeat']) and '[On]' or '[Off]'), 'repeat')    
print "  <menu id=\"volume\" label=\"Volume [%s]\">" % (int(status['volume']) > 0 and status['volume']+'%' or 'mute') 
item_entry('    ', 'Volume + 10\% ', 'volume up')
item_entry('    ', 'Volume - 10\%', 'volume down')
print "  </menu>"
print "  <separator />"
print "  <menu id=\"stats\" label=\"Database Stats\">"
print "    <item label=\"Artists in database: %s\"/>" % stats['artists']
print "    <item label=\"Albums in database: %s\"/>" % stats['albums']
print "    <item label=\"Songs in database: %s\"/>" % stats['songs']
print "  </menu>"
print "</openbox_pipe_menu>"

to use you need to add an entry to ~/.config/openbox/menu.xml
(also accessible through the menu preferences-->openbox config --> edit menu.xml)
something like

<menu id="mpd" label="MPD" execute="path/to/ompb.py"/>

Last edited by benj1 (2009-09-16 19:54:07)


- - - - - - - - Wiki Pages - - - - - - -
#! install guide           *autostart programs, modify the menu & keybindings
configuring Conky       *installing scripts

Offline

Help fund CrunchBang, donate to the project!

#2 2009-09-16 23:14:32

anonymous
The Mystery Member
From: Arch Linux Forums
Registered: 2008-11-29
Posts: 9,418

Re: the ultimate pipe menu thread

Im stickying this topic and moving it to the Openbox section smile

Offline

#3 2009-09-16 23:43:27

benj1
Wiki Wizard
From: Yorkshire, England
Registered: 2009-09-05
Posts: 1,084

Re: the ultimate pipe menu thread

cool thanks smile


- - - - - - - - Wiki Pages - - - - - - -
#! install guide           *autostart programs, modify the menu & keybindings
configuring Conky       *installing scripts

Offline

#4 2009-09-17 01:20:59

illumin8
#! Junkie
From: Seattle
Registered: 2009-05-30
Posts: 407
Website

Re: the ultimate pipe menu thread

I have a semi-out of control pipe menu addiction...
Quodlibet controler, RSS feeds of Crunchbang forums, Weather, Gmail....
I found them all here....
http://icculus.org/openbox/index.php/Openbox:Pipemenus


Website    500px     DeviantArt
God never ends anything on a negative; God always ends on a positive. -- Edwin Louis Cole --

Offline

#5 2009-10-02 03:32:30

mclovinjester
New Member
Registered: 2009-10-02
Posts: 1

Re: the ultimate pipe menu thread

I just found a list on this and trying to start for a new one. I will just keep you updated on this.
I'm still searching for more information about this.

great thanks!

Offline

#6 2009-10-02 22:36:49

rsw
#! CrunchBanger
Registered: 2009-08-26
Posts: 100

Re: the ultimate pipe menu thread

I'm sure someone else has already thought of this, but I didn't see it mentioned.  You can use the 'places' pipe menu to simplify menu.xml and system administration.

I made a directory in /usr/ called "launchers" and to it I added a bunch of shortcuts to the programs I wanted.  Then I put:

<menu execute="obpipemenu-places /usr/launchers" id="launch" label="Programs"/>

into the menu.xml of each user.  Now not only can I edit the menu quickly and easily with my file manager (by drag-and-drop or with symlinks by cli) but I can also change the Programs menu for every account simultaneously by doing so.

I thought it was clever anyway.

Last edited by rsw (2009-10-02 22:37:21)

Offline

#7 2009-10-04 17:13:08

benj1
Wiki Wizard
From: Yorkshire, England
Registered: 2009-09-05
Posts: 1,084

Re: the ultimate pipe menu thread

rsw wrote:

I'm sure someone else has already thought of this, but I didn't see it mentioned.  You can use the 'places' pipe menu to simplify menu.xml and system administration.

I made a directory in /usr/ called "launchers" and to it I added a bunch of shortcuts to the programs I wanted.  Then I put:

<menu execute="obpipemenu-places /usr/launchers" id="launch" label="Programs"/>

into the menu.xml of each user.  Now not only can I edit the menu quickly and easily with my file manager (by drag-and-drop or with symlinks by cli) but I can also change the Programs menu for every account simultaneously by doing so.

I thought it was clever anyway.

good idea
another way would be to use the .desktop files in /usr/share/applications to generate a menu, then it would be auto updating


- - - - - - - - Wiki Pages - - - - - - -
#! install guide           *autostart programs, modify the menu & keybindings
configuring Conky       *installing scripts

Offline

#8 2009-10-23 04:36:38

jnb
#! Member
Registered: 2009-01-12
Posts: 71

Re: the ultimate pipe menu thread

obdate.sh

displays time and date

DateTime=$(date '+Time: %H:%M ')
DateDate=$(date '+Date: (%a) %d/%m ')
echo "<openbox_pipe_menu>"
echo "<item label=\"$DateTime\"/>"
echo "<item label=\"$DateDate\"/>"
echo "</openbox_pipe_menu>"

this one took a bit to figure out... damn \"/


obbattery.sh

Battery=$(acpi -b | grep "Battery" | sed -nr '/Battery/s/.*(\<[[:digit:]]+%).*/\1/p')
Thermal=$(acpi -t | grep "Thermal" | sed -nr "s/.*(\<[[:digit:]]+\.[[:digit:]]) degrees.*/\1°C/p" )
echo "<openbox_pipe_menu>"
echo "<item label=\"Batt: $Battery\"/>"
echo "<item label=\"Temp: $Thermal\"/>"

echo "</openbox_pipe_menu>"

Hope they are usefulllllll

Offline

#9 2009-10-26 17:00:45

benj1
Wiki Wizard
From: Yorkshire, England
Registered: 2009-09-05
Posts: 1,084

Re: the ultimate pipe menu thread

just done ones for getting tv listings from the radio times, basically a screenscraper so will only work for uk residents and isnt very portable. displays current programme and next.
theres also a '-t' flag so you can print out in without any xml

#! /usr/bin/env python
#
# Author: Ben Holroyd <holroyd.ben@gmail.com>
# License: GPL 3.0+
#
# Usage:
# Put an entry in ~/.config/openbox/menu.xml:
# <menu id="Listing" label="listing" execute="~/.config/openbox/scripts/tvlisting" />
#

from urllib import FancyURLopener
#channels we want to show
channellist = ['BBC1','BBC2','ITV1 London','Channel 4','Five']

address = "http://www.radiotimes.com/ListingsServlet?event=13&broadcastType=1&jspGridLocation=/jsp/tv_listings_grid.jsp&jspListLocation=/jsp/tv_listings_single.jsp&jspError=/jsp/error.jsp&listingsFormat=G"
    
s = FancyURLopener().open(address).read()
dict={}

def filldict (index):
    if index == -1: return
    def parse (index):#get title,time and channel from string and return
        desc = s[s.find("onMouseOver",index) : s.find("onmouseout",index)]
        desc = desc[desc.find("'")+1 : desc.rfind("'", 0, desc.rfind(","))]
        desc = desc.split('<br />')
        return [a.strip().strip('<b>').strip('</b>').replace("\\'","'") for a in desc]
        
    #get current program                
    t,prog1,channel,time1= parse(index)
    #and next
    t,prog2,c,time2=parse(s.find("onMouseOver",s.find("onmouseout",index)))
    #load info into a dictionary  
    dict[channel]=[prog1, time1, prog2, time2]    

    filldict(s.find('<div class="gridChannel">', index+1))

def showmenu(channel,list):
    print "  <menu id=\"%s\" label=\"%s\">"%(channel,channel)
    print "    <item label=\"Now: %s %s\"/>" % (list[0],list[1])
    print "    <item label=\"Next: %s %s\"/>" % (list[2],list[3])    
    print "  </menu>"
    
filldict(s.find('<div class="gridChannel">'))

import sys
if len(sys.argv) > 1 and sys.argv[1] == '-t':#just so you can print out plain text if you want
    for entries in channellist: 
        print entries +':\t'+dict[entries][0]+' '+dict[entries][1],
        print ' Then: '+dict[entries][2]+' '+dict[entries][3]
    sys.exit(0)

print "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
print "<openbox_pipe_menu>"
for entry in channellist: showmenu(entry,dict[entry])
print "</openbox_pipe_menu>"

- - - - - - - - Wiki Pages - - - - - - -
#! install guide           *autostart programs, modify the menu & keybindings
configuring Conky       *installing scripts

Offline

#10 2009-11-02 23:01:52

benj1
Wiki Wizard
From: Yorkshire, England
Registered: 2009-09-05
Posts: 1,084

Re: the ultimate pipe menu thread

ok i dont quite have the bandwidth to download the webpages for the above tvlistings script on demand so ive modified it to download the pages for a day and cache them

heres the new one
http://crunchbanglinux.org/pastebin/378
the -p and -t flags remain the same although they now show all programmes for the rest of the day,

to add channels
go to
http://www.radiotimes.com/ListingsServl … hannels=92
select the channel you want, and look at the address, for '&channels=xx'
some where near the end, thats the channel code you want, (you can also look through the page source for them)

then add that code and channel name to channellistdict (line 20) and the name to channellist (line 22)

here are the first few to get you started
BBC1=92, BBC2=105, ITV1 London=26, Channel 4=132, Five=134, BBC3=45,
BBC4=47, Dave=2050, E4=158, Film4=160, Fiver=2062, Five USA=2008, Gold=288, ITV2=185, ITV3=1859, ITV4=1961, More4=1959, Sky1=248, Sky3=1963, Sky Sports 1=262, Watch=2115, Virgin 1=2049

Last edited by benj1 (2009-11-03 10:10:09)


- - - - - - - - Wiki Pages - - - - - - -
#! install guide           *autostart programs, modify the menu & keybindings
configuring Conky       *installing scripts

Offline

#11 2009-11-11 15:08:14

anonymous
The Mystery Member
From: Arch Linux Forums
Registered: 2008-11-29
Posts: 9,418

Re: the ultimate pipe menu thread

Offline

#12 2009-12-29 22:37:05

danielrmt
#! CrunchBanger
Registered: 2009-11-13
Posts: 102

Re: the ultimate pipe menu thread

This is my contribution. A menu to connect to servers using Filezilla:

#!/bin/sh

obm_item() {
    echo "  <item label=\"$2\">"
    echo "    <action name=\"Execute\"><execute>$1</execute></action>"
    echo "  </item>"
}

echo '<?xml version="1.0" encoding="utf-8"?>'
echo '<openbox_pipe_menu>'

if [ -f ~/.filezilla/sitemanager.xml ]; then
    grep Name ~/.filezilla/sitemanager.xml | sed 's| *</\?Name> *||g' | while read i; do
        obm_item "filezilla -c 0/$i" "$i"
    done

    echo "<separator/>"
fi

obm_item "filezilla -s" "$(gettext -d filezilla 'Site Manager')"

echo '</openbox_pipe_menu>'

Offline

#13 2010-01-18 23:00:28

jpope
#! Junkie
From: USA
Registered: 2009-09-20
Posts: 281
Website

Re: the ultimate pipe menu thread

Here's one I just completed for checking battery status:

tM2FoOQ

obpipebattery.sh

And, here's another one I just completed based on mrpeachy's conky Here:

tM2FsNw

The Title line of each topic opens the first post of the thread and the 'Last Post' line opens the last post. smile

obpipecbf.sh V1.0

Updated the Active Forum topics pipemenu:
tM2F2NA
obpipecbf.sh V1.1

Now you have the option of choosing how many topic titles you want to show, just change the number for 'maxthreads'. The more topics you have though, the longer it will take to open the menu. Also, I now have it cleaning up the temp file that is created when opening the pipe menu. Still a work in progress...

EDIT: Added second pipe menu.
EDIT: Added new version.

Last edited by jpope (2010-01-20 05:19:20)


--
...old school #! user now mostly running Arch
jpope.org

Offline

#14 2010-01-19 17:06:42

mrpeachy
20% cooler
From: The Everfree Forest
Registered: 2009-11-08
Posts: 3,460

Re: the ultimate pipe menu thread

jpope wrote:

The Title line of each topic opens the first post of the thread and the 'Last Post' line opens the last post. smile

very nice!   i was thinking how cool it would be if conky allowed clickable links, but it doesnt, so here is the solution smile

Offline

#15 2010-03-15 12:15:48

danielrmt
#! CrunchBanger
Registered: 2009-11-13
Posts: 102

Re: the ultimate pipe menu thread

Another one. This will list all your backup profiles in grsync.

#!/usr/bin/env bash
#  This program is free software. It comes without any warranty, to
#  the extent permitted by applicable law. You can redistribute it
#  and/or modify it under the terms of the Do What The Fuck You Want
#  To Public License, Version 2, as published by Sam Hocevar. See
#  http://sam.zoy.org/wtfpl/COPYING for more details.

print_item() {
  echo "  <item label=\"$2\"><action name=\"Execute\"><execute>$1</execute></action></item>"
}

echo '<?xml version="1.0" encoding="utf-8"?>'
echo '<openbox_pipe_menu>'

print_item 'grsync' 'Edit backup profiles'

if [ -f ~/.grsync/grsync.ini ]; then
    echo '<separator/>'
    grep '^\[[^_].*\]$' .grsync/grsync.ini | sed -e's/^\[//g' -e's/\]$//g' | while read profile; do
        print_item "grsync -e -s '$profile'" "$profile"
    done
fi

echo '</openbox_pipe_menu>'

Offline

#16 2010-07-21 18:05:39

anonymous
The Mystery Member
From: Arch Linux Forums
Registered: 2008-11-29
Posts: 9,418

Re: the ultimate pipe menu thread

Offline

#17 2010-09-12 05:04:33

arpinux
#! Die Hard
From: Montréal, France
Registered: 2009-01-15
Posts: 687
Website

Re: the ultimate pipe menu thread

hi #!ers smile
i thought we can use conky-cli to display some info in pipe-menu.. something like that:
conky_temps_pipemenu_by_arpinux-d2yjmun.png

with this code : ibmtemps.sh

#!/bin/sh
HDD=$(/usr/local/bin/conky-cli -q -i 1 -t '${ibm_temps 2}')
CPU=$(/usr/local/bin/conky-cli -q -i 1 -t '${ibm_temps 0}')
GPU=$(/usr/local/bin/conky-cli -q -i 1 -t '${ibm_temps 3}')
echo "<openbox_pipe_menu>"
echo "<item label=\"hard drive:$HDD\"/>"
echo "<item label=\"processor:$CPU\"/>"
echo "<item label=\"graphic card:$GPU\"/>"
echo "</openbox_pipe_menu>"

so, in fact, you can display many infos by this way wink

Offline

#18 2011-03-10 00:43:46

DeepDayze
#! Member
Registered: 2010-07-02
Posts: 72

Re: the ultimate pipe menu thread

Wow, nice way to go menu-happy yikes

Offline

#19 2011-05-26 17:50:31

anonymous
The Mystery Member
From: Arch Linux Forums
Registered: 2008-11-29
Posts: 9,418

Offline

#20 2011-05-26 18:52:28

Sector11
77345 ¡#
From: SR11 Cockpit
Registered: 2010-05-05
Posts: 11,682
Website

Re: the ultimate pipe menu thread

arpinux wrote:

hi #!ers smile
i thought we can use conky-cli to display some info in pipe-menu.. something like that:
conky_temps_pipemenu_by_arpinux-d2yjmun.png

with this code : ibmtemps.sh

#!/bin/sh
HDD=$(/usr/local/bin/conky-cli -q -i 1 -t '${ibm_temps 2}')
CPU=$(/usr/local/bin/conky-cli -q -i 1 -t '${ibm_temps 0}')
GPU=$(/usr/local/bin/conky-cli -q -i 1 -t '${ibm_temps 3}')
echo "<openbox_pipe_menu>"
echo "<item label=\"hard drive:$HDD\"/>"
echo "<item label=\"processor:$CPU\"/>"
echo "<item label=\"graphic card:$GPU\"/>"
echo "</openbox_pipe_menu>"

so, in fact, you can display many infos by this way wink

ARP!!!!!!!!!  You sly dog you!  Now that's great!
This I play with!!  smile

Thank you!


#! Forum Moderator | To #! or not to #!?  That is the question!
#! Conky = 16 Threads & the Conky Archives | Conky PitStop | OHCG'er
StartPage -  protect your privacy   |   BBQLinux

Offline

#21 2011-05-26 18:54:42

Sector11
77345 ¡#
From: SR11 Cockpit
Registered: 2010-05-05
Posts: 11,682
Website

Re: the ultimate pipe menu thread


Thanks for the link --- another to look into!


#! Forum Moderator | To #! or not to #!?  That is the question!
#! Conky = 16 Threads & the Conky Archives | Conky PitStop | OHCG'er
StartPage -  protect your privacy   |   BBQLinux

Offline

#22 2011-05-26 20:18:12

hardran3
#! Junkie
From: forest town, lake land
Registered: 2011-02-26
Posts: 360

Re: the ultimate pipe menu thread

Sector11 wrote:

Thanks for the link --- another to look into!

I was so glad when I found it. Makes MoC even better!

Offline

#23 2011-07-14 17:40:13

jmbarnes
#! Junkie
Registered: 2009-05-04
Posts: 250

Re: the ultimate pipe menu thread

My first pipemenu: a (recursive) directory listing by time modified. Much like the included place menu, except it list files from newest to oldest rather than alphabetical order.  Should descend into sub-directories and do the same (I've had a unknown hits and misses with this). It cuts off long file names after 20 characters, but this is easily changed.

I use it to call up recently added media in vlc. At the beginning of the script, you'll want to tell it what program you'd like to open the files with (the VIDPRG variable.)

It takes the directory you want to lookup as its one command line option. (e.g. pypipe.py /media/tv ).

I'm just beginning to learn python, so it is written in that. Comments appreciated.

You can check it out here: http://crunchbanglinux.org/pastebin/1123

In the future:

  • use default program to open based on file type (no clue on this really. Could use extension-lists and different program names as a workaround)

  • add a "browse..." to the top of each menu/submenu

Last edited by jmbarnes (2011-07-14 17:40:33)


IRC: PizzaAndWine     Script bits: Incremental Backup | Sleep Timer

Offline

#24 2011-07-14 18:48:26

anonymous
The Mystery Member
From: Arch Linux Forums
Registered: 2008-11-29
Posts: 9,418

Re: the ultimate pipe menu thread

jmbarnes wrote:

use default program to open based on file type (no clue on this really. Could use extension-lists and different program names as a workaround)

You could try exo-open (for Xfce) or xdg-open for opening files based on mimetype.

Offline

Help fund CrunchBang, donate to the project!

#25 2011-07-14 20:26:28

jmbarnes
#! Junkie
Registered: 2009-05-04
Posts: 250

Re: the ultimate pipe menu thread

anonymous wrote:

You could try exo-open (for Xfce) or xdg-open for opening files based on mimetype.

As always Anonymous comes through.  This works perfectly.

Now includes:

  • Uses xdg-open to open program based on user defaults. (Exo-open also available in script)

  • White-space handling is better (i.e. there is whitespace handling at all now.)

  • Each directory has a "Browse here..." at top

Known bugs:

  • FIXED: Doesn't handle characters like '&' well because Openbox's XML doesn't much like them.

Updated:http://crunchbanglinux.org/pastebin/1128

Last edited by jmbarnes (2011-07-15 18:20:18)


IRC: PizzaAndWine     Script bits: Incremental Backup | Sleep Timer

Offline

Board footer

Powered by FluxBB

Copyright © 2012 CrunchBang Linux.
Proudly powered by Debian. Hosted by Linode.
Debian is a registered trademark of Software in the Public Interest, Inc.

Debian Logo