Je partage également un vieux conky que j'ai créé il y a quelques années :
Si vous voulez l'utiliser, le code est complètement adapté à une résolution 1440x900, si la résolution est différente il faudra modifier l'ensemble des fichiers. De plus la météo est basé sur conkyforecast qui à l'heure actuelle ne marche plus à cause des abonnement qui sont devenu payant et très cher.
conkyrc
Code : Tout sélectionner
background no
update_interval 1.0
double_buffer yes
use_xft yes
override_utf8_locale
xftfont Sans:size=8
xftalpha 0.8
own_window yes
own_window_transparent yes
own_window_type override
own_window_hints undecorated,below,sticky,skip_taskbar,skip_pager
on_bottom yes
minimum_size 250 0
maximum_width 0
draw_shades no
draw_outline no
draw_borders no
draw_graph_borders yes
stippled_borders 8
border_margin 4
border_width 1
default_color white
default_shade_color black
default_outline_color black
alignment top_right
gap_x 30
gap_y 24
no_buffers yes
cpu_avg_samples 2
net_avg_samples 2
override_utf8_locale yes
use_spacer right
text_buffer_size 2048
######
TEXT
${font A bite:size=18}${color #689098}system$font$color${color black}
${voffset -12}${color #689098}${hr 2}
${color #626262}${execi 86400 lsb_release -si} ${execi 86400 lsb_release -sr} ${execi 86400 lsb_release -sc}${alignr}$machine
Kernel${alignr}$kernel
Intel Core Duo ${alignr}$freq_g GHz
Uptime ${alignr}$uptime
File System ${alignr}$fs_type
${font A bite:size=18}${color #79cbd6}processor$font$color${color black}
${voffset -12}${color #79cbd6}${hr 2}
${color #626262}CPU1 ${cpu cpu1}% ${goto 90}$alignc${cpubar cpu1 8,135}$alignr${platform coretemp.0 temp 1}°C
CPU2 ${cpu cpu2}% ${goto 90}$alignc${cpubar cpu2 8,135}$alignr${platform coretemp.1 temp 1}°C
TOP PROCESSES
${top name 1} $alignr${top cpu 1} %
${top name 2} $alignr${top cpu 2} %
${top name 3} $alignr${top cpu 3} %
${top name 4} $alignr${top cpu 4} %
${font A bite:size=18}${color #bcde57}memdisk$font$color${color black}
${voffset -12}${color #bcde57}${hr 2}
${color #626262}RAM${alignc}$mem / $memmax$alignc${alignr}$memperc %$alignr
$membar
SWAP${alignc}$swap / $swapmax$alignc${alignr}$swapperc %$alignr
$swapbar
/${alignc}$fs_used / $fs_size$alignc${alignr}$fs_used_perc %$alignr
${fs_bar /}
Home${alignc}${fs_used /home} / ${fs_size /home}$alignc${alignr}${fs_used_perc /home} %$alignr
${fs_bar /home}
${font A bite:size=18}${color #fbd109}network$font$color${color black}
${voffset -12}${color #fbd109}${hr 2}
${color #626262}External IP ${alignr}${exec cat $HOME/.conky/ip}
IP on wlan0${alignr}${addr wlan0}
Download Speed${alignr}${downspeed wlan0}/s
Uploaded Speed${alignr}${upspeed wlan0}/s
Total Downloads${alignr}${totaldown wlan0}
Total Uploads${alignr}${totalup wlan0}
${font A bite:size=18}${color #fe94a8}weather$font$color$color
${voffset -12}${color #fe94a8}${hr 2}
${color #626262}${execpi 1800 conkyForecast --location=FRXX0128 --template=/$HOME/.conky/conkyForecast.template}
conkyForecast.template
Code : Tout sélectionner
${alignr}[--datatype=OB], [--datatype=CO]
${alignr}Wind : [--datatype=WS --speedunit]
${alignr}Humidity : [--datatype=HM]
${alignr}Precipitation : [--datatype=PC]
${alignr}Sunrise : [--datatype=SR]
${alignr}Sunset : [--datatype=SS]
[--datatype=CC] : [--datatype=HT]${alignr}Visibility : [--datatype=VI]
${voffset -110}${font ConkyWeather:style=Bold:size=70}[--datatype=WF]${font}
[--datatype=DW --startday=1 --shortweekday]${goto 90}[--datatype=DW --startday=2 --shortweekday]${goto 167}[--datatype=DW --startday=3 --shortweekday]${goto 245}[--datatype=DW --startday=4 --shortweekday]
${goto 13}${font ConkyWeather:size=32}[--datatype=WF --startday=1 --endday=4 --spaces=3]${font}
$alignr Laste Update [--datatype=LU]
date
Code : Tout sélectionner
background no
update_interval 1.0
double_buffer yes
use_xft yes
override_utf8_locale
xftfont Purisa:size=8
xftalpha 0.8
own_window yes
own_window_transparent yes
own_window_type override
own_window_hints undecorated,below,sticky,skip_taskbar,skip_pager
on_bottom yes
minimum_size 352 0
maximum_width 0
draw_shades no
draw_outline no
draw_borders no
draw_graph_borders yes
stippled_borders 8
border_margin 4
border_width 1
default_color white
default_shade_color black
default_outline_color black
alignment top_left
gap_x 713
gap_y 284
no_buffers yes
cpu_avg_samples 2
net_avg_samples 2
override_utf8_locale yes
use_spacer right
text_buffer_size 2048
######
TEXT
${color #626262}${hr 2}
${voffset -38}${goto 250}${font A bite:size=18}date
${goto 24}${font SANTOS DUMONT:size=25}${color #6c95a0}${time %A %d %B %Y}
time
Code : Tout sélectionner
background no
update_interval 1.0
double_buffer yes
use_xft yes
override_utf8_locale
xftfont Purisa:size=8
xftalpha 0.8
own_window yes
own_window_transparent yes
own_window_type override
own_window_hints undecorated,below,sticky,skip_taskbar,skip_pager
on_bottom yes
minimum_size 468 0
maximum_width 0
draw_shades no
draw_outline no
draw_borders no
draw_graph_borders yes
stippled_borders 8
border_margin 4
border_width 1
default_color white
default_shade_color black
default_outline_color black
alignment top_left
gap_x 597
gap_y 502
no_buffers yes
cpu_avg_samples 2
net_avg_samples 2
override_utf8_locale yes
use_spacer right
text_buffer_size 2048
######
TEXT
${color #fe94a8}${hr 2}
${voffset -150}${goto 125}${font SANTOS DUMONT:size=118}${color #7ecbd5}${time %H:%M}
${voffset -144}${goto 377}${font A bite:size=18}${color #626262}time
fml
Code : Tout sélectionner
background no
update_interval 1.0
double_buffer yes
use_xft yes
override_utf8_locale
xftfont Purisa:size=8
xftalpha 0.8
own_window yes
own_window_transparent yes
own_window_type override
own_window_hints undecorated,below,sticky,skip_taskbar,skip_pager
on_bottom yes
minimum_size 465 0
maximum_width 465
draw_shades no
draw_outline no
draw_borders no
draw_graph_borders yes
stippled_borders 8
border_margin 4
border_width 1
default_color white
default_shade_color black
default_outline_color black
alignment top_right
gap_x 954
gap_y 362
no_buffers yes
cpu_avg_samples 2
net_avg_samples 2
override_utf8_locale yes
use_spacer right
text_buffer_size 2048
######
TEXT
${color #cfe59d}${hr 2}
${voffset -39}${font A bite:size=18}${goto 12}${color #626262}fuck my life
$alignc${font Purisa:size=7.5}${color #6c95a0}${execi 120 $HOME/.conky/fortune.sh}
html2text.py
Code : Tout sélectionner
#!/usr/bin/env python
"""html2text: Turn HTML into equivalent Markdown-structured text."""
__version__ = "2.38"
__author__ = "Aaron Swartz (me@aaronsw.com)" # R.I.P.
__copyright__ = "(C) 2004-2008 Aaron Swartz. GNU GPL 3."
__contributors__ = ["Martin 'Joey' Schulze", "Ricardo Reyes", "Kevin Jay North"]
# TODO:
# Support decoded entities with unifiable.
if not hasattr(__builtins__, 'True'): True, False = 1, 0
import re, sys, urllib, htmlentitydefs, codecs, StringIO, types
import sgmllib
import urlparse
sgmllib.charref = re.compile('&#([xX]?[0-9a-fA-F]+)[^0-9a-fA-F]')
try: from textwrap import wrap
except: pass
# Use Unicode characters instead of their ascii psuedo-replacements
UNICODE_SNOB = 0
# Put the links after each paragraph instead of at the end.
LINKS_EACH_PARAGRAPH = 0
# Wrap long lines at position. 0 for no wrapping. (Requires Python 2.3.)
BODY_WIDTH = 78
# Don't show internal links (href="#local-anchor") -- corresponding link targets
# won't be visible in the plain text file anyway.
SKIP_INTERNAL_LINKS = False
### Entity Nonsense ###
def name2cp(k):
if k == 'apos': return ord("'")
if hasattr(htmlentitydefs, "name2codepoint"): # requires Python 2.3
return htmlentitydefs.name2codepoint[k]
else:
k = htmlentitydefs.entitydefs[k]
if k.startswith("&#") and k.endswith(";"): return int(k[2:-1]) # not in latin-1
return ord(codecs.latin_1_decode(k)[0])
unifiable = {'rsquo':"'", 'lsquo':"'", 'rdquo':'"', 'ldquo':'"',
'copy':'(C)', 'mdash':'--', 'nbsp':' ', 'rarr':'->', 'larr':'<-', 'middot':'*',
'ndash':'-', 'oelig':'oe', 'aelig':'ae',
'agrave':'a', 'aacute':'a', 'acirc':'a', 'atilde':'a', 'auml':'a', 'aring':'a',
'egrave':'e', 'eacute':'e', 'ecirc':'e', 'euml':'e',
'igrave':'i', 'iacute':'i', 'icirc':'i', 'iuml':'i',
'ograve':'o', 'oacute':'o', 'ocirc':'o', 'otilde':'o', 'ouml':'o',
'ugrave':'u', 'uacute':'u', 'ucirc':'u', 'uuml':'u'}
unifiable_n = {}
for k in unifiable.keys():
unifiable_n[name2cp(k)] = unifiable[k]
def charref(name):
if name[0] in ['x','X']:
c = int(name[1:], 16)
else:
c = int(name)
if not UNICODE_SNOB and c in unifiable_n.keys():
return unifiable_n[c]
else:
return unichr(c)
def entityref(c):
if not UNICODE_SNOB and c in unifiable.keys():
return unifiable[c]
else:
try: name2cp(c)
except KeyError: return "&" + c
else: return unichr(name2cp(c))
def replaceEntities(s):
s = s.group(1)
if s[0] == "#":
return charref(s[1:])
else: return entityref(s)
r_unescape = re.compile(r"&(#?[xX]?(?:[0-9a-fA-F]+|\w{1,8}));")
def unescape(s):
return r_unescape.sub(replaceEntities, s)
def fixattrs(attrs):
# Fix bug in sgmllib.py
if not attrs: return attrs
newattrs = []
for attr in attrs:
newattrs.append((attr[0], unescape(attr[1])))
return newattrs
### End Entity Nonsense ###
def onlywhite(line):
"""Return true if the line does only consist of whitespace characters."""
for c in line:
if c is not ' ' and c is not ' ':
return c is ' '
return line
def optwrap(text):
"""Wrap all paragraphs in the provided text."""
if not BODY_WIDTH:
return text
assert wrap, "Requires Python 2.3."
result = ''
newlines = 0
for para in text.split("\n"):
if len(para) > 0:
if para[0] is not ' ' and para[0] is not '-' and para[0] is not '*':
for line in wrap(para, BODY_WIDTH):
result += line + "\n"
result += "\n"
newlines = 2
else:
if not onlywhite(para):
result += para + "\n"
newlines = 1
else:
if newlines < 2:
result += "\n"
newlines += 1
return result
def hn(tag):
if tag[0] == 'h' and len(tag) == 2:
try:
n = int(tag[1])
if n in range(1, 10): return n
except ValueError: return 0
class _html2text(sgmllib.SGMLParser):
def __init__(self, out=None, baseurl=''):
sgmllib.SGMLParser.__init__(self)
if out is None: self.out = self.outtextf
else: self.out = out
self.outtext = u''
self.quiet = 0
self.p_p = 0
self.outcount = 0
self.start = 1
self.space = 0
self.a = []
self.astack = []
self.acount = 0
self.list = []
self.blockquote = 0
self.pre = 0
self.startpre = 0
self.lastWasNL = 0
self.abbr_title = None # current abbreviation definition
self.abbr_data = None # last inner HTML (for abbr being defined)
self.abbr_list = {} # stack of abbreviations to write later
self.baseurl = baseurl
def outtextf(self, s):
self.outtext += s
def close(self):
sgmllib.SGMLParser.close(self)
self.pbr()
self.o('', 0, 'end')
return self.outtext
def handle_charref(self, c):
self.o(charref(c))
def handle_entityref(self, c):
self.o(entityref(c))
def unknown_starttag(self, tag, attrs):
self.handle_tag(tag, attrs, 1)
def unknown_endtag(self, tag):
self.handle_tag(tag, None, 0)
def previousIndex(self, attrs):
""" returns the index of certain set of attributes (of a link) in the
self.a list
If the set of attributes is not found, returns None
"""
if not attrs.has_key('href'): return None
i = -1
for a in self.a:
i += 1
match = 0
if a.has_key('href') and a['href'] == attrs['href']:
if a.has_key('title') or attrs.has_key('title'):
if (a.has_key('title') and attrs.has_key('title') and
a['title'] == attrs['title']):
match = True
else:
match = True
if match: return i
def handle_tag(self, tag, attrs, start):
attrs = fixattrs(attrs)
if hn(tag):
self.p()
if start: self.o(hn(tag)*"#" + ' ')
if tag in ['p', 'div']: self.p()
if tag == "br" and start: self.o(" \n")
if tag == "hr" and start:
self.p()
self.o("* * *")
self.p()
if tag in ["head", "style", 'script']:
if start: self.quiet += 1
else: self.quiet -= 1
if tag in ["body"]:
self.quiet = 0 # sites like 9rules.com never close <head>
if tag == "blockquote":
if start:
self.p(); self.o('> ', 0, 1); self.start = 1
self.blockquote += 1
else:
self.blockquote -= 1
self.p()
if tag in ['em', 'i', 'u']: self.o("_")
if tag in ['strong', 'b']: self.o("**")
if tag == "code" and not self.pre: self.o('`') #TODO: `` `this` ``
if tag == "abbr":
if start:
attrsD = {}
for (x, y) in attrs: attrsD[x] = y
attrs = attrsD
self.abbr_title = None
self.abbr_data = ''
if attrs.has_key('title'):
self.abbr_title = attrs['title']
else:
if self.abbr_title != None:
self.abbr_list[self.abbr_data] = self.abbr_title
self.abbr_title = None
self.abbr_data = ''
if tag == "a":
if start:
attrsD = {}
for (x, y) in attrs: attrsD[x] = y
attrs = attrsD
if attrs.has_key('href') and not (SKIP_INTERNAL_LINKS and attrs['href'].startswith('#')):
self.astack.append(attrs)
self.o("[")
else:
self.astack.append(None)
else:
if self.astack:
a = self.astack.pop()
if a:
i = self.previousIndex(a)
if i is not None:
a = self.a[i]
else:
self.acount += 1
a['count'] = self.acount
a['outcount'] = self.outcount
self.a.append(a)
self.o("][" + `a['count']` + "]")
if tag == "img" and start:
attrsD = {}
for (x, y) in attrs: attrsD[x] = y
attrs = attrsD
if attrs.has_key('src'):
attrs['href'] = attrs['src']
alt = attrs.get('alt', '')
i = self.previousIndex(attrs)
if i is not None:
attrs = self.a[i]
else:
self.acount += 1
attrs['count'] = self.acount
attrs['outcount'] = self.outcount
self.a.append(attrs)
self.o("![")
self.o(alt)
self.o("]["+`attrs['count']`+"]")
if tag == 'dl' and start: self.p()
if tag == 'dt' and not start: self.pbr()
if tag == 'dd' and start: self.o(' ')
if tag == 'dd' and not start: self.pbr()
if tag in ["ol", "ul"]:
if start:
self.list.append({'name':tag, 'num':0})
else:
if self.list: self.list.pop()
self.p()
if tag == 'li':
if start:
self.pbr()
if self.list: li = self.list[-1]
else: li = {'name':'ul', 'num':0}
self.o(" "*len(self.list)) #TODO: line up <ol><li>s > 9 correctly.
if li['name'] == "ul": self.o("* ")
elif li['name'] == "ol":
li['num'] += 1
self.o(`li['num']`+". ")
self.start = 1
else:
self.pbr()
if tag in ["table", "tr"] and start: self.p()
if tag == 'td': self.pbr()
if tag == "pre":
if start:
self.startpre = 1
self.pre = 1
else:
self.pre = 0
self.p()
def pbr(self):
if self.p_p == 0: self.p_p = 1
def p(self): self.p_p = 2
def o(self, data, puredata=0, force=0):
if self.abbr_data is not None: self.abbr_data += data
if not self.quiet:
if puredata and not self.pre:
data = re.sub('\s+', ' ', data)
if data and data[0] == ' ':
self.space = 1
data = data[1:]
if not data and not force: return
if self.startpre:
#self.out(" :") #TODO: not output when already one there
self.startpre = 0
bq = (">" * self.blockquote)
if not (force and data and data[0] == ">") and self.blockquote: bq += " "
if self.pre:
bq += " "
data = data.replace("\n", "\n"+bq)
if self.start:
self.space = 0
self.p_p = 0
self.start = 0
if force == 'end':
# It's the end.
self.p_p = 0
self.out("\n")
self.space = 0
if self.p_p:
self.out(('\n'+bq)*self.p_p)
self.space = 0
if self.space:
if not self.lastWasNL: self.out(' ')
self.space = 0
if self.a and ((self.p_p == 2 and LINKS_EACH_PARAGRAPH) or force == "end"):
if force == "end": self.out("\n")
newa = []
for link in self.a:
if self.outcount > link['outcount']:
self.out(" ["+`link['count']`+"]: " + urlparse.urljoin(self.baseurl, link['href']))
if link.has_key('title'): self.out(" ("+link['title']+")")
self.out("\n")
else:
newa.append(link)
if self.a != newa: self.out("\n") # Don't need an extra line when nothing was done.
self.a = newa
if self.abbr_list and force == "end":
for abbr, definition in self.abbr_list.items():
self.out(" *[" + abbr + "]: " + definition + "\n")
self.p_p = 0
self.out(data)
self.lastWasNL = data and data[-1] == '\n'
self.outcount += 1
def handle_data(self, data):
if r'\/script>' in data: self.quiet -= 1
self.o(data, 1)
def unknown_decl(self, data): pass
def wrapwrite(text): sys.stdout.write(text.encode('utf8'))
def html2text_file(html, out=wrapwrite, baseurl=''):
h = _html2text(out, baseurl)
h.feed(html)
h.feed("")
return h.close()
def html2text(html, baseurl=''):
return optwrap(html2text_file(html, None, baseurl))
if __name__ == "__main__":
baseurl = ''
if sys.argv[1:]:
arg = sys.argv[1]
if arg.startswith('http://'):
baseurl = arg
j = urllib.urlopen(baseurl)
try:
from feedparser import _getCharacterEncoding as enc
except ImportError:
enc = lambda x, y: ('utf-8', 1)
text = j.read()
encoding = enc(j.headers, text)[0]
if encoding == 'us-ascii': encoding = 'utf-8'
data = text.decode(encoding)
else:
encoding = 'utf8'
if len(sys.argv) > 2:
encoding = sys.argv[2]
data = open(arg, 'r').read().decode(encoding)
else:
data = sys.stdin.read().decode('utf8')
wrapwrite(html2text(data, baseurl))
fortune.sh
Code : Tout sélectionner
#!/bin/bash
# Fortunes aléatoires [VDM]
#
# Par Rikles66 ~ style.boubou [AT] gmail [POINT] com
#
#
# Il faut html2text.py pour le faire fonctionner
# * Le télécharger sur http://www.aaronsw.com/2002/html2text/html2text.py [Auteur : Aaron Swartz (http://www.aaronsw.com/)]
# * Copier le fichier html2text.py dans le répertoire où se trouve ce script
#
#
#
# ~ Have Fun ~
function VDM_RANDOM {
VDM_Source=`wget 'http://api.viedemerde.fr/1.2/view/random?key=readonly' -O- -q`
VDM_Auteur=`expr match "$VDM_Source" '.*<auteur>\(.*\)<\/auteur>' | python html2text.py`
VDM_Categorie=`expr match "$VDM_Source" '.*<categorie>\(.*\)<\/categorie>'`
VDM_Texte=$(expr match "$VDM_Source" '.*<texte>\(.*\)<\/texte>' | python $HOME/.conky/html2text.py | sed 's/"/"/g')
if [[ $VDM_Auteur = "" ]]; then VDM_Auteur="Anonyme "; fi
echo "$VDM_Texte
Par $VDM_Auteur(${VDM_Categorie})"
}
VDM_RANDOM
Et enfin pour terminer un script pour lancer le tout en même temps au démarrage :
lanceur.sh
Code : Tout sélectionner
#!/bin/bash
killall conky
if ! killall conky ;
sleep 15
then conky -c $HOME/.conky/time & conky -c $HOME/.conky/date & conky -c $HOME/.conky/conkyrc & conky -c $HOME/.conky/fml
echo ok
fi
exit 0
Les polices :
http://www.dafont.com/fr/santos-dumont.font
http://www.dafont.com/fr/a-bite.font
http://www.dafont.com/fr/weather.font
Le Wallpaper (Necessite quelques petites retouches dans Gimp pour effacer certains éléments):
http://customize.org/wallpapers/42074
Voili voilou, s'il manque un truc faites le moi savoir