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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
|
## Aliases ##
alias cat = bat
alias find = fd
alias df = duf
alias du = dust -b -d 1
alias just = just --shell "nu" --shell-arg "-c"
alias ll = ls -al
## Functions ##
def sshdev [port: int = 8080] {
$"Listening on localhost:($port)"
^ssh -i ~/.ssh/dev -N -T -R $"1337:localhost:($port)" dev@jolheiser.com
}
def nixdev [
name: string # Name of the dev shell to use
--bash # Use bash instead of nushell
--refresh # Refresh the flake
] {
let url = $"git+https://git.jojodev.com/jolheiser/dev-shells\#($name)"
let c = if ($bash) {""} else {"-c nu"}
let refresh = if ($refresh) {"--refresh"} else {""}
let cmd = $"nix develop ($refresh) ($url) ($c)"
^nu -c $cmd
}
def "forge types" [] {
["github", "gitea", "jojodev", "codeberg"]
}
def clone [
repo: string # Repo name
--forge (-f) = "github": string@"forge types" # Forge type (github, gitea, jojodev, codeberg)
--owner (-o): string # Owner (default: current dir name)
] {
mut id = 'gh'
if $forge == 'gitea' {
$id = 'gt'
} else if $forge == 'jojodev' {
$id = 'jj'
} else if $forge == 'codeberg' {
$id = 'cb'
}
mut namespace = ($env.PWD | path basename)
if $owner != '' {
$namespace = $owner
}
let origin = $'ssh:($id):jolheiser/($repo).git'
let upstream = $'($id):($namespace)/($repo).git'
^git clone $origin
cd $repo
if $namespace != 'jolheiser' {
^git remote add upstream $upstream
^git fetch upstream
}
}
def fg [args ...string] {
^rg --ignore-case --color=always --line-number --no-heading $args
| ^fzf --ansi --color 'hl:-1:underline,hl+:-1:underline:reverse' --delimiter ':' --preview "bat --color=always {1} --theme='ctp-mocha' --highlight-line {2}" --preview-window 'up,60%,border-bottom,+{2}+3/3,~3' --bind $"enter:become\(($env.EDITOR) +{2} {1}\)"
}
def gomodsri [] {
let tmp = (mktemp -d)
go mod vendor -o $tmp
let sri = (go run tailscale.com/cmd/nardump@latest --sri $tmp)
$sri | save -f go.mod.sri
rm -rf $tmp
echo 'nixpkgs.lib.fileContents ./go.mod.sri'
}
def q [
--debug # Debug mode, only echo query
...args: string
] {
let input = $in
mut query = $args | str join ' '
if ($input | is-not-empty) {
$query = $"($query)\n\n($input)"
}
if ($debug) {
print $query
return
}
^llm -s "Answer in as few words as possible. Use a brief style with short replies." -m claude-3.5-sonnet $"($query)"
}
# Run a command if known, otherwise run it with nix
def , [
cmd: string # The command to run
...args: string # Command arguments; all flags MUST be quoted
] {
if (not (which $cmd | is-empty)) {
^$cmd ...$args
return
}
^nix run $"nixpkgs#($cmd)" -- ...$args
}
## Other ##
$env.EDITOR = 'hx'
$env.SSH_AUTH_SOCK = '/run/user/1000/ssh-agent'
source ~/.config/nushell/ohmyposh.nu
source ~/.config/nushell/ssh.nu
|