First commit
|
@ -0,0 +1,6 @@
|
|||
UseTab: Always
|
||||
IndentWidth: 4
|
||||
TabWidth: 4
|
||||
AllowShortFunctionsOnASingleLine: None
|
||||
AlignAfterOpenBracket: AlwaysBreak
|
||||
# vim: ft=yaml
|
|
@ -0,0 +1,170 @@
|
|||
# This is a default config file for bottom. All of the settings are commented
|
||||
# out by default; if you wish to change them uncomment and modify as you see
|
||||
# fit.
|
||||
|
||||
# This group of options represents a command-line flag/option. Flags explicitly
|
||||
# added when running (ie: btm -a) will override this config file if an option
|
||||
# is also set here.
|
||||
|
||||
[flags]
|
||||
# Whether to hide the average cpu entry.
|
||||
#hide_avg_cpu = false
|
||||
# Whether to use dot markers rather than braille.
|
||||
#dot_marker = false
|
||||
# The update rate of the application.
|
||||
#rate = 1000
|
||||
# Whether to put the CPU legend to the left.
|
||||
#left_legend = false
|
||||
# Whether to set CPU% on a process to be based on the total CPU or just current usage.
|
||||
#current_usage = false
|
||||
# Whether to group processes with the same name together by default.
|
||||
#group_processes = false
|
||||
# Whether to make process searching case sensitive by default.
|
||||
#case_sensitive = false
|
||||
# Whether to make process searching look for matching the entire word by default.
|
||||
#whole_word = false
|
||||
# Whether to make process searching use regex by default.
|
||||
#regex = false
|
||||
# Defaults to Celsius. Temperature is one of:
|
||||
#temperature_type = "k"
|
||||
#temperature_type = "f"
|
||||
temperature_type = "c"
|
||||
#temperature_type = "kelvin"
|
||||
#temperature_type = "fahrenheit"
|
||||
#temperature_type = "celsius"
|
||||
# The default time interval (in milliseconds).
|
||||
#default_time_value = 60000
|
||||
# The time delta on each zoom in/out action (in milliseconds).
|
||||
#time_delta = 15000
|
||||
# Hides the time scale.
|
||||
#hide_time = false
|
||||
# Override layout default widget
|
||||
#default_widget_type = "proc"
|
||||
#default_widget_count = 1
|
||||
# Use basic mode
|
||||
#basic = false
|
||||
# Use the old network legend style
|
||||
#use_old_network_legend = false
|
||||
# Remove space in tables
|
||||
#hide_table_gap = false
|
||||
# Show the battery widgets
|
||||
#battery = false
|
||||
# Disable mouse clicks
|
||||
#disable_click = false
|
||||
# Built-in themes. Valid values are "default", "default-light", "gruvbox", "gruvbox-light", "nord", "nord-light"
|
||||
#color = "default"
|
||||
# Show memory values in the processes widget as values by default
|
||||
#mem_as_value = false
|
||||
# Show tree mode by default in the processes widget.
|
||||
#tree = false
|
||||
# Shows an indicator in table widgets tracking where in the list you are.
|
||||
#show_table_scroll_position = false
|
||||
# Show processes as their commands by default in the process widget.
|
||||
#process_command = false
|
||||
# Displays the network widget with binary prefixes.
|
||||
#network_use_binary_prefix = false
|
||||
# Displays the network widget using bytes.
|
||||
#network_use_bytes = false
|
||||
# Displays the network widget with a log scale.
|
||||
#network_use_log = false
|
||||
# Hides advanced options to stop a process on Unix-like systems.
|
||||
#disable_advanced_kill = false
|
||||
|
||||
# These are all the components that support custom theming. Note that colour support
|
||||
# will depend on terminal support.
|
||||
|
||||
#[colors] # Uncomment if you want to use custom colors
|
||||
# Represents the colour of table headers (processes, CPU, disks, temperature).
|
||||
#table_header_color="LightBlue"
|
||||
# Represents the colour of the label each widget has.
|
||||
#widget_title_color="Gray"
|
||||
# Represents the average CPU color.
|
||||
#avg_cpu_color="Red"
|
||||
# Represents the colour the core will use in the CPU legend and graph.
|
||||
#cpu_core_colors=["LightMagenta", "LightYellow", "LightCyan", "LightGreen", "LightBlue", "LightRed", "Cyan", "Green", "Blue", "Red"]
|
||||
# Represents the colour RAM will use in the memory legend and graph.
|
||||
#ram_color="LightMagenta"
|
||||
# Represents the colour SWAP will use in the memory legend and graph.
|
||||
#swap_color="LightYellow"
|
||||
# Represents the colour rx will use in the network legend and graph.
|
||||
#rx_color="LightCyan"
|
||||
# Represents the colour tx will use in the network legend and graph.
|
||||
#tx_color="LightGreen"
|
||||
# Represents the colour of the border of unselected widgets.
|
||||
#border_color="Gray"
|
||||
# Represents the colour of the border of selected widgets.
|
||||
#highlighted_border_color="LightBlue"
|
||||
# Represents the colour of most text.
|
||||
#text_color="Gray"
|
||||
# Represents the colour of text that is selected.
|
||||
#selected_text_color="Black"
|
||||
# Represents the background colour of text that is selected.
|
||||
#selected_bg_color="LightBlue"
|
||||
# Represents the colour of the lines and text of the graph.
|
||||
#graph_color="Gray"
|
||||
# Represents the colours of the battery based on charge
|
||||
#high_battery_color="green"
|
||||
#medium_battery_color="yellow"
|
||||
#low_battery_color="red"
|
||||
|
||||
# Layout - layouts follow a pattern like this:
|
||||
# [[row]] represents a row in the application.
|
||||
# [[row.child]] represents either a widget or a column.
|
||||
# [[row.child.child]] represents a widget.
|
||||
#
|
||||
# All widgets must have the type value set to one of ["cpu", "mem", "proc", "net", "temp", "disk", "empty"].
|
||||
# All layout components have a ratio value - if this is not set, then it defaults to 1.
|
||||
# The default widget layout:
|
||||
#[[row]]
|
||||
# ratio=30
|
||||
# [[row.child]]
|
||||
# type="cpu"
|
||||
#[[row]]
|
||||
# ratio=40
|
||||
# [[row.child]]
|
||||
# ratio=4
|
||||
# type="mem"
|
||||
# [[row.child]]
|
||||
# ratio=3
|
||||
# [[row.child.child]]
|
||||
# type="temp"
|
||||
# [[row.child.child]]
|
||||
# type="disk"
|
||||
#[[row]]
|
||||
# ratio=30
|
||||
# [[row.child]]
|
||||
# type="net"
|
||||
# [[row.child]]
|
||||
# type="proc"
|
||||
# default=true
|
||||
|
||||
|
||||
# Filters - you can hide specific temperature sensors, network interfaces, and disks using filters. This is admittedly
|
||||
# a bit hard to use as of now, and there is a planned in-app interface for managing this in the future:
|
||||
#[disk_filter]
|
||||
#is_list_ignored = true
|
||||
#list = ["/dev/sda\\d+", "/dev/nvme0n1p2"]
|
||||
#regex = true
|
||||
#case_sensitive = false
|
||||
#whole_word = false
|
||||
|
||||
#[mount_filter]
|
||||
#is_list_ignored = true
|
||||
#list = ["/mnt/.*", "/boot"]
|
||||
#regex = true
|
||||
#case_sensitive = false
|
||||
#whole_word = false
|
||||
|
||||
#[temp_filter]
|
||||
#is_list_ignored = true
|
||||
#list = ["cpu", "wifi"]
|
||||
#regex = false
|
||||
#case_sensitive = false
|
||||
#whole_word = false
|
||||
|
||||
#[net_filter]
|
||||
#is_list_ignored = true
|
||||
#list = ["virbr0.*"]
|
||||
#regex = true
|
||||
#case_sensitive = false
|
||||
#whole_word = false
|
|
@ -0,0 +1,49 @@
|
|||
#!/bin/sh
|
||||
# Running events
|
||||
# ----------------------------------------------------------------------------
|
||||
xsetroot -cursor_name left_ptr
|
||||
picom --experimental-backends &
|
||||
polybar example &
|
||||
light -S 75
|
||||
nitrogen --restore &
|
||||
betterlockscreen -u ~/Pictures/wallpapers/astronaut-watching-sunset-on-mars.jpg --blur 0.45 --display 1 --span &
|
||||
/usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1 &
|
||||
dunst -config ~/.config/dunst/dunstrc &
|
||||
/home/q/bin/battery &
|
||||
# ----------------------------------------------------------------------------
|
||||
|
||||
pgrep -x sxhkd > /dev/null || sxhkd &
|
||||
bspc monitor -d
|
||||
|
||||
# Smart Gaps
|
||||
bspc config single_monocle true
|
||||
bspc config gapless_monocle true
|
||||
|
||||
# Gaps
|
||||
bspc config border_width 2
|
||||
bspc config window_gap 8
|
||||
|
||||
# Set color border
|
||||
bspc config focused_border_color '#BB9AF7'
|
||||
bspc config active_border_color '#0C1115'
|
||||
bspc config normal_border_color '#0C1115'
|
||||
|
||||
|
||||
bspc config split_ratio 1.5
|
||||
bspc config borderless_monocle true
|
||||
bspc config gapless_monocle true
|
||||
|
||||
bspc config focus_follows_pointer true
|
||||
bspc config pointer_modifier super
|
||||
|
||||
# Set floating window size
|
||||
bspc rule --add kitty rectangle=750x500+400+200
|
||||
|
||||
# Configure allways floating window
|
||||
bspc rule -a KotatogramDesktop state=floating follow=off rectangle=666x823+8-26 desktop='^2'
|
||||
bspc rule -a Steam state=floating follow=off rectangle=1105x777+226-57
|
||||
bspc rule -a spotify state=floatig follow=off rectangle=1492x848+53-13
|
||||
bspc rule -a Nitrogen state=floating follow=off rectangle=712x563+429+157
|
||||
bspc rule -a mpv state=floating follow=off rectangle=800x450+560+315
|
||||
bspc rule -a virt-manager state=floating follow=off rectangle=900x600
|
||||
bspc rule -a keepassxc state=floating follow=off rectangle=900x900 desktop='^3'
|
|
@ -0,0 +1,456 @@
|
|||
# See dunst(5) for all configuration options
|
||||
|
||||
[global]
|
||||
### Display ###
|
||||
|
||||
# Which monitor should the notifications be displayed on.
|
||||
monitor = 0
|
||||
|
||||
# Display notification on focused monitor. Possible modes are:
|
||||
# mouse: follow mouse pointer
|
||||
# keyboard: follow window with keyboard focus
|
||||
# none: don't follow anything
|
||||
#
|
||||
# "keyboard" needs a window manager that exports the
|
||||
# _NET_ACTIVE_WINDOW property.
|
||||
# This should be the case for almost all modern window managers.
|
||||
#
|
||||
# If this option is set to mouse or keyboard, the monitor option
|
||||
# will be ignored.
|
||||
follow = none
|
||||
|
||||
### Geometry ###
|
||||
|
||||
# dynamic width from 0 to 300
|
||||
# width = (0, 300)
|
||||
# constant width of 300
|
||||
width = (111,444)
|
||||
|
||||
# The maximum height of a single notification, excluding the frame.
|
||||
height = 222
|
||||
|
||||
# Position the notification in the top right corner
|
||||
origin = top-right
|
||||
|
||||
# Offset from the origin
|
||||
offset = 10x50
|
||||
|
||||
# Scale factor. It is auto-detected if value is 0.
|
||||
scale = 0
|
||||
|
||||
# Maximum number of notification (0 means no limit)
|
||||
notification_limit = 0
|
||||
|
||||
### Progress bar ###
|
||||
|
||||
# Turn on the progess bar. It appears when a progress hint is passed with
|
||||
# for example dunstify -h int:value:12
|
||||
progress_bar = true
|
||||
|
||||
# Set the progress bar height. This includes the frame, so make sure
|
||||
# it's at least twice as big as the frame width.
|
||||
progress_bar_height = 10
|
||||
|
||||
# Set the frame width of the progress bar
|
||||
progress_bar_frame_width = 1
|
||||
|
||||
# Set the minimum width for the progress bar
|
||||
progress_bar_min_width = 150
|
||||
|
||||
# Set the maximum width for the progress bar
|
||||
progress_bar_max_width = 300
|
||||
|
||||
# Show how many messages are currently hidden (because of
|
||||
# notification_limit).
|
||||
indicate_hidden = yes
|
||||
|
||||
# The transparency of the window. Range: [0; 100].
|
||||
# This option will only work if a compositing window manager is
|
||||
# present (e.g. xcompmgr, compiz, etc.). (X11 only)
|
||||
transparency = 0
|
||||
|
||||
# Draw a line of "separator_height" pixel height between two
|
||||
# notifications.
|
||||
# Set to 0 to disable.
|
||||
# If gap_size is greater than 0, this setting will be ignored.
|
||||
separator_height = 2
|
||||
|
||||
# Padding between text and separator.
|
||||
padding = 8
|
||||
|
||||
# Horizontal padding.
|
||||
horizontal_padding = 8
|
||||
|
||||
# Padding between text and icon.
|
||||
text_icon_padding = 0
|
||||
|
||||
# Defines width in pixels of frame around the notification window.
|
||||
# Set to 0 to disable.
|
||||
frame_width = 3
|
||||
|
||||
# Defines color of the frame around the notification window.
|
||||
frame_color = "#16161E"
|
||||
|
||||
# Size of gap to display between notifications - requires a compositor.
|
||||
# If value is greater than 0, separator_height will be ignored and a border
|
||||
# of size frame_width will be drawn around each notification instead.
|
||||
# Click events on gaps do not currently propagate to applications below.
|
||||
gap_size = 0
|
||||
|
||||
# Define a color for the separator.
|
||||
# possible values are:
|
||||
# * auto: dunst tries to find a color fitting to the background;
|
||||
# * foreground: use the same color as the foreground;
|
||||
# * frame: use the same color as the frame;
|
||||
# * anything else will be interpreted as a X color.
|
||||
separator_color = frame
|
||||
|
||||
# Sort messages by urgency.
|
||||
sort = yes
|
||||
|
||||
# Don't remove messages, if the user is idle (no mouse or keyboard input)
|
||||
# for longer than idle_threshold seconds.
|
||||
# Set to 0 to disable.
|
||||
# A client can set the 'transient' hint to bypass this. See the rules
|
||||
# section for how to disable this if necessary
|
||||
# idle_threshold = 120
|
||||
|
||||
### Text ###
|
||||
|
||||
font = Iosevka 10
|
||||
|
||||
# The spacing between lines. If the height is smaller than the
|
||||
# font height, it will get raised to the font height.
|
||||
line_height = 0
|
||||
|
||||
# Possible values are:
|
||||
# full: Allow a small subset of html markup in notifications:
|
||||
# <b>bold</b>
|
||||
# <i>italic</i>
|
||||
# <s>strikethrough</s>
|
||||
# <u>underline</u>
|
||||
#
|
||||
# For a complete reference see
|
||||
# <https://docs.gtk.org/Pango/pango_markup.html>.
|
||||
#
|
||||
# strip: This setting is provided for compatibility with some broken
|
||||
# clients that send markup even though it's not enabled on the
|
||||
# server. Dunst will try to strip the markup but the parsing is
|
||||
# simplistic so using this option outside of matching rules for
|
||||
# specific applications *IS GREATLY DISCOURAGED*.
|
||||
#
|
||||
# no: Disable markup parsing, incoming notifications will be treated as
|
||||
# plain text. Dunst will not advertise that it has the body-markup
|
||||
# capability if this is set as a global setting.
|
||||
#
|
||||
# It's important to note that markup inside the format option will be parsed
|
||||
# regardless of what this is set to.
|
||||
markup = full
|
||||
|
||||
# The format of the message. Possible variables are:
|
||||
# %a appname
|
||||
# %s summary
|
||||
# %b body
|
||||
# %i iconname (including its path)
|
||||
# %I iconname (without its path)
|
||||
# %p progress value if set ([ 0%] to [100%]) or nothing
|
||||
# %n progress value if set without any extra characters
|
||||
# %% Literal %
|
||||
# Markup is allowed
|
||||
format = "<b>%s</b>\n%b"
|
||||
|
||||
# Alignment of message text.
|
||||
# Possible values are "left", "center" and "right".
|
||||
alignment = left
|
||||
|
||||
# Vertical alignment of message text and icon.
|
||||
# Possible values are "top", "center" and "bottom".
|
||||
vertical_alignment = center
|
||||
|
||||
# Show age of message if message is older than show_age_threshold
|
||||
# seconds.
|
||||
# Set to -1 to disable.
|
||||
show_age_threshold = 60
|
||||
|
||||
# Specify where to make an ellipsis in long lines.
|
||||
# Possible values are "start", "middle" and "end".
|
||||
ellipsize = middle
|
||||
|
||||
# Ignore newlines '\n' in notifications.
|
||||
ignore_newline = no
|
||||
|
||||
# Stack together notifications with the same content
|
||||
stack_duplicates = true
|
||||
|
||||
# Hide the count of stacked notifications with the same content
|
||||
hide_duplicate_count = false
|
||||
|
||||
# Display indicators for URLs (U) and actions (A).
|
||||
show_indicators = yes
|
||||
|
||||
### Icons ###
|
||||
|
||||
# Recursive icon lookup. You can set a single theme, instead of having to
|
||||
# define all lookup paths.
|
||||
enable_recursive_icon_lookup = true
|
||||
|
||||
# Set icon theme (only used for recursive icon lookup)
|
||||
icon_theme = Adwaita
|
||||
# You can also set multiple icon themes, with the leftmost one being used first.
|
||||
# icon_theme = "Adwaita, breeze"
|
||||
|
||||
# Align icons left/right/top/off
|
||||
icon_position = left
|
||||
|
||||
# Scale small icons up to this size, set to 0 to disable. Helpful
|
||||
# for e.g. small files or high-dpi screens. In case of conflict,
|
||||
# max_icon_size takes precedence over this.
|
||||
min_icon_size = 32
|
||||
|
||||
# Scale larger icons down to this size, set to 0 to disable
|
||||
max_icon_size = 128
|
||||
|
||||
# Paths to default icons (only neccesary when not using recursive icon lookup)
|
||||
icon_path = /usr/share/icons/gnome/16x16/status/:/usr/share/icons/gnome/16x16/devices/
|
||||
|
||||
### History ###
|
||||
|
||||
# Should a notification popped up from history be sticky or timeout
|
||||
# as if it would normally do.
|
||||
sticky_history = yes
|
||||
|
||||
# Maximum amount of notifications kept in history
|
||||
history_length = 20
|
||||
|
||||
### Misc/Advanced ###
|
||||
|
||||
# dmenu path.
|
||||
dmenu = /usr/bin/dmenu -p dunst:
|
||||
|
||||
# Browser for opening urls in context menu.
|
||||
browser = /usr/bin/xdg-open
|
||||
|
||||
# Always run rule-defined scripts, even if the notification is suppressed
|
||||
always_run_script = true
|
||||
|
||||
# Define the title of the windows spawned by dunst
|
||||
title = Dunst
|
||||
|
||||
# Define the class of the windows spawned by dunst
|
||||
class = Dunst
|
||||
|
||||
# Define the corner radius of the notification window
|
||||
# in pixel size. If the radius is 0, you have no rounded
|
||||
# corners.
|
||||
# The radius will be automatically lowered if it exceeds half of the
|
||||
# notification height to avoid clipping text and/or icons.
|
||||
corner_radius = 5
|
||||
|
||||
# Ignore the dbus closeNotification message.
|
||||
# Useful to enforce the timeout set by dunst configuration. Without this
|
||||
# parameter, an application may close the notification sent before the
|
||||
# user defined timeout.
|
||||
ignore_dbusclose = false
|
||||
|
||||
### Wayland ###
|
||||
# These settings are Wayland-specific. They have no effect when using X11
|
||||
|
||||
# Uncomment this if you want to let notications appear under fullscreen
|
||||
# applications (default: overlay)
|
||||
# layer = top
|
||||
|
||||
# Set this to true to use X11 output on Wayland.
|
||||
force_xwayland = false
|
||||
|
||||
### Legacy
|
||||
|
||||
# Use the Xinerama extension instead of RandR for multi-monitor support.
|
||||
# This setting is provided for compatibility with older nVidia drivers that
|
||||
# do not support RandR and using it on systems that support RandR is highly
|
||||
# discouraged.
|
||||
#
|
||||
# By enabling this setting dunst will not be able to detect when a monitor
|
||||
# is connected or disconnected which might break follow mode if the screen
|
||||
# layout changes.
|
||||
force_xinerama = false
|
||||
|
||||
### mouse
|
||||
|
||||
# Defines list of actions for each mouse event
|
||||
# Possible values are:
|
||||
# * none: Don't do anything.
|
||||
# * do_action: Invoke the action determined by the action_name rule. If there is no
|
||||
# such action, open the context menu.
|
||||
# * open_url: If the notification has exactly one url, open it. If there are multiple
|
||||
# ones, open the context menu.
|
||||
# * close_current: Close current notification.
|
||||
# * close_all: Close all notifications.
|
||||
# * context: Open context menu for the notification.
|
||||
# * context_all: Open context menu for all notifications.
|
||||
# These values can be strung together for each mouse event, and
|
||||
# will be executed in sequence.
|
||||
mouse_left_click = close_current
|
||||
mouse_middle_click = do_action, close_current
|
||||
mouse_right_click = close_all
|
||||
|
||||
# Experimental features that may or may not work correctly. Do not expect them
|
||||
# to have a consistent behaviour across releases.
|
||||
[experimental]
|
||||
# Calculate the dpi to use on a per-monitor basis.
|
||||
# If this setting is enabled the Xft.dpi value will be ignored and instead
|
||||
# dunst will attempt to calculate an appropriate dpi value for each monitor
|
||||
# using the resolution and physical size. This might be useful in setups
|
||||
# where there are multiple screens with very different dpi values.
|
||||
per_monitor_dpi = false
|
||||
|
||||
|
||||
[urgency_low]
|
||||
# IMPORTANT: colors have to be defined in quotation marks.
|
||||
# Otherwise the "#" and following would be interpreted as a comment.
|
||||
background = "#1A1B26"
|
||||
foreground = "#A9B1D6"
|
||||
highlight = "#A9B1D6"
|
||||
timeout = 6
|
||||
# Icon for notifications with low urgency, uncomment to enable
|
||||
# default_icon = ~/.config/dunst/icons/notification.png
|
||||
|
||||
[urgency_normal]
|
||||
background = "#1A1B26"
|
||||
foreground = "#A9B1D6"
|
||||
highlight = "#A9B1D6"
|
||||
timeout = 6
|
||||
# Icon for notifications with normal urgency, uncomment to enable
|
||||
default_icon = /home/q/.config/dunst/icons/notification.png
|
||||
|
||||
[urgency_critical]
|
||||
background = "#1A1B26"
|
||||
foreground = "#A9B1D6"
|
||||
highlight = "#A9B1D6"
|
||||
|
||||
timeout = 10
|
||||
# Icon for notifications with critical urgency, uncomment to enable
|
||||
# default_icon = ~/.config/dunst/icons/notification.png
|
||||
|
||||
# Every section that isn't one of the above is interpreted as a rules to
|
||||
# override settings for certain messages.
|
||||
#
|
||||
# Messages can be matched by
|
||||
# appname (discouraged, see desktop_entry)
|
||||
# body
|
||||
# category
|
||||
# desktop_entry
|
||||
# icon
|
||||
# match_transient
|
||||
# msg_urgency
|
||||
# stack_tag
|
||||
# summary
|
||||
#
|
||||
# and you can override the
|
||||
# background
|
||||
# foreground
|
||||
# format
|
||||
# frame_color
|
||||
# fullscreen
|
||||
# new_icon
|
||||
# set_stack_tag
|
||||
# set_transient
|
||||
# set_category
|
||||
# timeout
|
||||
# urgency
|
||||
# icon_position
|
||||
# skip_display
|
||||
# history_ignore
|
||||
# action_name
|
||||
# word_wrap
|
||||
# ellipsize
|
||||
# alignment
|
||||
# hide_text
|
||||
#
|
||||
# Shell-like globbing will get expanded.
|
||||
#
|
||||
# Instead of the appname filter, it's recommended to use the desktop_entry filter.
|
||||
# GLib based applications export their desktop-entry name. In comparison to the appname,
|
||||
# the desktop-entry won't get localized.
|
||||
#
|
||||
# SCRIPTING
|
||||
# You can specify a script that gets run when the rule matches by
|
||||
# setting the "script" option.
|
||||
# The script will be called as follows:
|
||||
# script appname summary body icon urgency
|
||||
# where urgency can be "LOW", "NORMAL" or "CRITICAL".
|
||||
#
|
||||
# NOTE: It might be helpful to run dunst -print in a terminal in order
|
||||
# to find fitting options for rules.
|
||||
|
||||
# Disable the transient hint so that idle_threshold cannot be bypassed from the
|
||||
# client
|
||||
#[transient_disable]
|
||||
# match_transient = yes
|
||||
# set_transient = no
|
||||
#
|
||||
# Make the handling of transient notifications more strict by making them not
|
||||
# be placed in history.
|
||||
#[transient_history_ignore]
|
||||
# match_transient = yes
|
||||
# history_ignore = yes
|
||||
|
||||
# fullscreen values
|
||||
# show: show the notifications, regardless if there is a fullscreen window opened
|
||||
# delay: displays the new notification, if there is no fullscreen window active
|
||||
# If the notification is already drawn, it won't get undrawn.
|
||||
# pushback: same as delay, but when switching into fullscreen, the notification will get
|
||||
# withdrawn from screen again and will get delayed like a new notification
|
||||
#[fullscreen_delay_everything]
|
||||
# fullscreen = delay
|
||||
#[fullscreen_show_critical]
|
||||
# msg_urgency = critical
|
||||
# fullscreen = show
|
||||
|
||||
#[espeak]
|
||||
# summary = "*"
|
||||
# script = dunst_espeak.sh
|
||||
|
||||
#[script-test]
|
||||
# summary = "*script*"
|
||||
# script = dunst_test.sh
|
||||
|
||||
#[ignore]
|
||||
# # This notification will not be displayed
|
||||
# summary = "foobar"
|
||||
# skip_display = true
|
||||
|
||||
#[history-ignore]
|
||||
# # This notification will not be saved in history
|
||||
# summary = "foobar"
|
||||
# history_ignore = yes
|
||||
|
||||
#[skip-display]
|
||||
# # This notification will not be displayed, but will be included in the history
|
||||
# summary = "foobar"
|
||||
# skip_display = yes
|
||||
|
||||
#[signed_on]
|
||||
# appname = Pidgin
|
||||
# summary = "*signed on*"
|
||||
# urgency = low
|
||||
#
|
||||
#[signed_off]
|
||||
# appname = Pidgin
|
||||
# summary = *signed off*
|
||||
# urgency = low
|
||||
#
|
||||
#[says]
|
||||
# appname = Pidgin
|
||||
# summary = *says*
|
||||
# urgency = critical
|
||||
#
|
||||
#[twitter]
|
||||
# appname = Pidgin
|
||||
# summary = *twitter.com*
|
||||
# urgency = normal
|
||||
#
|
||||
#[stack-volumes]
|
||||
# appname = "some_volume_notifiers"
|
||||
# set_stack_tag = "volume"
|
||||
#
|
||||
# vim: ft=cfg
|
After Width: | Height: | Size: 2.2 KiB |
After Width: | Height: | Size: 2.7 KiB |
After Width: | Height: | Size: 2.2 KiB |
After Width: | Height: | Size: 2.1 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 1.9 KiB |
After Width: | Height: | Size: 2.1 KiB |
After Width: | Height: | Size: 4.7 KiB |
After Width: | Height: | Size: 2.6 KiB |
|
@ -0,0 +1,7 @@
|
|||
complete --command fisher --exclusive --long help --description "Print help"
|
||||
complete --command fisher --exclusive --long version --description "Print version"
|
||||
complete --command fisher --exclusive --condition __fish_use_subcommand --arguments install --description "Install plugins"
|
||||
complete --command fisher --exclusive --condition __fish_use_subcommand --arguments update --description "Update installed plugins"
|
||||
complete --command fisher --exclusive --condition __fish_use_subcommand --arguments remove --description "Remove installed plugins"
|
||||
complete --command fisher --exclusive --condition __fish_use_subcommand --arguments list --description "List installed plugins matching regex"
|
||||
complete --command fisher --exclusive --condition "__fish_seen_subcommand_from update remove" --arguments "(fisher list)"
|
|
@ -0,0 +1,21 @@
|
|||
complete --command nvm --exclusive
|
||||
complete --command nvm --exclusive --long version --description "Print version"
|
||||
complete --command nvm --exclusive --long help --description "Print help"
|
||||
complete --command nvm --long silent --description "Suppress standard output"
|
||||
|
||||
complete --command nvm --exclusive --condition __fish_use_subcommand --arguments install --description "Download and activate the specified Node version"
|
||||
complete --command nvm --exclusive --condition __fish_use_subcommand --arguments use --description "Activate a version in the current shell"
|
||||
complete --command nvm --exclusive --condition __fish_use_subcommand --arguments list --description "List installed versions"
|
||||
complete --command nvm --exclusive --condition __fish_use_subcommand --arguments list-remote --description "List versions available to install matching optional regex"
|
||||
complete --command nvm --exclusive --condition __fish_use_subcommand --arguments current --description "Print the currently-active version"
|
||||
complete --command nvm --exclusive --condition "__fish_seen_subcommand_from install" --arguments "(
|
||||
test -e $nvm_data && string split ' ' <$nvm_data/.index
|
||||
)"
|
||||
complete --command nvm --exclusive --condition "__fish_seen_subcommand_from use" --arguments "(_nvm_list | string split ' ')"
|
||||
complete --command nvm --exclusive --condition __fish_use_subcommand --arguments uninstall --description "Uninstall a version"
|
||||
complete --command nvm --exclusive --condition "__fish_seen_subcommand_from uninstall" --arguments "(
|
||||
_nvm_list | string split ' ' | string replace system ''
|
||||
)"
|
||||
complete --command nvm --exclusive --condition "__fish_seen_subcommand_from use uninstall" --arguments "(
|
||||
set --query nvm_default_version && echo default
|
||||
)"
|
|
@ -0,0 +1,28 @@
|
|||
function _nvm_install --on-event nvm_install
|
||||
set --query nvm_mirror || set --universal nvm_mirror https://nodejs.org/dist
|
||||
set --query XDG_DATA_HOME || set --local XDG_DATA_HOME ~/.local/share
|
||||
set --universal nvm_data $XDG_DATA_HOME/nvm
|
||||
|
||||
test ! -d $nvm_data && command mkdir -p $nvm_data
|
||||
echo "Downloading the Node distribution index..." 2>/dev/null
|
||||
_nvm_index_update
|
||||
end
|
||||
|
||||
function _nvm_update --on-event nvm_update
|
||||
set --query nvm_mirror || set --universal nvm_mirror https://nodejs.org/dist
|
||||
set --query XDG_DATA_HOME || set --local XDG_DATA_HOME ~/.local/share
|
||||
set --universal nvm_data $XDG_DATA_HOME/nvm
|
||||
end
|
||||
|
||||
function _nvm_uninstall --on-event nvm_uninstall
|
||||
command rm -rf $nvm_data
|
||||
|
||||
set --query nvm_current_version && _nvm_version_deactivate $nvm_current_version
|
||||
|
||||
set --names | string replace --filter --regex -- "^nvm" "set --erase nvm" | source
|
||||
functions --erase (functions --all | string match --entire --regex -- "^_nvm_")
|
||||
end
|
||||
|
||||
if status is-interactive && set --query nvm_default_version && ! set --query nvm_current_version
|
||||
nvm use --silent $nvm_default_version
|
||||
end
|
|
@ -0,0 +1,20 @@
|
|||
if status is-interactive
|
||||
alias ls="lsd"
|
||||
alias nv="nvim"
|
||||
|
||||
alias gc="git clone"
|
||||
alias gst="git status"
|
||||
alias bat="bat -p"
|
||||
|
||||
alias recscreen="ffmpeg -f x11grab -y -framerate 30 -s 1600x900 -i :0.0 -c:v libx264 -preset superfast -crf 18 "Video/$(date +'%Y-%m-%d_%H:%M').mp4""
|
||||
|
||||
alias la="lsd -la"
|
||||
|
||||
set -x PF_INFO "ascii title os kernel wm shell pkgs memory"
|
||||
|
||||
set srcdir "$HOME/.cache/"
|
||||
set pkgdir "$HOME/.npm/"
|
||||
alias npm="npm --cache $srcir/npm-cache"
|
||||
set fish_greeting
|
||||
# Commands to run in interactive sessions can go here
|
||||
end
|
|
@ -0,0 +1,2 @@
|
|||
jorgebucaran/fisher
|
||||
jorgebucaran/nvm.fish
|
|
@ -0,0 +1,48 @@
|
|||
# This file contains fish universal variable definitions.
|
||||
# VERSION: 3.0
|
||||
SETUVAR __fish_initialized:3400
|
||||
SETUVAR _fisher_jorgebucaran_2F_fisher_files:\x7e/\x2econfig/fish/functions/fisher\x2efish\x1e\x7e/\x2econfig/fish/completions/fisher\x2efish
|
||||
SETUVAR _fisher_jorgebucaran_2F_nvm_2E_fish_files:\x7e/\x2econfig/fish/functions/_nvm_index_update\x2efish\x1e\x7e/\x2econfig/fish/functions/_nvm_list\x2efish\x1e\x7e/\x2econfig/fish/functions/_nvm_version_activate\x2efish\x1e\x7e/\x2econfig/fish/functions/_nvm_version_deactivate\x2efish\x1e\x7e/\x2econfig/fish/functions/nvm\x2efish\x1e\x7e/\x2econfig/fish/conf\x2ed/nvm\x2efish\x1e\x7e/\x2econfig/fish/completions/nvm\x2efish
|
||||
SETUVAR _fisher_plugins:jorgebucaran/fisher\x1ejorgebucaran/nvm\x2efish
|
||||
SETUVAR _fisher_upgraded_to_4_4:\x1d
|
||||
SETUVAR fish_color_autosuggestion:4D5566
|
||||
SETUVAR fish_color_cancel:\x2d\x2dreverse
|
||||
SETUVAR fish_color_command:39BAE6
|
||||
SETUVAR fish_color_comment:626A73
|
||||
SETUVAR fish_color_cwd:59C2FF
|
||||
SETUVAR fish_color_cwd_root:red
|
||||
SETUVAR fish_color_end:F29668
|
||||
SETUVAR fish_color_error:FF3333
|
||||
SETUVAR fish_color_escape:95E6CB
|
||||
SETUVAR fish_color_history_current:\x2d\x2dbold
|
||||
SETUVAR fish_color_host:normal
|
||||
SETUVAR fish_color_host_remote:\x1d
|
||||
SETUVAR fish_color_keyword:\x1d
|
||||
SETUVAR fish_color_match:F07178
|
||||
SETUVAR fish_color_normal:B3B1AD
|
||||
SETUVAR fish_color_operator:E6B450
|
||||
SETUVAR fish_color_option:\x1d
|
||||
SETUVAR fish_color_param:B3B1AD
|
||||
SETUVAR fish_color_quote:C2D94C
|
||||
SETUVAR fish_color_redirection:FFEE99
|
||||
SETUVAR fish_color_search_match:\x2d\x2dbackground\x3dE6B450
|
||||
SETUVAR fish_color_selection:\x2d\x2dbackground\x3dE6B450
|
||||
SETUVAR fish_color_status:red
|
||||
SETUVAR fish_color_user:brgreen
|
||||
SETUVAR fish_color_valid_path:\x2d\x2dunderline
|
||||
SETUVAR fish_key_bindings:fish_default_key_bindings
|
||||
SETUVAR fish_pager_color_background:\x1d
|
||||
SETUVAR fish_pager_color_completion:normal
|
||||
SETUVAR fish_pager_color_description:B3A06D
|
||||
SETUVAR fish_pager_color_prefix:normal\x1e\x2d\x2dbold\x1e\x2d\x2dunderline
|
||||
SETUVAR fish_pager_color_progress:brwhite\x1e\x2d\x2dbackground\x3dcyan
|
||||
SETUVAR fish_pager_color_secondary_background:\x1d
|
||||
SETUVAR fish_pager_color_secondary_completion:\x1d
|
||||
SETUVAR fish_pager_color_secondary_description:\x1d
|
||||
SETUVAR fish_pager_color_secondary_prefix:\x1d
|
||||
SETUVAR fish_pager_color_selected_background:\x2d\x2dbackground\x3dE6B450
|
||||
SETUVAR fish_pager_color_selected_completion:\x1d
|
||||
SETUVAR fish_pager_color_selected_description:\x1d
|
||||
SETUVAR fish_pager_color_selected_prefix:\x1d
|
||||
SETUVAR nvm_data:/home/q/\x2elocal/share/nvm
|
||||
SETUVAR nvm_mirror:https\x3a//nodejs\x2eorg/dist
|
|
@ -0,0 +1,20 @@
|
|||
function _nvm_index_update
|
||||
test ! -d $nvm_data && command mkdir -p $nvm_data
|
||||
|
||||
set --local index $nvm_data/.index
|
||||
|
||||
if not command curl --location --silent $nvm_mirror/index.tab >$index.temp
|
||||
command rm -f $index.temp
|
||||
echo "nvm: Can't update index, host unavailable: \"$nvm_mirror\"" >&2
|
||||
return 1
|
||||
end
|
||||
|
||||
command awk -v OFS=\t '
|
||||
/v0.9.12/ { exit } # Unsupported
|
||||
NR > 1 {
|
||||
print $1 (NR == 2 ? " latest" : $10 != "-" ? " lts/" tolower($10) : "")
|
||||
}
|
||||
' $index.temp >$index
|
||||
|
||||
command rm -f $index.temp
|
||||
end
|
|
@ -0,0 +1,11 @@
|
|||
function _nvm_list
|
||||
set --local versions $nvm_data/*
|
||||
set --query versions[1] &&
|
||||
string match --entire --regex -- (string match --regex -- "v\d.+" $versions |
|
||||
string escape --style=regex |
|
||||
string join "|"
|
||||
) <$nvm_data/.index
|
||||
|
||||
command --all node |
|
||||
string match --quiet --invert --regex -- "^$nvm_data" && echo system
|
||||
end
|
|
@ -0,0 +1,4 @@
|
|||
function _nvm_version_activate --argument-names ver
|
||||
set --global --export nvm_current_version $ver
|
||||
set --prepend PATH $nvm_data/$ver/bin
|
||||
end
|
|
@ -0,0 +1,5 @@
|
|||
function _nvm_version_deactivate --argument-names ver
|
||||
test "$nvm_current_version" = "$ver" && set --erase nvm_current_version
|
||||
set --local index (contains --index -- $nvm_data/$ver/bin $PATH) &&
|
||||
set --erase PATH[$index]
|
||||
end
|
|
@ -0,0 +1,56 @@
|
|||
function fish_prompt --description 'Write out the prompt'
|
||||
set -l last_status $status
|
||||
|
||||
prompt_login
|
||||
|
||||
echo -n ':'
|
||||
|
||||
# PWD
|
||||
set_color $fish_color_cwd
|
||||
echo -n (prompt_pwd)
|
||||
set_color normal
|
||||
|
||||
set -q __fish_git_prompt_showdirtystate
|
||||
or set -g __fish_git_prompt_showdirtystate 1
|
||||
set -q __fish_git_prompt_showuntrackedfiles
|
||||
or set -g __fish_git_prompt_showuntrackedfiles 1
|
||||
set -q __fish_git_prompt_showcolorhints
|
||||
or set -g __fish_git_prompt_showcolorhints 1
|
||||
set -q __fish_git_prompt_color_untrackedfiles
|
||||
or set -g __fish_git_prompt_color_untrackedfiles yellow
|
||||
set -q __fish_git_prompt_char_untrackedfiles
|
||||
or set -g __fish_git_prompt_char_untrackedfiles '?'
|
||||
set -q __fish_git_prompt_color_invalidstate
|
||||
or set -g __fish_git_prompt_color_invalidstate red
|
||||
set -q __fish_git_prompt_char_invalidstate
|
||||
or set -g __fish_git_prompt_char_invalidstate '!'
|
||||
set -q __fish_git_prompt_color_dirtystate
|
||||
or set -g __fish_git_prompt_color_dirtystate blue
|
||||
set -q __fish_git_prompt_char_dirtystate
|
||||
or set -g __fish_git_prompt_char_dirtystate '*'
|
||||
set -q __fish_git_prompt_char_stagedstate
|
||||
or set -g __fish_git_prompt_char_stagedstate '✚'
|
||||
set -q __fish_git_prompt_color_cleanstate
|
||||
or set -g __fish_git_prompt_color_cleanstate green
|
||||
set -q __fish_git_prompt_char_cleanstate
|
||||
or set -g __fish_git_prompt_char_cleanstate '✓'
|
||||
set -q __fish_git_prompt_color_stagedstate
|
||||
or set -g __fish_git_prompt_color_stagedstate yellow
|
||||
set -q __fish_git_prompt_color_branch_dirty
|
||||
or set -g __fish_git_prompt_color_branch_dirty red
|
||||
set -q __fish_git_prompt_color_branch_staged
|
||||
or set -g __fish_git_prompt_color_branch_staged yellow
|
||||
set -q __fish_git_prompt_color_branch
|
||||
or set -g __fish_git_prompt_color_branch green
|
||||
set -q __fish_git_prompt_char_stateseparator
|
||||
or set -g __fish_git_prompt_char_stateseparator '⚡'
|
||||
fish_vcs_prompt '|%s'
|
||||
echo
|
||||
|
||||
if not test $last_status -eq 0
|
||||
set_color $fish_color_error
|
||||
end
|
||||
|
||||
echo -n '➤ '
|
||||
set_color normal
|
||||
end
|
|
@ -0,0 +1,240 @@
|
|||
function fisher --argument-names cmd --description "A plugin manager for Fish"
|
||||
set --query fisher_path || set --local fisher_path $__fish_config_dir
|
||||
set --local fisher_version 4.4.2
|
||||
set --local fish_plugins $__fish_config_dir/fish_plugins
|
||||
|
||||
switch "$cmd"
|
||||
case -v --version
|
||||
echo "fisher, version $fisher_version"
|
||||
case "" -h --help
|
||||
echo "Usage: fisher install <plugins...> Install plugins"
|
||||
echo " fisher remove <plugins...> Remove installed plugins"
|
||||
echo " fisher update <plugins...> Update installed plugins"
|
||||
echo " fisher update Update all installed plugins"
|
||||
echo " fisher list [<regex>] List installed plugins matching regex"
|
||||
echo "Options:"
|
||||
echo " -v or --version Print version"
|
||||
echo " -h or --help Print this help message"
|
||||
echo "Variables:"
|
||||
echo " \$fisher_path Plugin installation path. Default: $__fish_config_dir" | string replace --regex -- $HOME \~
|
||||
case ls list
|
||||
string match --entire --regex -- "$argv[2]" $_fisher_plugins
|
||||
case install update remove
|
||||
isatty || read --local --null --array stdin && set --append argv $stdin
|
||||
|
||||
set --local install_plugins
|
||||
set --local update_plugins
|
||||
set --local remove_plugins
|
||||
set --local arg_plugins $argv[2..-1]
|
||||
set --local old_plugins $_fisher_plugins
|
||||
set --local new_plugins
|
||||
|
||||
test -e $fish_plugins && set --local file_plugins (string match --regex -- '^[^\s]+$' <$fish_plugins)
|
||||
|
||||
if ! set --query argv[2]
|
||||
if test "$cmd" != update
|
||||
echo "fisher: Not enough arguments for command: \"$cmd\"" >&2 && return 1
|
||||
else if ! set --query file_plugins
|
||||
echo "fisher: \"$fish_plugins\" file not found: \"$cmd\"" >&2 && return 1
|
||||
end
|
||||
set arg_plugins $file_plugins
|
||||
end
|
||||
|
||||
for plugin in $arg_plugins
|
||||
set plugin (test -e "$plugin" && realpath $plugin || string lower -- $plugin)
|
||||
contains -- "$plugin" $new_plugins || set --append new_plugins $plugin
|
||||
end
|
||||
|
||||
if set --query argv[2]
|
||||
for plugin in $new_plugins
|
||||
if contains -- "$plugin" $old_plugins
|
||||
test "$cmd" = remove &&
|
||||
set --append remove_plugins $plugin ||
|
||||
set --append update_plugins $plugin
|
||||
else if test "$cmd" = install
|
||||
set --append install_plugins $plugin
|
||||
else
|
||||
echo "fisher: Plugin not installed: \"$plugin\"" >&2 && return 1
|
||||
end
|
||||
end
|
||||
else
|
||||
for plugin in $new_plugins
|
||||
contains -- "$plugin" $old_plugins &&
|
||||
set --append update_plugins $plugin ||
|
||||
set --append install_plugins $plugin
|
||||
end
|
||||
|
||||
for plugin in $old_plugins
|
||||
contains -- "$plugin" $new_plugins || set --append remove_plugins $plugin
|
||||
end
|
||||
end
|
||||
|
||||
set --local pid_list
|
||||
set --local source_plugins
|
||||
set --local fetch_plugins $update_plugins $install_plugins
|
||||
set --local fish_path (status fish-path)
|
||||
|
||||
echo (set_color --bold)fisher $cmd version $fisher_version(set_color normal)
|
||||
|
||||
for plugin in $fetch_plugins
|
||||
set --local source (command mktemp -d)
|
||||
set --append source_plugins $source
|
||||
|
||||
command mkdir -p $source/{completions,conf.d,themes,functions}
|
||||
|
||||
$fish_path --command "
|
||||
if test -e $plugin
|
||||
command cp -Rf $plugin/* $source
|
||||
else
|
||||
set temp (command mktemp -d)
|
||||
set repo (string split -- \@ $plugin) || set repo[2] HEAD
|
||||
|
||||
if set path (string replace --regex -- '^(https://)?gitlab.com/' '' \$repo[1])
|
||||
set name (string split -- / \$path)[-1]
|
||||
set url https://gitlab.com/\$path/-/archive/\$repo[2]/\$name-\$repo[2].tar.gz
|
||||
else
|
||||
set url https://api.github.com/repos/\$repo[1]/tarball/\$repo[2]
|
||||
end
|
||||
|
||||
echo Fetching (set_color --underline)\$url(set_color normal)
|
||||
|
||||
if curl --silent -L \$url | tar -xzC \$temp -f - 2>/dev/null
|
||||
command cp -Rf \$temp/*/* $source
|
||||
else
|
||||
echo fisher: Invalid plugin name or host unavailable: \\\"$plugin\\\" >&2
|
||||
command rm -rf $source
|
||||
end
|
||||
|
||||
command rm -rf \$temp
|
||||
end
|
||||
|
||||
set files $source/* && string match --quiet --regex -- .+\.fish\\\$ \$files
|
||||
" &
|
||||
|
||||
set --append pid_list (jobs --last --pid)
|
||||
end
|
||||
|
||||
wait $pid_list 2>/dev/null
|
||||
|
||||
for plugin in $fetch_plugins
|
||||
if set --local source $source_plugins[(contains --index -- "$plugin" $fetch_plugins)] && test ! -e $source
|
||||
if set --local index (contains --index -- "$plugin" $install_plugins)
|
||||
set --erase install_plugins[$index]
|
||||
else
|
||||
set --erase update_plugins[(contains --index -- "$plugin" $update_plugins)]
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
for plugin in $update_plugins $remove_plugins
|
||||
if set --local index (contains --index -- "$plugin" $_fisher_plugins)
|
||||
set --local plugin_files_var _fisher_(string escape --style=var -- $plugin)_files
|
||||
|
||||
if contains -- "$plugin" $remove_plugins
|
||||
for name in (string replace --filter --regex -- '.+/conf\.d/([^/]+)\.fish$' '$1' $$plugin_files_var)
|
||||
emit {$name}_uninstall
|
||||
end
|
||||
printf "%s\n" Removing\ (set_color red --bold)$plugin(set_color normal) " "$$plugin_files_var | string replace -- \~ ~
|
||||
set --erase _fisher_plugins[$index]
|
||||
end
|
||||
|
||||
command rm -rf (string replace -- \~ ~ $$plugin_files_var)
|
||||
|
||||
functions --erase (string replace --filter --regex -- '.+/functions/([^/]+)\.fish$' '$1' $$plugin_files_var)
|
||||
|
||||
for name in (string replace --filter --regex -- '.+/completions/([^/]+)\.fish$' '$1' $$plugin_files_var)
|
||||
complete --erase --command $name
|
||||
end
|
||||
|
||||
set --erase $plugin_files_var
|
||||
end
|
||||
end
|
||||
|
||||
if set --query update_plugins[1] || set --query install_plugins[1]
|
||||
command mkdir -p $fisher_path/{functions,themes,conf.d,completions}
|
||||
end
|
||||
|
||||
for plugin in $update_plugins $install_plugins
|
||||
set --local source $source_plugins[(contains --index -- "$plugin" $fetch_plugins)]
|
||||
set --local files $source/{functions,themes,conf.d,completions}/*
|
||||
|
||||
if set --local index (contains --index -- $plugin $install_plugins)
|
||||
set --local user_files $fisher_path/{functions,themes,conf.d,completions}/*
|
||||
set --local conflict_files
|
||||
|
||||
for file in (string replace -- $source/ $fisher_path/ $files)
|
||||
contains -- $file $user_files && set --append conflict_files $file
|
||||
end
|
||||
|
||||
if set --query conflict_files[1] && set --erase install_plugins[$index]
|
||||
echo -s "fisher: Cannot install \"$plugin\": please remove or move conflicting files first:" \n" "$conflict_files >&2
|
||||
continue
|
||||
end
|
||||
end
|
||||
|
||||
for file in (string replace -- $source/ "" $files)
|
||||
command cp -Rf $source/$file $fisher_path/$file
|
||||
end
|
||||
|
||||
set --local plugin_files_var _fisher_(string escape --style=var -- $plugin)_files
|
||||
|
||||
set --query files[1] && set --universal $plugin_files_var (string replace -- $source $fisher_path $files | string replace -- ~ \~)
|
||||
|
||||
contains -- $plugin $_fisher_plugins || set --universal --append _fisher_plugins $plugin
|
||||
contains -- $plugin $install_plugins && set --local event install || set --local event update
|
||||
|
||||
printf "%s\n" Installing\ (set_color --bold)$plugin(set_color normal) " "$$plugin_files_var | string replace -- \~ ~
|
||||
|
||||
for file in (string match --regex -- '.+/[^/]+\.fish$' $$plugin_files_var | string replace -- \~ ~)
|
||||
source $file
|
||||
if set --local name (string replace --regex -- '.+conf\.d/([^/]+)\.fish$' '$1' $file)
|
||||
emit {$name}_$event
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
command rm -rf $source_plugins
|
||||
|
||||
if set --query _fisher_plugins[1]
|
||||
set --local commit_plugins
|
||||
|
||||
for plugin in $file_plugins
|
||||
contains -- (string lower -- $plugin) (string lower -- $_fisher_plugins) && set --append commit_plugins $plugin
|
||||
end
|
||||
|
||||
for plugin in $_fisher_plugins
|
||||
contains -- (string lower -- $plugin) (string lower -- $commit_plugins) || set --append commit_plugins $plugin
|
||||
end
|
||||
|
||||
printf "%s\n" $commit_plugins >$fish_plugins
|
||||
else
|
||||
set --erase _fisher_plugins
|
||||
command rm -f $fish_plugins
|
||||
end
|
||||
|
||||
set --local total (count $install_plugins) (count $update_plugins) (count $remove_plugins)
|
||||
|
||||
test "$total" != "0 0 0" && echo (string join ", " (
|
||||
test $total[1] = 0 || echo "Installed $total[1]") (
|
||||
test $total[2] = 0 || echo "Updated $total[2]") (
|
||||
test $total[3] = 0 || echo "Removed $total[3]")
|
||||
) plugin/s
|
||||
case \*
|
||||
echo "fisher: Unknown command: \"$cmd\"" >&2 && return 1
|
||||
end
|
||||
end
|
||||
|
||||
if ! set --query _fisher_upgraded_to_4_4
|
||||
set --universal _fisher_upgraded_to_4_4
|
||||
if functions --query _fisher_list
|
||||
set --query XDG_DATA_HOME[1] || set --local XDG_DATA_HOME ~/.local/share
|
||||
command rm -rf $XDG_DATA_HOME/fisher
|
||||
functions --erase _fisher_{list,plugin_parse}
|
||||
fisher update >/dev/null 2>/dev/null
|
||||
else
|
||||
for var in (set --names | string match --entire --regex '^_fisher_.+_files$')
|
||||
set $var (string replace -- ~ \~ $$var)
|
||||
end
|
||||
functions --erase _fisher_fish_postexec
|
||||
end
|
||||
end
|
|
@ -0,0 +1,230 @@
|
|||
function nvm --description "Node version manager"
|
||||
for silent in --silent -s
|
||||
if set --local index (contains --index -- $silent $argv)
|
||||
set --erase argv[$index] && break
|
||||
end
|
||||
set --erase silent
|
||||
end
|
||||
|
||||
set --local cmd $argv[1]
|
||||
set --local ver $argv[2]
|
||||
|
||||
if set --query silent && ! set --query cmd[1]
|
||||
echo "nvm: Version number not specified (see nvm -h for usage)" >&2
|
||||
return 1
|
||||
end
|
||||
|
||||
if ! set --query ver[1] && contains -- "$cmd" install use
|
||||
for file in .nvmrc .node-version
|
||||
set file (_nvm_find_up $PWD $file) && read ver <$file && break
|
||||
end
|
||||
|
||||
if ! set --query ver[1]
|
||||
echo "nvm: Invalid version or missing \".nvmrc\" file" >&2
|
||||
return 1
|
||||
end
|
||||
end
|
||||
|
||||
set --local their_version $ver
|
||||
|
||||
switch "$cmd"
|
||||
case -v --version
|
||||
echo "nvm, version 2.2.11"
|
||||
case "" -h --help
|
||||
echo "Usage: nvm install <version> Download and activate the specified Node version"
|
||||
echo " nvm install Install version from nearest .nvmrc file"
|
||||
echo " nvm use <version> Activate a version in the current shell"
|
||||
echo " nvm use Activate version from nearest .nvmrc file"
|
||||
echo " nvm list List installed versions"
|
||||
echo " nvm list-remote List versions available to install"
|
||||
echo " nvm list-remote <regex> List versions matching a given regular expression"
|
||||
echo " nvm current Print the currently-active version"
|
||||
echo " nvm uninstall <version> Uninstall a version"
|
||||
echo "Options:"
|
||||
echo " -s or --silent Suppress standard output"
|
||||
echo " -v or --version Print version"
|
||||
echo " -h or --help Print this help message"
|
||||
echo "Variables:"
|
||||
echo " nvm_arch Override architecture, e.g. x64-musl"
|
||||
echo " nvm_mirror Use a mirror of the Node binaries"
|
||||
echo " nvm_default_version Set the default version for new shells"
|
||||
echo " nvm_default_packages Install a list of packages every time you install a Node version"
|
||||
case install
|
||||
_nvm_index_update
|
||||
|
||||
string match --entire --regex -- (_nvm_version_match $ver) <$nvm_data/.index | read ver alias
|
||||
|
||||
if ! set --query ver[1]
|
||||
echo "nvm: Invalid version number or alias: \"$their_version\"" >&2
|
||||
return 1
|
||||
end
|
||||
|
||||
if test ! -e $nvm_data/$ver
|
||||
set --local os (command uname -s | string lower)
|
||||
set --local ext tar.gz
|
||||
set --local arch (command uname -m)
|
||||
|
||||
switch $os
|
||||
case aix
|
||||
set arch ppc64
|
||||
case sunos
|
||||
case linux
|
||||
case darwin
|
||||
case {MSYS_NT,MINGW\*_NT}\*
|
||||
set os win
|
||||
set ext zip
|
||||
case \*
|
||||
echo "nvm: Unsupported operating system: \"$os\"" >&2
|
||||
return 1
|
||||
end
|
||||
|
||||
switch $arch
|
||||
case i\*86
|
||||
set arch x86
|
||||
case x86_64
|
||||
set arch x64
|
||||
case arm64
|
||||
string match --regex --quiet "v(?<major>\d+)" $ver
|
||||
if test "$os" = darwin -a $major -lt 16
|
||||
set arch x64
|
||||
end
|
||||
case armv6 armv6l
|
||||
set arch armv6l
|
||||
case armv7 armv7l
|
||||
set arch armv7l
|
||||
case armv8 armv8l aarch64
|
||||
set arch arm64
|
||||
end
|
||||
|
||||
set --query nvm_arch && set arch $nvm_arch
|
||||
|
||||
set --local dir "node-$ver-$os-$arch"
|
||||
set --local url $nvm_mirror/$ver/$dir.$ext
|
||||
|
||||
command mkdir -p $nvm_data/$ver
|
||||
|
||||
if ! set --query silent
|
||||
echo -e "Installing Node \x1b[1m$ver\x1b[22m $alias"
|
||||
echo -e "Fetching \x1b[4m$url\x1b[24m\x1b[7m"
|
||||
end
|
||||
|
||||
if ! command curl $silent --progress-bar --location $url |
|
||||
command tar --extract --gzip --directory $nvm_data/$ver 2>/dev/null
|
||||
command rm -rf $nvm_data/$ver
|
||||
echo -e "\033[F\33[2K\x1b[0mnvm: Invalid mirror or host unavailable: \"$url\"" >&2
|
||||
return 1
|
||||
end
|
||||
|
||||
set --query silent || echo -en "\033[F\33[2K\x1b[0m"
|
||||
|
||||
if test "$os" = win
|
||||
command mv $nvm_data/$ver/$dir $nvm_data/$ver/bin
|
||||
else
|
||||
command mv $nvm_data/$ver/$dir/* $nvm_data/$ver
|
||||
command rm -rf $nvm_data/$ver/$dir
|
||||
end
|
||||
end
|
||||
|
||||
if test $ver != "$nvm_current_version"
|
||||
set --query nvm_current_version && _nvm_version_deactivate $nvm_current_version
|
||||
_nvm_version_activate $ver
|
||||
|
||||
set --query nvm_default_packages[1] && npm install --global $silent $nvm_default_packages
|
||||
end
|
||||
|
||||
set --query silent || printf "Now using Node %s (npm %s) %s\n" (_nvm_node_info)
|
||||
case use
|
||||
test $ver = default && set ver $nvm_default_version
|
||||
_nvm_list | string match --entire --regex -- (_nvm_version_match $ver) | read ver __
|
||||
|
||||
if ! set --query ver[1]
|
||||
echo "nvm: Can't use Node \"$their_version\", version must be installed first" >&2
|
||||
return 1
|
||||
end
|
||||
|
||||
if test $ver != "$nvm_current_version"
|
||||
set --query nvm_current_version && _nvm_version_deactivate $nvm_current_version
|
||||
test $ver != system && _nvm_version_activate $ver
|
||||
end
|
||||
|
||||
set --query silent || printf "Now using Node %s (npm %s) %s\n" (_nvm_node_info)
|
||||
case uninstall
|
||||
if test -z "$ver"
|
||||
echo "nvm: Not enough arguments for command: \"$cmd\"" >&2
|
||||
return 1
|
||||
end
|
||||
|
||||
test $ver = default && test ! -z "$nvm_default_version" && set ver $nvm_default_version
|
||||
|
||||
_nvm_list | string match --entire --regex -- (_nvm_version_match $ver) | read ver __
|
||||
|
||||
if ! set -q ver[1]
|
||||
echo "nvm: Node version not installed or invalid: \"$their_version\"" >&2
|
||||
return 1
|
||||
end
|
||||
|
||||
set --query silent || printf "Uninstalling Node %s %s\n" $ver (string replace ~ \~ "$nvm_data/$ver/bin/node")
|
||||
|
||||
_nvm_version_deactivate $ver
|
||||
|
||||
command rm -rf $nvm_data/$ver
|
||||
case current
|
||||
_nvm_current
|
||||
case ls list
|
||||
_nvm_list | _nvm_list_format (_nvm_current) $argv[2]
|
||||
case lsr {ls,list}-remote
|
||||
_nvm_index_update || return
|
||||
_nvm_list | command awk '
|
||||
FILENAME == "-" && (is_local[$1] = FNR == NR) { next } {
|
||||
print $0 (is_local[$1] ? " ✓" : "")
|
||||
}
|
||||
' - $nvm_data/.index | _nvm_list_format (_nvm_current) $argv[2]
|
||||
case \*
|
||||
echo "nvm: Unknown command or option: \"$cmd\" (see nvm -h for usage)" >&2
|
||||
return 1
|
||||
end
|
||||
end
|
||||
|
||||
function _nvm_find_up --argument-names path file
|
||||
test -e "$path/$file" && echo $path/$file || begin
|
||||
test ! -z "$path" || return
|
||||
_nvm_find_up (string replace --regex -- '/[^/]*$' "" $path) $file
|
||||
end
|
||||
end
|
||||
|
||||
function _nvm_version_match --argument-names ver
|
||||
string replace --regex -- '^v?(\d+|\d+\.\d+)$' 'v$1.' $ver |
|
||||
string replace --filter --regex -- '^v?(\d+)' 'v$1' |
|
||||
string escape --style=regex ||
|
||||
string lower '\b'$ver'(?:/\w+)?$'
|
||||
end
|
||||
|
||||
function _nvm_list_format --argument-names current regex
|
||||
command awk -v current="$current" -v regex="$regex" '
|
||||
$0 ~ regex {
|
||||
aliases[versions[i++] = $1] = $2 " " $3
|
||||
pad = (n = length($1)) > pad ? n : pad
|
||||
}
|
||||
END {
|
||||
if (!i) exit 1
|
||||
while (i--)
|
||||
printf((current == versions[i] ? " ▶ " : " ") "%"pad"s %s\n",
|
||||
versions[i], aliases[versions[i]])
|
||||
}
|
||||
'
|
||||
end
|
||||
|
||||
function _nvm_current
|
||||
command --search --quiet node || return
|
||||
set --query nvm_current_version && echo $nvm_current_version || echo system
|
||||
end
|
||||
|
||||
function _nvm_node_info
|
||||
set --local npm_path (string replace bin/npm-cli.js "" (realpath (command --search npm)))
|
||||
test -f $npm_path/package.json || set --local npm_version_default (command npm --version)
|
||||
command node --eval "
|
||||
console.log(process.version)
|
||||
console.log('$npm_version_default' ? '$npm_version_default': require('$npm_path/package.json').version)
|
||||
console.log(process.execPath.replace(require('os').homedir(), '~'))
|
||||
"
|
||||
end
|
|
@ -0,0 +1,9 @@
|
|||
[init]
|
||||
defaultbranch = main
|
||||
[user]
|
||||
email = hok7zv@tutanota.com
|
||||
name = hok7z
|
||||
[core]
|
||||
editor = nvim
|
||||
pager = less
|
||||
excludesfile = .gitignore
|
|
@ -0,0 +1,11 @@
|
|||
[Filechooser Settings]
|
||||
LocationMode=path-bar
|
||||
ShowHidden=true
|
||||
ShowSizeColumn=true
|
||||
GeometryX=380
|
||||
GeometryY=135
|
||||
GeometryWidth=840
|
||||
GeometryHeight=630
|
||||
SortColumn=name
|
||||
SortOrder=ascending
|
||||
StartupMode=recent
|
|
@ -0,0 +1,19 @@
|
|||
# DO NOT EDIT! This file will be overwritten by LXAppearance.
|
||||
# Any customization should be done in ~/.gtkrc-2.0.mine instead.
|
||||
|
||||
include "/home/q/.gtkrc-2.0.mine"
|
||||
gtk-theme-name="Tokyonight-Dark-B"
|
||||
gtk-icon-theme-name="Papirus"
|
||||
gtk-font-name="Cantarell 11"
|
||||
gtk-cursor-theme-name="Adwaita"
|
||||
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"
|
||||
gtk-xft-rgba="rgb"
|
|
@ -0,0 +1,10 @@
|
|||
.window-frame, .window-frame:backdrop {
|
||||
box-shadow: 0 0 0 black;
|
||||
border-style: none;
|
||||
margin: 0;
|
||||
border-radius: 0;
|
||||
}
|
||||
|
||||
.titlebar {
|
||||
border-radius: 0;
|
||||
}
|
|
@ -0,0 +1,18 @@
|
|||
|
||||
|
||||
[Settings]
|
||||
gtk-theme-name=Tokyonight-Dark-B
|
||||
gtk-icon-theme-name=Papirus
|
||||
gtk-font-name=Cantarell 11
|
||||
gtk-cursor-theme-name=Adwaita
|
||||
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
|
||||
gtk-xft-rgba=rgb
|
|
@ -0,0 +1,11 @@
|
|||
This is the IPython startup directory
|
||||
|
||||
.py and .ipy files in this directory will be run *prior* to any code or files specified
|
||||
via the exec_lines or exec_files configurables whenever you load this profile.
|
||||
|
||||
Files will be run in lexicographical order, so you can control the execution order of files
|
||||
with a prefix, e.g.::
|
||||
|
||||
00-first.py
|
||||
50-middle.py
|
||||
99-last.ipy
|
|
@ -0,0 +1,101 @@
|
|||
#font_family Comic Mono
|
||||
#bold_font Comic Mono
|
||||
#font_size 13
|
||||
|
||||
# font_family Iosevka
|
||||
# bold_font Iosevka
|
||||
# italic_font Iosevka
|
||||
# bold_italic_font Iosevka
|
||||
# font_size 15
|
||||
|
||||
font_family JetBrains Mono
|
||||
bold_font JetBrains Mono
|
||||
italic_font JetBrains Mono
|
||||
bold_italic_font JetBrains Mono
|
||||
font_size 14
|
||||
|
||||
background_opacity 0.9
|
||||
|
||||
|
||||
# font_family FiraCode Nerd Font
|
||||
# bold_font FiraCode Nerd Font Mono
|
||||
# italic_font FiraCode Nerd Font Mono
|
||||
# bold_italic_font FiraCode Nerd Font Mono
|
||||
# font_size 13
|
||||
|
||||
remember_window_size yes
|
||||
initial_window_width 148c
|
||||
initial_window_height 42c
|
||||
draw_minimal_borders no
|
||||
window_margin_width 1
|
||||
disable_ligatures never
|
||||
enable_audio_bell no
|
||||
tab_bar_edge top
|
||||
hide_window_decorations yes
|
||||
editor nvim
|
||||
enabled_layouts tall, grid, fat
|
||||
tab_bar_style separator
|
||||
active_tab_font_style bold
|
||||
active_tab_background #666
|
||||
tab_separator " ┃ "
|
||||
scrollback_pager nvim -R
|
||||
touch_scroll_multiplier 5.0
|
||||
|
||||
## name: Tokyo Night Storm
|
||||
## author: Folke Lemaitre
|
||||
|
||||
background #24283b
|
||||
foreground #c0caf5
|
||||
selection_background #364A82
|
||||
selection_foreground #c0caf5
|
||||
url_color #73daca
|
||||
cursor #c0caf5
|
||||
|
||||
# Tabs
|
||||
active_tab_background #7aa2f7
|
||||
active_tab_foreground #1f2335
|
||||
inactive_tab_background #292e42
|
||||
inactive_tab_foreground #545c7e
|
||||
#tab_bar_background #1D202F
|
||||
|
||||
# normal
|
||||
color0 #1D202F
|
||||
color1 #f7768e
|
||||
color2 #9ece6a
|
||||
color3 #e0af68
|
||||
color4 #7aa2f7
|
||||
color5 #bb9af7
|
||||
color6 #7dcfff
|
||||
color7 #a9b1d6
|
||||
|
||||
# bright
|
||||
color8 #414868
|
||||
color9 #f7768e
|
||||
color10 #9ece6a
|
||||
color11 #e0af68
|
||||
color12 #7aa2f7
|
||||
color13 #bb9af7
|
||||
color14 #7dcfff
|
||||
color15 #c0caf5
|
||||
|
||||
# extended colors
|
||||
color16 #ff9e64
|
||||
color17 #db4b4b
|
||||
|
||||
map ctrl+shift+enter new_window_with_cwd
|
||||
map ctrl+shift+space new_window_with_cwd
|
||||
map ctrl+alt+h move_window left
|
||||
map ctrl+alt+j move_window down
|
||||
map ctrl+alt+k move_window up
|
||||
map ctrl+alt+l move_window right
|
||||
map ctrl+shift+h neighboring_window left
|
||||
map ctrl+shift+j neighboring_window down
|
||||
map ctrl+shift+k neighboring_window up
|
||||
map ctrl+shift+l neighboring_window right
|
||||
map ctrl+shift+alt+l next_layout
|
||||
map ctrl+shift+i show_scrollback
|
||||
|
||||
map ctrl+shift+] next_tab
|
||||
map ctrl+shift+[ previous_tab
|
||||
map ctrl+alt+] move_tab_forward
|
||||
map ctrl+alt+[ move_tab_backward
|
|
@ -0,0 +1,3 @@
|
|||
GuiFont! Iosevka:h15
|
||||
GuiTabline 0
|
||||
GuiPopupmenu 0
|
|
@ -0,0 +1,13 @@
|
|||
local core = {
|
||||
"options",
|
||||
"mappings",
|
||||
"autocmds",
|
||||
"plugins"
|
||||
}
|
||||
|
||||
for _,source in ipairs(core) do
|
||||
local status_ok,fault = pcall(require,'core.' .. source)
|
||||
if not status_ok then
|
||||
vim.notify("Failed to load " .. source .."\n\n" .. fault )
|
||||
end
|
||||
end
|
|
@ -0,0 +1,20 @@
|
|||
vim.api.nvim_create_autocmd({"WinEnter","BufEnter"},{
|
||||
callback = function()
|
||||
vim.opt.statusline = "%F"
|
||||
end
|
||||
})
|
||||
|
||||
vim.api.nvim_create_autocmd({"BufEnter","BufWinEnter","WinEnter","CmdwinEnter"},{
|
||||
callback = function()
|
||||
if vim.fn.expand("%") == "NvimTree_1" then
|
||||
vim.opt.statusline = " NvimTree"
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
vim.api.nvim_create_autocmd({"BufEnter","BufWinEnter"},{
|
||||
pattern = {"*.json"},
|
||||
callback = function()
|
||||
vim.lsp.buf.formatting()
|
||||
end,
|
||||
})
|
|
@ -0,0 +1,88 @@
|
|||
return {
|
||||
kind = {
|
||||
Text = "",
|
||||
Method = "",
|
||||
Function = "",
|
||||
Constructor = "",
|
||||
Field = "ﰠ",
|
||||
Variable = "",
|
||||
Class = "ﴯ",
|
||||
Interface = "",
|
||||
Module = "",
|
||||
Property = "ﰠ",
|
||||
Unit = "塞",
|
||||
Value = "",
|
||||
Enum = "",
|
||||
Keyword = "",
|
||||
Snippet = "",
|
||||
Color = "",
|
||||
File = "",
|
||||
Reference = "",
|
||||
Folder = "",
|
||||
EnumMember = "",
|
||||
Constant = "",
|
||||
Struct = "פּ",
|
||||
Event = "",
|
||||
Operator = "",
|
||||
TypeParameter = ""
|
||||
},
|
||||
|
||||
diagnostic = {
|
||||
default = {
|
||||
{ name = "Error",icon = " ", color = "Default" },
|
||||
{ name = "Warn", icon = " ", color = "Default" },
|
||||
{ name = "Info", icon = " ", color = "Default" },
|
||||
{ name = "Hint", icon = " ", color = "Default" },
|
||||
},
|
||||
|
||||
catppuccin = {
|
||||
{ name = "Error", icon = "", color = "Default" },
|
||||
{ name = "Warn", icon = "", color = "Default" },
|
||||
{ name = "Info", icon = "", color = "Default" },
|
||||
{ name = "Hint", icon = "", color = "Default" }
|
||||
},
|
||||
},
|
||||
|
||||
ui = {
|
||||
ArrowClosed = "",
|
||||
ArrowOpen = "",
|
||||
Lock = "",
|
||||
Circle = "",
|
||||
BigCircle = "",
|
||||
BigUnfilledCircle = "",
|
||||
Close = "",
|
||||
NewFile = "",
|
||||
Search = "",
|
||||
Lightbulb = "",
|
||||
Project = "",
|
||||
Dashboard = "",
|
||||
History = "",
|
||||
Comment = "",
|
||||
Bug = "",
|
||||
Code = "",
|
||||
Telescope = "",
|
||||
Gear = "",
|
||||
Package = "",
|
||||
List = "",
|
||||
SignIn = "",
|
||||
SignOut = "",
|
||||
Check = "",
|
||||
Fire = "",
|
||||
Note = "",
|
||||
BookMark = "",
|
||||
Pencil = "",
|
||||
ChevronRight = "",
|
||||
Table = "",
|
||||
Calendar = "",
|
||||
CloudDownload = "",
|
||||
},
|
||||
|
||||
notify = {
|
||||
ERROR = "",
|
||||
WARN = "",
|
||||
INFO = "",
|
||||
DEBUG = "",
|
||||
TRACE = "✎",
|
||||
},
|
||||
|
||||
}
|
|
@ -0,0 +1,58 @@
|
|||
local keymap = vim.keymap.set
|
||||
|
||||
|
||||
vim.g.mapleader = " "
|
||||
|
||||
keymap("n","<space>,",":nohlsearch<CR>")
|
||||
keymap("n","<leader>m",":MarkdownPreview<CR>")
|
||||
|
||||
-- Block arrows
|
||||
vim.api.nvim_set_keymap('', '<up>', '<nop>', {noremap = true})
|
||||
vim.api.nvim_set_keymap('', '<down>', '<nop>', {noremap = true})
|
||||
vim.api.nvim_set_keymap('', '<left>', '<nop>', {noremap = true})
|
||||
vim.api.nvim_set_keymap('', '<right>', '<nop>',{noremap = true})
|
||||
|
||||
-- resize
|
||||
keymap("n","<C-k>",":resize -2<CR>")
|
||||
keymap("n","<C-j>",":resize 2<CR>")
|
||||
keymap("n","<C-h>",":vertical resize -2<CR>")
|
||||
keymap("n","<C-l>",":vertical resize 2<CR>")
|
||||
|
||||
-- tabs
|
||||
keymap("n","<leader>tn",":tabnew <CR>")
|
||||
keymap("n","<leader>tc",":tabclose<CR>")
|
||||
|
||||
|
||||
-- NvimTree --
|
||||
keymap("n","<C-n>",":NvimTreeToggle<CR>")
|
||||
keymap("n","<leader>n",":NvimTreeFindFile<CR>")
|
||||
keymap("n","<C-]>","gh defx#do_action('cd',getcwd())<CR>")
|
||||
|
||||
-- Telescope --
|
||||
keymap("n","<leader>ff","<cmd> Telescope find_files <cr>")
|
||||
keymap("n","<leader>fg","<cmd> Telescope live_grep <cr>")
|
||||
keymap("n","<leader>fb","<cmd> Telescope buffers <cr>")
|
||||
keymap("n","<leader>fh","<cmd> Telescope help_tags <cr>")
|
||||
|
||||
-- barbar.nvim
|
||||
keymap('n', '<A-,>', ':BufferPrevious<CR>')
|
||||
keymap('n', '<A-.>', ':BufferNext<CR>')
|
||||
|
||||
-- Re-order to previous/next
|
||||
keymap('n', '<A-<>', ':BufferMovePrevious<CR>')
|
||||
keymap('n', '<A->>', ' :BufferMoveNext<CR>')
|
||||
|
||||
-- Goto buffer in position...
|
||||
keymap('n', '<A-1>', ':BufferGoto 1<CR>')
|
||||
keymap('n', '<A-2>', ':BufferGoto 2<CR>')
|
||||
keymap('n', '<A-3>', ':BufferGoto 3<CR>')
|
||||
keymap('n', '<A-4>', ':BufferGoto 4<CR>')
|
||||
keymap('n', '<A-5>', ':BufferGoto 5<CR>')
|
||||
keymap('n', '<A-6>', ':BufferGoto 6<CR>')
|
||||
keymap('n', '<A-7>', ':BufferGoto 7<CR>')
|
||||
keymap('n', '<A-8>', ':BufferGoto 8<CR>')
|
||||
keymap('n', '<A-9>', ':BufferGoto 9<CR>')
|
||||
keymap('n', '<A-0>', ':BufferLast<CR>')
|
||||
|
||||
-- Close buffer
|
||||
keymap('n', '<A-c>', ':BufferClose<CR>')
|
|
@ -0,0 +1,77 @@
|
|||
local opt = vim.opt
|
||||
|
||||
vim.g.did_load_filetypes = 1
|
||||
|
||||
opt.encoding = "utf-8"
|
||||
opt.clipboard = "unnamedplus"
|
||||
opt.swapfile = false
|
||||
|
||||
vim.g.icons = require("core.icons")
|
||||
|
||||
local ok,notify = pcall(require,"notify")
|
||||
if ok then
|
||||
vim.notify = notify
|
||||
end
|
||||
|
||||
opt.termguicolors = true
|
||||
opt.listchars = {eol = '↲', tab = '▸ ', trail = '·'}
|
||||
|
||||
local ok,utils = pcall(require,"core.utils")
|
||||
if (not ok) then
|
||||
vim.notify("Can't load utils")
|
||||
end
|
||||
|
||||
-- utils.run_colorscheme("vscode",function()
|
||||
-- -- https://github.com/hrsh7th/nvim-cmp/wiki/Menu-Appearance#custom-menu-direction
|
||||
-- utils.highlight("CmpItemAbbrDeprecated", {guibg=NONE,gui=strikethrough,guifg=#808080})
|
||||
--
|
||||
-- utils.highlight("CmpItemAbbrMatch", {guibg=NONE,guifg=#569CD6})
|
||||
-- utils.highlight("CmpItemAbbrMatchFuzzy", {guibg=NONE,guifg=#569CD6})
|
||||
--
|
||||
-- utils.highlight("CmpItemKindVariable", {guibg=NONE,guifg=#9CDCFE})
|
||||
-- utils.highlight("CmpItemKindInterface", {guibg=NONE,guifg=#9CDCFE})
|
||||
-- utils.highlight("CmpItemKindText", {guibg=NONE,guifg=#9CDCFE})
|
||||
--
|
||||
-- utils.highlight("CmpItemKindFunction", {guibg=NONE,guifg=#C586C0})
|
||||
-- utils.highlight("CmpItemKindMethod", {guibg=NONE,guifg=#C586C0})
|
||||
--
|
||||
-- utils.highlight("CmpItemKindKeyword", {guibg=NONE guifg=#D4D4D4})
|
||||
-- utils.highlight("CmpItemKindProperty", {guibg=NONE guifg=#D4D4D4})
|
||||
-- utils.highlight("CmpItemKindUnit", {guibg=NONE guifg=#D4D4D4})
|
||||
--
|
||||
-- vim.g.diagnostic_signs = vim.g.icons.diagnostics.default
|
||||
-- end)
|
||||
-- utils.run_colorscheme("github-dark",function()
|
||||
-- require("github-theme").setup({
|
||||
-- theme_style = "dark_default",
|
||||
-- function_style = "italic",
|
||||
-- sidebars = { "qf", "vista_kind", "terminal", "packer" },
|
||||
-- hide_inactive_statusline = false,
|
||||
-- })
|
||||
--
|
||||
-- vim.g.diagnostic_signs = {
|
||||
-- {name = "Error",icon = " ", color = "Default"},
|
||||
-- {name = "Warn", icon = " ", color = "Default"},
|
||||
-- {name = "Info", icon = " ", color = "Default"},
|
||||
-- {name = "Hint", icon = " ", color = "Default"},
|
||||
-- }
|
||||
-- end)
|
||||
utils.run_colorscheme("catppuccin",function()
|
||||
vim.g.catppucin_flavor = "mocha" -- latte, frappe, macchiato, mocha
|
||||
vim.g.diagnostics_signs = vim.g.icons.diagnostic.catppuccin
|
||||
end)
|
||||
|
||||
-- statusline = require("core.statusline")
|
||||
-- opt.statusline = "%!luaeval('statusline.active()')"
|
||||
|
||||
opt.number = true
|
||||
opt.mouse = "a"
|
||||
opt.relativenumber = true
|
||||
|
||||
opt.tabstop = 4
|
||||
opt.shiftwidth = 4
|
||||
opt.expandtab = true
|
||||
|
||||
opt.ts = 4
|
||||
opt.sw = 4
|
||||
opt.splitright = true
|
|
@ -0,0 +1,292 @@
|
|||
local ok,packer = pcall(require,"packer")
|
||||
if not ok then
|
||||
vim.notify("Failed to load packer\n\n")
|
||||
return
|
||||
end
|
||||
|
||||
vim.api.nvim_create_autocmd("BufWritePost", {
|
||||
pattern = "*/core/plugins.lua",
|
||||
callback = function(arg)
|
||||
vim.cmd("source "..arg.file)
|
||||
vim.cmd("PackerInstall")
|
||||
end,
|
||||
})
|
||||
|
||||
packer.startup{
|
||||
function(use)
|
||||
use {"wbthomason/packer.nvim"}
|
||||
|
||||
use {"nathom/filetype.nvim"}
|
||||
|
||||
-- Colorchemes
|
||||
use {"catppuccin/nvim",as = "catppuccin"}
|
||||
use {"rebelot/kanagawa.nvim"}
|
||||
use {"tiagovla/tokyodark.nvim"}
|
||||
use {"folke/tokyonight.nvim"}
|
||||
use {"navarasu/onedark.nvim"}
|
||||
use {"projekt0n/github-nvim-theme"}
|
||||
use {"Mofiqul/vscode.nvim"}
|
||||
|
||||
use {
|
||||
"norcalli/nvim-colorizer.lua",
|
||||
config = function() require'colorizer'.setup() end
|
||||
}
|
||||
use {"dstein64/vim-startuptime"}
|
||||
|
||||
use {
|
||||
"lukas-reineke/indent-blankline.nvim",
|
||||
config = function()
|
||||
require("indent_blankline").setup{
|
||||
show_end_of_line = true,
|
||||
space_char_blankline = " ",
|
||||
}
|
||||
end
|
||||
}
|
||||
|
||||
use {
|
||||
"windwp/nvim-autopairs",
|
||||
config = function() require("nvim-autopairs").setup() end
|
||||
}
|
||||
|
||||
use {
|
||||
"nacro90/numb.nvim",
|
||||
config = function() require('numb').setup() end
|
||||
}
|
||||
|
||||
use {
|
||||
"numToStr/Comment.nvim",
|
||||
config = function() require('Comment').setup() end
|
||||
}
|
||||
|
||||
use {
|
||||
"lewis6991/gitsigns.nvim",
|
||||
config = function()
|
||||
require("gitsigns").setup{keymaps = {}}
|
||||
end
|
||||
}
|
||||
|
||||
use {
|
||||
"folke/todo-comments.nvim",
|
||||
requires = "nvim-lua/plenary.nvim",
|
||||
config = function() require("todo-comments").setup() end
|
||||
}
|
||||
|
||||
use {"davidgranstrom/nvim-markdown-preview"}
|
||||
|
||||
use {
|
||||
"nvim-telescope/telescope.nvim",
|
||||
requires = { "nvim-lua/plenary.nvim" },
|
||||
config = function()
|
||||
local actions = require('telescope.actions')
|
||||
require('telescope').setup{
|
||||
defaults = {
|
||||
mappings = {
|
||||
n = {
|
||||
["q"] = actions.close
|
||||
},
|
||||
},
|
||||
}
|
||||
}
|
||||
end
|
||||
}
|
||||
|
||||
use {
|
||||
"akinsho/toggleterm.nvim", tag = 'v2.*',
|
||||
config = function() require("toggleterm").setup() end
|
||||
}
|
||||
|
||||
use {
|
||||
"kyazdani42/nvim-tree.lua",
|
||||
requires = { "kyazdani42/nvim-web-devicons" },
|
||||
config = function() require("plugins.nvim-tree") end
|
||||
}
|
||||
|
||||
|
||||
use {
|
||||
"rcarriga/nvim-notify",
|
||||
config = function()
|
||||
local notify = require("notify")
|
||||
notify.setup{
|
||||
level = "info",
|
||||
stages = "fade_in_slide_out",
|
||||
|
||||
on_open = nil,
|
||||
on_close = nil,
|
||||
|
||||
render = "default",
|
||||
timeout = 5000,
|
||||
|
||||
max_width = nil,
|
||||
max_height = nil,
|
||||
|
||||
background_colour = "Normal",
|
||||
|
||||
minimum_width = 50,
|
||||
|
||||
icons = vim.g.icons.notify,
|
||||
}
|
||||
|
||||
end
|
||||
}
|
||||
|
||||
-- TODO: write own statusline
|
||||
-- use {
|
||||
-- "nvim-lualine/lualine.nvim",
|
||||
-- requires = { 'kyazdani42/nvim-web-devicons',opt = true},
|
||||
-- config = function() require("plugins.lualine") end
|
||||
-- }
|
||||
|
||||
|
||||
use {
|
||||
'romgrk/barbar.nvim',
|
||||
requires = {'kyazdani42/nvim-web-devicons'},
|
||||
config = function() require("plugins.barbar") end,
|
||||
}
|
||||
|
||||
use {
|
||||
'pwntester/octo.nvim',
|
||||
requires = {
|
||||
'nvim-lua/plenary.nvim',
|
||||
},
|
||||
config = function() require"octo".setup() end
|
||||
}
|
||||
|
||||
use {
|
||||
"sindrets/diffview.nvim",
|
||||
requires = 'nvim-lua/plenary.nvim'
|
||||
}
|
||||
|
||||
use {
|
||||
"nvim-treesitter/nvim-treesitter",
|
||||
requires = {
|
||||
"nvim-treesitter/playground",
|
||||
"nvim-treesitter/nvim-treesitter-textobjects",
|
||||
},
|
||||
run = function() vim.cmd("TSUpdate") end,
|
||||
config = function() require("plugins.treesitter") end
|
||||
}
|
||||
|
||||
|
||||
-- Language Server Protocol
|
||||
use {
|
||||
"neovim/nvim-lspconfig",
|
||||
config = function() require("plugins.lsp") end
|
||||
}
|
||||
|
||||
|
||||
use {
|
||||
"j-hui/fidget.nvim",
|
||||
config = function() require"fidget".setup() end
|
||||
}
|
||||
|
||||
use {
|
||||
"hrsh7th/nvim-cmp",
|
||||
requires = {
|
||||
"hrsh7th/cmp-nvim-lsp",
|
||||
"hrsh7th/cmp-path",
|
||||
"hrsh7th/cmp-buffer",
|
||||
"saadparwaiz1/cmp_luasnip",
|
||||
"hrsh7th/cmp-calc",
|
||||
"hrsh7th/cmp-emoji",
|
||||
"hrsh7th/cmp-cmdline",
|
||||
},
|
||||
config = function() require("plugins.cmp") end
|
||||
}
|
||||
|
||||
use {
|
||||
"onsails/lspkind-nvim",
|
||||
config = function()
|
||||
local lspkind = require("lspkind")
|
||||
lspkind.init{
|
||||
mode = 'symbol_text',
|
||||
preset = 'codicons',
|
||||
|
||||
symbol_map = vim.g.icons.kind
|
||||
}
|
||||
end
|
||||
}
|
||||
|
||||
use {
|
||||
"L3MON4D3/LuaSnip",
|
||||
requires = {
|
||||
"rafamadriz/friendly-snippets",
|
||||
},
|
||||
config = function()
|
||||
require("luasnip/loaders/from_vscode").lazy_load()
|
||||
end
|
||||
}
|
||||
|
||||
|
||||
use {
|
||||
"ray-x/lsp_signature.nvim",
|
||||
config = function()
|
||||
local lsp_signature = require("lsp_signature")
|
||||
|
||||
lsp_signature.setup{
|
||||
hint_enable = false,
|
||||
verbose = true
|
||||
}
|
||||
|
||||
end
|
||||
}
|
||||
|
||||
use {
|
||||
"SmiteshP/nvim-gps",
|
||||
requires = "nvim-treesitter/nvim-treesitter",
|
||||
config = function() require("nvim-gps").setup() end,
|
||||
}
|
||||
|
||||
|
||||
|
||||
use {
|
||||
"jose-elias-alvarez/null-ls.nvim",
|
||||
config = function() require("plugins.null-ls") end
|
||||
}
|
||||
|
||||
-- Debug Adapter Protocol
|
||||
use {
|
||||
"mfussenegger/nvim-dap",
|
||||
requires = {
|
||||
"arywz11/DAPInstall.nvim",
|
||||
"rcarriga/nvim-dap-ui"
|
||||
},
|
||||
config = function() require("plugins.dap") end,
|
||||
}
|
||||
|
||||
end,
|
||||
|
||||
config = {
|
||||
display = {
|
||||
open_fn = function()
|
||||
return require("packer.util").float{border = "rounded"}
|
||||
end
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
local function bootstrap()
|
||||
local fn = vim.fn
|
||||
local packer_install_path =
|
||||
fn.stdpath("data").."/site/pack/packer/opt/packer.nvim"
|
||||
local not_installed = fn.empty(fn.glob(packer_install_path)) == 1
|
||||
|
||||
if not_installed then
|
||||
print("`packer.nvim` is not installed, installing...")
|
||||
local repo = "https://github.com/wbthomason/packer.nvim"
|
||||
vim.cmd(("!git clone %s %s"):format(repo, packer_install_path))
|
||||
end
|
||||
|
||||
vim.cmd("packadd packer.nvim")
|
||||
require("packer").startup {
|
||||
load,
|
||||
config = {
|
||||
git = {clone_timeout = 240},
|
||||
},
|
||||
}
|
||||
|
||||
if not_installed then
|
||||
vim.cmd("PackerSync")
|
||||
end
|
||||
end
|
||||
|
||||
return bootstrap
|
|
@ -0,0 +1,154 @@
|
|||
local fn = vim.fn
|
||||
local api = vim.api
|
||||
|
||||
local M = {}
|
||||
|
||||
-- possible values are 'arrow' | 'rounded' | 'blank'
|
||||
local active_sep = 'blank'
|
||||
|
||||
-- change them if you want to different separator
|
||||
M.separators = {
|
||||
arrow = { '', '' },
|
||||
rounded = { '', '' },
|
||||
blank = { '', '' },
|
||||
}
|
||||
|
||||
-- highlight groups
|
||||
M.colors = {
|
||||
active = '%#StatusLine#',
|
||||
inactive = '%#StatuslineNC#',
|
||||
mode = '%#Mode#',
|
||||
mode_alt = '%#ModeAlt#',
|
||||
git = '%#Git#',
|
||||
git_alt = '%#GitAlt#',
|
||||
filetype = '%#Filetype#',
|
||||
filetype_alt = '%#FiletypeAlt#',
|
||||
line_col = '%#LineCol#',
|
||||
line_col_alt = '%#LineColAlt#',
|
||||
}
|
||||
|
||||
M.trunc_width = setmetatable({
|
||||
mode = 80,
|
||||
git_status = 90,
|
||||
filename = 140,
|
||||
line_col = 60,
|
||||
}, {
|
||||
__index = function()
|
||||
return 80
|
||||
end
|
||||
})
|
||||
|
||||
M.is_truncated = function(_, width)
|
||||
local current_width = api.nvim_win_get_width(0)
|
||||
return current_width < width
|
||||
end
|
||||
|
||||
M.modes = setmetatable({
|
||||
['n'] = {'Normal', 'N'};
|
||||
['no'] = {'N·Pending', 'N·P'} ;
|
||||
['v'] = {'Visual', 'V' };
|
||||
['V'] = {'V·Line', 'V·L' };
|
||||
[''] = {'V·Block', 'V·B'}; -- this is not ^V, but it's , they're different
|
||||
['s'] = {'Select', 'S'};
|
||||
['S'] = {'S·Line', 'S·L'};
|
||||
[''] = {'S·Block', 'S·B'}; -- same with this one, it's not ^S but it's
|
||||
['i'] = {'Insert', 'I'};
|
||||
['ic'] = {'Insert', 'I'};
|
||||
['R'] = {'Replace', 'R'};
|
||||
['Rv'] = {'V·Replace', 'V·R'};
|
||||
['c'] = {'Command', 'C'};
|
||||
['cv'] = {'Vim·Ex ', 'V·E'};
|
||||
['ce'] = {'Ex ', 'E'};
|
||||
['r'] = {'Prompt ', 'P'};
|
||||
['rm'] = {'More ', 'M'};
|
||||
['r?'] = {'Confirm ', 'C'};
|
||||
['!'] = {'Shell ', 'S'};
|
||||
['t'] = {'Terminal ', 'T'};
|
||||
}, {
|
||||
__index = function()
|
||||
return {'Unknown', 'U'} -- handle edge cases
|
||||
end
|
||||
})
|
||||
|
||||
M.get_current_mode = function(self)
|
||||
local current_mode = api.nvim_get_mode().mode
|
||||
|
||||
if self:is_truncated(self.trunc_width.mode) then
|
||||
return string.format(' %s ', self.modes[current_mode][2]):upper()
|
||||
end
|
||||
return string.format(' %s ', self.modes[current_mode][1]):upper()
|
||||
end
|
||||
|
||||
M.get_git_status = function(self)
|
||||
-- use fallback because it doesn't set this variable on the initial `BufEnter`
|
||||
local signs = vim.b.gitsigns_status_dict or {head = '', added = 0, changed = 0, removed = 0}
|
||||
local is_head_empty = signs.head ~= ''
|
||||
|
||||
if self:is_truncated(self.trunc_width.git_status) then
|
||||
return is_head_empty and string.format(' %s ', signs.head or '') or ''
|
||||
end
|
||||
|
||||
return is_head_empty and string.format(
|
||||
' +%s ~%s -%s | %s ',
|
||||
signs.added, signs.changed, signs.removed, signs.head
|
||||
) or ''
|
||||
end
|
||||
|
||||
M.get_filename = function(self)
|
||||
if self:is_truncated(self.trunc_width.filename) then return " %<%f " end
|
||||
return " %<%F "
|
||||
end
|
||||
|
||||
M.get_filetype = function()
|
||||
local file_name, file_ext = fn.expand("%:t"), fn.expand("%:e")
|
||||
local icon = require'nvim-web-devicons'.get_icon(file_name, file_ext, { default = true })
|
||||
local filetype = vim.bo.filetype
|
||||
|
||||
if filetype == '' then return '' end
|
||||
return string.format(' %s %s ', icon, filetype):lower()
|
||||
end
|
||||
|
||||
M.get_line_col = function(self)
|
||||
if self:is_truncated(self.trunc_width.line_col) then return ' %l:%c ' end
|
||||
return ' Ln %l, Col %c '
|
||||
end
|
||||
|
||||
|
||||
M.set_active = function(self)
|
||||
local colors = self.colors
|
||||
|
||||
local mode = colors.mode .. self:get_current_mode()
|
||||
local mode_alt = colors.mode_alt .. self.separators[active_sep][1]
|
||||
local git = colors.git .. self:get_git_status()
|
||||
local git_alt = colors.git_alt .. self.separators[active_sep][1]
|
||||
local filename = colors.inactive .. self:get_filename()
|
||||
local filetype_alt = colors.filetype_alt .. self.separators[active_sep][2]
|
||||
local filetype = colors.filetype .. self:get_filetype()
|
||||
local line_col = colors.line_col .. self:get_line_col()
|
||||
local line_col_alt = colors.line_col_alt .. self.separators[active_sep][2]
|
||||
|
||||
return table.concat({
|
||||
colors.active, mode, mode_alt, git, git_alt,
|
||||
"%=", filename, "%=",
|
||||
filetype_alt, filetype, line_col_alt, line_col
|
||||
})
|
||||
end
|
||||
|
||||
M.set_inactive = function(self)
|
||||
return self.colors.inactive .. '%= %F %='
|
||||
end
|
||||
|
||||
M.set_explorer = function(self)
|
||||
local title = self.colors.mode .. ' '
|
||||
local title_alt = self.colors.mode_alt .. self.separators[active_sep][2]
|
||||
|
||||
return table.concat({ self.colors.active, title, title_alt })
|
||||
end
|
||||
|
||||
Statusline = setmetatable(M, {
|
||||
__call = function(statusline, mode)
|
||||
if mode == "active" then return statusline:set_active() end
|
||||
if mode == "inactive" then return statusline:set_inactive() end
|
||||
if mode == "explorer" then return statusline:set_explorer() end
|
||||
end
|
||||
})
|
|
@ -0,0 +1,304 @@
|
|||
local M = {}
|
||||
|
||||
local function printf(...) print(string.format(...)) end
|
||||
local sprintf = string.format
|
||||
local function cmdf(...) vim.cmd(sprintf(...)) end
|
||||
local fn, api = vim.fn, vim.api
|
||||
|
||||
M.printf = printf
|
||||
M.sprintf = sprintf
|
||||
M.cmdf = cmdf
|
||||
|
||||
function M.get_cursor_pos() return {fn.line('.'), fn.col('.')} end
|
||||
|
||||
function M.debounce(func, timeout)
|
||||
local timer_id
|
||||
return function(...)
|
||||
if timer_id ~= nil then
|
||||
fn.timer_stop(timer_id)
|
||||
end
|
||||
local args = {...}
|
||||
local function cb()
|
||||
func(args)
|
||||
timer_id = nil
|
||||
end
|
||||
timer_id = fn.timer_start(timeout, cb)
|
||||
end
|
||||
end
|
||||
|
||||
-- FIXME
|
||||
function M.throttle(func, timeout)
|
||||
local timer_id
|
||||
local did_call = false
|
||||
return function(...)
|
||||
local args = {...}
|
||||
if timer_id == nil then
|
||||
func(unpack(args))
|
||||
local function cb()
|
||||
timer_id = nil
|
||||
if did_call then
|
||||
func(unpack(args))
|
||||
did_call = false
|
||||
end
|
||||
end
|
||||
timer_id = fn.timer_start(timeout, cb)
|
||||
else
|
||||
did_call = true
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function M.run_colorscheme(colorscheme,callback)
|
||||
local ok,err = pcall(function()
|
||||
vim.cmd("colorscheme " .. colorscheme)
|
||||
callback()
|
||||
end)
|
||||
|
||||
if (not ok) then
|
||||
vim.notify(err)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
-- Convert UTF-8 hex code to character
|
||||
function M.u(code)
|
||||
if type(code) == 'string' then
|
||||
code = tonumber('0x' .. code)
|
||||
end
|
||||
local c = string.char
|
||||
if code <= 0x7f then
|
||||
return c(code)
|
||||
end
|
||||
local t = {}
|
||||
if code <= 0x07ff then
|
||||
t[1] = c(bit.bor(0xc0, bit.rshift(code, 6)))
|
||||
t[2] = c(bit.bor(0x80, bit.band(code, 0x3f)))
|
||||
elseif code <= 0xffff then
|
||||
t[1] = c(bit.bor(0xe0, bit.rshift(code, 12)))
|
||||
t[2] = c(bit.bor(0x80, bit.band(bit.rshift(code, 6), 0x3f)))
|
||||
t[3] = c(bit.bor(0x80, bit.band(code, 0x3f)))
|
||||
else
|
||||
t[1] = c(bit.bor(0xf0, bit.rshift(code, 18)))
|
||||
t[2] = c(bit.bor(0x80, bit.band(bit.rshift(code, 12), 0x3f)))
|
||||
t[3] = c(bit.bor(0x80, bit.band(bit.rshift(code, 6), 0x3f)))
|
||||
t[4] = c(bit.bor(0x80, bit.band(code, 0x3f)))
|
||||
end
|
||||
return table.concat(t)
|
||||
end
|
||||
|
||||
function _G.dump(...)
|
||||
local args = {...}
|
||||
if #args == 1 then
|
||||
print(vim.inspect(args[1]))
|
||||
else
|
||||
print(vim.inspect(args))
|
||||
end
|
||||
end
|
||||
|
||||
function M.load(path)
|
||||
local ok, mod = pcall(require, path)
|
||||
if not ok then
|
||||
printf('Error loading module `%s`', path)
|
||||
print(mod)
|
||||
else
|
||||
local loadfunc
|
||||
if mod == true then
|
||||
-- Module doesn't export anything
|
||||
return
|
||||
elseif type(mod) == "table" and mod.setup ~= nil then
|
||||
loadfunc = mod.setup
|
||||
elseif type(mod) == "function" then
|
||||
loadfunc = mod
|
||||
end
|
||||
local ok, err = pcall(loadfunc)
|
||||
if not ok then
|
||||
printf("Error loading module `%s`", path)
|
||||
print(err)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- Get information about highlight group
|
||||
function M.hl_by_name(hl_group)
|
||||
local hl = api.nvim_get_hl_by_name(hl_group, true)
|
||||
if hl.foreground ~= nil then
|
||||
hl.fg = sprintf('#%x', hl.foreground)
|
||||
end
|
||||
if hl.background ~= nil then
|
||||
hl.bg = sprintf('#%x', hl.background)
|
||||
end
|
||||
return hl
|
||||
end
|
||||
|
||||
function M.isempty(s)
|
||||
return s == nil or s == ""
|
||||
end
|
||||
|
||||
function M.get_buf_option(opt)
|
||||
local status_ok, buf_option = pcall(vim.api.nvim_buf_get_option, 0, opt)
|
||||
if not status_ok then
|
||||
return nil
|
||||
else
|
||||
return buf_option
|
||||
end
|
||||
end
|
||||
|
||||
-- Define a new highlight group
|
||||
-- TODO: rewrite to `nvim_set_hl()` when API will be stable
|
||||
function M.highlight(cfg)
|
||||
local command = "highlight"
|
||||
if cfg.bang == true then
|
||||
command = command .. '!'
|
||||
end
|
||||
|
||||
if #cfg == 2 and type(cfg[1]) == 'string' and type(cfg[2]) == 'string' then
|
||||
-- :highlight link
|
||||
vim.cmd(command.." link "..cfg[1].." "..cfg[2])
|
||||
return
|
||||
end
|
||||
local guifg = cfg.fg or cfg.guifg
|
||||
local guibg = cfg.bg or cfg.guibg
|
||||
local gui = cfg.gui
|
||||
local guisp = cfg.guisp
|
||||
if type(cfg.override) == 'string' then
|
||||
local existing = api.nvim_get_hl_by_name(cfg.override, true)
|
||||
if existing.foreground ~= nil then
|
||||
guifg = sprintf('#%x', existing.foreground)
|
||||
end
|
||||
if existing.background ~= nil then
|
||||
guibg = sprintf('#%x', existing.background)
|
||||
end
|
||||
if existing.special ~= nil then
|
||||
guibg = sprintf('#%x', existing.background)
|
||||
end
|
||||
if existing.undercurl == true then
|
||||
gui = "undercurl"
|
||||
elseif existing.underline == true then
|
||||
gui = "underline"
|
||||
end
|
||||
end
|
||||
command = command .. ' ' .. cfg[1]
|
||||
if guifg ~= nil then
|
||||
command = command .. ' guifg=' .. guifg
|
||||
end
|
||||
if guibg ~= nil then
|
||||
command = command .. ' guibg=' .. guibg
|
||||
end
|
||||
if gui ~= nil then
|
||||
command = command .. ' gui=' .. gui
|
||||
end
|
||||
if guisp ~= nil then
|
||||
command = command .. ' guisp=' .. guisp
|
||||
end
|
||||
vim.cmd(command)
|
||||
end
|
||||
|
||||
local autocmd_fn_index = 0
|
||||
|
||||
-- WIP:
|
||||
function M.autocmd(event_name, pattern, callback)
|
||||
local fn_name = 'lua_autocmd' .. autocmd_fn_index
|
||||
autocmd_fn_index = autocmd_fn_index + 1
|
||||
_G[fn_name] = callback
|
||||
cmdf('autocmd %s %s call v:lua.%s()', event_name, pattern, fn_name)
|
||||
end
|
||||
|
||||
function M.glob_exists(path) return fn.empty(fn.glob(path)) == 0 end
|
||||
|
||||
do
|
||||
local show_diagnostics = vim.lsp.diagnostic.show_line_diagnostics
|
||||
local cursor_pos = M.get_cursor_pos()
|
||||
local debounced = M.debounce(show_diagnostics, 300)
|
||||
M.show_lsp_diagnostics = function()
|
||||
local cursor_pos2 = M.get_cursor_pos()
|
||||
-- TODO: doesn't work when both diagnostics and popup is shown
|
||||
if cursor_pos[1] ~= cursor_pos2[1] and cursor_pos[2] ~= cursor_pos2[2] then
|
||||
cursor_pos = cursor_pos2
|
||||
debounced()
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function M.id_generator(start)
|
||||
local cnt = start or 0
|
||||
return function()
|
||||
local result = cnt
|
||||
cnt = cnt + 1
|
||||
return result
|
||||
end
|
||||
end
|
||||
|
||||
do
|
||||
local map_func_counter = 0
|
||||
function M.map(mode, lhs, fn, opts)
|
||||
local name = 'map_func_' .. map_func_counter
|
||||
_G[name] = fn
|
||||
local rhs = ':call v:lua.' .. name .. '()<CR>'
|
||||
api.nvim_set_keymap(mode, lhs, rhs, opts)
|
||||
map_func_counter = map_func_counter + 1
|
||||
end
|
||||
end
|
||||
|
||||
for _, mode in ipairs {'', 'n', 'i', 'c', 'x'} do
|
||||
M[mode .. 'noremap'] = function(lhs, fn, opts)
|
||||
local mapopts = opts or {}
|
||||
mapopts.noremap = true
|
||||
return M.map(mode, lhs, fn, mapopts)
|
||||
end
|
||||
end
|
||||
|
||||
function M.log_time(fn, label)
|
||||
return function(...)
|
||||
local now = os.clock()
|
||||
fn(...)
|
||||
print(
|
||||
((label and (label .. ' ')) or '') ..
|
||||
(math.floor((os.clock() - now) * 1e6) / 1000) ..
|
||||
"ms."
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
-- TODO: fix function
|
||||
function M.require_mod(modname)
|
||||
local ok,mod = pcall(require,modname)
|
||||
local notify_ok,notify = pcall(require,"notify")
|
||||
if (not ok) then
|
||||
local errmsg = "Failed to load " .. modname
|
||||
if (notify_ok) then
|
||||
notify(
|
||||
errmsg,
|
||||
"error",
|
||||
{
|
||||
title = "require"
|
||||
}
|
||||
)
|
||||
else
|
||||
vim.notify(errmsg)
|
||||
end
|
||||
|
||||
return
|
||||
end
|
||||
|
||||
return mod
|
||||
end
|
||||
|
||||
function M.index_of(t, v, eqfn)
|
||||
eqfn = eqfn or (function(el) return el == v end)
|
||||
for i, value in ipairs(t) do
|
||||
if eqfn(value, v) then
|
||||
return i
|
||||
end
|
||||
end
|
||||
return -1
|
||||
end
|
||||
|
||||
local globalfn_counter = 0
|
||||
function M.defglobalfn(func)
|
||||
assert(type(func) == "function")
|
||||
local name = "_lua_fn_" .. globalfn_counter
|
||||
_G[name] = func
|
||||
globalfn_counter = globalfn_counter + 1
|
||||
return name
|
||||
end
|
||||
return M
|
|
@ -0,0 +1,66 @@
|
|||
vim.g.bufferline = {
|
||||
-- Enable/disable animations
|
||||
animation = true,
|
||||
|
||||
-- Enable/disable auto-hiding the tab bar when there is a single buffer
|
||||
auto_hide = false,
|
||||
|
||||
-- Enable/disable current/total tabpages indicator (top right corner)
|
||||
tabpages = true,
|
||||
|
||||
-- Enable/disable close button
|
||||
closable = true,
|
||||
|
||||
-- Enables/disable clickable tabs
|
||||
-- - left-click: go to buffer
|
||||
-- - middle-click: delete buffer
|
||||
clickable = true,
|
||||
|
||||
-- Excludes buffers from the tabline
|
||||
exclude_ft = {'javascript'},
|
||||
exclude_name = {'package.json'},
|
||||
|
||||
-- Enable/disable icons
|
||||
-- if set to 'numbers', will show buffer index in the tabline
|
||||
-- if set to 'both', will show buffer index and icons in the tabline
|
||||
icons = true,
|
||||
|
||||
-- If set, the icon color will follow its corresponding buffer
|
||||
-- highlight group. By default, the Buffer*Icon group is linked to the
|
||||
-- Buffer* group (see Highlighting below). Otherwise, it will take its
|
||||
-- default value as defined by devicons.
|
||||
icon_custom_colors = false,
|
||||
|
||||
-- Configure icons on the bufferline.
|
||||
icon_separator_active = '▎',
|
||||
icon_separator_inactive = '▎',
|
||||
icon_close_tab = '',
|
||||
icon_close_tab_modified = '●',
|
||||
icon_pinned = '車',
|
||||
|
||||
-- If true, new buffers will be inserted at the start/end of the list.
|
||||
-- Default is to insert after current buffer.
|
||||
insert_at_end = false,
|
||||
insert_at_start = false,
|
||||
|
||||
-- Sets the maximum padding width with which to surround each tab
|
||||
maximum_padding = 1,
|
||||
|
||||
-- Sets the maximum buffer name length.
|
||||
maximum_length = 30,
|
||||
|
||||
-- If set, the letters for each buffer in buffer-pick mode will be
|
||||
-- assigned based on their name. Otherwise or in case all letters are
|
||||
-- already assigned, the behavior is to assign letters in order of
|
||||
-- usability (see order below)
|
||||
semantic_letters = true,
|
||||
|
||||
-- New buffer letters are assigned in this order. This order is
|
||||
-- optimal for the qwerty keyboard layout but might need adjustement
|
||||
-- for other layouts.
|
||||
letters = 'asdfjkl;ghnmxcvbziowerutyqpASDFJKLGHNMXCVBZIOWERUTYQP',
|
||||
|
||||
-- Sets the name of unnamed buffers. By default format is "[Buffer X]"
|
||||
-- where X is the buffer number. But only a static string is accepted here.
|
||||
no_name_title = nil,
|
||||
}
|
|
@ -0,0 +1,62 @@
|
|||
local ok,cmp = pcall(require,"cmp")
|
||||
if not ok then
|
||||
vim.notify("Failed to load cmp\n\n")
|
||||
return
|
||||
end
|
||||
|
||||
cmp.setup {
|
||||
mapping = {
|
||||
["<Tab>"] = cmp.mapping.select_next_item(),
|
||||
["<S-Tab>"] = cmp.mapping.select_prev_item(),
|
||||
["<C-Space>"] = cmp.mapping.complete(),
|
||||
["<CR>"] = cmp.mapping.confirm({select = false}),
|
||||
},
|
||||
|
||||
completion = {
|
||||
autocomplete = true,
|
||||
completeopt = "menu,menuone,noinsert",
|
||||
winhighlight = "Normal:Pmenu,FloatBorder:Pmenu,Search:None",
|
||||
},
|
||||
|
||||
snippet = {
|
||||
expand = function(args)
|
||||
require('luasnip').lsp_expand(args.body)
|
||||
end,
|
||||
},
|
||||
|
||||
window = {
|
||||
completion = cmp.config.window.bordered(),
|
||||
documentation = cmp.config.window.bordered()
|
||||
},
|
||||
|
||||
formatting = {
|
||||
fields = { "kind", "abbr", "menu" },
|
||||
format = function(entry, vim_item)
|
||||
-- local kind = string.format("%s %s",vim.g.icons.kind[vim_item.kind], vim_item.kind)
|
||||
local kind = require("lspkind").cmp_format({mode = "symbol_text", maxwidth = 50})(entry, vim_item)
|
||||
|
||||
local strings = vim.split(kind.kind, "%s",{trimempty = true})
|
||||
kind.kind = " " .. strings[1] .. " "
|
||||
kind.menu = " (" .. strings[2] .. ")"
|
||||
|
||||
return kind
|
||||
|
||||
-- vim_item.menu = ({
|
||||
-- nvim_lsp = "[LSP]",
|
||||
-- nvim_lua = "[Lua]",
|
||||
-- buffer = "[BUF]",
|
||||
-- })[entry.source.name]
|
||||
--
|
||||
-- return vim_item
|
||||
end
|
||||
|
||||
},
|
||||
|
||||
sources = {
|
||||
{ name = "nvim_lsp"},
|
||||
{ name = "luasnip" },
|
||||
{ name = "emoji" },
|
||||
{ name = "calc" },
|
||||
},
|
||||
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
local ok,dap = pcall(require,"dap")
|
||||
if not ok then
|
||||
vim.notify("Failed to load dap\n\n")
|
||||
return
|
||||
end
|
||||
|
||||
-- dap.adapters.python = {
|
||||
-- type = "executable",
|
||||
-- command =
|
||||
-- args = { "-m","debugpy.adapter" }
|
||||
-- }
|
|
@ -0,0 +1,85 @@
|
|||
local ok,nvim_lsp = pcall(require,"lspconfig")
|
||||
if not ok then
|
||||
vim.notify("Failed to load lspconfig\n\n")
|
||||
return
|
||||
end
|
||||
|
||||
local utils = require"core.utils"
|
||||
local root_pattern = require"lspconfig.util".root_pattern
|
||||
local sign = vim.fn.sign_define
|
||||
local capabilities = vim.lsp.protocol.make_client_capabilities()
|
||||
|
||||
local handlers = {
|
||||
["textDocument/hover"] = vim.lsp.with(vim.lsp.handlers.hover,{border = "rounded"}),
|
||||
["textDocument/signatureHelp"] = vim.lsp.with(vim.lsp.handlers.signature_help,{border = "rounded"}),
|
||||
}
|
||||
|
||||
|
||||
local function DiagnosticSign(name,icon,color)
|
||||
sign("DiagnosticSign"..name,{text=icon,texthl="DiagnosticSign"..name})
|
||||
if (color ~= "Default") then
|
||||
utils.highlight{"Diagnostic"..name,fg=color}
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
for _,sign in pairs(vim.g.diagnostics_signs) do
|
||||
DiagnosticSign(sign.name,sign.icon,sign.color)
|
||||
end
|
||||
|
||||
vim.diagnostic.config {
|
||||
signs = true,
|
||||
underline = true,
|
||||
update_in_insert = false,
|
||||
severity_sort = false,
|
||||
|
||||
virtual_text = {prefix = 'x'},
|
||||
float = {border = "rounded"},
|
||||
}
|
||||
|
||||
|
||||
local on_attach = function(client,bufnr)
|
||||
print("Attaching to:",client.name)
|
||||
local function buf_set_keymap(...) vim.api.nvim_buf_set_keymap(bufnr,...) end
|
||||
local opts = {noremap = true,silent=true}
|
||||
|
||||
buf_set_keymap('n','gd','<cmd>lua vim.lsp.buf.definition()<CR>',opts)
|
||||
buf_set_keymap('n','K', '<cmd>lua vim.lsp.buf.hover()<CR>',opts)
|
||||
buf_set_keymap('n','[d','<cmd>lua vim.diagnostic.goto_prev()<CR>',opts)
|
||||
buf_set_keymap('n',']d','<cmd>lua vim.diagnostic.goto_next()<CR>',opts)
|
||||
buf_set_keymap('n','<leader>d','<cmd>lua vim.diagnostic.open_float({border="rounded"})<CR>',opts)
|
||||
buf_set_keymap('n','<space>f','<cmd>lua vim.lsp.buf.formatting()<CR>',opts)
|
||||
end
|
||||
|
||||
-- LSP Servers
|
||||
nvim_lsp.clangd.setup {
|
||||
filetypes = {"c","cpp","objc","objcpp"},
|
||||
on_attach = on_attach,
|
||||
handlers = handlers,
|
||||
capabilities = require('cmp_nvim_lsp').update_capabilities(capabilities),
|
||||
root_dir = root_pattern {
|
||||
"CMakeList.txt",
|
||||
"compile_flags.txt",
|
||||
".git",
|
||||
vim.fn.getcwd()
|
||||
}
|
||||
}
|
||||
|
||||
nvim_lsp.pyright.setup{
|
||||
on_attach = on_attach,
|
||||
handlers = handlers,
|
||||
capabilities = require('cmp_nvim_lsp').update_capabilities(capabilities),
|
||||
}
|
||||
|
||||
nvim_lsp.gopls.setup {
|
||||
cmd = {"gopls","server"},
|
||||
filetypes = {"go", "gomod"},
|
||||
on_attach = on_attach,
|
||||
handlers = handlers,
|
||||
capabilities = require('cmp_nvim_lsp').update_capabilities(capabilities),
|
||||
root_dir = root_pattern{
|
||||
"go.mod",
|
||||
".git",
|
||||
vim.fn.getcwd(),
|
||||
},
|
||||
}
|
|
@ -0,0 +1,38 @@
|
|||
require('lualine').setup{
|
||||
options = {
|
||||
icons_enabled = true,
|
||||
theme = 'catppuccin',
|
||||
component_separators = { left = '', right = ''},
|
||||
section_separators = { left = '', right = ''},
|
||||
disabled_filetypes = {
|
||||
statusline = {},
|
||||
winbar = {},
|
||||
},
|
||||
always_divide_middle = true,
|
||||
globalstatus = false,
|
||||
refresh = {
|
||||
statusline = 1000,
|
||||
tabline = 1000,
|
||||
winbar = 1000,
|
||||
}
|
||||
},
|
||||
sections = {
|
||||
lualine_a = {'mode'},
|
||||
lualine_b = {'branch', 'diagnostics'},
|
||||
lualine_c = {'filename'},
|
||||
lualine_x = {'filetype'},
|
||||
lualine_z = {'location'}
|
||||
},
|
||||
inactive_sections = {
|
||||
lualine_a = {},
|
||||
lualine_b = {},
|
||||
lualine_c = {'filename'},
|
||||
lualine_x = {'location'},
|
||||
lualine_y = {},
|
||||
lualine_z = {}
|
||||
},
|
||||
tabline = {},
|
||||
winbar = {},
|
||||
inactive_winbar = {},
|
||||
extensions = {}
|
||||
}
|
|
@ -0,0 +1,30 @@
|
|||
local ok,null_ls = pcall(require,"null-ls")
|
||||
if not ok then
|
||||
vim.notify("Failed to load null-ls\n\n")
|
||||
return
|
||||
end
|
||||
|
||||
local h = require("null-ls.helpers")
|
||||
local m = require("null-ls.methods")
|
||||
|
||||
local formatting = null_ls.builtins.formatting
|
||||
|
||||
local jq_format = h.make_builtin {
|
||||
name = "jq",
|
||||
method = m.internal.FORMATTING,
|
||||
filetypes = {"json"},
|
||||
generator_opts = {
|
||||
command = "jq",
|
||||
args = {"-M", "."},
|
||||
to_stdin = true,
|
||||
},
|
||||
|
||||
factory = h.formatter_factory,
|
||||
}
|
||||
|
||||
null_ls.setup{
|
||||
sources = {
|
||||
formatting.black,
|
||||
jq_format
|
||||
}
|
||||
}
|
|
@ -0,0 +1,128 @@
|
|||
local ok,nvim_tree = pcall(require,"nvim-tree")
|
||||
if not ok then
|
||||
vim.notify("Failed to load nvim-tree\n\n")
|
||||
return
|
||||
end
|
||||
|
||||
nvim_tree.setup {
|
||||
auto_reload_on_write = true,
|
||||
disable_netrw = false,
|
||||
hijack_cursor = false,
|
||||
hijack_netrw = true,
|
||||
hijack_unnamed_buffer_when_opening = false,
|
||||
ignore_buffer_on_setup = false,
|
||||
open_on_setup = false,
|
||||
open_on_setup_file = false,
|
||||
open_on_tab = false,
|
||||
sort_by = "name",
|
||||
update_cwd = false,
|
||||
|
||||
view = {
|
||||
width = 30,
|
||||
height = 30,
|
||||
hide_root_folder = false,
|
||||
side = "left",
|
||||
preserve_window_proportions = false,
|
||||
number = false,
|
||||
relativenumber = false,
|
||||
signcolumn = "yes",
|
||||
mappings = {
|
||||
custom_only = false,
|
||||
list = {},
|
||||
},
|
||||
},
|
||||
|
||||
renderer = {
|
||||
indent_markers = {
|
||||
enable = false,
|
||||
icons = {
|
||||
corner = "└ ",
|
||||
edge = "│ ",
|
||||
none = " ",
|
||||
},
|
||||
},
|
||||
icons = {
|
||||
webdev_colors = true,
|
||||
git_placement = "before",
|
||||
}
|
||||
},
|
||||
|
||||
hijack_directories = {
|
||||
enable = true,
|
||||
auto_open = true,
|
||||
},
|
||||
|
||||
update_focused_file = {
|
||||
enable = false,
|
||||
update_cwd = false,
|
||||
ignore_list = {},
|
||||
},
|
||||
|
||||
ignore_ft_on_setup = {},
|
||||
system_open = {
|
||||
cmd = "",
|
||||
args = {},
|
||||
},
|
||||
|
||||
diagnostics = {
|
||||
enable = false,
|
||||
show_on_dirs = false,
|
||||
icons = {
|
||||
hint = "",
|
||||
info = "",
|
||||
warning = "",
|
||||
error = "",
|
||||
},
|
||||
},
|
||||
|
||||
filters = {
|
||||
dotfiles = true,
|
||||
custom = {},
|
||||
exclude = {},
|
||||
},
|
||||
|
||||
git = {
|
||||
enable = true,
|
||||
ignore = true,
|
||||
timeout = 400,
|
||||
},
|
||||
|
||||
actions = {
|
||||
use_system_clipboard = true,
|
||||
change_dir = {
|
||||
enable = true,
|
||||
global = false,
|
||||
restrict_above_cwd = false,
|
||||
},
|
||||
open_file = {
|
||||
quit_on_open = false,
|
||||
resize_window = false,
|
||||
window_picker = {
|
||||
enable = true,
|
||||
chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890",
|
||||
exclude = {
|
||||
filetype = { "notify", "packer", "qf", "diff", "fugitive", "fugitiveblame" },
|
||||
buftype = { "nofile", "terminal", "help" },
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
trash = {
|
||||
cmd = "trash",
|
||||
require_confirm = true,
|
||||
},
|
||||
|
||||
log = {
|
||||
enable = false,
|
||||
truncate = false,
|
||||
types = {
|
||||
all = false,
|
||||
config = false,
|
||||
copy_paste = false,
|
||||
diagnostics = false,
|
||||
git = false,
|
||||
profile = false,
|
||||
},
|
||||
},
|
||||
}
|
|
@ -0,0 +1,28 @@
|
|||
local ok,nvim_treesitter_configs = pcall(require,"nvim-treesitter.configs")
|
||||
if not ok then
|
||||
vim.notify("Failed to load nvim-treesitter\n\n")
|
||||
return
|
||||
end
|
||||
|
||||
nvim_treesitter_configs.setup {
|
||||
highlight = {
|
||||
enable = true,
|
||||
disable = {},
|
||||
},
|
||||
indent = {
|
||||
enable = false,
|
||||
disable = {},
|
||||
},
|
||||
ensure_installed = {
|
||||
"c",
|
||||
"cpp",
|
||||
"vim",
|
||||
"lua",
|
||||
"bash",
|
||||
"python",
|
||||
"go"
|
||||
},
|
||||
}
|
||||
|
||||
local parser_config = require "nvim-treesitter.parsers".get_parser_configs()
|
||||
parser_config.tsx.filetype_to_parsername = { "javascript", "typescript.tsx" }
|
|
@ -0,0 +1,506 @@
|
|||
#################################
|
||||
# Animations #
|
||||
#################################
|
||||
# requires https://github.com/jonaburg/picom
|
||||
# (These are also the default values)
|
||||
transition-length = 300
|
||||
transition-pow-x = 0.1
|
||||
transition-pow-y = 0.1
|
||||
transition-pow-w = 0.1
|
||||
transition-pow-h = 0.1
|
||||
size-transition = true
|
||||
|
||||
|
||||
#################################
|
||||
# Corners #
|
||||
#################################
|
||||
# requires: https://github.com/sdhand/compton or https://github.com/jonaburg/picom
|
||||
corner-radius = 16.0;
|
||||
# rounded-corners-exclude = [
|
||||
# #"window_type = 'normal'",
|
||||
# "class_g = 'LibreWolf'",
|
||||
# "class_g = 'kitty'",
|
||||
# "class_g = 'Polybar'",
|
||||
# "class_g = 'KotatogramDesktop'"
|
||||
# ];
|
||||
round-borders = 12;
|
||||
round-borders-exclude = [
|
||||
#"class_g = 'TelegramDesktop'",
|
||||
];
|
||||
|
||||
#################################
|
||||
# Shadows #
|
||||
#################################
|
||||
|
||||
|
||||
# Enabled client-side shadows on windows. Note desktop windows
|
||||
# (windows with '_NET_WM_WINDOW_TYPE_DESKTOP') never get shadow,
|
||||
# unless explicitly requested using the wintypes option.
|
||||
#
|
||||
# shadow = false
|
||||
shadow = false;
|
||||
|
||||
# The blur radius for shadows, in pixels. (defaults to 12)
|
||||
# shadow-radius = 12
|
||||
shadow-radius = 7;
|
||||
|
||||
# The opacity of shadows. (0.0 - 1.0, defaults to 0.75)
|
||||
# shadow-opacity = .75
|
||||
|
||||
# The left offset for shadows, in pixels. (defaults to -15)
|
||||
# shadow-offset-x = -15
|
||||
shadow-offset-x = -7;
|
||||
|
||||
# The top offset for shadows, in pixels. (defaults to -15)
|
||||
# shadow-offset-y = -15
|
||||
shadow-offset-y = -7;
|
||||
|
||||
# Avoid drawing shadows on dock/panel windows. This option is deprecated,
|
||||
# you should use the *wintypes* option in your config file instead.
|
||||
#
|
||||
# no-dock-shadow = false
|
||||
|
||||
# Don't draw shadows on drag-and-drop windows. This option is deprecated,
|
||||
# you should use the *wintypes* option in your config file instead.
|
||||
#
|
||||
# no-dnd-shadow = false
|
||||
|
||||
# Red color value of shadow (0.0 - 1.0, defaults to 0).
|
||||
# shadow-red = 0
|
||||
|
||||
# Green color value of shadow (0.0 - 1.0, defaults to 0).
|
||||
# shadow-green = 0
|
||||
|
||||
# Blue color value of shadow (0.0 - 1.0, defaults to 0).
|
||||
# shadow-blue = 0
|
||||
|
||||
# Do not paint shadows on shaped windows. Note shaped windows
|
||||
# here means windows setting its shape through X Shape extension.
|
||||
# Those using ARGB background is beyond our control.
|
||||
# Deprecated, use
|
||||
# shadow-exclude = 'bounding_shaped'
|
||||
# or
|
||||
# shadow-exclude = 'bounding_shaped && !rounded_corners'
|
||||
# instead.
|
||||
#
|
||||
# shadow-ignore-shaped = ''
|
||||
|
||||
# Specify a list of conditions of windows that should have no shadow.
|
||||
#
|
||||
# examples:
|
||||
# shadow-exclude = "n:e:Notification";
|
||||
#
|
||||
# shadow-exclude = []
|
||||
shadow-exclude = [
|
||||
"name = 'Notification'",
|
||||
"class_g = 'Conky'",
|
||||
"class_g ?= 'Notify-osd'",
|
||||
"class_g = 'Cairo-clock'",
|
||||
"class_g = 'slop'",
|
||||
"class_g = 'Polybar'",
|
||||
"_GTK_FRAME_EXTENTS@:c"
|
||||
];
|
||||
|
||||
# Specify a X geometry that describes the region in which shadow should not
|
||||
# be painted in, such as a dock window region. Use
|
||||
# shadow-exclude-reg = "x10+0+0"
|
||||
# for example, if the 10 pixels on the bottom of the screen should not have shadows painted on.
|
||||
#
|
||||
# shadow-exclude-reg = ""
|
||||
|
||||
# Crop shadow of a window fully on a particular Xinerama screen to the screen.
|
||||
# xinerama-shadow-crop = false
|
||||
|
||||
|
||||
#################################
|
||||
# Fading #
|
||||
#################################
|
||||
|
||||
|
||||
# Fade windows in/out when opening/closing and when opacity changes,
|
||||
# unless no-fading-openclose is used.
|
||||
# fading = false
|
||||
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;
|
||||
|
||||
# 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;
|
||||
|
||||
# The time between steps in fade step, in milliseconds. (> 0, defaults to 10)
|
||||
# fade-delta = 10
|
||||
|
||||
# Specify a list of conditions of windows that should not be faded.
|
||||
# don't need this, we disable fading for all normal windows with wintypes: {}
|
||||
fade-exclude = [
|
||||
"class_g = 'slop'" # maim
|
||||
]
|
||||
|
||||
# Do not fade on window open/close.
|
||||
# no-fading-openclose = false
|
||||
|
||||
# Do not fade destroyed ARGB windows with WM frame. Workaround of bugs in Openbox, Fluxbox, etc.
|
||||
# no-fading-destroyed-argb = false
|
||||
|
||||
|
||||
#################################
|
||||
# Transparency / Opacity #
|
||||
#################################
|
||||
|
||||
|
||||
# Opacity of inactive windows. (0.1 - 1.0, defaults to 1.0)
|
||||
# inactive-opacity = 1
|
||||
inactive-opacity = 0.8;
|
||||
|
||||
# Opacity of window titlebars and borders. (0.1 - 1.0, disabled by default)
|
||||
# frame-opacity = 1.0
|
||||
frame-opacity = 0.7;
|
||||
|
||||
# Default opacity for dropdown menus and popup menus. (0.0 - 1.0, defaults to 1.0)
|
||||
# menu-opacity = 1.0
|
||||
# menu-opacity is depreciated use dropdown-menu and popup-menu instead.
|
||||
|
||||
#If using these 2 below change their values in line 510 & 511 aswell
|
||||
popup_menu = { opacity = 0.8; }
|
||||
dropdown_menu = { opacity = 0.8; }
|
||||
|
||||
|
||||
# Let inactive opacity set by -i override the '_NET_WM_OPACITY' values of windows.
|
||||
# inactive-opacity-override = true
|
||||
inactive-opacity-override = false;
|
||||
|
||||
# Default opacity for active windows. (0.0 - 1.0, defaults to 1.0)
|
||||
active-opacity = 1.0;
|
||||
|
||||
# Dim inactive windows. (0.0 - 1.0, defaults to 0.0)
|
||||
# inactive-dim = 0.0
|
||||
|
||||
# Specify a list of conditions of windows that should always be considered focused.
|
||||
# focus-exclude = []
|
||||
focus-exclude = [
|
||||
"class_g = 'Cairo-clock'",
|
||||
"class_g = 'Bar'", # lemonbar
|
||||
"class_g = 'slop'" # maim
|
||||
];
|
||||
|
||||
# Use fixed inactive dim value, instead of adjusting according to window opacity.
|
||||
# inactive-dim-fixed = 1.0
|
||||
|
||||
# Specify a list of opacity rules, in the format `PERCENT:PATTERN`,
|
||||
# like `50:name *= "Firefox"`. picom-trans is recommended over this.
|
||||
# Note we don't make any guarantee about possible conflicts with other
|
||||
# programs that set '_NET_WM_WINDOW_OPACITY' on frame or client windows.
|
||||
# example:
|
||||
# opacity-rule = [ "80:class_g = 'URxvt'" ];
|
||||
#
|
||||
# opacity-rule = []
|
||||
opacity-rule = [
|
||||
"80:class_g = 'Bar'", # lemonbar
|
||||
"100:class_g = 'slop'", # maim
|
||||
"100:class_g = 'XTerm'",
|
||||
"100:class_g = 'URxvt'",
|
||||
"100:class_g = 'kitty'",
|
||||
"100:class_g = 'Alacritty'",
|
||||
"80:class_g = 'Polybar'",
|
||||
"100:class_g = 'code-oss'",
|
||||
"100:class_g = 'Meld'",
|
||||
"70:class_g = 'TelegramDesktop'",
|
||||
"90:class_g = 'Joplin'",
|
||||
"100:class_g = 'firefox'",
|
||||
"100:class_g = 'Thunderbird'"
|
||||
];
|
||||
|
||||
|
||||
#################################
|
||||
# Background-Blurring #
|
||||
#################################
|
||||
|
||||
|
||||
# Parameters for background blurring, see the *BLUR* section for more information.
|
||||
# blur-method =
|
||||
# blur-size = 12
|
||||
#
|
||||
# blur-deviation = false
|
||||
|
||||
# Blur background of semi-transparent / ARGB windows.
|
||||
# Bad in performance, with driver-dependent behavior.
|
||||
# The name of the switch may change without prior notifications.
|
||||
#
|
||||
# blur-background = true;
|
||||
|
||||
# Blur background of windows when the window frame is not opaque.
|
||||
# Implies:
|
||||
# blur-background
|
||||
# Bad in performance, with driver-dependent behavior. The name may change.
|
||||
#
|
||||
# blur-background-frame = false;
|
||||
|
||||
|
||||
# Use fixed blur strength rather than adjusting according to window opacity.
|
||||
# blur-background-fixed = false;
|
||||
|
||||
|
||||
# Specify the blur convolution kernel, with the following format:
|
||||
# example:
|
||||
# blur-kern = "5,5,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1";
|
||||
#
|
||||
# blur-kern = ''
|
||||
# blur-kern = "3x3box";
|
||||
|
||||
blur: {
|
||||
# requires: https://github.com/ibhagwan/picom
|
||||
method = "kawase";
|
||||
#method = "kernel";
|
||||
strength = 7;
|
||||
# deviation = 1.0;
|
||||
# kernel = "11x11gaussian";
|
||||
background = false;
|
||||
background-frame = false;
|
||||
background-fixed = false;
|
||||
kern = "3x3box";
|
||||
}
|
||||
|
||||
# Exclude conditions for background blur.
|
||||
blur-background-exclude = [
|
||||
#"window_type = 'dock'",
|
||||
#"window_type = 'desktop'",
|
||||
#"class_g = 'URxvt'",
|
||||
#
|
||||
# prevents picom from blurring the background
|
||||
# when taking selection screenshot with `main`
|
||||
# https://github.com/naelstrof/maim/issues/130
|
||||
"class_g = 'slop'",
|
||||
"_GTK_FRAME_EXTENTS@:c"
|
||||
];
|
||||
|
||||
|
||||
#################################
|
||||
# General Settings #
|
||||
#################################
|
||||
|
||||
# Daemonize process. Fork to background after initialization. Causes issues with certain (badly-written) drivers.
|
||||
# daemon = false
|
||||
|
||||
# Specify the backend to use: `xrender`, `glx`, or `xr_glx_hybrid`.
|
||||
# `xrender` is the default one.
|
||||
#
|
||||
experimental-backends = true;
|
||||
backend = "glx";
|
||||
#backend = "xrender";
|
||||
|
||||
|
||||
# Enable/disable VSync.
|
||||
# vsync = false
|
||||
vsync = true
|
||||
|
||||
# Enable remote control via D-Bus. See the *D-BUS API* section below for more details.
|
||||
# dbus = false
|
||||
|
||||
# Try to detect WM windows (a non-override-redirect window with no
|
||||
# child that has 'WM_STATE') and mark them as active.
|
||||
#
|
||||
# mark-wmwin-focused = false
|
||||
mark-wmwin-focused = true;
|
||||
|
||||
# Mark override-redirect windows that doesn't have a child window with 'WM_STATE' focused.
|
||||
# mark-ovredir-focused = false
|
||||
mark-ovredir-focused = true;
|
||||
|
||||
# Try to detect windows with rounded corners and don't consider them
|
||||
# shaped windows. The accuracy is not very high, unfortunately.
|
||||
#
|
||||
# detect-rounded-corners = false
|
||||
detect-rounded-corners = true;
|
||||
|
||||
# Detect '_NET_WM_OPACITY' on client windows, useful for window managers
|
||||
# not passing '_NET_WM_OPACITY' of client windows to frame windows.
|
||||
#
|
||||
# detect-client-opacity = false
|
||||
detect-client-opacity = true;
|
||||
|
||||
# Specify refresh rate of the screen. If not specified or 0, picom will
|
||||
# try detecting this with X RandR extension.
|
||||
#
|
||||
# refresh-rate = 60
|
||||
refresh-rate = 0
|
||||
|
||||
# Limit picom to repaint at most once every 1 / 'refresh_rate' second to
|
||||
# boost performance. This should not be used with
|
||||
# vsync drm/opengl/opengl-oml
|
||||
# as they essentially does sw-opti's job already,
|
||||
# unless you wish to specify a lower refresh rate than the actual value.
|
||||
#
|
||||
# sw-opti =
|
||||
|
||||
# Use EWMH '_NET_ACTIVE_WINDOW' to determine currently focused window,
|
||||
# rather than listening to 'FocusIn'/'FocusOut' event. Might have more accuracy,
|
||||
# provided that the WM supports it.
|
||||
#
|
||||
# use-ewmh-active-win = false
|
||||
|
||||
# Unredirect all windows if a full-screen opaque window is detected,
|
||||
# to maximize performance for full-screen windows. Known to cause flickering
|
||||
# when redirecting/unredirecting windows. paint-on-overlay may make the flickering less obvious.
|
||||
#
|
||||
# unredir-if-possible = false
|
||||
|
||||
# Delay before unredirecting the window, in milliseconds. Defaults to 0.
|
||||
# unredir-if-possible-delay = 0
|
||||
|
||||
# Conditions of windows that shouldn't be considered full-screen for unredirecting screen.
|
||||
# unredir-if-possible-exclude = []
|
||||
|
||||
# Use 'WM_TRANSIENT_FOR' to group windows, and consider windows
|
||||
# in the same group focused at the same time.
|
||||
#
|
||||
# detect-transient = false
|
||||
detect-transient = true
|
||||
|
||||
# Use 'WM_CLIENT_LEADER' to group windows, and consider windows in the same
|
||||
# group focused at the same time. 'WM_TRANSIENT_FOR' has higher priority if
|
||||
# detect-transient is enabled, too.
|
||||
#
|
||||
# detect-client-leader = false
|
||||
detect-client-leader = true
|
||||
|
||||
# Resize damaged region by a specific number of pixels.
|
||||
# A positive value enlarges it while a negative one shrinks it.
|
||||
# If the value is positive, those additional pixels will not be actually painted
|
||||
# to screen, only used in blur calculation, and such. (Due to technical limitations,
|
||||
# with use-damage, those pixels will still be incorrectly painted to screen.)
|
||||
# Primarily used to fix the line corruption issues of blur,
|
||||
# in which case you should use the blur radius value here
|
||||
# (e.g. with a 3x3 kernel, you should use `--resize-damage 1`,
|
||||
# with a 5x5 one you use `--resize-damage 2`, and so on).
|
||||
# May or may not work with *--glx-no-stencil*. Shrinking doesn't function correctly.
|
||||
#
|
||||
# resize-damage = 1
|
||||
|
||||
# Specify a list of conditions of windows that should be painted with inverted color.
|
||||
# Resource-hogging, and is not well tested.
|
||||
#
|
||||
# invert-color-include = []
|
||||
|
||||
# GLX backend: Avoid using stencil buffer, useful if you don't have a stencil buffer.
|
||||
# Might cause incorrect opacity when rendering transparent content (but never
|
||||
# practically happened) and may not work with blur-background.
|
||||
# My tests show a 15% performance boost. Recommended.
|
||||
#
|
||||
# glx-no-stencil = false
|
||||
|
||||
# GLX backend: Avoid rebinding pixmap on window damage.
|
||||
# Probably could improve performance on rapid window content changes,
|
||||
# but is known to break things on some drivers (LLVMpipe, xf86-video-intel, etc.).
|
||||
# Recommended if it works.
|
||||
#
|
||||
# glx-no-rebind-pixmap = false
|
||||
|
||||
# Disable the use of damage information.
|
||||
# This cause the whole screen to be redrawn everytime, instead of the part of the screen
|
||||
# has actually changed. Potentially degrades the performance, but might fix some artifacts.
|
||||
# The opposing option is use-damage
|
||||
#
|
||||
# no-use-damage = false
|
||||
#use-damage = true (Causing Weird Black semi opaque rectangles when terminal is opened)
|
||||
#Changing use-damage to false fixes the problem
|
||||
use-damage = false
|
||||
|
||||
# Use X Sync fence to sync clients' draw calls, to make sure all draw
|
||||
# calls are finished before picom starts drawing. Needed on nvidia-drivers
|
||||
# with GLX backend for some users.
|
||||
#
|
||||
# xrender-sync-fence = false
|
||||
|
||||
# GLX backend: Use specified GLSL fragment shader for rendering window contents.
|
||||
# See `compton-default-fshader-win.glsl` and `compton-fake-transparency-fshader-win.glsl`
|
||||
# in the source tree for examples.
|
||||
#
|
||||
# glx-fshader-win = ''
|
||||
|
||||
# Force all windows to be painted with blending. Useful if you
|
||||
# have a glx-fshader-win that could turn opaque pixels transparent.
|
||||
#
|
||||
# force-win-blend = false
|
||||
|
||||
# Do not use EWMH to detect fullscreen windows.
|
||||
# Reverts to checking if a window is fullscreen based only on its size and coordinates.
|
||||
#
|
||||
# no-ewmh-fullscreen = false
|
||||
|
||||
# Dimming bright windows so their brightness doesn't exceed this set value.
|
||||
# Brightness of a window is estimated by averaging all pixels in the window,
|
||||
# so this could comes with a performance hit.
|
||||
# Setting this to 1.0 disables this behaviour. Requires --use-damage to be disabled. (default: 1.0)
|
||||
#
|
||||
# max-brightness = 1.0
|
||||
|
||||
# Make transparent windows clip other windows like non-transparent windows do,
|
||||
# instead of blending on top of them.
|
||||
#
|
||||
# transparent-clipping = false
|
||||
|
||||
# Set the log level. Possible values are:
|
||||
# "trace", "debug", "info", "warn", "error"
|
||||
# in increasing level of importance. Case doesn't matter.
|
||||
# If using the "TRACE" log level, it's better to log into a file
|
||||
# using *--log-file*, since it can generate a huge stream of logs.
|
||||
#
|
||||
# log-level = "debug"
|
||||
log-level = "info";
|
||||
|
||||
# Set the log file.
|
||||
# If *--log-file* is never specified, logs will be written to stderr.
|
||||
# Otherwise, logs will to written to the given file, though some of the early
|
||||
# logs might still be written to the stderr.
|
||||
# When setting this option from the config file, it is recommended to use an absolute path.
|
||||
#
|
||||
# log-file = '/path/to/your/log/file'
|
||||
|
||||
# Show all X errors (for debugging)
|
||||
# show-all-xerrors = false
|
||||
|
||||
# Write process ID to a file.
|
||||
# write-pid-path = '/path/to/your/log/file'
|
||||
|
||||
# Window type settings
|
||||
#
|
||||
# 'WINDOW_TYPE' is one of the 15 window types defined in EWMH standard:
|
||||
# "unknown", "desktop", "dock", "toolbar", "menu", "utility",
|
||||
# "splash", "dialog", "normal", "dropdown_menu", "popup_menu",
|
||||
# "tooltip", "notification", "combo", and "dnd".
|
||||
#
|
||||
# Following per window-type options are available: ::
|
||||
#
|
||||
# fade, shadow:::
|
||||
# Controls window-type-specific shadow and fade settings.
|
||||
#
|
||||
# opacity:::
|
||||
# Controls default opacity of the window type.
|
||||
#
|
||||
# focus:::
|
||||
# Controls whether the window of this type is to be always considered focused.
|
||||
# (By default, all window types except "normal" and "dialog" has this on.)
|
||||
#
|
||||
# full-shadow:::
|
||||
# Controls whether shadow is drawn under the parts of the window that you
|
||||
# normally won't be able to see. Useful when the window has parts of it
|
||||
# transparent, and you want shadows in those areas.
|
||||
#
|
||||
# redir-ignore:::
|
||||
# Controls whether this type of windows should cause screen to become
|
||||
# redirected again after been unredirected. If you have unredir-if-possible
|
||||
# set, and doesn't want certain window to cause unnecessary screen redirection,
|
||||
# you can set this to `true`.
|
||||
#
|
||||
wintypes:
|
||||
{
|
||||
normal = { fade = false; shadow = false; }
|
||||
tooltip = { fade = true; shadow = true; opacity = 0.75; focus = true; full-shadow = false; };
|
||||
dock = { shadow = false; }
|
||||
dnd = { shadow = false; }
|
||||
popup_menu = { opacity = 0.8; }
|
||||
dropdown_menu = { opacity = 0.8; }
|
||||
};
|
|
@ -0,0 +1,180 @@
|
|||
;==========================================================
|
||||
;
|
||||
;
|
||||
; ██████╗ ██████╗ ██╗ ██╗ ██╗██████╗ █████╗ ██████╗
|
||||
; ██╔══██╗██╔═══██╗██║ ╚██╗ ██╔╝██╔══██╗██╔══██╗██╔══██╗
|
||||
; ██████╔╝██║ ██║██║ ╚████╔╝ ██████╔╝███████║██████╔╝
|
||||
; ██╔═══╝ ██║ ██║██║ ╚██╔╝ ██╔══██╗██╔══██║██╔══██╗
|
||||
; ██║ ╚██████╔╝███████╗██║ ██████╔╝██║ ██║██║ ██║
|
||||
; ╚═╝ ╚═════╝ ╚══════╝╚═╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝
|
||||
;
|
||||
;
|
||||
; To learn more about how to configure Polybar
|
||||
; go to https://github.com/polybar/polybar
|
||||
;
|
||||
; The README contains a lot of information
|
||||
;
|
||||
;==========================================================
|
||||
|
||||
[colors]
|
||||
background = #24283B
|
||||
background-alt = #373B41
|
||||
foreground = #f9f8fe
|
||||
primary = #BB9AF7
|
||||
secondary = #8ABEB7
|
||||
alert = #A54242
|
||||
disabled = #707880
|
||||
|
||||
[bar/example]
|
||||
width = 100%
|
||||
height = 23pt
|
||||
|
||||
radius = 12
|
||||
|
||||
; dpi = 96
|
||||
|
||||
background = ${colors.background}
|
||||
foreground = ${colors.foreground}
|
||||
|
||||
line-size = 3pt
|
||||
|
||||
border-size = 0pt
|
||||
border-color = #00000000
|
||||
|
||||
padding-left = 2
|
||||
padding-right = 2
|
||||
|
||||
module-margin = 1
|
||||
|
||||
separator = |
|
||||
separator-foreground = ${colors.disabled}
|
||||
|
||||
font-0 = RobotoMono Nerd Font Mono:size=10;2
|
||||
font-1 = FontAwesome:style=Regular:pixelsize=10;2
|
||||
|
||||
modules-left = date
|
||||
modules-right = pulseaudio xkeyboard updates-pacman-aurhelper weather memory
|
||||
modules-center = xworkspaces
|
||||
|
||||
cursor-click = pointer
|
||||
cursor-scroll = ns-resize
|
||||
|
||||
enable-ipc = true
|
||||
|
||||
; tray-position = right
|
||||
|
||||
; wm-restack = generic
|
||||
wm-restack = bspwm
|
||||
; wm-restack = i3
|
||||
|
||||
; override-redirect = true
|
||||
|
||||
|
||||
[module/xworkspaces]
|
||||
type = internal/xworkspaces
|
||||
|
||||
label-active = %name%
|
||||
label-active-background = ${colors.background-alt}
|
||||
label-active-underline= ${colors.primary}
|
||||
label-active-padding = 2
|
||||
|
||||
label-occupied = %name%
|
||||
label-occupied-padding = 2
|
||||
|
||||
label-urgent = %name%
|
||||
label-urgent-background = ${colors.alert}
|
||||
label-urgent-padding = 2
|
||||
|
||||
label-empty = %name%
|
||||
label-empty-foreground = ${colors.disabled}
|
||||
label-empty-padding = 2
|
||||
|
||||
[module/weather]
|
||||
type = custom/script
|
||||
exec = ~/.config/polybar/scripts/weather/wthr
|
||||
interval = 600
|
||||
|
||||
[module/updates-pacman-aurhelper]
|
||||
type = custom/script
|
||||
exec = ~/.config/polybar/scripts/updates-pacman-aurhelper.sh
|
||||
interval = 7200
|
||||
|
||||
|
||||
[module/xwindow]
|
||||
type = internal/xwindow
|
||||
label = %title:0:60:...%
|
||||
|
||||
[module/filesystem]
|
||||
type = internal/fs
|
||||
interval = 25
|
||||
|
||||
mount-0 = /
|
||||
|
||||
label-mounted = %{F#F0C674}%mountpoint%%{F-} %percentage_used%%
|
||||
|
||||
label-unmounted = %mountpoint% not mounted
|
||||
label-unmounted-foreground = ${colors.disabled}
|
||||
|
||||
[module/pulseaudio]
|
||||
type = internal/pulseaudio
|
||||
|
||||
format-volume-prefix = " 墳 "
|
||||
format-volume-prefix-foreground = ${colors.primary}
|
||||
format-volume = <label-volume>
|
||||
|
||||
label-volume = %percentage%%
|
||||
|
||||
label-muted = muted
|
||||
label-muted-foreground = ${colors.disabled}
|
||||
|
||||
[module/xkeyboard]
|
||||
type = internal/xkeyboard
|
||||
blacklist-0 = num lock
|
||||
|
||||
label-layout = %layout%
|
||||
label-layout-foreground = ${colors.primary}
|
||||
|
||||
label-indicator-padding = 2
|
||||
label-indicator-margin = 1
|
||||
label-indicator-foreground = ${colors.background}
|
||||
label-indicator-background = ${colors.secondary}
|
||||
|
||||
[module/memory]
|
||||
type = internal/memory
|
||||
interval = 2
|
||||
format-prefix = " "
|
||||
format-prefix-foreground = ${colors.primary}
|
||||
label = %percentage_used:2%%
|
||||
|
||||
[module/cpu]
|
||||
type = internal/cpu
|
||||
interval = 2
|
||||
format-prefix = "cpu "
|
||||
format-prefix-foreground = ${colors.primary}
|
||||
label = %percentage:2%%
|
||||
|
||||
[network-base]
|
||||
type = internal/network
|
||||
interval = 5
|
||||
format-connected = <label-connected>
|
||||
format-disconnected = <label-disconnected>
|
||||
label-disconnected = %{F#F0C674}%ifname%%{F#707880} disconnected
|
||||
|
||||
[module/wlan]
|
||||
inherit = network-base
|
||||
interface-type = wireless
|
||||
label-connected = %{F#2AC3DE} %{F-}%essid%
|
||||
|
||||
[module/date]
|
||||
type = internal/date
|
||||
interval = 1
|
||||
|
||||
date = %a,%b %d %I:%M %p
|
||||
label-foreground = #41A6B5
|
||||
;${colors.primary}
|
||||
|
||||
[settings]
|
||||
screenchange-reload = true
|
||||
pseudo-transparency = true
|
||||
|
||||
; vim:ft=dosini
|
|
@ -0,0 +1,23 @@
|
|||
#!/bin/sh
|
||||
|
||||
if ! updates_arch=$(checkupdates 2> /dev/null | wc -l ); then
|
||||
updates_arch=0
|
||||
fi
|
||||
|
||||
date=$(grep 'pacman -Suy' /var/log/pacman.log | tail -1 | tr -d '[' | cut -f 1 -d 'T')
|
||||
|
||||
if ! updates_aur=$(paru -Qum 2> /dev/null | wc -l); then
|
||||
# if ! updates_aur=$(cower -u 2> /dev/null | wc -l); then
|
||||
# if ! updates_aur=$(trizen -Su --aur --quiet | wc -l); then
|
||||
# if ! updates_aur=$(pikaur -Qua 2> /dev/null | wc -l); then
|
||||
# if ! updates_aur=$(rua upgrade --printonly 2> /dev/null | wc -l); then
|
||||
updates_aur=0
|
||||
fi
|
||||
|
||||
updates=$((updates_arch + updates_aur))
|
||||
|
||||
if [ "$updates" -gt 0 ]; then
|
||||
echo "%{F#7dcfff} $updates $date%{F-}"
|
||||
else
|
||||
echo ""
|
||||
fi
|
|
@ -0,0 +1,2 @@
|
|||
address = ""
|
||||
app_id = ""
|
|
@ -0,0 +1,31 @@
|
|||
from typing import NamedTuple
|
||||
from enum import Enum
|
||||
|
||||
from environs import Env
|
||||
|
||||
env = Env()
|
||||
env.read_env()
|
||||
|
||||
# app_id:
|
||||
app_id = env.str("app_id")
|
||||
address = env.str("address")
|
||||
|
||||
class Color(NamedTuple):
|
||||
hcolor:str
|
||||
start_temp:int
|
||||
end_temp:int
|
||||
|
||||
class Colors(Enum):
|
||||
blue1 = Color("#7aa2f7",-20,10)
|
||||
green1 = Color("#9ECE6A",10,21)
|
||||
red1 = Color("#dc143c",22,50)
|
||||
|
||||
# Used nerd fonts icons
|
||||
class WeatherIcons(Enum):
|
||||
Thunderstorm = ""
|
||||
Rain = ""
|
||||
Snow = ""
|
||||
Fog = ""
|
||||
Clouds = ""
|
||||
Clear = ""
|
||||
Unknown = "NOT FOUND ICON"
|
|
@ -0,0 +1,2 @@
|
|||
class ApiServiceError(Exception):
|
||||
"""Service Error"""
|
|
@ -0,0 +1,22 @@
|
|||
from config import WeatherIcons,Colors
|
||||
from weather import Weather
|
||||
from config import Color
|
||||
|
||||
def _select_icon(weather_status:str) -> str:
|
||||
for icon in WeatherIcons:
|
||||
if icon.name == weather_status:
|
||||
return icon.value
|
||||
return WeatherIcons.Other.value
|
||||
|
||||
def _select_color(temp:int) -> Color:
|
||||
for color in Colors:
|
||||
if (color.value.end_temp >= temp >= color.value.start_temp):
|
||||
return color.value
|
||||
return Color("#00000",-1,-1)
|
||||
|
||||
def format_weather(weather:Weather) -> str:
|
||||
color = _select_color(weather.temp)
|
||||
icon = _select_icon(weather.weatherType)
|
||||
return "%{{F{0}}} {1} {2}°C %{{F-}}".format(
|
||||
color.hcolor,icon,round(weather.temp)
|
||||
)
|
|
@ -0,0 +1,26 @@
|
|||
from geopy.geocoders import Nominatim
|
||||
from config import address
|
||||
|
||||
from exceptions import ApiServiceError
|
||||
|
||||
from typing import NamedTuple
|
||||
class Location(NamedTuple):
|
||||
lat:float
|
||||
lon:float
|
||||
|
||||
def __get_location_response() -> dict:
|
||||
try:
|
||||
app = Nominatim(user_agent="UserAgent")
|
||||
return app.geocode(address).raw
|
||||
except:
|
||||
raise ApiServiceError
|
||||
|
||||
def _parse_location_reponse(loc_dict:dict) -> Location:
|
||||
return Location(
|
||||
lat=loc_dict["lat"],
|
||||
lon=loc_dict["lon"],
|
||||
)
|
||||
|
||||
def get_location() -> Location:
|
||||
response_json = __get_location_response()
|
||||
return _parse_location_reponse(response_json)
|
|
@ -0,0 +1,46 @@
|
|||
import json
|
||||
from json.decoder import JSONDecodeError
|
||||
|
||||
import urllib.request
|
||||
from urllib.error import URLError
|
||||
|
||||
from exceptions import ApiServiceError
|
||||
|
||||
from config import app_id
|
||||
|
||||
from location import Location
|
||||
from typing import NamedTuple
|
||||
|
||||
Celsius = int
|
||||
class Weather(NamedTuple):
|
||||
temp:Celsius
|
||||
weatherType:str
|
||||
windSpeed:int
|
||||
|
||||
def get_weather(loc:Location) -> Weather:
|
||||
weather_response = _get_weather_response(loc)
|
||||
return _parse_weather_response(weather_response)
|
||||
|
||||
def _get_weather_response(loc:Location) -> str:
|
||||
url = (
|
||||
"https://api.openweathermap.org/data/2.5/weather?"
|
||||
"lat={latitude}&lon={longitude}"
|
||||
"&appid=" + app_id + "&units=metric"
|
||||
)
|
||||
|
||||
url = url.format(latitude=loc.lat,longitude=loc.lon)
|
||||
try:
|
||||
return urllib.request.urlopen(url).read()
|
||||
except URLError:
|
||||
raise ApiServiceError
|
||||
|
||||
def _parse_weather_response(response:str) -> Weather:
|
||||
try:
|
||||
weather_dict = json.loads(response)
|
||||
except JSONDecodeError:
|
||||
raise ApiServiceError
|
||||
return Weather(
|
||||
temp = round(weather_dict["main"]["temp"]),
|
||||
weatherType = weather_dict["weather"][0]["main"],
|
||||
windSpeed = weather_dict["wind"]["speed"],
|
||||
)
|
|
@ -0,0 +1,19 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
from location import get_location
|
||||
from weather import get_weather
|
||||
|
||||
from formatter import format_weather
|
||||
import exceptions
|
||||
|
||||
def main() -> None:
|
||||
try:
|
||||
loc = get_location()
|
||||
weather = get_weather(loc)
|
||||
except exceptions.ApiServiceError:
|
||||
print("%{F#f7768e}API Service ERROR%{F-}")
|
||||
return
|
||||
print(format_weather(weather))
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
|
@ -0,0 +1,5 @@
|
|||
{
|
||||
"venv":"env",
|
||||
"venvPath":"",
|
||||
"reportSelfClsParameterName":false
|
||||
}
|
|
@ -0,0 +1,80 @@
|
|||
|
||||
[General]
|
||||
version=4.2.0
|
||||
save_mode_on_exit=1
|
||||
save_definitions_on_exit=1
|
||||
ignore_locale=0
|
||||
colorize=1
|
||||
auto_update_exchange_rates=-1
|
||||
spacious=1
|
||||
vertical_space=1
|
||||
excessive_parenthesis=0
|
||||
short_multiplication=1
|
||||
use_unicode_signs=1
|
||||
lower_case_numbers=0
|
||||
lower_case_e=0
|
||||
imaginary_j=0
|
||||
base_display=1
|
||||
twos_complement=1
|
||||
hexadecimal_twos_complement=0
|
||||
spell_out_logical_operators=1
|
||||
digit_grouping=0
|
||||
decimal_comma=-1
|
||||
dot_as_separator=-1
|
||||
comma_as_separator=0
|
||||
multiplication_sign=2
|
||||
division_sign=0
|
||||
|
||||
[Mode]
|
||||
min_deci=0
|
||||
use_min_deci=0
|
||||
max_deci=2
|
||||
use_max_deci=0
|
||||
precision=10
|
||||
interval_arithmetic=1
|
||||
interval_display=0
|
||||
min_exp=-1
|
||||
negative_exponents=0
|
||||
sort_minus_last=1
|
||||
number_fraction_format=-1
|
||||
complex_number_form=0
|
||||
use_prefixes=1
|
||||
use_prefixes_for_all_units=0
|
||||
use_prefixes_for_currencies=0
|
||||
use_binary_prefixes=0
|
||||
abbreviate_names=1
|
||||
all_prefixes_enabled=0
|
||||
denominator_prefix_enabled=1
|
||||
place_units_separately=1
|
||||
auto_post_conversion=3
|
||||
mixed_units_conversion=3
|
||||
local_currency_conversion=1
|
||||
number_base=10
|
||||
number_base_expression=10
|
||||
read_precision=0
|
||||
assume_denominators_nonzero=1
|
||||
warn_about_denominators_assumed_nonzero=1
|
||||
structuring=1
|
||||
angle_unit=1
|
||||
caret_as_xor=0
|
||||
functions_enabled=1
|
||||
variables_enabled=1
|
||||
calculate_variables=1
|
||||
calculate_functions=1
|
||||
variable_units_enabled=1
|
||||
sync_units=1
|
||||
unknownvariables_enabled=0
|
||||
units_enabled=1
|
||||
allow_complex=1
|
||||
allow_infinite=1
|
||||
indicate_infinite_series=0
|
||||
show_ending_zeroes=1
|
||||
rounding_mode=0
|
||||
approximation=-1
|
||||
interval_calculation=1
|
||||
in_rpn_mode=0
|
||||
rpn_syntax=0
|
||||
limit_implicit_multiplication=0
|
||||
parsing_mode=0
|
||||
default_assumption_type=4
|
||||
default_assumption_sign=0
|
|
@ -0,0 +1,30 @@
|
|||
ls
|
||||
1 USD to UAH
|
||||
500 UAH to USD
|
||||
65/5
|
||||
24+48
|
||||
72/4
|
||||
55+56
|
||||
111-333
|
||||
-222
|
||||
-222/4
|
||||
333-56
|
||||
111-29
|
||||
111-28
|
||||
55-83
|
||||
(935+3*1)/18
|
||||
(935+3*2)/18
|
||||
(935+3*3)/18
|
||||
(935+3*4)/18
|
||||
(935+3*5)/18
|
||||
(935+3*6)/18
|
||||
29-3*1
|
||||
29-3*2
|
||||
29-3*3
|
||||
29-3*4
|
||||
29-3*5
|
||||
29-3*6
|
||||
29-3*7
|
||||
29-3*8
|
||||
29-3*9
|
||||
29-3*10
|
|
@ -0,0 +1,4 @@
|
|||
set preview_images true
|
||||
set preview_images_method kitty
|
||||
|
||||
default_linemode devicons
|
|
@ -0,0 +1,2 @@
|
|||
mime ^text, label editor = $EDITOR -- "$@"
|
||||
mime ^text, label pager = "$PAGER" -- "$@"
|
|
@ -0,0 +1,9 @@
|
|||
@theme "./nord.rasi"
|
||||
|
||||
configuration {
|
||||
font: "Iosevka 13" ;
|
||||
terminal: "kitty";
|
||||
}
|
||||
|
||||
|
||||
element-icon { size: 2ch ; }
|
|
@ -0,0 +1,93 @@
|
|||
/*
|
||||
* ROFI color theme
|
||||
*
|
||||
* Based on Something Found in the Internet
|
||||
*
|
||||
* User: Contributors
|
||||
* Copyright: *!
|
||||
*/
|
||||
|
||||
configuration {
|
||||
display-run: " ";
|
||||
display-drun: " ";
|
||||
display-window: " ";
|
||||
drun-display-format: "{icon} {name}";
|
||||
font: "JetBrainsMono Nerd Font Medium 10";
|
||||
modi: "window,run,drun";
|
||||
show-icons: true;
|
||||
}
|
||||
|
||||
* {
|
||||
polar-1: #2E3440;
|
||||
polar-2: #3B4252;
|
||||
polar-3: #434C5E;
|
||||
polar-4: #4C566A;
|
||||
|
||||
snow-1: #D8DEE9;
|
||||
snow-2: #E5E9F0;
|
||||
snow-3: #ECEFF4;
|
||||
|
||||
frost-1: #8FBCBB;
|
||||
frost-2: #88C0D0;
|
||||
frost-3: #81A1C1;
|
||||
frost-4: #5E81AC;
|
||||
|
||||
aurora-1: #BF616A;
|
||||
aurora-2: #D08770;
|
||||
aurora-3: #EBCB8B;
|
||||
aurora-4: #A3BE8C;
|
||||
aurora-5: #B48EAD;
|
||||
|
||||
background-color: @polar-1;
|
||||
|
||||
border: 0;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
spacing: 0;
|
||||
}
|
||||
|
||||
element {
|
||||
padding: 12;
|
||||
text-color: @frost-3;
|
||||
}
|
||||
|
||||
element selected {
|
||||
text-color: @aurora-3;
|
||||
}
|
||||
|
||||
element-text {
|
||||
padding: 2;
|
||||
background-color: inherit;
|
||||
text-color: inherit;
|
||||
}
|
||||
|
||||
entry {
|
||||
background-color: @polar-2;
|
||||
padding: 12 0 12 3;
|
||||
text-color: @frost-1;
|
||||
}
|
||||
|
||||
inputbar {
|
||||
children: [prompt, entry];
|
||||
}
|
||||
|
||||
listview {
|
||||
columns: 1;
|
||||
lines: 8;
|
||||
}
|
||||
|
||||
mainbox {
|
||||
children: [inputbar, listview];
|
||||
}
|
||||
|
||||
prompt {
|
||||
background-color: @polar-2;
|
||||
enabled: true;
|
||||
font: "FontAwesome 12";
|
||||
padding: 12 0 0 12;
|
||||
text-color: @frost-1;
|
||||
}
|
||||
|
||||
window {
|
||||
transparency: "real";
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
url="https://youtu.be/XnzxEGLaPxs"
|
||||
|
||||
pkill -f $url || mpv --shuffle --no-video "$url"
|
|
@ -0,0 +1,5 @@
|
|||
#!/bin/bash
|
||||
|
||||
url="https://youtu.be/5qap5aO4i9A"
|
||||
|
||||
pkill -f $url || mpv --shuffle --no-video "$url"
|
|
@ -0,0 +1,200 @@
|
|||
# wm independent hotkeys
|
||||
|
||||
# make sxhkd reload its configuration files:
|
||||
|
||||
# Default keybinds
|
||||
# -------------------------------------------------------
|
||||
|
||||
super + e
|
||||
pkill -USR1 -x sxhkd
|
||||
|
||||
# quit/restart bspwm
|
||||
super + alt + {q,r}
|
||||
bspc {quit,wm -r}
|
||||
|
||||
# close and kill
|
||||
super + {shift+c,shift + w}
|
||||
bspc node -{c,k}
|
||||
|
||||
# alternate between the tiled and monocle layout
|
||||
super + m
|
||||
bspc desktop -l next
|
||||
|
||||
# send the newest marked node to the newest preselected node
|
||||
super + y
|
||||
bspc node newest.marked.local -n newest.!automatic.local
|
||||
|
||||
# swap the current node and the biggest window
|
||||
super + g
|
||||
bspc node -s biggest.window
|
||||
# -------------------------------------------------------
|
||||
|
||||
# Start programs
|
||||
# --------------------------------------------------------
|
||||
super + Return
|
||||
kitty
|
||||
|
||||
super + shift + n
|
||||
kitty -e notetaker
|
||||
|
||||
super + n
|
||||
kitty -e ranger
|
||||
|
||||
super + shift + t
|
||||
kotatogram-desktop
|
||||
|
||||
super + shift + b
|
||||
librewolf
|
||||
|
||||
super + shift + s
|
||||
/home/q/bin/screenrecord
|
||||
|
||||
super + c
|
||||
rofi -show calc -modi calc -no-show-match -no-sort
|
||||
|
||||
super + alt + l
|
||||
/home/q/.config/scripts/lofi.sh
|
||||
|
||||
super + alt + j
|
||||
/home/q/.config/scripts/jazz.sh
|
||||
|
||||
super + d
|
||||
rofi -show drun -show-icons -modi drun
|
||||
|
||||
Print
|
||||
flameshot gui
|
||||
|
||||
{super+alt+t}
|
||||
kotatogram-desktop
|
||||
|
||||
{F9,super+alt+f}
|
||||
librewolf
|
||||
|
||||
super + x
|
||||
betterlockscreen -l dimblur
|
||||
|
||||
# --------------------------------------------------------
|
||||
|
||||
|
||||
# Volume control
|
||||
# ----------------------------------------------------------
|
||||
|
||||
# Down
|
||||
{F2,XF86AudioLowerVolume}
|
||||
pactl set-sink-volume @DEFAULT_SINK@ -10%
|
||||
|
||||
# Up
|
||||
{F3,XF86AudioRaiseVolume}}
|
||||
pactl set-sink-volume @DEFAULT_SINK@ +10%
|
||||
|
||||
# Mute
|
||||
{F1,F86AudioMute}
|
||||
pactl set-sink-mute @DEFAULT_SINK@ toggle
|
||||
|
||||
# Mute microfon
|
||||
{F9,XF86AudioMicMute}
|
||||
pactl set-source-mute @DEFAULT_SOURCE@ toggle
|
||||
|
||||
# --------------------------------------------------------------
|
||||
|
||||
# Brigness screen
|
||||
# --------------------------------------------------------------
|
||||
|
||||
{F4,XF86MonBrightnessDown}
|
||||
light -U 10
|
||||
|
||||
{F5, XF86MonBrightnessUp}
|
||||
light -A 10
|
||||
|
||||
# --------------------------------------------------------------
|
||||
|
||||
# state/flags
|
||||
# ----------------------------------------------------------------
|
||||
# t - Taylind
|
||||
# s - Normal
|
||||
# f - floating
|
||||
# set the window state
|
||||
super + {t,shift + t,s,f}
|
||||
bspc node -t {tiled,pseudo_tiled,floating,fullscreen}
|
||||
|
||||
# set the node flags
|
||||
super + ctrl + {m,x,y,z}
|
||||
bspc node -g {marked,locked,sticky,private}
|
||||
|
||||
# ----------------------------------------------------------------
|
||||
|
||||
|
||||
# focus/swap
|
||||
# -----------------------------------------------------------------
|
||||
|
||||
# focus the node in the given direction
|
||||
super + {_,shift + }{h,j,k,l}
|
||||
bspc node -{f,s} {west,south,north,east}
|
||||
|
||||
# focus the node for the given path jump
|
||||
super + {p,b,comma,period}
|
||||
bspc node -f @{parent,brother,first,second}
|
||||
|
||||
# focus the next/previous window in the current desktop
|
||||
super + {_,shift + }c
|
||||
bspc node -f {next,prev}.local.!hidden.window
|
||||
|
||||
# focus the next/previous desktop in the current monitor
|
||||
super + bracket{left,right}
|
||||
bspc desktop -f {prev,next}.local
|
||||
|
||||
# focus the last node/desktop
|
||||
super + {grave,Tab}
|
||||
bspc {node,desktop} -f last
|
||||
|
||||
# focus the older or newer node in the focus history
|
||||
super + {o,i}
|
||||
bspc wm -h off; \
|
||||
bspc node {older,newer} -f; \
|
||||
bspc wm -h on
|
||||
|
||||
# focus or send to the given desktop
|
||||
super + {_,shift + }{1-9,0}
|
||||
bspc {desktop -f,node -d} '^{1-9,10}'
|
||||
|
||||
# -----------------------------------------------------------------
|
||||
|
||||
|
||||
# preselect
|
||||
# ------------------------------------------------------------------
|
||||
|
||||
# preselect the direction
|
||||
super + ctrl + {h,j,k,l}
|
||||
bspc node -p {west,south,north,east}
|
||||
|
||||
# preselect the ratio
|
||||
super + ctrl + {1-9}
|
||||
bspc node -o 0.{1-9}
|
||||
|
||||
# cancel the preselection for the focused node
|
||||
super + ctrl + space
|
||||
bspc node -p cancel
|
||||
|
||||
# cancel the preselection for the focused desktop
|
||||
super + ctrl + shift + space
|
||||
bspc query -N -d | xargs -I id -n 1 bspc node id -p cancel
|
||||
|
||||
# ------------------------------------------------------------------
|
||||
|
||||
|
||||
# move/resize
|
||||
# -------------------------------------------------------------------
|
||||
|
||||
# expand a window by moving one of its side outward
|
||||
super + alt + {h,j,k,l}
|
||||
bspc node -z {left -20 0,bottom 0 20,top 0 -20,right 20 0}
|
||||
|
||||
# contract a window by moving one of its side inward
|
||||
super + alt + shift + {h,j,k,l}
|
||||
bspc node -z {right -20 0,top 0 20,bottom 0 -20,left 20 0}
|
||||
|
||||
# move a floating window
|
||||
super + {Left,Down,Up,Right}
|
||||
bspc node -v {-20 0,0 20,0 -20,20 0}
|
||||
|
||||
# -------------------------------------------------------------------
|
|
@ -0,0 +1 @@
|
|||
/usr/lib/systemd/user/pipewire-pulse.service
|
|
@ -0,0 +1 @@
|
|||
/usr/lib/systemd/user/pipewire.service
|
|
@ -0,0 +1 @@
|
|||
/home/q/.config/systemd/user/ssh-agent.service
|
|
@ -0,0 +1,13 @@
|
|||
[Unit]
|
||||
Description=Jupyter notebook server
|
||||
After=network.target
|
||||
StartLimitIntervalSec=0
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
Restart=always
|
||||
RestartSec=1
|
||||
ExecStart=/usr/bin/jupyter lab
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
|
@ -0,0 +1 @@
|
|||
/usr/lib/systemd/user/pipewire-pulse.socket
|
|
@ -0,0 +1 @@
|
|||
/usr/lib/systemd/user/pipewire.socket
|
|
@ -0,0 +1,10 @@
|
|||
[Unit]
|
||||
Description=SSH key agent
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
Enviroment=SSH_AUTH_SOCK=%t/ssh-agent.socket
|
||||
ExecStart=/usr/bin/ssh-agent -D -a $SSH_AUTH_SOCK
|
||||
|
||||
[Install]
|
||||
WantedBy=default.target
|
|
@ -0,0 +1,20 @@
|
|||
[Unit]
|
||||
Description=Syncthing - Open Source Continuous File Synchronization
|
||||
Documentation=man:syncthing(1)
|
||||
StartLimitIntervalSec=60
|
||||
StartLimitBurst=4
|
||||
|
||||
[Service]
|
||||
ExecStart=/usr/bin/syncthing serve --no-browser --no-restart --logflags=0
|
||||
Restart=on-failure
|
||||
RestartSec=1
|
||||
SuccessExitStatus=3 4
|
||||
RestartForceExitStatus=3 4
|
||||
|
||||
# Hardening
|
||||
SystemCallArchitectures=native
|
||||
MemoryDenyWriteExecute=true
|
||||
NoNewPrivileges=true
|
||||
|
||||
[Install]
|
||||
WantedBy=default.target
|
|
@ -0,0 +1,12 @@
|
|||
[Unit]
|
||||
Description=Telegram Bot API server
|
||||
After=network-online.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
EnvironmentFile=$HOME/.config/telegram-bot-api/config.env
|
||||
WorkingDirectory=~
|
||||
ExecStart=telegram-bot-api --api-id=${api_id} --api-hash=${api_hash} --local --http-stat-ip-address=${ip} --http-port=${port} --dir=$HOME/.config/telegram-bot-api/
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
|
@ -0,0 +1,4 @@
|
|||
ip=127.0.0.1
|
||||
port=5326
|
||||
api_id=123
|
||||
api_hash=abcde123
|
|
@ -0,0 +1,25 @@
|
|||
alias v="vim"
|
||||
alias nv="nvim"
|
||||
|
||||
alias gc="git clone"
|
||||
alias ga="git add"
|
||||
alias gt="git status"
|
||||
|
||||
alias gst="git status"
|
||||
alias gdf="git diff"
|
||||
|
||||
alias ls="lsd"
|
||||
alias la="lsd -a"
|
||||
alias ll="lsd -l"
|
||||
alias l="lsd -la"
|
||||
|
||||
alias cls=clear
|
||||
|
||||
alias tree="tree -CL 3"
|
||||
|
||||
alias sz="$HOME/.zshrc"
|
||||
|
||||
alias wget=wget --hsts-file="$XDG_DATA_HOME/wget-hsts"
|
||||
|
||||
alias history="fc -l 1"
|
||||
alias histclr="echo ' ' > ~/.config/zsh/history"
|
|
@ -0,0 +1 @@
|
|||
|
|
@ -0,0 +1,2 @@
|
|||
bindkey '^A' beginning-of-line
|
||||
# bindkey '^I' end-of-line
|
|
@ -0,0 +1,12 @@
|
|||
function git_branch_name() {
|
||||
branch=$(git symbolic-ref HEAD 2> /dev/null | awk 'BEGIN{FS="/"} {print $NF}')
|
||||
if [[ $branch == "" ]];then
|
||||
:
|
||||
else
|
||||
echo '- ('$branch')'
|
||||
fi
|
||||
}
|
||||
|
||||
setopt prompt_subst
|
||||
|
||||
PROMPT="%F{red}%n%f@%F{blue}%m%f %F{green}%~%f >> "
|
|
@ -0,0 +1,21 @@
|
|||
export EDITOR=nvim
|
||||
|
||||
export XDG_CONFIG_HOME="$HOME/.config"
|
||||
export XDG_CACHE_HOME="$HOME/.cache"
|
||||
export XDG_DATA_HOME="$HOME/.local/share"
|
||||
export XDG_STATE_HOME="$HOME/.local/state"
|
||||
|
||||
export HISTSIZE=100000
|
||||
export SAVEHIST=100000
|
||||
export HISTFILE="$XDG_CONFIG_HOME/zsh/history"
|
||||
|
||||
export GNUPGHOME="$XDG_DATA_HOME/gnupg"
|
||||
export CARGO_HOME="$XDG_DATA_HOME/cargo"
|
||||
|
||||
export PYENV_ROOT="$XDG_DATA_HOME/pyenv"
|
||||
export IPYTHONDIR="${XDG_CONFIG_HOME}/ipython"
|
||||
export PYTHONSTARTUP="${XDG_CONFIG_HOME}/python/pythonrc"
|
||||
export JUPYTER_CONFIG_DIR="$XDG_CONFIG_HOME/jupyter"
|
||||
|
||||
export GTK2_RC_FILES="${XDG_CONFIG_HOME}/gtk-2.0/gtkrc"
|
||||
export NPM_CONFIG_USERCONFIG="${XDG_CONFIG_HOME}/npm/npmrc"
|
|
@ -0,0 +1,2 @@
|
|||
.config/polybar/scripts/weather/__pycache__/
|
||||
.config/polybar/scripts/weather/.env
|
|
@ -0,0 +1,10 @@
|
|||
source "$HOME/.config/zsh/zshenv.zsh"
|
||||
|
||||
zshfiles=("alias" "prompt" "keybinds")
|
||||
for zshfile in $zshfiles
|
||||
do
|
||||
source "$zshconfigs/${zshfile}.zsh"
|
||||
done
|
||||
|
||||
path+=('/home/q/bin')
|
||||
export PATH
|
|
@ -0,0 +1,7 @@
|
|||
Section "InputClass"
|
||||
Identifier "system-keyboard"
|
||||
MatchIsKeyboard "on"
|
||||
Option "XkbLayout" "us,ru,ua"
|
||||
Option "XkbModel" "pc104"
|
||||
Option "XkbOptions" "grp:caps_toggle"
|
||||
EndSection
|
|
@ -0,0 +1,10 @@
|
|||
# Dotfiles
|
||||
|
||||
- **wm:** [bspwm](https://github.com/hok7z/dotfiles/tree/main/.config/bspwm) & [sxhkd](https://github.com/hok7z/dotfiles/tree/main/.config/sxhkd)
|
||||
- **terminal:** [kitty](https://github.com/hok7z/dotfiles/tree/main/.config/kitty)
|
||||
- **editor:** [neovim](https://github.com/hok7z/dotfiles/tree/main/.config/nvim)
|
||||
- **status bar:** [polybar](https://github.com/hok7z/dotfiles/tree/main/.config/polybar)
|
||||
- **launcher:** [rofi](https://github.com/hok7z/dotfiles/tree/main/.config/rofi)
|
||||
- **shell:** [fish](https://github.com/hok7z/dotfiles/tree/main/.config/fish) | [zsh](https://github.com/hok7z/dotfiles/tree/main/.config/zsh)
|
||||
- [shell scripts](https://github.com/hok7z/dotfiles/tree/main/.config/scripts)
|
||||
- [user systemd units](https://github.com/hok7z/dotfiles/tree/main/.config/systemd/user)
|
|
@ -0,0 +1,35 @@
|
|||
#!/bin/sh
|
||||
|
||||
for pid in $(pidof -x battery); do
|
||||
if [ "$pid" != $$ ]; then
|
||||
kill -9 "$pid"
|
||||
fi
|
||||
done
|
||||
|
||||
notify_icons="/home/q/.config/dunst/icons"
|
||||
|
||||
# notify when below this percentage
|
||||
warning_level=50
|
||||
|
||||
# how often to check battery status, in seconds
|
||||
check_interval=300
|
||||
|
||||
while true; do
|
||||
path_to_battery=$(upower -e | grep BAT)
|
||||
battery_level=$(upower -i "$path_to_battery" | grep -E "percentage" | sed 's/[^0-9]//g')
|
||||
discharging=$(upower -i "$path_to_battery" | grep -E "state" | grep -c "discharging")
|
||||
time_to_empty=$(upower -i "$path_to_battery" | grep -E "time to empty" | sed 's/[^0-9,.]//g')
|
||||
|
||||
# check if battery is low and discharging
|
||||
if [ "$battery_level" -lt "$warning_level" ] && [ "$discharging" -eq 1 ]
|
||||
then
|
||||
dunstify -a "Battery" \
|
||||
"Low battery: ${battery_level}%" \
|
||||
"Battery is low ($time_to_empty minuts left)" \
|
||||
-r 100 \
|
||||
-i "$notify_icons/battery-low.png"
|
||||
mpv "/home/q/.config/alarm/low-battery-sound.mp3"
|
||||
fi
|
||||
|
||||
sleep ${check_interval}s
|
||||
done
|
|
@ -0,0 +1,4 @@
|
|||
#!/bin/sh
|
||||
rm -rf ~/.cache/paru/clone
|
||||
paru -Scc
|
||||
sudo pacman -Rns $(pacman -Qtdq)
|
|
@ -0,0 +1,6 @@
|
|||
#!/usr/bin/env sh
|
||||
if [ -n "$TMUX" ] ; then
|
||||
tmux split-window -h "nvim \"$*\""
|
||||
else
|
||||
kitty -e "nvim \"$*\""
|
||||
fi
|
|
@ -0,0 +1,15 @@
|
|||
#!/bin/bash
|
||||
|
||||
if [ $# -lt 1 ];then
|
||||
echo "Failed get arguments"
|
||||
echo "./newpyproject [project name]"
|
||||
exit
|
||||
fi
|
||||
|
||||
mkdir $1
|
||||
cd $1
|
||||
git init
|
||||
poetry init
|
||||
cp ~/.config/pyright/pyrightconfig.json .
|
||||
venv_path=$(poetry env info -p)
|
||||
echo -e $(jq -r --arg path "$venv_path" '.venvPath |= $path' pyrightconfig.json) > pyrightconfig.json
|
|
@ -0,0 +1,13 @@
|
|||
#!/bin/sh
|
||||
|
||||
noteFileName="$HOME/notes/note-$(date +%Y-%m-%d).md"
|
||||
|
||||
if [ ! -f $noteFileName ];then
|
||||
echo "Notes for $(date +%Y-%m-%d)" > $noteFileName
|
||||
fi
|
||||
|
||||
nvim -c "norm Go" \
|
||||
-c "norm Go## $(date +'%I:%m %p')" \
|
||||
-c "norm G2o" \
|
||||
-c "norm zz" \
|
||||
-c "startinsert" $noteFileName
|