Convert ide into an actual nu script

main
Julius Riegel 8 months ago
parent 559d3874d6
commit 3adff68faf

@ -14,7 +14,7 @@ icon_theme = "vscode"
[[verbs]] [[verbs]]
key = "enter" key = "enter"
shortcut = "e" shortcut = "e"
external = "nu {{dirs.data}}/scripts/ide.nu open-file '{file}'" external = "nu -c \"use ide.nu; ide open-file '{file}'\""
apply_to = "file" apply_to = "file"
leave_broot = false leave_broot = false

@ -14,6 +14,8 @@ args = []
command = "graphql-lsp" command = "graphql-lsp"
args = ["server", "-m", "stream"] args = ["server", "-m", "stream"]
[language-server.typescript-language-server.config.preferences]
disableSuggestions = true
# languages # languages
@ -81,3 +83,18 @@ formatter = { command = "shfmt", args = ["-s", "-sr", "-"]}
[[grammar]] [[grammar]]
name = "roc" name = "roc"
source = { git = "https://github.com/faldor20/tree-sitter-roc", rev = "381743cd40ee19a9508c6445aacb9085d4bc0cf8" } source = { git = "https://github.com/faldor20/tree-sitter-roc", rev = "381743cd40ee19a9508c6445aacb9085d4bc0cf8" }
[[language]]
name = "nu"
scope = "source.nu"
injection-regex = "nu"
file-types = ["nu", "nuon"]
shebangs = ["nu"]
comment-token = "#"
indent = { tab-width = 2, unit = " " }
language-servers = [ "nu-lsp" ]
[[grammar]]
name = "nu"
source = { git = "https://github.com/nushell/tree-sitter-nu", rev = "358c4f509eb97f0148bbd25ad36acc729819b9c1" }

@ -0,0 +1,283 @@
;;; ---
;;; keywords
[
"def"
"alias"
"export-env"
"export"
"extern"
"module"
"let"
"let-env"
"mut"
"const"
"hide-env"
"source"
"source-env"
"overlay"
"register"
"loop"
"while"
"error"
"do"
"if"
"else"
"try"
"catch"
"match"
"break"
"continue"
"return"
] @keyword
(hide_mod "hide" @keyword)
(decl_use "use" @keyword)
(ctrl_for
"for" @keyword
"in" @keyword
)
(overlay_list "list" @keyword.storage.modifier)
(overlay_hide "hide" @keyword.storage.modifier)
(overlay_new "new" @keyword.storage.modifier)
(overlay_use
"use" @keyword.storage.modifier
"as" @keyword
)
(ctrl_error "make" @keyword.storage.modifier)
;;; ---
;;; literals
(val_number) @constant.numeric
(val_duration
unit: [
"ns" "µs" "us" "ms" "sec" "min" "hr" "day" "wk"
] @variable.parameter
)
(val_filesize
unit: [
"b" "B"
"kb" "kB" "Kb" "KB"
"mb" "mB" "Mb" "MB"
"gb" "gB" "Gb" "GB"
"tb" "tB" "Tb" "TB"
"pb" "pB" "Pb" "PB"
"eb" "eB" "Eb" "EB"
"kib" "kiB" "kIB" "kIb" "Kib" "KIb" "KIB"
"mib" "miB" "mIB" "mIb" "Mib" "MIb" "MIB"
"gib" "giB" "gIB" "gIb" "Gib" "GIb" "GIB"
"tib" "tiB" "tIB" "tIb" "Tib" "TIb" "TIB"
"pib" "piB" "pIB" "pIb" "Pib" "PIb" "PIB"
"eib" "eiB" "eIB" "eIb" "Eib" "EIb" "EIB"
] @variable.parameter
)
(val_binary
[
"0b"
"0o"
"0x"
] @constant.numeric
"[" @punctuation.bracket
digit: [
"," @punctuation.delimiter
(hex_digit) @constant.number
]
"]" @punctuation.bracket
) @constant.numeric
(val_bool) @constant.builtin
(val_nothing) @constant.builtin
(val_string) @string
(val_date) @constant.number
(inter_escape_sequence) @constant.character.escape
(escape_sequence) @constant.character.escape
(val_interpolated [
"$\""
"$\'"
"\""
"\'"
] @string)
(unescaped_interpolated_content) @string
(escaped_interpolated_content) @string
(expr_interpolated ["(" ")"] @variable.parameter)
;;; ---
;;; operators
(expr_binary [
"+"
"-"
"*"
"/"
"mod"
"//"
"++"
"**"
"=="
"!="
"<"
"<="
">"
">="
"=~"
"!~"
"and"
"or"
"xor"
"bit-or"
"bit-xor"
"bit-and"
"bit-shl"
"bit-shr"
"in"
"not-in"
"starts-with"
"ends-with"
] @operator )
(where_command [
"+"
"-"
"*"
"/"
"mod"
"//"
"++"
"**"
"=="
"!="
"<"
"<="
">"
">="
"=~"
"!~"
"and"
"or"
"xor"
"bit-or"
"bit-xor"
"bit-and"
"bit-shl"
"bit-shr"
"in"
"not-in"
"starts-with"
"ends-with"
] @operator)
(assignment [
"="
"+="
"-="
"*="
"/="
"++="
] @operator)
(expr_unary ["not" "-"] @operator)
(val_range [
".."
"..="
"..<"
] @operator)
["=>" "=" "|"] @operator
[
"o>" "out>"
"e>" "err>"
"e+o>" "err+out>"
"o+e>" "out+err>"
] @special
;;; ---
;;; punctuation
[
","
";"
] @punctuation.delimiter
(param_short_flag "-" @punctuation.delimiter)
(param_long_flag ["--"] @punctuation.delimiter)
(long_flag ["--"] @punctuation.delimiter)
(param_rest "..." @punctuation.delimiter)
(param_type [":"] @punctuation.special)
(param_value ["="] @punctuation.special)
(param_cmd ["@"] @punctuation.special)
(param_opt ["?"] @punctuation.special)
[
"(" ")"
"{" "}"
"[" "]"
] @punctuation.bracket
(val_record
(record_entry ":" @punctuation.delimiter))
;;; ---
;;; identifiers
(param_rest
name: (_) @variable.parameter)
(param_opt
name: (_) @variable.parameter)
(parameter
param_name: (_) @variable.parameter)
(param_cmd
(cmd_identifier) @string)
(param_long_flag) @variable.parameter
(param_short_flag) @variable.parameter
(short_flag) @variable.parameter
(long_flag) @variable.parameter
(scope_pattern [(wild_card) @function])
(cmd_identifier) @function
(command
"^" @punctuation.delimiter
head: (_) @function
)
"where" @function
(path
["." "?"] @punctuation.delimiter
) @variable.parameter
(val_variable
"$" @variable.parameter
[
(identifier) @namespace
"in"
"nu"
"env"
] @special
)
;;; ---
;;; types
(flat_type) @type.builtin
(list_type
"list" @type.enum
["<" ">"] @punctuation.bracket
)
(collection_type
["record" "table"] @type.enum
"<" @punctuation.bracket
key: (_) @variable.parameter
["," ":"] @punctuation.delimiter
">" @punctuation.bracket
)
(shebang) @comment
(comment) @comment

