-
Notifications
You must be signed in to change notification settings - Fork 1
/
modular.ps1
52 lines (46 loc) · 1.95 KB
/
modular.ps1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# Powershell shell helper functions for a modular bare repo approach
# Copyright 2023 Jonathan Bowman. All documentation and code contained
# in this file may be freely shared in compliance with the
# Apache License, Version 2.0 (http://www.apache.org/licenses/LICENSE-2.0)
# and is **provided "AS IS" without warranties or conditions of any kind**.
#
# To allow this script to be executed, first ask yourself if I can be trusted,
# then read the code below and make sure you feel good about it, then consider
# allowing scripts to be run by you with the following:
#
# Set-ExecutionPolicy RemoteSigned -scope CurrentUser
#
# Then download and execute this code that comes with no warranties or claims
# of suitability:
#
# iwr -useb https://raw.githubusercontent.com/bowmanjd/dotfile-scripts/main/modulear.ps1 | iex
#
# Now you can use "dtfnew $module $repo_url" to set up a new repo, or
# "dtfrestore $module $repo_url" to download and configure an already populated
# repo to a specific directory. Then use "dtf $module" instead of "git" to
# add, commit, push, pull, etc.
$dotfiles = "$HOME\.dotfiles"
function dtf {
Param ([string]$Module)
git --git-dir="$dotfiles\$Module" --work-tree="$HOME" @Args
}
function dtfnew {
Param ([string]$Module, [string]$Repo)
mkdir -f "$dotfiles/$Module"
git clone --bare $Repo "$dotfiles/$Module"
dtf $Module config --local status.showUntrackedFiles no
echo "Please add and commit additional files"
echo "using 'dtf $Module add' and 'dtf $Module commit', then run"
echo "dtf $Module push -u origin HEAD"
}
function dtfrestore {
Param ([string]$Module, [string]$Repo)
git clone --bare $Repo "$dotfiles/MODULE"
dtf $Module config --local status.showUntrackedFiles no
dtf $Module branch -t $(dtf $Module symbolic-ref --short HEAD) origin/HEAD
dtf $Module checkout
if ($LASTEXITCODE) {
echo "Deal with conflicting files, then run (possibly with -f flag if you are OK with overwriting)"
echo "dtf $Module checkout"
}
}