diff --git a/game/arcade/abe/actions.py b/game/arcade/abe/actions.py
new file mode 100644
index 0000000000..14a0dabafd
--- /dev/null
+++ b/game/arcade/abe/actions.py
@@ -0,0 +1,39 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+#
+# Licensed under the GNU General Public License, version 3.
+# See the file http://www.gnu.org/licenses/gpl.txt
+
+from pisi.actionsapi import autotools
+from pisi.actionsapi import pisitools
+from pisi.actionsapi import shelltools
+from pisi.actionsapi import get
+
+import os
+
+datadir = "/usr/share/abe"
+
+def fixperms(d):
+ for root, dirs, files in os.walk(d):
+ for name in dirs:
+ shelltools.chmod(os.path.join(root, name), 0755)
+ for name in files:
+ shelltools.chmod(os.path.join(root, name), 0644)
+
+def setup():
+ shelltools.system("./autogen.sh")
+ autotools.configure("-with-data-dir=%s" % datadir)
+
+def build():
+ autotools.make()
+
+def install():
+ pisitools.dodir(datadir)
+ pisitools.dobin("src/abe")
+
+ for d in ["images", "sounds", "maps"]:
+ fixperms(d)
+ shelltools.copytree(d, "%s/%s/" % (get.installDIR(), datadir))
+
+ pisitools.dodoc("AUTHORS", "ChangeLog", "README*")
+
diff --git a/game/arcade/abe/files/abe-1.1-settings.patch b/game/arcade/abe/files/abe-1.1-settings.patch
new file mode 100644
index 0000000000..ea5809f738
--- /dev/null
+++ b/game/arcade/abe/files/abe-1.1-settings.patch
@@ -0,0 +1,12 @@
+diff -Naur --exclude '*.swp' abe-1.1/src/Menu.c abe-1.1.new/src/Menu.c
+--- abe-1.1/src/Menu.c 2005-03-05 08:20:04.000000000 -0800
++++ abe-1.1.new/src/Menu.c 2006-04-02 15:04:37.000000000 -0700
+@@ -116,7 +116,7 @@
+ if(n == SOUND_ENABLED || n == MUSIC_ENABLED)
+ return sound_loaded;
+ else
+- return 0;
++ return 1;
+ }
+
+ void
diff --git a/game/arcade/abe/files/abe.desktop b/game/arcade/abe/files/abe.desktop
new file mode 100644
index 0000000000..503a67074c
--- /dev/null
+++ b/game/arcade/abe/files/abe.desktop
@@ -0,0 +1,13 @@
+[Desktop Entry]
+Type=Application
+Version=1.0
+Encoding=UTF-8
+Name=Abe
+Name[tr]=Abe
+GenericName=Abe
+GenericName[tr]=Abe
+Icon=/usr/share/pixmaps/abe.png
+Exec=abe --window --size-6
+Terminal=false
+StartupNotify=false
+Categories=Application;Game;ArcadeGame;
diff --git a/game/arcade/abe/files/abe.png b/game/arcade/abe/files/abe.png
new file mode 100644
index 0000000000..10c9a31e3a
Binary files /dev/null and b/game/arcade/abe/files/abe.png differ
diff --git a/game/arcade/abe/files/flags.patch b/game/arcade/abe/files/flags.patch
new file mode 100644
index 0000000000..dd772acfd2
--- /dev/null
+++ b/game/arcade/abe/files/flags.patch
@@ -0,0 +1,12 @@
+diff -Nur abe-1.1-old/configure.in abe-1.1/configure.in
+--- abe-1.1-old/configure.in 2006-10-01 03:08:22.866256583 +0300
++++ abe-1.1/configure.in 2006-10-01 03:08:45.307844943 +0300
+@@ -52,8 +52,6 @@
+ dnl General options
+ dnl --------------------------------------------------------------------------
+ TR_CPPFLAGS=""
+-TR_CFLAGS="-O2 -Wall -fomit-frame-pointer -ffast-math -fexpensive-optimizations"
+-TR_CXXFLAGS="-O2 -Wall -fomit-frame-pointer -ffast-math -fexpensive-optimizations"
+ TR_LIBS=""
+
+ case "$host" in
diff --git a/game/arcade/abe/pspec.xml b/game/arcade/abe/pspec.xml
new file mode 100644
index 0000000000..be5fd272c6
--- /dev/null
+++ b/game/arcade/abe/pspec.xml
@@ -0,0 +1,55 @@
+
+
+
+
+ abe
+ http://abe.sourceforge.net/
+
+ PisiLinux Community
+ admins@pisilinux.org
+
+ GPLv2
+ abe
+ app:gui
+ Yet another platform game
+ Ancient pyramid explorer Abe makes his way through booby traps.
+ mirrors://sourceforge/abe/abe-1.1.tar.gz
+
+ libsdl-devel
+ sdl-mixer-devel
+
+
+ flags.patch
+ abe-1.1-settings.patch
+
+
+
+
+ abe
+
+ libsdl
+ sdl-mixer
+
+
+ /usr/share/doc
+ /usr/bin
+ /usr/share/abe
+ /usr/share/pixmaps
+ /usr/share/applications
+
+
+ abe.png
+ abe.desktop
+
+
+
+
+
+ 2021-05-10
+ 1.1
+ First release
+ Osman Erkan
+ osman.erkan@pisilinux.org
+
+
+
diff --git a/game/arcade/abe/translations.xml b/game/arcade/abe/translations.xml
new file mode 100644
index 0000000000..0fb9edcc90
--- /dev/null
+++ b/game/arcade/abe/translations.xml
@@ -0,0 +1,8 @@
+
+
+
+ abe
+ Platform oyunu
+ Eski piramitleri araştıran Abe kendisini bekleyen tehlikelerden ve tuzaklardan kurtulmaya çalışıyor.
+
+
diff --git a/network/connection/openvpn/actions.py b/network/connection/openvpn/actions.py
new file mode 100644
index 0000000000..ef8775d909
--- /dev/null
+++ b/network/connection/openvpn/actions.py
@@ -0,0 +1,60 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+#
+# Licensed under the GNU General Public License, version 3.
+# See the file https://www.gnu.org/licenses/gpl-3.0.txt
+
+from pisi.actionsapi import get
+from pisi.actionsapi import autotools
+from pisi.actionsapi import pisitools
+from pisi.actionsapi import shelltools
+
+j = "--enable-ssl \
+ --enable-crypto \
+ --disable-static \
+ --disable-systemd \
+ --enable-iproute2 \
+ --disable-selinux \
+ --enable-password-save \
+ "
+
+# this package needs a lot of work for init scripts etc.
+#pisitools.cflags.add("-DPLUGIN_LIBDIR=\\\"/usr/lib/openvpn\\\"")
+#shelltools.export("CFLAGS", "%s -DPLUGIN_LIBDIR=\\\"/usr/lib/openvpn\\\"" % get.CFLAGS())
+
+def setup():
+ autotools.configure(j)
+
+def build():
+ autotools.make()
+ shelltools.cd("src/plugins/auth-pam")
+ autotools.make()
+ shelltools.cd("../down-root/")
+ autotools.make
+ shelltools.cd("..")
+
+def check():
+ shelltools.system("./openvpn-test.sh")
+
+def install():
+ autotools.rawInstall("DESTDIR=%s" % get.installDIR())
+
+ for val in ["contrib", "sample/sample-config-files", "sample/sample-keys", "sample/sample-scripts"]:
+ pisitools.insinto("/%s/openvpn/%s" % (get.dataDIR(), val), "%s/*" % val)
+
+ pisitools.dodir("/etc/openvpn")
+ pisitools.dodir("/run/openvpn")
+ pisitools.domove("/usr/share/openvpn/sample/sample-config-files/server.conf", "/etc/openvpn")
+ pisitools.domove("/usr/share/openvpn/sample/sample-config-files/client.conf", "/etc/openvpn")
+ pisitools.domove("/usr/share/openvpn/sample/sample-config-files/firewall.sh", "/etc/openvpn")
+ pisitools.domove("/usr/share/openvpn/sample/sample-config-files/xinetd-server-config", "/etc/openvpn")
+ pisitools.domove("/usr/share/openvpn/sample/sample-config-files/xinetd-client-config", "/etc/openvpn")
+ pisitools.domove("/usr/share/openvpn/sample/sample-config-files/loopback-server", "/etc/openvpn")
+ pisitools.domove("/usr/share/openvpn/sample/sample-config-files/loopback-client", "/etc/openvpn")
+ pisitools.domove("/usr/share/openvpn/sample/sample-config-files/openvpn-startup.sh", "/etc/openvpn")
+ pisitools.domove("/usr/share/openvpn/sample/sample-config-files/openvpn-shutdown.sh", "/etc/openvpn")
+ pisitools.domove("/usr/share/openvpn/sample/sample-keys/*.key", "/etc/openvpn")
+ pisitools.domove("/usr/share/openvpn/sample/sample-keys/*.crt", "/etc/openvpn")
+ pisitools.domove("/usr/share/openvpn/sample/sample-keys/*.pem", "/etc/openvpn")
+
+ pisitools.dodoc("COPYING", "COPYRIGHT.GPL", "README*")
\ No newline at end of file
diff --git a/network/connection/openvpn/comar/service.py b/network/connection/openvpn/comar/service.py
new file mode 100644
index 0000000000..ad3fe3fc7e
--- /dev/null
+++ b/network/connection/openvpn/comar/service.py
@@ -0,0 +1,90 @@
+from comar.service import *
+import os
+
+serviceType = "server"
+serviceDefault = "off"
+serviceDesc = _({"en": "OpenVPN",
+ "tr": "OpenVPN"})
+
+
+OPENVPN = "/usr/sbin/openvpn"
+PIDDIR = "/run/openvpn"
+WORKDIR = "/etc/openvpn"
+PIDFILE = ""
+
+
+MSG_NOCONF = _({"en": "%s doesn't contain any OpenVPN configuration file." % WORKDIR,
+ "tr": "%s herhangi bir OpenVPN yapılandırma dosyası içermiyor." % WORKDIR,
+ })
+
+@synchronized
+def start():
+ # Load tun
+ os.system("modprobe -q tun")
+
+ # Run startup script if defined
+ if os.path.exists(os.path.join(WORKDIR, "openvpn-startup.sh")):
+ os.system(os.path.join(WORKDIR, "openvpn-startup.sh"))
+
+ configs = [_c for _c in os.listdir(WORKDIR) if _c.endswith(".conf")]
+
+ if len(configs) > 0:
+ # There's at least 1 OpenVPN configuration to start
+
+ # Start every .conf in WORKDIR and run .sh if it exists
+ for conf in configs:
+ conf_name = conf.split(".conf")[0]
+ sh_name = os.path.join(WORKDIR, "%s.sh" % conf_name)
+ PIDFILE = os.path.join(PIDDIR, "%s.pid" % conf_name)
+
+ if os.path.exists(sh_name):
+ os.system(sh_name)
+
+ # Clean stale pid files
+ if os.path.exists(PIDFILE):
+ os.unlink(PIDFILE)
+
+ startService(command=OPENVPN,
+ args="--daemon --writepid %s --config %s/%s --cd %s --script-security 2" % (PIDFILE, WORKDIR, conf, WORKDIR),
+ pidfile=PIDFILE,
+ donotify=True)
+
+ # Reset PIDFILE. This is a hack for status() calls from startService() problems..
+ PIDFILE = ""
+ else:
+ fail(MSG_NOCONF)
+
+@synchronized
+def stop():
+ for pidf in [pid for pid in os.listdir(PIDDIR) if pid.endswith(".pid")]:
+ stopService(pidfile="%s/%s" % (PIDDIR, pidf),
+ donotify=True)
+
+ try:
+ os.unlink(os.path.join(PIDDIR, pidf))
+ except OSError:
+ pass
+
+ # Run shutdown script if defined
+ if os.path.exists(os.path.join(WORKDIR, "openvpn-shutdown.sh")):
+ os.system(os.path.join(WORKDIR, "openvpn-shutdown.sh"))
+
+@synchronized
+def reload():
+ import signal
+ for pidf in [pid for pid in os.listdir(PIDDIR) if pid.endswith(".pid")]:
+ stopService(pidfile="%s/%s" % (PIDDIR, pidf),
+ signalno=signal.SIGHUP,
+ donotify=True)
+
+
+def status():
+ if PIDFILE:
+ return isServiceRunning(pidfile=PIDFILE)
+ else:
+ state = False
+ for pidf in [pid for pid in os.listdir(PIDDIR) if pid.endswith(".pid")]:
+ PIDFILE = os.path.join(PIDDIR, pidf)
+ state = state and isServiceRunning(pidfile=PIDFILE)
+ return state
+
diff --git a/network/connection/openvpn/files/openvpn-test.sh b/network/connection/openvpn/files/openvpn-test.sh
new file mode 100644
index 0000000000..d9a0738fb3
--- /dev/null
+++ b/network/connection/openvpn/files/openvpn-test.sh
@@ -0,0 +1,25 @@
+#!/bin/bash
+
+# Test Crypto:
+./openvpn --genkey --secret key
+./openvpn --test-crypto --secret key
+
+# Randomize ports for tests to avoid conflicts on the build servers.
+cport=$[ 50000 + ($RANDOM % 15534) ]
+sport=$[ $cport + 1 ]
+sed -e 's/^\(rport\) .*$/\1 '$sport'/' \
+-e 's/^\(lport\) .*$/\1 '$cport'/' \
+ < sample-config-files/loopback-client \
+ > tmp-loopback-client
+sed -e 's/^\(rport\) .*$/\1 '$cport'/' \
+-e 's/^\(lport\) .*$/\1 '$sport'/' \
+< sample-config-files/loopback-server \
+> tmp-loopback-server
+
+# Test SSL/TLS negotiations (runs for 2 minutes):
+./openvpn --config tmp-loopback-client &
+
+./openvpn --config tmp-loopback-server
+wait
+
+rm -f tmp-loopback-client tmp-loopback-server
diff --git a/network/connection/openvpn/files/peercred.patch b/network/connection/openvpn/files/peercred.patch
new file mode 100644
index 0000000000..4001894e7d
--- /dev/null
+++ b/network/connection/openvpn/files/peercred.patch
@@ -0,0 +1,10 @@
+--- socket.c.orig 2010-01-14 16:26:16.880369350 +0200
++++ socket.c 2010-01-14 16:26:26.359374160 +0200
+@@ -22,6 +22,7 @@
+ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
++#define _GNU_SOURCE
+ #include "syshead.h"
+
+ #include "socket.h"
diff --git a/network/connection/openvpn/files/pkcs11.patch b/network/connection/openvpn/files/pkcs11.patch
new file mode 100644
index 0000000000..3c0b51e1be
--- /dev/null
+++ b/network/connection/openvpn/files/pkcs11.patch
@@ -0,0 +1,17 @@
+--- easy-rsa/2.0/openssl.cnf.orig 2010-01-14 16:27:51.977369194 +0200
++++ easy-rsa/2.0/openssl.cnf 2010-01-14 16:29:54.090381299 +0200
+@@ -283,9 +283,9 @@
+ #pkcs11 = pkcs11_section
+
+ [ pkcs11_section ]
+-engine_id = pkcs11
+-dynamic_path = /usr/lib/engines/engine_pkcs11.so
+-MODULE_PATH = $ENV::PKCS11_MODULE_PATH
+-PIN = $ENV::PKCS11_PIN
+-init = 0
++#engine_id = pkcs11
++#dynamic_path = /usr/lib/engines/engine_pkcs11.so
++#MODULE_PATH = $ENV::PKCS11_MODULE_PATH
++#PIN = $ENV::PKCS11_PIN
++#init = 0
+
diff --git a/network/connection/openvpn/files/roadwarrior-client.conf b/network/connection/openvpn/files/roadwarrior-client.conf
new file mode 100644
index 0000000000..dd12fdb5a5
--- /dev/null
+++ b/network/connection/openvpn/files/roadwarrior-client.conf
@@ -0,0 +1,38 @@
+#########################################
+# Sample client-side OpenVPN config file
+# for connecting to multi-client server.
+#
+# Adapted from http://openvpn.sourceforge.net/20notes.html
+#
+# The server can be pinged at 10.8.0.1.
+#
+# This configuration can be used by multiple
+# clients, however each client should have
+# its own cert and key files.
+#
+# tun-style tunnel
+
+port 1194
+dev tun
+remote [my server hostname or IP address]
+
+# TLS parms
+
+tls-client
+ca sample-keys/tmp-ca.crt
+cert sample-keys/client.crt
+key sample-keys/client.key
+
+# This parm is required for connecting
+# to a multi-client server. It tells
+# the client to accept options which
+# the server pushes to us.
+pull
+
+# Scripts can be used to do various
+# things (change nameservers, for
+# example.
+#up scripts/ifup-post
+#down scripts/ifdown-post
+
+verb 4
diff --git a/network/connection/openvpn/files/roadwarrior-server.conf b/network/connection/openvpn/files/roadwarrior-server.conf
new file mode 100644
index 0000000000..be3db152c7
--- /dev/null
+++ b/network/connection/openvpn/files/roadwarrior-server.conf
@@ -0,0 +1,67 @@
+########################################
+# Sample OpenVPN config file for
+# 2.0-style multi-client udp server
+#
+# Adapted from http://openvpn.sourceforge.net/20notes.html
+#
+# tun-style tunnel
+
+port 1194
+dev tun
+
+# Use "local" to set the source address on multi-homed hosts
+#local [IP address]
+
+# TLS parms
+tls-server
+ca sample-keys/tmp-ca.crt
+cert sample-keys/server.crt
+key sample-keys/server.key
+dh sample-keys/dh1024.pem
+
+# Tell OpenVPN to be a multi-client udp server
+mode server
+
+# The server's virtual endpoints
+ifconfig 10.8.0.1 10.8.0.2
+
+# Pool of /30 subnets to be allocated to clients.
+# When a client connects, an --ifconfig command
+# will be automatically generated and pushed back to
+# the client.
+ifconfig-pool 10.8.0.4 10.8.0.255
+
+# Push route to client to bind it to our local
+# virtual endpoint.
+push "route 10.8.0.1 255.255.255.255"
+
+# Push any routes the client needs to get in
+# to the local network.
+push "route 192.168.0.0 255.255.255.0"
+
+# Push DHCP options to Windows clients.
+push "dhcp-option DOMAIN example.com"
+push "dhcp-option DNS 192.168.0.1"
+push "dhcp-option WINS 192.168.0.1"
+
+# Client should attempt reconnection on link
+# failure.
+keepalive 10 60
+
+# Delete client instances after some period
+# of inactivity.
+inactive 600
+
+# Route the --ifconfig pool range into the
+# OpenVPN server.
+route 10.8.0.0 255.255.255.0
+
+# The server doesn't need privileges
+user openvpn
+group openvpn
+
+# Keep TUN devices and keys open across restarts.
+persist-tun
+persist-key
+
+verb 4
diff --git a/network/connection/openvpn/files/tmpfiles.conf b/network/connection/openvpn/files/tmpfiles.conf
new file mode 100644
index 0000000000..96a29d7f1d
--- /dev/null
+++ b/network/connection/openvpn/files/tmpfiles.conf
@@ -0,0 +1 @@
+d /run/openvpn 0755 root root
\ No newline at end of file
diff --git a/network/connection/openvpn/pspec.xml b/network/connection/openvpn/pspec.xml
new file mode 100644
index 0000000000..b99a0f2d10
--- /dev/null
+++ b/network/connection/openvpn/pspec.xml
@@ -0,0 +1,73 @@
+
+
+
+
+ openvpn
+ https://openvpn.net/
+
+ PisiLinux Community
+ admins@pisilinux.org
+
+ GPLv2
+ service
+ network.connection
+ A full featured SSL VPN solution
+ OpenVPN is a full-featured SSL VPN solution which can accomodate a wide range of configurations, including remote access, site-to-site VPNs, WiFi security, and enterprise-scale remote access solutions with load balancing, failover, and fine-grained access-controls.
+ https://swupdate.openvpn.org/community/releases/openvpn-2.5.2.tar.xz
+
+ openvpn-test.sh
+
+
+ git
+ cmake
+ iproute2
+ pam-devel
+ lz4-devel
+ lzo-devel
+ openssl-devel
+ p11-kit-devel
+
+
+
+
+ openvpn
+ A full featured SSL VPN solution
+
+ lzo
+ lz4
+ pam
+ openssl
+ p11-kit
+ iproute2
+
+
+ /usr/lib
+ /run/openvpn
+ /usr/share/man
+ /usr/share/doc
+ /etc/openvpn
+ /usr/include
+ /usr/sbin
+ /usr/share/openvpn
+ /usr/lib/tmpfiles.d/openvpn.conf
+
+
+ tmpfiles.conf
+ roadwarrior-client.conf
+ roadwarrior-server.conf
+
+
+ System.Service
+
+
+
+
+
+ 2021-05-10
+ 2.5.2
+ First release
+ PisiLinux Community
+ admins@pisilinux.org
+
+
+
\ No newline at end of file
diff --git a/network/connection/openvpn/translations.xml b/network/connection/openvpn/translations.xml
new file mode 100644
index 0000000000..40f847e8ec
--- /dev/null
+++ b/network/connection/openvpn/translations.xml
@@ -0,0 +1,8 @@
+
+
+
+ openvpn
+ Sanal özel ağ çözümü
+ OpenVPN uzaktan bağlantı, kablosuz bağlantı güvenliği gibi konularda çok geniş ayarlar içeren bir sanal özel ağ (VPN) çözümüdür.
+
+
\ No newline at end of file
diff --git a/util/admin/timeshift/actions.py b/util/admin/timeshift/actions.py
new file mode 100644
index 0000000000..181e9d70b1
--- /dev/null
+++ b/util/admin/timeshift/actions.py
@@ -0,0 +1,20 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+#
+# Licensed under the GNU General Public License, version 3.
+# See the file http://www.gnu.org/licenses/gpl.txt
+
+from pisi.actionsapi import autotools
+from pisi.actionsapi import pisitools
+from pisi.actionsapi import get
+
+#def setup():
+ #autotools.configure()
+
+def build():
+ autotools.make()
+
+def install():
+ autotools.rawInstall("DESTDIR=%s" % get.installDIR())
+
+ pisitools.dodoc("AUTHORS", "LICENSE*", "COPYING", "README*")
diff --git a/util/admin/timeshift/pspec.xml b/util/admin/timeshift/pspec.xml
new file mode 100644
index 0000000000..a686f2817e
--- /dev/null
+++ b/util/admin/timeshift/pspec.xml
@@ -0,0 +1,73 @@
+
+
+
+
+ timeshift
+ https://github.com/teejee2008/timeshift
+
+ PisiLinux Community
+ admins@pisilinux.org
+
+ LGPLv3
+ app:gui
+ Timeshift protects your system by taking incremental snapshots of the file system at regular intervals. These snapshots can be restored at a later date to undo all changes to the system.
+ Timeshift, düzenli aralıklarla dosya sisteminin artımlı anlık görüntülerini alarak sisteminizi korur. Bu anlık görüntüler, sistemdeki tüm değişiklikleri geri almak için daha sonraki bir tarihte geri yüklenebilir.
+ https://github.com/teejee2008/timeshift/archive/refs/tags/v20.11.1.tar.gz
+
+ atk-devel
+ vte-devel
+ gtk3-devel
+ zlib-devel
+ vala-devel
+ cairo-devel
+ glib2-devel
+ pango-devel
+ gnutls-devel
+ libX11-devel
+ libgee-devel
+ libpcre2-devel
+ json-glib-devel
+ gdk-pixbuf-devel
+
+
+
+
+ timeshift
+
+ atk
+ vte
+ gtk3
+ zlib
+ vala
+ cairo
+ glib2
+ pango
+ gnutls
+ libX11
+ libgee
+ libpcre2
+ json-glib
+ gdk-pixbuf
+
+
+ /usr/bin
+ /etc
+ /usr/lib
+ /usr/share
+ /usr/share/locale
+ /usr/share/man
+ /usr/share/metainfo
+ /usr/share/doc
+
+
+
+
+
+ 2021-05-10
+ 20.11.1
+ First release
+ PisiLinux Community
+ admins@pisilinux.org
+
+
+
diff --git a/util/admin/timeshift/translations.xml b/util/admin/timeshift/translations.xml
new file mode 100644
index 0000000000..8dd27e7d6a
--- /dev/null
+++ b/util/admin/timeshift/translations.xml
@@ -0,0 +1,8 @@
+
+
+
+ timeshift
+ Timeshift protects your system by taking incremental snapshots of the file system at regular intervals. These snapshots can be restored at a later date to undo all changes to the system.
+ Timeshift, düzenli aralıklarla dosya sisteminin artımlı anlık görüntülerini alarak sisteminizi korur. Bu anlık görüntüler, sistemdeki tüm değişiklikleri geri almak için daha sonraki bir tarihte geri yüklenebilir.
+
+