Skip to content

Commit 3a18348

Browse files
committed
pkgs: add edit-managed-file script
1 parent e076d7a commit 3a18348

3 files changed

Lines changed: 43 additions & 0 deletions

File tree

flake/profiles/home/daily/pkgs.nix

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,5 +60,6 @@
6060
pwndbg
6161
kdePackages.kolourpaint
6262
psmisc
63+
jess-scripts.edit-managed-file
6364
];
6465
}

pkgs/default.nix

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
jess-scripts = {
3636
nix-conf-edit = final.callPackage ./scripts/nix-conf-edit.nix { };
3737
nixpkgs-print-out-paths = final.callPackage ./scripts/nixpkgs-print-out-paths.nix { };
38+
edit-managed-file = final.callPackage ./scripts/edit-managed-file.nix { };
3839
};
3940

4041
resetti = final.callPackage ./resetti.nix { };
@@ -58,6 +59,7 @@
5859
inherit (pkgs.jess-scripts)
5960
nix-conf-edit
6061
nixpkgs-print-out-paths
62+
edit-managed-file
6163
;
6264
};
6365
};

pkgs/scripts/edit-managed-file.nix

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
{
2+
writeShellApplication,
3+
vim,
4+
...
5+
}:
6+
writeShellApplication {
7+
name = "edit-managed-file";
8+
9+
runtimeInputs = [
10+
vim
11+
];
12+
13+
text = ''
14+
if [ "$#" -ne 1 ]; then
15+
>&2 echo "error: usage: $0 <managed-file>"
16+
exit 1
17+
fi
18+
19+
if ! [ -f "$1" ] && ! [ -h "$1" ]; then
20+
>&2 echo "error: '$1' is not a file or symlink"
21+
exit 1
22+
fi
23+
24+
if ! [ -w "$1" ]; then
25+
>&2 echo "error: can't edit file '$1' (do you have permissions?)"
26+
exit 1
27+
fi
28+
29+
managed_file="$(realpath --no-symlinks "$1")"
30+
backup_file="''${managed_file}.orig"
31+
32+
>&2 echo "editing: $managed_file"
33+
34+
mv -v "$managed_file" "$backup_file"
35+
cp -v "$backup_file" "$managed_file"
36+
chmod -v +w "$managed_file"
37+
38+
"''${EDITOR:-vim}" "$managed_file"
39+
'';
40+
}

0 commit comments

Comments
 (0)