deleted: .config/fnott/fnott.ini

deleted:    .config/niri/config-01.kdl
	modified:   README.md
	modified:   apps-list.md
	deleted:    background
	renamed:    .config/btop/btop.conf -> config/btop/btop.conf
	renamed:    .config/clipse/config.json -> config/clipse/config.json
	renamed:    .config/clipse/custom_theme.json -> config/clipse/custom_theme.json
	renamed:    .config/fastfetch/1.jsonc -> config/fastfetch/1.jsonc
	renamed:    .config/fastfetch/19.jsonc -> config/fastfetch/19.jsonc
	renamed:    .config/fastfetch/20.jsonc -> config/fastfetch/20.jsonc
	renamed:    .config/fastfetch/config.jsonc -> config/fastfetch/config.jsonc
	renamed:    .config/fish/completions/fisher.fish -> config/fish/completions/fisher.fish
	renamed:    .config/fish/completions/fzf_configure_bindings.fish -> config/fish/completions/fzf_configure_bindings.fish
	renamed:    .config/fish/conf.d/fish_frozen_key_bindings.fish -> config/fish/conf.d/fish_frozen_key_bindings.fish
	renamed:    .config/fish/conf.d/fish_frozen_theme.fish -> config/fish/conf.d/fish_frozen_theme.fish
	renamed:    .config/fish/conf.d/fzf.fish -> config/fish/conf.d/fzf.fish
	new file:   config/fish/conf.d/nix.fish
	renamed:    .config/fish/config.fish -> config/fish/config.fish
	renamed:    .config/fish/fish_plugins -> config/fish/fish_plugins
	renamed:    .config/fish/fish_variables -> config/fish/fish_variables
	renamed:    .config/fish/functions/:q.fish -> config/fish/functions/:q.fish
	renamed:    .config/fish/functions/_fzf_configure_bindings_help.fish -> config/fish/functions/_fzf_configure_bindings_help.fish
	renamed:    .config/fish/functions/_fzf_extract_var_info.fish -> config/fish/functions/_fzf_extract_var_info.fish
	renamed:    .config/fish/functions/_fzf_preview_changed_file.fish -> config/fish/functions/_fzf_preview_changed_file.fish
	renamed:    .config/fish/functions/_fzf_preview_file.fish -> config/fish/functions/_fzf_preview_file.fish
	renamed:    .config/fish/functions/_fzf_report_diff_type.fish -> config/fish/functions/_fzf_report_diff_type.fish
	renamed:    .config/fish/functions/_fzf_report_file_type.fish -> config/fish/functions/_fzf_report_file_type.fish
	renamed:    .config/fish/functions/_fzf_search_directory.fish -> config/fish/functions/_fzf_search_directory.fish
	renamed:    .config/fish/functions/_fzf_search_git_log.fish -> config/fish/functions/_fzf_search_git_log.fish
	renamed:    .config/fish/functions/_fzf_search_git_status.fish -> config/fish/functions/_fzf_search_git_status.fish
	renamed:    .config/fish/functions/_fzf_search_history.fish -> config/fish/functions/_fzf_search_history.fish
	renamed:    .config/fish/functions/_fzf_search_processes.fish -> config/fish/functions/_fzf_search_processes.fish
	renamed:    .config/fish/functions/_fzf_search_variables.fish -> config/fish/functions/_fzf_search_variables.fish
	renamed:    .config/fish/functions/_fzf_wrapper.fish -> config/fish/functions/_fzf_wrapper.fish
	renamed:    .config/fish/functions/ff.fish -> config/fish/functions/ff.fish
	renamed:    .config/fish/functions/fish_prompt.fish -> config/fish/functions/fish_prompt.fish
	renamed:    .config/fish/functions/fish_prompt.fish.bak -> config/fish/functions/fish_prompt.fish.bak
	renamed:    .config/fish/functions/fisher.fish -> config/fish/functions/fisher.fish
	renamed:    .config/fish/functions/fzf_configure_bindings.fish -> config/fish/functions/fzf_configure_bindings.fish
	renamed:    .config/fish/functions/ls.fish -> config/fish/functions/ls.fish
	renamed:    .config/fish/functions/n.fish -> config/fish/functions/n.fish
	renamed:    .config/fish/functions/nv.fish -> config/fish/functions/nv.fish
	renamed:    .config/fish/functions/p.fish -> config/fish/functions/p.fish
	new file:   config/fish/functions/sshp.fish
	renamed:    .config/fish/functions/vpn.fish -> config/fish/functions/vpn.fish
	renamed:    .config/fish/functions/webka.fish -> config/fish/functions/webka.fish
	renamed:    .config/fish/functions/y.fish -> config/fish/functions/y.fish
	renamed:    .config/fish/functions/yz.fish -> config/fish/functions/yz.fish
	renamed:    ".config/fish/functions/\320\275\321\217.fish" -> "config/fish/functions/\320\275\321\217.fish"
	renamed:    .config/fuzzel/fuzzel.ini -> config/fuzzel/fuzzel.ini
	renamed:    .config/hypr/hyprland.conf -> config/hypr/hyprland.conf
	renamed:    .config/hypr/hyprlock.conf -> config/hypr/hyprlock.conf
	new file:   config/hyprwave/config.conf
	new file:   config/hyprwave/style.css
	new file:   config/kitty/current-theme.conf
	renamed:    .config/kitty/kitty.conf.bak -> config/kitty/kitty.conf
	renamed:    .config/kitty/kitty.conf -> config/kitty/kitty.conf.bak
	new file:   config/mimeapps.list
	renamed:    .config/niri/config.kdl -> config/niri/config.kdl
	renamed:    .config/nvim/.gitignore -> config/nvim/.gitignore
	renamed:    .config/nvim/.neoconf.json -> config/nvim/.neoconf.json
	renamed:    .config/nvim/LICENSE -> config/nvim/LICENSE
	renamed:    .config/nvim/README.md -> config/nvim/README.md
	renamed:    .config/nvim/init.lua -> config/nvim/init.lua
	renamed:    .config/nvim/lazy-lock.json -> config/nvim/lazy-lock.json
	renamed:    .config/nvim/lazyvim.json -> config/nvim/lazyvim.json
	renamed:    .config/nvim/lua/config/autocmds.lua -> config/nvim/lua/config/autocmds.lua
	renamed:    .config/nvim/lua/config/keymaps.lua -> config/nvim/lua/config/keymaps.lua
	renamed:    .config/nvim/lua/config/lazy.lua -> config/nvim/lua/config/lazy.lua
	renamed:    .config/nvim/lua/config/options.lua -> config/nvim/lua/config/options.lua
	renamed:    .config/nvim/lua/plugins/example.lua -> config/nvim/lua/plugins/example.lua
	renamed:    .config/nvim/lua/plugins/luasnip.lua -> config/nvim/lua/plugins/luasnip.lua
	renamed:    .config/nvim/lua/plugins/markview.lua -> config/nvim/lua/plugins/markview.lua
	renamed:    .config/nvim/lua/plugins/marp-nvim.lua -> config/nvim/lua/plugins/marp-nvim.lua
	renamed:    .config/nvim/lua/plugins/nvim-snippy.lua -> config/nvim/lua/plugins/nvim-snippy.lua
	renamed:    .config/nvim/lua/plugins/render-markdown.lua -> config/nvim/lua/plugins/render-markdown.lua
	renamed:    .config/nvim/lua/plugins/xkbswitch.lua -> config/nvim/lua/plugins/xkbswitch.lua
	renamed:    .config/nvim/stylua.toml -> config/nvim/stylua.toml
	new file:   config/termusic/tui.toml
	renamed:    .config/waybar/config.jsonc -> config/waybar/config.jsonc
	renamed:    .config/waybar/config01.jsonc -> config/waybar/config01.jsonc
	renamed:    .config/waybar/style.css -> config/waybar/style.css
	renamed:    .config/waybar/style01.css -> config/waybar/style01.css
	renamed:    .config/yazi/yazi.toml -> config/yazi/yazi.toml
	deleted:    mimeapps.list
	deleted:    resolved.conf
	deleted:    zen-mods-export.json
This commit is contained in:
nekochemist 2026-03-12 22:12:13 +05:00
parent f8fae463a8
commit 4779ba49c0
88 changed files with 1182 additions and 1361 deletions

272
config/btop/btop.conf Normal file
View file

@ -0,0 +1,272 @@
#? Config file for btop v.1.4.6
#* Name of a btop++/bpytop/bashtop formatted ".theme" file, "Default" and "TTY" for builtin themes.
#* Themes should be placed in "../share/btop/themes" relative to binary or "$HOME/.config/btop/themes"
color_theme = "TTY"
#* If the theme set background should be shown, set to False if you want terminal background transparency.
theme_background = true
#* Sets if 24-bit truecolor should be used, will convert 24-bit colors to 256 color (6x6x6 color cube) if false.
truecolor = true
#* Set to true to force tty mode regardless if a real tty has been detected or not.
#* Will force 16-color mode and TTY theme, set all graph symbols to "tty" and swap out other non tty friendly symbols.
force_tty = false
#* Define presets for the layout of the boxes. Preset 0 is always all boxes shown with default settings. Max 9 presets.
#* Format: "box_name:P:G,box_name:P:G" P=(0 or 1) for alternate positions, G=graph symbol to use for box.
#* Use whitespace " " as separator between different presets.
#* Example: "cpu:0:default,mem:0:tty,proc:1:default cpu:0:braille,proc:0:tty"
presets = "cpu:1:default,proc:0:default cpu:0:default,mem:0:default,net:0:default cpu:0:block,net:0:tty"
#* Set to True to enable "h,j,k,l,g,G" keys for directional control in lists.
#* Conflicting keys for h:"help" and k:"kill" is accessible while holding shift.
vim_keys = false
#* Rounded corners on boxes, is ignored if TTY mode is ON.
rounded_corners = false
#* Use terminal synchronized output sequences to reduce flickering on supported terminals.
terminal_sync = true
#* Default symbols to use for graph creation, "braille", "block" or "tty".
#* "braille" offers the highest resolution but might not be included in all fonts.
#* "block" has half the resolution of braille but uses more common characters.
#* "tty" uses only 3 different symbols but will work with most fonts and should work in a real TTY.
#* Note that "tty" only has half the horizontal resolution of the other two, so will show a shorter historical view.
graph_symbol = "braille"
# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty".
graph_symbol_cpu = "default"
# Graph symbol to use for graphs in gpu box, "default", "braille", "block" or "tty".
graph_symbol_gpu = "default"
# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty".
graph_symbol_mem = "default"
# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty".
graph_symbol_net = "default"
# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty".
graph_symbol_proc = "default"
#* Manually set which boxes to show. Available values are "cpu mem net proc" and "gpu0" through "gpu5", separate values with whitespace.
shown_boxes = "mem net proc gpu0 cpu"
#* Update time in milliseconds, recommended 2000 ms or above for better sample times for graphs.
update_ms = 2000
#* Processes sorting, "pid" "program" "arguments" "threads" "user" "memory" "cpu lazy" "cpu direct",
#* "cpu lazy" sorts top process over time (easier to follow), "cpu direct" updates top process directly.
proc_sorting = "memory"
#* Reverse sorting order, True or False.
proc_reversed = false
#* Show processes as a tree.
proc_tree = true
#* Use the cpu graph colors in the process list.
proc_colors = true
#* Use a darkening gradient in the process list.
proc_gradient = true
#* If process cpu usage should be of the core it's running on or usage of the total available cpu power.
proc_per_core = false
#* Show process memory as bytes instead of percent.
proc_mem_bytes = true
#* Show cpu graph for each process.
proc_cpu_graphs = true
#* Use /proc/[pid]/smaps for memory information in the process info box (very slow but more accurate)
proc_info_smaps = false
#* Show proc box on left side of screen instead of right.
proc_left = false
#* (Linux) Filter processes tied to the Linux kernel(similar behavior to htop).
proc_filter_kernel = false
#* In tree-view, always accumulate child process resources in the parent process.
proc_aggregate = false
#* Should cpu and memory usage display be preserved for dead processes when paused.
keep_dead_proc_usage = false
#* Sets the CPU stat shown in upper half of the CPU graph, "total" is always available.
#* Select from a list of detected attributes from the options menu.
cpu_graph_upper = "Auto"
#* Sets the CPU stat shown in lower half of the CPU graph, "total" is always available.
#* Select from a list of detected attributes from the options menu.
cpu_graph_lower = "Auto"
#* If gpu info should be shown in the cpu box. Available values = "Auto", "On" and "Off".
show_gpu_info = "On"
#* Toggles if the lower CPU graph should be inverted.
cpu_invert_lower = true
#* Set to True to completely disable the lower CPU graph.
cpu_single_graph = false
#* Show cpu box at bottom of screen instead of top.
cpu_bottom = false
#* Shows the system uptime in the CPU box.
show_uptime = true
#* Shows the CPU package current power consumption in watts. Requires running `make setcap` or `make setuid` or running with sudo.
show_cpu_watts = true
#* Show cpu temperature.
check_temp = true
#* Which sensor to use for cpu temperature, use options menu to select from list of available sensors.
cpu_sensor = "Auto"
#* Show temperatures for cpu cores also if check_temp is True and sensors has been found.
show_coretemp = true
#* Set a custom mapping between core and coretemp, can be needed on certain cpus to get correct temperature for correct core.
#* Use lm-sensors or similar to see which cores are reporting temperatures on your machine.
#* Format "x:y" x=core with wrong temp, y=core with correct temp, use space as separator between multiple entries.
#* Example: "4:0 5:1 6:3"
cpu_core_map = ""
#* Which temperature scale to use, available values: "celsius", "fahrenheit", "kelvin" and "rankine".
temp_scale = "celsius"
#* Use base 10 for bits/bytes sizes, KB = 1000 instead of KiB = 1024.
base_10_sizes = true
#* Show CPU frequency.
show_cpu_freq = true
#* How to calculate CPU frequency, available values: "first", "range", "lowest", "highest" and "average".
freq_mode = "first"
#* Draw a clock at top of screen, formatting according to strftime, empty string to disable.
#* Special formatting: /host = hostname | /user = username | /uptime = system uptime
clock_format = "%X"
#* Update main ui in background when menus are showing, set this to false if the menus is flickering too much for comfort.
background_update = true
#* Custom cpu model name, empty string to disable.
custom_cpu_name = ""
#* Optional filter for shown disks, should be full path of a mountpoint, separate multiple values with whitespace " ".
#* Only disks matching the filter will be shown. Prepend exclude= to only show disks not matching the filter. Examples: disk_filter="/boot /home/user", disks_filter="exclude=/boot /home/user"
disks_filter = ""
#* Show graphs instead of meters for memory values.
mem_graphs = true
#* Show mem box below net box instead of above.
mem_below_net = false
#* Count ZFS ARC in cached and available memory.
zfs_arc_cached = true
#* If swap memory should be shown in memory box.
show_swap = true
#* Show swap as a disk, ignores show_swap value above, inserts itself after first disk.
swap_disk = true
#* If mem box should be split to also show disks info.
show_disks = true
#* Filter out non physical disks. Set this to False to include network disks, RAM disks and similar.
only_physical = true
#* Read disks list from /etc/fstab. This also disables only_physical.
use_fstab = true
#* Setting this to True will hide all datasets, and only show ZFS pools. (IO stats will be calculated per-pool)
zfs_hide_datasets = false
#* Set to true to show available disk space for privileged users.
disk_free_priv = false
#* Toggles if io activity % (disk busy time) should be shown in regular disk usage view.
show_io_stat = true
#* Toggles io mode for disks, showing big graphs for disk read/write speeds.
io_mode = false
#* Set to True to show combined read/write io graphs in io mode.
io_graph_combined = false
#* Set the top speed for the io graphs in MiB/s (100 by default), use format "mountpoint:speed" separate disks with whitespace " ".
#* Example: "/mnt/media:100 /:20 /boot:1".
io_graph_speeds = ""
#* Set fixed values for network graphs in Mebibits. Is only used if net_auto is also set to False.
net_download = 100
net_upload = 100
#* Use network graphs auto rescaling mode, ignores any values set above and rescales down to 10 Kibibytes at the lowest.
net_auto = true
#* Sync the auto scaling for download and upload to whichever currently has the highest scale.
net_sync = true
#* Starts with the Network Interface specified here.
net_iface = ""
#* "True" shows bitrates in base 10 (Kbps, Mbps). "False" shows bitrates in binary sizes (Kibps, Mibps, etc.). "Auto" uses base_10_sizes.
base_10_bitrate = "Auto"
#* Show battery stats in top right if battery is present.
show_battery = true
#* Which battery to use if multiple are present. "Auto" for auto detection.
selected_battery = "Auto"
#* Show power stats of battery next to charge indicator.
show_battery_watts = true
#* Set loglevel for "~/.local/state/btop.log" levels are: "ERROR" "WARNING" "INFO" "DEBUG".
#* The level set includes all lower levels, i.e. "DEBUG" will show all logging info.
log_level = "DEBUG"
#* Automatically save current settings to config file on exit.
save_config_on_exit = true
#* Measure PCIe throughput on NVIDIA cards, may impact performance on certain cards.
nvml_measure_pcie_speeds = true
#* Measure PCIe throughput on AMD cards, may impact performance on certain cards.
rsmi_measure_pcie_speeds = true
#* Horizontally mirror the GPU graph.
gpu_mirror_graph = true
#* Set which GPU vendors to show. Available values are "nvidia amd intel"
shown_gpus = "nvidia amd intel"
#* Custom gpu0 model name, empty string to disable.
custom_gpu_name0 = ""
#* Custom gpu1 model name, empty string to disable.
custom_gpu_name1 = ""
#* Custom gpu2 model name, empty string to disable.
custom_gpu_name2 = ""
#* Custom gpu3 model name, empty string to disable.
custom_gpu_name3 = ""
#* Custom gpu4 model name, empty string to disable.
custom_gpu_name4 = ""
#* Custom gpu5 model name, empty string to disable.
custom_gpu_name5 = ""

55
config/clipse/config.json Normal file
View file

@ -0,0 +1,55 @@
{
"allowDuplicates": false,
"historyFile": "clipboard_history.json",
"maxHistory": 1000000,
"deleteAfter": 0,
"logFile": "clipse.log",
"pollInterval": 50,
"maxEntryLength": 65,
"themeFile": "custom_theme.json",
"tempDir": "tmp_files",
"keyBindings": {
"choose": "enter",
"clearSelected": "S",
"down": "down",
"end": "end",
"filter": "/",
"forceQuit": "Q",
"home": "home",
"more": "?",
"nextPage": "right",
"prevPage": "left",
"preview": " ",
"quit": "esc",
"remove": "backspace",
"selectDown": "shift+down",
"selectSingle": "s",
"selectUp": "shift+up",
"togglePin": "p",
"togglePinned": "tab",
"up": "up",
"yankFilter": "ctrl+s"
},
"imageDisplay": {
"type": "kitty",
"scaleX": 18,
"scaleY": 20,
"heightCut": 20
},
"excludedApps": [
"1Password",
"Bitwarden",
"KeePassXC",
"LastPass",
"Dashlane",
"Password Safe",
"Keychain Access"
],
"autoPaste": {
"enabled": false,
"keybind": "ctrl+v",
"buffer": 10
},
"enableMouse": true,
"enableDescription": true
}

View file

@ -0,0 +1,28 @@
{
"UseCustom": true,
"TitleFore": "#07090B",
"TitleBack": "#A1F7C6",
"TitleInfo": "#25C39F",
"NormalTitle": "#E2F9F9",
"DimmedTitle": "#718091",
"SelectedTitle": "#E2F9F9",
"NormalDesc": "#718091",
"DimmedDesc": "#718091",
"SelectedDesc": "#E2F9F9",
"StatusMsg": "#2ecc71",
"PinIndicatorColor": "#F87173",
"SelectedBorder": "#E2F9F9",
"SelectedDescBorder": "#E2F9F9",
"FilteredMatch": "#E2F9F9",
"FilterPrompt": "#25C39F",
"FilterInfo": "#A1F7C6",
"FilterText": "#E2F9F9",
"FilterCursor": "#E2F9F9",
"HelpKey": "#E2F9F9",
"HelpDesc": "#718091",
"PageActiveDot": "#E2F9F9",
"PageInactiveDot": "#718091",
"DividerDot": "#25C39F",
"PreviewedText": "#E2F9F9",
"PreviewBorder": "#A1F7C6"
}

