From 34ed301bedc854db6c63dc2379d3cf29db92898f Mon Sep 17 00:00:00 2001 From: iceyrazor Date: Tue, 11 Feb 2025 15:48:30 -0600 Subject: [PATCH] typical update of files --- .bash_profile | 1 - .bashrc | 4 +- .config/atuin/config.toml | 234 +++ .config/awesome/iceys-theme/theme.lua | 3 + .config/awesome/rc.lua | 120 +- .config/dwm/autostart.sh | 18 +- .config/gtk-3.0/settings.ini | 3 - .config/lf/lfrc | 9 +- .config/nvim/.luarc.json | 3 +- .config/nvim/after/plugin/cloak.lua | 31 + .config/nvim/after/plugin/colorizer.lua | 1 + .config/nvim/after/plugin/hardtime.lua | 1 + .config/nvim/after/plugin/harpoon.lua | 2 +- .../nvim/after/plugin/indent-blankline.lua | 30 + .config/nvim/after/plugin/lsp.lua | 30 +- .config/nvim/after/plugin/lualine.lua | 46 + .config/nvim/after/plugin/notify.lua | 4 + .config/nvim/after/plugin/telescope.lua | 3 + .config/nvim/custom-lsp/.luarc.json | 0 .config/nvim/init.lua | 0 .config/nvim/lua/yourmom/cloak.lua | 293 +++ .config/nvim/lua/yourmom/init.lua | 11 +- .config/nvim/lua/yourmom/packer.lua | 17 +- .config/nvim/lua/yourmom/remap.lua | 78 +- .config/picom.conf | 31 +- .config/rofi/config.rasi | 11 +- .config/screenkey.json | 8 +- .gtkrc-2.0 | 28 +- .p10k.zsh | 1739 +++++++++++++++++ .profile | 74 +- .surf/styles/default.css | 16 - .tmux.conf | 69 + .wezterm.lua | 65 +- .zshrc | 23 +- .../manual-programs/suckless/dmenu-5.2/dmenu | Bin .../suckless/dmenu-5.2/dmenu_path | 0 .../suckless/dmenu-5.2/dmenu_run | 0 .../manual-programs/suckless/dmenu-5.2/stest | Bin stuff/manual-programs/suckless/dwm-bak/dwm | Bin stuff/manual-programs/suckless/dwm/dwm | Bin stuff/manual-programs/suckless/dwm/dwm.c.orig | 8 + stuff/manual-programs/suckless/dwm/util.o | Bin 2224 -> 2224 bytes stuff/manual-programs/suckless/surf/config.mk | 1 + stuff/manual-programs/suckless/surf/surf | Bin 75024 -> 71408 bytes stuff/manual-programs/suckless/surf/surf.o | Bin 72976 -> 71896 bytes .../suckless/surf/webext-surf.o | Bin 6560 -> 6504 bytes .../suckless/surf/webext-surf.so | Bin 16728 -> 17264 bytes stuff/scripts/system/backup/backup.sh | 9 +- stuff/scripts/system/backup/copy-to-git.sh | 8 +- stuff/scripts/system/neoboot.sh | 3 +- stuff/scripts/system/stbar/stbar-awesome.sh | 20 +- stuff/scripts/system/url-handler.sh | 2 +- 52 files changed, 2909 insertions(+), 148 deletions(-) mode change 100755 => 100644 .bashrc create mode 100644 .config/atuin/config.toml delete mode 100644 .config/gtk-3.0/settings.ini mode change 100644 => 100755 .config/lf/lfrc mode change 100644 => 100755 .config/nvim/.luarc.json create mode 100644 .config/nvim/after/plugin/cloak.lua create mode 100644 .config/nvim/after/plugin/colorizer.lua create mode 100644 .config/nvim/after/plugin/hardtime.lua mode change 100644 => 100755 .config/nvim/after/plugin/harpoon.lua create mode 100644 .config/nvim/after/plugin/indent-blankline.lua mode change 100644 => 100755 .config/nvim/after/plugin/lsp.lua create mode 100644 .config/nvim/after/plugin/lualine.lua create mode 100644 .config/nvim/after/plugin/notify.lua mode change 100644 => 100755 .config/nvim/after/plugin/telescope.lua mode change 100644 => 100755 .config/nvim/custom-lsp/.luarc.json mode change 100644 => 100755 .config/nvim/init.lua create mode 100644 .config/nvim/lua/yourmom/cloak.lua mode change 100644 => 100755 .config/picom.conf mode change 100644 => 100755 .config/screenkey.json create mode 100644 .p10k.zsh delete mode 100644 .surf/styles/default.css create mode 100755 .tmux.conf mode change 100644 => 100755 stuff/manual-programs/suckless/dmenu-5.2/dmenu mode change 100644 => 100755 stuff/manual-programs/suckless/dmenu-5.2/dmenu_path mode change 100644 => 100755 stuff/manual-programs/suckless/dmenu-5.2/dmenu_run mode change 100644 => 100755 stuff/manual-programs/suckless/dmenu-5.2/stest mode change 100644 => 100755 stuff/manual-programs/suckless/dwm-bak/dwm mode change 100644 => 100755 stuff/manual-programs/suckless/dwm/dwm diff --git a/.bash_profile b/.bash_profile index f340060..159897b 100644 --- a/.bash_profile +++ b/.bash_profile @@ -15,4 +15,3 @@ fi #export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0 -export DWM_NOTIF_FILE="/home/iceyrazor/stuff/scripts/c/SDL/notif/notif.txt" diff --git a/.bashrc b/.bashrc old mode 100755 new mode 100644 index a92d2ed..6e08ede --- a/.bashrc +++ b/.bashrc @@ -4,7 +4,7 @@ # If not running interactively, don't do anything [[ $- != *i* ]] && return -PS1='\[\e[37;1m\][\[\e[31;1m\]B\[\e[35;1m\]\u\[\e[33m\]@\[\e[35;1m\]\h \[\e[36;1m\]\W\[\e[37;1m\]]\[\e[0;1m\]∮ ' +PS1='\[\e[37;1m\][\[\e[35;1m\]\u\[\e[33m\]@\[\e[35;1m\]\h \[\e[36;1m\]\W\[\e[37;1m\]]\[\e[0;1m\]∮ ' -source ~/stuff/scripts/system/neoboot.sh +~/stuff/scripts/system/neoboot.sh source ~/.profile diff --git a/.config/atuin/config.toml b/.config/atuin/config.toml new file mode 100644 index 0000000..7ae0b79 --- /dev/null +++ b/.config/atuin/config.toml @@ -0,0 +1,234 @@ +## where to store your database, default is your system data directory +## linux/mac: ~/.local/share/atuin/history.db +## windows: %USERPROFILE%/.local/share/atuin/history.db +# db_path = "~/.history.db" + +## where to store your encryption key, default is your system data directory +## linux/mac: ~/.local/share/atuin/key +## windows: %USERPROFILE%/.local/share/atuin/key +# key_path = "~/.key" + +## where to store your auth session token, default is your system data directory +## linux/mac: ~/.local/share/atuin/session +## windows: %USERPROFILE%/.local/share/atuin/session +# session_path = "~/.session" + +## date format used, either "us" or "uk" +# dialect = "us" + +## default timezone to use when displaying time +## either "l", "local" to use the system's current local timezone, or an offset +## from UTC in the format of "<+|->H[H][:M[M][:S[S]]]" +## for example: "+9", "-05", "+03:30", "-01:23:45", etc. +# timezone = "local" + +## enable or disable automatic sync +# auto_sync = true + +## enable or disable automatic update checks +# update_check = true + +## address of the sync server +# sync_address = "https://api.atuin.sh" + +## how often to sync history. note that this is only triggered when a command +## is ran, so sync intervals may well be longer +## set it to 0 to sync after every command +# sync_frequency = "10m" + +## which search mode to use +## possible values: prefix, fulltext, fuzzy, skim +# search_mode = "fuzzy" + +## which filter mode to use +## possible values: global, host, session, directory +# filter_mode = "global" + +## With workspace filtering enabled, Atuin will filter for commands executed +## in any directory within a git repository tree (default: false) +# workspaces = false + +## which filter mode to use when atuin is invoked from a shell up-key binding +## the accepted values are identical to those of "filter_mode" +## leave unspecified to use same mode set in "filter_mode" +# filter_mode_shell_up_key_binding = "global" + +## which search mode to use when atuin is invoked from a shell up-key binding +## the accepted values are identical to those of "search_mode" +## leave unspecified to use same mode set in "search_mode" +# search_mode_shell_up_key_binding = "fuzzy" + +## which style to use +## possible values: auto, full, compact +# style = "auto" + +## the maximum number of lines the interface should take up +## set it to 0 to always go full screen +# inline_height = 0 +inline_height = 0 + +## Invert the UI - put the search bar at the top , Default to `false` +# invert = false + +## enable or disable showing a preview of the selected command +## useful when the command is longer than the terminal width and is cut off +# show_preview = true + +## what to do when the escape key is pressed when searching +## possible values: return-original, return-query +# exit_mode = "return-original" + +## possible values: emacs, subl +# word_jump_mode = "emacs" + +## characters that count as a part of a word +# word_chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" + +## number of context lines to show when scrolling by pages +# scroll_context_lines = 1 + +## use ctrl instead of alt as the shortcut modifier key for numerical UI shortcuts +## alt-0 .. alt-9 +# ctrl_n_shortcuts = false + +## default history list format - can also be specified with the --format arg +# history_format = "{time}\t{command}\t{duration}" + +## prevent commands matching any of these regexes from being written to history. +## Note that these regular expressions are unanchored, i.e. if they don't start +## with ^ or end with $, they'll match anywhere in the command. +## For details on the supported regular expression syntax, see +## https://docs.rs/regex/latest/regex/#syntax +# history_filter = [ +# "^secret-cmd", +# "^innocuous-cmd .*--secret=.+", +# ] + +## prevent commands run with cwd matching any of these regexes from being written +## to history. Note that these regular expressions are unanchored, i.e. if they don't +## start with ^ or end with $, they'll match anywhere in CWD. +## For details on the supported regular expression syntax, see +## https://docs.rs/regex/latest/regex/#syntax +# cwd_filter = [ +# "^/very/secret/area", +# ] + +## Configure the maximum height of the preview to show. +## Useful when you have long scripts in your history that you want to distinguish +## by more than the first few lines. +# max_preview_height = 4 + +## Configure whether or not to show the help row, which includes the current Atuin +## version (and whether an update is available), a keymap hint, and the total +## amount of commands in your history. +# show_help = true + +## Configure whether or not to show tabs for search and inspect +# show_tabs = true + +## Defaults to true. This matches history against a set of default regex, and will not save it if we get a match. Defaults include +## 1. AWS key id +## 2. Github pat (old and new) +## 3. Slack oauth tokens (bot, user) +## 4. Slack webhooks +## 5. Stripe live/test keys +# secrets_filter = true + +## Defaults to true. If enabled, upon hitting enter Atuin will immediately execute the command. Press tab to return to the shell and edit. +# This applies for new installs. Old installs will keep the old behaviour unless configured otherwise. +enter_accept = true + +## Defaults to "emacs". This specifies the keymap on the startup of `atuin +## search`. If this is set to "auto", the startup keymap mode in the Atuin +## search is automatically selected based on the shell's keymap where the +## keybinding is defined. If this is set to "emacs", "vim-insert", or +## "vim-normal", the startup keymap mode in the Atuin search is forced to be +## the specified one. +# keymap_mode = "auto" +keymap_mode = "vim-normal" + +## Cursor style in each keymap mode. If specified, the cursor style is changed +## in entering the cursor shape. Available values are "default" and +## "{blink,steady}-{block,underline,bar}". +# keymap_cursor = { emacs = "blink-block", vim_insert = "blink-block", vim_normal = "steady-block" } + +# network_connect_timeout = 5 +# network_timeout = 5 + +## Timeout (in seconds) for acquiring a local database connection (sqlite) +# local_timeout = 5 + +## Set this to true and Atuin will minimize motion in the UI - timers will not update live, etc. +## Alternatively, set env NO_MOTION=true +# prefers_reduced_motion = false + +[stats] +## Set commands where we should consider the subcommand for statistics. Eg, kubectl get vs just kubectl +# common_subcommands = [ +# "apt", +# "cargo", +# "composer", +# "dnf", +# "docker", +# "git", +# "go", +# "ip", +# "kubectl", +# "nix", +# "nmcli", +# "npm", +# "pecl", +# "pnpm", +# "podman", +# "port", +# "systemctl", +# "tmux", +# "yarn", +# ] + +## Set commands that should be totally stripped and ignored from stats +# common_prefix = ["sudo"] + +## Set commands that will be completely ignored from stats +# ignored_commands = [ +# "cd", +# "ls", +# "vi" +# ] + +[keys] +# Defaults to true. If disabled, using the up/down key won't exit the TUI when scrolled past the first/last entry. +# scroll_exits = false + +[sync] +# Enable sync v2 by default +# This ensures that sync v2 is enabled for new installs only +# In a later release it will become the default across the board +records = true + +[preview] +## which preview strategy to use to calculate the preview height (respects max_preview_height). +## possible values: auto, static +## auto: length of the selected command. +## static: length of the longest command stored in the history. +# strategy = "auto" + +[daemon] +## Enables using the daemon to sync. Requires the daemon to be running in the background. Start it with `atuin daemon` +# enabled = false + +## How often the daemon should sync in seconds +# sync_frequency = 300 + +## The path to the unix socket used by the daemon (on unix systems) +## linux/mac: ~/.local/share/atuin/atuin.sock +## windows: Not Supported +# socket_path = "~/.local/share/atuin/atuin.sock" + +## Use systemd socket activation rather than opening the given path (the path must still be correct for the client) +## linux: false +## mac/windows: Not Supported +# systemd_socket = false + +## The port that should be used for TCP on non unix systems +# tcp_port = 8889 diff --git a/.config/awesome/iceys-theme/theme.lua b/.config/awesome/iceys-theme/theme.lua index 1bbefc3..b95b641 100644 --- a/.config/awesome/iceys-theme/theme.lua +++ b/.config/awesome/iceys-theme/theme.lua @@ -80,6 +80,9 @@ theme.taglist_squares_unsel = theme_assets.taglist_squares_unsel( theme.menu_submenu_icon = themes_path.."submenu.png" theme.menu_height = dpi(15) theme.menu_width = dpi(100) +theme.notification_bg = "#222222" +theme.notification_border_color = theme.border_focus +theme.notification_font = "inconsolata regular 15" -- You can add as many variables as -- you wish and access them by using diff --git a/.config/awesome/rc.lua b/.config/awesome/rc.lua index c2c4e1e..d147ebd 100644 --- a/.config/awesome/rc.lua +++ b/.config/awesome/rc.lua @@ -18,8 +18,8 @@ local hotkeys_popup = require("awful.hotkeys_popup") -- when client with a matching name is opened: require("awful.hotkeys_popup.keys") -local HOMEDIR="/home/iceyrazor/" - +local HOMEDIR="/home/iceyrazor" +local mpris=HOMEDIR.."/stuff/scripts/system/mpris_player_control" local show_desktop = false @@ -40,6 +40,7 @@ function show_my_desktop() end --auto switch to tag with clients if no current clients exist in current tag +--[[ client.connect_signal("unmanage", function(c) local t = c.first_tag or awful.screen.focused().selected_tag for _, cl in ipairs(t:clients()) do @@ -54,6 +55,7 @@ client.connect_signal("unmanage", function(c) end end end) +]]-- -- {{{ Error handling @@ -98,6 +100,10 @@ editor_cmd = terminal .. " -e " .. editor -- I suggest you to remap Mod4 to another key using xmodmap or other tools. -- However, you can use another modifier like Mod1, but it may interact with others. modkey = "Mod4" +if awesome.hostname == "DangerNoodle" then + --modkey = "Mod3" +end + -- Table of layouts to cover with awful.layout.inc, order matters. awful.layout.layouts = { @@ -189,7 +195,8 @@ local tasklist_buttons = gears.table.join( end), awful.button({ }, 5, function () awful.client.focus.byidx(-1) - end)) + end) +) local function set_wallpaper(s) -- Wallpaper @@ -212,7 +219,7 @@ awful.screen.connect_for_each_screen(function(s) -- Each screen has its own tag table. --awful.tag({ "1", "2", "3", "4", "5", "6", "7", "8", "9" }, s, awful.layout.layouts[2]) - awful.tag({ "  ", "  ", "  ", "  ", "  ", "  ", "  ", "  ", "  ", "  " }, s, awful.layout.layouts[2]) + awful.tag({ "  ", "  ", "  ", "  ", "  ", "  ", "  ", "  ", "  ", "  " }, s, awful.layout.layouts[2]) -- Create a promptbox for each screen s.mypromptbox = awful.widget.prompt() @@ -242,32 +249,51 @@ awful.screen.connect_for_each_screen(function(s) s.mywibox = awful.wibar({ position = "bottom", screen = s , height = 20}) -- Add widgets to the wibox - s.mywibox:setup { - layout = wibox.layout.align.horizontal, - { -- Left widgets - layout = wibox.layout.fixed.horizontal, - mylauncher, - s.mytaglist, - s.mypromptbox, - }, - s.mytasklist, -- Middle widget - { -- Right widgets - layout = wibox.layout.fixed.horizontal, - mykeyboardlayout, - awful.widget.watch(HOMEDIR..'stuff/scripts/system/stbar/stbar-awesome.sh', 2), - mytextclock, - wibox.widget.systray(), - s.mylayoutbox, - }, - } + if s.index==1 then + s.mywibox:setup { + layout = wibox.layout.align.horizontal, + { -- Left widgets + layout = wibox.layout.fixed.horizontal, + mylauncher, + s.mytaglist, + s.mypromptbox, + }, + s.mytasklist, -- Middle widget + { -- Right widgets + layout = wibox.layout.fixed.horizontal, + mykeyboardlayout, + awful.widget.watch(HOMEDIR..'/stuff/scripts/system/stbar/stbar-awesome.sh', 2), + mytextclock, + wibox.widget.systray(), + s.mylayoutbox, + }, + } + else + s.mywibox:setup { + layout = wibox.layout.align.horizontal, + { -- Left widgets + layout = wibox.layout.fixed.horizontal, + mylauncher, + s.mytaglist, + s.mypromptbox, + }, + s.mytasklist, -- Middle widget + { -- Right widgets + layout = wibox.layout.fixed.horizontal, + mykeyboardlayout, + mytextclock, + wibox.widget.systray(), + s.mylayoutbox, + }, + } + end end) -local month_calendar = awful.widget.calendar_popup.month() +local month_calendar = awful.widget.calendar_popup.month({start_sunday=true}) month_calendar:attach( mytextclock, "br" ) --mytextclock:connect_signal("button::press",function () --end) -screen[2]:fake_resize(1920,0,1790,1006) -- }}} -- {{{ Mouse bindings @@ -381,7 +407,33 @@ globalkeys = gears.table.join( {description = "lua execute prompt", group = "awesome"}), -- Menubar awful.key({ modkey }, "p", function() menubar.show() end, - {description = "show the menubar", group = "launcher"}) + {description = "show the menubar", group = "launcher"}), + + awful.key({ }, "XF86AudioNext", function () awful.util.spawn("mpc next") end), + awful.key({ }, "XF86AudioPrev", function () awful.util.spawn("mpc prev") end), + awful.key({ }, "XF86AudioPlay", function () awful.util.spawn(mpris.." -a PlayPause") end), + awful.key({ }, "XF86AudioStop", function () awful.util.spawn(mpris.." -a pause") end), + --awful.key({ }, "XF86AudioRaiseVolume", function () awful.util.spawn("amixer -D pulse sset Master 2%+", false) end), + awful.key({ }, "XF86AudioRaiseVolume", function () awful.util.spawn("pactl set-sink-volume @DEFAULT_SINK@ +2%", false) end), + awful.key({ }, "XF86AudioLowerVolume", function () awful.util.spawn("pactl set-sink-volume @DEFAULT_SINK@ -2%", false) end), + awful.key({ }, "XF86AudioMute", function () + awful.spawn("pactl set-source-mute @DEFAULT_SOURCE@ toggle", false) + awful.spawn.with_shell("notify-send 'mic' \"$(pactl get-source-mute @DEFAULT_SOURCE@)\"", false) + end), + --also pamixer -i 5 #to increase 5% + --pamixer -d 5 #to decrease 5% + + awful.key({ }, "Print", function() + awful.spawn.with_shell("ffmpeg -f x11grab -framerate 1 -video_size 1920x1200 -i :0.0 -vframes 1 -crf 0 ~/Pictures/Screenshots/$(date '+%m-%d-%Y-%I-%M')_${RANDOM}_screenshot.jpg") + gears.timer.start_new(3, function() + naughty.notify({title="screenshot taken",text="possibly"}) + return false -- Stop the timer after the first iteration + end) + end), + + awful.key({ "Shift" }, "Print", function() + awful.spawn.with_shell("/bin/flameshot screen") + end) ) clientkeys = gears.table.join( @@ -401,6 +453,8 @@ clientkeys = gears.table.join( {description = "move to screen", group = "client"}), awful.key({ modkey, }, "t", function (c) c.ontop = not c.ontop end, {description = "toggle keep on top", group = "client"}), + awful.key({ modkey, "Shift" }, "s", function (c) c.sticky = not c.sticky end, + {description = "toggle sticky mode", group="client"}), awful.key({ modkey, "Shift" }, "n", function (c) -- The client currently has the input focus, so it cannot be @@ -541,6 +595,7 @@ awful.rules.rules = { "MessageWin", -- kalarm. "Sxiv", "Tor Browser", -- Needs a fixed window size to avoid fingerprinting by screen size. + "nheko", "Wpa_gui", "Pcmanfm", "veromix", @@ -550,6 +605,7 @@ awful.rules.rules = { -- and the name shown there might not match defined rules here. name = { "Event Tester", -- xev. + "LinVAM", }, role = { "AlarmWindow", -- Thunderbird's calendar. @@ -563,14 +619,16 @@ awful.rules.rules = { }, properties = { titlebars_enabled = false } }, + --[[ { rule_any = { class = { "Mumble", "Gajim", "vesktop" } }, properties = { floating = true, screen = 2 } }, + --]] { rule_any = { - class = { "steam_app*" } + class = { "steam_app*", "vesktop", "Minecraft*" } }, properties = { border_width = 0 } } @@ -580,6 +638,16 @@ awful.rules.rules = { -- properties = { screen = 1, tag = "2" } }, } -- }}} +if screen[2] then + screen[2]:fake_resize(1986,33,1792,1015) + table.insert(awful.rules.rules, + { rule_any = { + class = { "Mumble", "Gajim", "vesktop" } + }, + properties = { floating = true, screen = 2 } + } +) +end -- {{{ Signals -- Signal function to execute when a new client appears. diff --git a/.config/dwm/autostart.sh b/.config/dwm/autostart.sh index d97e07e..ee62b06 100755 --- a/.config/dwm/autostart.sh +++ b/.config/dwm/autostart.sh @@ -1,9 +1,9 @@ #!/bin/bash extra=0 -if [ "$(cat /etc/hostname)" == "iceynethp1" ]; then +if [ "$(cat /etc/hostname)" == "Kasino" ]; then extra=1 fi -if [ "$(cat /etc/hostname)" == "iceyartixmain" ]; then +if [ "$(cat /etc/hostname)" == "Witchen" ]; then extra=1 fi @@ -19,11 +19,15 @@ xcompmgr & if [ $extra == 1 ]; then if [ -z $(pgrep -f stbar.sh) ]; then - ~/stuff/scripts/system/stbar/stbar.sh & + # ~/stuff/scripts/system/stbar/stbar.sh & + echo hall fi - nohup pipewire & - nohup wireplumber & - nohup pipewire-pulse & + sleep 0.5s + pipewire & + if [ -z $(pgrep wireplumber) ]; then + wireplumber & + fi + pipewire-pulse & fi if [ -z $(pgrep -f newsboat-fetch.sh) ]; then ~/.config/dwm/newsboat-fetch.sh & @@ -31,5 +35,5 @@ fi if [ -z $(pgrep wezterm) ]; then sleep 2 - wezterm -e ~/stuff/scripts/system/task.sh + wezterm -e ~/stuff/scripts/system/task.sh & fi diff --git a/.config/gtk-3.0/settings.ini b/.config/gtk-3.0/settings.ini deleted file mode 100644 index 039e625..0000000 --- a/.config/gtk-3.0/settings.ini +++ /dev/null @@ -1,3 +0,0 @@ -[Settings] -gtk-theme-name = Breeze-dark-gtk - diff --git a/.config/lf/lfrc b/.config/lf/lfrc old mode 100644 new mode 100755 index c12b78d..785fb26 --- a/.config/lf/lfrc +++ b/.config/lf/lfrc @@ -112,7 +112,7 @@ cmd trash ${{ while [ "$files" ]; do file=${files%%;*} - mv "$(basename "$file")" ~/Trash + mv "$(basename "$file")" ~/.trash if [ "$files" = "$file" ]; then files='' else @@ -126,15 +126,20 @@ cmd vim ${{ }} cmd Sxiv ${{ - sxiv $f & disown + nohup sxiv $f > /dev/null 2> /dev/null < /dev/null & disown }} cmd clipf ${{ printf "$f" | xclip -selection clipboard }} +cmd filebrowser ${{ + nohup pcmanfm $f > /dev/null 2> /dev/null < /dev/null & disown +}} + map DD trash map DP delete map V vim map S Sxiv map C clipf +map P filebrowser diff --git a/.config/nvim/.luarc.json b/.config/nvim/.luarc.json old mode 100644 new mode 100755 index 154c5b3..05deadc --- a/.config/nvim/.luarc.json +++ b/.config/nvim/.luarc.json @@ -4,7 +4,8 @@ "lua/?.lua", "lua/?/init.lua" ], - "diagnostics.globals": ["vim"], + "diagnostics.globals": ["vim", + "endclose_tag_on_exit"], "workspace.checkThirdParty": false, "workspace.library": [ "$VIMRUNTIME", diff --git a/.config/nvim/after/plugin/cloak.lua b/.config/nvim/after/plugin/cloak.lua new file mode 100644 index 0000000..ec68fe5 --- /dev/null +++ b/.config/nvim/after/plugin/cloak.lua @@ -0,0 +1,31 @@ +require('yourmom/cloak').setup({ + enabled = true, + cloak_character = '*', + -- The applied highlight group (colors) on the cloaking, see `:h highlight`. + highlight_group = 'Comment', + -- Applies the length of the replacement characters for all matched + -- patterns, defaults to the length of the matched pattern. + cloak_length = nil, -- Provide a number if you want to hide the true length of the value. + -- Whether it should try every pattern to find the best fit or stop after the first. + try_all_patterns = true, + -- Set to true to cloak Telescope preview buffers. (Required feature not in 0.1.x) + cloak_telescope = true, + -- Re-enable cloak when a matched buffer leaves the window. + cloak_on_leave = false, + patterns = { + { + -- Match any file starting with '.env'. + -- This can be a table to match multiple file patterns. + file_pattern = '.env*', + -- Match an equals sign and any character after it. + -- This can also be a table of patterns to cloak, + -- example: cloak_pattern = { ':.+', '-.+' } for yaml files. + cloak_pattern = '=.+', + -- A function, table or string to generate the replacement. + -- The actual replacement will contain the 'cloak_character' + -- where it doesn't cover the original text. + -- If left empty the legacy behavior of keeping the first character is retained. + replace = nil, + } + }, +}) diff --git a/.config/nvim/after/plugin/colorizer.lua b/.config/nvim/after/plugin/colorizer.lua new file mode 100644 index 0000000..4a4590b --- /dev/null +++ b/.config/nvim/after/plugin/colorizer.lua @@ -0,0 +1 @@ +require("colorizer").setup() diff --git a/.config/nvim/after/plugin/hardtime.lua b/.config/nvim/after/plugin/hardtime.lua new file mode 100644 index 0000000..f5ef021 --- /dev/null +++ b/.config/nvim/after/plugin/hardtime.lua @@ -0,0 +1 @@ +require("hardtime").setup() diff --git a/.config/nvim/after/plugin/harpoon.lua b/.config/nvim/after/plugin/harpoon.lua old mode 100644 new mode 100755 index c3facc9..d4d3242 --- a/.config/nvim/after/plugin/harpoon.lua +++ b/.config/nvim/after/plugin/harpoon.lua @@ -5,7 +5,7 @@ vim.keymap.set("n","a", mark.add_file) vim.keymap.set("n","", ui.toggle_quick_menu) -vim.keymap.set("n","", function() ui.nav_file(1) end) +vim.keymap.set("n","", function() ui.nav_file(1) end) vim.keymap.set("n","", function() ui.nav_file(2) end) vim.keymap.set("n","", function() ui.nav_file(3) end) vim.keymap.set("n","", function() ui.nav_file(4) end) diff --git a/.config/nvim/after/plugin/indent-blankline.lua b/.config/nvim/after/plugin/indent-blankline.lua new file mode 100644 index 0000000..b0cb322 --- /dev/null +++ b/.config/nvim/after/plugin/indent-blankline.lua @@ -0,0 +1,30 @@ +local highlight = { + "RainbowRed", +} + +local hooks = require "ibl.hooks" +-- create the highlight groups in the highlight setup hook, so they are reset +-- every time the colorscheme changes +hooks.register(hooks.type.HIGHLIGHT_SETUP, function() + vim.api.nvim_set_hl(0, "RainbowRed", { fg = "#702ec0" }) +end) + +require('ibl').setup { + indent = { + char = '|', + highlight = highlight, + }, + scope = { + show_start = false, + show_end = false, + show_exact_scope = false, + }, + exclude = { + filetypes = { + 'help', + 'packer', + 'undotree', + 'diff', + }, + }, +} diff --git a/.config/nvim/after/plugin/lsp.lua b/.config/nvim/after/plugin/lsp.lua old mode 100644 new mode 100755 index d37197c..0bc44c4 --- a/.config/nvim/after/plugin/lsp.lua +++ b/.config/nvim/after/plugin/lsp.lua @@ -1,3 +1,10 @@ +vim.api.nvim_create_autocmd("FileType", { + pattern = "src", + callback = function() + print("LSP should now be active for src files") + end, +}) + local lsp = require("lsp-zero") lsp.preset("recommended") @@ -32,14 +39,33 @@ lsp.on_attach(function(client, bufnr) vim.keymap.set("i", "", function() vim.lsp.buf.signature_help() end, opts) end) + +local lsp_configurations = require('lspconfig.configs') + +if not lsp_configurations.greybel then + lsp_configurations.greybel = { + default_config = { + cmd = { "/bin/greybel-languageserver", "--stdio" }, + filetypes = { "greyscript" }, + root_dir = require('lspconfig.util').root_pattern(".git", vim.fn.getcwd()), + settings = {}, + } + } +end + -- to learn how to use mason.nvim with lsp-zero -- read this: https://github.com/VonHeikemen/lsp-zero.nvim/blob/v3.x/doc/md/guides/integrate-with-mason-nvim.md -require('mason').setup({}) +require('mason').setup({ + registries = { + "github:mason-org/mason-registry", + }, +}) require('mason-lspconfig').setup({ - ensure_installed = {}, + ensure_installed = { }, handlers = { lsp.default_setup, }, }) +require('lspconfig').greybel.setup({}) lsp.setup() diff --git a/.config/nvim/after/plugin/lualine.lua b/.config/nvim/after/plugin/lualine.lua new file mode 100644 index 0000000..4abfa26 --- /dev/null +++ b/.config/nvim/after/plugin/lualine.lua @@ -0,0 +1,46 @@ +require('lualine').setup() + +local custom_gruvbox = require'lualine.themes.base16' + +-- Change the background of lualine_c section for normal mode +custom_gruvbox.normal.c.bg = '#222222' + +local hide_in_width = function() + return vim.fn.winwidth(0) > 80 +end + +local diagnostics = { + 'diagnostics', + sources = { 'nvim_diagnostic' }, + sections = { 'error' , 'warn' }, + symbols = { error = ' ', warn = ' ', info = ' ', hint = ' ' }, + update_in_insert = false, + allways_visible = false, + cond = hide_in_width, +} + +require('lualine').setup { + options = { + theme = custom_gruvbox, + icons_enabled = true, + disabled_filetypes = {'undotree', 'diff'}, + }, + sections = { + lualine_a = {{ + 'mode', + fmt = function(str) + return ' ' .. str + end, + }}, + lualine_b = {'branch', 'diff', diagnostics}, + lualine_c = {{ + 'filename', + file_status = true, + path = 0, + }}, + --lualine_x = {'encoding', 'fileformat', 'filetype'}, + lualine_x = {{'encoding', cond=hide_in_width}, {'filetype',cond=hide_in_width}}, + lualine_y = {'progress'}, + lualine_z = {'location'} + } +} diff --git a/.config/nvim/after/plugin/notify.lua b/.config/nvim/after/plugin/notify.lua new file mode 100644 index 0000000..19c7362 --- /dev/null +++ b/.config/nvim/after/plugin/notify.lua @@ -0,0 +1,4 @@ +vim.notify = require("notify") +require("notify").setup({ + background_colour="#000000" +}) diff --git a/.config/nvim/after/plugin/telescope.lua b/.config/nvim/after/plugin/telescope.lua old mode 100644 new mode 100755 index 2eae882..a709d9b --- a/.config/nvim/after/plugin/telescope.lua +++ b/.config/nvim/after/plugin/telescope.lua @@ -1,5 +1,8 @@ local builtin = require('telescope.builtin') vim.keymap.set('n', 'pf', builtin.find_files, {}) +vim.keymap.set('n', 'pg', builtin.live_grep, {}) +vim.keymap.set('n', 'pb', builtin.buffers, {}) +vim.keymap.set('n', 'ph', builtin.help_tags, {}) vim.keymap.set('n', 'ps', function() builtin.grep_string({ search = vim.fn.input("Grep > ") }); end) diff --git a/.config/nvim/custom-lsp/.luarc.json b/.config/nvim/custom-lsp/.luarc.json old mode 100644 new mode 100755 diff --git a/.config/nvim/init.lua b/.config/nvim/init.lua old mode 100644 new mode 100755 diff --git a/.config/nvim/lua/yourmom/cloak.lua b/.config/nvim/lua/yourmom/cloak.lua new file mode 100644 index 0000000..5a13953 --- /dev/null +++ b/.config/nvim/lua/yourmom/cloak.lua @@ -0,0 +1,293 @@ +local group = vim.api.nvim_create_augroup('cloak', {}) +local namespace = vim.api.nvim_create_namespace('cloak') + +-- In case cmp is lazy loaded, we check :CmpStatus instead of a pcall to require +-- so we maintain the lazy load. +local has_cmp = function() + return vim.fn.exists(':CmpStatus') > 0 +end + +local M = {} + +M.opts = { + enabled = true, + cloak_character = '*', + cloak_length = nil, + highlight_group = 'Comment', + try_all_patterns = true, + patterns = { { file_pattern = '.env*', cloak_pattern = '=.+' } }, + cloak_telescope = true, + uncloaked_line_num = nil, + cloak_on_leave = false, +} + +M.setup = function(opts) + M.opts = vim.tbl_deep_extend('force', M.opts, opts or {}) + vim.b.cloak_enabled = M.opts.enabled + + for _, pattern in ipairs(M.opts.patterns) do + if type(pattern.cloak_pattern) == 'string' then + pattern.cloak_pattern = { { pattern.cloak_pattern, replace = pattern.replace } } + else + for i, inner_pattern in ipairs(pattern.cloak_pattern) do + pattern.cloak_pattern[i] = + type(inner_pattern) == 'string' + and { inner_pattern, replace = pattern.cloak_pattern.replace or pattern.replace } + or inner_pattern + end + end + + vim.api.nvim_create_autocmd( + { 'BufEnter', 'TextChanged', 'TextChangedI', 'TextChangedP' }, { + pattern = pattern.file_pattern, + callback = function() + if M.opts.enabled then + M.cloak(pattern) + else + M.uncloak() + end + end, + group = group, + } + ) + + if M.opts.cloak_on_leave then + vim.api.nvim_create_autocmd( + 'BufWinLeave', { + pattern = pattern.file_pattern, + callback = function() + M.enable() + end, + group = group, + } + ) + end + end + + if M.opts.cloak_telescope then + vim.api.nvim_create_autocmd( + 'User', { + pattern = 'TelescopePreviewerLoaded', + callback = function(args) + -- Feature not in 0.1.x + if not M.opts.enabled or args.data == nil then + return + end + + local buffer = require('telescope.state').get_existing_prompt_bufnrs()[1] + local picker = require('telescope.actions.state').get_current_picker( + buffer + ) + + -- If our state variable is set, meaning we have just refreshed after cloaking a buffer, + -- set the selection to that row again. + if picker.__cloak_selection then + picker:set_selection(picker.__cloak_selection) + picker.__cloak_selection = nil + vim.schedule( + function() + picker:refresh_previewer() + end + ) + return + end + + local is_cloaked, _ = pcall( + vim.api.nvim_buf_get_var, args.buf, 'cloaked' + ) + + -- Check the buffer agains all configured patterns, + -- if matched, set a variable on the picker to know where we left off, + -- set a buffer variable to know we already cloaked it later, and refresh. + -- a refresh will result in the cloak being visible, and will make this + -- aucmd be called again right away with the first result, which we will then + -- set to what we have stored in the code above. + if M.recloak_file(args.data.bufname) then + vim.api.nvim_buf_set_var(args.buf, 'cloaked', true) + if is_cloaked then + return + end + + local row = picker:get_selection_row() + picker.__cloak_selection = row + picker:refresh() + return + end + end, + group = group, + } + ) + end + -- Handle cloaking the Telescope preview. + + vim.api.nvim_create_user_command('CloakEnable', M.enable, {}) + vim.api.nvim_create_user_command('CloakDisable', M.disable, {}) + vim.api.nvim_create_user_command('CloakToggle', M.toggle, {}) + vim.api.nvim_create_user_command('CloakPreviewLine', M.uncloak_line, {}) +end + +M.uncloak = function() + vim.api.nvim_buf_clear_namespace(0, namespace, 0, -1) +end + +M.uncloak_line = function() + if not M.opts.enabled then + return + end + + local buf = vim.api.nvim_win_get_buf(0) + local cursor = vim.api.nvim_win_get_cursor(0) + M.opts.uncloaked_line_num = cursor[1] + + vim.api.nvim_create_autocmd( + { 'CursorMoved', 'CursorMovedI', 'BufLeave' }, { + buffer = buf, + callback = function(args) + if not M.opts.enabled then + M.opts.uncloaked_line_num = nil + return true + end + + if args.event == 'BufLeave' then + M.opts.uncloaked_line_num = nil + M.recloak_file(vim.api.nvim_buf_get_name(buf)) + return true + end + + local ncursor = vim.api.nvim_win_get_cursor(0) + if ncursor[1] == M.opts.uncloaked_line_num then + return + end + + M.opts.uncloaked_line_num = nil + M.recloak_file(vim.api.nvim_buf_get_name(buf)) + + -- deletes the auto command + return true + end, + group = group, + } + ) + + M.recloak_file(vim.api.nvim_buf_get_name(buf)) +end + +M.cloak = function(pattern) + M.uncloak() + + if has_cmp() then + require('cmp').setup.buffer({ enabled = false }) + end + + local function determine_replacement(length, prefix) + local cloak_str = prefix + .. M.opts.cloak_character:rep( + tonumber(M.opts.cloak_length) + or length - vim.fn.strchars(prefix)) + local remaining_length = length - vim.fn.strchars(cloak_str) + -- Fixme: + -- - When cloak_length is longer than the text underlying it, + -- it results in overlaying of extra text + -- => Possiblie solutions would could be implemented using inline virtual text + -- (https://github.com/neovim/neovim/pull/20130) + return cloak_str -- :sub(1, math.min(remaining_length - 1, -1)) + .. (' '):rep(remaining_length) + end + + local found_pattern = false + local lines = vim.api.nvim_buf_get_lines(0, 0, -1, false) + for i, line in ipairs(lines) do + -- Find all matches for the current line + local searchStartIndex = 1 + while searchStartIndex < #line and + -- if the line is uncloaked skip + i ~= M.opts.uncloaked_line_num do + + -- Find best pattern based on starting position and tiebreak with length + local first, last, matching_pattern, has_groups = -1, 1, nil, false + for _, inner_pattern in ipairs(pattern.cloak_pattern) do + local current_first, current_last, capture_group = + line:find(inner_pattern[1], searchStartIndex) + if current_first ~= nil + and (first < 0 + or current_first < first + or (current_first == first and current_last > last)) then + first, last, matching_pattern, has_groups = + current_first, current_last, inner_pattern, capture_group ~= nil + if M.opts.try_all_patterns == false then break end + end + end + if first >= 0 then + found_pattern = true + local prefix = line:sub(first,first) + if has_groups and matching_pattern.replace ~= nil then + prefix = line:sub(first,last) + :gsub(matching_pattern[1], matching_pattern.replace, 1) + end + local last_of_prefix = first + vim.fn.strchars(prefix) - 1 + if prefix == line:sub(first, last_of_prefix) then + first, prefix = last_of_prefix + 1, '' + end + vim.api.nvim_buf_set_extmark( + 0, namespace, i - 1, first-1, { + hl_mode = 'combine', + virt_text = { + { + determine_replacement(last - first + 1, prefix), + M.opts.highlight_group, + }, + }, + virt_text_pos = 'overlay', + } + ) + else break end + searchStartIndex = last + end + end + if found_pattern then + vim.opt_local.wrap = false + end +end + +M.recloak_file = function(filename) + local base_name = vim.fn.fnamemodify(filename, ':t') + for _, pattern in ipairs(M.opts.patterns) do + -- Could be a string or a table of patterns. + local file_patterns = pattern.file_pattern + if type(file_patterns) == 'string' then + file_patterns = { file_patterns } + end + + for _, file_pattern in ipairs(file_patterns) do + if base_name ~= nil and + vim.fn.match(base_name, vim.fn.glob2regpat(file_pattern)) ~= -1 then + M.cloak(pattern) + return true + end + end + end + + return false +end + +M.disable = function() + M.uncloak() + M.opts.enabled = false + vim.b.cloak_enabled = false +end + +M.enable = function() + M.opts.enabled = true + vim.b.cloak_enabled = true + vim.cmd('doautocmd TextChanged') +end + +M.toggle = function() + if M.opts.enabled then + M.disable() + else + M.enable() + end +end + +return M diff --git a/.config/nvim/lua/yourmom/init.lua b/.config/nvim/lua/yourmom/init.lua index 393115e..c9642cf 100755 --- a/.config/nvim/lua/yourmom/init.lua +++ b/.config/nvim/lua/yourmom/init.lua @@ -12,11 +12,13 @@ vim.opt.expandtab = true vim.opt.smartindent=true -vim.opt.wrap = false +vim.opt.wrap = true vim.opt.hlsearch = false vim.opt.incsearch = true +vim.o.ignorecase = true + vim.opt.updatetime = 50 --vim.opt.colorcolumn = "80" --vim.cmd('colorscheme vim') @@ -37,3 +39,10 @@ vim.cmd('hi StatusLine cterm=reverse') --allows highlighint in comments --vim.api.nvim_set_hl(0, '@lsp.type.comment.cpp', {}) + + +vim.filetype.add({ + extension = { + src = "greyscript" + } +}) diff --git a/.config/nvim/lua/yourmom/packer.lua b/.config/nvim/lua/yourmom/packer.lua index 009a1d0..6428021 100755 --- a/.config/nvim/lua/yourmom/packer.lua +++ b/.config/nvim/lua/yourmom/packer.lua @@ -10,6 +10,10 @@ return require('packer').startup(function(use) use 'ThePrimeagen/vim-be-good' use 'ThePrimeagen/harpoon' + use 'm4xshen/hardtime.nvim' + + use 'rcarriga/nvim-notify' + use { "rose-pine/neovim", as = "rose-pine" } use { @@ -20,6 +24,17 @@ return require('packer').startup(function(use) use("mbbill/undotree") + use "lukas-reineke/indent-blankline.nvim" + + use({ "NStefan002/screenkey.nvim", tag = "*" }) + + use("catgoose/nvim-colorizer.lua") + + use { + 'nvim-lualine/lualine.nvim', + --requires = { 'nvim-tree/nvim-web-devicons', opt = true } + } + --[[ use('nvim-treesitter/nvim-treesitter', {run = ':TSUpdate', config = function() @@ -50,6 +65,4 @@ return require('packer').startup(function(use) {'L3MON4D3/LuaSnip'}, } } - - end) diff --git a/.config/nvim/lua/yourmom/remap.lua b/.config/nvim/lua/yourmom/remap.lua index aa3a488..dfa1b95 100755 --- a/.config/nvim/lua/yourmom/remap.lua +++ b/.config/nvim/lua/yourmom/remap.lua @@ -1,13 +1,6 @@ vim.g.mapleader=" " -vim.keymap.set("n", "pv", vim.cmd.Ex) - - ---[[ -vim.keymap.set("n","","h") -vim.keymap.set("n","","j") -vim.keymap.set("n","","l") -vim.keymap.set("n","","k") -]]-- +vim.g.maplocalleader=" " +vim.keymap.set("n", "pv", vim.cmd.Ex) --[[vim.cmd[[ @@ -25,15 +18,52 @@ vim.keymap.set("n", "J", "mzJ`z") --keeps cursur in middle with up down vim.keymap.set("n", "", "zz") vim.keymap.set("n", "", "zz") +vim.keymap.set("n", "n", "nzzzv") +vim.keymap.set("n", "N", "Nzzzv") --sets leader y to put in sys clipboard vim.keymap.set("n", "y", "\"+y") vim.keymap.set("v", "y", "\"+y") vim.keymap.set("n", "Y", "\"+Y") +--paste but dont overwrite current register with selection +vim.keymap.set("v", "p", "\"_dP") --nnoremap S :%s//g vim.keymap.set("n", "S", [[:%s//]]) + +vim.keymap.set('n', 'to', ':tabnew') +vim.keymap.set('n', 'tx', ':tabclose') +vim.keymap.set('n', 'tn', ':tabn') +vim.keymap.set('n', 'tp', ':tabp') + +vim.keymap.set('n', 'lw', ':set wrap!') + +--stay in indent mode +vim.keymap.set('v', '<', '', '>gv', {noremap = true}) + + +--reize with arrows +vim.keymap.set('n', '', ':resize -2') +vim.keymap.set('n', '', ':resize +2') +vim.keymap.set('n', '', ':vertical resize -2') +vim.keymap.set('n', '', ':vertical resize +2') + +-- window management +vim.keymap.set('n', 'v', 'v') +vim.keymap.set('n', 'h', 's') +vim.keymap.set('n', 'se', '=') +vim.keymap.set('n', 'xs', ':close') + +-- navigate splits +vim.keymap.set("n","","h") +vim.keymap.set("n","","j") +vim.keymap.set("n","","l") +vim.keymap.set("n","","k") + + + vim.keymap.set("n", "ee", "oif err != nil {}Oreturn err") --per file type log quick binds @@ -46,10 +76,40 @@ elseif string.find(filename,".*%.lua$") then cc_command="oterm.print()V=$i" elseif string.find(filename,".*%.c$") then cc_command="oprintf(\"debug: %i\",);V=$hi" +elseif string.find(filename,".*%.rs$") then + cc_command="oprintln!(\"debug: {}\",);V=$hi" end vim.keymap.set("n", "cc", cc_command) +local auto_close=false +local function toggle_auto_close() + if auto_close==false then + vim.keymap.set("i", "{", "{}ko"); + vim.keymap.set("i", "(", "()i"); + if string.find(filename,".*%.html$") then + vim.keymap.set("i", "<", "<"); + vim.keymap.set("i", ">", ">TahpFi"); + vim.keymap.set("i", ">", ">"); + end + vim.keymap.set("i", "[", "[]i"); + vim.keymap.set("i", "\"", "\"\"i"); + vim.keymap.set("i", "'", "''i"); + auto_close=true + else + vim.keymap.set("i", "{", "{"); + vim.keymap.set("i", "(", "("); + vim.keymap.set("i", "<", "<"); + vim.keymap.set("i", ">", ">"); + vim.keymap.set("i", "[", "["); + auto_close=false + end +end +toggle_auto_close() + +vim.keymap.set("n", "k", toggle_auto_close) --[[ vim.keymap("i","", function() diff --git a/.config/picom.conf b/.config/picom.conf old mode 100644 new mode 100755 index 5c2cb09..31ecf09 --- a/.config/picom.conf +++ b/.config/picom.conf @@ -78,11 +78,11 @@ fading = true; # Opacity change between steps while fading in. (0.01 - 1.0, defaults to 0.028) # fade-in-step = 0.028 -fade-in-step = 0.03; +fade-in-step = 0.6; # Opacity change between steps while fading out. (0.01 - 1.0, defaults to 0.03) # fade-out-step = 0.03 -fade-out-step = 0.03; +fade-out-step = 0.06; # The time between steps in fade step, in milliseconds. (> 0, defaults to 10) # fade-delta = 10 @@ -104,7 +104,7 @@ fade-out-step = 0.03; # Opacity of inactive windows. (0.1 - 1.0, defaults to 1.0) # inactive-opacity = 1 -inactive-opacity = 0.8; +inactive-opacity = 1; # Opacity of window titlebars and borders. (0.1 - 1.0, disabled by default) # frame-opacity = 1.0 @@ -138,12 +138,13 @@ focus-exclude = [ "class_g = 'Cairo-clock'" ]; # opacity-rule = [ - "90:name *= 'Firefox'", - "95:name *= 'Discord'", + #"95:name *= 'Firefox'", + #"80:name *= 'Discord'", "90:name *= 'OBS'", "90:name *= 'urxvt'", - "80:class_g = 'steam'", + #"80:class_g = 'steam'", "70:class_g *= 'screen-recorder-gtk'", + "80:class_g *= 'simplex'", ]; @@ -154,7 +155,7 @@ opacity-rule = [ # Sets the radius of rounded window corners. When > 0, the compositor will # round the corners of windows. Does not interact well with # `transparent-clipping`. -corner-radius = 15 +corner-radius = 0 # Exclude conditions for rounded corners. rounded-corners-exclude = [ @@ -172,12 +173,12 @@ rounded-corners-exclude = [ # Parameters for background blurring, see the *BLUR* section for more information. -# blur-method = -# blur-size = 12 -# -# blur-deviation = false -# -# blur-strength = 5 +blur-method = "box" +blur-size = 5 + +blur-deviation = false + +blur-strength = 3 # Blur background of semi-transparent / ARGB windows. # Bad in performance, with driver-dependent behavior. @@ -227,7 +228,7 @@ blur-background-exclude = [ # `xrender` is the default one. # # backend = "glx" -backend = "xrender"; +backend = "glx"; # Use higher precision during rendering, and apply dither when presenting the # rendered screen. Reduces banding artifacts, but might cause performance @@ -236,7 +237,7 @@ dithered-present = false; # Enable/disable VSync. # vsync = false -vsync = false; +vsync = true; # Try to detect WM windows (a non-override-redirect window with no # child that has 'WM_STATE') and mark them as active. diff --git a/.config/rofi/config.rasi b/.config/rofi/config.rasi index 5191111..36ed3a8 100644 --- a/.config/rofi/config.rasi +++ b/.config/rofi/config.rasi @@ -1,5 +1,14 @@ @theme "Arc-Dark" +//background: #30303050; *{ - background: #30303050; + background: #201f5060; + alternate-normal-background: #4030B060; + foreground: #F0C3F0; + border-color: #5030D0; + selected-normal-background: #20202060; +} + +window, mainbox{ + //border-radius: 20px; } diff --git a/.config/screenkey.json b/.config/screenkey.json old mode 100644 new mode 100755 index 4e01f42..6e886a6 --- a/.config/screenkey.json +++ b/.config/screenkey.json @@ -20,10 +20,10 @@ "vis_shift": false, "vis_space": true, "geometry": [ - 1303, - 180, - 611, - 103 + 1191, + 152, + 720, + 81 ], "screen": 0, "start_disabled": false, diff --git a/.gtkrc-2.0 b/.gtkrc-2.0 index 92e5350..8b780c2 100644 --- a/.gtkrc-2.0 +++ b/.gtkrc-2.0 @@ -1,13 +1,17 @@ -gtk-enable-event-sounds=1 -gtk-enable-animations=1 -gtk-theme-name="Breeze-Dark" -gtk-primary-button-warps-slider=1 -gtk-toolbar-style=3 -gtk-menu-images=1 -gtk-button-images=1 -gtk-cursor-theme-size=24 -gtk-cursor-theme-name="breeze_cursors" -gtk-sound-theme-name="freedesktop" -gtk-icon-theme-name="breeze-dark" -gtk-font-name="Noto Sans, 10" +# DO NOT EDIT! This file will be overwritten by LXAppearance. +# Any customization should be done in ~/.gtkrc-2.0.mine instead. +include "/home/iceyrazor/.gtkrc-2.0.mine" +gtk-theme-name="Breeze-dark-gtk" +gtk-icon-theme-name="Adwaita" +gtk-font-name="Cantarell 11" +gtk-cursor-theme-size=0 +gtk-toolbar-style=GTK_TOOLBAR_BOTH +gtk-toolbar-icon-size=GTK_ICON_SIZE_LARGE_TOOLBAR +gtk-button-images=1 +gtk-menu-images=1 +gtk-enable-event-sounds=1 +gtk-enable-input-feedback-sounds=1 +gtk-xft-antialias=1 +gtk-xft-hinting=1 +gtk-xft-hintstyle="hintfull" diff --git a/.p10k.zsh b/.p10k.zsh new file mode 100644 index 0000000..0641dde --- /dev/null +++ b/.p10k.zsh @@ -0,0 +1,1739 @@ +# Generated by Powerlevel10k configuration wizard on 2025-01-08 at 03:10 CST. +# Based on romkatv/powerlevel10k/config/p10k-classic.zsh, checksum 13396. +# Wizard options: nerdfont-v3 + powerline, small icons, classic, unicode, dark, +# angled separators, sharp heads, slanted tails, 1 line, sparse, few icons, concise, +# transient_prompt, instant_prompt=verbose. +# Type `p10k configure` to generate another config. +# +# Config for Powerlevel10k with classic powerline prompt style. Type `p10k configure` to generate +# your own config based on it. +# +# Tip: Looking for a nice color? Here's a one-liner to print colormap. +# +# for i in {0..255}; do print -Pn "%K{$i} %k%F{$i}${(l:3::0:)i}%f " ${${(M)$((i%6)):#3}:+$'\n'}; done + +# Temporarily change options. +'builtin' 'local' '-a' 'p10k_config_opts' +[[ ! -o 'aliases' ]] || p10k_config_opts+=('aliases') +[[ ! -o 'sh_glob' ]] || p10k_config_opts+=('sh_glob') +[[ ! -o 'no_brace_expand' ]] || p10k_config_opts+=('no_brace_expand') +'builtin' 'setopt' 'no_aliases' 'no_sh_glob' 'brace_expand' + +() { + emulate -L zsh -o extended_glob + + # Unset all configuration options. This allows you to apply configuration changes without + # restarting zsh. Edit ~/.p10k.zsh and type `source ~/.p10k.zsh`. + unset -m '(POWERLEVEL9K_*|DEFAULT_USER)~POWERLEVEL9K_GITSTATUS_DIR' + + # Zsh >= 5.1 is required. + [[ $ZSH_VERSION == (5.<1->*|<6->.*) ]] || return + + # The list of segments shown on the left. Fill it with the most important segments. + typeset -g POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=( + os_icon # os identifier + dir # current directory + vcs # git status + #prompt_char # prompt symbol + ) + + # The list of segments shown on the right. Fill it with less important segments. + # Right prompt on the last prompt line (where you are typing your commands) gets + # automatically hidden when the input line reaches it. Right prompt above the + # last prompt line gets hidden if it would overlap with left prompt. + typeset -g POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=( + status # exit code of the last command + command_execution_time # duration of the last command + background_jobs # presence of background jobs + direnv # direnv status (https://direnv.net/) + asdf # asdf version manager (https://github.com/asdf-vm/asdf) + virtualenv # python virtual environment (https://docs.python.org/3/library/venv.html) + anaconda # conda environment (https://conda.io/) + pyenv # python environment (https://github.com/pyenv/pyenv) + goenv # go environment (https://github.com/syndbg/goenv) + nodenv # node.js version from nodenv (https://github.com/nodenv/nodenv) + nvm # node.js version from nvm (https://github.com/nvm-sh/nvm) + nodeenv # node.js environment (https://github.com/ekalinin/nodeenv) + # node_version # node.js version + # go_version # go version (https://golang.org) + # rust_version # rustc version (https://www.rust-lang.org) + # dotnet_version # .NET version (https://dotnet.microsoft.com) + # php_version # php version (https://www.php.net/) + # laravel_version # laravel php framework version (https://laravel.com/) + # java_version # java version (https://www.java.com/) + # package # name@version from package.json (https://docs.npmjs.com/files/package.json) + rbenv # ruby version from rbenv (https://github.com/rbenv/rbenv) + rvm # ruby version from rvm (https://rvm.io) + fvm # flutter version management (https://github.com/leoafarias/fvm) + luaenv # lua version from luaenv (https://github.com/cehoffman/luaenv) + jenv # java version from jenv (https://github.com/jenv/jenv) + plenv # perl version from plenv (https://github.com/tokuhirom/plenv) + perlbrew # perl version from perlbrew (https://github.com/gugod/App-perlbrew) + phpenv # php version from phpenv (https://github.com/phpenv/phpenv) + scalaenv # scala version from scalaenv (https://github.com/scalaenv/scalaenv) + haskell_stack # haskell version from stack (https://haskellstack.org/) + kubecontext # current kubernetes context (https://kubernetes.io/) + terraform # terraform workspace (https://www.terraform.io) + # terraform_version # terraform version (https://www.terraform.io) + aws # aws profile (https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html) + aws_eb_env # aws elastic beanstalk environment (https://aws.amazon.com/elasticbeanstalk/) + azure # azure account name (https://docs.microsoft.com/en-us/cli/azure) + gcloud # google cloud cli account and project (https://cloud.google.com/) + google_app_cred # google application credentials (https://cloud.google.com/docs/authentication/production) + toolbox # toolbox name (https://github.com/containers/toolbox) + context # user@hostname + nordvpn # nordvpn connection status, linux only (https://nordvpn.com/) + ranger # ranger shell (https://github.com/ranger/ranger) + yazi # yazi shell (https://github.com/sxyazi/yazi) + nnn # nnn shell (https://github.com/jarun/nnn) + lf # lf shell (https://github.com/gokcehan/lf) + xplr # xplr shell (https://github.com/sayanarijit/xplr) + vim_shell # vim shell indicator (:sh) + midnight_commander # midnight commander shell (https://midnight-commander.org/) + nix_shell # nix shell (https://nixos.org/nixos/nix-pills/developing-with-nix-shell.html) + chezmoi_shell # chezmoi shell (https://www.chezmoi.io/) + vi_mode # vi mode (you don't need this if you've enabled prompt_char) + # vpn_ip # virtual private network indicator + # load # CPU load + # disk_usage # disk usage + # ram # free RAM + # swap # used swap + todo # todo items (https://github.com/todotxt/todo.txt-cli) + timewarrior # timewarrior tracking status (https://timewarrior.net/) + taskwarrior # taskwarrior task count (https://taskwarrior.org/) + per_directory_history # Oh My Zsh per-directory-history local/global indicator + # cpu_arch # CPU architecture + # time # current time + # ip # ip address and bandwidth usage for a specified network interface + # public_ip # public IP address + # proxy # system-wide http/https/ftp proxy + # battery # internal battery + # wifi # wifi speed + # example # example user-defined segment (see prompt_example function below) + ) + + # Defines character set used by powerlevel10k. It's best to let `p10k configure` set it for you. + typeset -g POWERLEVEL9K_MODE=nerdfont-v3 + # When set to `moderate`, some icons will have an extra space after them. This is meant to avoid + # icon overlap when using non-monospace fonts. When set to `none`, spaces are not added. + typeset -g POWERLEVEL9K_ICON_PADDING=none + + # When set to true, icons appear before content on both sides of the prompt. When set + # to false, icons go after content. If empty or not set, icons go before content in the left + # prompt and after content in the right prompt. + # + # You can also override it for a specific segment: + # + # POWERLEVEL9K_STATUS_ICON_BEFORE_CONTENT=false + # + # Or for a specific segment in specific state: + # + # POWERLEVEL9K_DIR_NOT_WRITABLE_ICON_BEFORE_CONTENT=false + typeset -g POWERLEVEL9K_ICON_BEFORE_CONTENT= + + # Add an empty line before each prompt. + typeset -g POWERLEVEL9K_PROMPT_ADD_NEWLINE=true + + # Connect left prompt lines with these symbols. You'll probably want to use the same color + # as POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_FOREGROUND below. + typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_PREFIX='%240F╭─' + typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_PREFIX='%240F├─' + typeset -g POWERLEVEL9K_MULTILINE_LAST_PROMPT_PREFIX='%240F╰─' + # Connect right prompt lines with these symbols. + typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_SUFFIX='%240F─╮' + typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_SUFFIX='%240F─┤' + typeset -g POWERLEVEL9K_MULTILINE_LAST_PROMPT_SUFFIX='%240F─╯' + + # Filler between left and right prompt on the first prompt line. You can set it to ' ', '·' or + # '─'. The last two make it easier to see the alignment between left and right prompt and to + # separate prompt from command output. You might want to set POWERLEVEL9K_PROMPT_ADD_NEWLINE=false + # for more compact prompt if using this option. + typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_CHAR=' ' + typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_BACKGROUND= + typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_GAP_BACKGROUND= + if [[ $POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_CHAR != ' ' ]]; then + # The color of the filler. You'll probably want to match the color of POWERLEVEL9K_MULTILINE + # ornaments defined above. + typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_FOREGROUND=240 + # Start filler from the edge of the screen if there are no left segments on the first line. + typeset -g POWERLEVEL9K_EMPTY_LINE_LEFT_PROMPT_FIRST_SEGMENT_END_SYMBOL='%{%}' + # End filler on the edge of the screen if there are no right segments on the first line. + typeset -g POWERLEVEL9K_EMPTY_LINE_RIGHT_PROMPT_FIRST_SEGMENT_START_SYMBOL='%{%}' + fi + + # Default background color. + typeset -g POWERLEVEL9K_BACKGROUND=236 + + # Separator between same-color segments on the left. + typeset -g POWERLEVEL9K_LEFT_SUBSEGMENT_SEPARATOR='%244F\uE0B1' + # Separator between same-color segments on the right. + typeset -g POWERLEVEL9K_RIGHT_SUBSEGMENT_SEPARATOR='%244F\uE0B3' + # Separator between different-color segments on the left. + typeset -g POWERLEVEL9K_LEFT_SEGMENT_SEPARATOR='\uE0B0' + # Separator between different-color segments on the right. + typeset -g POWERLEVEL9K_RIGHT_SEGMENT_SEPARATOR='\uE0B2' + # To remove a separator between two segments, add "_joined" to the second segment name. + # For example: POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(os_icon context_joined) + + # The right end of left prompt. + typeset -g POWERLEVEL9K_LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL='\uE0B0' + # The left end of right prompt. + typeset -g POWERLEVEL9K_RIGHT_PROMPT_FIRST_SEGMENT_START_SYMBOL='\uE0B2' + # The left end of left prompt. + typeset -g POWERLEVEL9K_LEFT_PROMPT_FIRST_SEGMENT_START_SYMBOL='\uE0BA' + # The right end of right prompt. + typeset -g POWERLEVEL9K_RIGHT_PROMPT_LAST_SEGMENT_END_SYMBOL='\uE0BC' + # Left prompt terminator for lines without any segments. + typeset -g POWERLEVEL9K_EMPTY_LINE_LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL= + + #################################[ os_icon: os identifier ]################################## + # OS identifier color. + typeset -g POWERLEVEL9K_OS_ICON_FOREGROUND=255 + # Custom icon. + # typeset -g POWERLEVEL9K_OS_ICON_CONTENT_EXPANSION='⭐' + + ################################[ prompt_char: prompt symbol ]################################ + # Transparent background. + typeset -g POWERLEVEL9K_PROMPT_CHAR_BACKGROUND= + # Green prompt symbol if the last command succeeded. + typeset -g POWERLEVEL9K_PROMPT_CHAR_OK_{VIINS,VICMD,VIVIS,VIOWR}_FOREGROUND=76 + # Red prompt symbol if the last command failed. + typeset -g POWERLEVEL9K_PROMPT_CHAR_ERROR_{VIINS,VICMD,VIVIS,VIOWR}_FOREGROUND=196 + # Default prompt symbol. + typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIINS_CONTENT_EXPANSION='❯' + # Prompt symbol in command vi mode. + typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VICMD_CONTENT_EXPANSION='❮' + # Prompt symbol in visual vi mode. + typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIVIS_CONTENT_EXPANSION='V' + # Prompt symbol in overwrite vi mode. + typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIOWR_CONTENT_EXPANSION='▶' + typeset -g POWERLEVEL9K_PROMPT_CHAR_OVERWRITE_STATE=true + # No line terminator if prompt_char is the last segment. + typeset -g POWERLEVEL9K_PROMPT_CHAR_LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL= + # No line introducer if prompt_char is the first segment. + typeset -g POWERLEVEL9K_PROMPT_CHAR_LEFT_PROMPT_FIRST_SEGMENT_START_SYMBOL= + # No surrounding whitespace. + typeset -g POWERLEVEL9K_PROMPT_CHAR_LEFT_{LEFT,RIGHT}_WHITESPACE= + + ##################################[ dir: current directory ]################################## + # Default current directory color. + typeset -g POWERLEVEL9K_DIR_FOREGROUND=31 + # If directory is too long, shorten some of its segments to the shortest possible unique + # prefix. The shortened directory can be tab-completed to the original. + typeset -g POWERLEVEL9K_SHORTEN_STRATEGY=truncate_to_unique + # Replace removed segment suffixes with this symbol. + typeset -g POWERLEVEL9K_SHORTEN_DELIMITER= + # Color of the shortened directory segments. + typeset -g POWERLEVEL9K_DIR_SHORTENED_FOREGROUND=103 + # Color of the anchor directory segments. Anchor segments are never shortened. The first + # segment is always an anchor. + typeset -g POWERLEVEL9K_DIR_ANCHOR_FOREGROUND=39 + # Display anchor directory segments in bold. + typeset -g POWERLEVEL9K_DIR_ANCHOR_BOLD=true + # Don't shorten directories that contain any of these files. They are anchors. + local anchor_files=( + .bzr + .citc + .git + .hg + .node-version + .python-version + .go-version + .ruby-version + .lua-version + .java-version + .perl-version + .php-version + .tool-versions + .mise.toml + .shorten_folder_marker + .svn + .terraform + CVS + Cargo.toml + composer.json + go.mod + package.json + stack.yaml + ) + typeset -g POWERLEVEL9K_SHORTEN_FOLDER_MARKER="(${(j:|:)anchor_files})" + # If set to "first" ("last"), remove everything before the first (last) subdirectory that contains + # files matching $POWERLEVEL9K_SHORTEN_FOLDER_MARKER. For example, when the current directory is + # /foo/bar/git_repo/nested_git_repo/baz, prompt will display git_repo/nested_git_repo/baz (first) + # or nested_git_repo/baz (last). This assumes that git_repo and nested_git_repo contain markers + # and other directories don't. + # + # Optionally, "first" and "last" can be followed by ":" where is an integer. + # This moves the truncation point to the right (positive offset) or to the left (negative offset) + # relative to the marker. Plain "first" and "last" are equivalent to "first:0" and "last:0" + # respectively. + typeset -g POWERLEVEL9K_DIR_TRUNCATE_BEFORE_MARKER=false + # Don't shorten this many last directory segments. They are anchors. + typeset -g POWERLEVEL9K_SHORTEN_DIR_LENGTH=1 + # Shorten directory if it's longer than this even if there is space for it. The value can + # be either absolute (e.g., '80') or a percentage of terminal width (e.g, '50%'). If empty, + # directory will be shortened only when prompt doesn't fit or when other parameters demand it + # (see POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS and POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT below). + # If set to `0`, directory will always be shortened to its minimum length. + typeset -g POWERLEVEL9K_DIR_MAX_LENGTH=80 + # When `dir` segment is on the last prompt line, try to shorten it enough to leave at least this + # many columns for typing commands. + typeset -g POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS=40 + # When `dir` segment is on the last prompt line, try to shorten it enough to leave at least + # COLUMNS * POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT * 0.01 columns for typing commands. + typeset -g POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT=50 + # If set to true, embed a hyperlink into the directory. Useful for quickly + # opening a directory in the file manager simply by clicking the link. + # Can also be handy when the directory is shortened, as it allows you to see + # the full directory that was used in previous commands. + typeset -g POWERLEVEL9K_DIR_HYPERLINK=false + + # Enable special styling for non-writable and non-existent directories. See POWERLEVEL9K_LOCK_ICON + # and POWERLEVEL9K_DIR_CLASSES below. + typeset -g POWERLEVEL9K_DIR_SHOW_WRITABLE=v3 + + # The default icon shown next to non-writable and non-existent directories when + # POWERLEVEL9K_DIR_SHOW_WRITABLE is set to v3. + # typeset -g POWERLEVEL9K_LOCK_ICON='⭐' + + # POWERLEVEL9K_DIR_CLASSES allows you to specify custom icons and colors for different + # directories. It must be an array with 3 * N elements. Each triplet consists of: + # + # 1. A pattern against which the current directory ($PWD) is matched. Matching is done with + # extended_glob option enabled. + # 2. Directory class for the purpose of styling. + # 3. An empty string. + # + # Triplets are tried in order. The first triplet whose pattern matches $PWD wins. + # + # If POWERLEVEL9K_DIR_SHOW_WRITABLE is set to v3, non-writable and non-existent directories + # acquire class suffix _NOT_WRITABLE and NON_EXISTENT respectively. + # + # For example, given these settings: + # + # typeset -g POWERLEVEL9K_DIR_CLASSES=( + # '~/work(|/*)' WORK '' + # '~(|/*)' HOME '' + # '*' DEFAULT '') + # + # Whenever the current directory is ~/work or a subdirectory of ~/work, it gets styled with one + # of the following classes depending on its writability and existence: WORK, WORK_NOT_WRITABLE or + # WORK_NON_EXISTENT. + # + # Simply assigning classes to directories doesn't have any visible effects. It merely gives you an + # option to define custom colors and icons for different directory classes. + # + # # Styling for WORK. + # typeset -g POWERLEVEL9K_DIR_WORK_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_DIR_WORK_FOREGROUND=31 + # typeset -g POWERLEVEL9K_DIR_WORK_SHORTENED_FOREGROUND=103 + # typeset -g POWERLEVEL9K_DIR_WORK_ANCHOR_FOREGROUND=39 + # + # # Styling for WORK_NOT_WRITABLE. + # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_FOREGROUND=31 + # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_SHORTENED_FOREGROUND=103 + # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_ANCHOR_FOREGROUND=39 + # + # # Styling for WORK_NON_EXISTENT. + # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_FOREGROUND=31 + # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_SHORTENED_FOREGROUND=103 + # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_ANCHOR_FOREGROUND=39 + # + # If a styling parameter isn't explicitly defined for some class, it falls back to the classless + # parameter. For example, if POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_FOREGROUND is not set, it falls + # back to POWERLEVEL9K_DIR_FOREGROUND. + # + typeset -g POWERLEVEL9K_DIR_CLASSES=() + + # Custom prefix. + # typeset -g POWERLEVEL9K_DIR_PREFIX='%246Fin ' + + #####################################[ vcs: git status ]###################################### + # Branch icon. Set this parameter to '\UE0A0 ' for the popular Powerline branch icon. + typeset -g POWERLEVEL9K_VCS_BRANCH_ICON= + + # Untracked files icon. It's really a question mark, your font isn't broken. + # Change the value of this parameter to show a different icon. + typeset -g POWERLEVEL9K_VCS_UNTRACKED_ICON='?' + + # Formatter for Git status. + # + # Example output: master wip ⇣42⇡42 *42 merge ~42 +42 !42 ?42. + # + # You can edit the function to customize how Git status looks. + # + # VCS_STATUS_* parameters are set by gitstatus plugin. See reference: + # https://github.com/romkatv/gitstatus/blob/master/gitstatus.plugin.zsh. + function my_git_formatter() { + emulate -L zsh + + if [[ -n $P9K_CONTENT ]]; then + # If P9K_CONTENT is not empty, use it. It's either "loading" or from vcs_info (not from + # gitstatus plugin). VCS_STATUS_* parameters are not available in this case. + typeset -g my_git_format=$P9K_CONTENT + return + fi + + if (( $1 )); then + # Styling for up-to-date Git status. + local meta='%246F' # grey foreground + local clean='%76F' # green foreground + local modified='%178F' # yellow foreground + local untracked='%39F' # blue foreground + local conflicted='%196F' # red foreground + else + # Styling for incomplete and stale Git status. + local meta='%244F' # grey foreground + local clean='%244F' # grey foreground + local modified='%244F' # grey foreground + local untracked='%244F' # grey foreground + local conflicted='%244F' # grey foreground + fi + + local res + + if [[ -n $VCS_STATUS_LOCAL_BRANCH ]]; then + local branch=${(V)VCS_STATUS_LOCAL_BRANCH} + # If local branch name is at most 32 characters long, show it in full. + # Otherwise show the first 12 … the last 12. + # Tip: To always show local branch name in full without truncation, delete the next line. + (( $#branch > 32 )) && branch[13,-13]="…" # <-- this line + res+="${clean}${(g::)POWERLEVEL9K_VCS_BRANCH_ICON}${branch//\%/%%}" + fi + + if [[ -n $VCS_STATUS_TAG + # Show tag only if not on a branch. + # Tip: To always show tag, delete the next line. + && -z $VCS_STATUS_LOCAL_BRANCH # <-- this line + ]]; then + local tag=${(V)VCS_STATUS_TAG} + # If tag name is at most 32 characters long, show it in full. + # Otherwise show the first 12 … the last 12. + # Tip: To always show tag name in full without truncation, delete the next line. + (( $#tag > 32 )) && tag[13,-13]="…" # <-- this line + res+="${meta}#${clean}${tag//\%/%%}" + fi + + # Display the current Git commit if there is no branch and no tag. + # Tip: To always display the current Git commit, delete the next line. + [[ -z $VCS_STATUS_LOCAL_BRANCH && -z $VCS_STATUS_TAG ]] && # <-- this line + res+="${meta}@${clean}${VCS_STATUS_COMMIT[1,8]}" + + # Show tracking branch name if it differs from local branch. + if [[ -n ${VCS_STATUS_REMOTE_BRANCH:#$VCS_STATUS_LOCAL_BRANCH} ]]; then + res+="${meta}:${clean}${(V)VCS_STATUS_REMOTE_BRANCH//\%/%%}" + fi + + # Display "wip" if the latest commit's summary contains "wip" or "WIP". + if [[ $VCS_STATUS_COMMIT_SUMMARY == (|*[^[:alnum:]])(wip|WIP)(|[^[:alnum:]]*) ]]; then + res+=" ${modified}wip" + fi + + if (( VCS_STATUS_COMMITS_AHEAD || VCS_STATUS_COMMITS_BEHIND )); then + # ⇣42 if behind the remote. + (( VCS_STATUS_COMMITS_BEHIND )) && res+=" ${clean}⇣${VCS_STATUS_COMMITS_BEHIND}" + # ⇡42 if ahead of the remote; no leading space if also behind the remote: ⇣42⇡42. + (( VCS_STATUS_COMMITS_AHEAD && !VCS_STATUS_COMMITS_BEHIND )) && res+=" " + (( VCS_STATUS_COMMITS_AHEAD )) && res+="${clean}⇡${VCS_STATUS_COMMITS_AHEAD}" + elif [[ -n $VCS_STATUS_REMOTE_BRANCH ]]; then + # Tip: Uncomment the next line to display '=' if up to date with the remote. + # res+=" ${clean}=" + fi + + # ⇠42 if behind the push remote. + (( VCS_STATUS_PUSH_COMMITS_BEHIND )) && res+=" ${clean}⇠${VCS_STATUS_PUSH_COMMITS_BEHIND}" + (( VCS_STATUS_PUSH_COMMITS_AHEAD && !VCS_STATUS_PUSH_COMMITS_BEHIND )) && res+=" " + # ⇢42 if ahead of the push remote; no leading space if also behind: ⇠42⇢42. + (( VCS_STATUS_PUSH_COMMITS_AHEAD )) && res+="${clean}⇢${VCS_STATUS_PUSH_COMMITS_AHEAD}" + # *42 if have stashes. + (( VCS_STATUS_STASHES )) && res+=" ${clean}*${VCS_STATUS_STASHES}" + # 'merge' if the repo is in an unusual state. + [[ -n $VCS_STATUS_ACTION ]] && res+=" ${conflicted}${VCS_STATUS_ACTION}" + # ~42 if have merge conflicts. + (( VCS_STATUS_NUM_CONFLICTED )) && res+=" ${conflicted}~${VCS_STATUS_NUM_CONFLICTED}" + # +42 if have staged changes. + (( VCS_STATUS_NUM_STAGED )) && res+=" ${modified}+${VCS_STATUS_NUM_STAGED}" + # !42 if have unstaged changes. + (( VCS_STATUS_NUM_UNSTAGED )) && res+=" ${modified}!${VCS_STATUS_NUM_UNSTAGED}" + # ?42 if have untracked files. It's really a question mark, your font isn't broken. + # See POWERLEVEL9K_VCS_UNTRACKED_ICON above if you want to use a different icon. + # Remove the next line if you don't want to see untracked files at all. + (( VCS_STATUS_NUM_UNTRACKED )) && res+=" ${untracked}${(g::)POWERLEVEL9K_VCS_UNTRACKED_ICON}${VCS_STATUS_NUM_UNTRACKED}" + # "─" if the number of unstaged files is unknown. This can happen due to + # POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY (see below) being set to a non-negative number lower + # than the number of files in the Git index, or due to bash.showDirtyState being set to false + # in the repository config. The number of staged and untracked files may also be unknown + # in this case. + (( VCS_STATUS_HAS_UNSTAGED == -1 )) && res+=" ${modified}─" + + typeset -g my_git_format=$res + } + functions -M my_git_formatter 2>/dev/null + + # Don't count the number of unstaged, untracked and conflicted files in Git repositories with + # more than this many files in the index. Negative value means infinity. + # + # If you are working in Git repositories with tens of millions of files and seeing performance + # sagging, try setting POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY to a number lower than the output + # of `git ls-files | wc -l`. Alternatively, add `bash.showDirtyState = false` to the repository's + # config: `git config bash.showDirtyState false`. + typeset -g POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY=-1 + + # Don't show Git status in prompt for repositories whose workdir matches this pattern. + # For example, if set to '~', the Git repository at $HOME/.git will be ignored. + # Multiple patterns can be combined with '|': '~(|/foo)|/bar/baz/*'. + typeset -g POWERLEVEL9K_VCS_DISABLED_WORKDIR_PATTERN='~' + + # Disable the default Git status formatting. + typeset -g POWERLEVEL9K_VCS_DISABLE_GITSTATUS_FORMATTING=true + # Install our own Git status formatter. + typeset -g POWERLEVEL9K_VCS_CONTENT_EXPANSION='${$((my_git_formatter(1)))+${my_git_format}}' + typeset -g POWERLEVEL9K_VCS_LOADING_CONTENT_EXPANSION='${$((my_git_formatter(0)))+${my_git_format}}' + # Enable counters for staged, unstaged, etc. + typeset -g POWERLEVEL9K_VCS_{STAGED,UNSTAGED,UNTRACKED,CONFLICTED,COMMITS_AHEAD,COMMITS_BEHIND}_MAX_NUM=-1 + + # Icon color. + typeset -g POWERLEVEL9K_VCS_VISUAL_IDENTIFIER_COLOR=76 + typeset -g POWERLEVEL9K_VCS_LOADING_VISUAL_IDENTIFIER_COLOR=244 + # Custom icon. + typeset -g POWERLEVEL9K_VCS_VISUAL_IDENTIFIER_EXPANSION= + # Custom prefix. + # typeset -g POWERLEVEL9K_VCS_PREFIX='%246Fon ' + + # Show status of repositories of these types. You can add svn and/or hg if you are + # using them. If you do, your prompt may become slow even when your current directory + # isn't in an svn or hg reposotiry. + typeset -g POWERLEVEL9K_VCS_BACKENDS=(git) + + # These settings are used for repositories other than Git or when gitstatusd fails and + # Powerlevel10k has to fall back to using vcs_info. + typeset -g POWERLEVEL9K_VCS_CLEAN_FOREGROUND=76 + typeset -g POWERLEVEL9K_VCS_UNTRACKED_FOREGROUND=76 + typeset -g POWERLEVEL9K_VCS_MODIFIED_FOREGROUND=178 + + ##########################[ status: exit code of the last command ]########################### + # Enable OK_PIPE, ERROR_PIPE and ERROR_SIGNAL status states to allow us to enable, disable and + # style them independently from the regular OK and ERROR state. + typeset -g POWERLEVEL9K_STATUS_EXTENDED_STATES=true + + # Status on success. No content, just an icon. No need to show it if prompt_char is enabled as + # it will signify success by turning green. + typeset -g POWERLEVEL9K_STATUS_OK=true + typeset -g POWERLEVEL9K_STATUS_OK_FOREGROUND=70 + typeset -g POWERLEVEL9K_STATUS_OK_VISUAL_IDENTIFIER_EXPANSION='✔' + + # Status when some part of a pipe command fails but the overall exit status is zero. It may look + # like this: 1|0. + typeset -g POWERLEVEL9K_STATUS_OK_PIPE=true + typeset -g POWERLEVEL9K_STATUS_OK_PIPE_FOREGROUND=70 + typeset -g POWERLEVEL9K_STATUS_OK_PIPE_VISUAL_IDENTIFIER_EXPANSION='✔' + + # Status when it's just an error code (e.g., '1'). No need to show it if prompt_char is enabled as + # it will signify error by turning red. + typeset -g POWERLEVEL9K_STATUS_ERROR=true + typeset -g POWERLEVEL9K_STATUS_ERROR_FOREGROUND=160 + typeset -g POWERLEVEL9K_STATUS_ERROR_VISUAL_IDENTIFIER_EXPANSION='✘' + + # Status when the last command was terminated by a signal. + typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL=true + typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL_FOREGROUND=160 + # Use terse signal names: "INT" instead of "SIGINT(2)". + typeset -g POWERLEVEL9K_STATUS_VERBOSE_SIGNAME=false + typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL_VISUAL_IDENTIFIER_EXPANSION='✘' + + # Status when some part of a pipe command fails and the overall exit status is also non-zero. + # It may look like this: 1|0. + typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE=true + typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE_FOREGROUND=160 + typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE_VISUAL_IDENTIFIER_EXPANSION='✘' + + ###################[ command_execution_time: duration of the last command ]################### + # Show duration of the last command if takes at least this many seconds. + typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD=3 + # Show this many fractional digits. Zero means round to seconds. + typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_PRECISION=0 + # Execution time color. + typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_FOREGROUND=248 + # Duration format: 1d 2h 3m 4s. + typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_FORMAT='d h m s' + # Custom icon. + typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_VISUAL_IDENTIFIER_EXPANSION= + # Custom prefix. + # typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_PREFIX='%246Ftook ' + + #######################[ background_jobs: presence of background jobs ]####################### + # Don't show the number of background jobs. + typeset -g POWERLEVEL9K_BACKGROUND_JOBS_VERBOSE=false + # Background jobs color. + typeset -g POWERLEVEL9K_BACKGROUND_JOBS_FOREGROUND=37 + # Custom icon. + # typeset -g POWERLEVEL9K_BACKGROUND_JOBS_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #######################[ direnv: direnv status (https://direnv.net/) ]######################## + # Direnv color. + typeset -g POWERLEVEL9K_DIRENV_FOREGROUND=178 + # Custom icon. + # typeset -g POWERLEVEL9K_DIRENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###############[ asdf: asdf version manager (https://github.com/asdf-vm/asdf) ]############### + # Default asdf color. Only used to display tools for which there is no color override (see below). + # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_FOREGROUND. + typeset -g POWERLEVEL9K_ASDF_FOREGROUND=66 + + # There are four parameters that can be used to hide asdf tools. Each parameter describes + # conditions under which a tool gets hidden. Parameters can hide tools but not unhide them. If at + # least one parameter decides to hide a tool, that tool gets hidden. If no parameter decides to + # hide a tool, it gets shown. + # + # Special note on the difference between POWERLEVEL9K_ASDF_SOURCES and + # POWERLEVEL9K_ASDF_PROMPT_ALWAYS_SHOW. Consider the effect of the following commands: + # + # asdf local python 3.8.1 + # asdf global python 3.8.1 + # + # After running both commands the current python version is 3.8.1 and its source is "local" as + # it takes precedence over "global". If POWERLEVEL9K_ASDF_PROMPT_ALWAYS_SHOW is set to false, + # it'll hide python version in this case because 3.8.1 is the same as the global version. + # POWERLEVEL9K_ASDF_SOURCES will hide python version only if the value of this parameter doesn't + # contain "local". + + # Hide tool versions that don't come from one of these sources. + # + # Available sources: + # + # - shell `asdf current` says "set by ASDF_${TOOL}_VERSION environment variable" + # - local `asdf current` says "set by /some/not/home/directory/file" + # - global `asdf current` says "set by /home/username/file" + # + # Note: If this parameter is set to (shell local global), it won't hide tools. + # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_SOURCES. + typeset -g POWERLEVEL9K_ASDF_SOURCES=(shell local global) + + # If set to false, hide tool versions that are the same as global. + # + # Note: The name of this parameter doesn't reflect its meaning at all. + # Note: If this parameter is set to true, it won't hide tools. + # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_PROMPT_ALWAYS_SHOW. + typeset -g POWERLEVEL9K_ASDF_PROMPT_ALWAYS_SHOW=false + + # If set to false, hide tool versions that are equal to "system". + # + # Note: If this parameter is set to true, it won't hide tools. + # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_SHOW_SYSTEM. + typeset -g POWERLEVEL9K_ASDF_SHOW_SYSTEM=true + + # If set to non-empty value, hide tools unless there is a file matching the specified file pattern + # in the current directory, or its parent directory, or its grandparent directory, and so on. + # + # Note: If this parameter is set to empty value, it won't hide tools. + # Note: SHOW_ON_UPGLOB isn't specific to asdf. It works with all prompt segments. + # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_SHOW_ON_UPGLOB. + # + # Example: Hide nodejs version when there is no package.json and no *.js files in the current + # directory, in `..`, in `../..` and so on. + # + # typeset -g POWERLEVEL9K_ASDF_NODEJS_SHOW_ON_UPGLOB='*.js|package.json' + typeset -g POWERLEVEL9K_ASDF_SHOW_ON_UPGLOB= + + # Ruby version from asdf. + typeset -g POWERLEVEL9K_ASDF_RUBY_FOREGROUND=168 + # typeset -g POWERLEVEL9K_ASDF_RUBY_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_RUBY_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Python version from asdf. + typeset -g POWERLEVEL9K_ASDF_PYTHON_FOREGROUND=37 + # typeset -g POWERLEVEL9K_ASDF_PYTHON_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_PYTHON_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Go version from asdf. + typeset -g POWERLEVEL9K_ASDF_GOLANG_FOREGROUND=37 + # typeset -g POWERLEVEL9K_ASDF_GOLANG_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_GOLANG_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Node.js version from asdf. + typeset -g POWERLEVEL9K_ASDF_NODEJS_FOREGROUND=70 + # typeset -g POWERLEVEL9K_ASDF_NODEJS_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_NODEJS_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Rust version from asdf. + typeset -g POWERLEVEL9K_ASDF_RUST_FOREGROUND=37 + # typeset -g POWERLEVEL9K_ASDF_RUST_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_RUST_SHOW_ON_UPGLOB='*.foo|*.bar' + + # .NET Core version from asdf. + typeset -g POWERLEVEL9K_ASDF_DOTNET_CORE_FOREGROUND=134 + # typeset -g POWERLEVEL9K_ASDF_DOTNET_CORE_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_DOTNET_CORE_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Flutter version from asdf. + typeset -g POWERLEVEL9K_ASDF_FLUTTER_FOREGROUND=38 + # typeset -g POWERLEVEL9K_ASDF_FLUTTER_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_FLUTTER_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Lua version from asdf. + typeset -g POWERLEVEL9K_ASDF_LUA_FOREGROUND=32 + # typeset -g POWERLEVEL9K_ASDF_LUA_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_LUA_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Java version from asdf. + typeset -g POWERLEVEL9K_ASDF_JAVA_FOREGROUND=32 + # typeset -g POWERLEVEL9K_ASDF_JAVA_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_JAVA_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Perl version from asdf. + typeset -g POWERLEVEL9K_ASDF_PERL_FOREGROUND=67 + # typeset -g POWERLEVEL9K_ASDF_PERL_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_PERL_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Erlang version from asdf. + typeset -g POWERLEVEL9K_ASDF_ERLANG_FOREGROUND=125 + # typeset -g POWERLEVEL9K_ASDF_ERLANG_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_ERLANG_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Elixir version from asdf. + typeset -g POWERLEVEL9K_ASDF_ELIXIR_FOREGROUND=129 + # typeset -g POWERLEVEL9K_ASDF_ELIXIR_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_ELIXIR_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Postgres version from asdf. + typeset -g POWERLEVEL9K_ASDF_POSTGRES_FOREGROUND=31 + # typeset -g POWERLEVEL9K_ASDF_POSTGRES_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_POSTGRES_SHOW_ON_UPGLOB='*.foo|*.bar' + + # PHP version from asdf. + typeset -g POWERLEVEL9K_ASDF_PHP_FOREGROUND=99 + # typeset -g POWERLEVEL9K_ASDF_PHP_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_PHP_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Haskell version from asdf. + typeset -g POWERLEVEL9K_ASDF_HASKELL_FOREGROUND=172 + # typeset -g POWERLEVEL9K_ASDF_HASKELL_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_HASKELL_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Julia version from asdf. + typeset -g POWERLEVEL9K_ASDF_JULIA_FOREGROUND=70 + # typeset -g POWERLEVEL9K_ASDF_JULIA_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_JULIA_SHOW_ON_UPGLOB='*.foo|*.bar' + + ##########[ nordvpn: nordvpn connection status, linux only (https://nordvpn.com/) ]########### + # NordVPN connection indicator color. + typeset -g POWERLEVEL9K_NORDVPN_FOREGROUND=39 + # Hide NordVPN connection indicator when not connected. + typeset -g POWERLEVEL9K_NORDVPN_{DISCONNECTED,CONNECTING,DISCONNECTING}_CONTENT_EXPANSION= + typeset -g POWERLEVEL9K_NORDVPN_{DISCONNECTED,CONNECTING,DISCONNECTING}_VISUAL_IDENTIFIER_EXPANSION= + # Custom icon. + # typeset -g POWERLEVEL9K_NORDVPN_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #################[ ranger: ranger shell (https://github.com/ranger/ranger) ]################## + # Ranger shell color. + typeset -g POWERLEVEL9K_RANGER_FOREGROUND=178 + # Custom icon. + # typeset -g POWERLEVEL9K_RANGER_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ####################[ yazi: yazi shell (https://github.com/sxyazi/yazi) ]##################### + # Yazi shell color. + typeset -g POWERLEVEL9K_YAZI_FOREGROUND=178 + # Custom icon. + # typeset -g POWERLEVEL9K_YAZI_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ######################[ nnn: nnn shell (https://github.com/jarun/nnn) ]####################### + # Nnn shell color. + typeset -g POWERLEVEL9K_NNN_FOREGROUND=72 + # Custom icon. + # typeset -g POWERLEVEL9K_NNN_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ######################[ lf: lf shell (https://github.com/gokcehan/lf) ]####################### + # lf shell color. + typeset -g POWERLEVEL9K_LF_FOREGROUND=72 + # Custom icon. + # typeset -g POWERLEVEL9K_LF_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##################[ xplr: xplr shell (https://github.com/sayanarijit/xplr) ]################## + # xplr shell color. + typeset -g POWERLEVEL9K_XPLR_FOREGROUND=72 + # Custom icon. + # typeset -g POWERLEVEL9K_XPLR_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###########################[ vim_shell: vim shell indicator (:sh) ]########################### + # Vim shell indicator color. + typeset -g POWERLEVEL9K_VIM_SHELL_FOREGROUND=34 + # Custom icon. + # typeset -g POWERLEVEL9K_VIM_SHELL_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ######[ midnight_commander: midnight commander shell (https://midnight-commander.org/) ]###### + # Midnight Commander shell color. + typeset -g POWERLEVEL9K_MIDNIGHT_COMMANDER_FOREGROUND=178 + # Custom icon. + # typeset -g POWERLEVEL9K_MIDNIGHT_COMMANDER_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #[ nix_shell: nix shell (https://nixos.org/nixos/nix-pills/developing-with-nix-shell.html) ]## + # Nix shell color. + typeset -g POWERLEVEL9K_NIX_SHELL_FOREGROUND=74 + + # Display the icon of nix_shell if PATH contains a subdirectory of /nix/store. + # typeset -g POWERLEVEL9K_NIX_SHELL_INFER_FROM_PATH=false + + # Tip: If you want to see just the icon without "pure" and "impure", uncomment the next line. + # typeset -g POWERLEVEL9K_NIX_SHELL_CONTENT_EXPANSION= + + # Custom icon. + # typeset -g POWERLEVEL9K_NIX_SHELL_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##################[ chezmoi_shell: chezmoi shell (https://www.chezmoi.io/) ]################## + # chezmoi shell color. + typeset -g POWERLEVEL9K_CHEZMOI_SHELL_FOREGROUND=33 + # Custom icon. + # typeset -g POWERLEVEL9K_CHEZMOI_SHELL_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##################################[ disk_usage: disk usage ]################################## + # Colors for different levels of disk usage. + typeset -g POWERLEVEL9K_DISK_USAGE_NORMAL_FOREGROUND=35 + typeset -g POWERLEVEL9K_DISK_USAGE_WARNING_FOREGROUND=220 + typeset -g POWERLEVEL9K_DISK_USAGE_CRITICAL_FOREGROUND=160 + # Thresholds for different levels of disk usage (percentage points). + typeset -g POWERLEVEL9K_DISK_USAGE_WARNING_LEVEL=90 + typeset -g POWERLEVEL9K_DISK_USAGE_CRITICAL_LEVEL=95 + # If set to true, hide disk usage when below $POWERLEVEL9K_DISK_USAGE_WARNING_LEVEL percent. + typeset -g POWERLEVEL9K_DISK_USAGE_ONLY_WARNING=false + # Custom icon. + # typeset -g POWERLEVEL9K_DISK_USAGE_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###########[ vi_mode: vi mode (you don't need this if you've enabled prompt_char) ]########### + # Text and color for normal (a.k.a. command) vi mode. + typeset -g POWERLEVEL9K_VI_COMMAND_MODE_STRING=NORMAL + typeset -g POWERLEVEL9K_VI_MODE_NORMAL_FOREGROUND=106 + # Text and color for visual vi mode. + typeset -g POWERLEVEL9K_VI_VISUAL_MODE_STRING=VISUAL + typeset -g POWERLEVEL9K_VI_MODE_VISUAL_FOREGROUND=68 + # Text and color for overtype (a.k.a. overwrite and replace) vi mode. + typeset -g POWERLEVEL9K_VI_OVERWRITE_MODE_STRING=OVERTYPE + typeset -g POWERLEVEL9K_VI_MODE_OVERWRITE_FOREGROUND=172 + # Text and color for insert vi mode. + typeset -g POWERLEVEL9K_VI_INSERT_MODE_STRING= + typeset -g POWERLEVEL9K_VI_MODE_INSERT_FOREGROUND=66 + # Custom icon. + # typeset -g POWERLEVEL9K_VI_MODE_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ######################################[ ram: free RAM ]####################################### + # RAM color. + typeset -g POWERLEVEL9K_RAM_FOREGROUND=66 + # Custom icon. + # typeset -g POWERLEVEL9K_RAM_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #####################################[ swap: used swap ]###################################### + # Swap color. + typeset -g POWERLEVEL9K_SWAP_FOREGROUND=96 + # Custom icon. + # typeset -g POWERLEVEL9K_SWAP_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ######################################[ load: CPU load ]###################################### + # Show average CPU load over this many last minutes. Valid values are 1, 5 and 15. + typeset -g POWERLEVEL9K_LOAD_WHICH=5 + # Load color when load is under 50%. + typeset -g POWERLEVEL9K_LOAD_NORMAL_FOREGROUND=66 + # Load color when load is between 50% and 70%. + typeset -g POWERLEVEL9K_LOAD_WARNING_FOREGROUND=178 + # Load color when load is over 70%. + typeset -g POWERLEVEL9K_LOAD_CRITICAL_FOREGROUND=166 + # Custom icon. + # typeset -g POWERLEVEL9K_LOAD_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ################[ todo: todo items (https://github.com/todotxt/todo.txt-cli) ]################ + # Todo color. + typeset -g POWERLEVEL9K_TODO_FOREGROUND=110 + # Hide todo when the total number of tasks is zero. + typeset -g POWERLEVEL9K_TODO_HIDE_ZERO_TOTAL=true + # Hide todo when the number of tasks after filtering is zero. + typeset -g POWERLEVEL9K_TODO_HIDE_ZERO_FILTERED=false + + # Todo format. The following parameters are available within the expansion. + # + # - P9K_TODO_TOTAL_TASK_COUNT The total number of tasks. + # - P9K_TODO_FILTERED_TASK_COUNT The number of tasks after filtering. + # + # These variables correspond to the last line of the output of `todo.sh -p ls`: + # + # TODO: 24 of 42 tasks shown + # + # Here 24 is P9K_TODO_FILTERED_TASK_COUNT and 42 is P9K_TODO_TOTAL_TASK_COUNT. + # + # typeset -g POWERLEVEL9K_TODO_CONTENT_EXPANSION='$P9K_TODO_FILTERED_TASK_COUNT' + + # Custom icon. + # typeset -g POWERLEVEL9K_TODO_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###########[ timewarrior: timewarrior tracking status (https://timewarrior.net/) ]############ + # Timewarrior color. + typeset -g POWERLEVEL9K_TIMEWARRIOR_FOREGROUND=110 + # If the tracked task is longer than 24 characters, truncate and append "…". + # Tip: To always display tasks without truncation, delete the following parameter. + # Tip: To hide task names and display just the icon when time tracking is enabled, set the + # value of the following parameter to "". + typeset -g POWERLEVEL9K_TIMEWARRIOR_CONTENT_EXPANSION='${P9K_CONTENT:0:24}${${P9K_CONTENT:24}:+…}' + + # Custom icon. + # typeset -g POWERLEVEL9K_TIMEWARRIOR_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##############[ taskwarrior: taskwarrior task count (https://taskwarrior.org/) ]############## + # Taskwarrior color. + typeset -g POWERLEVEL9K_TASKWARRIOR_FOREGROUND=74 + + # Taskwarrior segment format. The following parameters are available within the expansion. + # + # - P9K_TASKWARRIOR_PENDING_COUNT The number of pending tasks: `task +PENDING count`. + # - P9K_TASKWARRIOR_OVERDUE_COUNT The number of overdue tasks: `task +OVERDUE count`. + # + # Zero values are represented as empty parameters. + # + # The default format: + # + # '${P9K_TASKWARRIOR_OVERDUE_COUNT:+"!$P9K_TASKWARRIOR_OVERDUE_COUNT/"}$P9K_TASKWARRIOR_PENDING_COUNT' + # + # typeset -g POWERLEVEL9K_TASKWARRIOR_CONTENT_EXPANSION='$P9K_TASKWARRIOR_PENDING_COUNT' + + # Custom icon. + # typeset -g POWERLEVEL9K_TASKWARRIOR_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ######[ per_directory_history: Oh My Zsh per-directory-history local/global indicator ]####### + # Color when using local/global history. + typeset -g POWERLEVEL9K_PER_DIRECTORY_HISTORY_LOCAL_FOREGROUND=135 + typeset -g POWERLEVEL9K_PER_DIRECTORY_HISTORY_GLOBAL_FOREGROUND=130 + + # Tip: Uncomment the next two lines to hide "local"/"global" text and leave just the icon. + # typeset -g POWERLEVEL9K_PER_DIRECTORY_HISTORY_LOCAL_CONTENT_EXPANSION='' + # typeset -g POWERLEVEL9K_PER_DIRECTORY_HISTORY_GLOBAL_CONTENT_EXPANSION='' + + # Custom icon. + # typeset -g POWERLEVEL9K_PER_DIRECTORY_HISTORY_LOCAL_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_PER_DIRECTORY_HISTORY_GLOBAL_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ################################[ cpu_arch: CPU architecture ]################################ + # CPU architecture color. + typeset -g POWERLEVEL9K_CPU_ARCH_FOREGROUND=172 + + # Hide the segment when on a specific CPU architecture. + # typeset -g POWERLEVEL9K_CPU_ARCH_X86_64_CONTENT_EXPANSION= + # typeset -g POWERLEVEL9K_CPU_ARCH_X86_64_VISUAL_IDENTIFIER_EXPANSION= + + # Custom icon. + # typeset -g POWERLEVEL9K_CPU_ARCH_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##################################[ context: user@hostname ]################################## + # Context color when running with privileges. + typeset -g POWERLEVEL9K_CONTEXT_ROOT_FOREGROUND=178 + # Context color in SSH without privileges. + typeset -g POWERLEVEL9K_CONTEXT_{REMOTE,REMOTE_SUDO}_FOREGROUND=180 + # Default context color (no privileges, no SSH). + typeset -g POWERLEVEL9K_CONTEXT_FOREGROUND=180 + + # Context format when running with privileges: bold user@hostname. + typeset -g POWERLEVEL9K_CONTEXT_ROOT_TEMPLATE='%B%n@%m' + # Context format when in SSH without privileges: user@hostname. + typeset -g POWERLEVEL9K_CONTEXT_{REMOTE,REMOTE_SUDO}_TEMPLATE='%n@%m' + # Default context format (no privileges, no SSH): user@hostname. + typeset -g POWERLEVEL9K_CONTEXT_TEMPLATE='%n@%m' + + # Don't show context unless running with privileges or in SSH. + # Tip: Remove the next line to always show context. + #typeset -g POWERLEVEL9K_CONTEXT_{DEFAULT,SUDO}_{CONTENT,VISUAL_IDENTIFIER}_EXPANSION= + + # Custom icon. + # typeset -g POWERLEVEL9K_CONTEXT_VISUAL_IDENTIFIER_EXPANSION='⭐' + # Custom prefix. + # typeset -g POWERLEVEL9K_CONTEXT_PREFIX='%246Fwith ' + + ###[ virtualenv: python virtual environment (https://docs.python.org/3/library/venv.html) ]### + # Python virtual environment color. + typeset -g POWERLEVEL9K_VIRTUALENV_FOREGROUND=37 + # Don't show Python version next to the virtual environment name. + typeset -g POWERLEVEL9K_VIRTUALENV_SHOW_PYTHON_VERSION=false + # If set to "false", won't show virtualenv if pyenv is already shown. + # If set to "if-different", won't show virtualenv if it's the same as pyenv. + typeset -g POWERLEVEL9K_VIRTUALENV_SHOW_WITH_PYENV=false + # Separate environment name from Python version only with a space. + typeset -g POWERLEVEL9K_VIRTUALENV_{LEFT,RIGHT}_DELIMITER= + # Custom icon. + # typeset -g POWERLEVEL9K_VIRTUALENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #####################[ anaconda: conda environment (https://conda.io/) ]###################### + # Anaconda environment color. + typeset -g POWERLEVEL9K_ANACONDA_FOREGROUND=37 + + # Anaconda segment format. The following parameters are available within the expansion. + # + # - CONDA_PREFIX Absolute path to the active Anaconda/Miniconda environment. + # - CONDA_DEFAULT_ENV Name of the active Anaconda/Miniconda environment. + # - CONDA_PROMPT_MODIFIER Configurable prompt modifier (see below). + # - P9K_ANACONDA_PYTHON_VERSION Current python version (python --version). + # + # CONDA_PROMPT_MODIFIER can be configured with the following command: + # + # conda config --set env_prompt '({default_env}) ' + # + # The last argument is a Python format string that can use the following variables: + # + # - prefix The same as CONDA_PREFIX. + # - default_env The same as CONDA_DEFAULT_ENV. + # - name The last segment of CONDA_PREFIX. + # - stacked_env Comma-separated list of names in the environment stack. The first element is + # always the same as default_env. + # + # Note: '({default_env}) ' is the default value of env_prompt. + # + # The default value of POWERLEVEL9K_ANACONDA_CONTENT_EXPANSION expands to $CONDA_PROMPT_MODIFIER + # without the surrounding parentheses, or to the last path component of CONDA_PREFIX if the former + # is empty. + typeset -g POWERLEVEL9K_ANACONDA_CONTENT_EXPANSION='${${${${CONDA_PROMPT_MODIFIER#\(}% }%\)}:-${CONDA_PREFIX:t}}' + + # Custom icon. + # typeset -g POWERLEVEL9K_ANACONDA_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ################[ pyenv: python environment (https://github.com/pyenv/pyenv) ]################ + # Pyenv color. + typeset -g POWERLEVEL9K_PYENV_FOREGROUND=37 + # Hide python version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_PYENV_SOURCES=(shell local global) + # If set to false, hide python version if it's the same as global: + # $(pyenv version-name) == $(pyenv global). + typeset -g POWERLEVEL9K_PYENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide python version if it's equal to "system". + typeset -g POWERLEVEL9K_PYENV_SHOW_SYSTEM=true + + # Pyenv segment format. The following parameters are available within the expansion. + # + # - P9K_CONTENT Current pyenv environment (pyenv version-name). + # - P9K_PYENV_PYTHON_VERSION Current python version (python --version). + # + # The default format has the following logic: + # + # 1. Display just "$P9K_CONTENT" if it's equal to "$P9K_PYENV_PYTHON_VERSION" or + # starts with "$P9K_PYENV_PYTHON_VERSION/". + # 2. Otherwise display "$P9K_CONTENT $P9K_PYENV_PYTHON_VERSION". + typeset -g POWERLEVEL9K_PYENV_CONTENT_EXPANSION='${P9K_CONTENT}${${P9K_CONTENT:#$P9K_PYENV_PYTHON_VERSION(|/*)}:+ $P9K_PYENV_PYTHON_VERSION}' + + # Custom icon. + # typeset -g POWERLEVEL9K_PYENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ################[ goenv: go environment (https://github.com/syndbg/goenv) ]################ + # Goenv color. + typeset -g POWERLEVEL9K_GOENV_FOREGROUND=37 + # Hide go version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_GOENV_SOURCES=(shell local global) + # If set to false, hide go version if it's the same as global: + # $(goenv version-name) == $(goenv global). + typeset -g POWERLEVEL9K_GOENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide go version if it's equal to "system". + typeset -g POWERLEVEL9K_GOENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_GOENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##########[ nodenv: node.js version from nodenv (https://github.com/nodenv/nodenv) ]########## + # Nodenv color. + typeset -g POWERLEVEL9K_NODENV_FOREGROUND=70 + # Hide node version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_NODENV_SOURCES=(shell local global) + # If set to false, hide node version if it's the same as global: + # $(nodenv version-name) == $(nodenv global). + typeset -g POWERLEVEL9K_NODENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide node version if it's equal to "system". + typeset -g POWERLEVEL9K_NODENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_NODENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##############[ nvm: node.js version from nvm (https://github.com/nvm-sh/nvm) ]############### + # Nvm color. + typeset -g POWERLEVEL9K_NVM_FOREGROUND=70 + # If set to false, hide node version if it's the same as default: + # $(nvm version current) == $(nvm version default). + typeset -g POWERLEVEL9K_NVM_PROMPT_ALWAYS_SHOW=false + # If set to false, hide node version if it's equal to "system". + typeset -g POWERLEVEL9K_NVM_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_NVM_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ############[ nodeenv: node.js environment (https://github.com/ekalinin/nodeenv) ]############ + # Nodeenv color. + typeset -g POWERLEVEL9K_NODEENV_FOREGROUND=70 + # Don't show Node version next to the environment name. + typeset -g POWERLEVEL9K_NODEENV_SHOW_NODE_VERSION=false + # Separate environment name from Node version only with a space. + typeset -g POWERLEVEL9K_NODEENV_{LEFT,RIGHT}_DELIMITER= + # Custom icon. + # typeset -g POWERLEVEL9K_NODEENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##############################[ node_version: node.js version ]############################### + # Node version color. + typeset -g POWERLEVEL9K_NODE_VERSION_FOREGROUND=70 + # Show node version only when in a directory tree containing package.json. + typeset -g POWERLEVEL9K_NODE_VERSION_PROJECT_ONLY=true + # Custom icon. + # typeset -g POWERLEVEL9K_NODE_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #######################[ go_version: go version (https://golang.org) ]######################## + # Go version color. + typeset -g POWERLEVEL9K_GO_VERSION_FOREGROUND=37 + # Show go version only when in a go project subdirectory. + typeset -g POWERLEVEL9K_GO_VERSION_PROJECT_ONLY=true + # Custom icon. + # typeset -g POWERLEVEL9K_GO_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #################[ rust_version: rustc version (https://www.rust-lang.org) ]################## + # Rust version color. + typeset -g POWERLEVEL9K_RUST_VERSION_FOREGROUND=37 + # Show rust version only when in a rust project subdirectory. + typeset -g POWERLEVEL9K_RUST_VERSION_PROJECT_ONLY=true + # Custom icon. + # typeset -g POWERLEVEL9K_RUST_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###############[ dotnet_version: .NET version (https://dotnet.microsoft.com) ]################ + # .NET version color. + typeset -g POWERLEVEL9K_DOTNET_VERSION_FOREGROUND=134 + # Show .NET version only when in a .NET project subdirectory. + typeset -g POWERLEVEL9K_DOTNET_VERSION_PROJECT_ONLY=true + # Custom icon. + # typeset -g POWERLEVEL9K_DOTNET_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #####################[ php_version: php version (https://www.php.net/) ]###################### + # PHP version color. + typeset -g POWERLEVEL9K_PHP_VERSION_FOREGROUND=99 + # Show PHP version only when in a PHP project subdirectory. + typeset -g POWERLEVEL9K_PHP_VERSION_PROJECT_ONLY=true + # Custom icon. + # typeset -g POWERLEVEL9K_PHP_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##########[ laravel_version: laravel php framework version (https://laravel.com/) ]########### + # Laravel version color. + typeset -g POWERLEVEL9K_LARAVEL_VERSION_FOREGROUND=161 + # Custom icon. + # typeset -g POWERLEVEL9K_LARAVEL_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ####################[ java_version: java version (https://www.java.com/) ]#################### + # Java version color. + typeset -g POWERLEVEL9K_JAVA_VERSION_FOREGROUND=32 + # Show java version only when in a java project subdirectory. + typeset -g POWERLEVEL9K_JAVA_VERSION_PROJECT_ONLY=true + # Show brief version. + typeset -g POWERLEVEL9K_JAVA_VERSION_FULL=false + # Custom icon. + # typeset -g POWERLEVEL9K_JAVA_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###[ package: name@version from package.json (https://docs.npmjs.com/files/package.json) ]#### + # Package color. + typeset -g POWERLEVEL9K_PACKAGE_FOREGROUND=117 + # Package format. The following parameters are available within the expansion. + # + # - P9K_PACKAGE_NAME The value of `name` field in package.json. + # - P9K_PACKAGE_VERSION The value of `version` field in package.json. + # + # typeset -g POWERLEVEL9K_PACKAGE_CONTENT_EXPANSION='${P9K_PACKAGE_NAME//\%/%%}@${P9K_PACKAGE_VERSION//\%/%%}' + # Custom icon. + # typeset -g POWERLEVEL9K_PACKAGE_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #############[ rbenv: ruby version from rbenv (https://github.com/rbenv/rbenv) ]############## + # Rbenv color. + typeset -g POWERLEVEL9K_RBENV_FOREGROUND=168 + # Hide ruby version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_RBENV_SOURCES=(shell local global) + # If set to false, hide ruby version if it's the same as global: + # $(rbenv version-name) == $(rbenv global). + typeset -g POWERLEVEL9K_RBENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide ruby version if it's equal to "system". + typeset -g POWERLEVEL9K_RBENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_RBENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #######################[ rvm: ruby version from rvm (https://rvm.io) ]######################## + # Rvm color. + typeset -g POWERLEVEL9K_RVM_FOREGROUND=168 + # Don't show @gemset at the end. + typeset -g POWERLEVEL9K_RVM_SHOW_GEMSET=false + # Don't show ruby- at the front. + typeset -g POWERLEVEL9K_RVM_SHOW_PREFIX=false + # Custom icon. + # typeset -g POWERLEVEL9K_RVM_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###########[ fvm: flutter version management (https://github.com/leoafarias/fvm) ]############ + # Fvm color. + typeset -g POWERLEVEL9K_FVM_FOREGROUND=38 + # Custom icon. + # typeset -g POWERLEVEL9K_FVM_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##########[ luaenv: lua version from luaenv (https://github.com/cehoffman/luaenv) ]########### + # Lua color. + typeset -g POWERLEVEL9K_LUAENV_FOREGROUND=32 + # Hide lua version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_LUAENV_SOURCES=(shell local global) + # If set to false, hide lua version if it's the same as global: + # $(luaenv version-name) == $(luaenv global). + typeset -g POWERLEVEL9K_LUAENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide lua version if it's equal to "system". + typeset -g POWERLEVEL9K_LUAENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_LUAENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###############[ jenv: java version from jenv (https://github.com/jenv/jenv) ]################ + # Java color. + typeset -g POWERLEVEL9K_JENV_FOREGROUND=32 + # Hide java version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_JENV_SOURCES=(shell local global) + # If set to false, hide java version if it's the same as global: + # $(jenv version-name) == $(jenv global). + typeset -g POWERLEVEL9K_JENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide java version if it's equal to "system". + typeset -g POWERLEVEL9K_JENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_JENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###########[ plenv: perl version from plenv (https://github.com/tokuhirom/plenv) ]############ + # Perl color. + typeset -g POWERLEVEL9K_PLENV_FOREGROUND=67 + # Hide perl version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_PLENV_SOURCES=(shell local global) + # If set to false, hide perl version if it's the same as global: + # $(plenv version-name) == $(plenv global). + typeset -g POWERLEVEL9K_PLENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide perl version if it's equal to "system". + typeset -g POWERLEVEL9K_PLENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_PLENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###########[ perlbrew: perl version from perlbrew (https://github.com/gugod/App-perlbrew) ]############ + # Perlbrew color. + typeset -g POWERLEVEL9K_PERLBREW_FOREGROUND=67 + # Show perlbrew version only when in a perl project subdirectory. + typeset -g POWERLEVEL9K_PERLBREW_PROJECT_ONLY=true + # Don't show "perl-" at the front. + typeset -g POWERLEVEL9K_PERLBREW_SHOW_PREFIX=false + # Custom icon. + # typeset -g POWERLEVEL9K_PERLBREW_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ############[ phpenv: php version from phpenv (https://github.com/phpenv/phpenv) ]############ + # PHP color. + typeset -g POWERLEVEL9K_PHPENV_FOREGROUND=99 + # Hide php version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_PHPENV_SOURCES=(shell local global) + # If set to false, hide php version if it's the same as global: + # $(phpenv version-name) == $(phpenv global). + typeset -g POWERLEVEL9K_PHPENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide php version if it's equal to "system". + typeset -g POWERLEVEL9K_PHPENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_PHPENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #######[ scalaenv: scala version from scalaenv (https://github.com/scalaenv/scalaenv) ]####### + # Scala color. + typeset -g POWERLEVEL9K_SCALAENV_FOREGROUND=160 + # Hide scala version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_SCALAENV_SOURCES=(shell local global) + # If set to false, hide scala version if it's the same as global: + # $(scalaenv version-name) == $(scalaenv global). + typeset -g POWERLEVEL9K_SCALAENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide scala version if it's equal to "system". + typeset -g POWERLEVEL9K_SCALAENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_SCALAENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##########[ haskell_stack: haskell version from stack (https://haskellstack.org/) ]########### + # Haskell color. + typeset -g POWERLEVEL9K_HASKELL_STACK_FOREGROUND=172 + # Hide haskell version if it doesn't come from one of these sources. + # + # shell: version is set by STACK_YAML + # local: version is set by stack.yaml up the directory tree + # global: version is set by the implicit global project (~/.stack/global-project/stack.yaml) + typeset -g POWERLEVEL9K_HASKELL_STACK_SOURCES=(shell local) + # If set to false, hide haskell version if it's the same as in the implicit global project. + typeset -g POWERLEVEL9K_HASKELL_STACK_ALWAYS_SHOW=true + # Custom icon. + # typeset -g POWERLEVEL9K_HASKELL_STACK_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ################[ terraform: terraform workspace (https://www.terraform.io) ]################# + # Don't show terraform workspace if it's literally "default". + typeset -g POWERLEVEL9K_TERRAFORM_SHOW_DEFAULT=false + # POWERLEVEL9K_TERRAFORM_CLASSES is an array with even number of elements. The first element + # in each pair defines a pattern against which the current terraform workspace gets matched. + # More specifically, it's P9K_CONTENT prior to the application of context expansion (see below) + # that gets matched. If you unset all POWERLEVEL9K_TERRAFORM_*CONTENT_EXPANSION parameters, + # you'll see this value in your prompt. The second element of each pair in + # POWERLEVEL9K_TERRAFORM_CLASSES defines the workspace class. Patterns are tried in order. The + # first match wins. + # + # For example, given these settings: + # + # typeset -g POWERLEVEL9K_TERRAFORM_CLASSES=( + # '*prod*' PROD + # '*test*' TEST + # '*' OTHER) + # + # If your current terraform workspace is "project_test", its class is TEST because "project_test" + # doesn't match the pattern '*prod*' but does match '*test*'. + # + # You can define different colors, icons and content expansions for different classes: + # + # typeset -g POWERLEVEL9K_TERRAFORM_TEST_FOREGROUND=28 + # typeset -g POWERLEVEL9K_TERRAFORM_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_TERRAFORM_TEST_CONTENT_EXPANSION='> ${P9K_CONTENT} <' + typeset -g POWERLEVEL9K_TERRAFORM_CLASSES=( + # '*prod*' PROD # These values are examples that are unlikely + # '*test*' TEST # to match your needs. Customize them as needed. + '*' OTHER) + typeset -g POWERLEVEL9K_TERRAFORM_OTHER_FOREGROUND=38 + # typeset -g POWERLEVEL9K_TERRAFORM_OTHER_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #############[ terraform_version: terraform version (https://www.terraform.io) ]############## + # Terraform version color. + typeset -g POWERLEVEL9K_TERRAFORM_VERSION_FOREGROUND=38 + # Custom icon. + # typeset -g POWERLEVEL9K_TERRAFORM_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #############[ kubecontext: current kubernetes context (https://kubernetes.io/) ]############# + # Show kubecontext only when the command you are typing invokes one of these tools. + # Tip: Remove the next line to always show kubecontext. + typeset -g POWERLEVEL9K_KUBECONTEXT_SHOW_ON_COMMAND='kubectl|helm|kubens|kubectx|oc|istioctl|kogito|k9s|helmfile|flux|fluxctl|stern|kubeseal|skaffold|kubent|kubecolor|cmctl|sparkctl' + + # Kubernetes context classes for the purpose of using different colors, icons and expansions with + # different contexts. + # + # POWERLEVEL9K_KUBECONTEXT_CLASSES is an array with even number of elements. The first element + # in each pair defines a pattern against which the current kubernetes context gets matched. + # More specifically, it's P9K_CONTENT prior to the application of context expansion (see below) + # that gets matched. If you unset all POWERLEVEL9K_KUBECONTEXT_*CONTENT_EXPANSION parameters, + # you'll see this value in your prompt. The second element of each pair in + # POWERLEVEL9K_KUBECONTEXT_CLASSES defines the context class. Patterns are tried in order. The + # first match wins. + # + # For example, given these settings: + # + # typeset -g POWERLEVEL9K_KUBECONTEXT_CLASSES=( + # '*prod*' PROD + # '*test*' TEST + # '*' DEFAULT) + # + # If your current kubernetes context is "deathray-testing/default", its class is TEST + # because "deathray-testing/default" doesn't match the pattern '*prod*' but does match '*test*'. + # + # You can define different colors, icons and content expansions for different classes: + # + # typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_FOREGROUND=28 + # typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_CONTENT_EXPANSION='> ${P9K_CONTENT} <' + typeset -g POWERLEVEL9K_KUBECONTEXT_CLASSES=( + # '*prod*' PROD # These values are examples that are unlikely + # '*test*' TEST # to match your needs. Customize them as needed. + '*' DEFAULT) + typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_FOREGROUND=134 + # typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_VISUAL_IDENTIFIER_EXPANSION='⭐' + + # Use POWERLEVEL9K_KUBECONTEXT_CONTENT_EXPANSION to specify the content displayed by kubecontext + # segment. Parameter expansions are very flexible and fast, too. See reference: + # http://zsh.sourceforge.net/Doc/Release/Expansion.html#Parameter-Expansion. + # + # Within the expansion the following parameters are always available: + # + # - P9K_CONTENT The content that would've been displayed if there was no content + # expansion defined. + # - P9K_KUBECONTEXT_NAME The current context's name. Corresponds to column NAME in the + # output of `kubectl config get-contexts`. + # - P9K_KUBECONTEXT_CLUSTER The current context's cluster. Corresponds to column CLUSTER in the + # output of `kubectl config get-contexts`. + # - P9K_KUBECONTEXT_NAMESPACE The current context's namespace. Corresponds to column NAMESPACE + # in the output of `kubectl config get-contexts`. If there is no + # namespace, the parameter is set to "default". + # - P9K_KUBECONTEXT_USER The current context's user. Corresponds to column AUTHINFO in the + # output of `kubectl config get-contexts`. + # + # If the context points to Google Kubernetes Engine (GKE) or Elastic Kubernetes Service (EKS), + # the following extra parameters are available: + # + # - P9K_KUBECONTEXT_CLOUD_NAME Either "gke" or "eks". + # - P9K_KUBECONTEXT_CLOUD_ACCOUNT Account/project ID. + # - P9K_KUBECONTEXT_CLOUD_ZONE Availability zone. + # - P9K_KUBECONTEXT_CLOUD_CLUSTER Cluster. + # + # P9K_KUBECONTEXT_CLOUD_* parameters are derived from P9K_KUBECONTEXT_CLUSTER. For example, + # if P9K_KUBECONTEXT_CLUSTER is "gke_my-account_us-east1-a_my-cluster-01": + # + # - P9K_KUBECONTEXT_CLOUD_NAME=gke + # - P9K_KUBECONTEXT_CLOUD_ACCOUNT=my-account + # - P9K_KUBECONTEXT_CLOUD_ZONE=us-east1-a + # - P9K_KUBECONTEXT_CLOUD_CLUSTER=my-cluster-01 + # + # If P9K_KUBECONTEXT_CLUSTER is "arn:aws:eks:us-east-1:123456789012:cluster/my-cluster-01": + # + # - P9K_KUBECONTEXT_CLOUD_NAME=eks + # - P9K_KUBECONTEXT_CLOUD_ACCOUNT=123456789012 + # - P9K_KUBECONTEXT_CLOUD_ZONE=us-east-1 + # - P9K_KUBECONTEXT_CLOUD_CLUSTER=my-cluster-01 + typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION= + # Show P9K_KUBECONTEXT_CLOUD_CLUSTER if it's not empty and fall back to P9K_KUBECONTEXT_NAME. + POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION+='${P9K_KUBECONTEXT_CLOUD_CLUSTER:-${P9K_KUBECONTEXT_NAME}}' + # Append the current context's namespace if it's not "default". + POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION+='${${:-/$P9K_KUBECONTEXT_NAMESPACE}:#/default}' + + # Custom prefix. + # typeset -g POWERLEVEL9K_KUBECONTEXT_PREFIX='%246Fat ' + + #[ aws: aws profile (https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html) ]# + # Show aws only when the command you are typing invokes one of these tools. + # Tip: Remove the next line to always show aws. + typeset -g POWERLEVEL9K_AWS_SHOW_ON_COMMAND='aws|awless|cdk|terraform|pulumi|terragrunt' + + # POWERLEVEL9K_AWS_CLASSES is an array with even number of elements. The first element + # in each pair defines a pattern against which the current AWS profile gets matched. + # More specifically, it's P9K_CONTENT prior to the application of context expansion (see below) + # that gets matched. If you unset all POWERLEVEL9K_AWS_*CONTENT_EXPANSION parameters, + # you'll see this value in your prompt. The second element of each pair in + # POWERLEVEL9K_AWS_CLASSES defines the profile class. Patterns are tried in order. The + # first match wins. + # + # For example, given these settings: + # + # typeset -g POWERLEVEL9K_AWS_CLASSES=( + # '*prod*' PROD + # '*test*' TEST + # '*' DEFAULT) + # + # If your current AWS profile is "company_test", its class is TEST + # because "company_test" doesn't match the pattern '*prod*' but does match '*test*'. + # + # You can define different colors, icons and content expansions for different classes: + # + # typeset -g POWERLEVEL9K_AWS_TEST_FOREGROUND=28 + # typeset -g POWERLEVEL9K_AWS_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_AWS_TEST_CONTENT_EXPANSION='> ${P9K_CONTENT} <' + typeset -g POWERLEVEL9K_AWS_CLASSES=( + # '*prod*' PROD # These values are examples that are unlikely + # '*test*' TEST # to match your needs. Customize them as needed. + '*' DEFAULT) + typeset -g POWERLEVEL9K_AWS_DEFAULT_FOREGROUND=208 + # typeset -g POWERLEVEL9K_AWS_DEFAULT_VISUAL_IDENTIFIER_EXPANSION='⭐' + + # AWS segment format. The following parameters are available within the expansion. + # + # - P9K_AWS_PROFILE The name of the current AWS profile. + # - P9K_AWS_REGION The region associated with the current AWS profile. + typeset -g POWERLEVEL9K_AWS_CONTENT_EXPANSION='${P9K_AWS_PROFILE//\%/%%}${P9K_AWS_REGION:+ ${P9K_AWS_REGION//\%/%%}}' + + #[ aws_eb_env: aws elastic beanstalk environment (https://aws.amazon.com/elasticbeanstalk/) ]# + # AWS Elastic Beanstalk environment color. + typeset -g POWERLEVEL9K_AWS_EB_ENV_FOREGROUND=70 + # Custom icon. + # typeset -g POWERLEVEL9K_AWS_EB_ENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##########[ azure: azure account name (https://docs.microsoft.com/en-us/cli/azure) ]########## + # Show azure only when the command you are typing invokes one of these tools. + # Tip: Remove the next line to always show azure. + typeset -g POWERLEVEL9K_AZURE_SHOW_ON_COMMAND='az|terraform|pulumi|terragrunt' + + # POWERLEVEL9K_AZURE_CLASSES is an array with even number of elements. The first element + # in each pair defines a pattern against which the current azure account name gets matched. + # More specifically, it's P9K_CONTENT prior to the application of context expansion (see below) + # that gets matched. If you unset all POWERLEVEL9K_AZURE_*CONTENT_EXPANSION parameters, + # you'll see this value in your prompt. The second element of each pair in + # POWERLEVEL9K_AZURE_CLASSES defines the account class. Patterns are tried in order. The + # first match wins. + # + # For example, given these settings: + # + # typeset -g POWERLEVEL9K_AZURE_CLASSES=( + # '*prod*' PROD + # '*test*' TEST + # '*' OTHER) + # + # If your current azure account is "company_test", its class is TEST because "company_test" + # doesn't match the pattern '*prod*' but does match '*test*'. + # + # You can define different colors, icons and content expansions for different classes: + # + # typeset -g POWERLEVEL9K_AZURE_TEST_FOREGROUND=28 + # typeset -g POWERLEVEL9K_AZURE_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_AZURE_TEST_CONTENT_EXPANSION='> ${P9K_CONTENT} <' + typeset -g POWERLEVEL9K_AZURE_CLASSES=( + # '*prod*' PROD # These values are examples that are unlikely + # '*test*' TEST # to match your needs. Customize them as needed. + '*' OTHER) + + # Azure account name color. + typeset -g POWERLEVEL9K_AZURE_OTHER_FOREGROUND=32 + # Custom icon. + # typeset -g POWERLEVEL9K_AZURE_OTHER_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##########[ gcloud: google cloud account and project (https://cloud.google.com/) ]########### + # Show gcloud only when the command you are typing invokes one of these tools. + # Tip: Remove the next line to always show gcloud. + typeset -g POWERLEVEL9K_GCLOUD_SHOW_ON_COMMAND='gcloud|gcs|gsutil' + # Google cloud color. + typeset -g POWERLEVEL9K_GCLOUD_FOREGROUND=32 + + # Google cloud format. Change the value of POWERLEVEL9K_GCLOUD_PARTIAL_CONTENT_EXPANSION and/or + # POWERLEVEL9K_GCLOUD_COMPLETE_CONTENT_EXPANSION if the default is too verbose or not informative + # enough. You can use the following parameters in the expansions. Each of them corresponds to the + # output of `gcloud` tool. + # + # Parameter | Source + # -------------------------|-------------------------------------------------------------------- + # P9K_GCLOUD_CONFIGURATION | gcloud config configurations list --format='value(name)' + # P9K_GCLOUD_ACCOUNT | gcloud config get-value account + # P9K_GCLOUD_PROJECT_ID | gcloud config get-value project + # P9K_GCLOUD_PROJECT_NAME | gcloud projects describe $P9K_GCLOUD_PROJECT_ID --format='value(name)' + # + # Note: ${VARIABLE//\%/%%} expands to ${VARIABLE} with all occurrences of '%' replaced with '%%'. + # + # Obtaining project name requires sending a request to Google servers. This can take a long time + # and even fail. When project name is unknown, P9K_GCLOUD_PROJECT_NAME is not set and gcloud + # prompt segment is in state PARTIAL. When project name gets known, P9K_GCLOUD_PROJECT_NAME gets + # set and gcloud prompt segment transitions to state COMPLETE. + # + # You can customize the format, icon and colors of gcloud segment separately for states PARTIAL + # and COMPLETE. You can also hide gcloud in state PARTIAL by setting + # POWERLEVEL9K_GCLOUD_PARTIAL_VISUAL_IDENTIFIER_EXPANSION and + # POWERLEVEL9K_GCLOUD_PARTIAL_CONTENT_EXPANSION to empty. + typeset -g POWERLEVEL9K_GCLOUD_PARTIAL_CONTENT_EXPANSION='${P9K_GCLOUD_PROJECT_ID//\%/%%}' + typeset -g POWERLEVEL9K_GCLOUD_COMPLETE_CONTENT_EXPANSION='${P9K_GCLOUD_PROJECT_NAME//\%/%%}' + + # Send a request to Google (by means of `gcloud projects describe ...`) to obtain project name + # this often. Negative value disables periodic polling. In this mode project name is retrieved + # only when the current configuration, account or project id changes. + typeset -g POWERLEVEL9K_GCLOUD_REFRESH_PROJECT_NAME_SECONDS=60 + + # Custom icon. + # typeset -g POWERLEVEL9K_GCLOUD_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #[ google_app_cred: google application credentials (https://cloud.google.com/docs/authentication/production) ]# + # Show google_app_cred only when the command you are typing invokes one of these tools. + # Tip: Remove the next line to always show google_app_cred. + typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_SHOW_ON_COMMAND='terraform|pulumi|terragrunt' + + # Google application credentials classes for the purpose of using different colors, icons and + # expansions with different credentials. + # + # POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES is an array with even number of elements. The first + # element in each pair defines a pattern against which the current kubernetes context gets + # matched. More specifically, it's P9K_CONTENT prior to the application of context expansion + # (see below) that gets matched. If you unset all POWERLEVEL9K_GOOGLE_APP_CRED_*CONTENT_EXPANSION + # parameters, you'll see this value in your prompt. The second element of each pair in + # POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES defines the context class. Patterns are tried in order. + # The first match wins. + # + # For example, given these settings: + # + # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES=( + # '*:*prod*:*' PROD + # '*:*test*:*' TEST + # '*' DEFAULT) + # + # If your current Google application credentials is "service_account deathray-testing x@y.com", + # its class is TEST because it doesn't match the pattern '* *prod* *' but does match '* *test* *'. + # + # You can define different colors, icons and content expansions for different classes: + # + # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_TEST_FOREGROUND=28 + # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_TEST_CONTENT_EXPANSION='$P9K_GOOGLE_APP_CRED_PROJECT_ID' + typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES=( + # '*:*prod*:*' PROD # These values are examples that are unlikely + # '*:*test*:*' TEST # to match your needs. Customize them as needed. + '*' DEFAULT) + typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_DEFAULT_FOREGROUND=32 + # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_DEFAULT_VISUAL_IDENTIFIER_EXPANSION='⭐' + + # Use POWERLEVEL9K_GOOGLE_APP_CRED_CONTENT_EXPANSION to specify the content displayed by + # google_app_cred segment. Parameter expansions are very flexible and fast, too. See reference: + # http://zsh.sourceforge.net/Doc/Release/Expansion.html#Parameter-Expansion. + # + # You can use the following parameters in the expansion. Each of them corresponds to one of the + # fields in the JSON file pointed to by GOOGLE_APPLICATION_CREDENTIALS. + # + # Parameter | JSON key file field + # ---------------------------------+--------------- + # P9K_GOOGLE_APP_CRED_TYPE | type + # P9K_GOOGLE_APP_CRED_PROJECT_ID | project_id + # P9K_GOOGLE_APP_CRED_CLIENT_EMAIL | client_email + # + # Note: ${VARIABLE//\%/%%} expands to ${VARIABLE} with all occurrences of '%' replaced by '%%'. + typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_DEFAULT_CONTENT_EXPANSION='${P9K_GOOGLE_APP_CRED_PROJECT_ID//\%/%%}' + + ##############[ toolbox: toolbox name (https://github.com/containers/toolbox) ]############### + # Toolbox color. + typeset -g POWERLEVEL9K_TOOLBOX_FOREGROUND=178 + # Don't display the name of the toolbox if it matches fedora-toolbox-*. + typeset -g POWERLEVEL9K_TOOLBOX_CONTENT_EXPANSION='${P9K_TOOLBOX_NAME:#fedora-toolbox-*}' + # Custom icon. + # typeset -g POWERLEVEL9K_TOOLBOX_VISUAL_IDENTIFIER_EXPANSION='⭐' + # Custom prefix. + # typeset -g POWERLEVEL9K_TOOLBOX_PREFIX='%246Fin ' + + ###############################[ public_ip: public IP address ]############################### + # Public IP color. + typeset -g POWERLEVEL9K_PUBLIC_IP_FOREGROUND=94 + # Custom icon. + # typeset -g POWERLEVEL9K_PUBLIC_IP_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ########################[ vpn_ip: virtual private network indicator ]######################### + # VPN IP color. + typeset -g POWERLEVEL9K_VPN_IP_FOREGROUND=81 + # When on VPN, show just an icon without the IP address. + # Tip: To display the private IP address when on VPN, remove the next line. + typeset -g POWERLEVEL9K_VPN_IP_CONTENT_EXPANSION= + # Regular expression for the VPN network interface. Run `ifconfig` or `ip -4 a show` while on VPN + # to see the name of the interface. + typeset -g POWERLEVEL9K_VPN_IP_INTERFACE='(gpd|wg|(.*tun)|tailscale)[0-9]*|(zt.*)' + # If set to true, show one segment per matching network interface. If set to false, show only + # one segment corresponding to the first matching network interface. + # Tip: If you set it to true, you'll probably want to unset POWERLEVEL9K_VPN_IP_CONTENT_EXPANSION. + typeset -g POWERLEVEL9K_VPN_IP_SHOW_ALL=false + # Custom icon. + # typeset -g POWERLEVEL9K_VPN_IP_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###########[ ip: ip address and bandwidth usage for a specified network interface ]########### + # IP color. + typeset -g POWERLEVEL9K_IP_FOREGROUND=38 + # The following parameters are accessible within the expansion: + # + # Parameter | Meaning + # ----------------------+------------------------------------------- + # P9K_IP_IP | IP address + # P9K_IP_INTERFACE | network interface + # P9K_IP_RX_BYTES | total number of bytes received + # P9K_IP_TX_BYTES | total number of bytes sent + # P9K_IP_RX_BYTES_DELTA | number of bytes received since last prompt + # P9K_IP_TX_BYTES_DELTA | number of bytes sent since last prompt + # P9K_IP_RX_RATE | receive rate (since last prompt) + # P9K_IP_TX_RATE | send rate (since last prompt) + typeset -g POWERLEVEL9K_IP_CONTENT_EXPANSION='${P9K_IP_RX_RATE:+%70F⇣$P9K_IP_RX_RATE }${P9K_IP_TX_RATE:+%215F⇡$P9K_IP_TX_RATE }%38F$P9K_IP_IP' + # Show information for the first network interface whose name matches this regular expression. + # Run `ifconfig` or `ip -4 a show` to see the names of all network interfaces. + typeset -g POWERLEVEL9K_IP_INTERFACE='[ew].*' + # Custom icon. + # typeset -g POWERLEVEL9K_IP_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #########################[ proxy: system-wide http/https/ftp proxy ]########################## + # Proxy color. + typeset -g POWERLEVEL9K_PROXY_FOREGROUND=68 + # Custom icon. + # typeset -g POWERLEVEL9K_PROXY_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ################################[ battery: internal battery ]################################# + # Show battery in red when it's below this level and not connected to power supply. + typeset -g POWERLEVEL9K_BATTERY_LOW_THRESHOLD=20 + typeset -g POWERLEVEL9K_BATTERY_LOW_FOREGROUND=160 + # Show battery in green when it's charging or fully charged. + typeset -g POWERLEVEL9K_BATTERY_{CHARGING,CHARGED}_FOREGROUND=70 + # Show battery in yellow when it's discharging. + typeset -g POWERLEVEL9K_BATTERY_DISCONNECTED_FOREGROUND=178 + # Battery pictograms going from low to high level of charge. + typeset -g POWERLEVEL9K_BATTERY_STAGES='\UF008E\UF007A\UF007B\UF007C\UF007D\UF007E\UF007F\UF0080\UF0081\UF0082\UF0079' + # Don't show the remaining time to charge/discharge. + typeset -g POWERLEVEL9K_BATTERY_VERBOSE=false + + #####################################[ wifi: wifi speed ]##################################### + # WiFi color. + typeset -g POWERLEVEL9K_WIFI_FOREGROUND=68 + # Custom icon. + # typeset -g POWERLEVEL9K_WIFI_VISUAL_IDENTIFIER_EXPANSION='⭐' + + # Use different colors and icons depending on signal strength ($P9K_WIFI_BARS). + # + # # Wifi colors and icons for different signal strength levels (low to high). + # typeset -g my_wifi_fg=(68 68 68 68 68) # <-- change these values + # typeset -g my_wifi_icon=('WiFi' 'WiFi' 'WiFi' 'WiFi' 'WiFi') # <-- change these values + # + # typeset -g POWERLEVEL9K_WIFI_CONTENT_EXPANSION='%F{${my_wifi_fg[P9K_WIFI_BARS+1]}}$P9K_WIFI_LAST_TX_RATE Mbps' + # typeset -g POWERLEVEL9K_WIFI_VISUAL_IDENTIFIER_EXPANSION='%F{${my_wifi_fg[P9K_WIFI_BARS+1]}}${my_wifi_icon[P9K_WIFI_BARS+1]}' + # + # The following parameters are accessible within the expansions: + # + # Parameter | Meaning + # ----------------------+--------------- + # P9K_WIFI_SSID | service set identifier, a.k.a. network name + # P9K_WIFI_LINK_AUTH | authentication protocol such as "wpa2-psk" or "none"; empty if unknown + # P9K_WIFI_LAST_TX_RATE | wireless transmit rate in megabits per second + # P9K_WIFI_RSSI | signal strength in dBm, from -120 to 0 + # P9K_WIFI_NOISE | noise in dBm, from -120 to 0 + # P9K_WIFI_BARS | signal strength in bars, from 0 to 4 (derived from P9K_WIFI_RSSI and P9K_WIFI_NOISE) + + ####################################[ time: current time ]#################################### + # Current time color. + typeset -g POWERLEVEL9K_TIME_FOREGROUND=66 + # Format for the current time: 09:51:02. See `man 3 strftime`. + typeset -g POWERLEVEL9K_TIME_FORMAT='%D{%H:%M:%S}' + # If set to true, time will update when you hit enter. This way prompts for the past + # commands will contain the start times of their commands as opposed to the default + # behavior where they contain the end times of their preceding commands. + typeset -g POWERLEVEL9K_TIME_UPDATE_ON_COMMAND=false + # Custom icon. + typeset -g POWERLEVEL9K_TIME_VISUAL_IDENTIFIER_EXPANSION= + # Custom prefix. + # typeset -g POWERLEVEL9K_TIME_PREFIX='%246Fat ' + + # Example of a user-defined prompt segment. Function prompt_example will be called on every + # prompt if `example` prompt segment is added to POWERLEVEL9K_LEFT_PROMPT_ELEMENTS or + # POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS. It displays an icon and orange text greeting the user. + # + # Type `p10k help segment` for documentation and a more sophisticated example. + function prompt_example() { + p10k segment -f 208 -i '⭐' -t 'hello, %n' + } + + # User-defined prompt segments may optionally provide an instant_prompt_* function. Its job + # is to generate the prompt segment for display in instant prompt. See + # https://github.com/romkatv/powerlevel10k#instant-prompt. + # + # Powerlevel10k will call instant_prompt_* at the same time as the regular prompt_* function + # and will record all `p10k segment` calls it makes. When displaying instant prompt, Powerlevel10k + # will replay these calls without actually calling instant_prompt_*. It is imperative that + # instant_prompt_* always makes the same `p10k segment` calls regardless of environment. If this + # rule is not observed, the content of instant prompt will be incorrect. + # + # Usually, you should either not define instant_prompt_* or simply call prompt_* from it. If + # instant_prompt_* is not defined for a segment, the segment won't be shown in instant prompt. + function instant_prompt_example() { + # Since prompt_example always makes the same `p10k segment` calls, we can call it from + # instant_prompt_example. This will give us the same `example` prompt segment in the instant + # and regular prompts. + prompt_example + } + + # User-defined prompt segments can be customized the same way as built-in segments. + # typeset -g POWERLEVEL9K_EXAMPLE_FOREGROUND=208 + # typeset -g POWERLEVEL9K_EXAMPLE_VISUAL_IDENTIFIER_EXPANSION='⭐' + + # Transient prompt works similarly to the builtin transient_rprompt option. It trims down prompt + # when accepting a command line. Supported values: + # + # - off: Don't change prompt when accepting a command line. + # - always: Trim down prompt when accepting a command line. + # - same-dir: Trim down prompt when accepting a command line unless this is the first command + # typed after changing current working directory. + typeset -g POWERLEVEL9K_TRANSIENT_PROMPT=always + + # Instant prompt mode. + # + # - off: Disable instant prompt. Choose this if you've tried instant prompt and found + # it incompatible with your zsh configuration files. + # - quiet: Enable instant prompt and don't print warnings when detecting console output + # during zsh initialization. Choose this if you've read and understood + # https://github.com/romkatv/powerlevel10k#instant-prompt. + # - verbose: Enable instant prompt and print a warning when detecting console output during + # zsh initialization. Choose this if you've never tried instant prompt, haven't + # seen the warning, or if you are unsure what this all means. + typeset -g POWERLEVEL9K_INSTANT_PROMPT=verbose + + # Hot reload allows you to change POWERLEVEL9K options after Powerlevel10k has been initialized. + # For example, you can type POWERLEVEL9K_BACKGROUND=red and see your prompt turn red. Hot reload + # can slow down prompt by 1-2 milliseconds, so it's better to keep it turned off unless you + # really need it. + typeset -g POWERLEVEL9K_DISABLE_HOT_RELOAD=true + + # If p10k is already loaded, reload configuration. + # This works even with POWERLEVEL9K_DISABLE_HOT_RELOAD=true. + (( ! $+functions[p10k] )) || p10k reload +} + +# Tell `p10k configure` which file it should overwrite. +typeset -g POWERLEVEL9K_CONFIG_FILE=${${(%):-%x}:a} + +(( ${#p10k_config_opts} )) && setopt ${p10k_config_opts[@]} +'builtin' 'unset' 'p10k_config_opts' diff --git a/.profile b/.profile index 788fc7f..c8d3300 100755 --- a/.profile +++ b/.profile @@ -1,4 +1,15 @@ #!/bin/bash +if [ -n "$BASH_SOURCE" ]; then + # Bash or zsh (if BASH_SOURCE is defined) + script="$BASH_SOURCE[0]" +elif [ -n "$ZSH_VERSION" ]; then + # Zsh + script="${(%):-%x}" +else + # Dash or POSIX sh + script="$0" +fi + if test -z "${XDG_RUNTIME_DIR}"; then export XDG_RUNTIME_DIR=/tmp/${UID}-runtime-dir if ! test -d "${XDG_RUNTIME_DIR}"; then @@ -16,7 +27,7 @@ export PROMPT_EOL_MARK="" export EDITOR="nvim" export BROWSER="firefox" export PREFIX=/usr -export PATH="$PATH:$HOME/stuff/scripts/system:$HOME/.cargo/bin:$HOME/stuff/scripts/system/backup" +export PATH="$PATH:$HOME/.cargo/bin:$HOME/stuff/scripts/system:$HOME/stuff/scripts/system/backup:$HOME/stuff/scripts/system/wlx:$HOME/stuff/scripts/system/youtube-playlist-cli:$HOME/.local/bin/blender-4.1.1-linux-x64:$HOME/stuff/manual-programs/app-images" export MANPAGER='nvim +Man!' # export DWM_NOTIF_FILE="/home/iceyrazor/stuff/scripts/c/SDL/notif/notif.txt" @@ -24,33 +35,50 @@ export heartost="/home/iceyrazor/.steam/root/steamapps/music/Heartbound - OST" export cutil=/home/iceyrazor/stuff/scripts/c/my_utils +alias fukin="sudo $@" +alias fukn="sudo $@" +alias fuckin="sudo $@" alias ls='ls --color=auto' -alias lss="sudo du -ah -d 1 | sort -hr" +alias lss="fukin du -ah -d 1 | sort -hr" alias lsu="lsblk --filter 'NAME=~\"sd[abcde]\"' -o NAME,MOUNTPOINTS" +alias surf="WEBKIT_DISABLE_COMPOSITING_MODE=1 surf" alias lsblkfs="lsblk -o PATH,FSTYPE,MOUNTPOINT" alias grep='grep --color=auto' -alias fastfetch='fastfetch --localip-show-ipv4 0' +alias fastfetch='fastfetch --localip-show-ipv4 0 --kitty-direct /home/iceyrazor/stuff/media/ICE/Sprite-0009.png --logo-width 40 --logo-height 20' +[ "$(cat /etc/hostname)" = "Kasino" ] && alias fukn="doas $@" +[ "$(cat /etc/hostname)" = "Kasino" ] && alias fukin="doas $@" +[ "$(cat /etc/hostname)" = "Kasino" ] && alias fuckin="doas $@" +alias numen="echo key x | fukin dotool && NUMEN_DMENU=rofi NUMEN_DMENU_OPTS='-show drun' LD_LIBRARY_PATH=/usr/lib/ numen & disown" + +#[ "$(cat /etc/hostname)" = "Kasino" ] && alias gaysex="zypper dup --allow-vendor-change" +#[ "$(cat /etc/hostname)" = "Kasino" ] && alias cleangaysex="zypper clean -a && fukin zypper ref && fukin zypper dup --allow-vendor-change" +[ "$(cat /etc/hostname)" = "Witchen" ] && alias gaysex="pacman -Syyu && paru -Syyu --aur" +[ "$(cat /etc/hostname)" = "Kasino" ] && alias gaysex="pacman -Syyu && paru -Syyu --aur" alias ascii="~/stuff/scripts/c/SDL/ascii/ascii" -alias watchlss="sudo watch \"du -ah -d 1 | sort -hr\"" +alias watchlss="fukin watch \"du -ah -d 1 | sort -hr\"" alias lfub=~/.local/bin/lf-gadgets/lf-ueberzug/lf-ueberzug alias lfk=~/.local/bin/lf-gadgets/lf-kitty/lf-kitty alias ovim=/usr/bin/vim alias vim=nvim alias fzf="fzf --walker-skip=.private-parent" alias fcd="cd \"\$(fzf --walker dir,hidden --walker-skip=.private-parent)\"" +alias notes="cd ~/stuff/notes && vim notes.md && cd ~" alias ts="~/stuff/scripts/system/tmux-sessionizer.sh" +alias fman="bash -c 'compgen -c' | fzf | xargs man" +alias etask="$EDITOR stuff/scripts/system/task.sh" -#alias updateL='sudo /home/iceyrazor/update_list/update_list.sh ' +#alias updateL='fukin /home/iceyrazor/update_list/update_list.sh ' alias session="./Downloads/session-desktop-linux-x86_64-1.12.4.AppImage > /dev/null & disown" alias simplex="_JAVA_AWT_WM_NONREPARENTING=1 ./Downloads/simplex-desktop-x86_64.AppImage > /dev/null & disown" +alias ygg="fukin bash -c 'mkdir /var/run/yggdrasil; yggdrasil -useconf < /etc/yggdrasil.conf'" alias loki="./stuff/scripts/loki-toggle.sh" -alias lokig="sudo Lokinet-GUI.AppImage --no-sandbox > /dev/null & disown" -alias alvr="WINIT_X11_SCALE_FACTOR=\"1\" ~/stuff/app_images/ALVR-x86_64.AppImage & disown" -alias wlx="~/stuff/app_images/WlxOverlay-v1.4.5-x86_64.AppImage & disown" -alias obss="sudo obs && obs & disown" +alias lokig="fukin Lokinet-GUI.AppImage --no-sandbox > /dev/null & disown" +alias alvr="WINIT_X11_SCALE_FACTOR=\"1\" /home/iceyrazor/stuff/manual-programs/dontsync/alvr_streamer_linux/bin/alvr_dashboard & disown" +alias obss="fukin obs && obs & disown" +alias get_channel_id="xargs curl -s | grep -Eo 'channel_id=.{0,50}' | sed 's/\".*//g' | fzf | xargs printf \"https://www.youtube.com/feeds/videos.xml?%s\" | xclip -selection clipboard" alias killa="~/stuff/killall.sh" alias bbackup="~/stuff/scripts/system/backup/backup.sh" @@ -58,22 +86,25 @@ alias bbacklap="~/stuff/scripts/system/backup/backup-tol.sh" alias bgit="~/stuff/scripts/system/backup/move-to-git.sh" alias vasm="~/stuff/manual-programs/vasm/vasm6502_oldstyle -Fbin -dotdir " alias pipes="pipes.sh -t 0 -p 3 -f 30 -r 2000" +alias rerules="fukin udevadm control --reload-rules && fukin udevadm trigger" -alias bri="sudo ~/stuff/scripts/system/bri.sh" + +alias bri="fukin ~/stuff/scripts/system/bri.sh" +alias drkwll="nitrogen --head=0 --set-zoom-fill ~/stuff/media/gallifreyan/linux2.png" # mounting -alias umsu="sudo umount u" -alias umsu2="sudo umount u2" -alias mswin="sudo mount -o umask=0,uid=nobody,gid=nobody /dev/sdb3 ~/windir" -alias umswin="sudo umount ~/windir" -alias msbak="sudo cryptsetup open /dev/sda1 backups && sudo mount /dev/mapper/backups ~/mnt-backups" # && sudo bindfs -u iceyrazor /mnt-backups ~/mnt-backups" -alias umsbak="sudo umount ~/mnt-backups && sudo cryptsetup close backups" # " sudo umount /mnt-backups && sudo cryptsetup close backups" -alias msfd="sudo mount /dev/sdc1 u2" -alias msf="sudo cryptsetup open /dev/sdc2 flashdrive && sudo mount /dev/mapper/flashdrive ~/u" -alias umsf="sudo umount ~/u && sudo cryptsetup close flashdrive" +alias umsu="fukin umount u" +alias umsu2="fukin umount u2" +alias mswin="fukin mount -o umask=0,uid=nobody,gid=nobody /dev/sdb3 ~/windir" +alias umswin="fukin umount ~/windir" +alias msbak="doas cryptsetup open /dev/sda1 backups && doas mount /dev/mapper/backups ~/mnt-backups" # && fukin bindfs -u iceyrazor /mnt-backups ~/mnt-backups" +alias umsbak="doas umount ~/mnt-backups && doas cryptsetup close backups" # " fukin umount /mnt-backups && fukin cryptsetup close backups" +alias msfd="fukin mount /dev/sdc1 u2" +alias msf="fukin cryptsetup open /dev/sdc2 flashdrive && fukin mount /dev/mapper/flashdrive ~/u" +alias umsf="fukin umount ~/u && fukin cryptsetup close flashdrive" alias cam="ffplay -input_format mjpeg -fast -fflags +nobuffer -i -framerate 30 -max_delay 100 -max_probe_packets 0 -analyzeduration 0 -flags +low_delay /dev/video0" -alias sc="ffmpeg -f x11grab -framerate 1 -video_size 1920x1200 -i :0.0 -vframes 1 -crf 18 ~/output.jpeg" +alias sc="ffmpeg -f x11grab -framerate 1 -video_size 1920x1200 -i :0.0 -vframes 1 -crf 18 ~/Pictures/Screenshots/$(date '+%m-%d-%Y-%I-%M')_${RANDOM}_screenshot.jpeg" alias sc2="escrotum -s ~/Pictures/%Y-%m-%d-%H%M%S_$wx$h_escrotum.png" alias scs="sleep 3s && ffmpeg -f x11grab -framerate 1 -video_size 1920x1200 -i :0.0 -vframes 1 -crf 18 output.jpeg" alias wwrite="watch -d grep -e Dirty: -e Writeback: /proc/meminfo" @@ -83,7 +114,7 @@ alias gol="~/stuff/scripts/c/SDL/game-of-life/game-of-life & disown" alias statst="echo full_stat:true > ~/stuff/scripts/system/stbar/config.txt" alias statsf="echo full_stat:false > ~/stuff/scripts/system/stbar/config.txt" -alias get_drm="sudo cat /sys/module/nvidia_drm/parameters/modeset" +alias get_drm="fukin cat /sys/module/nvidia_drm/parameters/modeset" alias nodem="find . -name 'node_modules' -type d | xargs du -sh | sort -hr | fzf -m --header \"select witch ones to delete\" --preview 'cat $(dirname {})/package.json'|awk print '{print $2}' | xargs -r rm -rf" @@ -91,3 +122,4 @@ alias walltaker="stuff/manual-programs/git/walltaker-client/walltaker.sh" alias savewall="stuff/manual-programs/git/walltaker-client/save.sh" xset r rate 300 50 +# xset r off diff --git a/.surf/styles/default.css b/.surf/styles/default.css deleted file mode 100644 index 69259cc..0000000 --- a/.surf/styles/default.css +++ /dev/null @@ -1,16 +0,0 @@ -*,div,pre,textarea,body,input,td,tr,p { - background-color: #202020 !important; - background-image: none !important; - color: #bbbbbb !important; -} -h1,h2,h3,h4 { - background-color: #202020 !important; - color: #b8ddea !important; -} -img { - opacity: .5; -} -img:hover { - opacity: 1; -} - diff --git a/.tmux.conf b/.tmux.conf new file mode 100755 index 0000000..9a29b7a --- /dev/null +++ b/.tmux.conf @@ -0,0 +1,69 @@ +#run-shell ~/clone/path/logging.tmux +set -g default-terminal "screen-256color" +set -g terminal-overrides 'screen*:colors=256' + +set -g default-shell /bin/zsh +set -g default-command /bin/zsh + +#set -g status-interval 3 + +unbind C-b +set-option -g prefix C-Space + +# set vim mode +set-window-option -g mode-keys vi +setw -g mode-keys vi + +# yank and visual rebinds +bind -T copy-mode-vi v send-keys -X begin-selection +bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel 'xclip -selection clipboard' + +# dont exit copy mode with mouse drag +unbind -T copy-mode-vi MouseDragEnd1Pane + + +# bind r to reload config +unbind r +bind r source-file ~/.tmux.conf + +# start panes and windows 1 +set -g base-index 1 +set -g pane-base-index 1 +set -g renumber-windows on # renumber windows when one is closed + +# nav rebinds +bind -r C-h select-pane -L +bind -r C-j select-pane -D +bind -r C-k select-pane -U +bind -r C-l select-pane -R + +bind -r h resize-pane -L 5 +bind -r j resize-pane -D 5 +bind -r k resize-pane -U 5 +bind -r l resize-pane -R 5 +bind -r m resize-pane -Z # maximize + +# pane joining +bind J switch-client -T pane-management +bind-key -T pane-management \" command-prompt -p "join pane from:" "join-pane -s '%%' -h" +bind-key -T pane-management H command-prompt -p "join pane from:" "join-pane -s '%%' -f -h" +bind-key -T pane-management % command-prompt -p "join pane from:" "join-pane -s '%%' -v" +bind-key -T pane-management V command-prompt -p "join pane from:" "join-pane -s '%%' -f -v" +bind-key -T pane-management B break-pane +bind-key -T pane-management S command-prompt -p "send pane to:" "join-pane -t '%%'" + +bind-key -r H split-window -h -f + + +# colors/theme +set -g status-bg "#333333" +set -g status-fg "#f1f1f1" +set -wg mode-style bg="#333334" +set -g pane-border-style fg='#333333' +set -g pane-active-border-style fg='#a030f0' +active_window_fg='#e080f0' +set -g status-left "#[fg=${session_fg},bold,bg=${bg}][ #S] " +set -g status-left-length 40 +set -g window-status-current-format "#[fg=${active_window_fg},bg=default] #I:#W" +set -g window-status-format "#[fg=${default_fg},bg=default]#I:#W" +# set -g window-status-last-style "fg=${default_fg},bg=default" diff --git a/.wezterm.lua b/.wezterm.lua index 3e4242d..0e135d7 100755 --- a/.wezterm.lua +++ b/.wezterm.lua @@ -2,9 +2,13 @@ local wezterm = require 'wezterm' local config = {} local act = wezterm.action +config.default_prog = { 'zsh', '-l' } + --config.font = wezterm.font 'Classic Console' --config.font_size = 15 --config.font = wezterm.font 'Source Code Pro' +config.show_tabs_in_tab_bar = false +config.enable_tab_bar = false config.font = wezterm.font 'CozetteVector' config.font_size = 15 @@ -21,7 +25,8 @@ config.keys = { config.colors={ foreground = '#e6e6e6', - background = '#101010', + --background = '#101010', + background = '#04000a', cursor_fg = '#fabd2f', ansi = { '#263640', @@ -47,4 +52,62 @@ config.colors={ config.window_background_opacity = 0.8 +local function tab_title(tab_info) + local title = tab_info.tab_title + -- if the tab title is explicitly set, take that + if title and #title > 0 then + return title + end + -- Otherwise, use the title from the active pane + -- in that tab + return tab_info.active_pane.title +end + +-- The filled in variant of the < symbol +local SOLID_LEFT_ARROW = wezterm.nerdfonts.pl_right_hard_divider + +-- The filled in variant of the > symbol +local SOLID_RIGHT_ARROW = wezterm.nerdfonts.pl_left_hard_divider + +config.use_fancy_tab_bar = false +config.show_new_tab_button_in_tab_bar = false +--[[ +wezterm.on( + 'format-tab-title', + function(tab, tabs, panes, config2, hover, max_width) + local edge_background = '#0b0022' + local background = '#1b1032' + local foreground = '#808080' + + if tab.is_active then + background = '#2b2042' + foreground = '#c0c0c0' + elseif hover then + background = '#3b3052' + foreground = '#909090' + end + + local edge_foreground = background + + local title = tab_title(tab) + + -- ensure that the titles fit in the available space, + -- and that we have room for the edges. + title = wezterm.truncate_right(title, max_width - 2) + + return { + { Background = { Color = edge_background } }, + { Foreground = { Color = edge_foreground } }, + { Text = SOLID_LEFT_ARROW }, + { Background = { Color = background } }, + { Foreground = { Color = foreground } }, + { Text = title }, + { Background = { Color = edge_background } }, + { Foreground = { Color = edge_foreground } }, + { Text = SOLID_RIGHT_ARROW }, + } + end +) +--]] + return config diff --git a/.zshrc b/.zshrc index 9e07903..bfecd2c 100755 --- a/.zshrc +++ b/.zshrc @@ -1,22 +1,37 @@ +# Enable Powerlevel10k instant prompt. Should stay close to the top of ~/.zshrc. +# Initialization code that may require console input (password prompts, [y/n] +# confirmations, etc.) must go above this block; everything else may go below. + +if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then + source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" +fi + # Lines configured by zsh-newuser-install HISTFILE=~/.histfile HISTSIZE=1000 SAVEHIST=1000 -bindkey -v # End of lines configured by zsh-newuser-install -PS1='%B%F{white}[%B%F{red}Z%B%F{magenta}%n%B%F{yellow}@%B%F{magenta}%M %B%F{cyan}%1~%B%F{white}]%B%F{default}$ ' +PS1='%B%F{white}[%B%F{magenta}%n%B%F{yellow}@%B%F{magenta}%M %B%F{cyan}%1~%B%F{white}]%B%F{default}$ ' #PS1='%B%F{white}[%B%F{red}Z%B%F{magenta}ARCH %B%F{cyan}%1~%B%F{white}]%B%F{default}$ ' +bindkey -v # Yank to the system clipboard function vi-yank-xclip { - #zle vi-yank + zle vi-yank echo "$CUTBUFFER" | xclip -selection clipboard } zle -N vi-yank-xclip bindkey -M vicmd ' y' vi-yank-xclip -source ~/stuff/scripts/system/neoboot.sh source ~/.profile +#bash --login -i -c 'source ~/.profile' +source ~/.config/zsh/powerlevel10k/powerlevel10k.zsh-theme + +# To customize prompt, run `p10k configure` or edit ~/.p10k.zsh. +[[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh + + +eval "$(atuin init zsh)" diff --git a/stuff/manual-programs/suckless/dmenu-5.2/dmenu b/stuff/manual-programs/suckless/dmenu-5.2/dmenu old mode 100644 new mode 100755 diff --git a/stuff/manual-programs/suckless/dmenu-5.2/dmenu_path b/stuff/manual-programs/suckless/dmenu-5.2/dmenu_path old mode 100644 new mode 100755 diff --git a/stuff/manual-programs/suckless/dmenu-5.2/dmenu_run b/stuff/manual-programs/suckless/dmenu-5.2/dmenu_run old mode 100644 new mode 100755 diff --git a/stuff/manual-programs/suckless/dmenu-5.2/stest b/stuff/manual-programs/suckless/dmenu-5.2/stest old mode 100644 new mode 100755 diff --git a/stuff/manual-programs/suckless/dwm-bak/dwm b/stuff/manual-programs/suckless/dwm-bak/dwm old mode 100644 new mode 100755 diff --git a/stuff/manual-programs/suckless/dwm/dwm b/stuff/manual-programs/suckless/dwm/dwm old mode 100644 new mode 100755 diff --git a/stuff/manual-programs/suckless/dwm/dwm.c.orig b/stuff/manual-programs/suckless/dwm/dwm.c.orig index 0f0365a..f4e0d0b 100644 --- a/stuff/manual-programs/suckless/dwm/dwm.c.orig +++ b/stuff/manual-programs/suckless/dwm/dwm.c.orig @@ -223,6 +223,7 @@ static void resizemouse(const Arg *arg); static void resizerequest(XEvent *e); static void restack(Monitor *m); static void run(void); +static void runAutostart(void); static void scan(void); static int sendevent(Window w, Atom proto, int m, long d0, long d1, long d2, long d3, long d4); static void sendmon(Client *c, Monitor *m); @@ -1554,6 +1555,12 @@ run(void) handler[ev.type](&ev); /* call handler */ } +void +runAutostart(void) { + system("cd ~/.config/dwm; ./autostart_blocking.sh"); + system("cd ~/.config/dwm; ./autostart.sh &"); +} + void scan(void) { @@ -2509,6 +2516,7 @@ main(int argc, char *argv[]) die("pledge"); #endif /* __OpenBSD__ */ scan(); + runAutostart(); run(); cleanup(); XCloseDisplay(dpy); diff --git a/stuff/manual-programs/suckless/dwm/util.o b/stuff/manual-programs/suckless/dwm/util.o index 8e55fa18d6ada0bfba70d02362b40ffaf2d35ebf..aa3779b8a8359ef45e7e6119d6f763f0e4c68e40 100644 GIT binary patch delta 27 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 z%0D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 literal 72976 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 diff --git a/stuff/manual-programs/suckless/surf/webext-surf.o b/stuff/manual-programs/suckless/surf/webext-surf.o index b691525d68c9c071ab70a3aafd6303c9a9cfaba2..4dc740ffec7e1703315efa328e84097b24feb811 100644 GIT binary patch delta 1362 zcmb7DTS!z<6rFQte2kXY*UX(E${P&%NQOI)8YhZjdLC#nq@|tp&*+uE|?Y0UX8jWtyw(fvUd6dZlrQc|GnieC^0^OJvW0&wRa%Lxu?z2@4 z5|-8VR*YC-lGw^Gq%ySl>@=b@x?1Ch=QGZiQvD&DLREBPWDsP*LUiC2HeEc6i2?O9 z4bKbWB^O@A(Ulsj+r+j}1szpq2H8dHfIc5jpiy-?pw1*C>crBqYf6kbSZ(!#hK=Zv zH_MJoMPA`$sfhi5s>J)COuuTCLdDVKw4z&3E7exl6ESiZYV~E=-~S{M{*JkGVx$s! z^;>)j^~S}nO4c-vn|%b*PUKvVPCwo=*Qwma<(*{L|)4n^_E2TujhHJxrc*(|&3LT-1+*%0zHIx8F@ zSI`}Dc{g~1p@yJC30BlQ8yf1Jb&akXc%62GMBzlb&Co&gA?QtiOrir-8S{EmzK-aI z+33*R$xRoB)+}kDC;No}LXHVKbBYIU=i~`wH`L`xc8f-Oh6chvWo6OK-E+GmGnSJQz(6@kB@{u-Zmwd)f?T^#x_QROu z5#FU~gj`Drc?VvLk7PnS`W6_n_>6DTlj0A6SUtuL)+-vp;vVB0_NHjppwnFR7b6Cb AzyJUM delta 1377 zcmb7ETS$~q5I$#jwROGh#m(RCPW++UMcmB`Ma%Ys)R9Dp3@oipv?z)ovZ7wn)aYkf zkfyf~>>=8zjcp?CSX9aw6K0JrLf6HJL&qHx@k(hDb-MG4lN`aXB9SG1{7$X;_9HF3 zzVr4P5%=qtIEC~)ad$6-+gz_%rAu78$3G(|;&Wwg*W`>tL1Ay!ox()r?jA+Xk4Usfkm|YB z1|Awh_5i;O>+Fkj$A6{MM#qnX?(SOXutyr4Vnxc`Q%}8*)aXuR$I0PBm~!-)F~=Kp z(I%Go<-Hx4ExK+sHf=GQjV;DjBX(1sCUrrWuTtkECrsHZvZ)edgXNA!uC1-#7+esl zC<~Q^7KF>g73G!TFoN(btB+rV1KGNxm)qmemwlCA9NaWx(hhAdf8eE!F(2dXJxvRx zB4gMTw79gvj@Q>A zgEJUeOyyC?sFCyGF`_{WC6@X4O?S8!xK9ggP;v_ubUTC)J*4C=R?uV6;?p=tos@Nk zlsbMT@}aCV_K!NB;fqfT{Z!DUO0LVgAcAQ*-MJUMevKEw`a&(R%!;AYl_@cm(23~k zzbgF9Tu!yDF_64dvgo}|cQrv>MY60gnijq3X*AFB(^+yA zzt{4U3Bz`OD}N88{Qd z(_(B6m|8V|05=eM1iU!P85pPsptCrdbJu!8cVV=+I;WSKLGeLOpxWh>e?yF&WXL}6 EHWnQJV ziS0}kRWpza4NRH|OgkxL`Xj+ZYamd^CgAi(2bj*(KuJhC0a1s>JSRMgx_jSu#!=gy zx!c>v?e6W}w|CO$Yjpf|x+mW-zL-pai#SLUagiJ{b8nSJ+m&fXh{KOmv(>U^58OD&u4YrvS!{ zQA0CA%Yv2xEgf1WGz8oZj27)ud@~qe8xjjO zC008|L)o7a4eZ0jd?%-1QBPpQlv77Kr?)_sR3wux5RRX+=i)SVD{C8MmL!9I#Dz8{ zwuFqZ_$X_g_oOpfr`;PyUt~+1DvG zG^c-M>O1sk+7LC~nNNsskC-oooe!;qNMZFIc154B`HU0xA(k|C@rphmNN3?1smIv> zvxpS@I*=@doIc=3)<>h!NE38t)pbDAx?!D(KjOgwrDh&qWfRMx%X$oeQPl7m*jabQswlVE24S1JzO}^CW!3Qm8yQ z1k-*3(+1FFgA67mfirDtoypcZ)>tYI+Aq|oX-#{iyVsqdn$ z*9a$53ca9#AbwwnLkC2#6Fv_)!fO~rXcriG@HiUf({5ge$x^6m=03FF^LWa(0x51| zUa=H}PS=Y%?o$|6ZP!m>GPN#I~(S11cJJ3H}j3$CNgacIL~-xXc24a0$Cnt^c&>($K&#w@)21qkrMa}v%R{x2sFyC5Im_wqaB1c%2C zNCjhXTG|RRzJL?FT#j7fGR%_hw0$i~LQW5$$eSqW8`Sk4!6o!OrdxO6**W6`hEdgbS%}K{%m=0^!QS~l1H_{ z2XaPoxc95L{!;GmR=^;IFq%bUx;}0L&JrdOtiV7Ds!z^^ZGaR(OlPDGb?%MsI`<~G zXPBpIY)A^$Tpc?l^?aj|g3kS*>pqUN-P|7^!l7S>QHAY$p`1kK;evY3Xof)xKQ2BM z>Hgih+q6f`FHyS#L|7!w{3{w=4Y+AM8r=nW{_SY=Ex?-qe~9=_H2QbIH}6HG^H|vO zgSwYt#z71=HEmgH){k^a+ce#zYWm{2rFpr)--@9R$I$0E4KE}S(cfYe#$sr^l@L;8 zL=qUan)JKy^#Fj^HNpV1Sxt11t+X209vY8lpBz?lasO%5kMwrM5?=EN1IpV#LFAw! z7taR^J7g`Q>(~YGmjyKn0iPHME=G%rEaoJcg71%e5Nm>y#OcdyWzpNJkqUU7Onb9< zq)yzEHA|M1oAXz#S+&$$+p?u|dx6u4xxY-}j0Zz`<=C)q5`meqx!s^Fb*9$!k6 z05gbuc!YcpEDB$oMIl@W0}2^F?~*xUbxSxugA6Kf0$EDPD=+~2bBQ?ILa>!jNS}B_ z2>w2%w;8&ABTpkIL|BR+tRfih34DeDgp}?41jZQFH5YQ9Jv#mjW8{yzko$~(9>x@o z&k9^802Cq)SD**|L=thy3=PxTO!}`lJB=L7mAQm{WHZrmb^$_-gU~1x46%=j21x_H zilh*6Dg}QU=YzvE!IAL{ZYPtB#AI-mVqauj%))Dm62nvyQ65S{P{Z7D2K8zX=i&?4 z=!X$LF=L;eKSe#dkN3xT|5x7M=Dmg;0;!qz3wZw=?_01}?}NPS(KSyyc|NH4tAl;Kx=rvk@s!9e}nfQuzI_Jp5^1ud4CIgH9p?W=vA$o z7!|;1D)2J88ruUMfli;#+DMwb?cU~=j)1q_6WHu&Z1r#Pb`X!J$?s`y^*7YFdYS_M z_6|>d=XTQQ-`v*f4S1WZ#s6Ew<7?T{;;C;?C8OFc`Uul9KQui7`!{(ZIjCnxD`(RHTkkZ{BW#D$WZW5} zD!%z$>?7wK+RZLGtLQJ7vC>2<*u!#D?ynSmB{s6(0t^6wlPNn38~_^4Z3-Aja~pZ0|&+9bg|-&M{sD3I6^SQc<`EQL6qNBnj-@%51Ip z%K-MK%0T^WeN`2`!46cJ=rwk{(qtS5P0W(8Bg)_iyInO${Qx8ycC{*-Ib3GTV@0U8!?S6*g5e{>PjrrgUjKz%y<)K!?ce}O#n`FQrowIK0&xlG1G#un%N E2U-=URsaA1 delta 4013 zcmZV>3s6+o_1=ZmU0~S-gyj=i7FUG`3#<@ST-Zfgo|YP{b#$r*QG+rXKM|7Fq}^1& zWV4}yhni$E$&8)JG&N%;LQRNPt73sV%@o?&A+;(=+v!rY3g)YcujkzNF6#E~ymRjP zpL_0iZ|>(K`*=r=ea#{^)qHFLi)B9c5XtghdAK00)u0g) zGn+ zNqQ7F3qOvZD2XXc43~IL{4Pz}-dpwfv(vzDNQK_0GyEhtjdtjWPUSCBujj4kFi(3m z5mm7jX^6dsZWCD?3-tVI+N%azUEQ9h`c2#FHf`Nj*HGWM9sK4+aM+w`*;@Z(!^Y;l zd)<3>x(ngBIUjDBlZ`}qKsBes+!*`xEl=#++`Rp9Xp3>eGv>5;+Z#9Ld)$S>gdwq| zX`?#4smN*CJ7Ra~U;HfY(zB=t8Es}tPK8=`; z$kEf8a*}u3&ha!u0b^U!kT+I)S5=jEFGq&bZoCbb5^_w#ZX!x9Kx|^!hIS-a^ZZpx zi+5u_c9r12nk-7ly94=ZaxJpLn^aZpH*Q7-U*Ff@wmMo-kFmandwr|J$8K3OZ;x$3 z-IYr4)@jnfz^ma>QzQHVlzr&yzSal^h5T1s4wVi1$Rf1Q;%Y?L#*mcNm`I0wP zDWT-IaU&?9MZt4uR*h!8^~vWKu$ayNLmnBvsnp6&(5LLf>kc1=!`ND?Gh@Xk_qzHUgI*IpgB}>C$U}^iO2hw z21mnt$)%Rr3|B90E2ZsE*4Av?5lZNLCQPVf9(5OBHjl;0Z2v+Dg%-QQm+q))FRntI zlA8#X(9C`0yXDUGr*oC4buN<Map{Ga+e&nuXEYZb_9)1 z7m}agRn2%gdfB@Yf|Ep zGjq{bd&z1%mBN!>k=}VzU(Yis-!*q2kRGiIkEzY4#zH&s=f?EZLLi(zLx4T$!}2K@dC$=P$wFJbQp zdOQx_%63I}@Td?xk?lzOJF=~xs;aoSs^V>E+QVnPZ-(dM4+i8(DNjZ!3bkRnlCVko zY6LwNLEny`6ZHE}+Ruuh=WBFeDu6#iVRZz(BZA%+K_7~s--)1q8$o|4=(2kwyb_`C zO$1H%5w&;?F*{7;I}(1KqLFlbQyT=Q+rfvx@3t@e?5?^~Fm+F~0;sLgUp+cvIl4SX z6SKu|*j>PP!LZwrFdC~d>B^vH0$xzy9MM&AZHox9%D6-X-32QOUN(#@#`i+X!NS3Z z`x7*4dCyfZS+XcAr+WFS+^nKvcagg&%TwqnE-dkQ&>|CjMX3QRS{U&0a6!K^;k5a!y@Ke}`PjWPT zK=6|jSy;d9rT9(Y(RSVq!%_CM50OdFt;lECM?&Y8fJsn~`W^uv6|h0Tp9t6`;M)TB z3;2nE@i1I$=T3U*@lpYo30NoK9)f9|I1l2nr!PqPOg$!a&Iou>z%c=%ptHozXTb!* z3ejIJV1s}^68skg`~`6!ue7%3#nQDrJ@OgplaIP$m~GDKiCg$Nhv&=YfT64w)|TbL z(J~kOp{y=F1It6JSYI#qJ;h;}Z;lh+D-Ve8y~R<0%>^sU9RWY~KF38ao#2~LYdWR_ zk($0&nOub$m$C0)hjx^-ms?NbLfsE-RoYb2o(^Gb*=!|3(vc42UY2+V64QM`Eiz4w%L43a?2&Wn(4-$D5|8MbGJ%M3 zvY+bqmAalhh9uslJ0|;N{2sK&0)?Qcyn^qC-Q^DcE_5R7gb9TIfP@N%^JO%l^2!rX z?puj1G}-)h*j-V<--Kfo4qi+g*yW3!Np^Br9Zn>$N&G3S@Hx`yK}M&vK9^Jf4hHk! zLiwEZ-=m05Hz}5X5{87>e-TBLmlVr0LjL6()q~5^Tn=3xF;`%>zXHd3% zuc0@}T6&bH*N{GqCdzu|Bx;Z^sU^>#5z>N>jY+V