The officially official Devuan Forum!

You are not logged in.

#26 2019-02-07 23:25:13

fsmithred
Administrator
Registered: 2016-11-25
Posts: 1,201  

Re: Software update notifications in XFCE

Sorry I wasn't clear. It's doing just what you said it would do, before and after the edits.

Now I want to learn python so I can modify it. What's the python equivalent of notify-send "$check" and how do you make that run when you click on the icon? That would show the list of packages to be upgraded for a few seconds - long enough to know whether you want to bother opening synaptic (or a root terminal) or rather leave it until later.

Offline

#27 2019-02-08 00:37:25

franko
Member
Registered: 2019-02-04
Posts: 33  

Re: Software update notifications in XFCE

I have noticed I am receiving "mail" with logs from this script in /var/mail/<myusername>. I am not sure if it is caused by the script or otherwise, but I would like it to stop. XD Any ideas?

Offline

#28 2019-02-08 01:55:31

MiyoLinux
Member
Registered: 2016-12-05
Posts: 960  

Re: Software update notifications in XFCE

geki wrote:

MiyoLinux Thanks again - edited the script. Works just fine.

Thanks geki! smile


fsmithred wrote:

Sorry I wasn't clear. It's doing just what you said it would do, before and after the edits.

Now I want to learn python so I can modify it. What's the python equivalent of notify-send "$check" and how do you make that run when you click on the icon? That would show the list of packages to be upgraded for a few seconds - long enough to know whether you want to bother opening synaptic (or a root terminal) or rather leave it until later.

Sounds like a great idea, and I wish I knew the answer fsr. Sorry.


franko wrote:

I have noticed I am receiving "mail" with logs from this script in /var/mail/<myusername>. I am not sure if it is caused by the script or otherwise, but I would like it to stop. XD Any ideas?

Hmmm...I'm not getting any mail from the script. The only difference that I can think of is that I'm using i3 on ascii, I've only received one set of small updates since implementing the script,  and I'm using the updated script in which I removed SEVERAL of the things that are probably still on yours. Here's what my current update-notifier.py looks like...

#!/usr/bin/env python

"""
pyupdatesd: A simple yum update checker.

This script will watch for available yum updates and show a Gtk2 tray icon and
notification pop-up when updates become available.

This is intended for desktop environments like XFCE that don't have a native
PackageKit update watcher.

Set this script to run on session startup, and it will check for updates every
4 hours (by default; this is configurable in the source code).

This software is open domain and may be freely modified and distributed.

Requires: pygtk2

--Kirsle
http://sh.kirsle.net
"""

################################################################################
# Configuration Section Begins Here                                            #
################################################################################

c = dict(
    # The title to be shown on the pop-up and the icon tooltip.
    title = "Updates Available",

    # The message to be shown in the pop-up.
    message = "There are updates available to install.",

    # Icon to use in the system tray and pop-up.
    icon = "/usr/share/update-notifier/updates.svg",

    # Frequency to check for available updates.
    interval = 14400, # 4 hours

    # Command to run to check for available updates, and the expected status
    # code that indicates updates are available.
    check = "/usr/bin/apt-get -s dist-upgrade | /bin/grep -c '^Inst '",

    # Path to notify-send (set to None if you don't want notifications)
    notify = "/usr/bin/notify-send",
)

################################################################################
# Configuration Section Ends Here                                              #
################################################################################

import gtk
import gobject

import commands
import subprocess
from time import time

def onClick(widget):
    """Event handler for the tray icon being clicked."""
    widget.set_visible(False)
    gobject.timeout_add(1, self.destroy)

def show_notify():
    subprocess.call([c['notify'],
        '-a', __name__,
        '-i', c['icon'],
        c['title'],
        c['message'],
    ])

tray = gtk.StatusIcon()
tray.set_from_file(c['icon'])
tray.set_title(c['title'])
tray.set_tooltip(c['title'])
tray.set_visible(False)
tray.connect('activate', onClick)

next_check = int(time()) + c['interval']
def main_loop():
    # Time to check?
    global next_check
    if int(time()) >= next_check:
        status = commands.getoutput(c['check'])

        # Updates?
        if status != "0":
            tray.set_visible(True)
            show_notify()
        elif tray.get_visible() == True and status == "0":
            # Updates have disappeared behind our back!
            tray.set_visible(False)

        next_check = int(time()) + c['interval']

    gobject.timeout_add(1000, main_loop)