40
config/fastfetch/1.jsonc Normal file
View file

@ -0,0 +1,40 @@
{
"$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json",
"logo":{
"color":{
"1": "white",
"2": "white"
}
},
"modules": [
"title",
"separator",
"os",
"host",
"kernel",
"uptime",
"packages",
"shell",
"display",
"de",
"wm",
"wmtheme",
"theme",
"icons",
"font",
"cursor",
"terminal",
"terminalfont",
"cpu",
"gpu",
"memory",
"swap",
"disk",
"localip",
"battery",
"poweradapter",
"locale",
"break",
"colors"
]
}

189
config/fastfetch/19.jsonc Normal file
View file

@ -0,0 +1,189 @@
// _____ _____ _____ _____ _____ _____ _____ _____ _____
// | __| _ | __|_ _| __| __|_ _| | | |
// | __| |__ | | | | __| __| | | | --| |
// |__| |__|__|_____| |_| |__| |_____| |_| |_____|__|__|
//
// By CarterLi - https://github.com/CarterLi
// Homepage - https://github.com/fastfetch-cli/fastfetch
// config.jsonc - @niri-san
// pokemon-colorscripts - https://gitlab.com/phoneybadger/pokemon-colorscripts
{
"$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json",
"logo": {
"source": " _____ _____ _____ _____ _____ _____ _____ _____ _____\n| __| _ | __|_ _| __| __|_ _| | | |\n| __| |__ | | | | __| __| | | | --| |\n|__| |__|__|_____| |_| |__| |_____| |_| |_____|__|__|",
"type": "data",
"position": "top",
"padding": {
"right": 2
}
},
"display": {
"separator": " - "
},
"modules": [
{
"type": "custom", // HardwareInfo
"format": "• {#green}SYSTEM INFORMATION"
},
{
"type": "host",
"key": "HOST",
"format": "{name}{?vendor} ({vendor}){?}",
"keyColor": "green"
},
{
"type": "chassis",
"key": "COMPUTER TYPE",
"keyColor": "green"
},
{
"type": "cpu",
"key": "CPU",
"keyColor": "green"
},
{
"type": "gpu",
"key": "GPU",
"keyColor": "green"
},
{
"type": "memory",
"key": "MEMORY USED",
"keyColor": "green"
},
{
"type": "swap",
"key": "SWAP USED",
"keyColor": "green"
},
{
"type": "disk",
"key": "DISK",
"folders": "/",
"keyColor": "green"
},
{
"type": "custom", // SoftwareInfo
"format": "• {#red}SOFTWARE INFORMATION"
},
{
"type": "os",
"key": "DISTRO",
"keyColor": "red"
},
{
"type": "disk",
"folders": "/", // Use "/System/Volumes/VM" or something else on macOS
"format": "{create-time}",
"key": "INSTALLED DATE",
"keyColor": "red"
},
{
"type": "kernel",
"key": "KERNEL",
"keyColor": "red"
},
{
"type": "packages",
"key": "PACKAGES",
"keyColor": "red"
},
{
"type": "uptime",
"key": "UPTIME",
"keyColor": "red"
},
{
"type": "custom", // DisplayInfo
"format": "• {#blue}DISPLAY INFORMATION"
},
{
"type": "de",
"key": "DESKTOP ENVIRONMENT",
"keyColor": "blue"
},
{
"type": "lm",
"key": "LOGIN MANAGER",
"format": "{type}",
"keyColor": "blue"
},
{
"type": "wm",
"key": "WM",
"keyColor": "blue"
},
{
"type": "wmtheme",
"key": "WM THEME",
"keyColor": "blue"
},
{
"type": "display",
"key": "MONITOR ({name})",
"keyColor": "blue",
"format": "{width}x{height} @ {refresh-rate} Hz - {physical-width}x{physical-height} mm ({inch} inches, {ppi} ppi)"
},
{
"type": "custom", // DesignInfo
"format": "• {#yellow}DESIGN INFORMATION"
},
{
"type": "wallpaper",
"key": "WALLPAPER",
"keyColor": "yellow"
},
{
"type": "theme",
"key": "KDE THEME",
"format": "{1}",
"keyColor": "yellow"
},
{
"type": "icons",
"key": "ICON THEME",
"format": "{1}",
"keyColor": "yellow"
},
{
"type": "font",
"key": "FONT",
"format": "{?1}{1} [Qt]{?}{/1}Unknown", // Remove "[Qt]" if not using Qt
"keyColor": "yellow"
},
{
"type": "terminalfont",
"key": "TERMINAL FONT",
"keyColor": "yellow"
},
{
"type": "cursor",
"key": "CURSOR",
"keyColor": "yellow"
},
{
"type": "custom", // OtherInfo
"format": "• {#cyan}VARIOUS INFORMATION"
},
{
"type": "media",
"key": "NOW PLAYING",
"format": "{?artist}{artist} - {?}{title}",
"keyColor": "cyan"
},
{
"type": "weather",
"key": "WEATHER",
"timeout": 1000,
"keyColor": "cyan"
},
{
"type": "version",
"key": "INFO",
"keyColor": "cyan"
},
"break",
"colors",
"break"
]
}

177
config/fastfetch/20.jsonc Normal file
View file

@ -0,0 +1,177 @@
// Inspired by https://github.com/usgraphics/TR-100
{
"$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json",
"logo":null,
"display": {
"pipe": true,
"key": {
"width": 16
},
"separator": "│ ",
"percent": {
"type": ["bar", "hide-others"]
},
"bar": {
"border": null,
"char": {
"elapsed": "█",
"total": "░"
},
"width": 40
},
"constants": [
"\u001b[42C"
]
},
"modules": [
{
"type": "custom",
"format": "┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐"
},
{
"type": "custom",
"format": "├┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┤"
},
{
"type": "version",
"key": " ",
"format": "│ FASTFETCH v{version} │"
},
{
"type": "custom",
"format": "│ TR-100 MACHINE REPORT │"
},
{
"type": "custom",
"format": "├────────────┬──────────────────────────────────────────┤"
},
{
"type": "os",
"key": "│ OS │{$1}"
},
{
"type": "kernel",
"key": "│ KERNEL │{$1}"
},
{
"type": "custom",
"format": "├────────────┼──────────────────────────────────────────┤"
},
{
"type": "title",
"key": "│ HOSTNAME │{$1}",
"format": "{host-name}"
},
{
"type": "localip",
"key": "│ CLIENT IP │{$1}",
"format": "{ipv4}"
},
{
"type": "localip",
"key": "│ MAC ADDR │{$1}",
"format": "{mac} ({ifname})",
"showIpv4": false,
"showMac": true
},
{
"type": "dns",
"key": "│ DNS │{$1}",
"showType": "ipv4"
},
{
"type": "title",
"key": "│ USER │{$1}",
"format": "{user-name}"
},
{
"type": "host",
"key": "│ MACHINE │{$1}",
"format": "{name}"
},
{
"type": "custom",
"format": "├────────────┼──────────────────────────────────────────┤"
},
{
"type": "cpu",
"key": "│ PROCESSOR │{$1}",
"format": "{name}"
},
{
"type": "cpu",
"key": "│ CORES │{$1}",
"format": "{cores-physical} PHYSICAL CORES / {cores-logical} THREADS",
"showPeCoreCount": false
},
{
"type": "cpu",
"key": "│ CPU FREQ │{$1}",
"format": "{freq-max}{/freq-max}{freq-base}{/}"
},
{
"type": "loadavg",
"compact": false,
"key": "│ LOAD {duration>2}m │{$1}" // pad duration to 2 chars
},
{
"type": "custom",
"format": "├────────────┼──────────────────────────────────────────┤"
},
{
"type": "memory",
"key": "│ MEMORY │{$1}",
"format": "{used} / {total} [{percentage}]",
"percent": {
"type": ["num"]
}
},
{
"type": "memory",
"key": "│ USAGE │{$1}",
"format": "",
"percent": {
"type": ["bar", "hide-others"]
}
},
{
"type": "custom",
"format": "├────────────┼──────────────────────────────────────────┤"
},
{
"type": "disk",
"key": "│ VOLUME │{$1}",
"format": "{size-used} / {size-total} [{size-percentage}]",
"folders": "/",
"percent": {
"type": ["num"]
}
},
{
"type": "disk",
"key": "│ DISK USAGE │{$1}",
"format": "",
"percent": {
"type": ["bar", "hide-others"]
}
},
{
"type": "custom",
"format": "├────────────┼──────────────────────────────────────────┤"
},
{
"type": "users",
"key": "│ LAST LOGIN │{$1}",
"format": "{login-time}{?client-ip} ({client-ip})",
"myselfOnly": true
},
{
"type": "uptime",
"key": "│ UPTIME │{$1}"
},
{
"type": "custom",
"format": "└────────────┴──────────────────────────────────────────┘"
}
]
}

View file

@ -0,0 +1,180 @@
// Inspired by https://github.com/usgraphics/TR-100
{
"$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json",
"logo":null,
"display": {
"pipe": true,
"key": {
"width": 16,
},
"separator": "│ ",
"percent": {
"type": 9,
"color": {
"green": "green",
"yellow": "light_yellow",
"red": "light_red"
}
},
"bar": {
"border": null,
"char": {
"elapsed": "█",
"total": "░"
},
"width": 40
},
"constants": [
"\u001b[42C"
]
},
"modules": [
{
"type": "custom",
"format": "┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐"
},
{
"type": "custom",
"format": "├┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┤"
},
{
"type": "version",
"key": " ",
"format": "│ FASTFETCH v{version} │"
},
{
"type": "custom",
"format": "│ TR-100 MACHINE REPORT │"
},
{
"type": "custom",
"format": "├────────────┬──────────────────────────────────────────┤"
},
{
"type": "datetime",
"key": "│ TIME │{$1}",
"format": "{hour-pretty}:{minute-pretty}",
},
{
"type": "datetime",
"key": "│ DATE │{$1}",
"format": "{day-pretty}.{month}.{year-short}, {weekday}",
},
{
"type": "custom",
"format": "├────────────┼──────────────────────────────────────────┤"
},
{
"type": "os",
"key": "│ OS │{$1}"
},
{
"type": "kernel",
"key": "│ KERNEL │{$1}"
},
// {
// "type":"display",
// "key":"│ MONITOR │{$1}"
// },
// {
// "type": "custom",
// "format": "├────────────┼──────────────────────────────────────────┤"
//},
//{
// "type": "localip",
//"key": "│ CLIENT IP │{$1}",
//"format": "{ipv4}"
// },
// {
// "type": "localip",
// "key": "│ MAC ADDR │{$1}",
// "format": "{mac} ({ifname})",
// "showIpv4": false,
// "showMac": true
// },
// {
// "type": "dns",
// "key": "│ DNS │{$1}",
// "showType": "ipv4"
// },
{
"type": "custom",
"format": "├────────────┼──────────────────────────────────────────┤"
},
{
"type": "cpu",
"key": "│ CPU │{$1}",
"temp": true,
"format": "{name}, {freq-max}{/freq-max}{freq-base}{/} - {temperature}"
},
{
"type": "gpu",
"key": "│ GPU │{$1}",
"temp": true,
"format": "{name} - {temperature} {frequency}"
},
{
"type": "memory",
"key": "│ RAM │{$1}",
"format": "{used} / {total} [{percentage}]",
"percent": {
"type": ["num"]
}
},
//{
// "type": "memory",
// "key": "│ USAGE │{$1}",
// "format": "",
// "percent": {
// "type": ["bar", "hide-others"]
// }
// },
{
"type": "disk",
"key": "│ DISK │{$1}",
"format": "{size-used} / {size-total} [{size-percentage}]",
"folders": "/",
"percent": {
"type": ["num"]
}
},
{
"type": "custom",
"format": "├────────────┼──────────────────────────────────────────┤"
},
{
"type": "uptime",
"key": "│ UPTIME │{$1}"
},
{
"type": "disk",
"format": "{create-time}",
"key": "│ BIRTH TIME │{$1}"
},
// {
// "type": "DateTime",
// "key": "│ DATE&TIME │{$1}"
// },
{
"type": "custom",
"format": "└────────────┴──────────────────────────────────────────┘"
}
]
}

View file

@ -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)"

View file

@ -0,0 +1,8 @@
complete fzf_configure_bindings --no-files
complete fzf_configure_bindings --long help --short h --description "Print help" --condition "not __fish_seen_argument --help -h"
complete fzf_configure_bindings --long directory --description "Change the key binding for Search Directory" --condition "not __fish_seen_argument --directory"
complete fzf_configure_bindings --long git_log --description "Change the key binding for Search Git Log" --condition "not __fish_seen_argument --git_log"
complete fzf_configure_bindings --long git_status --description "Change the key binding for Search Git Status" --condition "not __fish_seen_argument --git_status"
complete fzf_configure_bindings --long history --description "Change the key binding for Search History" --condition "not __fish_seen_argument --history"
complete fzf_configure_bindings --long processes --description "Change the key binding for Search Processes" --condition "not __fish_seen_argument --processes"
complete fzf_configure_bindings --long variables --description "Change the key binding for Search Variables" --condition "not __fish_seen_argument --variables"

View file

@ -0,0 +1,14 @@
# This file was created by fish when upgrading to version 4.3, to migrate
# the 'fish_key_bindings' variable from its old default scope (universal)
# to its new default scope (global). We recommend you delete this file
# and configure key bindings in ~/.config/fish/config.fish if needed.
# set --global fish_key_bindings fish_default_key_bindings
# Prior to version 4.3, fish shipped an event handler that runs
# `set --universal fish_key_bindings fish_default_key_bindings`
# whenever the fish_key_bindings variable is erased.
# This means that as long as any fish < 4.3 is still running on this system,
# we cannot complete the migration.
# As a workaround, erase the universal variable at every shell startup.
set --erase --universal fish_key_bindings

View file

@ -0,0 +1,37 @@
# This file was created by fish when upgrading to version 4.3, to migrate
# theme variables from universal to global scope.
# Don't edit this file, as it will be written by the web-config tool (`fish_config`).
# To customize your theme, delete this file and see
# help interactive#syntax-highlighting
# or
# man fish-interactive | less +/^SYNTAX.HIGHLIGHTING
# for appropriate commands to add to ~/.config/fish/config.fish instead.
# See also the release notes for fish 4.3.0 (run `help relnotes`).
set --global fish_color_autosuggestion brblack
set --global fish_color_cancel -r
set --global fish_color_command normal
set --global fish_color_comment red
set --global fish_color_cwd green
set --global fish_color_cwd_root red
set --global fish_color_end green
set --global fish_color_error brred
set --global fish_color_escape brcyan
set --global fish_color_history_current --bold
set --global fish_color_host normal
set --global fish_color_host_remote yellow
set --global fish_color_normal normal
set --global fish_color_operator brcyan
set --global fish_color_param cyan
set --global fish_color_quote yellow
set --global fish_color_redirection cyan --bold
set --global fish_color_search_match white --background=brblack
set --global fish_color_selection white --bold --background=brblack
set --global fish_color_status red
set --global fish_color_user brgreen
set --global fish_color_valid_path --underline
set --global fish_pager_color_completion normal
set --global fish_pager_color_description yellow -i
set --global fish_pager_color_prefix normal --bold --underline
set --global fish_pager_color_progress brwhite --background=cyan
set --global fish_pager_color_selected_background -r

View file

@ -0,0 +1,27 @@
# fzf.fish is only meant to be used in interactive mode. If not in interactive mode and not in CI, skip the config to speed up shell startup
if not status is-interactive && test "$CI" != true
exit
end
# Because of scoping rules, to capture the shell variables exactly as they are, we must read
# them before even executing _fzf_search_variables. We use psub to store the
# variables' info in temporary files and pass in the filenames as arguments.
# This variable is global so that it can be referenced by fzf_configure_bindings and in tests
set --global _fzf_search_vars_command '_fzf_search_variables (set --show | psub) (set --names | psub)'
# Install the default bindings, which are mnemonic and minimally conflict with fish's preset bindings
fzf_configure_bindings
# Doesn't erase autoloaded _fzf_* functions because they are not easily accessible once key bindings are erased
function _fzf_uninstall --on-event fzf_uninstall
_fzf_uninstall_bindings
set --erase _fzf_search_vars_command
functions --erase _fzf_uninstall _fzf_migration_message _fzf_uninstall_bindings fzf_configure_bindings
complete --erase fzf_configure_bindings
set_color cyan
echo "fzf.fish uninstalled."
echo "You may need to manually remove fzf_configure_bindings from your config.fish if you were using custom key bindings."
set_color normal
end

View file

@ -0,0 +1,2 @@
if test -e /home/unconfer/.nix-profile/etc/profile.d/nix.fish; . /home/unconfer/.nix-profile/etc/profile.d/nix.fish; end # added by Nix installer

4
config/fish/config.fish Normal file
View file

@ -0,0 +1,4 @@
if status is-interactive
set -U fish_cursor_replace_one underscore
# Commands to run in interactive sessions can go here
end

2
config/fish/fish_plugins Normal file
View file

@ -0,0 +1,2 @@
jorgebucaran/fisher
patrickf1/fzf.fish

View file

@ -0,0 +1,11 @@
# This file contains fish universal variable definitions.
# VERSION: 3.0
SETUVAR --export EDITOR:nvim
SETUVAR __fish_initialized:4300
SETUVAR _fisher_jorgebucaran_2F_fisher_files:\x7e/\x2econfig/fish/functions/fisher\x2efish\x1e\x7e/\x2econfig/fish/completions/fisher\x2efish
SETUVAR _fisher_patrickf1_2F_fzf_2E_fish_files:\x7e/\x2econfig/fish/functions/_fzf_configure_bindings_help\x2efish\x1e\x7e/\x2econfig/fish/functions/_fzf_extract_var_info\x2efish\x1e\x7e/\x2econfig/fish/functions/_fzf_preview_changed_file\x2efish\x1e\x7e/\x2econfig/fish/functions/_fzf_preview_file\x2efish\x1e\x7e/\x2econfig/fish/functions/_fzf_report_diff_type\x2efish\x1e\x7e/\x2econfig/fish/functions/_fzf_report_file_type\x2efish\x1e\x7e/\x2econfig/fish/functions/_fzf_search_directory\x2efish\x1e\x7e/\x2econfig/fish/functions/_fzf_search_git_log\x2efish\x1e\x7e/\x2econfig/fish/functions/_fzf_search_git_status\x2efish\x1e\x7e/\x2econfig/fish/functions/_fzf_search_history\x2efish\x1e\x7e/\x2econfig/fish/functions/_fzf_search_processes\x2efish\x1e\x7e/\x2econfig/fish/functions/_fzf_search_variables\x2efish\x1e\x7e/\x2econfig/fish/functions/_fzf_wrapper\x2efish\x1e\x7e/\x2econfig/fish/functions/fzf_configure_bindings\x2efish\x1e\x7e/\x2econfig/fish/conf\x2ed/fzf\x2efish\x1e\x7e/\x2econfig/fish/completions/fzf_configure_bindings\x2efish
SETUVAR _fisher_plugins:jorgebucaran/fisher\x1epatrickf1/fzf\x2efish
SETUVAR _fisher_upgraded_to_4_4:\x1d
SETUVAR fish_cursor_default:block
SETUVAR fish_cursor_replace_one:underscore
SETUVAR fish_greeting:\x1d

View file

@ -0,0 +1,3 @@
function :q --wraps=exit --description 'alias :q=exit'
exit $argv
end

View file

