# Nushell Hacks ## 1. ends-with / starts-with operators ``` ❯ ls | where name ends-with .toml or name starts-with Car ╭─#─┬────────name─────────┬─type─┬───size───┬────modified────╮ │ 0 │ Cargo.lock │ file │ 165.4 KB │ 22 minutes ago │ │ 1 │ Cargo.toml │ file │ 6.4 KB │ an hour ago │ │ 2 │ Cross.toml │ file │ 666 B │ an hour ago │ │ 3 │ rust-toolchain.toml │ file │ 1.1 KB │ an hour ago │ ╰───┴─────────────────────┴──────┴──────────┴────────────────╯ ``` ## 2. easter egg Did you know that when you start nushell, the `$env.CMD_DURATION_MS` value of 0823 is an easter egg? [It's nushell's first pubic release date month day](https://github.com/nushell/nushell/releases/tag/0.2.0). ## 3. abbr With this menu and keybinding configured appropriately in your config.nu file, you can hit `ctrl+space` and your alias abbreviation will expand to it's non-abbreviated form. For instance, if you have this alias ``` alias gwch = git whatchanged -p --abbrev-commit --pretty=medium ``` and then you type `gwch<ctrl+space>` it will expand on the prompt line to ``` git whatchanged -p --abbrev-commit --pretty=medium ``` ### keybinding ```js { name: abbr modifier: control keycode: space mode: [emacs, vi_normal, vi_insert] event: [ { send: menu name: abbr_menu } { edit: insertchar, value: ' '} ] } ``` ### menu ```js { name: abbr_menu only_buffer_difference: false marker: "👀 " type: { layout: columnar columns: 1 col_width: 20 col_padding: 2 } style: { text: green selected_text: green_reverse description_text: yellow } source: { |buffer, position| scope aliases | where name == $buffer | each { |it| {value: $it.expansion }} } } ``` ## 4. case-insensitive `where` with `ls` People often forget that the `=~` and `!~` are regular expression operators, which means you can do a case-insensitive search like this. ``` ❯ ls | where name =~ '(?i)car' ╭─#─┬────name────┬─type─┬───size───┬────modified────╮ │ 0 │ Cargo.lock │ file │ 160.6 KB │ 8 hours ago │ │ 1 │ Cargo.toml │ file │ 6.4 KB │ 8 hours ago │ │ 2 │ car.txt │ file │ 0 B │ 11 seconds ago │ ╰───┴────────────┴──────┴──────────┴────────────────╯ ``` ## 5. the magic of nushell datatype closures In your config.nu file you can have themes that color nushell datatypes a particular color. One thing that is sometimes overlooked is that these colors can also be closures, like the one below for `string`. ``` string: {|| if $in =~ '^#[a-fA-F\d]+' { $in } else { 'default' } } ``` This allows nushell to detect anything that looks like a hex color and display that color in nushell. This allows you to take a file like the x11 rgb.txt file and parse it into colors. rgb.txt ``` ❯ open ~/Downloads/rgb.txt | lines | last 10 ╭───┬───────────────────────────────────╮ │ 0 │ 139 0 0 DarkRed │ │ 1 │ 144 238 144 light green │ │ 2 │ 144 238 144 LightGreen │ │ 3 │ 220 20 60 crimson │ │ 4 │ 75 0 130 indigo │ │ 5 │ 128 128 0 olive │ │ 6 │ 102 51 153 rebecca purple │ │ 7 │ 102 51 153 RebeccaPurple │ │ 8 │ 192 192 192 silver │ │ 9 │ 0 128 128 teal │ ╰───┴───────────────────────────────────╯ ``` And after parsing the file looks similar to this. ![rgb](https://hackmd.io/_uploads/rkJ-n77qa.png)