# Retrieve the theme settings export def main [] { return { # 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. bool: {|| if $in { 'dark_cyan' } else { 'dark_gray' } } int: dark_gray filesize: {|e| if $e == 0b { 'dark_gray' } else if $e < 1mb { 'cyan_bold' } else { 'blue_bold' } } duration: dark_gray 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: dark_gray float: dark_gray string: dark_gray nothing: dark_gray binary: dark_gray 'cell-path': dark_gray row_index: green_bold record: white list: white block: white 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_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 background: "#f2f2f2" foreground: "#767676" cursor: "#c50f1f" } } # Update the Nushell configuration export def --env "set color_config" [] { $env.config.color_config = (main) } # Update terminal colors export def "update terminal" [] { let theme = (main) # Set terminal colors let osc_screen_foreground_color = '10;' let osc_screen_background_color = '11;' let osc_cursor_color = '12;' $" (ansi -o $osc_screen_foreground_color)($theme.foreground)(char bel) (ansi -o $osc_screen_background_color)($theme.background)(char bel) (ansi -o $osc_cursor_color)($theme.cursor)(char bel) " # Line breaks above are just for source readability # but create extra whitespace when activating. Collapse # to one line and print with no-newline | str replace --all "\n" '' | print -n $"($in)\r" } export module activate { export-env { set color_config update terminal } } # Activate the theme when sourced use activate