gobject.timeout_add(1000, main_loop)

gtk.main()

# vim:expandtab

One thing I noticed is that if I use the script straight away with my interval of 14400, it doesn't seem to work. I had to change it back to the interval of 900 (well, I actually used 100 to test it). Logged out and back in, and it worked. So then I changed it to the 14400, logged out and back in, and it notified me 4 hours later like it should.

Last edited by MiyoLinux (2019-02-08 01:57:03)


I have been Devuanated, and my practice in the art of Devuanism shall continue until my Devuanization is complete. Until then, I will strive to continue in my understanding of Devuanchology, Devuanprocity, and Devuanivity.

Veni, vidi, vici vdevuaned. I came, I saw, I Devuaned. wink

Offline

#29 2019-02-08 02:47:54

stanz
Member
From: Northern Earth ~~ Brrrr
Registered: 2018-01-14
Posts: 133  

Re: Software update notifications in XFCE

I don't mean to distract the topic...but-
Hello Miyo & fsmithred! yikes  Kinda long-time, no type.. lol

back on topic (for now..hee hee hee)...
I'm getting nowhere with the dec mini and miyo asked:

MiyoLinux wrote:

a pure Beowulf build to test it on...

that's - "not" an ascii upgraded?

I'll try the mini iso on other laptop, soon. Other tower isn't unpacked yet wink
asta folks~~!


miyoisomix.i2p

Offline

#30 2019-02-08 03:08:23

fsmithred
Administrator
Registered: 2016-11-25
Posts: 1,201  

Re: Software update notifications in XFCE

# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).

Looks like there's a way to redirect it. (forward it to spammers?) I don't know where, but it's probably in a config file for cron.

You could remove exim4 and stop all system mail. I edited /etc/cron.d/update-notifier to run the update three times per day instead of every 30 minutes.

Edit: Oops! This makes it run every minute. I put it back the way it was (0/30 * * * *)

* 4 * * * root /usr/bin/apt-get update
* 12 * * * root /usr/bin/apt-get update
* 20 * * * root /usr/bin/apt-get update

Offline

#31 2019-02-08 10:09:49

MiyoLinux
Member
Registered: 2016-12-05
Posts: 960  

Re: Software update notifications in XFCE

stanz wrote:

I don't mean to distract the topic...but-
Hello Miyo & fsmithred! yikes  Kinda long-time, no type.. lol

back on topic (for now..hee hee hee)...
I'm getting nowhere with the dec mini and miyo asked:

MiyoLinux wrote:

a pure Beowulf build to test it on...

that's - "not" an ascii upgraded?

I'll try the mini iso on other laptop, soon. Other tower isn't unpacked yet wink
asta folks~~!

stanz! Man, it's good to hear from you! smile  Hope you've been well!

You're correct...I was referring to a pure beowulf system rather than an upgrade from ASCII to beowulf. wink

Take care friend!

Last edited by MiyoLinux (2019-02-08 10:10:52)


I have been Devuanated, and my practice in the art of Devuanism shall continue until my Devuanization is complete. Until then, I will strive to continue in my understanding of Devuanchology, Devuanprocity, and Devuanivity.

Veni, vidi, vici vdevuaned. I came, I saw, I Devuaned. wink

Offline

#32 2019-02-08 13:47:09

fsmithred
Administrator
Registered: 2016-11-25
Posts: 1,201  

Re: Software update notifications in XFCE

Played with it some more. Instead of disabling the line that starts synaptic, it can be changed.

Original line 48:

gui = "/usr/bin/gksu '/usr/sbin/synaptic --dist-upgrade-mode true --non-interactive'",

Alternates:

# Run synaptic without admin privs
#    gui = "/usr/sbin/synaptic",

# Run synaptic as root
#    gui = "/usr/bin/synaptic-pkexec",

# Run my script
    gui = "/usr/local/bin/show-updates",