@ -1,4 +1,3 @@
alias ide = {{dirs.data}}/scripts/ide.nu
{{#if-installed helix}} {{#if-installed helix}}
alias hx = helix alias hx = helix
{{/if-installed}} {{/if-installed}}

@ -468,3 +468,5 @@ source git.nu
use ci.nu use ci.nu
{{/if-installed}} {{/if-installed}}
{{/if-installed}} {{/if-installed}}
use ide.nu

@ -0,0 +1,5 @@
export const HOME = '{{dirs.home}}'
export const CONFIG = '{{dirs.config}}'
export const DATA = '{{dirs.data}}'

@ -1,26 +1,29 @@
#!/bin/env nu #!/bin/env nu
use task.nu use task.nu
use dirs.nu
def --env main [] { const ZELLIJ_LAYOUT = ($dirs.CONFIG | path join zellij/development.toml)
export def --env main [] {
if $env.ZELLIJ? == null { if $env.ZELLIJ? == null {
if $env.WEZTERM_PANE? != null { if $env.WEZTERM_PANE? != null {
let name = ($env.PWD | path basename) let name = ($env.PWD | path basename)
wezterm cli set-tab-title $"IDE ($name)" wezterm cli set-tab-title $"IDE ($name)"
} }
let tmpdir = init let tmpdir = init
zellij --layout {{dirs.config}}/zellij/development.toml --session (session-name) zellij --layout $ZELLIJ_LAYOUT --session (session-name)
rm -r $tmpdir rm -r $tmpdir
if $env.WEZTERM_PANE? != null { if $env.WEZTERM_PANE? != null {
wezterm cli set-tab-title "" wezterm cli set-tab-title ""
} }
} else { } else {
zellij action new-tab --layout {{dirs.config}}/zellij/development.toml --name (tab-name) zellij action new-tab --layout $ZELLIJ_LAYOUT --name (tab-name)
} }
} }
export def `main open-file` [path: string] { export def open-file [path: string] {
if ($path | str starts-with "http") { if ($path | str starts-with "http") {
/usr/bin/xdg-open $path /usr/bin/xdg-open $path
return return
@ -34,13 +37,22 @@ export def `main open-file` [path: string] {
} }
} }
export def `main floating-prompt` [] { export def floating-prompt [] {
task spawn -i { task spawn -i {
zellij action new-pane --floating -- nu -c 'nu -e clear; zellij action close-pane'; zellij action new-pane --floating -- nu -c 'nu -e clear; zellij action close-pane';
} }
zellij action close-pane zellij action close-pane
} }
export def last-notification [] {
let notifications = (open $env.NOTIFY_FILE | lines)
if ($notifications | is-empty) {
return
}
$notifications | skip 1 | save -f $env.NOTIFY_FILE
$notifications | first
}
def open-editor [path: string] { def open-editor [path: string] {
zellij ac move-focus right zellij ac move-focus right
zellij ac write-chars $":open ($path)\r" zellij ac write-chars $":open ($path)\r"
@ -72,10 +84,33 @@ def --env init [] {
let tmpdir = mktemp -d --suffix "-ide" let tmpdir = mktemp -d --suffix "-ide"
let tmpbin = ($tmpdir | path join "bin") let tmpbin = ($tmpdir | path join "bin")
mkdir $tmpbin mkdir $tmpbin
let new_open = ($tmpbin | path join "xdg-open")
"#!/bin/bash\nnu {{dirs.data}}/scripts/ide.nu open-file $*\n" | save -f $new_open
chmod +x $new_open
$env.PATH = ($env.PATH | prepend $tmpbin) $env.PATH = ($env.PATH | prepend $tmpbin)
create-xdg-open $tmpbin
create-notify-send $tmpdir $tmpbin
$tmpdir $tmpdir
} }
def create-xdg-open [tmpbin: string] {
let new_open = ($tmpbin | path join "xdg-open")
("#!/bin/env nu
use ide.nu
def main [file: string] {
ide open-file $file
}
" | save -f $new_open)
chmod +x $new_open
}
def --env create-notify-send [tmpdir: string, tmpbin: string] {
$env.NOTIFY_FILE = ($tmpdir | path join "notifications.txt")
touch $env.NOTIFY_FILE
let new_ntfy = ($tmpbin | path join "notify-send")
("#!/bin/env nu
def main [title: string, content: string] {
$\"(ansi {attr: bi})($title)(ansi reset) ($content)\\n\" | save -a $env.NOTIFY_FILE
}
" | save -f $new_ntfy)
chmod +x $new_ntfy
}

@ -9,6 +9,7 @@ layout {
plugin location="https://github.com/dj95/zjstatus/releases/latest/download/zjstatus.wasm" { plugin location="https://github.com/dj95/zjstatus/releases/latest/download/zjstatus.wasm" {
format_left "{mode}#[fg=#181825,bg=#4b0082]{command_pwd}#[fg=#4b0082,bg=blue]{command_git_branch}#[fg=blue,bg=#181825]{tabs}" format_left "{mode}#[fg=#181825,bg=#4b0082]{command_pwd}#[fg=#4b0082,bg=blue]{command_git_branch}#[fg=blue,bg=#181825]{tabs}"
format_right "{command_cpuusage}#[fg=cyan,bg=green]{command_memusage}#[fg=green,bg=#b1bbfa]{datetime}" format_right "{command_cpuusage}#[fg=cyan,bg=green]{command_memusage}#[fg=green,bg=#b1bbfa]{datetime}"
format_center "{command_notify}"
format_space "#[bg=#181825]" format_space "#[bg=#181825]"
hide_frame_for_single_pane "true" hide_frame_for_single_pane "true"
@ -28,17 +29,22 @@ layout {
command_pwd_command "nu -c '$env.PWD | path relative-to $env.HOME'" command_pwd_command "nu -c '$env.PWD | path relative-to $env.HOME'"
command_pwd_format "#[fg=#ffffff,bg=#4b0082] {stdout} " command_pwd_format "#[fg=#ffffff,bg=#4b0082] {stdout} "
command_pwd_interval "1" command_pwd_interval "1"
command_pwd_interval "static" command_pwd_rendermode "static"
command_cpuusage_command "nu -c 'sys | get cpu | get cpu_usage | math avg | math round -p 2 | $\"($in) %\"'" command_cpuusage_command "nu -c 'sys | get cpu | get cpu_usage | math avg | math round -p 2 | $\"($in) %\"'"
command_cpuusage_format "#[fg=#181825,bg=cyan] {stdout} " command_cpuusage_format "#[fg=#181825,bg=cyan] {stdout} "
command_cpuusage_interval "10" command_cpuusage_interval "10"
command_cpuusage_interval "static" command_cpuusage_rendermode "static"
command_memusage_command "nu -c 'sys | get mem.used'" command_memusage_command "nu -c 'sys | get mem.used'"
command_memusage_format "#[fg=#181825,bg=green] {stdout} " command_memusage_format "#[fg=#181825,bg=green] {stdout} "
command_memusage_interval "10" command_memusage_interval "10"
command_memusage_interval "static" command_memusage_rendermode "static"
command_notify_command "nu -c \"use ide.nu; ide last-notification\""
command_notify_format "{stdout}"
command_notify_interval "5"
command_notify_rendermode "static"
datetime "#[fg=#181825,bg=#b1bbfa] {format} " datetime "#[fg=#181825,bg=#b1bbfa] {format} "
datetime_format "%A, %d %b %Y %H:%M" datetime_format "%A, %d %b %Y %H:%M"
@ -73,6 +79,6 @@ layout {
keybinds { keybinds {
normal { normal {
bind "Ctrl f" { ToggleFocusFullscreen; } bind "Ctrl f" { ToggleFocusFullscreen; }
bind "Alt p" { Run "nu" "{{dirs.data}}/scripts/ide.nu" "floating-prompt"; } bind "Alt p" { Run "nu" "-c" "use ide.nu; ide floating-prompt"; }
} }
} }

Loading…
Cancel
Save