Merge pull request #126481 from ShamrockLee/timeshift
This commit is contained in:
commit
332ff38e62
6 changed files with 202 additions and 0 deletions
33
pkgs/applications/backup/timeshift/default.nix
Normal file
33
pkgs/applications/backup/timeshift/default.nix
Normal file
|
@ -0,0 +1,33 @@
|
|||
{ callPackage
|
||||
, timeshift-unwrapped
|
||||
, lib
|
||||
, rsync
|
||||
, coreutils
|
||||
, mount
|
||||
, umount
|
||||
, psmisc
|
||||
, cron
|
||||
, btrfs-progs
|
||||
, grubPackage
|
||||
}:
|
||||
let
|
||||
timeshift-wrapper = callPackage ./wrapper.nix { };
|
||||
in
|
||||
(timeshift-wrapper timeshift-unwrapped ([
|
||||
rsync
|
||||
coreutils
|
||||
mount
|
||||
umount
|
||||
psmisc
|
||||
cron
|
||||
btrfs-progs
|
||||
grubPackage
|
||||
])).overrideAttrs (oldAttrs: {
|
||||
meta = oldAttrs.meta // {
|
||||
description = oldAttrs.meta.description;
|
||||
longDescription = oldAttrs.meta.longDescription + ''
|
||||
This package comes with runtime dependencies of command utilities provided by rsync, coreutils, mount, umount, psmisc, cron and (optionally) btrfs.
|
||||
If you want to use the commands provided by the system, override the propagatedBuildInputs or use timeshift-minimal instead
|
||||
'';
|
||||
};
|
||||
})
|
15
pkgs/applications/backup/timeshift/minimal.nix
Normal file
15
pkgs/applications/backup/timeshift/minimal.nix
Normal file
|
@ -0,0 +1,15 @@
|
|||
{ callPackage
|
||||
, timeshift-unwrapped
|
||||
}:
|
||||
let
|
||||
timeshift-wrapper = callPackage ./wrapper.nix { };
|
||||
in
|
||||
(timeshift-wrapper timeshift-unwrapped [ ]).overrideAttrs (oldAttrs: {
|
||||
meta = oldAttrs.meta // {
|
||||
description = oldAttrs.meta.description + " (without runtime dependencies)";
|
||||
longDescription = oldAttrs.meta.longDescription + ''
|
||||
This package is a wrapped version of timeshift-unwrapped
|
||||
without runtime dependencies of command utilities.
|
||||
'';
|
||||
};
|
||||
})
|
26
pkgs/applications/backup/timeshift/timeshift-launcher.patch
Normal file
26
pkgs/applications/backup/timeshift/timeshift-launcher.patch
Normal file
|
@ -0,0 +1,26 @@
|
|||
diff --git a/src/timeshift-launcher b/src/timeshift-launcher
|
||||
index 29b8fc4..5f6cb17 100755
|
||||
--- a/src/timeshift-launcher
|
||||
+++ b/src/timeshift-launcher
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/bin/bash
|
||||
|
||||
-app_command='timeshift-gtk'
|
||||
+app_command=''"$(realpath "$(dirname "$0")")"'/timeshift-gtk'
|
||||
|
||||
if [ "$(id -u)" -eq 0 ]; then
|
||||
# user is admin
|
||||
@@ -14,11 +14,11 @@ else
|
||||
# script is running in non-interactive mode
|
||||
if [ "$XDG_SESSION_TYPE" = "wayland" ] ; then
|
||||
xhost +SI:localuser:root
|
||||
- pkexec ${app_command}
|
||||
+ pkexec env DISPLAY="$DISPLAY" XAUTHORITY="$XAUTHORITY" "${app_command}"
|
||||
xhost -SI:localuser:root
|
||||
xhost
|
||||
elif command -v pkexec >/dev/null 2>&1; then
|
||||
- pkexec ${app_command}
|
||||
+ pkexec env DISPLAY="$DISPLAY" XAUTHORITY="$XAUTHORITY" "${app_command}"
|
||||
elif command -v sudo >/dev/null 2>&1; then
|
||||
x-terminal-emulator -e "sudo ${app_command}"
|
||||
elif command -v su >/dev/null 2>&1; then
|
77
pkgs/applications/backup/timeshift/unwrapped.nix
Normal file
77
pkgs/applications/backup/timeshift/unwrapped.nix
Normal file
|
@ -0,0 +1,77 @@
|
|||
{ lib
|
||||
, stdenv
|
||||
, fetchFromGitHub
|
||||
, gettext
|
||||
, pkg-config
|
||||
, vala
|
||||
, which
|
||||
, gtk3
|
||||
, json-glib
|
||||
, libgee
|
||||
, utillinux
|
||||
, vte
|
||||
, xapps
|
||||
}:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "timeshift";
|
||||
version = "22.06.1";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "linuxmint";
|
||||
repo = "timeshift";
|
||||
rev = "v${version}";
|
||||
sha256 = "XcxwVBKMv2YwbrI3FFWDQFs8hHruhkZq3YqzkptE6KE=";
|
||||
};
|
||||
|
||||
patches = [
|
||||
./timeshift-launcher.patch
|
||||
];
|
||||
|
||||
postPatch = ''
|
||||
while IFS="" read -r -d $'\0' FILE; do
|
||||
substituteInPlace "$FILE" \
|
||||
--replace "/sbin/blkid" "${utillinux}/bin/blkid"
|
||||
done < <(find ./src -mindepth 1 -name "*.vala" -type f -print0)
|
||||
substituteInPlace ./src/Utility/IconManager.vala \
|
||||
--replace "/usr/share" "$out/share"
|
||||
substituteInPlace ./src/Core/Main.vala \
|
||||
--replace "/etc/timeshift/default.json" "$out/etc/timeshift/default.json" \
|
||||
--replace "file_copy(app_conf_path_default, app_conf_path);" "if (!dir_exists(file_parent(app_conf_path))){dir_create(file_parent(app_conf_path));};file_copy(app_conf_path_default, app_conf_path);"
|
||||
'';
|
||||
|
||||
nativeBuildInputs = [
|
||||
gettext
|
||||
pkg-config
|
||||
vala
|
||||
which
|
||||
];
|
||||
|
||||
buildInputs = [
|
||||
gtk3
|
||||
json-glib
|
||||
libgee
|
||||
vte
|
||||
xapps
|
||||
];
|
||||
|
||||
preBuild = ''
|
||||
makeFlagsArray+=( \
|
||||
"-C" "src" \
|
||||
"prefix=$out" \
|
||||
"sysconfdir=$out/etc" \
|
||||
)
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
description = "A system restore tool for Linux";
|
||||
longDescription = ''
|
||||
TimeShift creates filesystem snapshots using rsync+hardlinks or BTRFS snapshots.
|
||||
Snapshots can be restored using TimeShift installed on the system or from Live CD or USB.
|
||||
'';
|
||||
homepage = "https://github.com/linuxmint/timeshift";
|
||||
license = licenses.gpl3;
|
||||
platforms = platforms.linux;
|
||||
maintainers = with maintainers; [ ShamrockLee ];
|
||||
};
|
||||
}
|
45
pkgs/applications/backup/timeshift/wrapper.nix
Normal file
45
pkgs/applications/backup/timeshift/wrapper.nix
Normal file
|
@ -0,0 +1,45 @@
|
|||
{ stdenvNoCC
|
||||
, lib
|
||||
, wrapGAppsHook
|
||||
, gdk-pixbuf
|
||||
, librsvg
|
||||
, xorg
|
||||
, shared-mime-info
|
||||
}:
|
||||
|
||||
timeshift-unwrapped:
|
||||
runtimeDeps:
|
||||
stdenvNoCC.mkDerivation {
|
||||
inherit (timeshift-unwrapped) pname version;
|
||||
|
||||
dontUnpack = true;
|
||||
|
||||
nativeBuildInputs = [
|
||||
xorg.lndir
|
||||
wrapGAppsHook
|
||||
];
|
||||
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
mkdir -p "$out"
|
||||
lndir "${timeshift-unwrapped}" "$out"
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
dontWrapGApps = true;
|
||||
|
||||
preFixup = ''
|
||||
makeWrapperArgs=(
|
||||
--prefix PATH : "${lib.makeBinPath runtimeDeps}"
|
||||
)
|
||||
gappsWrapperArgs+=(
|
||||
# Thumbnailers
|
||||
--prefix XDG_DATA_DIRS : "${lib.makeSearchPath "share" [ gdk-pixbuf librsvg shared-mime-info ]}"
|
||||
"''${makeWrapperArgs[@]}"
|
||||
)
|
||||
wrapProgram "$out/bin/timeshift" "''${makeWrapperArgs[@]}"
|
||||
wrapProgram "$out/bin/timeshift-gtk" "''${gappsWrapperArgs[@]}"
|
||||
'';
|
||||
|
||||
inherit (timeshift-unwrapped) meta;
|
||||
}
|
|
@ -30040,6 +30040,12 @@ with pkgs;
|
|||
|
||||
timelimit = callPackage ../tools/misc/timelimit { };
|
||||
|
||||
timeshift-unwrapped = callPackage ../applications/backup/timeshift/unwrapped.nix { inherit (cinnamon) xapps; };
|
||||
|
||||
timeshift = callPackage ../applications/backup/timeshift { grubPackage = grub2_full; };
|
||||
|
||||
timeshift-minimal = callPackage ../applications/backup/timeshift/minimal.nix { };
|
||||
|
||||
timewarrior = callPackage ../applications/misc/timewarrior { };
|
||||
|
||||
timew-sync-server = callPackage ../applications/misc/timew-sync-server { };
|
||||
|
|
Loading…
Reference in a new issue