about summary refs log tree commit diff
path: root/overlays/personal
diff options
context:
space:
mode:
authorAlyssa Ross <hi@alyssa.is>2022-10-21 22:05:59 +0000
committerAlyssa Ross <hi@alyssa.is>2022-10-21 22:05:59 +0000
commitb0189ffa7f7313ba7962df1798b1a40d046937ae (patch)
tree91cadfe8b122540737c4b4dd693d28e7a7628be0 /overlays/personal
parentf01ed9d20d4f669cd1bd598405201fced8689ea9 (diff)
downloadnixlib-b0189ffa7f7313ba7962df1798b1a40d046937ae.tar
nixlib-b0189ffa7f7313ba7962df1798b1a40d046937ae.tar.gz
nixlib-b0189ffa7f7313ba7962df1798b1a40d046937ae.tar.bz2
nixlib-b0189ffa7f7313ba7962df1798b1a40d046937ae.tar.lz
nixlib-b0189ffa7f7313ba7962df1798b1a40d046937ae.tar.xz
nixlib-b0189ffa7f7313ba7962df1798b1a40d046937ae.tar.zst
nixlib-b0189ffa7f7313ba7962df1798b1a40d046937ae.zip
declarative-git-repository: init
Diffstat (limited to 'overlays/personal')
-rw-r--r--overlays/personal/declarative-git-repository/default.nix55
-rw-r--r--overlays/personal/default.nix3
2 files changed, 58 insertions, 0 deletions
diff --git a/overlays/personal/declarative-git-repository/default.nix b/overlays/personal/declarative-git-repository/default.nix
new file mode 100644
index 000000000000..e1b2693dff4f
--- /dev/null
+++ b/overlays/personal/declarative-git-repository/default.nix
@@ -0,0 +1,55 @@
+# SPDX-FileCopyrightText: V <v@unfathomable.blue>
+# SPDX-FileCopyrightText: 2022 Alyssa Ross <hi@alyssa.is>
+# SPDX-License-Identifier: OSL-3.0
+
+# Adapted from https://src.unfathomable.blue/nixos-config/tree/pkgs/declarative-git-repository/default.nix
+
+{ lib, buildEnv, runtimeShell, writeTextDir, writeText, writeTextFile
+, writeScript
+}:
+
+{ path
+, branch ? "main"
+, description
+, config ? {}
+, hooks ? {}
+, owner ? "-", group ? "-"
+}:
+
+with lib;
+
+let
+  # As generated by an initial `git init --bare`
+  defaultConfig = {
+    core = {
+      repositoryformatversion = 0;
+      filemode = true;
+      bare = true;
+    };
+  };
+
+  hooksDir = buildEnv {
+    name = "git-repository-hooks";
+    paths = mapAttrsToList (hook: scripts: writeTextFile {
+      name = hook;
+      text = ''
+        #!${runtimeShell}
+      '' + concatMapStrings (script: ''
+        ${script} "$@"
+      '') scripts;
+      destination = "/${hook}";
+      executable = true;
+    }) hooks;
+  };
+in writeTextDir "lib/tmpfiles.d/git-repository${replaceStrings [ "/" ] [ "-" ] path}.conf" ''
+  d ${path} 2775 ${owner} ${group}
+
+  f+ ${path}/HEAD - root root - ref: refs/heads/${branch}
+  d ${path}/refs 2775 ${owner} ${group}
+  d ${path}/objects 2775 ${owner} ${group}
+  d ${path}/objects/pack 2775 ${owner} ${group}
+
+  L+ ${path}/config - - - -  ${writeText "git-repository-config" (generators.toGitINI (recursiveUpdate defaultConfig config))}
+  L+ ${path}/description - - - - ${builtins.toFile "git-repository-description" description}
+  L+ ${path}/hooks - - - - ${hooksDir}
+''
diff --git a/overlays/personal/default.nix b/overlays/personal/default.nix
index 9cb1371925aa..5739c5a7d7ba 100644
--- a/overlays/personal/default.nix
+++ b/overlays/personal/default.nix
@@ -1,5 +1,8 @@
 self: super: {
   choose = self.callPackage ./choose { };
 
+  declarative-git-repository =
+    self.callPackage ./declarative-git-repository { };
+
   pr-tracker = self.callPackage ./pr-tracker { };
 }