@ -0,0 +1,44 @@
function _fzf_configure_bindings_help --description "Prints the help message for fzf_configure_bindings."
echo "\
USAGE:
fzf_configure_bindings [--COMMAND=[KEY_SEQUENCE]...]
DESCRIPTION
fzf_configure_bindings installs key bindings for fzf.fish's commands and erases any bindings it
previously installed. It installs bindings for both default and insert modes. fzf.fish executes
it without options on fish startup to install the out-of-the-box key bindings.
By default, commands are bound to a mnemonic key sequence, shown below. Each command's binding
can be configured using a namesake corresponding option:
COMMAND | DEFAULT KEY SEQUENCE | CORRESPONDING OPTION
Search Directory | Ctrl+Alt+F (F for file) | --directory
Search Git Log | Ctrl+Alt+L (L for log) | --git_log
Search Git Status | Ctrl+Alt+S (S for status) | --git_status
Search History | Ctrl+R (R for reverse) | --history
Search Processes | Ctrl+Alt+P (P for process) | --processes
Search Variables | Ctrl+V (V for variable) | --variables
Override a command's binding by specifying its corresponding option with the desired key
sequence using fish's key name syntax (e.g. ctrl-f, ctrl-alt-v). Disable a command's binding
by specifying its corresponding option with no value.
Because fzf_configure_bindings erases bindings it previously installed, it can be cleanly
executed multiple times. Once the desired fzf_configure_bindings command has been found, add it
to your config.fish in order to persist the customized bindings.
In terms of validation, fzf_configure_bindings fails if passed unknown options. It expects an
equals sign between an option's name and value. However, it does not validate key sequences.
Pass -h or --help to print this help message and exit.
EXAMPLES
Default bindings but bind Search Directory to Ctrl+F and Search Variables to Ctrl+Alt+V
\$ fzf_configure_bindings --directory=ctrl-f --variables=ctrl-alt-v
Default bindings but disable Search History
\$ fzf_configure_bindings --history=
An agglomeration of different options
\$ fzf_configure_bindings --git_status=ctrl-g --history=ctrl-h --variables= --processes=
SEE Also
To learn more about fish key bindings, see bind(1) and fish_key_reader(1).
"
end

View file

@ -0,0 +1,13 @@
# helper function for _fzf_search_variables
function _fzf_extract_var_info --argument-names variable_name set_show_output --description "Extract and reformat lines pertaining to \$variable_name from \$set_show_output."
# Extract only the lines about the variable, all of which begin with either
# $variable_name: ...or... $variable_name[
string match --regex "^\\\$$variable_name(?::|\[).*" <$set_show_output |
# Strip the variable name prefix, including ": " for scope info lines
string replace --regex "^\\\$$variable_name(?:: )?" '' |
# Distill the lines of values, replacing...
# [1]: |value|
# ...with...
# [1] value
string replace --regex ": \|(.*)\|" ' $1'
end

View file

@ -0,0 +1,49 @@
# helper for _fzf_search_git_status
# arg should be a line from git status --short, e.g.
# MM functions/_fzf_preview_changed_file.fish
# D README.md
# R LICENSE -> "New License"
function _fzf_preview_changed_file --argument-names path_status --description "Show the git diff of the given file."
# remove quotes because they'll be interpreted literally by git diff
# no need to requote when referencing $path because fish does not perform word splitting
# https://fishshell.com/docs/current/fish_for_bash_users.html
set -f path (string unescape (string sub --start 4 $path_status))
# first letter of short format shows index, second letter shows working tree
# https://git-scm.com/docs/git-status/2.35.0#_short_format
set -f index_status (string sub --length 1 $path_status)
set -f working_tree_status (string sub --start 2 --length 1 $path_status)
set -f diff_opts --color=always
if test $index_status = '?'
_fzf_report_diff_type Untracked
_fzf_preview_file $path
else if contains {$index_status}$working_tree_status DD AU UD UA DU AA UU
# Unmerged statuses taken directly from git status help's short format table
# Unmerged statuses are mutually exclusive with other statuses, so if we see
# these, then safe to assume the path is unmerged
_fzf_report_diff_type Unmerged
git diff $diff_opts -- $path
else
if test $index_status != ' '
_fzf_report_diff_type Staged
# renames are only detected in the index, never working tree, so only need to test for it here
# https://stackoverflow.com/questions/73954214
if test $index_status = R
# diff the post-rename path with the original path, otherwise the diff will show the entire file as being added
set -f orig_and_new_path (string split --max 1 -- ' -> ' $path)
git diff --staged $diff_opts -- $orig_and_new_path[1] $orig_and_new_path[2]
# path currently has the form of "original -> current", so we need to correct it before it's used below
set path $orig_and_new_path[2]
else
git diff --staged $diff_opts -- $path
end
end
if test $working_tree_status != ' '
_fzf_report_diff_type Unstaged
git diff $diff_opts -- $path
end
end
end

View file

@ -0,0 +1,43 @@
# helper function for _fzf_search_directory and _fzf_search_git_status
function _fzf_preview_file --description "Print a preview for the given file based on its file type."
# because there's no way to guarantee that _fzf_search_directory passes the path to _fzf_preview_file
# as one argument, we collect all the arguments into one single variable and treat that as the path
set -f file_path $argv
if test -L "$file_path" # symlink
# notify user and recurse on the target of the symlink, which can be any of these file types
set -l target_path (realpath "$file_path")
set_color yellow
echo "'$file_path' is a symlink to '$target_path'."
set_color normal
_fzf_preview_file "$target_path"
else if test -f "$file_path" # regular file
if set --query fzf_preview_file_cmd
# need to escape quotes to make sure eval receives file_path as a single arg
eval "$fzf_preview_file_cmd '$file_path'"
else
bat --style=numbers --color=always "$file_path"
end
else if test -d "$file_path" # directory
if set --query fzf_preview_dir_cmd
# see above
eval "$fzf_preview_dir_cmd '$file_path'"
else
# -A list hidden files as well, except for . and ..
# -F helps classify files by appending symbols after the file name
command ls -A -F "$file_path"
end
else if test -c "$file_path"
_fzf_report_file_type "$file_path" "character device file"
else if test -b "$file_path"
_fzf_report_file_type "$file_path" "block device file"
else if test -S "$file_path"
_fzf_report_file_type "$file_path" socket
else if test -p "$file_path"
_fzf_report_file_type "$file_path" "named pipe"
else
echo "$file_path doesn't exist." >&2
end
end

View file

@ -0,0 +1,18 @@
# helper for _fzf_preview_changed_file
# prints out something like
# ╭────────╮
# │ Staged │
# ╰────────╯
function _fzf_report_diff_type --argument-names diff_type --description "Print a distinct colored header meant to preface a git patch."
# number of "-" to draw is the length of the string to box + 2 for padding
set -f repeat_count (math 2 + (string length $diff_type))
set -f line (string repeat --count $repeat_count)
set -f top_border$line
set -f btm_border$line
set_color yellow
echo $top_border
echo "$diff_type"
echo $btm_border
set_color normal
end

View file

@ -0,0 +1,6 @@
# helper function for _fzf_preview_file
function _fzf_report_file_type --argument-names file_path file_type --description "Explain the file type for a file."
set_color red
echo "Cannot preview '$file_path': it is a $file_type."
set_color normal
end

View file

@ -0,0 +1,32 @@
function _fzf_search_directory --description "Search the current directory. Replace the current token with the selected file paths."
# Directly use fd binary to avoid output buffering delay caused by a fd alias, if any.
# Debian-based distros install fd as fdfind and the fd package is something else, so
# check for fdfind first. Fall back to "fd" for a clear error message.
set -f fd_cmd (command -v fdfind || command -v fd || echo "fd")
set -f --append fd_cmd --color=always $fzf_fd_opts
set -f fzf_arguments --multi --ansi $fzf_directory_opts
set -f token (commandline --current-token)
# expand any variables or leading tilde (~) in the token
set -f expanded_token (eval echo -- $token)
# unescape token because it's already quoted so backslashes will mess up the path
set -f unescaped_exp_token (string unescape -- $expanded_token)
# If the current token is a directory and has a trailing slash,
# then use it as fd's base directory.
if string match --quiet -- "*/" $unescaped_exp_token && test -d "$unescaped_exp_token"
set --append fd_cmd --base-directory=$unescaped_exp_token
# use the directory name as fzf's prompt to indicate the search is limited to that directory
set --prepend fzf_arguments --prompt="Directory $unescaped_exp_token> " --preview="_fzf_preview_file $expanded_token{}"
set -f file_paths_selected $unescaped_exp_token($fd_cmd 2>/dev/null | _fzf_wrapper $fzf_arguments)
else
set --prepend fzf_arguments --prompt="Directory> " --query="$unescaped_exp_token" --preview='_fzf_preview_file {}'
set -f file_paths_selected ($fd_cmd 2>/dev/null | _fzf_wrapper $fzf_arguments)
end
if test $status -eq 0
commandline --current-token --replace -- (string escape -- $file_paths_selected | string join ' ')
end
commandline --function repaint
end

View file

@ -0,0 +1,36 @@
function _fzf_search_git_log --description "Search the output of git log and preview commits. Replace the current token with the selected commit hash."
if not git rev-parse --git-dir >/dev/null 2>&1
echo '_fzf_search_git_log: Not in a git repository.' >&2
else
if not set --query fzf_git_log_format
# %h gives you the abbreviated commit hash, which is useful for saving screen space, but we will have to expand it later below
set -f fzf_git_log_format '%C(bold blue)%h%C(reset) - %C(cyan)%ad%C(reset) %C(yellow)%d%C(reset) %C(normal)%s%C(reset) %C(dim normal)[%an]%C(reset)'
end
set -f preview_cmd 'git show --color=always --stat --patch {1}'
if set --query fzf_diff_highlighter
set preview_cmd "$preview_cmd | $fzf_diff_highlighter"
end
set -f selected_log_lines (
git log --no-show-signature --color=always --format=format:$fzf_git_log_format --date=short | \
_fzf_wrapper --ansi \
--multi \
--scheme=history \
--prompt="Git Log> " \
--preview=$preview_cmd \
--query=(commandline --current-token) \
$fzf_git_log_opts
)
if test $status -eq 0
for line in $selected_log_lines
set -f abbreviated_commit_hash (string split --field 1 " " $line)
set -f full_commit_hash (git rev-parse $abbreviated_commit_hash)
set -f --append commit_hashes $full_commit_hash
end
commandline --current-token --replace (string join ' ' $commit_hashes)
end
end
commandline --function repaint
end

View file

@ -0,0 +1,41 @@
function _fzf_search_git_status --description "Search the output of git status. Replace the current token with the selected file paths."
if not git rev-parse --git-dir >/dev/null 2>&1
echo '_fzf_search_git_status: Not in a git repository.' >&2
else
set -f preview_cmd '_fzf_preview_changed_file {}'
if set --query fzf_diff_highlighter
set preview_cmd "$preview_cmd | $fzf_diff_highlighter"
end
set -f selected_paths (
# Pass configuration color.status=always to force status to use colors even though output is sent to a pipe
git -c color.status=always status --short |
_fzf_wrapper --ansi \
--multi \
--prompt="Git Status> " \
--query=(commandline --current-token) \
--preview=$preview_cmd \
--nth="2.." \
$fzf_git_status_opts
)
if test $status -eq 0
# git status --short automatically escapes the paths of most files for us so not going to bother trying to handle
# the few edges cases of weird file names that should be extremely rare (e.g. "this;needs;escaping")
set -f cleaned_paths
for path in $selected_paths
if test (string sub --length 1 $path) = R
# path has been renamed and looks like "R LICENSE -> LICENSE.md"
# extract the path to use from after the arrow
set --append cleaned_paths (string split -- "-> " $path)[-1]
else
set --append cleaned_paths (string sub --start=4 $path)
end
end
commandline --current-token --replace -- (string join ' ' $cleaned_paths)
end
end
commandline --function repaint
end

View file

@ -0,0 +1,39 @@
function _fzf_search_history --description "Search command history. Replace the command line with the selected command."
# history merge incorporates history changes from other fish sessions
# it errors out if called in private mode
if test -z "$fish_private_mode"
builtin history merge
end
if not set --query fzf_history_time_format
# Reference https://devhints.io/strftime to understand strftime format symbols
set -f fzf_history_time_format "%m-%d %H:%M:%S"
end
# Delinate time from command in history entries using the vertical box drawing char (U+2502).
# Then, to get raw command from history entries, delete everything up to it. The ? on regex is
# necessary to make regex non-greedy so it won't match into commands containing the char.
set -f time_prefix_regex '^.*? │ '
# Delinate commands throughout pipeline using null rather than newlines because commands can be multi-line
set -f commands_selected (
builtin history --null --show-time="$fzf_history_time_format" |
_fzf_wrapper --read0 \
--print0 \
--multi \
--scheme=history \
--prompt="History> " \
--query=(commandline) \
--preview="string replace --regex '$time_prefix_regex' '' -- {} | fish_indent --ansi" \
--preview-window="bottom:3:wrap" \
$fzf_history_opts |
string split0 |
# remove timestamps from commands selected
string replace --regex $time_prefix_regex ''
)
if test $status -eq 0
commandline --replace -- $commands_selected
end
commandline --function repaint
end

View file

@ -0,0 +1,32 @@
function _fzf_search_processes --description "Search all running processes. Replace the current token with the pid of the selected process."
# Directly use ps command because it is often aliased to a different command entirely
# or with options that dirty the search results and preview output
set -f ps_cmd (command -v ps || echo "ps")
# use all caps to be consistent with ps default format
# snake_case because ps doesn't seem to allow spaces in the field names
set -f ps_preview_fmt (string join ',' 'pid' 'ppid=PARENT' 'user' '%cpu' 'rss=RSS_IN_KB' 'start=START_TIME' 'command')
set -f processes_selected (
$ps_cmd -A -opid,command | \
_fzf_wrapper --multi \
--prompt="Processes> " \
--query (commandline --current-token) \
--ansi \
# first line outputted by ps is a header, so we need to mark it as so
--header-lines=1 \
# ps uses exit code 1 if the process was not found, in which case show an message explaining so
--preview="$ps_cmd -o '$ps_preview_fmt' -p {1} || echo 'Cannot preview {1} because it exited.'" \
--preview-window="bottom:4:wrap" \
$fzf_processes_opts
)
if test $status -eq 0
for process in $processes_selected
set -f --append pids_selected (string split --no-empty --field=1 -- " " $process)
end
# string join to replace the newlines outputted by string split with spaces
commandline --current-token --replace -- (string join ' ' $pids_selected)
end
commandline --function repaint
end

View file

@ -0,0 +1,47 @@
# This function expects the following two arguments:
# argument 1 = output of (set --show | psub), i.e. a file with the scope info and values of all variables
# argument 2 = output of (set --names | psub), i.e. a file with all variable names
function _fzf_search_variables --argument-names set_show_output set_names_output --description "Search and preview shell variables. Replace the current token with the selected variable."
if test -z "$set_names_output"
printf '%s\n' '_fzf_search_variables requires 2 arguments.' >&2
commandline --function repaint
return 22 # 22 means invalid argument in POSIX
end
# Exclude the history variable from being piped into fzf because
# 1. it's not included in $set_names_output
# 2. it tends to be a very large value => increases computation time
# 3._fzf_search_history is a much better way to examine history anyway
set -f all_variable_names (string match --invert history <$set_names_output)
set -f current_token (commandline --current-token)
# Use the current token to pre-populate fzf's query. If the current token begins
# with a $, remove it from the query so that it will better match the variable names
set -f cleaned_curr_token (string replace -- '$' '' $current_token)
set -f variable_names_selected (
printf '%s\n' $all_variable_names |
_fzf_wrapper --preview "_fzf_extract_var_info {} $set_show_output" \
--prompt="Variables> " \
--preview-window="wrap" \
--multi \
--query=$cleaned_curr_token \
$fzf_variables_opts
)
if test $status -eq 0
# If the current token begins with a $, do not overwrite the $ when
# replacing the current token with the selected variable.
# Uses brace expansion to prepend $ to each variable name.
commandline --current-token --replace (
if string match --quiet -- '$*' $current_token
string join " " \${$variable_names_selected}
else
string join " " $variable_names_selected
end
)
end
commandline --function repaint
end

View file

@ -0,0 +1,21 @@
function _fzf_wrapper --description "Prepares some environment variables before executing fzf."
# Make sure fzf uses fish to execute preview commands, some of which
# are autoloaded fish functions so don't exist in other shells.
# Use --function so that it doesn't clobber SHELL outside this function.
set -f --export SHELL (command --search fish)
# If neither FZF_DEFAULT_OPTS nor FZF_DEFAULT_OPTS_FILE are set, then set some sane defaults.
# See https://github.com/junegunn/fzf#environment-variables
set --query FZF_DEFAULT_OPTS FZF_DEFAULT_OPTS_FILE
if test $status -eq 2
# cycle allows jumping between the first and last results, making scrolling faster
# layout=reverse lists results top to bottom, mimicking the familiar layouts of git log, history, and env
# border shows where the fzf window begins and ends
# height=90% leaves space to see the current command and some scrollback, maintaining context of work
# preview-window=wrap wraps long lines in the preview window, making reading easier
# marker=* makes the multi-select marker more distinguishable from the pointer (since both default to >)
set --export FZF_DEFAULT_OPTS '--cycle --layout=reverse --border --height=90% --preview-window=wrap --marker="*"'
end
fzf $argv
end

View file

@ -0,0 +1,3 @@
function ff --wraps=fastfetch --description 'alias ff=fastfetch'
fastfetch $argv
end

View file

@ -0,0 +1,30 @@
function fish_prompt --description 'Write out the prompt'
set -l last_status $status
set -l normal (set_color normal)
set -l status_color (set_color brgreen)
set -l cwd_color (set_color $fish_color_cwd)
set -l vcs_color (set_color brpurple)
set -l prompt_status ""
# Since we display the prompt on a new line allow the directory names to be longer.
set -q fish_prompt_pwd_dir_length
or set -lx fish_prompt_pwd_dir_length 0
# Color the prompt differently when we're root
set -l suffix ''
if functions -q fish_is_root_user; and fish_is_root_user
if set -q fish_color_cwd_root
set cwd_color (set_color $fish_color_cwd_root)
end
set suffix '#'
end
# Color the prompt in red on error
if test $last_status -ne 0
set status_color (set_color $fish_color_error)
set prompt_status $status_color "[" $last_status "]" $normal
end
echo -s (prompt_login) ' ' $cwd_color (prompt_pwd) $vcs_color (fish_vcs_prompt) $normal ' ' $prompt_status
echo -n -s $status_color $suffix ' ' $normal
end

View file

@ -0,0 +1,31 @@
function fish_prompt --description 'Write out the prompt'
set -l last_pipestatus $pipestatus
set -lx __fish_last_status $status # Export for __fish_print_pipestatus.
set -l normal (set_color normal)
set -q fish_color_status
or set -g fish_color_status red
# Color the prompt differently when we're root
set -l color_cwd $fish_color_cwd
set -l suffix '>'
if functions -q fish_is_root_user; and fish_is_root_user
if set -q fish_color_cwd_root
set color_cwd $fish_color_cwd_root
end
set suffix '#'
end
# Write pipestatus
# If the status was carried over (if no command is issued or if `set` leaves the status untouched), don't bold it.
set -l bold_flag --bold
set -q __fish_prompt_status_generation; or set -g __fish_prompt_status_generation $status_generation
if test $__fish_prompt_status_generation = $status_generation
set bold_flag
end
set __fish_prompt_status_generation $status_generation
set -l status_color (set_color $fish_color_status)
set -l statusb_color (set_color $bold_flag $fish_color_status)
set -l prompt_status (__fish_print_pipestatus "[" "]" "|" "$status_color" "$statusb_color" $last_pipestatus)
echo -n -s (prompt_login)' ' (set_color $color_cwd) (prompt_pwd) $normal (fish_vcs_prompt) $normal " "$prompt_status $suffix " "
end

View file