Make sure to change line 78 back to 'True' (note: 'true' won't work)

    subprocess.call(c['gui'], shell=True)

and line 80 or so, revert to do_updates

#    gobject.timeout_add(1, self.destroy)
    gobject.timeout_add(1, do_updates)

/usr/local/bin/show-updates (don't forget to make it executable)

#!/usr/bin/env bash

list=$(apt-get -s dist-upgrade | awk '/^Inst/ { print $2 }')
notify-send "$list"

exit 0

Offline

#33 2019-02-08 18:33:35

MiyoLinux
Member
Registered: 2016-12-05
Posts: 960  

Re: Software update notifications in XFCE

fsmithred wrote:

Played with it some more.
# Run my script
    gui = "/usr/local/bin/show-updates",


/usr/local/bin/show-updates (don't forget to make it executable)

#!/usr/bin/env bash

list=$(apt-get -s dist-upgrade | awk '/^Inst/ { print $2 }')
notify-send "$list"

exit 0

Outstanding! I REALLY like that. I was trying to figure out a way to use yad, but I like the notification better. Do you mind if I use your script in the upcoming Miyo-i3 release?

I did modify it a little...

#!/usr/bin/env bash

list=$(apt-get -s dist-upgrade | awk '/^Inst/ { print $2 }')
notify-send "The following updates are available: 

$list"

exit 0
fsmithred wrote:

Edit: Oops! This makes it run every minute. I put it back the way it was (0/30 * * * *)

I'm not wise in the ways of cron-ism... tongue big_smile

What if 30 was changed to 480? Would that work? 480 minutes is 8 hours which is 3 times a day.

Last edited by MiyoLinux (2019-02-08 19:09:27)


I have been Devuanated, and my practice in the art of Devuanism shall continue until my Devuanization is complete. Until then, I will strive to continue in my understanding of Devuanchology, Devuanprocity, and Devuanivity.

Veni, vidi, vici vdevuaned. I came, I saw, I Devuaned. wink

Offline

#34 2019-02-08 19:50:05

fsmithred
Administrator
Registered: 2016-11-25
Posts: 1,201  

Re: Software update notifications in XFCE

Yes, please do use it. I tried putting the list in the notification that the python script uses, but it wanted to list all the updates on one line, so most of them were not visible. (That was down around line 88, change  c['message'], to c['check'],)

You don't need to add "The following updates are available" because there's a title in the notification window that says "Updates Available" (You could edit that message in the python script.

Try 480 and let us know what happens. Another way to do it would be to set apt to update periodically, but I'm not sure if that still works.

Offline

#35 2019-02-09 03:18:21

stanz
Member
From: Northern Earth ~~ Brrrr
Registered: 2018-01-14
Posts: 133  

Re: Software update notifications in XFCE

Back @`cha Miyo  smile  I (we) just packed up & moved  yikes
But thats off-forum chat...{later}  tongue

MiyoLinux wrote:

You're correct...I was referring to a pure beowulf system rather than an upgrade from ASCII to beowulf. wink

I best get`er in gear & catch up on the new process...not using vm's for it, tho everyone is doing well
that way.

Will type ya later when I got partitions setup,
asta miyo ~~

Last edited by stanz (2019-02-09 03:27:29)


miyoisomix.i2p

Offline

#36 2019-02-11 21:22:23

franko
Member
Registered: 2019-02-04
Posts: 33  

Re: Software update notifications in XFCE

@fsmithred and @MiyoLinux

So, if I understand it right, the script is actually relying on a cron job of "apt-get update" done every 30 minutes for having fresh package data... and THAT is where I am getting the mail from. But wouldn't it be a more elegant solution if the script itself would just do an "apt update", instead of apt-get, as the check command, and thus dismissing the cron job altogether? Unlike "apt-get update", "apt update" outputs if there are upgrades available after updating repos. I'm just not sure how to implement it in the script itself...

Offline

#37 2019-02-11 21:45:08

franko
Member
Registered: 2019-02-04
Posts: 33  

Re: Software update notifications in XFCE

OK, I have tried to change only the check command in the script to this: check = "/usr/bin/apt update | /bin/grep -c 'upgraded'",

And I have removed the cron job, as redundant, if this works.

We'll see in time if it works now...

Last edited by franko (2019-02-11 21:47:58)

Offline

#38 2019-02-12 00:23:49

fsmithred
Administrator
Registered: 2016-11-25
Posts: 1,201  

Re: Software update notifications in XFCE

Last I checked, the man page for apt says not to use it in scripts. I don't know what bad things might happen if you do.

I got rid of the cron job and set up apt to update the cache once a day.

To do that, put this line in /etc/apt/apt.conf.d/10periodic. ("1" is once a day, "2" is every other day, etc.)

APT::Periodic::Update-Package-Lists "1";

See /usr/lib/apt/apt.systemd.daily for other options you can add to that file if you want to change from the default settings. (I don't know why it has that name.)

That said, I agree that it makes sense for the script to initiate the update. (Or for a postinstall script to make the change to apt.)


@miyo:
In beowulf, /lib/live/mount has changed to /run/live/medium

Offline

#39 2019-02-12 08:10:36

MiyoLinux
Member
Registered: 2016-12-05
Posts: 960  

Re: Software update notifications in XFCE

Well...I don't mind the cron job running. LOL! tongue

Finally figured it out...I think.

First, I wasn't getting any cron logs at all. I discovered that cron was commented out in the rsyslog.conf file.

Fixed that. Then noticed that in the cron log, it was saying that it had the wrong permissions...it was showing me as the owner of the file instead of root. So, I renamed the original file to update_notifier2, and created a new one as root named as the correct name of update_notifier, and copied the contents from the original file into it.

Here's the default cron job from the original...

*/30 * * * * root /usr/bin/apt-get update

Each asterisk represents a specific time-frame. There are 5 asterisks, and here are what they represent in order...

     *              *                    *                        *                            *
Minutes     Hours     Days of the month     Months            Days of the week
  0-59         0-23               1-31                   1-12        0-7 (Sunday is either 0 or 7)

That */ is very important. By using that, it's telling the cron job to run every 30 minutes of the day.

Here's what I'm currently testing...simply because I don't have much time right now...

* */2 * * * root /usr/bin/apt-get update

...which means that it should run the cron job everyday at 2 hour intervals...starting at 2:00 am. So, it should run at 2:00 am, 4:00 am, 6:00 am etc...

If this works, I'll change it to...

* */7 * * * root /usr/bin/apt-get update

...which will hopefully make it run 3 times a day at 7 hour intervals...7:00 am, 2:00 pm, and 9:00 pm. I'm not sure if a "minute" number is required or not. If it is, I'll use 5 for an example...

5 */7 * * * root /usr/bin/apt-get update

...would mean that it would run the cron job every 7 hours and 5 minutes. ???

We'll see...

fsmithred wrote:

@miyo:
In beowulf, /lib/live/mount has changed to /run/live/medium

Okay...thank you.

Last edited by MiyoLinux (2019-02-12 08:54:36)


I have been Devuanated, and my practice in the art of Devuanism shall continue until my Devuanization is complete. Until then, I will strive to continue in my understanding of Devuanchology, Devuanprocity, and Devuanivity.

Veni, vidi, vici vdevuaned. I came, I saw, I Devuaned. wink

Offline

#40 2019-02-12 09:29:48

ralph.ronnquist
Administrator
From: Clifton Hill, Victoria, AUS
Registered: 2016-11-30
Posts: 369  

Re: Software update notifications in XFCE

With * as "minute" it'll run every minute at the hours that divide evenly. So, you do need a specific minute number.

Offline

#41 2019-02-12 09:36:10

Geoff 42
Member
Registered: 2016-12-15
Posts: 267  

Re: Software update notifications in XFCE

fsmithred wrote:

Last I checked, the man page for apt says not to use it in scripts. I don't know what bad things might happen if you do.

I think the point is that apt is meant to be easy to use, but the interface is not guaranteed to be stable, so if you want to put it into a script then the other programs, such as apt-get, are meant to have stable interfaces.

Geoff

Offline

#42 2019-02-12 10:04:02

MiyoLinux
Member
Registered: 2016-12-05
Posts: 960  

Re: Software update notifications in XFCE

ralph.ronnquist wrote:

With * as "minute" it'll run every minute at the hours that divide evenly. So, you do need a specific minute number.

Thanks Ralph. I had already changed it to include 1 for the minute, because I saw that it wasn't working correctly. More waiting... tongue

Thank you.


I have been Devuanated, and my practice in the art of Devuanism shall continue until my Devuanization is complete. Until then, I will strive to continue in my understanding of Devuanchology, Devuanprocity, and Devuanivity.

Veni, vidi, vici vdevuaned. I came, I saw, I Devuaned. wink

Offline

#43 2019-02-12 18:48:14

franko
Member
Registered: 2019-02-04
Posts: 33  

Re: Software update notifications in XFCE

@fsmithred and @Geoff 42:

Indeed, when I tried greping from "apt update" in terminal, apt did output a warning about it not having a stable interface, and that therefore scripting it is discouraged, but the grep output was exactly what I expected it to be, so I figured it is probably stable enough for what we need here, and I put it in the python script, anyway. And in fact, I AM getting update notifications, just as expected. It works! :-)

Now, some might still protest against using apt in scripts, but this way we have one configuration file less, which makes it simpler. And if simpler gives the same result, than simpler is better, IMO.

What do you think Miyo?

Offline

#44 2019-02-12 21:04:10

fsmithred
Administrator
Registered: 2016-11-25
Posts: 1,201  

Re: Software update notifications in XFCE

"not stable" means that they might change the way it works. If it stops working, you'll notice that you're not getting notified about updates, and you can change the script then.

If anyone reading the thread knows python well enough to get it to feed the list of packages to notify-send, please tell me about it. I can get them to print all on one line, but I want one package per line the way my short script does it.

Offline

#45 2019-02-14 03:32:43

franko
Member
Registered: 2019-02-04
Posts: 33  

Re: Software update notifications in XFCE

Seems like I've actually screwed it up with my modifications... XD It was just showing up notification every so hours, no matter if there was or wasn't any updates. :-D I've tried to further tinker about the code, but to no avail. So I just went back to apt-get and the cron job and all as before. :-D

BTW, I think the correct syntax for the cron job to be run every 8 hours is: 0 */8 * * * root /usr/bin/apt-get update

Offline

#46 2019-02-15 05:21:48

MiyoLinux
Member
Registered: 2016-12-05
Posts: 960  

Re: Software update notifications in XFCE

Sorry...I've been busy with the latest i3 releases. Hope to have them uploaded to Sourceforge tomorrow (Feb. 16). smile

I ended up using this for the cron job on my personal update notifier...

45 */7 * * * root /usr/bin/apt-get update

...and I have the update-notifier.py checking for updates every 8 hours.

I've been so busy that I forgot to upload a new .zip file for anyone else who may want to try it. The one that I uploaded is the one that I've included on the upcoming i3 versions. Its cron job is set up for this...

45 */3 * * * root /usr/bin/apt-get update

...and the update-notifier.py checks for updates every 4 hours.       

Here's the link to download the .zip file if you're interested...

https://my.pcloud.com/publink/show?code … iQqy9qb2sk

Here are the instructions that are included...

Notifications for updates are presented with a desktop notification and an icon in the system tray.

The notifier will only notify you that updates are available. Clicking on the desktop notification or icon in the system tray WILL NOT perform any updates. You will have to do that manually through the terminal or synaptic.

When you click the icon in the system tray, a notification will appear on the desktop and display the updates that are available. This will allow you to see what's available and decide if you want to install the updates immediately or wait until later.

By default, the notifier will check for updates every 4 hours; however, you can change the time interval for that.

To change the time interval, open the update-notifier.py with your text editor as root. I'll use leafpad as the example, but substitute leafpad with your preferred text editor...

sudo leafpad /usr/share/update-notifier/update-notifier.py

When it opens, enable line numbers, and go to line 38. It looks like this...

interval = 14400, # 4 hours

The 14400 is 14400 seconds (which equals 4 hours).

60 x 60 x 4 = 14400

60 seconds x 60 minutes x 4 hours = 14400 seconds

If you want to change that to a different time interval, you'll have to convert your interval into seconds. For example, if you wanted it to check for updates every 5 hours, you would use the following...

60 x 60 x 5 = 18000

60 seconds x 60 minutes x 5 hours = 18000 seconds

So you would edit line 38 to read as...

interval = 18000, # 5 hours

VERY IMPORTANT: DO NOT PLACE A COMMA INSIDE THE NUMBERS! Such as, 18,000 (with a comma). The number MUST BE 18000 (without a comma). However DO PLACE A COMMA AFTER THE NUMBER as given in the examples above.
___________________________________________________

To install, open your file manager as root, and...

1. Place the update_notifier text file in /etc/cron.d/

2. Place the Update Notifier application in /etc/xdg/autostart/

3. Place the show-updates script in /usr/local/bin/

4. Place the update-notifier folder in /usr/share/

5. Reboot

Be aware...some window managers don't use /etc/xdg/autostart, so if you are using a window manager (such as i3), you will have to add the update-notifier.py to your autostart file. For example, I added the following line to my autostart section in i3...

exec --no-startup-id /usr/share/update-notifier/update-notifier.py
___________________________________________________

If the notifier isn't working, make sure that you have the following installed...

python-gtk2
libnotify-bin
python-notify


I have been Devuanated, and my practice in the art of Devuanism shall continue until my Devuanization is complete. Until then, I will strive to continue in my understanding of Devuanchology, Devuanprocity, and Devuanivity.

Veni, vidi, vici vdevuaned. I came, I saw, I Devuaned. wink

Offline

#47 2019-02-15 13:31:10

franko
Member
Registered: 2019-02-04
Posts: 33  

Re: Software update notifications in XFCE

MiyoLinux wrote:

I ended up using this for the cron job on my personal update notifier...

45 */7 * * * root /usr/bin/apt-get update

...and I have the update-notifier.py checking for updates every 8 hours.

I've been so busy that I forgot to upload a new .zip file for anyone else who may want to try it. The one that I uploaded is the one that I've included on the upcoming i3 versions. Its cron job is set up for this...

45 */3 * * * root /usr/bin/apt-get update

...and the update-notifier.py checks for updates every 4 hours.

If I am not mistaken, this is every 7 hours and 45 minutes, and every 3 hours and 45 minutes, respectively. Which is also fine.

Thank you for the updates :-)

Offline

#48 2019-02-15 20:27:19

MiyoLinux
Member
Registered: 2016-12-05
Posts: 960  

Re: Software update notifications in XFCE

Yes....well, mine runs at 45 minutes past every 7th hour starting at 7:00 am...

7:45 am, 2:45 pm, and 9:45 pm. Then it starts over at 7:45 am the next day.

The one in the .zip file download is...

3:45 am, 6:45 am, 9:45 am, 12:45 pm, 3:45 pm, 6:45 pm, and 9:45 pm. Then starts over at 3:45 am the next day.

I chose that route for the one included in the upcoming release, because it seemed like a reasonable compromise since I have no clue as to when a user may turn their computer on or how long they may leave their computer on. smile  tongue


I have been Devuanated, and my practice in the art of Devuanism shall continue until my Devuanization is complete. Until then, I will strive to continue in my understanding of Devuanchology, Devuanprocity, and Devuanivity.

Veni, vidi, vici vdevuaned. I came, I saw, I Devuaned. wink

Offline

#49 2019-02-15 20:34:40

franko
Member
Registered: 2019-02-04
Posts: 33  

Re: Software update notifications in XFCE

Are you sure? If I understand that syntax right, that means every 3:45 h since a computer is started. I believe 3 would mean at 3 am, and */3 means every 3 hours since you start a computer... Am I wrong about it? At least, that's what it seems to work like here on my machine...

Last edited by franko (2019-02-15 20:37:27)

Offline

#50 2019-02-15 23:13:22

MiyoLinux
Member
Registered: 2016-12-05
Posts: 960  

Re: Software update notifications in XFCE

franko wrote:

Are you sure? If I understand that syntax right, that means every 3:45 h since a computer is started. I believe 3 would mean at 3 am, and */3 means every 3 hours since you start a computer... Am I wrong about it? At least, that's what it seems to work like here on my machine...

I'm gonna have a brain-jerkdown thinking about this. LOL! tongue

According to my cron log, mine is working as I described. For instance, if I turn my computer on at 8:30 am (and using the 45 */3 * * * example), the cron job will do its first run at 9:45 am...despite the computer has only been on an hour and 15 minutes. However, the update-notifier.py script won't run until the computer has been on for 4 hours.

That's how mine is working...never know though...I might've jinxed it. LOLOLOL! tongue

Edited to add...

It's almost time for the cron job to run...I'll reboot and double-check. I'll report back.

Last edited by MiyoLinux (2019-02-15 23:17:08)


I have been Devuanated, and my practice in the art of Devuanism shall continue until my Devuanization is complete. Until then, I will strive to continue in my understanding of Devuanchology, Devuanprocity, and Devuanivity.

Veni, vidi, vici vdevuaned. I came, I saw, I Devuaned. wink

Offline

Board footer