Various improvements
This commit is contained in:
parent
061e73126c
commit
8524915c77
12 changed files with 166 additions and 76 deletions
8
common/bin/copy-git-forge-url
Executable file
8
common/bin/copy-git-forge-url
Executable file
|
@ -0,0 +1,8 @@
|
|||
#!/usr/bin/env sh
|
||||
|
||||
url="$(gitforge-url.ts "$1")"
|
||||
case "$(uname)" in
|
||||
Linux*) echo "$url" | clip;;
|
||||
Darwin*) echo "$url" | pbcopy;;
|
||||
*) echo "OS not supported"; exit 1;
|
||||
esac
|
|
@ -1,64 +1,37 @@
|
|||
#!/usr/bin/env sh
|
||||
#!/usr/bin/env bash
|
||||
|
||||
export dfp
|
||||
export XDG_CONFIG_HOME="${XDG_CONFIG_HOME:-$HOME/.config}"
|
||||
export ENV_PATH="$XDG_CONFIG_HOME/lytedev-env"
|
||||
export CURDIR
|
||||
|
||||
mkdir -p "$ENV_PATH"
|
||||
mkdir -p "$XDG_CONFIG_HOME"
|
||||
dfp="$(realpath "$(dirname "$0")"/../..)"
|
||||
|
||||
detect_os() {
|
||||
# NixOS
|
||||
if head /etc/os-release --lines 1 | grep 'NixOS$' > /dev/null 2>&1; then
|
||||
ln -s "$dfp/os/linux/nix" "$ENV_PATH/os-linux-nix" > /dev/null 2>&1
|
||||
return
|
||||
fi
|
||||
|
||||
# Arch Linux
|
||||
if head /etc/os-release --lines 1 | grep 'Arch Linux' > /dev/null 2>&1; then
|
||||
ln -s "$dfp/os/linux/arch" "$ENV_PATH/os-linux-arch" > /dev/null 2>&1
|
||||
return
|
||||
fi
|
||||
|
||||
# Pacman-based
|
||||
if command -v pacman; then
|
||||
ln -s "$dfp/os/linux/arch" "$ENV_PATH/os-linux-arch" > /dev/null 2>&1
|
||||
return
|
||||
fi
|
||||
|
||||
# TODO: Debian
|
||||
|
||||
echo "Failed to auto-detect your OS! Please setup your environments and run this script again."
|
||||
exit 3
|
||||
}
|
||||
|
||||
if command -v git > /dev/null 2>&1; then
|
||||
if [ -f "$dfp/common/envs" ]; then
|
||||
# TODO: more shared init stuff?
|
||||
mkdir -p "$ENV_PATH"
|
||||
detect_os
|
||||
ls -la -R "$ENV_PATH/*"
|
||||
find "$ENV_PATH" | while read -r s; do
|
||||
f="$s/dotfiles-init.d.sh"
|
||||
if [ -f "$f" ]; then
|
||||
CURDIR="$s"
|
||||
. "$f"
|
||||
fi
|
||||
done
|
||||
$dfp/common/bin/dotfiles-setup
|
||||
else
|
||||
git clone "https://git.lyte.dev/lytedev/dotfiles.git" "$XDG_CONFIG_HOME/lytedev-dotfiles"
|
||||
cd "$XDG_CONFIG_HOME/lytedev-dotfiles" || {
|
||||
echo "Could not cd to dotfiles dir"
|
||||
exit 2
|
||||
}
|
||||
. ./common/bin/dotfiles-init
|
||||
fi
|
||||
else
|
||||
echo "git not installed"
|
||||
# may not be running from inside the dotfiles repo, may have been curl'd down solo, so we need to check
|
||||
if [[ ! -d "$dfp/.git" ]]; then
|
||||
echo "Not running from inside the dotfiles git repo, so we need to download it first!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if head /etc/os-release --lines 1 | grep 'NixOS$' > /dev/null 2>&1; then
|
||||
ln -s "$dfp/os/linux/nix" "$ENV_PATH/os-linux-nix" > /dev/null 2>&1
|
||||
elif head /etc/os-release --lines 1 | grep 'Arch Linux' > /dev/null 2>&1; then
|
||||
ln -s "$dfp/os/linux/arch" "$ENV_PATH/os-linux-arch" > /dev/null 2>&1
|
||||
fi
|
||||
|
||||
for s in "$ENV_PATH"/*; do
|
||||
f="$s/dotfiles-init.d.sh"
|
||||
if [ -f "$f" ]; then
|
||||
echo "dotfiles-init: Running $f..."
|
||||
CURDIR="$s" "$f"
|
||||
fi
|
||||
done
|
||||
|
||||
echo "dotfiles-init: Running setup..."
|
||||
"$dfp/common/bin/dotfiles-setup"
|
||||
|
||||
# TODO: run provision script
|
||||
|
||||
# run_via_dotfiles_if_necessary() {
|
||||
|
|
|
@ -71,11 +71,5 @@ end
|
|||
rm -f $ENV_PATH/empty
|
||||
ln -s $DOTFILES_PATH/common/empty-env $ENV_PATH/empty
|
||||
|
||||
# execute the user's shell
|
||||
if test (uname) = Darwin
|
||||
set ush (dscl . -read /Users/$USER UserShell | awk '{print $2}')
|
||||
else
|
||||
set ush (getent passwd (whoami) | cut -d: -f7)
|
||||
end
|
||||
echo "Dotfiles Installed! Don't forget to setup environments!"
|
||||
exec $ush
|
||||
echo "Dotfiles Installed! Don't forget to setup environments and change the user's shell as needed!"
|
||||
exec fish
|
||||
|
|
73
common/bin/gitforge-url.ts
Executable file
73
common/bin/gitforge-url.ts
Executable file
|
@ -0,0 +1,73 @@
|
|||
#!/usr/bin/env -S deno run --allow-read --allow-run --allow-net
|
||||
|
||||
import * as path from "https://deno.land/std@0.181.0/path/mod.ts";
|
||||
|
||||
// output the best guess URL for viewing the file at the current git revision in
|
||||
// the git forge's web interface
|
||||
|
||||
// TODO: --help, -h menu
|
||||
|
||||
const file = Deno.args[0];
|
||||
|
||||
if (!file) {
|
||||
console.error("No file argument provided");
|
||||
Deno.exit(1);
|
||||
}
|
||||
|
||||
async function cmdOutput(cmd: string[]) {
|
||||
return new TextDecoder().decode(
|
||||
await Deno.run({
|
||||
cmd: cmd,
|
||||
stdout: "piped",
|
||||
})
|
||||
.output(),
|
||||
).trim();
|
||||
}
|
||||
|
||||
type ForgeType = "gitlab" | "github" | "gitea";
|
||||
|
||||
function getForgeType(hostname: string): ForgeType {
|
||||
if (hostname == "git.lyte.dev") {
|
||||
return "gitea";
|
||||
} else if (hostname.endsWith("github.com")) {
|
||||
return "github";
|
||||
} else {
|
||||
return "gitlab";
|
||||
}
|
||||
}
|
||||
|
||||
function getUrl(repoRoot: string, remote: string, commit: string) {
|
||||
try {
|
||||
// try http remote
|
||||
console.log(new URL(remote));
|
||||
throw new Error("HTTP(S) remotes not implemented");
|
||||
} catch {
|
||||
const hostname = remote.split("@").slice(-1)[0].split(":")[0];
|
||||
const forgeType = getForgeType(hostname);
|
||||
let repoPath = remote.split(":")[1];
|
||||
if (repoPath.endsWith(".git")) {
|
||||
repoPath = repoPath.slice(0, -4);
|
||||
}
|
||||
let fileRepoPath = path.resolve(file);
|
||||
if (fileRepoPath.startsWith(repoRoot)) {
|
||||
fileRepoPath = fileRepoPath.slice(repoRoot.length + 1); // for the trailing slash
|
||||
} else {
|
||||
throw new Error(`File ${fileRepoPath} is not in repo at ${repoRoot}`);
|
||||
}
|
||||
switch (forgeType) {
|
||||
case "gitlab":
|
||||
return `https://${hostname}/${repoPath}/-/blob/${commit}/${fileRepoPath}`;
|
||||
case "gitea":
|
||||
return `https://${hostname}/${repoPath}/src/commit/${commit}/${fileRepoPath}`;
|
||||
case "github":
|
||||
return `https://${hostname}/${repoPath}/blob/${commit}/${fileRepoPath}`;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: cd to dir
|
||||
const repoRoot = await cmdOutput(["git", "rev-parse", "--show-toplevel"]);
|
||||
const remote = await cmdOutput(["git", "remote", "get-url", "origin"]);
|
||||
const commit = await cmdOutput(["git", "rev-parse", "HEAD"]);
|
||||
const url = getUrl(repoRoot, remote, commit);
|
||||
console.log(url);
|
3
common/bin/inforge
Normal file
3
common/bin/inforge
Normal file
|
@ -0,0 +1,3 @@
|
|||
#!/usr/bin/env sh
|
||||
|
||||
# open the target file in its git-forge in the browser
|
8
common/bin/open-in-git-forge
Executable file
8
common/bin/open-in-git-forge
Executable file
|
@ -0,0 +1,8 @@
|
|||
#!/usr/bin/env sh
|
||||
|
||||
url="$(gitforge-url.ts "$1")"
|
||||
case "$(uname)" in
|
||||
Linux*) xdg-open "$url";;
|
||||
Darwin*) open "$url";;
|
||||
*) echo "OS not supported"; exit 1;
|
||||
esac
|
|
@ -79,8 +79,11 @@
|
|||
# pushOption = merge_request.remove_source_branch
|
||||
# pushOption = merge_request.assign="daniel.flanagan"
|
||||
|
||||
[url "git@git-p1ap1.divvy.co:"]
|
||||
insteadOf = https://git-p1ap1.divvy.co
|
||||
[url "git@git.hq.bill.com:"]
|
||||
insteadOf = https://git-p1ap1.divvy.co/
|
||||
|
||||
[url "git@git.hq.bill.com"]
|
||||
insteadOf = git@git-p1ap1.divvy.co
|
||||
[url "git@git.hq.bill.com:"]
|
||||
insteadOf = https://git.hq.bill.com/
|
||||
|
||||
[url "git@git.hq.bill.com:"]
|
||||
insteadOf = ssh://git@git-p1ap1.divvy.co/
|
||||
|
|
|
@ -34,8 +34,9 @@ D = "kill_to_line_end"
|
|||
"C-h" = "jump_view_left"
|
||||
"C-l" = "jump_view_right"
|
||||
"L" = "repeat_last_motion"
|
||||
space = { q = ":reflow 80", Q = ":reflow 120" }
|
||||
space = { q = ":reflow 80", Q = ":reflow 120", v = ":run-shell-command fish -c 'env > /tmp/env'" }
|
||||
|
||||
[keys.select]
|
||||
space = { q = ":reflow 80", Q = ":reflow 120" }
|
||||
"L" = "repeat_last_motion"
|
||||
|
||||
|
|
3
os/linux/arch/dotfiles-init.d.sh
Normal file → Executable file
3
os/linux/arch/dotfiles-init.d.sh
Normal file → Executable file
|
@ -1,4 +1,3 @@
|
|||
#!/usr/bin/env sh
|
||||
#!/usr/bin/env -S sh -i
|
||||
|
||||
# this will be run as root
|
||||
"$CURDIR/provision.sh"
|
||||
|
|
|
@ -1,12 +1,20 @@
|
|||
#!/usr/bin/env bash
|
||||
#!/usr/bin/env -S bash -i
|
||||
|
||||
u=daniel
|
||||
ud="/home/$u"
|
||||
|
||||
# user exists - we will assume setup has already run
|
||||
if getent passwd "$u"; then exit 0; fi
|
||||
if [[ "$EUID" -ne 0 ]]; then
|
||||
echo "Error: This script must be run as root."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
pacman -S --needed --noconfirm sudo
|
||||
# user exists - we will assume setup has already run
|
||||
if grep -E "^$u" /etc/passwd; then
|
||||
echo "User '$u' already exists. Assuming user has been setup already."
|
||||
exit 0
|
||||
fi
|
||||
|
||||
pacman -Sy --needed --noconfirm sudo
|
||||
echo '%admin ALL=(ALL) ALL' >> /etc/sudoers.d/admin-group-sudoers
|
||||
groupadd admin 2>/dev/null
|
||||
mkdir --parents "$ud/.home" "$ud/dl"
|
||||
|
|
13
os/linux/arch/provision.d/70-optional-packages.bash
Executable file
13
os/linux/arch/provision.d/70-optional-packages.bash
Executable file
|
@ -0,0 +1,13 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
dir="$(dirname "$(realpath "$0")")"
|
||||
echo "Inside $dir"
|
||||
|
||||
yn() {
|
||||
echo "$1 [y/N]"
|
||||
read -r y
|
||||
# bash convert to lowercase magic
|
||||
[[ ${y,,} =~ ^y ]]
|
||||
}
|
||||
|
||||
yn "Do you want to install UI packages?" && "$dir/optional/ui-packages.bash"
|
|
@ -1,23 +1,30 @@
|
|||
#!/usr/bin/env sh
|
||||
#!/usr/bin/env -S sh -i
|
||||
|
||||
pacman -Syy
|
||||
pacman -S --noconfirm --needed fish sudo
|
||||
pacman -Sy --noconfirm --needed git fish sudo
|
||||
|
||||
echo "## Arch Linux Provisioning ##"
|
||||
|
||||
is_root="$(test "$(whoami)" == 'root' && echo "1" || echo "0")"
|
||||
ls -la "$(dirname "$0")"
|
||||
for file in "$(dirname "$0")/provision.d"/*; do
|
||||
test -d "$file" && continue
|
||||
echo "Runnning $file..."
|
||||
if grep -q "AS_ROOT" "$file"; then
|
||||
if echo "$file" | grep -q "AS_ROOT"; then
|
||||
if [ "$is_root" = "1" ]; then
|
||||
echo "arch/provision.sh: Runnning $file..."
|
||||
"$file"
|
||||
else
|
||||
echo "arch/provision.sh: Runnning sudo $file..."
|
||||
sudo "$file"
|
||||
fi
|
||||
else
|
||||
if [ "$is_root" = "1" ]; then
|
||||
sudo -u daniel "$file"
|
||||
nf="$(mktemp)"
|
||||
cp "$file" "$nf"
|
||||
chmod 777 "$nf"
|
||||
echo "arch/provision.sh: Runnning sudo -u daniel $file via $nf..."
|
||||
sudo -u daniel "$nf"
|
||||
rm "$nf"
|
||||
else
|
||||
echo "arch/provision.sh: Runnning $file..."
|
||||
"$file"
|
||||
fi
|
||||
fi
|
||||
|
|
Reference in a new issue