@ -0,0 +1,251 @@
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.8
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 uninstall <plugins...> Remove installed plugins (alias)"
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, --version Print version"
echo " -h, --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 uninstall
isatty || read --local --null --array stdin && set --append argv $stdin
test "$cmd" = uninstall && set cmd remove
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 | string replace -- \~ ~)
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
else if test "$cmd" = install && ! set --query old_plugins[1]
set --append 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 resp (command mktemp)
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)
set http (command curl -q --silent -L -o \$resp -w %{http_code} \$url)
if test \"\$http\" = 200 && command tar -xzC \$temp -f \$resp 2>/dev/null
command cp -Rf \$temp/*/* $source
else if test \"\$http\" = 403
echo fisher: GitHub API rate limit exceeded \(HTTP 403\) >&2
command rm -rf $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 -RLf $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
string replace --regex -- $HOME \~ $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

View file

@ -0,0 +1,46 @@
# Always installs bindings for insert and default mode for simplicity and b/c it has almost no side-effect
# https://gitter.im/fish-shell/fish-shell?at=60a55915ee77a74d685fa6b1
function fzf_configure_bindings --description "Installs the default key bindings for fzf.fish with user overrides passed as options."
# no need to install bindings if not in interactive mode or running tests
status is-interactive || test "$CI" = true; or return
set -f options_spec h/help 'directory=?' 'git_log=?' 'git_status=?' 'history=?' 'processes=?' 'variables=?'
argparse --max-args=0 --ignore-unknown $options_spec -- $argv 2>/dev/null
if test $status -ne 0
echo "Invalid option or a positional argument was provided." >&2
_fzf_configure_bindings_help
return 22
else if set --query _flag_help
_fzf_configure_bindings_help
return
else
# Initialize with default key sequences and then override or disable them based on flags
# index 1 = directory, 2 = git_log, 3 = git_status, 4 = history, 5 = processes, 6 = variables
set -f key_sequences ctrl-alt-f ctrl-alt-l ctrl-alt-s ctrl-r ctrl-alt-p ctrl-v
set --query _flag_directory && set key_sequences[1] "$_flag_directory"
set --query _flag_git_log && set key_sequences[2] "$_flag_git_log"
set --query _flag_git_status && set key_sequences[3] "$_flag_git_status"
set --query _flag_history && set key_sequences[4] "$_flag_history"
set --query _flag_processes && set key_sequences[5] "$_flag_processes"
set --query _flag_variables && set key_sequences[6] "$_flag_variables"
# If fzf bindings already exists, uninstall it first for a clean slate
if functions --query _fzf_uninstall_bindings
_fzf_uninstall_bindings
end
for mode in default insert
test -n $key_sequences[1] && bind --mode $mode $key_sequences[1] _fzf_search_directory
test -n $key_sequences[2] && bind --mode $mode $key_sequences[2] _fzf_search_git_log
test -n $key_sequences[3] && bind --mode $mode $key_sequences[3] _fzf_search_git_status
test -n $key_sequences[4] && bind --mode $mode $key_sequences[4] _fzf_search_history
test -n $key_sequences[5] && bind --mode $mode $key_sequences[5] _fzf_search_processes
test -n $key_sequences[6] && bind --mode $mode $key_sequences[6] "$_fzf_search_vars_command"
end
function _fzf_uninstall_bindings --inherit-variable key_sequences
bind --erase -- $key_sequences
bind --erase --mode insert -- $key_sequences
end
end
end

View file

@ -0,0 +1,3 @@
function ls --wraps='eza --color' --description 'alias ls=eza --color'
eza --icons always --color always $argv
end

View file

@ -0,0 +1,3 @@
function n --wraps=nvim --description 'alias n=nvim'
nvim $argv
end

View file

@ -0,0 +1,4 @@
function nv --wraps=nvim --description 'alias nv=nvim'
nvim $argv
end

View file

@ -0,0 +1,3 @@
function p --wraps='paru -Syu' --description 'alias p=paru -Syu'
paru -Syu $argv
end

View file

@ -0,0 +1,3 @@
function sshp --wraps='ssh -P 49111' --description 'alias sshp=ssh -P 49111'
ssh -P 49111 $argv
end

View file

@ -0,0 +1,3 @@
function vpn --wraps='sudo ~/./sing-box-sh' --description 'alias vpn=sudo ~/./sing-box-sh'
sudo ~/./sing-box-sh $argv
end

View file

@ -0,0 +1,3 @@
function webka --wraps='scrcpy --v4l2-sink=/dev/video0 --camera-size=1920x1080 --video-source=camera --video-codec=h265 --video-encoder=c2.qti.hevc.encoder --video-buffer=100' --description 'alias webka=scrcpy --v4l2-sink=/dev/video0 --camera-size=1920x1080 --video-source=camera --video-codec=h265 --video-encoder=c2.qti.hevc.encoder --video-buffer=100'
scrcpy --v4l2-sink=/dev/video0 --camera-size=1920x1080 --video-source=camera --video-codec=h265 --video-encoder=c2.qti.hevc.encoder --video-buffer=100 $argv
end

View file

@ -0,0 +1,8 @@
function y
set tmp (mktemp -t "yazi-cwd.XXXXXX")
yazi $argv --cwd-file="$tmp"
if read -z cwd <"$tmp"; and [ -n "$cwd" ]; and [ "$cwd" != "$PWD" ]
builtin cd -- "$cwd"
end
rm -f -- "$tmp"
end

View file

@ -0,0 +1,3 @@
function yz --wraps=yazi --description 'alias yz=yazi'
yazi $argv
end

View file

@ -0,0 +1,3 @@
function ня --wraps=yazi --description 'alias ня=yazi'
yazi $argv
end

119
config/fuzzel/fuzzel.ini Normal file
View file

@ -0,0 +1,119 @@
# output=<not set>
font=IosevkaTerm NFP ExtraBold:size=15
dpi-aware=auto
# use-bold=no
# prompt="> "
# placeholder=
icon-theme=hicolor
# icons-enabled=yes
# hide-before-typing=no
# fields=filename,name,generic
# password-character=*
# filter-desktop=no
match-mode=fzf
# sort-result=yes
# match-counter=no
# delayed-filter-ms=300
# delayed-filter-limit=20000
# show-actions=no
terminal=kitty -e
# launch-prefix=<not set>
# list-executables-in-path=no
anchor=center
# x-margin=0
# y-margin=0
# lines=15
# width=30
tabs=4
horizontal-pad=40
# vertical-pad=8
# inner-pad=0
# image-size-ratio=0.5
# line-height=<use font metrics>
# letter-spacing=0
# layer=overlay
# keyboard-focus=on-demand
# exit-on-keyboard-focus-loss=yes
# cache=<not set>
# render-workers=<number of logical CPUs>
# match-workers=<number of logical CPUs>
[colors]
background=07090Bff
text=c1d6d6ff
prompt=E2F9F9ff
placeholder=07090Bff
input=e2f9f9ff
match=07090bff
selection=e2f9f9ff
selection-text=5A6B7Eff
selection-match=5A6B7Eff
counter=e2f9f9ff
border=c1d6d6ff
[border]
width=2
radius=8
#selection-radius=01
[dmenu]
# mode=text # text|index
# exit-immediately-if-empty=no
[key-bindings]
cancel=Escape Control+g Control+c Control+bracketleft
# execute=Return KP_Enter Control+y
# execute-or-next=Tab
# execute-input=Shift+Return Shift+KP_Enter
# cursor-left=Left Control+b
# cursor-left-word=Control+Left Mod1+b
# cursor-right=Right Control+f
# cursor-right-word=Control+Right Mod1+f
# cursor-home=Home Control+a
# cursor-end=End Control+e
# delete-prev=BackSpace Control+h
# delete-prev-word=Mod1+BackSpace Control+BackSpace Control+w
# delete-line-backward=Control+u
# delete-next=Delete KP_Delete Control+d
# delete-next-word=Mod1+d Control+Delete Control+KP_Delete
# delete-line-forward=Control+k
# prev=Up Control+p
# prev-with-wrap=ISO_Left_Tab
# prev-page=Page_Up KP_Page_Up
# next=Down Control+n
# next-with-wrap=none
# next-page=Page_Down KP_Page_Down
# expunge=Shift+Delete
# clipboard-paste=Control+v XF86Paste
# primary-paste=Shift+Insert Shift+KP_Insert
# custom-N: *dmenu mode only*. Like execute, but with a non-zero
# exit-code; custom-1 exits with code 10, custom-2 with 11, custom-3
# with 12, and so on.
# custom-1=Mod1+1
# custom-2=Mod1+2
# custom-3=Mod1+3
# custom-4=Mod1+4
# custom-5=Mod1+5
# custom-6=Mod1+6
# custom-7=Mod1+7
# custom-8=Mod1+8
# custom-9=Mod1+9
# custom-10=Mod1+0
# custom-11=Mod1+exclam
# custom-12=Mod1+at
# custom-13=Mod1+numbersign
# custom-14=Mod1+dollar
# custom-15=Mod1+percent
# custom-16=Mod1+dead_circumflex
# custom-17=Mod1+ampersand
# custom-18=Mod1+asterix
# custom-19=Mod1+parentleft

334
config/hypr/hyprland.conf Normal file
View file

@ -0,0 +1,334 @@
################
### MONITORS ###
################
monitor=DP-1,1920x1080@165, 0x0,1
###################
### MY PROGRAMS ###
###################
# Set programs that you use
$terminal = kitty
$fileManager = dolphin
#$menu = wofi --show drun
#################
### AUTOSTART ###
#################
# exec-once = $terminal
# exec-once = nm-applet &
# exec-once = waybar & hyprpaper & firefox
exec-once = fnott
exec-once = clipse -listen
exec-once = swww-daemon
exec-once = throne
exec-once = waybar
#############################
### ENVIRONMENT VARIABLES ###
#############################
# See https://wiki.hypr.land/Configuring/Environment-variables/
env = XCURSOR_SIZE,24
env = HYPRCURSOR_SIZE,24
#env = XDG_CURRENT_DESKTOP, hyprland
env = LIBVA_DRIVER_NAME,nvidia
env = __GLX_VENDOR_LIBRARY_NAME,nvidia
###################
### PERMISSIONS ###
###################
# See https://wiki.hypr.land/Configuring/Permissions/
# Please note permission changes here require a Hyprland restart and are not applied on-the-fly
# for security reasons
# ecosystem {
# enforce_permissions = 1
# }
# permission = /usr/(bin|local/bin)/grim, screencopy, allow
# permission = /usr/(lib|libexec|lib64)/xdg-desktop-portal-hyprland, screencopy, allow
# permission = /usr/(bin|local/bin)/hyprpm, plugin, allow
#####################
### LOOK AND FEEL ###
#####################
# Refer to https://wiki.hypr.land/Configuring/Variables/
# https://wiki.hypr.land/Configuring/Variables/#general
general {
gaps_in = 4
gaps_out = 5
border_size = 2
float_gaps = 5
# https://wiki.hypr.land/Configuring/Variables/#variable-types for info about colors
col.active_border = rgba(C1D6D6ff)
col.inactive_border = rgba(00000000)
# Set to true enable resizing windows by clicking and dragging on borders and gaps
resize_on_border = false
# Please see https://wiki.hypr.land/Configuring/Tearing/ before you turn this on
allow_tearing = false
layout = dwindle
snap {
enabled = true
window_gap = 15
monitor_gap = 15
border_overlap = true
respect_gaps = true
}
}
# https://wiki.hypr.land/Configuring/Variables/#decoration
decoration {
rounding = 5
rounding_power = 10
# Change transparency of focused and unfocused windows
active_opacity = 1.0
inactive_opacity = 1.0
border_part_of_window = true
shadow {
enabled = false
range = 4
render_power = 3
color = rgba(1a1a1aee)
}
# https://wiki.hypr.land/Configuring/Variables/#blur
blur {
enabled = true
size = 6
passes = 3
vibrancy = 0.1696
}
}
# https://wiki.hypr.land/Configuring/Variables/#animations
animations {
enabled = yes, please :)
# Default animations, see https://wiki.hypr.land/Configuring/Animations/ for more
#bezier = easeOutQuint,0.23,1,0.32,1
#bezier =SeaseInOutCubic,0.65,0.05,0.36,1
#bezier = linear,0,0,1,1
#bezier = almostLinear,0.5,0.5,0.75,1.0
#bezier = quick,0.15,0,0.1,1
bezier = easeOutQuint, 0, 1, 0.6, 0.99
bezier = easeInOutCubic,0.65,0.05,0.36,1
bezier = linear,0,0,1,1
bezier = almostLinear,0.5,0.5,0.75,1.0
bezier = quick,0.15,0,0.1,1
animation = global, 1, 10, default
animation = border, 1, 5.39, easeOutQuint
animation = windows, 1, 4.79, easeOutQuint
animation = windowsIn, 1, 4.1, easeOutQuint, popin 87%
animation = windowsOut, 1, 1.49, linear, popin 87%
animation = fadeIn, 1, 1.73, almostLinear
animation = fadeOut, 1, 1.46, almostLinear
animation = fade, 1, 3.03, quick
animation = layers, 1, 3.81, easeOutQuint
animation = layersIn, 1, 4, easeOutQuint, fade
animation = layersOut, 1, 1.5, linear, fade
animation = fadeLayersIn, 1, 1.79, almostLinear
animation = fadeLayersOut, 1, 1.39, almostLinear
animation = workspaces, 1, 1.94, almostLinear, fade
animation = workspacesIn, 1, 1.21, almostLinear, fade
animation = workspacesOut, 1, 1.94, almostLinear, fade
}
# Ref https://wiki.hypr.land/Configuring/Workspace-Rules/
# "Smart gaps" / "No gaps when only"
# uncomment all if you wish to use that.
# workspace = w[tv1], gapsout:0, gapsin:0
# workspace = f[1], gapsout:0, gapsin:0
# windowrule = bordersize 0, floating:0, onworkspace:w[tv1]
# windowrule = rounding 0, floating:0, onworkspace:w[tv1]
# windowrule = bordersize 0, floating:0, onworkspace:f[1]
# windowrule = rounding 0, floating:0, onworkspace:f[1]
# See https://wiki.hypr.land/Configuring/Dwindle-Layout/ for more
dwindle {
pseudotile = true # Master switch for pseudotiling. Enabling is bound to m + P in the keybinds section below
preserve_split = true # You probably want this
}
# See https://wiki.hypr.land/Configuring/Master-Layout/ for more
master {
new_status = master
}
# https://wiki.hypr.land/Configuring/Variables/#misc
misc {
force_default_wallpaper = -1 # Set to 0 or 1 to disable the anime mascot wallpapers
disable_hyprland_logo = false # If true disables the random hyprland logo / anime girl background. :(
font_family = FiraCodeNFM-Reg
animate_manual_resizes = false
animate_mouse_windowdragging = true
focus_on_activate = false
}
#############
### INPUT ###
#############
# https://wiki.hypr.land/Configuring/Variables/#input
input {
kb_layout = us, ru
kb_variant =
kb_model =
kb_options = grp:caps_toggle
kb_rules =
resolve_binds_by_sym = false
repeat_rate = 25
repeat_delay = 250
follow_mouse = 1
sensitivity = 0 # -1.0 - 1.0, 0 means no modification.
accel_profile = adaptive
scroll_method = on_button_down
float_switch_override_focus = 2
touchpad {
natural_scroll = false
}
}
# https://wiki.hypr.land/Configuring/Variables/#gestures
gestures {
# workspace_swipe = false
}
# Example per-device config
# See https://wiki.hypr.land/Configuring/Keywords/#per-device-input-configs for more
device {
name = epic-mouse-v1
sensitivity = -0.5
}
cursor {
enable_hyprcursor = true
hide_on_key_press = true
}
###################
### KEYBINDINGS ###
###################
# See https://wiki.hypr.land/Configuring/Keywords/
$m = SUPER # Sets "Windows" key as main modifier
$a = ALT
$s = SHIFT
# Example binds, see https://wiki.hypr.land/Configuring/Binds/ for more
bind = $m, Q, exec, $terminal
bind = $m, C, killactive,
bind = $m, M, exit,
bind = $m, E, exec, kitty -e yazi kitty
bind = $m, F, togglefloating,
bind = $m, P, pseudo, # dwindle
bind = $m, A, fullscreenstate, 1
bind = $m, D, exec, fuzzel
bind = $m $s, A, fullscreenstate, 3
bind = $m $s, Q, exec, wleave
bind = $a, C, exec, hyprpicker -a
# Move focus with m + arrow keys<D-A>
bind = $m, left, movefocus, l
bind = $m, right, movefocus, r
bind = $m, up, movefocus, u
bind = $m, down, movefocus, d
bind = $m, H, movefocus, l
bind = $m, L, movefocus, r
bind = $m, K, movefocus, u
bind = $m, J, movefocus, d
bind = $m $s, H, movewindow, l
bind = $m $s, L, movewindow, r
bind = $m $s, K, movewindow, u
bind = $m $s, J, movewindow, d
bind = $m $s, S, exec, hyprshot -m region --clipbnoard-only
bind = $m, W, exec, kitty --class clipse -e 'clipse'
# Switch workspaces with m + [0-9]
bind = $m, 1, workspace, 1
bind = $m, 2, workspace, 2
bind = $m, 3, workspace, 3
bind = $m, 4, workspace, 4
bind = $m, 5, workspace, 5
bind = $m, 6, workspace, 6
bind = $m, 7, workspace, 7
bind = $m, 8, workspace, 8
bind = $m, 9, workspace, 9
bind = $m, 0, workspace, 10
# Move active window to a workspace with m + SHIFT + [0-9]
bind = $m SHIFT, 1, movetoworkspacesilent, 1
bind = $m SHIFT, 2, movetoworkspacesilent, 2
bind = $m SHIFT, 3, movetoworkspacesilent, 3
bind = $m SHIFT, 4, movetoworkspacesilent, 4
bind = $m SHIFT, 5, movetoworkspacesilent, 5
bind = $m SHIFT, 6, movetoworkspacesilent, 6
bind = $m SHIFT, 7, movetoworkspacesilent, 7
bind = $m SHIFT, 8, movetoworkspacesilent, 8
bind = $m SHIFT, 9, movetoworkspacesilent, 9
bind = $m SHIFT, 0, movetoworkspacesilent, 10
# Example special workspace (scratchpad)
#bind = $m, S, togglespecialworkspace, magic
#bind = $m SHIFT, S, movetoworkspace, special:magic
# Scroll through existing workspaces with m + scroll
bind = $m, mouse_down, workspace, e+1
bind = $m, mouse_up, workspace, e-1
# Move/resize windows with m + LMB/RMB and dragging
bindm = $m, mouse:272, movewindow
bindm = $m, mouse:273, resizewindow
# Laptop multimedia keys for volume and LCD brightness
bindel = ,XF86AudioRaiseVolume, exec, wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%+
bindel = ,XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-
bindel = ,XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle
bindel = ,XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle
bindel = ,XF86MonBrightnessUp, exec, brightnessctl -e4 -n2 set 5%+
bindel = ,XF86MonBrightnessDown, exec, brightnessctl -e4 -n2 set 5%-
# Requires playerctl
bindl = , XF86AudioNext, exec, playerctl next
bindl = , XF86AudioPause, exec, playerctl play-pause
bindl = , XF86AudioPlay, exec, playerctl play-pause
bindl = , XF86AudioPrev, exec, playerctl previous
##############################
### WINDOWS AND WORKSPACES ###
##############################
# See https://wiki.hypr.land/Configuring/Window-Rules/ for more
# See https://wiki.hypr.land/Configuring/Workspace-Rules/ for workspace rules
# Example windowrule
# windowrule = float,class:^(kitty)$,title:^(kitty)$
# Ignore maximize requests from apps. You'll probably like this.

110
config/hypr/hyprlock.conf Normal file
View file

@ -0,0 +1,110 @@
# sample hyprlock.conf
# for more configuration options, refer https://wiki.hyprland.org/Hypr-Ecosystem/hyprlock
#
# rendered text in all widgets supports pango markup (e.g. <b> or <i> tags)
# ref. https://wiki.hyprland.org/Hypr-Ecosystem/hyprlock/#general-remarks
#
# shortcuts to clear password buffer: ESC, Ctrl+U, Ctrl+Backspace
#
# you can get started by copying this config to ~/.config/hypr/hyprlock.conf
#
$font = IosevkaTerm NFM ExtraBold
general {
hide_cursor = true
}
# uncomment to enable fingerprint authentication
# auth {
# fingerprint {
# enabled = true
# ready_message = Scan fingerprint to unlock
# present_message = Scanning...
# retry_delay = 250 # in milliseconds
# }
# }
animations {
enabled = false
bezier = linear, 1, 1, 0, 0
animation = fadeIn, 1, 5, linear
animation = fadeOut, 1, 5, linear
animation = inputFieldDots, 1, 2, linear
}
background {
monitor =
path = screenshot
blur_passes = 4
}
input-field {
monitor =
size = 20%, 5%
outline_thickness = 3
inner_color = rgba(0, 0, 0, 0.0) # no fill
#outer_color = rgba(33ccffee) rgba(00ff99ee) 45deg
#check_color = rgba(00ff99ee) rgba(ff6633ee) 120deg
#fail_color = rgba(ff6633ee) rgba(ff0066ee) 40deg
outer_color = rgba(EEF7FDee)
check_color = rgba(FFDE00ee)
fail_color = rgba(FF0100ee)
font_color = rgb(143, 143, 143)
fade_on_empty = false
rounding = 3
font_family = $font
placeholder_text = Password here:
fail_text = $PAMFAIL
# uncomment to use a letter instead of a dot to indicate the typed password
# dots_text_format = *
# dots_size = 0.4
dots_spacing = 0.3
# uncomment to use an input indicator that does not show the password length (similar to swaylock's input indicator)
# hide_input = true
position = 0, -200
halign = center
valign = center
}
# TIME
label {
monitor =
text = $TIME # ref. https://wiki.hyprland.org/Hypr-Ecosystem/hyprlock/#variable-substitution
font_size = 90
font_family = $font
position = 0, -40
halign = center
valign = top
}
# DATE
label {
monitor =
text = cmd[update:60000] date +"%A, %d %B %Y" # update every 60 seconds
font_size = 25
font_family = $font
position = 0, -200
halign = center
valign = top
}
label {
monitor =
text = $LAYOUT[en,ru]
font_size = 24
onclick = hyprctl switchxkblayout all next
position = 250, -200
halign = center
valign = center
}

View file

@ -0,0 +1,35 @@
# HyprWave Configuration File
[General]
# Edge to anchor HyprWave to
# Options: right, left, top, bottom
edge = top
# Margin from the screen edge (in pixels)
margin = 10
# Layer to render on
# Options: background, bottom, top, overlay
layer = top
# Exclusive zone: 0 = respect other surfaces, -1 = overlap everything
exclusive_zone = 0
[Notifications]
enabled = true
now_playing = true
[Visualizer]
# Enable/disable visualizer (horizontal layout only)
enabled = true
# Idle timeout in seconds before visualizer appears
# Set to 0 to disable auto-activation
idle_timeout = 5
[VerticalDisplay]
enabled=true
idle_timeout=5
[MusicPlayer]
preference = spotify,vlc

567
config/hyprwave/style.css Normal file
View file

@ -0,0 +1,567 @@
/* ========================================
HyprWave - Mystic Portal Theme
Inspired by purple/pink portal with blue depths
======================================== */
:root {
/* Background Colors - Deep Void */
--bg-primary: rgba(15, 12, 30, 0.75);
--bg-secondary: rgba(20, 18, 40, 0.75);
--bg-album-cover: rgba(25, 22, 48, 0.85);
--bg-album-secondary: rgba(30, 28, 55, 0.85);
/* Button Colors - Default (Prev/Next) - Mystic Purple */
--btn-default: rgba(140, 100, 180, 0.85);
--btn-default-secondary: rgba(130, 90, 170, 0.85);
--btn-default-hover: rgba(160, 120, 200, 0.92);
--btn-default-hover-secondary: rgba(150, 110, 190, 0.92);
/* Button Colors - Play/Pause - Bright Pink Portal */
--btn-play: rgba(255, 100, 200, 0.95);
--btn-play-secondary: rgba(240, 80, 180, 0.95);
--btn-play-hover: rgba(255, 120, 215, 0.98);
--btn-play-hover-secondary: rgba(255, 110, 205, 0.98);
--btn-play-active: rgba(230, 70, 170, 0.95);
--btn-play-active-secondary: rgba(220, 60, 160, 0.95);
/* Button Colors - Expand - Deep Violet */
--btn-expand: rgba(120, 60, 200, 0.95);
--btn-expand-secondary: rgba(110, 50, 190, 0.95);
--btn-expand-hover: rgba(140, 80, 220, 0.98);
--btn-expand-hover-secondary: rgba(130, 70, 210, 0.98);
--btn-expand-active: rgba(100, 40, 180, 0.95);
--btn-expand-active-secondary: rgba(90, 35, 170, 0.95);
/* Progress Bar Colors */
--progress-bg: rgba(40, 30, 60, 0.25);
--progress-fill-start: rgba(255, 100, 200, 0.95);
--progress-fill-end: rgba(120, 60, 200, 0.95);
/* Slider Handle Colors */
--handle-color: rgba(255, 100, 200, 0.98);
--handle-hover: rgba(255, 120, 215, 1.0);
--handle-border: rgba(230, 70, 170, 0.5);
--handle-shadow: rgba(255, 100, 200, 0.6);
/* Text Colors - Soft pink/purple on dark */
--text-primary: rgba(255, 220, 245, 0.95);
--text-secondary: rgba(230, 190, 220, 0.85);
--text-tertiary: rgba(200, 160, 195, 0.75);
--text-muted: rgba(160, 120, 165, 0.65);
/* Border Colors */
--border-primary: rgba(100, 70, 140, 0.35);
--border-button: rgba(120, 85, 160, 0.3);
--border-button-hover: rgba(140, 100, 180, 0.45);
--border-play: rgba(255, 100, 200, 0.4);
--border-play-hover: rgba(255, 120, 215, 0.55);
--border-expand: rgba(120, 60, 200, 0.4);
--border-expand-hover: rgba(140, 80, 220, 0.55);
/* Shadow Colors */
--shadow-default: rgba(0, 0, 0, 0.6);
--shadow-button: rgba(0, 0, 0, 0.5);
--shadow-play: rgba(255, 100, 200, 0.5);
--shadow-play-hover: rgba(255, 120, 215, 0.7);
--shadow-expand: rgba(120, 60, 200, 0.5);
--shadow-expand-hover: rgba(140, 80, 220, 0.7);
--shadow-focus: rgba(255, 100, 200, 0.7);
/* Spacing & Sizes */
--border-radius-container: 100px;
--border-radius-section: 20px;
--border-radius-album: 16px;
--border-radius-button: 50%;
--border-radius-progress: 2px;
--padding-container: 12px;
--padding-section: 16px;
}
/* Visualizer bars - mystic portal glow */
.visualizer-bar {
background: linear-gradient(180deg,
rgba(255, 120, 215, 0.98),
rgba(180, 100, 220, 0.98),
rgba(140, 80, 220, 0.98));
border-radius: 0px;
transition: all 0.05s ease-out;
margin: 0px;
min-width: 1px;
min-height: 3px;
box-shadow: 0 0 16px rgba(255, 100, 200, 0.8),
0 0 10px rgba(140, 80, 220, 0.6);
}
.vertical-display-label {
font-family: 'VT323', monospace;
font-size: 28px;
font-weight: bold;
color: rgba(255, 120, 215, 0.98);
letter-spacing: 0px;
line-height: 1.2;
}
/* CRITICAL: Disable CSS transitions during JavaScript animations */
.no-transition,
.no-transition * {
transition: none !important;
animation: none !important;
}
/* ========================================
Base Styles
======================================== */
/* GTK4 transparent window - CRITICAL for compositor transparency */
window,
window.background,
.hyprwave-window {
background-color: transparent;
background-image: none;
}
/* Ensure ALL window-level elements are transparent */
window > * {
background: transparent;
}
/* Main container - transparent */
.main-container {
background: transparent;
}
/* ========================================
Control Container (Vertical Bar)
======================================== */
.control-container {
background: linear-gradient(145deg, var(--bg-primary), var(--bg-secondary));
border-radius: var(--border-radius-container);
border: 1px solid var(--border-primary);
padding: var(--padding-container);
margin: 0;
}
/* ========================================
Control Container (Horizontal Bar)
For Top/Bottom Layouts
======================================== */
.control-container-horizontal {
/* Match the vertical style exactly for consistency */
background: linear-gradient(145deg, var(--bg-primary), var(--bg-secondary));
border-radius: var(--border-radius-container); /* Keeps the pill shape */
border: 1px solid var(--border-primary);
/* Horizontal padding is critical here to prevent buttons
from touching the rounded edges */
padding: 8px 24px;
margin: 0;
}
/* ========================================
Expanded Section (Album Details Card)
======================================== */
.expanded-section {
background: linear-gradient(145deg, var(--bg-primary), var(--bg-secondary));
border-radius: var(--border-radius-section);
border: 1px solid var(--border-primary);
padding: var(--padding-section);
margin: 0;
margin-top: 4px; /* Reduced spacing from control bar */
}
/* ========================================
Expanded Section (Horizontal Layout)
For Top/Bottom Layouts
======================================== */
.expanded-section-horizontal {
background: linear-gradient(145deg, var(--bg-primary), var(--bg-secondary));
border-radius: var(--border-radius-section);
border: 1px solid var(--border-primary);
/* Slightly different padding/margin to look good below/above the bar */
padding: var(--padding-section);
margin-top: 2px; /* Adds gap between control bar and this panel */
margin-bottom: 2px;
/* Ensure it doesn't get too squeezed */
min-width: 300px;
}
/* Album cover */
.album-cover {
background: linear-gradient(135deg, var(--bg-album-cover), var(--bg-album-secondary));
border-radius: var(--border-radius-album);
border: 1px solid var(--border-button);
box-shadow: 0 4px 16px var(--shadow-button);
}
/* ========================================
Text Styles
======================================== */
/* Source label (e.g., "Spotify") */
.source-label {
color: var(--text-muted);
font-size: 11px;
font-weight: 500;
margin-top: 8px;
text-transform: uppercase;
letter-spacing: 0.5px;
}
/* Track title */
.track-title {
color: var(--text-primary);
font-size: 14px;
font-weight: 600;
margin-top: 4px;
}
/* Artist label */
.artist-label {
color: var(--text-secondary);
font-size: 12px;
font-weight: 500;
margin-top: 2px;
}
/* Time remaining */
.time-remaining {
color: var(--text-tertiary);
font-size: 12px;
font-weight: 500;
margin-top: 2px;
}
/* ========================================
Progress Bar - FIXED FOR GTK4
======================================== */
.track-progress {
min-height: 4px;
margin-top: 8px;
margin-bottom: 4px;
}
/* The background track */
.track-progress trough {
background: var(--progress-bg);
border-radius: var(--border-radius-progress);
min-height: 4px;
}
/* The filled progress portion - GTK4 specific */
.track-progress progress {
background: linear-gradient(90deg, var(--progress-fill-start), var(--progress-fill-end));
border-radius: var(--border-radius-progress);
min-height: 4px;
}
/* GTK4 also needs this for the fill bar to show */
progressbar trough {
background: var(--progress-bg);
border-radius: var(--border-radius-progress);
min-height: 4px;
}
progressbar progress {
background: linear-gradient(90deg, var(--progress-fill-start), var(--progress-fill-end));
border-radius: var(--border-radius-progress);
min-height: 4px;
}
/* ========================================
Control Buttons - FIXED ROUNDED SHAPE
======================================== */
/* All control buttons - base styles */
.control-button {
padding: 0;
/* Add margin to compensate for removed border */
margin: 1.5px; /* Same as the old border width */
min-width: 44px;
min-height: 44px;
background: linear-gradient(135deg, var(--btn-default), var(--btn-default-secondary));
border: none;
box-shadow:
inset 0 0 0 1.5px var(--border-button),
0 4px 16px var(--shadow-button),
inset 0 1px 1px rgba(255, 255, 255, 0.2);
border-radius: 50%;
}
.control-button:hover {
background: linear-gradient(135deg, var(--btn-default-hover), var(--btn-default-hover-secondary));
border-color: var(--border-button-hover);
box-shadow:
0 6px 20px var(--shadow-button),
inset 0 1px 1px rgba(255, 255, 255, 0.25);
transform: translateY(-1px);
}
.control-button:active {
transform: scale(0.96);
box-shadow:
0 2px 8px var(--shadow-button),
inset 0 2px 4px rgba(0, 0, 0, 0.2);
}
/* ========================================
Play/Pause Button (Blue)
======================================== */
.play-button {
background: linear-gradient(135deg, var(--btn-play), var(--btn-play-secondary));
border-color: var(--border-play);
box-shadow:
0 4px 16px var(--shadow-play),
inset 0 1px 1px rgba(255, 255, 255, 0.3);
}
.play-button:hover {
background: linear-gradient(135deg, var(--btn-play-hover), var(--btn-play-hover-secondary));
border-color: var(--border-play-hover);
box-shadow:
0 6px 20px var(--shadow-play-hover),
inset 0 1px 1px rgba(255, 255, 255, 0.4);
}
.play-button:active {
background: linear-gradient(135deg, var(--btn-play-active), var(--btn-play-active-secondary));
box-shadow:
0 2px 10px var(--shadow-play),
inset 0 2px 4px rgba(0, 0, 0, 0.15);
}
/* ========================================
Expand Button (Purple)
======================================== */
.expand-button {
background: linear-gradient(135deg, var(--btn-expand), var(--btn-expand-secondary));
border-color: var(--border-expand);
box-shadow:
0 4px 16px var(--shadow-expand),
inset 0 1px 1px rgba(255, 255, 255, 0.3);
}
.expand-button:hover {
background: linear-gradient(135deg, var(--btn-expand-hover), var(--btn-expand-hover-secondary));
border-color: var(--border-expand-hover);
box-shadow:
0 6px 20px var(--shadow-expand-hover),
inset 0 1px 1px rgba(255, 255, 255, 0.4);
}
.expand-button:active {
background: linear-gradient(135deg, var(--btn-expand-active), var(--btn-expand-active-secondary));
box-shadow:
0 2px 10px var(--shadow-expand),
inset 0 2px 4px rgba(0, 0, 0, 0.15);
}
/* ========================================
Previous/Next Buttons
======================================== */
.prev-button, .next-button {
background: linear-gradient(135deg, var(--btn-default), var(--btn-default-secondary));
}
.prev-button:hover, .next-button:hover {
background: linear-gradient(135deg, var(--btn-default-hover), var(--btn-default-hover-secondary));
}
/* ========================================
Focus & Accessibility
======================================== */
button {
outline: none;
}
button:focus {
outline: none;
box-shadow:
0 0 0 3px var(--shadow-focus),
0 4px 16px var(--shadow-play),
inset 0 1px 1px rgba(255, 255, 255, 0.3);
}
/* ========================================
Notification Styles
======================================== */
.notification-window {
background: transparent;
}
.notification-container {
background: linear-gradient(145deg, var(--bg-primary), var(--bg-secondary));
border-radius: var(--border-radius-section);
border: 1px solid var(--border-primary);
padding: 10px 12px; /* Reduced from 12px to 10px vertical padding */
min-width: 280px; /* Reduced from 320px */
max-width: 300px; /* Added max-width */
}
.notification-album {
background: linear-gradient(135deg, var(--bg-album-cover), var(--bg-album-secondary));
border-radius: var(--border-radius-album);
border: 1px solid var(--border-button);
}
.notification-header {
color: var(--text-muted);
font-size: 10px; /* Reduced from 11px */
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.5px;
margin-bottom: 6px; /* Reduced from 8px */
}
.notification-song {
color: var(--text-primary);
font-size: 13px; /* Reduced from 14px */
font-weight: 600;
line-height: 1.2; /* Added for tighter spacing */
}
.notification-artist {
color: var(--text-secondary);
font-size: 11px; /* Reduced from 12px */
font-weight: 500;
line-height: 1.2; /* Added for tighter spacing */
}
/* ========================================
Volume Control Styles
======================================== */
.volume-container {
background: linear-gradient(145deg, var(--bg-primary), var(--bg-secondary));
border-radius: var(--border-radius-section);
border: 1px solid var(--border-primary);
padding: 12px;
margin: 0px;
}
.volume-icon {
min-width: 20px;
min-height: 20px;
}
.volume-percentage {
color: var(--text-primary);
font-size: 13px;
font-weight: 600;
min-width: 40px;
}
/* Volume slider - similar to progress bar but with different colors */
.volume-slider {
min-height: 24px;
min-width: 24px;
}
/* The background track */
.volume-slider trough {
background: var(--progress-bg);
border-radius: var(--border-radius-progress);
min-height: 6px;
min-width: 6px;
}
/* The filled portion */
.volume-slider progress {
background: linear-gradient(90deg, var(--btn-default), var(--btn-default-secondary));
border-radius: var(--border-radius-progress);
min-height: 6px;
min-width: 6px;
}
/* The slider handle */
.volume-slider slider {
min-height: 16px;
min-width: 16px;
background: linear-gradient(135deg, var(--btn-default), var(--btn-default-secondary));
border: 2px solid var(--border-button);
border-radius: 50%;
}
.volume-slider slider:hover {
background: linear-gradient(135deg, var(--btn-default-hover), var(--btn-default-hover-secondary));
border-color: var(--border-button-hover);
transform: scale(1.1);
}
.volume-slider slider:active {
background: linear-gradient(135deg, var(--btn-default), var(--btn-default-secondary));
transform: scale(0.95);
}
/* GTK4 specific for vertical sliders */
.volume-slider.vertical trough {
min-width: 6px;
}
.volume-slider.vertical progress {
min-width: 6px;
}
/* ========================================
Visualizer Bars - Idle Mode Animation
======================================== */
/* Container padding to keep bars inside control bar edges */
.visualizer-container {
padding: 0px; /* 5px padding on left/right keeps bars inside */
padding-bottom: 1px; /* Small bottom padding to align with control bar bottom */
border-radius: 0 0 12px 12px;
}
Smooth control bar height transitions for idle mode */
.control-container-horizontal {
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}
/* Smooth button fade transitions */
.control-button {
transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1),
opacity 0.3s ease-in-out;
}
/* Ensure overlay respects size changes */
overlay {
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}
/* Vertical Display (for vertical layouts) */
.vertical-display-container {
background: transparent;
padding: 8px 4px;
}
.vertical-display-label {
font-family: 'VT323', monospace;
font-size: 28px;
font-weight: bold;
color: white; /* Match visualizer bar color */
letter-spacing: 0px;
line-height: 1.2;
}

