Home

dotnix @main - refs - log -
-
https://git.jolheiser.com/dotnix.git
My nix dotfiles
dotnix / apps / nogui / nushell / jolheiser.nu
- raw
  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