From 2e083df68e17c8e32f0386210d483f9e38572107 Mon Sep 17 00:00:00 2001 From: Tao Tien <29749622+taotien@users.noreply.github.com> Date: Thu, 22 Aug 2024 14:29:12 -0700 Subject: [PATCH] nushel --- ...sync-conflict-20240823-145407-34PB6X7.lock | 278 +++++++ users/tao/HOME.nix | 1 + users/tao/nushell/config.nu | 425 ++++++---- users/tao/nushell/config.nu.old | 729 ++++++++++++++++++ users/tao/nushell/env.nu | 2 + users/tao/nushell/stuff.nu | 3 +- 6 files changed, 1306 insertions(+), 132 deletions(-) create mode 100644 flake.sync-conflict-20240823-145407-34PB6X7.lock create mode 100644 users/tao/nushell/config.nu.old diff --git a/flake.sync-conflict-20240823-145407-34PB6X7.lock b/flake.sync-conflict-20240823-145407-34PB6X7.lock new file mode 100644 index 0000000..722c4f6 --- /dev/null +++ b/flake.sync-conflict-20240823-145407-34PB6X7.lock @@ -0,0 +1,278 @@ +{ + "nodes": { + "agenix": { + "inputs": { + "darwin": [], + "home-manager": "home-manager", + "nixpkgs": "nixpkgs", + "systems": "systems" + }, + "locked": { + "lastModified": 1723293904, + "narHash": "sha256-b+uqzj+Wa6xgMS9aNbX4I+sXeb5biPDi39VgvSFqFvU=", + "owner": "ryantm", + "repo": "agenix", + "rev": "f6291c5935fdc4e0bef208cfc0dcab7e3f7a1c41", + "type": "github" + }, + "original": { + "owner": "ryantm", + "repo": "agenix", + "type": "github" + } + }, + "disko": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1724290508, + "narHash": "sha256-dtL4vielmrko/0XpZ3Wfd7czVvv3NC5oiwh8PKJN9hw=", + "owner": "nix-community", + "repo": "disko", + "rev": "4b866c9942d0f771ae934f04ca9859936f9bfbcf", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "disko", + "type": "github" + } + }, + "flake-compat": { + "flake": false, + "locked": { + "lastModified": 1717312683, + "narHash": "sha256-FrlieJH50AuvagamEvWMIE6D2OAnERuDboFDYAED/dE=", + "owner": "nix-community", + "repo": "flake-compat", + "rev": "38fd3954cf65ce6faf3d0d45cd26059e059f07ea", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "flake-compat", + "type": "github" + } + }, + "home-manager": { + "inputs": { + "nixpkgs": [ + "agenix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1703113217, + "narHash": "sha256-7ulcXOk63TIT2lVDSExj7XzFx09LpdSAPtvgtM7yQPE=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "3bfaacf46133c037bb356193bd2f1765d9dc82c1", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "home-manager", + "type": "github" + } + }, + "home-manager_2": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1723986931, + "narHash": "sha256-Fy+KEvDQ+Hc8lJAV3t6leXhZJ2ncU5/esxkgt3b8DEY=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "2598861031b78aadb4da7269df7ca9ddfc3e1671", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "home-manager", + "type": "github" + } + }, + "home-manager_3": { + "inputs": { + "nixpkgs": [ + "plasma-manager", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1714377222, + "narHash": "sha256-UsDsjWCKlWn8vbXi8Zza9Hkq3xyk8fpvFNo2VM5S74E=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "2af7c78b7bb9cf18406a193eba13ef9f99388f49", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "home-manager", + "type": "github" + } + }, + "nixos-cosmic": { + "inputs": { + "flake-compat": "flake-compat", + "nixpkgs": [ + "nixpkgs" + ], + "nixpkgs-stable": "nixpkgs-stable", + "rust-overlay": "rust-overlay" + }, + "locked": { + "lastModified": 1724290496, + "narHash": "sha256-tiXzvSFSBwAC2HtbBDePZWs112K9dynlfQOHzU7XyHE=", + "owner": "lilyinstarlight", + "repo": "nixos-cosmic", + "rev": "0175cd90ce3ee1a8fd30a30354be105f82688f66", + "type": "github" + }, + "original": { + "owner": "lilyinstarlight", + "repo": "nixos-cosmic", + "type": "github" + } + }, + "nixos-hardware": { + "locked": { + "lastModified": 1724067415, + "narHash": "sha256-WJBAEFXAtA41RMpK8mvw0cQ62CJkNMBtzcEeNIJV7b0=", + "owner": "NixOS", + "repo": "nixos-hardware", + "rev": "b09c46430ffcf18d575acf5c339b38ac4e1db5d2", + "type": "github" + }, + "original": { + "id": "nixos-hardware", + "ref": "master", + "type": "indirect" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1703013332, + "narHash": "sha256-+tFNwMvlXLbJZXiMHqYq77z/RfmpfpiI3yjL6o/Zo9M=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "54aac082a4d9bb5bbc5c4e899603abfb76a3f6d6", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-stable": { + "locked": { + "lastModified": 1724098845, + "narHash": "sha256-D5HwjQw/02fuXbR4LCTo64koglP2j99hkDR79/3yLOE=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "f1bad50880bae73ff2d82fafc22010b4fc097a9c", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-24.05", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_2": { + "locked": { + "lastModified": 1724224976, + "narHash": "sha256-Z/ELQhrSd7bMzTO8r7NZgi9g5emh+aRKoCdaAv5fiO0=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "c374d94f1536013ca8e92341b540eba4c22f9c62", + "type": "github" + }, + "original": { + "id": "nixpkgs", + "ref": "nixos-unstable", + "type": "indirect" + } + }, + "plasma-manager": { + "inputs": { + "home-manager": "home-manager_3", + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1724187112, + "narHash": "sha256-S+nYkVVAzobmVxBmwUlznzHnuOt613aA7wE7MHllYyI=", + "owner": "pjones", + "repo": "plasma-manager", + "rev": "df4d1d36d0c29d3cc655c4e35d0f6ebecd6d7303", + "type": "github" + }, + "original": { + "owner": "pjones", + "repo": "plasma-manager", + "type": "github" + } + }, + "root": { + "inputs": { + "agenix": "agenix", + "disko": "disko", + "home-manager": "home-manager_2", + "nixos-cosmic": "nixos-cosmic", + "nixos-hardware": "nixos-hardware", + "nixpkgs": "nixpkgs_2", + "plasma-manager": "plasma-manager" + } + }, + "rust-overlay": { + "inputs": { + "nixpkgs": [ + "nixos-cosmic", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1724206841, + "narHash": "sha256-L8dKaX4T3k+TR2fEHCfGbH4UXdspovz/pj87iai9qmc=", + "owner": "oxalica", + "repo": "rust-overlay", + "rev": "45e98fbd62c32e5927e952d2833fa1ba4fb35a61", + "type": "github" + }, + "original": { + "owner": "oxalica", + "repo": "rust-overlay", + "type": "github" + } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/users/tao/HOME.nix b/users/tao/HOME.nix index 2d55b95..63af39e 100644 --- a/users/tao/HOME.nix +++ b/users/tao/HOME.nix @@ -115,6 +115,7 @@ in { taskwarrior = { enable = true; + package = pkgs.taskwarrior3; dataLocation = "/home/tao/sync"; }; diff --git a/users/tao/nushell/config.nu b/users/tao/nushell/config.nu index 8252ffc..7e31f35 100644 --- a/users/tao/nushell/config.nu +++ b/users/tao/nushell/config.nu @@ -1,6 +1,6 @@ # Nushell Config File # -# version = 0.83.1 +# version = "0.96.1" # For more information on defining custom themes, see # https://www.nushell.sh/book/coloring_and_theming.html @@ -14,45 +14,24 @@ let dark_theme = { empty: blue # Closures can be used to choose colors for specific values. # The value (in this case, a bool) is piped into the closure. - bool: {|| if $in { 'light_cyan' } else { 'light_gray' } } + # eg) {|| if $in { 'light_cyan' } else { 'light_gray' } } + bool: light_cyan int: white - filesize: {|e| - if $e == 0b { - 'white' - } else if $e < 1mb { - 'cyan' - } else { 'blue' } - } + filesize: cyan duration: white - date: {|| (date now) - $in | - if $in < 1hr { - 'purple' - } else if $in < 6hr { - 'red' - } else if $in < 1day { - 'yellow' - } else if $in < 3day { - 'green' - } else if $in < 1wk { - 'light_green' - } else if $in < 6wk { - 'cyan' - } else if $in < 52wk { - 'blue' - } else { 'dark_gray' } - } + date: purple range: white float: white string: white nothing: white binary: white - cellpath: white + cell-path: white row_index: green_bold record: white list: white block: white hints: dark_gray - search_result: {bg: red fg: white} + search_result: { bg: red fg: white } shape_and: purple_bold shape_binary: purple_bold shape_block: blue_bold @@ -63,14 +42,17 @@ let dark_theme = { shape_directory: cyan shape_external: cyan shape_externalarg: green_bold + shape_external_resolved: light_yellow_bold shape_filepath: cyan shape_flag: blue_bold shape_float: purple_bold # shapes are used to change the cli syntax highlighting - shape_garbage: { fg: white bg: red attr: b} + shape_garbage: { fg: white bg: red attr: b } + shape_glob_interpolation: cyan_bold shape_globpattern: cyan_bold shape_int: purple_bold shape_internalcall: cyan_bold + shape_keyword: cyan_bold shape_list: cyan_bold shape_literal: blue shape_match_pattern: green @@ -88,15 +70,81 @@ let dark_theme = { shape_table: blue_bold shape_variable: purple shape_vardecl: purple + shape_raw_string: light_purple } +let light_theme = { + # color for nushell primitives + separator: dark_gray + leading_trailing_space_bg: { attr: n } # no fg, no bg, attr none effectively turns this off + header: green_bold + empty: blue + # Closures can be used to choose colors for specific values. + # The value (in this case, a bool) is piped into the closure. + # eg) {|| if $in { 'dark_cyan' } else { 'dark_gray' } } + bool: dark_cyan + int: dark_gray + filesize: cyan_bold + duration: dark_gray + date: purple + range: dark_gray + float: dark_gray + string: dark_gray + nothing: dark_gray + binary: dark_gray + cell-path: dark_gray + row_index: green_bold + record: dark_gray + list: dark_gray + block: dark_gray + hints: dark_gray + search_result: { fg: white bg: red } + shape_and: purple_bold + shape_binary: purple_bold + shape_block: blue_bold + shape_bool: light_cyan + shape_closure: green_bold + shape_custom: green + shape_datetime: cyan_bold + shape_directory: cyan + shape_external: cyan + shape_externalarg: green_bold + shape_external_resolved: light_purple_bold + shape_filepath: cyan + shape_flag: blue_bold + shape_float: purple_bold + # shapes are used to change the cli syntax highlighting + shape_garbage: { fg: white bg: red attr: b } + shape_glob_interpolation: cyan_bold + shape_globpattern: cyan_bold + shape_int: purple_bold + shape_internalcall: cyan_bold + shape_keyword: cyan_bold + shape_list: cyan_bold + shape_literal: blue + shape_match_pattern: green + shape_matching_brackets: { attr: u } + shape_nothing: light_cyan + shape_operator: yellow + shape_or: purple_bold + shape_pipe: purple_bold + shape_range: yellow_bold + shape_record: cyan_bold + shape_redirection: purple_bold + shape_signature: green_bold + shape_string: green + shape_string_interpolation: cyan_bold + shape_table: blue_bold + shape_variable: purple + shape_vardecl: purple + shape_raw_string: light_purple +} # External completer example # let carapace_completer = {|spans| -# carapace $spans.0 nushell $spans | from json +# carapace $spans.0 nushell ...$spans | from json # } - # The default config record. This is where much of your global configuration is setup. $env.config = { show_banner: false # true or false to enable or disable the welcome banner at startup @@ -110,18 +158,22 @@ $env.config = { always_trash: false # always act as if -t was given. Can be overridden with -p } - table: { mode: rounded # basic, compact, compact_double, light, thin, with_love, rounded, reinforced, heavy, none, other index_mode: always # "always" show indexes, "never" show indexes, "auto" = show indexes when a table has "index" column show_empty: true # show 'empty list' and 'empty record' placeholders for command output + padding: { left: 1, right: 1 } # a left right padding of each column in a table trim: { methodology: wrapping # wrapping or truncating wrapping_try_keep_words: true # A strategy used by the 'wrapping' methodology truncating_suffix: "..." # A suffix used by the 'truncating' methodology } + header_on_separator: false # show header text on separator/border line + # abbreviated_row_count: 10 # limit data rows from top and bottom after reaching a set point } + error_style: "fancy" # "fancy" or "plain" for screen reader-friendly error messages + # datetime_format determines what a datetime rendered in the shell would look like. # Behavior without this configuration point will be to "humanize" the datetime display, # showing something like "a day ago." @@ -131,37 +183,20 @@ $env.config = { } explore: { - try: { - border_color: {fg: "white"} - }, - status_bar_background: {fg: "#1D1F21", bg: "#C4C9C6"}, - command_bar_text: {fg: "#C4C9C6"}, - highlight: {fg: "black", bg: "yellow"}, + status_bar_background: { fg: "#1D1F21", bg: "#C4C9C6" }, + command_bar_text: { fg: "#C4C9C6" }, + highlight: { fg: "black", bg: "yellow" }, status: { - error: {fg: "white", bg: "red"}, + error: { fg: "white", bg: "red" }, warn: {} info: {} }, - table: { - split_line: {fg: "#404040"}, - selected_cell: {}, - selected_row: {}, - selected_column: {}, - cursor: true, - line_head_top: true, - line_head_bottom: true, - line_shift: true, - line_index: true, - }, - config: { - border_color: {fg: "white"} - cursor_color: {fg: "black", bg: "light_yellow"} - }, + selected_cell: { bg: light_blue }, } history: { max_size: 100_000 # Session has to be reloaded for this to take effect - sync_on_enter: false # Enable to share history between multiple sessions, else you have to close the session to write history to file + sync_on_enter: true # Enable to share history between multiple sessions, else you have to close the session to write history to file file_format: "plaintext" # "sqlite" or "plaintext" isolation: false # only available with sqlite file_format. true enables history isolation, false disables it. true will allow the history to be isolated to the current session using up/down arrows. false will allow the history to be shared across all sessions. } @@ -170,34 +205,83 @@ $env.config = { case_sensitive: false # set to true to enable case-sensitive completions quick: true # set this to false to prevent auto-selecting completions when only one remains partial: true # set this to false to prevent partial filling of the prompt - algorithm: "fuzzy" # prefix or fuzzy + algorithm: "prefix" # prefix or fuzzy external: { enable: true # set to false to prevent nushell looking into $env.PATH to find more suggestions, `false` recommended for WSL users as this look up may be very slow max_results: 100 # setting it lower can improve completion performance at the cost of omitting some options completer: null # check 'carapace_completer' above as an example } + use_ls_colors: true # set this to true to enable file/path/directory completions using LS_COLORS } filesize: { - metric: true # true => KB, MB, GB (ISO standard), false => KiB, MiB, GiB (Windows standard) + metric: false # true => KB, MB, GB (ISO standard), false => KiB, MiB, GiB (Windows standard) format: "auto" # b, kb, kib, mb, mib, gb, gib, tb, tib, pb, pib, eb, eib, auto } cursor_shape: { - emacs: line # block, underscore, line, blink_block, blink_underscore, blink_line (line is the default) - vi_insert: line # block, underscore, line , blink_block, blink_underscore, blink_line (block is the default) - vi_normal: block # block, underscore, line, blink_block, blink_underscore, blink_line (underscore is the default) + emacs: line # block, underscore, line, blink_block, blink_underscore, blink_line, inherit to skip setting cursor shape (line is the default) + vi_insert: block # block, underscore, line, blink_block, blink_underscore, blink_line, inherit to skip setting cursor shape (block is the default) + vi_normal: underscore # block, underscore, line, blink_block, blink_underscore, blink_line, inherit to skip setting cursor shape (underscore is the default) } - color_config: {} # if you want a more interesting theme, you can replace the empty record with `$dark_theme`, `$light_theme` or another custom record + color_config: $dark_theme # if you want a more interesting theme, you can replace the empty record with `$dark_theme`, `$light_theme` or another custom record use_grid_icons: true - footer_mode: "25" # always, never, number_of_rows, auto + footer_mode: 25 # always, never, number_of_rows, auto float_precision: 2 # the precision for displaying floats in tables - buffer_editor: "" # command that will be used to edit the current line buffer with ctrl+o, if unset fallback to $env.EDITOR and $env.VISUAL + buffer_editor: null # command that will be used to edit the current line buffer with ctrl+o, if unset fallback to $env.EDITOR and $env.VISUAL use_ansi_coloring: true bracketed_paste: true # enable bracketed paste, currently useless on windows edit_mode: emacs # emacs, vi + shell_integration: { + # osc2 abbreviates the path if in the home_dir, sets the tab/window title, shows the running command in the tab/window title + osc2: true + # osc7 is a way to communicate the path to the terminal, this is helpful for spawning new tabs in the same directory + osc7: true + # osc8 is also implemented as the deprecated setting ls.show_clickable_links, it shows clickable links in ls output if your terminal supports it. show_clickable_links is deprecated in favor of osc8 + osc8: true + # osc9_9 is from ConEmu and is starting to get wider support. It's similar to osc7 in that it communicates the path to the terminal + osc9_9: false + # osc133 is several escapes invented by Final Term which include the supported ones below. + # 133;A - Mark prompt start + # 133;B - Mark prompt end + # 133;C - Mark pre-execution + # 133;D;exit - Mark execution finished with exit code + # This is used to enable terminals to know where the prompt is, the command is, where the command finishes, and where the output of the command is + osc133: true + # osc633 is closely related to osc133 but only exists in visual studio code (vscode) and supports their shell integration features + # 633;A - Mark prompt start + # 633;B - Mark prompt end + # 633;C - Mark pre-execution + # 633;D;exit - Mark execution finished with exit code + # 633;E - NOT IMPLEMENTED - Explicitly set the command line with an optional nonce + # 633;P;Cwd= - Mark the current working directory and communicate it to the terminal + # and also helps with the run recent menu in vscode + osc633: true + # reset_application_mode is escape \x1b[?1l and was added to help ssh work better + reset_application_mode: true + } render_right_prompt_on_last_line: false # true or false to enable or disable right prompt to be rendered on last line of the prompt. + use_kitty_protocol: false # enables keyboard enhancement protocol implemented by kitty console, only if your terminal support this. + highlight_resolved_externals: false # true enables highlighting of external commands in the repl resolved by which. + recursion_limit: 50 # the maximum number of times nushell allows recursion before stopping it + + plugins: {} # Per-plugin configuration. See https://www.nushell.sh/contributor-book/plugins.html#configuration. + + plugin_gc: { + # Configuration for plugin garbage collection + default: { + enabled: true # true to enable stopping of inactive plugins + stop_after: 10sec # how long to wait after a plugin is inactive to stop it + } + plugins: { + # alternate configuration for specific plugins, by name, for example: + # + # gstat: { + # enabled: false + # } + } + } hooks: { pre_prompt: [{ null }] # run before the prompt is shown @@ -205,13 +289,7 @@ $env.config = { env_change: { PWD: [{|before, after| null }] # run if the PWD environment is different since the last repl input } - display_output: { - if (term size).columns >= 80 { - table -e - } else { - table - } - } + display_output: "if (term size).columns >= 100 { table -e } else { table }" # run to display the output of a pipeline command_not_found: { null } # return an error message when a command is not found } @@ -230,8 +308,43 @@ $env.config = { } style: { text: green - selected_text: green_reverse + selected_text: { attr: r } description_text: yellow + match_text: { attr: u } + selected_match_text: { attr: ur } + } + } + { + name: ide_completion_menu + only_buffer_difference: false + marker: "| " + type: { + layout: ide + min_completion_width: 0, + max_completion_width: 50, + max_completion_height: 10, # will be limited by the available lines in the terminal + padding: 0, + border: true, + cursor_offset: 0, + description_mode: "prefer_right" + min_description_width: 0 + max_description_width: 50 + max_description_height: 10 + description_offset: 1 + # If true, the cursor pos will be corrected, so the suggestions match up with the typed text + # + # C:\> str + # str join + # str trim + # str split + correct_cursor_pos: false + } + style: { + text: green + selected_text: { attr: r } + description_text: yellow + match_text: { attr: u } + selected_match_text: { attr: ur } } } { @@ -278,6 +391,20 @@ $env.config = { until: [ { send: menu name: completion_menu } { send: menunext } + { edit: complete } + ] + } + } + { + name: ide_completion_menu + modifier: control + keycode: char_n + mode: [emacs vi_normal vi_insert] + event: { + until: [ + { send: menu name: ide_completion_menu } + { send: menunext } + { edit: complete } ] } } @@ -352,7 +479,7 @@ $env.config = { { name: search_history modifier: control - keycode: char_r + keycode: char_q mode: [emacs, vi_normal, vi_insert] event: { send: searchhistory } } @@ -370,8 +497,8 @@ $env.config = { mode: [emacs, vi_normal, vi_insert] event: { until: [ - {send: menuup} - {send: up} + { send: menuup } + { send: up } ] } } @@ -382,8 +509,8 @@ $env.config = { mode: [emacs, vi_normal, vi_insert] event: { until: [ - {send: menudown} - {send: down} + { send: menudown } + { send: down } ] } } @@ -394,8 +521,8 @@ $env.config = { mode: [emacs, vi_normal, vi_insert] event: { until: [ - {send: menuleft} - {send: left} + { send: menuleft } + { send: left } ] } } @@ -406,9 +533,9 @@ $env.config = { mode: [emacs, vi_normal, vi_insert] event: { until: [ - {send: historyhintcomplete} - {send: menuright} - {send: right} + { send: historyhintcomplete } + { send: menuright } + { send: right } ] } } @@ -417,7 +544,7 @@ $env.config = { modifier: control keycode: left mode: [emacs, vi_normal, vi_insert] - event: {edit: movewordleft} + event: { edit: movewordleft } } { name: move_one_word_right_or_take_history_hint @@ -426,8 +553,8 @@ $env.config = { mode: [emacs, vi_normal, vi_insert] event: { until: [ - {send: historyhintwordcomplete} - {edit: movewordright} + { send: historyhintwordcomplete } + { edit: movewordright } ] } } @@ -436,14 +563,14 @@ $env.config = { modifier: none keycode: home mode: [emacs, vi_normal, vi_insert] - event: {edit: movetolinestart} + event: { edit: movetolinestart } } { name: move_to_line_start modifier: control keycode: char_a mode: [emacs, vi_normal, vi_insert] - event: {edit: movetolinestart} + event: { edit: movetolinestart } } { name: move_to_line_end_or_take_history_hint @@ -452,8 +579,8 @@ $env.config = { mode: [emacs, vi_normal, vi_insert] event: { until: [ - {send: historyhintcomplete} - {edit: movetolineend} + { send: historyhintcomplete } + { edit: movetolineend } ] } } @@ -464,8 +591,8 @@ $env.config = { mode: [emacs, vi_normal, vi_insert] event: { until: [ - {send: historyhintcomplete} - {edit: movetolineend} + { send: historyhintcomplete } + { edit: movetolineend } ] } } @@ -474,14 +601,14 @@ $env.config = { modifier: control keycode: home mode: [emacs, vi_normal, vi_insert] - event: {edit: movetolinestart} + event: { edit: movetolinestart } } { name: move_to_line_end modifier: control keycode: end mode: [emacs, vi_normal, vi_insert] - event: {edit: movetolineend} + event: { edit: movetolineend } } { name: move_up @@ -490,8 +617,8 @@ $env.config = { mode: [emacs, vi_normal, vi_insert] event: { until: [ - {send: menuup} - {send: up} + { send: menuup } + { send: up } ] } } @@ -502,8 +629,8 @@ $env.config = { mode: [emacs, vi_normal, vi_insert] event: { until: [ - {send: menudown} - {send: down} + { send: menudown } + { send: down } ] } } @@ -512,56 +639,56 @@ $env.config = { modifier: none keycode: backspace mode: [emacs, vi_insert] - event: {edit: backspace} + event: { edit: backspace } } { name: delete_one_word_backward modifier: control keycode: backspace mode: [emacs, vi_insert] - event: {edit: backspaceword} + event: { edit: backspaceword } } { name: delete_one_character_forward modifier: none keycode: delete mode: [emacs, vi_insert] - event: {edit: delete} + event: { edit: delete } } { name: delete_one_character_forward modifier: control keycode: delete mode: [emacs, vi_insert] - event: {edit: delete} + event: { edit: delete } } { - name: delete_one_character_forward + name: delete_one_character_backward modifier: control keycode: char_h mode: [emacs, vi_insert] - event: {edit: backspace} + event: { edit: backspace } } { name: delete_one_word_backward modifier: control keycode: char_w mode: [emacs, vi_insert] - event: {edit: backspaceword} + event: { edit: backspaceword } } { name: move_left modifier: none keycode: backspace mode: vi_normal - event: {edit: moveleft} + event: { edit: moveleft } } { name: newline_or_run_command modifier: none keycode: enter mode: emacs - event: {send: enter} + event: { send: enter } } { name: move_left @@ -570,8 +697,8 @@ $env.config = { mode: emacs event: { until: [ - {send: menuleft} - {send: left} + { send: menuleft } + { send: left } ] } } @@ -582,9 +709,9 @@ $env.config = { mode: emacs event: { until: [ - {send: historyhintcomplete} - {send: menuright} - {send: right} + { send: historyhintcomplete } + { send: menuright } + { send: right } ] } } @@ -593,56 +720,56 @@ $env.config = { modifier: control keycode: char_g mode: emacs - event: {edit: redo} + event: { edit: redo } } { name: undo_change modifier: control keycode: char_z mode: emacs - event: {edit: undo} + event: { edit: undo } } { name: paste_before modifier: control keycode: char_y mode: emacs - event: {edit: pastecutbufferbefore} + event: { edit: pastecutbufferbefore } } { name: cut_word_left modifier: control keycode: char_w mode: emacs - event: {edit: cutwordleft} + event: { edit: cutwordleft } } { name: cut_line_to_end modifier: control keycode: char_k mode: emacs - event: {edit: cuttoend} + event: { edit: cuttoend } } { name: cut_line_from_start modifier: control keycode: char_u mode: emacs - event: {edit: cutfromstart} + event: { edit: cutfromstart } } { name: swap_graphemes modifier: control keycode: char_t mode: emacs - event: {edit: swapgraphemes} + event: { edit: swapgraphemes } } { name: move_one_word_left modifier: alt keycode: left mode: emacs - event: {edit: movewordleft} + event: { edit: movewordleft } } { name: move_one_word_right_or_take_history_hint @@ -651,8 +778,8 @@ $env.config = { mode: emacs event: { until: [ - {send: historyhintwordcomplete} - {edit: movewordright} + { send: historyhintwordcomplete } + { edit: movewordright } ] } } @@ -661,7 +788,7 @@ $env.config = { modifier: alt keycode: char_b mode: emacs - event: {edit: movewordleft} + event: { edit: movewordleft } } { name: move_one_word_right_or_take_history_hint @@ -670,8 +797,8 @@ $env.config = { mode: emacs event: { until: [ - {send: historyhintwordcomplete} - {edit: movewordright} + { send: historyhintwordcomplete } + { edit: movewordright } ] } } @@ -680,50 +807,86 @@ $env.config = { modifier: alt keycode: delete mode: emacs - event: {edit: deleteword} + event: { edit: deleteword } } { name: delete_one_word_backward modifier: alt keycode: backspace mode: emacs - event: {edit: backspaceword} + event: { edit: backspaceword } } { name: delete_one_word_backward modifier: alt keycode: char_m mode: emacs - event: {edit: backspaceword} + event: { edit: backspaceword } } { name: cut_word_to_right modifier: alt keycode: char_d mode: emacs - event: {edit: cutwordright} + event: { edit: cutwordright } } { name: upper_case_word modifier: alt keycode: char_u mode: emacs - event: {edit: uppercaseword} + event: { edit: uppercaseword } } { name: lower_case_word modifier: alt keycode: char_l mode: emacs - event: {edit: lowercaseword} + event: { edit: lowercaseword } } { name: capitalize_char modifier: alt keycode: char_c mode: emacs - event: {edit: capitalizechar} + event: { edit: capitalizechar } + } + # The following bindings with `*system` events require that Nushell has + # been compiled with the `system-clipboard` feature. + # This should be the case for Windows, macOS, and most Linux distributions + # Not available for example on Android (termux) + # If you want to use the system clipboard for visual selection or to + # paste directly, uncomment the respective lines and replace the version + # using the internal clipboard. + { + name: copy_selection + modifier: control_shift + keycode: char_c + mode: emacs + event: { edit: copyselection } + # event: { edit: copyselectionsystem } + } + { + name: cut_selection + modifier: control_shift + keycode: char_x + mode: emacs + event: { edit: cutselection } + # event: { edit: cutselectionsystem } + } + # { + # name: paste_system + # modifier: control_shift + # keycode: char_v + # mode: emacs + # event: { edit: pastesystem } + # } + { + name: select_all + modifier: control_shift + keycode: char_a + mode: emacs + event: { edit: selectall } } ] } - diff --git a/users/tao/nushell/config.nu.old b/users/tao/nushell/config.nu.old new file mode 100644 index 0000000..8252ffc --- /dev/null +++ b/users/tao/nushell/config.nu.old @@ -0,0 +1,729 @@ +# Nushell Config File +# +# version = 0.83.1 + +# For more information on defining custom themes, see +# https://www.nushell.sh/book/coloring_and_theming.html +# And here is the theme collection +# https://github.com/nushell/nu_scripts/tree/main/themes +let dark_theme = { + # color for nushell primitives + separator: white + leading_trailing_space_bg: { attr: n } # no fg, no bg, attr none effectively turns this off + header: green_bold + empty: blue + # Closures can be used to choose colors for specific values. + # The value (in this case, a bool) is piped into the closure. + bool: {|| if $in { 'light_cyan' } else { 'light_gray' } } + int: white + filesize: {|e| + if $e == 0b { + 'white' + } else if $e < 1mb { + 'cyan' + } else { 'blue' } + } + duration: white + date: {|| (date now) - $in | + if $in < 1hr { + 'purple' + } else if $in < 6hr { + 'red' + } else if $in < 1day { + 'yellow' + } else if $in < 3day { + 'green' + } else if $in < 1wk { + 'light_green' + } else if $in < 6wk { + 'cyan' + } else if $in < 52wk { + 'blue' + } else { 'dark_gray' } + } + range: white + float: white + string: white + nothing: white + binary: white + cellpath: white + row_index: green_bold + record: white + list: white + block: white + hints: dark_gray + search_result: {bg: red fg: white} + shape_and: purple_bold + shape_binary: purple_bold + shape_block: blue_bold + shape_bool: light_cyan + shape_closure: green_bold + shape_custom: green + shape_datetime: cyan_bold + shape_directory: cyan + shape_external: cyan + shape_externalarg: green_bold + shape_filepath: cyan + shape_flag: blue_bold + shape_float: purple_bold + # shapes are used to change the cli syntax highlighting + shape_garbage: { fg: white bg: red attr: b} + shape_globpattern: cyan_bold + shape_int: purple_bold + shape_internalcall: cyan_bold + shape_list: cyan_bold + shape_literal: blue + shape_match_pattern: green + shape_matching_brackets: { attr: u } + shape_nothing: light_cyan + shape_operator: yellow + shape_or: purple_bold + shape_pipe: purple_bold + shape_range: yellow_bold + shape_record: cyan_bold + shape_redirection: purple_bold + shape_signature: green_bold + shape_string: green + shape_string_interpolation: cyan_bold + shape_table: blue_bold + shape_variable: purple + shape_vardecl: purple +} + + +# External completer example +# let carapace_completer = {|spans| +# carapace $spans.0 nushell $spans | from json +# } + + +# The default config record. This is where much of your global configuration is setup. +$env.config = { + show_banner: false # true or false to enable or disable the welcome banner at startup + + ls: { + use_ls_colors: true # use the LS_COLORS environment variable to colorize output + clickable_links: true # enable or disable clickable links. Your terminal has to support links. + } + + rm: { + always_trash: false # always act as if -t was given. Can be overridden with -p + } + + + table: { + mode: rounded # basic, compact, compact_double, light, thin, with_love, rounded, reinforced, heavy, none, other + index_mode: always # "always" show indexes, "never" show indexes, "auto" = show indexes when a table has "index" column + show_empty: true # show 'empty list' and 'empty record' placeholders for command output + trim: { + methodology: wrapping # wrapping or truncating + wrapping_try_keep_words: true # A strategy used by the 'wrapping' methodology + truncating_suffix: "..." # A suffix used by the 'truncating' methodology + } + } + + # datetime_format determines what a datetime rendered in the shell would look like. + # Behavior without this configuration point will be to "humanize" the datetime display, + # showing something like "a day ago." + datetime_format: { + # normal: '%a, %d %b %Y %H:%M:%S %z' # shows up in displays of variables or other datetime's outside of tables + # table: '%m/%d/%y %I:%M:%S%p' # generally shows up in tabular outputs such as ls. commenting this out will change it to the default human readable datetime format + } + + explore: { + try: { + border_color: {fg: "white"} + }, + status_bar_background: {fg: "#1D1F21", bg: "#C4C9C6"}, + command_bar_text: {fg: "#C4C9C6"}, + highlight: {fg: "black", bg: "yellow"}, + status: { + error: {fg: "white", bg: "red"}, + warn: {} + info: {} + }, + table: { + split_line: {fg: "#404040"}, + selected_cell: {}, + selected_row: {}, + selected_column: {}, + cursor: true, + line_head_top: true, + line_head_bottom: true, + line_shift: true, + line_index: true, + }, + config: { + border_color: {fg: "white"} + cursor_color: {fg: "black", bg: "light_yellow"} + }, + } + + history: { + max_size: 100_000 # Session has to be reloaded for this to take effect + sync_on_enter: false # Enable to share history between multiple sessions, else you have to close the session to write history to file + file_format: "plaintext" # "sqlite" or "plaintext" + isolation: false # only available with sqlite file_format. true enables history isolation, false disables it. true will allow the history to be isolated to the current session using up/down arrows. false will allow the history to be shared across all sessions. + } + + completions: { + case_sensitive: false # set to true to enable case-sensitive completions + quick: true # set this to false to prevent auto-selecting completions when only one remains + partial: true # set this to false to prevent partial filling of the prompt + algorithm: "fuzzy" # prefix or fuzzy + external: { + enable: true # set to false to prevent nushell looking into $env.PATH to find more suggestions, `false` recommended for WSL users as this look up may be very slow + max_results: 100 # setting it lower can improve completion performance at the cost of omitting some options + completer: null # check 'carapace_completer' above as an example + } + } + + filesize: { + metric: true # true => KB, MB, GB (ISO standard), false => KiB, MiB, GiB (Windows standard) + format: "auto" # b, kb, kib, mb, mib, gb, gib, tb, tib, pb, pib, eb, eib, auto + } + + cursor_shape: { + emacs: line # block, underscore, line, blink_block, blink_underscore, blink_line (line is the default) + vi_insert: line # block, underscore, line , blink_block, blink_underscore, blink_line (block is the default) + vi_normal: block # block, underscore, line, blink_block, blink_underscore, blink_line (underscore is the default) + } + + color_config: {} # if you want a more interesting theme, you can replace the empty record with `$dark_theme`, `$light_theme` or another custom record + use_grid_icons: true + footer_mode: "25" # always, never, number_of_rows, auto + float_precision: 2 # the precision for displaying floats in tables + buffer_editor: "" # command that will be used to edit the current line buffer with ctrl+o, if unset fallback to $env.EDITOR and $env.VISUAL + use_ansi_coloring: true + bracketed_paste: true # enable bracketed paste, currently useless on windows + edit_mode: emacs # emacs, vi + render_right_prompt_on_last_line: false # true or false to enable or disable right prompt to be rendered on last line of the prompt. + + hooks: { + pre_prompt: [{ null }] # run before the prompt is shown + pre_execution: [{ null }] # run before the repl input is run + env_change: { + PWD: [{|before, after| null }] # run if the PWD environment is different since the last repl input + } + display_output: { + if (term size).columns >= 80 { + table -e + } else { + table + } + } + command_not_found: { null } # return an error message when a command is not found + } + + menus: [ + # Configuration for default nushell menus + # Note the lack of source parameter + { + name: completion_menu + only_buffer_difference: false + marker: "| " + type: { + layout: columnar + columns: 4 + col_width: 20 # Optional value. If missing all the screen width is used to calculate column width + col_padding: 2 + } + style: { + text: green + selected_text: green_reverse + description_text: yellow + } + } + { + name: history_menu + only_buffer_difference: true + marker: "? " + type: { + layout: list + page_size: 10 + } + style: { + text: green + selected_text: green_reverse + description_text: yellow + } + } + { + name: help_menu + only_buffer_difference: true + marker: "? " + type: { + layout: description + columns: 4 + col_width: 20 # Optional value. If missing all the screen width is used to calculate column width + col_padding: 2 + selection_rows: 4 + description_rows: 10 + } + style: { + text: green + selected_text: green_reverse + description_text: yellow + } + } + ] + + keybindings: [ + { + name: completion_menu + modifier: none + keycode: tab + mode: [emacs vi_normal vi_insert] + event: { + until: [ + { send: menu name: completion_menu } + { send: menunext } + ] + } + } + { + name: history_menu + modifier: control + keycode: char_r + mode: [emacs, vi_insert, vi_normal] + event: { send: menu name: history_menu } + } + { + name: help_menu + modifier: none + keycode: f1 + mode: [emacs, vi_insert, vi_normal] + event: { send: menu name: help_menu } + } + { + name: completion_previous_menu + modifier: shift + keycode: backtab + mode: [emacs, vi_normal, vi_insert] + event: { send: menuprevious } + } + { + name: next_page_menu + modifier: control + keycode: char_x + mode: emacs + event: { send: menupagenext } + } + { + name: undo_or_previous_page_menu + modifier: control + keycode: char_z + mode: emacs + event: { + until: [ + { send: menupageprevious } + { edit: undo } + ] + } + } + { + name: escape + modifier: none + keycode: escape + mode: [emacs, vi_normal, vi_insert] + event: { send: esc } # NOTE: does not appear to work + } + { + name: cancel_command + modifier: control + keycode: char_c + mode: [emacs, vi_normal, vi_insert] + event: { send: ctrlc } + } + { + name: quit_shell + modifier: control + keycode: char_d + mode: [emacs, vi_normal, vi_insert] + event: { send: ctrld } + } + { + name: clear_screen + modifier: control + keycode: char_l + mode: [emacs, vi_normal, vi_insert] + event: { send: clearscreen } + } + { + name: search_history + modifier: control + keycode: char_r + mode: [emacs, vi_normal, vi_insert] + event: { send: searchhistory } + } + { + name: open_command_editor + modifier: control + keycode: char_o + mode: [emacs, vi_normal, vi_insert] + event: { send: openeditor } + } + { + name: move_up + modifier: none + keycode: up + mode: [emacs, vi_normal, vi_insert] + event: { + until: [ + {send: menuup} + {send: up} + ] + } + } + { + name: move_down + modifier: none + keycode: down + mode: [emacs, vi_normal, vi_insert] + event: { + until: [ + {send: menudown} + {send: down} + ] + } + } + { + name: move_left + modifier: none + keycode: left + mode: [emacs, vi_normal, vi_insert] + event: { + until: [ + {send: menuleft} + {send: left} + ] + } + } + { + name: move_right_or_take_history_hint + modifier: none + keycode: right + mode: [emacs, vi_normal, vi_insert] + event: { + until: [ + {send: historyhintcomplete} + {send: menuright} + {send: right} + ] + } + } + { + name: move_one_word_left + modifier: control + keycode: left + mode: [emacs, vi_normal, vi_insert] + event: {edit: movewordleft} + } + { + name: move_one_word_right_or_take_history_hint + modifier: control + keycode: right + mode: [emacs, vi_normal, vi_insert] + event: { + until: [ + {send: historyhintwordcomplete} + {edit: movewordright} + ] + } + } + { + name: move_to_line_start + modifier: none + keycode: home + mode: [emacs, vi_normal, vi_insert] + event: {edit: movetolinestart} + } + { + name: move_to_line_start + modifier: control + keycode: char_a + mode: [emacs, vi_normal, vi_insert] + event: {edit: movetolinestart} + } + { + name: move_to_line_end_or_take_history_hint + modifier: none + keycode: end + mode: [emacs, vi_normal, vi_insert] + event: { + until: [ + {send: historyhintcomplete} + {edit: movetolineend} + ] + } + } + { + name: move_to_line_end_or_take_history_hint + modifier: control + keycode: char_e + mode: [emacs, vi_normal, vi_insert] + event: { + until: [ + {send: historyhintcomplete} + {edit: movetolineend} + ] + } + } + { + name: move_to_line_start + modifier: control + keycode: home + mode: [emacs, vi_normal, vi_insert] + event: {edit: movetolinestart} + } + { + name: move_to_line_end + modifier: control + keycode: end + mode: [emacs, vi_normal, vi_insert] + event: {edit: movetolineend} + } + { + name: move_up + modifier: control + keycode: char_p + mode: [emacs, vi_normal, vi_insert] + event: { + until: [ + {send: menuup} + {send: up} + ] + } + } + { + name: move_down + modifier: control + keycode: char_t + mode: [emacs, vi_normal, vi_insert] + event: { + until: [ + {send: menudown} + {send: down} + ] + } + } + { + name: delete_one_character_backward + modifier: none + keycode: backspace + mode: [emacs, vi_insert] + event: {edit: backspace} + } + { + name: delete_one_word_backward + modifier: control + keycode: backspace + mode: [emacs, vi_insert] + event: {edit: backspaceword} + } + { + name: delete_one_character_forward + modifier: none + keycode: delete + mode: [emacs, vi_insert] + event: {edit: delete} + } + { + name: delete_one_character_forward + modifier: control + keycode: delete + mode: [emacs, vi_insert] + event: {edit: delete} + } + { + name: delete_one_character_forward + modifier: control + keycode: char_h + mode: [emacs, vi_insert] + event: {edit: backspace} + } + { + name: delete_one_word_backward + modifier: control + keycode: char_w + mode: [emacs, vi_insert] + event: {edit: backspaceword} + } + { + name: move_left + modifier: none + keycode: backspace + mode: vi_normal + event: {edit: moveleft} + } + { + name: newline_or_run_command + modifier: none + keycode: enter + mode: emacs + event: {send: enter} + } + { + name: move_left + modifier: control + keycode: char_b + mode: emacs + event: { + until: [ + {send: menuleft} + {send: left} + ] + } + } + { + name: move_right_or_take_history_hint + modifier: control + keycode: char_f + mode: emacs + event: { + until: [ + {send: historyhintcomplete} + {send: menuright} + {send: right} + ] + } + } + { + name: redo_change + modifier: control + keycode: char_g + mode: emacs + event: {edit: redo} + } + { + name: undo_change + modifier: control + keycode: char_z + mode: emacs + event: {edit: undo} + } + { + name: paste_before + modifier: control + keycode: char_y + mode: emacs + event: {edit: pastecutbufferbefore} + } + { + name: cut_word_left + modifier: control + keycode: char_w + mode: emacs + event: {edit: cutwordleft} + } + { + name: cut_line_to_end + modifier: control + keycode: char_k + mode: emacs + event: {edit: cuttoend} + } + { + name: cut_line_from_start + modifier: control + keycode: char_u + mode: emacs + event: {edit: cutfromstart} + } + { + name: swap_graphemes + modifier: control + keycode: char_t + mode: emacs + event: {edit: swapgraphemes} + } + { + name: move_one_word_left + modifier: alt + keycode: left + mode: emacs + event: {edit: movewordleft} + } + { + name: move_one_word_right_or_take_history_hint + modifier: alt + keycode: right + mode: emacs + event: { + until: [ + {send: historyhintwordcomplete} + {edit: movewordright} + ] + } + } + { + name: move_one_word_left + modifier: alt + keycode: char_b + mode: emacs + event: {edit: movewordleft} + } + { + name: move_one_word_right_or_take_history_hint + modifier: alt + keycode: char_f + mode: emacs + event: { + until: [ + {send: historyhintwordcomplete} + {edit: movewordright} + ] + } + } + { + name: delete_one_word_forward + modifier: alt + keycode: delete + mode: emacs + event: {edit: deleteword} + } + { + name: delete_one_word_backward + modifier: alt + keycode: backspace + mode: emacs + event: {edit: backspaceword} + } + { + name: delete_one_word_backward + modifier: alt + keycode: char_m + mode: emacs + event: {edit: backspaceword} + } + { + name: cut_word_to_right + modifier: alt + keycode: char_d + mode: emacs + event: {edit: cutwordright} + } + { + name: upper_case_word + modifier: alt + keycode: char_u + mode: emacs + event: {edit: uppercaseword} + } + { + name: lower_case_word + modifier: alt + keycode: char_l + mode: emacs + event: {edit: lowercaseword} + } + { + name: capitalize_char + modifier: alt + keycode: char_c + mode: emacs + event: {edit: capitalizechar} + } + ] +} + diff --git a/users/tao/nushell/env.nu b/users/tao/nushell/env.nu index c6a39a4..1f90b31 100644 --- a/users/tao/nushell/env.nu +++ b/users/tao/nushell/env.nu @@ -80,3 +80,5 @@ $env.NU_PLUGIN_DIRS = [ # To add entries to PATH (on Windows you might use Path), you can use the following pattern: $env.PATH = ($env.PATH | split row (char esep) | prepend '/home/tao/.cargo/bin') + +$env.GOPATH = '/home/tao/.go' diff --git a/users/tao/nushell/stuff.nu b/users/tao/nushell/stuff.nu index 327f071..030c14d 100644 --- a/users/tao/nushell/stuff.nu +++ b/users/tao/nushell/stuff.nu @@ -71,7 +71,8 @@ alias gc = nh clean all def check-mullvad [] { $env.LAST_EXIT_CODE = 69 - if $env.LAST_EXIT_CODE != 0 { + while $env.LAST_EXIT_CODE != 0 { + print "checking connection status" http get https://am.i.mullvad.net/json } }