View file

@ -0,0 +1,50 @@
# vim:ft=kitty
## name: Tokyo Night
## license: popachcka-rulet
## author: an idiot
## upstream: /////////gol
background #07090B
foreground #EEF7FD
selection_background #C1D6D6
selection_foreground #07090B
url_color #73daca
cursor #c0caf5
cursor_text_color #1a1b26
# Tabs
active_tab_background #C1D6D6
active_tab_foreground #25C39F
inactive_tab_background #5C6871
inactive_tab_foreground #07090B
#tab_bar_background #15161e
# Windows
active_border_color #25C39F
inactive_border_color #C0CAF5
# normal
color0 #07090B
color1 #FF0100
color2 #25C39F
color3 #FFDE00
color4 #109FFF
color5 #FE31FF
color6 #00FED4
color7 #EEF7FD
# bright
color8 #5C6871
color9 #E46468
color10 #82D1B9
color11 #F6DB8B
color12 #8FD2F7
color13 #F79DE7
color14 #7EFEDE
color15 #C1D6D6
# extended colors
color16 #ff9e64
color17 #db4b4b

2840
config/kitty/kitty.conf Normal file

File diff suppressed because it is too large Load diff

2845
config/kitty/kitty.conf.bak Normal file

File diff suppressed because it is too large Load diff

75
config/mimeapps.list Normal file
View file

@ -0,0 +1,75 @@
[Added Associations]
application/json=neovide.desktop;
application/octet-stream=mpv.desktop;
application/x-extension-htm=firefox.desktop;userapp-Zen-PIXJK3.desktop;zen.desktop;
application/x-extension-html=firefox.desktop;userapp-Zen-PIXJK3.desktop;zen.desktop;
application/x-extension-shtml=firefox.desktop;userapp-Zen-PIXJK3.desktop;zen.desktop;
application/x-extension-xht=firefox.desktop;userapp-Zen-PIXJK3.desktop;zen.desktop;
application/x-extension-xhtml=firefox.desktop;userapp-Zen-PIXJK3.desktop;zen.desktop;
application/x-msdownload=ru.launcher.StartWine.desktop;
application/x-php=mpv.desktop;
application/xhtml+xml=firefox.desktop;userapp-Zen-PIXJK3.desktop;zen.desktop;
application/zip=org.gnome.Nautilus.desktop;
audio/flac=mpv.desktop;
audio/mp4=mpv.desktop;
audio/ogg=mpv.desktop;
audio/vorbis=mpv.desktop;
audio/x-oggflac=mpv.desktop;
audio/x-vorbis=mpv.desktop;
audio/x-vorbis+ogg=mpv.desktop;
image/jpeg=gimp.desktop;org.gnome.gThumb.desktop;org.gnome.eog.desktop;
image/png=gimp.desktop;org.gnome.eog.desktop;
image/webp=org.gnome.eog.desktop;
text/html=zen.desktop;userapp-Zen-PIXJK3.desktop;
text/plain=neovide.desktop;
video/mp4=mpv.desktop;
video/webm=mpv.desktop;
x-scheme-handler/chrome=zen.desktop;userapp-Zen-PIXJK3.desktop;firefox.desktop;
x-scheme-handler/http=zen.desktop;userapp-Zen-PIXJK3.desktop;firefox.desktop;
x-scheme-handler/https=zen.desktop;userapp-Zen-PIXJK3.desktop;firefox.desktop;
x-scheme-handler/mailto=zen.desktop;
x-scheme-handler/tg=org.telegram.desktop.desktop;userapp-AyuGram Desktop-YAGQF3.desktop;userapp-AyuGram Desktop-352WJ3.desktop;org.fagram.desktop;
x-scheme-handler/tonsite=org.telegram.desktop.desktop;userapp-AyuGram Desktop-UNJQF3.desktop;userapp-AyuGram Desktop-31ZUJ3.desktop;org.fagram.desktop;
[Default Applications]
application/fb2=org.pwmt.zathura.desktop
application/json=neovide.desktop
application/octet-stream=mpv.desktop
application/pdf=org.pwmt.zathura.desktop
application/x-extension-htm=zen.desktop
application/x-extension-html=zen.desktop
application/x-extension-shtml=zen.desktop
application/x-extension-xht=zen.desktop
application/x-extension-xhtml=zen.desktop
application/x-ms-dos-executable;application/x-wine-extension-msp;application/x-msi;application/x-msdos-program;text/win-bat;=PortProton.desktop
application/x-msdownload=ru.launcher.StartWine.desktop
application/x-php=mpv.desktop
application/x-zip-compressed-fb2=org.pwmt.zathura.desktop
application/xhtml+xml=zen.desktop
application/zip=org.gnome.Nautilus.desktop
audio/flac=mpv.desktop
audio/mp4=mpv.desktop
audio/ogg=mpv.desktop;
audio/vorbis=mpv.desktop;
audio/x-oggflac=mpv.desktop;
audio/x-vorbis=mpv.desktop;
audio/x-vorbis+ogg=mpv.desktop;
image/gif=imv.desktop
image/jpeg=org.gnome.eog.desktop
image/png=org.gnome.eog.desktop
image/vnd.djvu=org.pwmt.zathura.desktop
image/webp=org.gnome.eog.desktop
text/fb2+xml=org.pwmt.zathura.desktop
text/html=zen.desktop
text/plain=neovide.desktop
text/xml=com.github.johnfactotum.Foliate.desktop
video/mp4=mpv.desktop
video/webm=mpv.desktop
x-scheme-handler/anytype=anytype.desktop
x-scheme-handler/chrome=zen.desktop
x-scheme-handler/discord=vesktop.desktop
x-scheme-handler/http=zen.desktop
x-scheme-handler/https=zen.desktop
x-scheme-handler/mailto=zen.desktop;
x-scheme-handler/tg=org.fagram.desktop
x-scheme-handler/tonsite=org.fagram.desktop

716
config/niri/config.kdl Normal file
View file

@ -0,0 +1,716 @@
input {
keyboard {
xkb {
layout "us,ru"
options "grp:caps_toggle"
}
repeat-delay 225
repeat-rate 25
// track-layout "global"
numlock
}
touchpad {
// off
tap
// dwt
// dwtp
// drag false
// drag-lock
natural-scroll
// accel-speed 0.2
// accel-profile "flat"
// scroll-method "two-finger"
// disabled-on-external-mouse
}
mouse {
// off
// natural-scroll
// accel-speed 0.2
accel-profile "adaptive"
scroll-button 274
scroll-method "on-button-down"
}
warp-mouse-to-focus
focus-follows-mouse max-scroll-amount="0%"
trackpoint {
// off
// natural-scroll
// accel-speed 0.2
// accel-profile "flat"
// scroll-method "on-button-down"
// scroll-button 273
// scroll-button-lock
// middle-emulation
}
}
output "DP-1" {
// off
mode "1920x1080@165.000"
scale 1.0
transform "normal"
position x=1280 y=0
variable-refresh-rate on-demand=true
}
layout {
gaps 10
background-color "transparent"
center-focused-column "never"
default-column-display "normal"
preset-column-widths {
proportion 0.33333
proportion 0.5
proportion 0.66666
}
preset-window-heights {
proportion 0.5
proportion 1.0
}
default-column-width { proportion 1.0; }
// By default focus ring and border are rendered as a solid background rectangle
// behind windows. That is, they will show up through semitransparent windows.
// This is because windows using client-side decorations can have an arbitrary shape.
//
// If you don't like that, you should uncomment `prefer-no-csd` below.
// Niri will draw focus ring and border *around* windows that agree to omit their
// client-side decorations.
//
// Alternatively, you can override it with a window rule called
// `draw-border-with-background`.
// You can change how the focus ring looks.
focus-ring {
off
width 2
// - CSS named colors: "red"
// - RGB hex: "#rgb", "#rgba", "#rrggbb", "#rrggbbaa"
// - CSS-like notation: "rgb(255, 127, 0)", rgba(), hsl() and a few others.
// active-color "#EEF7FD"
//active-color "#EEF7FD"
// foreground #C1D6D6
//background #07090B
// inactive-color "#5C6871"
// Changing the color space is also supported, check the wiki for more info.
//
// active-gradient from="#80c8ff" to="#c7ff7f" angle=45
// You can also color the gradient relative to the entire view
// of the workspace, rather than relative to just the window itself.
// To do that, set relative-to="workspace-view".
//
// inactive-gradient from="#505050" to="#808080" angle=45 relative-to="workspace-view"
}
// You can also add a border. It's similar to the focus ring, but always visible.
border {
//off
width 4
active-color "#25c39f"
inactive-color "#c1d6d6"
}
shadow {
off
color "#0007"
}
// Struts shrink the area occupied by windows, similarly to layer-shell panels.
// You can think of them as a kind of outer gaps. They are set in logical pixels.
// Left and right struts will cause the next window to the side to always be visible.
// Top and bottom struts will simply add outer gaps in addition to the area occupied by
// layer-shell panels and regular gaps.
struts {
left 0
right 0
top 0
bottom 0
}
tab-indicator {
//off
active-color "#f6db8b"
inactive-color "#8fd2f7"
urgent-color "#eef7fd"
width 5
}
insert-hint {
//off
color "#EEF7FD"
}
}
overview {
zoom 0.4
backdrop-color "#07090b"
workspace-shadow {
off
}
}
clipboard {
disable-primary
}
cursor {
xcursor-theme "BreezeX-Black"
xcursor-size 26
hide-when-typing
hide-after-inactive-ms 1000
}
spawn-at-startup "niri-screen-time" "-daemon"
spawn-at-startup "swayosd-server"
spawn-at-startup "walker" "--gapplication-service"
spawn-at-startup "hyprwave"
spawn-at-startup "swaync"
spawn-at-startup "clipse" "-listen"
spawn-at-startup "swaybg" "-i" "imgs/bafkreiax76e2p3xqoikrkbppjl4mipnaamqrgxkcfgwqtrsa3glksq644m"
// To run a shell command (with variables, pipes, etc.), use spawn-sh-at-startup:
// spawn-sh-at-startup "qs -c ~/source/qs/MyAwesomeShell"
hotkey-overlay {
// Uncomment this line to disable the "Important Hotkeys" pop-up at startup.
skip-at-startup
}
// Uncomment this line to ask the clients to omit their client-side decorations if possible.
// If the client will specifically ask for CSD, the request will be honored.
// Additionally, clients will be informed that they are tiled, removing some client-side rounded corners.
// This option will also fix border/focus ring drawing behind some semitransparent windows.
// After enabling or disabling this, you need to restart the apps for this to take effect.
prefer-no-csd
// You can change the path where screenshots are saved.
// A ~ at the front will be expanded to the home directory.
// The path is formatted with strftime(3) to give you the screenshot date and time.
screenshot-path "~/imgs/screenshots/screenshot-from-%Y-%m-%d %H-%M-%S.png"
//spawn-at-startup "throne"
//spawn-at-startup "kitty" "sudo" "sing-box" "run" "-c" "/home/unconfer/.sing-box/sing-box-03.json"
// You can also set this to null to disable saving screenshots to disk.
// screenshot-path null
// Animation settings.
// The wiki explains how to configure individual animations:
// https://yalter.github.io/niri/Configuration:-Animations
animations {
// Uncomment to turn off all animations.
// off
// Slow down all animations by this factor. Values below 1 speed them up instead.
slowdown 1.0
workspace-switch {
spring damping-ratio=0.8 stiffness=1000 epsilon=0.00001
}
window-open {
duration-ms 200
curve "ease-out-quad"
}
window-close {
duration-ms 200
curve "ease-out-quad"
}
horizontal-view-movement {
spring damping-ratio=0.8 stiffness=1000 epsilon=0.0001
}
window-movement {
spring damping-ratio=0.8 stiffness=800 epsilon=0.0001
}
window-resize {
spring damping-ratio=0.8 stiffness=800 epsilon=0.0001
}
config-notification-open-close {
spring damping-ratio=0.6 stiffness=1000 epsilon=0.001
}
exit-confirmation-open-close {
spring damping-ratio=0.6 stiffness=500 epsilon=0.01
}
screenshot-ui-open {
duration-ms 200
curve "ease-out-quad"
}
overview-open-close {
spring damping-ratio=0.8 stiffness=800 epsilon=0.0001
}
recent-windows-close {
spring damping-ratio=1.0 stiffness=800 epsilon=0.001
}
}
// Window rules let you adjust behavior for individual windows.
// Find more information on the wiki:
// https://yalter.github.io/niri/Configuration:-Window-Rules
// Work around WezTerm's initial configure bug
// by setting an empty default-column-width.
window-rule {
// This regular expression is intentionally made as specific as possible,
// since this is the default config, and we want no false positives.
// You can get away with just app-id="wezterm" if you want.
match app-id=r#"^org\.wezfurlong\.wezterm$"#
default-column-width {
proportion 0.5
}
}
window-rule {
match app-id="clipse"
// match is-floating=true
open-maximized true
open-floating true
tiled-state true
}
window-rule {
// open-maximized false
geometry-corner-radius 10
tiled-state true
clip-to-geometry true
}
window-rule {
match app-id="one.alynx.showmethekey"
open-floating true
open-focused false
default-floating-position x=990 y=28 relative-to="top-left"
min-width 900
min-height 170
border {
off
}
}
// Open the Firefox picture-in-picture player as floating by default.
window-rule {
// This app-id regular expression will work for both:
// - host Firefox (app-id is "firefox")
// - Flatpak Firefox (app-id is "org.mozilla.firefox")
match app-id=r#"firefox$"# title="^Picture-in-Picture$"
open-floating true
}
// Example: block out two password managers from screen capture.
// (This example rule is commented out with a "/-" in front.)
/-window-rule {
match app-id=r#"^org\.keepassxc\.KeePassXC$"#
match app-id=r#"^org\.gnome\.World\.Secrets$"#
block-out-from "screen-capture"
// Use this instead if you want them visible on third-party screenshot tools.
// block-out-from "screencast"
}
window-rule {
match title="Media viewer"
default-column-width {
proportion 0.5
}
}
window-rule {
match title="sudo"
border {
active-color "#ff0100"
}
}
// Example: enable rounded corners for all windows.
// (This example rule is commented out with a "/-" in front.)
window-rule {
geometry-corner-radius 10
clip-to-geometry true
}
layer-rule {
match namespace="waybar"
match at-startup=true
// Properties that apply continuously.
opacity 1.0
// block-out-from "screen-capture"
shadow {
off
softness 40
spread 5
offset x=0 y=5
draw-behind-window true
// inactive-color "#00000064"
}
geometry-corner-radius 20
place-within-backdrop true
}
// Put swaybg inside the overview backdrop.
layer-rule {
match namespace="^wallpaper$"
place-within-backdrop true
}
environment{
}
xwayland-satellite {
// off
path "xwayland-satellite"
}
binds {
//ВНИМАНИЕ СЕКЦИЯ НЕЙРОСЛОПА
// Keys consist of modifiers separated by + signs, followed by an XKB key name
// in the end. To find an XKB name for a particular key, you may use a program
// like wev.
//
// "Mod" is a special modifier equal to Super when running on a TTY, and to Alt
// when running as a winit window.
//
// Most actions that you can bind here can also be invoked programmatically with
// `niri msg action do-something`.
// Mod-Shift-/, which is usually the same as Mod-?,
// shows a list of important hotkeys.
Mod+Shift+Slash { show-hotkey-overlay; }
Super+F{ maximize-column;}
Mod+M { spawn "hyprwave-toggle" "visibility"; }
// Suggested binds for running programs: terminal, app launcher, screen locker.
Mod+Q { spawn "kitty"; }
//Mod+D { spawn "fuzzel"; }
Mod+D { spawn "walker"; }
Mod+Grave repeat=false { toggle-overview; }
Mod+Shift+Grave repeat=false { spawn "kitty" "--class" "-e" "btop" ; }
Super+W { spawn "kitty" "--class" "clipse" "-e" "clipse"; }
Mod+Escape { spawn "hyprlock"; }
Mod+Shift+Return { spawn "shutdown" "now"; }
Mod+Ctrl+S { screenshot-window write-to-disk=false; }
Mod+T repeat=false { spawn "swaync-client" "--toggle-panel";}
Mod+Ctrl+Return { spawn "reboot"; }
Mod+Shift+P{spawn "shutdown" "-c";}
Alt+I repeat=false {spawn "hyprpicker" "-a";}
// Mod+Alt+C {;}
// Use spawn-sh to run a shell command. Do this if you need pipes, multiple commands, etc.
// Note: the entire command goes as a single argument. It's passed verbatim to `sh -c`.
// For example, this is a standard bind to toggle the screen reader (orca).
// Super+Alt+S allow-when-locked=true hotkey-overlay-title=null { spawn-sh "pkill orca || exec orca"; }
// Example volume keys mappings for PipeWire & WirePlumber.
//
// The allow-when-locked=true property makes them work even when the session is locked.
// Using spawn-sh allows to pass multiple arguments together with the command.
// XF86AudioRaiseVolume allow-when-locked=true { spawn-sh "wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.1+"; }
// XF86AudioLowerVolume allow-when-locked=true { spawn-sh "wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.1-"; }
// XF86AudioMute allow-when-locked=true { spawn-sh "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"; }
//XF86AudioMicMute allow-when-locked=true { spawn-sh "wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"; }
// XF86AudioMicMute allow-when-locked=true { spawn-sh "wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"; }
XF86AudioRaiseVolume { spawn "swayosd-client" "--output-volume" "5" "--max-volume" "200";}
XF86AudioMute allow-when-locked=true { spawn "swayosd-client" "--output-volume" "mute-toggle"; }
XF86AudioLowerVolume { spawn "swayosd-client" "--output-volume" "-5" "--max-volume" "200";}
Mod+Y allow-when-locked=true { spawn-sh "wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"; }
// Example brightness key mappings for brightnessctl.
// You can use regular spawn with multiple arguments too (to avoid going through "sh"),
// but you need to manually put each argument in separate "" quotes.
XF86MonBrightnessUp allow-when-locked=true { spawn "brightnessctl" "--class=backlight" "set" "+10%"; }
XF86MonBrightnessDown allow-when-locked=true { spawn "brightnessctl" "--class=backlight" "set" "10%-"; }
// Open/close the Overview: a zoomed-out view of workspaces and windows.
// You can also move the mouse into the top-left hot corner,
// or do a four-finger swipe up on a touchpad.
Mod+O repeat=false { toggle-overview; }
//Mod+Escape repeat=false { toggle-overview; }
Mod+Shift+C repeat=false { close-window; }
Mod+Left { focus-column-left; }
Mod+Down { focus-window-down; }
Mod+Up { focus-window-up; }
Mod+Right { focus-column-right; }
Mod+H { focus-column-left; }
Mod+J { focus-window-down; }
Mod+K { focus-window-up; }
Mod+L { focus-column-right; }
Mod+Shift+Z { focus-column-left; }
Mod+Shift+X { focus-column-right; }
Mod+Ctrl+Left { move-column-left; }
Mod+Ctrl+Down { move-window-down; }
Mod+Ctrl+Up { move-window-up; }
Mod+Ctrl+Right { move-column-right; }
Mod+Ctrl+H { move-column-left; }
Mod+Ctrl+J { move-window-down; }
Mod+Ctrl+K { move-window-up; }
Mod+Ctrl+L { move-column-right; }
Mod+Ctrl+MouseForward { move-column-right; }
Mod+Ctrl+MouseBack { move-column-left; }
// Alternative commands that move across workspaces when reaching
// the first or last window in a column.
// Mod+J { focus-window-or-workspace-down; }
// Mod+K { focus-window-or-workspace-up; }
// Mod+Ctrl+J { move-window-down-or-to-workspace-down; }
// Mod+Ctrl+K { move-window-up-or-to-workspace-up; }
Mod+Home { focus-column-first; }
Mod+End { focus-column-last; }
Mod+Ctrl+Home { move-column-to-first; }
Mod+Ctrl+End { move-column-to-last; }
Mod+Shift+Left { focus-monitor-left; }
Mod+Shift+Down { focus-monitor-down; }
Mod+Shift+Up { focus-monitor-up; }
Mod+Shift+Right { focus-monitor-right; }
Mod+Shift+H { focus-monitor-left; }
Mod+Shift+J { focus-monitor-down; }
Mod+Shift+K { focus-monitor-up; }
// Mod+Shift+L { focus-monitor-right; }
Mod+Shift+Ctrl+Left { move-column-to-monitor-left; }
Mod+Shift+Ctrl+Down { move-column-to-monitor-down; }
Mod+Shift+Ctrl+Up { move-column-to-monitor-up; }
Mod+Shift+Ctrl+Right { move-column-to-monitor-right; }
Mod+Shift+Ctrl+H { move-column-to-monitor-left; }
Mod+Shift+Ctrl+J { move-column-to-monitor-down; }
Mod+Shift+Ctrl+K { move-column-to-monitor-up; }
Mod+Shift+Ctrl+L { move-column-to-monitor-right; }
// Alternatively, there are commands to move just a single window:
// Mod+Shift+Ctrl+Left { move-window-to-monitor-left; }
// ...
// And you can also move a whole workspace to another monitor:
// Mod+Shift+Ctrl+Left { move-workspace-to-monitor-left; }
// ...
Mod+Page_Down { focus-workspace-down; }
Mod+Page_Up { focus-workspace-up; }
Mod+U { focus-workspace-down; }
Mod+I { focus-workspace-up; }
Mod+2 { focus-workspace-down; }
Mod+1 { focus-workspace-up; }
Mod+Ctrl+2 { move-column-to-workspace-down; }
Mod+Ctrl+1 { move-column-to-workspace-up; }
Mod+Shift+1 {focus-column-left;}
Mod+Shift+2 {focus-column-right;}
Mod+Ctrl+Page_Down { move-column-to-workspace-down; }
Mod+Ctrl+Page_Up { move-column-to-workspace-up; }
Mod+Ctrl+U { move-column-to-workspace-down; }
Mod+Ctrl+I { move-column-to-workspace-up; }
// Alternatively, there are commands to move just a single window:
// Mod+Ctrl+Page_Down { move-window-to-workspace-down; }
// ...
Mod+Shift+Page_Down { move-workspace-down; }
Mod+Shift+Page_Up { move-workspace-up; }
Mod+Shift+U { move-workspace-down; }
Mod+Shift+I { move-workspace-up; }
Mod+Shift+MouseForward { focus-workspace-down; }
Mod+Shift+MouseBack { focus-workspace-up; }
Mod+MouseForward { focus-column-right; }
Mod+MouseBack { focus-column-left; }
// You can bind mouse wheel scroll ticks using the following syntax.
// These binds will change direction based on the natural-scroll setting.
//
// To avoid scrolling through workspaces really fast, you can use
// the cooldown-ms property. The bind will be rate-limited to this value.
// You can set a cooldown on any bind, but it's most useful for the wheel.
Mod+WheelScrollDown cooldown-ms=150 { focus-workspace-down; }
Mod+WheelScrollUp cooldown-ms=150 { focus-workspace-up; }
//Mod+Shift+WheelScrollDown cooldown-ms=150 { focus-column-left; }
//Mod+Shift+WheelScrollUp cooldown-ms=150 { focus-column-right; }
Mod+Ctrl+WheelScrollDown cooldown-ms=150 { move-column-to-workspace-down; }
Mod+Ctrl+WheelScrollUp cooldown-ms=150 { move-column-to-workspace-up; }
Mod+WheelScrollRight { focus-column-right; }
Mod+WheelScrollLeft { focus-column-left; }
Mod+Ctrl+WheelScrollRight { move-column-right; }
Mod+Ctrl+WheelScrollLeft { move-column-left; }
// Usually scrolling up and down with Shift in applications results in
// horizontal scrolling; these binds replicate that.
Mod+Shift+WheelScrollDown { focus-column-right; }
Mod+Shift+WheelScrollUp { focus-column-left; }
Mod+Ctrl+Shift+WheelScrollDown { move-column-right; }
Mod+Ctrl+Shift+WheelScrollUp { move-column-left; }
// Similarly, you can bind touchpad scroll "ticks".
// Touchpad scrolling is continuous, so for these binds it is split into
// discrete intervals.
// These binds are also affected by touchpad's natural-scroll, so these
// example binds are "inverted", since we have natural-scroll enabled for
// touchpads by default.
// Mod+TouchpadScrollDown { spawn-sh "wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.02+"; }
// Mod+TouchpadScrollUp { spawn-sh "wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.02-"; }
// You can refer to workspaces by index. However, keep in mind that
// niri is a dynamic workspace system, so these commands are kind of
// "best effort". Trying to refer to a workspace index bigger than
// the current workspace count will instead refer to the bottommost
// (empty) workspace.
//
// For example, with 2 workspaces + 1 empty, indices 3, 4, 5 and so on
// will all refer to the 3rd workspace.
// Mod+1 { focus-workspace 1; }
//Mod+2 { focus-workspace 2; }
//Mod+3 repeat=false { toggle-overview; }
// Mod+4 { focus-workspace 4; }
//Mod+5 { focus-workspace 5; }
//Mod+6 { focus-workspace 6; }
//Mod+7 { focus-workspace 7; }
//Mod+8 { focus-workspace 8; }
//Mod+9 { focus-workspace 9; }
//Mod+Ctrl+1 { move-column-to-workspace 1; }
//Mod+Ctrl+2 { move-column-to-workspace 2; }
Mod+Ctrl+3 { move-column-to-workspace 3; }
//Mod+Ctrl+4 { move-column-to-workspace 4; }
//Mod+Ctrl+5 { move-column-to-workspace 5; }
//Mod+Ctrl+6 { move-column-to-workspace 6; }
//Mod+Ctrl+7 { move-column-to-workspace 7; }
//Mod+Ctrl+8 { move-column-to-workspace 8; }
//Mod+Ctrl+9 { move-column-to-workspace 9; }
// Alternatively, there are commands to move just a single window:
// Mod+Ctrl+1 { move-window-to-workspace 1; }
// Switches focus between the current and the previous workspace.
Mod+Tab { focus-workspace-previous; }
// The following binds move the focused window in and out of a column.
// If the window is alone, they will consume it into the nearby column to the side.
// If the window is already in a column, they will expel it out.
Mod+BracketLeft { consume-or-expel-window-left; }
Mod+BracketRight { consume-or-expel-window-right; }
// Consume one window from the right to the bottom of the focused column.
Mod+3 { consume-window-into-column; }
// Expel the bottom window from the focused column to the right.
Mod+4 { expel-window-from-column; }
Mod+A repeat=false { switch-preset-column-width; }
Mod+Shift+W { toggle-column-tabbed-display; }
// Cycling through the presets in reverse order is also possible.
// Mod+R { switch-preset-column-width-back; }
Mod+Shift+R repeat=false { switch-preset-window-height; }
Mod+Ctrl+R { reset-window-height; }
Mod+Shift+F repeat=false { fullscreen-window; }
// Expand the focused column to space not taken up by other fully visible columns.
// Makes the column "fill the rest of the space".
Mod+Ctrl+F { expand-column-to-available-width; }
//Mod+M { center-column; }
// Center all fully visible columns on screen.
Mod+C { center-column; }
// Finer width adjustments.
// This command can also:
// * set width in pixels: "1000"
// * adjust width in pixels: "-5" or "+5"
// * set width as a percentage of screen width: "25%"
// * adjust width as a percentage of screen width: "-10%" or "+10%"
// Pixel sizes use logical, or scaled, pixels. I.e. on an output with scale 2.0,
// set-column-width "100" will make the column occupy 200 physical screen pixels.
Mod+Minus { set-column-width "-10%"; }
Mod+Equal { set-column-width "+10%"; }
// Finer height adjustments when in column with other windows.
Mod+Shift+Minus { set-window-height "-10%"; }
Mod+Shift+Equal { set-window-height "+10%"; }
Mod+V { toggle-window-floating; }
// Move the focused window between the floating and the tiling layout.
//Mod+V {spawn "pavucontrol"; }
Mod+Shift+V { switch-focus-between-floating-and-tiling; }
// Toggle tabbed column display mode.
// Windows in this column will appear as vertical tabs,
// rather than stacked on top of each other.
Mod+N { toggle-column-tabbed-display; }
// Actions to switch layouts.
// Note: if you uncomment these, make sure you do NOT have
// a matching layout switch hotkey configured in xkb options above.
// Having both at once on the same hotkey will break the switching,
// since it will switch twice upon pressing the hotkey (once by xkb, once by niri).
// Mod+Space { switch-layout "next"; }
// Mod+Shift+Space { switch-layout "prev"; }
Mod+S { screenshot; }
Super+Shift+S { screenshot-screen; }
// Applications such as remote-desktop clients and software KVM switches may
// request that niri stops processing the keyboard shortcuts defined here
// so they may, for example, forward the key presses as-is to a remote machine.
// It's a good idea to bind an escape hatch to toggle the inhibitor,
// so a buggy application can't hold your session hostage.
//
// The allow-inhibiting=false property can be applied to other binds as well,
// which ensures niri always processes them, even when an inhibitor is active.
//Mod+Escape allow-inhibiting=false { toggle-keyboard-shortcuts-inhibit; }
// The quit action will show a confirmation dialog to avoid accidental exits.
Mod+Shift+Escape { quit; }
Ctrl+Alt+Delete { quit; }
// Powers off the monitors. To turn them back on, do any input like
// moving the mouse or pressing any other key.
//Mod+Shift+P { power-off-monitors; }
}

8
config/nvim/.gitignore vendored Normal file
View file

@ -0,0 +1,8 @@
tt.*
.tests
doc/tags
debug
.repro
foo.*
*.log
data

15
config/nvim/.neoconf.json Normal file
View file

@ -0,0 +1,15 @@
{
"neodev": {
"library": {
"enabled": true,
"plugins": true
}
},
"neoconf": {
"plugins": {
"lua_ls": {
"enabled": true
}
}
}
}

201
config/nvim/LICENSE Normal file
View file

@ -0,0 +1,201 @@
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

4
config/nvim/README.md Normal file
View file

@ -0,0 +1,4 @@
# 💤 LazyVim
A starter template for [LazyVim](https://github.com/LazyVim/LazyVim).
Refer to the [documentation](https://lazyvim.github.io/installation) to get started.

2
config/nvim/init.lua Normal file
View file

@ -0,0 +1,2 @@
-- bootstrap lazy.nvim, LazyVim and your plugins
require("config.lazy")

View file

@ -0,0 +1,41 @@
{
"LazyVim": { "branch": "main", "commit": "28db03f958d58dfff3c647ce28fdc1cb88ac158d" },
"LuaSnip": { "branch": "master", "commit": "5a1e39223db9a0498024a77b8441169d260c8c25" },
"blink.cmp": { "branch": "main", "commit": "327fff91fe6af358e990be7be1ec8b78037d2138" },
"bufferline.nvim": { "branch": "main", "commit": "655133c3b4c3e5e05ec549b9f8cc2894ac6f51b3" },
"catppuccin": { "branch": "main", "commit": "234fc048de931a0e42ebcad675bf6559d75e23df" },
"conform.nvim": { "branch": "master", "commit": "cde4da5c1083d3527776fee69536107d98dae6c9" },
"flash.nvim": { "branch": "main", "commit": "fcea7ff883235d9024dc41e638f164a450c14ca2" },
"friendly-snippets": { "branch": "main", "commit": "572f5660cf05f8cd8834e096d7b4c921ba18e175" },
"gitsigns.nvim": { "branch": "main", "commit": "20ad4419564d6e22b189f6738116b38871082332" },
"grug-far.nvim": { "branch": "main", "commit": "3e72397465f774b01aa38e4fe8e6eecf23d766d9" },
"lazy.nvim": { "branch": "main", "commit": "85c7ff3711b730b4030d03144f6db6375044ae82" },
"lazydev.nvim": { "branch": "main", "commit": "5231c62aa83c2f8dc8e7ba957aa77098cda1257d" },
"lualine.nvim": { "branch": "master", "commit": "3946f0122255bc377d14a59b27b609fb3ab25768" },
"markview.nvim": { "branch": "main", "commit": "d72e1bd8634f7abad68a77ad3c6f97342c09ae0a" },
"marp-nvim": { "branch": "main", "commit": "4f38e6ffe2f5ea260f35f7ff3e4e424b9f8bea29" },
"mason-lspconfig.nvim": { "branch": "main", "commit": "d7b5feb6e769e995f7fcf44d92f49f811c51d10c" },
"mason.nvim": { "branch": "main", "commit": "ad7146aa61dcaeb54fa900144d768f040090bff0" },
"mini.ai": { "branch": "main", "commit": "0d3c9cf22e37b86b7a0dfbe7ef129ee7a5f4f93c" },
"mini.icons": { "branch": "main", "commit": "ff2e4f1d29f659cc2bad0f9256f2f6195c6b2428" },
"mini.nvim": { "branch": "main", "commit": "68d4478920c7afdfa21c13706464e275d9ce3255" },
"mini.pairs": { "branch": "main", "commit": "b316e68f2d242d5bd010deaab645daa27ed86297" },
"noice.nvim": { "branch": "main", "commit": "7bfd942445fb63089b59f97ca487d605e715f155" },
"nui.nvim": { "branch": "main", "commit": "de740991c12411b663994b2860f1a4fd0937c130" },
"nvim-lint": { "branch": "master", "commit": "8b349e822a36e9480aed96c6dd2f757f80524a35" },
"nvim-lspconfig": { "branch": "master", "commit": "2010fc6ec03e2da552b4886fceb2f7bc0fc2e9c0" },
"nvim-snippy": { "branch": "master", "commit": "504ab14eeb14301d9b2a858a2a6cf99ccc8d60d0" },
"nvim-treesitter": { "branch": "main", "commit": "d97d226cfd4c00af000b3b8529261352677fc6a8" },
"nvim-treesitter-textobjects": { "branch": "main", "commit": "7024f8687b060dd9a425bde1fa8621c896a38138" },
"nvim-ts-autotag": { "branch": "main", "commit": "c4ca798ab95b316a768d51eaaaee48f64a4a46bc" },
"persistence.nvim": { "branch": "main", "commit": "b20b2a7887bd39c1a356980b45e03250f3dce49c" },
"plenary.nvim": { "branch": "master", "commit": "b9fd5226c2f76c951fc8ed5923d85e4de065e509" },
"render-markdown.nvim": { "branch": "main", "commit": "060c911c62f995a9db4467dde6fafd699cf94d55" },
"snacks.nvim": { "branch": "main", "commit": "eee204d690f8d8e755229ff20f63d23d48565d7c" },
"todo-comments.nvim": { "branch": "main", "commit": "411503d3bedeff88484de572f2509c248e499b38" },
"tokyonight.nvim": { "branch": "main", "commit": "5da1b76e64daf4c5d410f06bcb6b9cb640da7dfd" },
"trouble.nvim": { "branch": "main", "commit": "bd67efe408d4816e25e8491cc5ad4088e708a69a" },
"ts-comments.nvim": { "branch": "main", "commit": "123a9fb12e7229342f807ec9e6de478b1102b041" },
"which-key.nvim": { "branch": "main", "commit": "3aab2147e74890957785941f0c1ad87d0a44c15a" },
"xkbswitch.nvim": { "branch": "master", "commit": "aae56d49db9baf0d9b9675a77da35173d8d87a30" }
}

10
config/nvim/lazyvim.json Normal file
View file

@ -0,0 +1,10 @@
{
"extras": [
],
"install_version": 8,
"news": {
"NEWS.md": "11866"
},
"version": 8
}

View file

@ -0,0 +1,8 @@
-- Autocmds are automatically loaded on the VeryLazy event
-- Default autocmds that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/autocmds.lua
--
-- Add any additional autocmds here
-- with `vim.api.nvim_create_autocmd`
--
-- Or remove existing autocmds by their group name (which is prefixed with `lazyvim_` for the defaults)
-- e.g. vim.api.nvim_del_augroup_by_name("lazyvim_wrap_spell")

View file

@ -0,0 +1,3 @@
-- Keymaps are automatically loaded on the VeryLazy event
-- Default keymaps that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/keymaps.lua
-- Add any additional keymaps here

View file

@ -0,0 +1,53 @@
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
if not (vim.uv or vim.loop).fs_stat(lazypath) then
local lazyrepo = "https://github.com/folke/lazy.nvim.git"
local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath })
if vim.v.shell_error ~= 0 then
vim.api.nvim_echo({
{ "Failed to clone lazy.nvim:\n", "ErrorMsg" },
{ out, "WarningMsg" },
{ "\nPress any key to exit..." },
}, true, {})
vim.fn.getchar()
os.exit(1)
end
end
vim.opt.rtp:prepend(lazypath)
require("lazy").setup({
spec = {
-- add LazyVim and import its plugins
{ "LazyVim/LazyVim", import = "lazyvim.plugins" },
-- import/override with your plugins
{ import = "plugins" },
},
defaults = {
-- By default, only LazyVim plugins will be lazy-loaded. Your custom plugins will load during startup.
-- If you know what you're doing, you can set this to `true` to have all your custom plugins lazy-loaded by default.
lazy = false,
-- It's recommended to leave version=false for now, since a lot the plugin that support versioning,
-- have outdated releases, which may break your Neovim install.
version = false, -- always use the latest git commit
-- version = "*", -- try installing the latest stable version for plugins that support semver
},
install = { colorscheme = { "tokyonight", "habamax" } },
checker = {
enabled = true, -- check for plugin updates periodically
notify = false, -- notify on update
}, -- automatically check for plugin updates
performance = {
rtp = {
-- disable some rtp plugins
disabled_plugins = {
"gzip",
-- "matchit",
-- "matchparen",
-- "netrwPlugin",
"tarPlugin",
"tohtml",
"tutor",
"zipPlugin",
},
},
},
})

View file

@ -0,0 +1,3 @@
-- Options are automatically loaded before lazy.nvim startup
-- Default options that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/options.lua
-- Add any additional options here

View file

@ -0,0 +1,197 @@
-- since this is just an example spec, don't actually load anything here and return an empty spec
-- stylua: ignore
if true then return {} end
-- every spec file under the "plugins" directory will be loaded automatically by lazy.nvim
--
-- In your plugin files, you can:
-- * add extra plugins
-- * disable/enabled LazyVim plugins
-- * override the configuration of LazyVim plugins
return {
-- add gruvbox
{ "ellisonleao/gruvbox.nvim" },
-- Configure LazyVim to load gruvbox
{
"LazyVim/LazyVim",
opts = {
colorscheme = "gruvbox",
},
},
-- change trouble config
{
"folke/trouble.nvim",
-- opts will be merged with the parent spec
opts = { use_diagnostic_signs = true },
},
-- disable trouble
{ "folke/trouble.nvim", enabled = false },
-- override nvim-cmp and add cmp-emoji
{
"hrsh7th/nvim-cmp",
dependencies = { "hrsh7th/cmp-emoji" },
---@param opts cmp.ConfigSchema
opts = function(_, opts)
table.insert(opts.sources, { name = "emoji" })
end,
},
-- change some telescope options and a keymap to browse plugin files
{
"nvim-telescope/telescope.nvim",
keys = {
-- add a keymap to browse plugin files
-- stylua: ignore
{
"<leader>fp",
function() require("telescope.builtin").find_files({ cwd = require("lazy.core.config").options.root }) end,
desc = "Find Plugin File",
},
},
-- change some options
opts = {
defaults = {
layout_strategy = "horizontal",
layout_config = { prompt_position = "top" },
sorting_strategy = "ascending",
winblend = 0,
},
},
},
-- add pyright to lspconfig
{
"neovim/nvim-lspconfig",
---@class PluginLspOpts
opts = {
---@type lspconfig.options
servers = {
-- pyright will be automatically installed with mason and loaded with lspconfig
pyright = {},
},
},
},
-- add tsserver and setup with typescript.nvim instead of lspconfig
{
"neovim/nvim-lspconfig",
dependencies = {
"jose-elias-alvarez/typescript.nvim",
init = function()
require("lazyvim.util").lsp.on_attach(function(_, buffer)
-- stylua: ignore
vim.keymap.set( "n", "<leader>co", "TypescriptOrganizeImports", { buffer = buffer, desc = "Organize Imports" })
vim.keymap.set("n", "<leader>cR", "TypescriptRenameFile", { desc = "Rename File", buffer = buffer })
end)
end,
},
---@class PluginLspOpts
opts = {
---@type lspconfig.options
servers = {
-- tsserver will be automatically installed with mason and loaded with lspconfig
tsserver = {},
},
-- you can do any additional lsp server setup here
-- return true if you don't want this server to be setup with lspconfig
---@type table<string, fun(server:string, opts:_.lspconfig.options):boolean?>
setup = {
-- example to setup with typescript.nvim
tsserver = function(_, opts)
require("typescript").setup({ server = opts })
return true
end,
-- Specify * to use this function as a fallback for any server
-- ["*"] = function(server, opts) end,
},
},
},
-- for typescript, LazyVim also includes extra specs to properly setup lspconfig,
-- treesitter, mason and typescript.nvim. So instead of the above, you can use:
{ import = "lazyvim.plugins.extras.lang.typescript" },
-- add more treesitter parsers
{
"nvim-treesitter/nvim-treesitter",
opts = {
ensure_installed = {
"bash",
"html",
"javascript",
"json",
"lua",
"markdown",
"markdown_inline",
"python",
"query",
"regex",
"tsx",
"typescript",
"vim",
"yaml",
},
},
},
-- since `vim.tbl_deep_extend`, can only merge tables and not lists, the code above
-- would overwrite `ensure_installed` with the new value.
-- If you'd rather extend the default config, use the code below instead:
{
"nvim-treesitter/nvim-treesitter",
opts = function(_, opts)
-- add tsx and treesitter
vim.list_extend(opts.ensure_installed, {
"tsx",
"typescript",
})
end,
},
-- the opts function can also be used to change the default opts:
{
"nvim-lualine/lualine.nvim",
event = "VeryLazy",
opts = function(_, opts)
table.insert(opts.sections.lualine_x, {
function()
return "😄"
end,
})
end,
},
-- or you can return new options to override all the defaults
{
"nvim-lualine/lualine.nvim",
event = "VeryLazy",
opts = function()
return {
--[[add your custom lualine config here]]
}
end,
},
-- use mini.starter instead of alpha
{ import = "lazyvim.plugins.extras.ui.mini-starter" },
-- add jsonls and schemastore packages, and setup treesitter for json, json5 and jsonc
{ import = "lazyvim.plugins.extras.lang.json" },
-- add any tools you want to have installed below
{
"williamboman/mason.nvim",
opts = {
ensure_installed = {
"stylua",
"shellcheck",
"shfmt",
"flake8",
},
},
},
}

View file

@ -0,0 +1,7 @@
return {
"L3MON4D3/LuaSnip",
-- follow latest release.
version = "v2.*", -- Replace <CurrentMajor> by the latest released major (first number of latest release)
-- install jsregexp (optional!).
build = "make install_jsregexp",
}

View file

@ -0,0 +1,4 @@
return {
"OXY2DEV/markview.nvim",
lazy = false,
}

View file

@ -0,0 +1,10 @@
return {
"mpas/marp-nvim",
config = function()
require("marp").setup({
port = 44666,
wait_for_response_timeout = 30,
wait_for_response_delay = 1,
})
end,
}

View file

@ -0,0 +1,3 @@
return {
"dcampos/nvim-snippy",
}

View file

@ -0,0 +1,9 @@
return {
"MeanderingProgrammer/render-markdown.nvim",
dependencies = { "nvim-treesitter/nvim-treesitter", "nvim-mini/mini.nvim" }, -- if you use the mini.nvim suite
-- dependencies = { 'nvim-treesitter/nvim-treesitter', 'nvim-mini/mini.icons' }, -- if you use standalone mini plugins
-- dependencies = { 'nvim-treesitter/nvim-treesitter', 'nvim-tree/nvim-web-devicons' }, -- if you prefer nvim-web-devicons
---@module 'render-markdown'
---@type render.md.UserConfig
opts = {},
}

View file

@ -0,0 +1,3 @@
return {
{ "ivanesmantovich/xkbswitch.nvim" },
}

3
config/nvim/stylua.toml Normal file
View file

@ -0,0 +1,3 @@
indent_type = "Spaces"
indent_width = 2
column_width = 120

172
config/termusic/tui.toml Normal file
View file

@ -0,0 +1,172 @@
version = "2"
com = "same"
[behavior]
quit_server_on_exit = false
confirm_quit = false
[coverart]
align = "bottom right"
size_scale = 0
hidden = false
[style.library]
foreground_color = "Foreground"
background_color = "Background"
border_color = "Green"
highlight_color = "LightWhite"
highlight_symbol = ">"
[style.playlist]
foreground_color = "Foreground"
background_color = "Background"
border_color = "Green"
highlight_color = "LightWhite"
highlight_symbol = "!"
current_track_symbol = "!"
use_loop_mode_symbol = true
[style.lyric]
foreground_color = "Foreground"
background_color = "Background"
border_color = "Green"
[style.progress]
foreground_color = "LightBlack"
background_color = "Background"
border_color = "Green"
[style.important_popup]
foreground_color = "Yellow"
background_color = "Reset"
border_color = "Yellow"
[style.fallback]
foreground_color = "Foreground"
background_color = "Reset"
border_color = "Blue"
highlight_color = "LightYellow"
[theme]
name = "Native"
author = "Termusic Developers"
[theme.primary]
background = "native"
foreground = "native"
[theme.cursor]
text = "native"
cursor = "native"
[theme.normal]
black = "native"
red = "native"
green = "native"
yellow = "native"
blue = "native"
magenta = "native"
cyan = "native"
white = "native"
[theme.bright]
black = "native"
red = "native"
green = "native"
yellow = "native"
blue = "native"
magenta = "native"
cyan = "native"
white = "native"
[keys]
escape = "escape"
quit = "q"
[keys.view]
view_library = "1"
view_database = "2"
view_podcasts = "3"
open_config = "shift+C"
open_help = "control+h"
[keys.navigation]
up = "k"
down = "j"
left = "h"
right = "l"
goto_top = "g"
goto_bottom = "shift+G"
[keys.global_player]
toggle_pause = "space"
next_track = "n"
previous_track = "shift+N"
volume_up = "+"
volume_down = "-"
seek_forward = "f"
seek_backward = "b"
speed_up = "control+f"
speed_down = "control+b"
toggle_prefetch = "control+g"
save_playlist = "control+s"
[keys.global_lyric]
adjust_offset_forwards = "shift+F"
adjust_offset_backwards = "shift+B"
cycle_frames = "shift+T"
[keys.library]
load_track = "l"
load_dir = "shift+L"
delete = "d"
yank = "y"
paste = "p"
cycle_root = "o"
add_root = "a"
remove_root = "shift+A"
search = "/"
youtube_search = "s"
open_tag_editor = "t"
[keys.playlist]
delete = "d"
delete_all = "shift+D"
shuffle = "r"
cycle_loop_mode = "m"
play_selected = "l"
search = "/"
swap_up = "shift+K"
swap_down = "shift+J"
add_random_songs = "s"
add_random_album = "shift+S"
[keys.database]
add_selected = "l"
add_all = "shift+L"
[keys.podcast]
search = "s"
mark_played = "m"
mark_all_played = "shift+M"
refresh_feed = "r"
refresh_all_feeds = "shift+R"
download_episode = "d"
delete_local_episode = "shift+D"
delete_feed = "x"
delete_all_feeds = "shift+X"
[keys.adjust_cover_art]
move_left = "control+shift+arrowleft"
move_right = "control+shift+arrowright"
move_up = "control+shift+arrowup"
move_down = "control+shift+arrowdown"
increase_size = "control+shift+pageup"
decrease_size = "control+shift+pagedown"
toggle_hide = "control+shift+end"
[keys.config]
save = "control+s"
[ytdlp]
extra_args = ""

234
config/waybar/config.jsonc Normal file
View file

@ -0,0 +1,234 @@
// -*- mode: jsonc -*-
{
// "layer": "top", // Waybar at top layer
"position": "top", // Waybar position (top|bottom|left|right)
"height": 34, // Waybar height (to be removed for auto height)
// "width": 1280, // Waybar width
"spacing": 4, // Gaps between modules (4px)
"reload_style_on_change": true,
// Choose the order of the modules
// "modules-left": [
// "sway/mode",
// "sway/scratchpad",
// "hyprland/window",
// "custom/media"
// ],
// "modules-center": [
// "hyprland/workspaces"
//],
"modules-right": [
//"idle_inhibitor",
"tray",
// "mpd",
"pulseaudio",
// "network",
//"power-profiles-daemon",
//"cpu",
//"memory",
// "temperature",
// "backlight",
//"keyboard-state",
//"sway/language",
//"battery",
//"battery#bat2",
"clock",
"custom/calendar",
"custom/fuzzel"
// "custom/power"
],
// Modules configuration
// "sway/workspaces": {
// "disable-scroll": true,
// "all-outputs": true,
// "warp-on-scroll": false,
// "format": "{name}: {icon}",
// "format-icons": {
// "1": "",
// "2": "",
// "3": "",
// "4": "",
// "5": "",
// "urgent": "",
// "focused": "",
// "default": ""
// }
// },
"hyprland/workspaces": {
"format": "{icon}",
"on-scroll-up": "hyprctl dispatch workspace e+1",
"on-scroll-down": "hyprctl dispatch workspace e-1"
},
"keyboard-state": {
"numlock": true,
"capslock": true,
"format": "{name} {icon}",
"format-icons": {
"locked": "",
"unlocked": ""
}
},
"sway/mode": {
"format": "<span style=\"italic\">{}</span>"
},
"sway/scratchpad": {
"format": "{icon} {count}",
"show-empty": false,
"format-icons": ["", ""],
"tooltip": true,
"tooltip-format": "{app}: {title}"
},
"mpd": {
"format": "{stateIcon} {consumeIcon}{randomIcon}{repeatIcon}{singleIcon}{artist} - {album} - {title} ({elapsedTime:%M:%S}/{totalTime:%M:%S}) ⸨{songPosition}|{queueLength}⸩ {volume}% ",
"format-disconnected": "Disconnected ",
"format-stopped": "{consumeIcon}{randomIcon}{repeatIcon}{singleIcon}Stopped ",
"unknown-tag": "N/A",
"interval": 5,
"consume-icons": {
"on": " "
},
"random-icons": {
"off": "<span color=\"#f53c3c\"></span> ",
"on": " "
},
"repeat-icons": {
"on": " "
},
"single-icons": {
"on": "1 "
},
"state-icons": {
"paused": "",
"playing": ""
},
"tooltip-format": "MPD (connected)",
"tooltip-format-disconnected": "MPD (disconnected)"
},
"idle_inhibitor": {
"format": "{icon}",
"format-icons": {
"activated": "",
"deactivated": ""
}
},
"tray": {
// "icon-size": 21,
"spacing": 10,
// "icons": {
// "blueman": "bluetooth",
// "TelegramDesktop": "$HOME/.local/share/icons/hicolor/16x16/apps/telegram.png"
// }
},
"clock": {
// "timezone": "America/New_York",
// "tooltip-format": "<big>{:%Y %B}</big>\n<tt><small>{calendar}</small></tt>",
// "format-alt": "{:%Y-%m-%d}",
"format":"{:%H:%M | %d.%m.%y, %A}",
"tooltip": "false",
"on-click": "kitty --class calcurse -e calcurse"
// "on-click": "tclock -c '#C1D6D6'
},
"custom/calendar": {
"format": "{:%d.%m.%y}",
"tooltip": "false"
},
"cpu": {
"format": "{usage}% ",
"tooltip": false
},
"memory": {
"format": "{}% "
},
"temperature": {
// "thermal-zone": 2,
// "hwmon-path": "/sys/class/hwmon/hwmon2/temp1_input",
"critical-threshold": 80,
// "format-critical": "{temperatureC}°C {icon}",
"format": "{temperatureC}°C {icon}",
"format-icons": ["", "", ""]
},
"backlight": {
// "device": "acpi_video1",
"format": "{percent}% {icon}",
"format-icons": ["", "", "", "", "", "", "", "", ""]
},
"battery": {
"states": {
// "good": 95,
"warning": 30,
"critical": 15
},
"format": "{capacity}% {icon}",
"format-full": "{capacity}% {icon}",
"format-charging": "{capacity}% ",
"format-plugged": "{capacity}% ",
"format-alt": "{time} {icon}",
// "format-good": "", // An empty format will hide the module
// "format-full": "",
"format-icons": ["", "", "", "", ""]
},
"battery#bat2": {
"bat": "BAT2"
},
"power-profiles-daemon": {
"format": "{icon}",
"tooltip-format": "Power profile: {profile}\nDriver: {driver}",
"tooltip": true,
"format-icons": {
"default": "",
"performance": "",
"balanced": "",
"power-saver": ""
}
},
"network": {
// "interface": "wlp2*", // (Optional) To force the use of this interface
"format-wifi": "{essid} ({signalStrength}%) ",
"format-ethernet": "{ipaddr}/{cidr} ",
"tooltip-format": "{ifname} via {gwaddr} ",
"format-linked": "{ifname} (No IP) ",
"format-disconnected": "Disconnected ⚠",
"format-alt": "{ifname}: {ipaddr}/{cidr}"
},
"pulseaudio": {
// "scroll-step": 1, // %, can be a float
"format": "{volume}% {icon} {format_source}",
"format-bluetooth": "{volume}% {icon} {format_source}",
"format-bluetooth-muted": " {icon} {format_source}",
"format-muted": " {format_source}",
"format-source": "{volume}% ",
"format-source-muted": "",
"format-icons": {
"headphone": "",
"hands-free": "",
"headset": "",
"phone": "",
"portable": "",
"car": "",
"default": ["", "", ""]
},
"on-click": "pavucontrol"
},
"custom/media": {
"format": "{icon} {text}",
"return-type": "json",
"max-length": 40,
"format-icons": {
"spotify": "",
"default": "🎜"
},
"escape": true,
"exec": "$HOME/.config/waybar/mediaplayer.py 2> /dev/null" // Script in resources folder
// "exec": "$HOME/.config/waybar/mediaplayer.py --player spotify 2> /dev/null" // Filter player based on name
},
"custom/power": {
"format" : "⏻ ",
"on-click": "wleave"
},
"custom/fuzzel": {
"format": "󰣇 ",
"on-click": "fuzzel"
}
}

View file

@ -0,0 +1,76 @@
// -*- mode: jsonc -*-
{
// "layer": "top", // Waybar at top layer
// "position": "bottom", // Waybar position (top|bottom|left|right)
"height": 25, // Waybar height (to be removed for auto height)
// "width": 1280, // Waybar width
"spacing": 8, // Gaps between modules (4px)
// Choose the order of the modules
"modules-left": [
"hyprland/window",
"custom/media"
],
"modules-center": [
"hyprland/workspaces"
],
"modules-right": [
// "mpd",
//"idle_inhibitor",
"pulseaudio",
"clock",
"custom/cal",
"tray",
"custom/power"
],
"hyprland/workspaces": {
"format": "{icon}",
"on-scroll-up": "hyprctl dispatch workspace e+1",
"on-scroll-down": "hyprctl dispatch workspace e-1"
},
"tray": {
// "icon-size": 21,
"spacing": 10
// "icons": {
// "blueman": "bluetooth",
// "TelegramDesktop": "$HOME/.local/share/icons/hicolor/16x16/apps/telegram.png"
// }
},
"clock": {
// "timezone": "America/New_York",
// "tooltip-format": "<big>{:%Y %B}</big>\n<tt><small>{calendar}</small></tt>",
// "format-alt": "{:%Y-%m-%d}",
"format":"{:%H:%M}",
"tooltip": "false"
// "on-click": "tclock -c '#C1D6D6'
},
"custom/cal": {
"format": "{:"%d.%m.%y"}",
"tooltip": "false"
},
"pulseaudio": {
// "scroll-step": 1, // %, can be a float
"format": "{volume}% {icon} {format_source}",
"format-bluetooth": "{volume}% {icon} {format_source}",
"format-bluetooth-muted": " {icon} {format_source}",
"format-muted": " {format_source}",
"format-source": "{volume}% ",
"format-source-muted": "",
"format-icons": {
"headphone": "",
"hands-free": "",
"headset": "",
"phone": "",
"portable": "",
"car": "",
"default": ["", "", ""]
},
"on-click": "pavucontrol"
},
"custom/power": {
"format" : "⏻ ",
"on-click": "wleave"
}
}

93
config/waybar/style.css Normal file
View file

@ -0,0 +1,93 @@
* {
font-family: IosevkaTerm NFP ExtraBold,FiraCode Nerd Font , CodeNewRoman Nerd Font , FontAwesome, Roboto, Arial, sans-serif;
font-size: 15px;
}
window#waybar {
background-color: rgba(26, 27, 38, 0);
/*transition-property: background-color ;*/
transition-duration: 10s;
}
box.modules-right {
padding: 0px 4px 0px 0px;
margin: 4px 4px 2px 0px;
color: #C1D6D6;
border: 2px solid #C1D6D6;
border-radius: 5px;
background-color: #07090B;
}
#clock#calendar,
hyprland#window {
}
#clock,
#custom-logout {
padding: 0px 4px 0px 10px
}
#pulseaudio {
min-width: 120px;
padding: 0px 0px 0px 0px;
}
/* box.modules-left {
margin: 4px 10px 2px 4px;
padding: 0px 5px 0px 4px;
border-radius: 5px;
border: 2px solid #C1D6D6;
color: #C1D6D6;
background-color: #07090B;
}
*/
#tray {
margin: 0px;
padding: 0px 10px 0px 10px;
/*border: 1px solid #c0caf5;*/
}
label.modules-right {
padding: 0px;
margin: 0px;
}
#workspaces button {
background-color: #07090B;
color: #C1D6D6;
border-radius: 5px;
padding: 0px 10px 0px 10px;
min-height: 8px;
margin: 4px 2px 2px 2px;
border: 2px solid rgba(0,0,0, 0);
}
#workspaces button.focused {
border: 2px solid #C1D6D6;
background-color : #07090B;
}
#workspaces button:hover {
border: 2px solid #C1D6D6;
background-color : #07090B;
}
#workspaces button.active
{
border: 2px solid #C1D6D6;
color: #C1D6D6;
}
#workspaces button.urgent {
background-color: #07090B;
border: 2px solid #A1F7C6;
}

327
config/waybar/style01.css Normal file
View file

@ -0,0 +1,327 @@
* {
/* `otf-font-awesome` is required to be installed for icons */
font-family: FontAwesome, Roboto, Helvetica, Arial, sans-serif;
font-size: 13px;
}
window#waybar {
background-color: rgba(43, 48, 59, 0);
border-bottom: 3px solid rgba(100, 114, 125, 0.5);
color: #ffffff;
transition-property: background-color;
transition-duration: .5s;
}
window#waybar.hidden {
opacity: 0.2;
}
/*
window#waybar.empty {
background-color: transparent;
}
window#waybar.solo {
background-color: #FFFFFF;
}
*/
window#waybar.termite {
background-color: #3F3F3F;
}
window#waybar.chromium {
background-color: #000000;
border: none;
}
button {
/* Use box-shadow instead of border so the text isn't offset */
box-shadow: inset 0 -3px transparent;
/* Avoid rounded borders under each button name */
border: none;
border-radius: 0;
}
/* https://github.com/Alexays/Waybar/wiki/FAQ#the-workspace-buttons-have-a-strange-hover-effect */
button:hover {
background: inherit;
box-shadow: inset 0 -3px #ffffff;
}
/* you can set a style on hover for any module like this */
#pulseaudio:hover {
background-color: #a37800;
}
#workspaces button {
padding: 0 5px;
background-color: transparent;
color: #ffffff;
}
#workspaces button:hover {
background: rgba(0, 0, 0, 0.2);
}
#workspaces button.focused {
background-color: #64727D;
box-shadow: inset 0 -3px #ffffff;
}
#workspaces button.urgent {
background-color: #eb4d4b;
}
#mode {
background-color: #64727D;
box-shadow: inset 0 -3px #ffffff;
}
#clock,
#battery,
#cpu,
#memory,
#disk,
#temperature,
#backlight,
#network,
#pulseaudio,
#wireplumber,
#custom-media,
#tray,
#mode,
#idle_inhibitor,
#scratchpad,
#power-profiles-daemon,
#mpd {
padding: 0 10px;
color: #ffffff;
}
#window,
#workspaces {
margin: 0 4px;
}
/* If workspaces is the leftmost module, omit left margin */
.modules-left > widget:first-child > #workspaces {
margin-left: 0;
}
/* If workspaces is the rightmost module, omit right margin */
.modules-right > widget:last-child > #workspaces {
margin-right: 0;
}
#clock {
background-color: #64727D;
}
#battery {
background-color: #ffffff;
color: #000000;
}
#battery.charging, #battery.plugged {
color: #ffffff;
background-color: #26A65B;
}
@keyframes blink {
to {
background-color: #ffffff;
color: #000000;
}
}
/* Using steps() instead of linear as a timing function to limit cpu usage */
#battery.critical:not(.charging) {
background-color: #f53c3c;
color: #ffffff;
animation-name: blink;
animation-duration: 0.5s;
animation-timing-function: steps(12);
animation-iteration-count: infinite;
animation-direction: alternate;
}
#power-profiles-daemon {
padding-right: 15px;
}
#power-profiles-daemon.performance {
background-color: #f53c3c;
color: #ffffff;
}
#power-profiles-daemon.balanced {
background-color: #2980b9;
color: #ffffff;
}
#power-profiles-daemon.power-saver {
background-color: #2ecc71;
color: #000000;
}
label:focus {
background-color: #000000;
}
#cpu {
background-color: #2ecc71;
color: #000000;
}
#memory {
background-color: #9b59b6;
}
#disk {
background-color: #964B00;
}
#backlight {
background-color: #90b1b1;
}
#network {
background-color: #2980b9;
}
#network.disconnected {
background-color: #f53c3c;
}
#pulseaudio {
background-color: #f1c40f;
color: #000000;
}
#pulseaudio.muted {
background-color: #90b1b1;
color: #2a5c45;
}
#wireplumber {
background-color: #fff0f5;
color: #000000;
}
#wireplumber.muted {
background-color: #f53c3c;
}
#custom-media {
background-color: #66cc99;
color: #2a5c45;
min-width: 100px;
}
#custom-media.custom-spotify {
background-color: #66cc99;
}
#custom-media.custom-vlc {
background-color: #ffa000;
}
#temperature {
background-color: #f0932b;
}
#temperature.critical {
background-color: #eb4d4b;
}
#tray {
background-color: #2980b9;
}
#tray > .passive {
-gtk-icon-effect: dim;
}
#tray > .needs-attention {
-gtk-icon-effect: highlight;
background-color: #eb4d4b;
}
#idle_inhibitor {
background-color: #2d3436;
}
#idle_inhibitor.activated {
background-color: #ecf0f1;
color: #2d3436;
}
#mpd {
background-color: #66cc99;
color: #2a5c45;
}
#mpd.disconnected {
background-color: #f53c3c;
}
#mpd.stopped {
background-color: #90b1b1;
}
#mpd.paused {
background-color: #51a37a;
}
#language {
background: #00b093;
color: #740864;
padding: 0 5px;
margin: 0 5px;
min-width: 16px;
}
#keyboard-state {
background: #97e1ad;
color: #000000;
padding: 0 0px;
margin: 0 5px;
min-width: 16px;
}
#keyboard-state > label {
padding: 0 5px;
}
#keyboard-state > label.locked {
background: rgba(0, 0, 0, 0.2);
}
#scratchpad {
background: rgba(0, 0, 0, 0.2);
}
#scratchpad.empty {
background-color: transparent;
}
#privacy {
padding: 0;
}
#privacy-item {
padding: 0 5px;
color: white;
}
#privacy-item.screenshare {
background-color: #cf5700;
}
#privacy-item.audio-in {
background-color: #1ca000;
}
#privacy-item.audio-out {
background-color: #0069d4;
}

7
config/yazi/yazi.toml Normal file
View file

@ -0,0 +1,7 @@
[mgr]
linemode = "size"
mouse_events = ["click", "scroll", "touch", "move", "drag"]
[opener]
edit = [
{ run = "neovide %s", block = true, for = "unix" },
]