Compare commits

..
2 Commits
Author SHA1 Message Date
Henrik Bakken cf3995dbee sway rebind menu key 2026-02-21 15:02:41 +01:00
Henrik Bakken 9740d45462 sway rebind menu key 2026-02-21 01:19:38 +01:00
64 changed files with 2682 additions and 1710 deletions
+1
View File
@@ -1,4 +1,5 @@
[general] [general]
enable-osc8=true
log-file=~/aerc.log log-file=~/aerc.log
[ui] [ui]
+12 -7
View File
@@ -74,7 +74,7 @@ inline_height = 20
## the maximum number of lines the interface should take up ## the maximum number of lines the interface should take up
## when atuin is invoked from a shell up-key binding ## when atuin is invoked from a shell up-key binding
## the accepted values are identical to those of "inline_height" ## the accepted values are identical to those of "inline_height"
inline_height_shell_up_key_binding = 20 inline_height_shell_up_key_binding = 5
## Invert the UI - put the search bar at the top , Default to `false` ## Invert the UI - put the search bar at the top , Default to `false`
# invert = false # invert = false
@@ -108,7 +108,11 @@ ctrl_n_shortcuts = true
## with ^ or end with $, they'll match anywhere in the command. ## with ^ or end with $, they'll match anywhere in the command.
## For details on the supported regular expression syntax, see ## For details on the supported regular expression syntax, see
## https://docs.rs/regex/latest/regex/#syntax ## https://docs.rs/regex/latest/regex/#syntax
history_filter = [ "^exit$", "^ .*", "_secret=" ] history_filter = [
"^exit$",
"^ .*",
"_secret="
]
## prevent commands run with cwd matching any of these regexes from being written ## prevent commands run with cwd matching any of these regexes from being written
## to history. Note that these regular expressions are unanchored, i.e. if they don't ## to history. Note that these regular expressions are unanchored, i.e. if they don't
@@ -203,10 +207,14 @@ keymap_mode = "auto"
# ] # ]
## Set commands that should be totally stripped and ignored from stats ## Set commands that should be totally stripped and ignored from stats
# common_prefix = [ "sudo" ] # common_prefix = ["sudo"]
## Set commands that will be completely ignored from stats ## Set commands that will be completely ignored from stats
# ignored_commands = [ "cd", "ls", "vi" ] # ignored_commands = [
# "cd",
# "ls",
# "vi"
# ]
[keys] [keys]
# Defaults to true. If disabled, using the up/down key won't exit the TUI when scrolled past the first/last entry. # Defaults to true. If disabled, using the up/down key won't exit the TUI when scrolled past the first/last entry.
@@ -271,6 +279,3 @@ records = true
## The "workspace" mode is skipped when not in a workspace or workspaces = false. ## The "workspace" mode is skipped when not in a workspace or workspaces = false.
## Default filter mode can be overridden with the filter_mode setting. ## Default filter mode can be overridden with the filter_mode setting.
# filters = [ "global", "host", "session", "workspace", "directory" ] # filters = [ "global", "host", "session", "workspace", "directory" ]
[ui]
columns = [ "datetime", "duration", "host", "command" ]
+6 -20
View File
@@ -1,11 +1,11 @@
#? Config file for btop v.1.4.7 #? Config file for btop v.1.4.6
#* Name of a btop++/bpytop/bashtop formatted ".theme" file, "Default" and "TTY" for builtin themes. #* 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" #* Themes should be placed in "../share/btop/themes" relative to binary or "$HOME/.config/btop/themes"
color_theme = "Default" color_theme = "Default"
#* If the theme set background should be shown, set to False if you want terminal background transparency. #* If the theme set background should be shown, set to False if you want terminal background transparency.
theme_background = false theme_background = true
#* Sets if 24-bit truecolor should be used, will convert 24-bit colors to 256 color (6x6x6 color cube) if false. #* Sets if 24-bit truecolor should be used, will convert 24-bit colors to 256 color (6x6x6 color cube) if false.
truecolor = true truecolor = true
@@ -14,11 +14,6 @@ truecolor = true
#* Will force 16-color mode and TTY theme, set all graph symbols to "tty" and swap out other non tty friendly symbols. #* 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 force_tty = false
#* Option to disable presets. Either the default preset, custom presets, or all presets.
#* "Off" All presets are enabled.
#* "Default" preset is disabled.#* "Custom" presets are disabled.#* "All" presets are disabled.
disable_presets = "Off"
#* Define presets for the layout of the boxes. Preset 0 is always all boxes shown with default settings. Max 9 presets. #* 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. #* 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. #* Use whitespace " " as separator between different presets.
@@ -27,10 +22,7 @@ presets = "cpu:1:default,proc:0:default cpu:0:default,mem:0:default,net:0:defaul
#* Set to True to enable "h,j,k,l,g,G" keys for directional control in lists. #* 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. #* Conflicting keys for h:"help" and k:"kill" is accessible while holding shift.
vim_keys = true vim_keys = false
#* Disable all mouse events.
disable_mouse = false
#* Rounded corners on boxes, is ignored if TTY mode is ON. #* Rounded corners on boxes, is ignored if TTY mode is ON.
rounded_corners = true rounded_corners = true
@@ -61,14 +53,14 @@ graph_symbol_net = "default"
graph_symbol_proc = "default" 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. #* Manually set which boxes to show. Available values are "cpu mem net proc" and "gpu0" through "gpu5", separate values with whitespace.
shown_boxes = "gpu0 cpu mem net proc" shown_boxes = "cpu mem net proc gpu0"
#* Update time in milliseconds, recommended 2000 ms or above for better sample times for graphs. #* Update time in milliseconds, recommended 2000 ms or above for better sample times for graphs.
update_ms = 2000 update_ms = 2000
#* Processes sorting, "pid" "program" "arguments" "threads" "user" "memory" "cpu lazy" "cpu direct", #* 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. #* "cpu lazy" sorts top process over time (easier to follow), "cpu direct" updates top process directly.
proc_sorting = "memory" proc_sorting = "cpu lazy"
#* Reverse sorting order, True or False. #* Reverse sorting order, True or False.
proc_reversed = false proc_reversed = false
@@ -100,9 +92,6 @@ proc_left = false
#* (Linux) Filter processes tied to the Linux kernel(similar behavior to htop). #* (Linux) Filter processes tied to the Linux kernel(similar behavior to htop).
proc_filter_kernel = false proc_filter_kernel = false
#* Should the process list follow the selected process when detailed view is open.
proc_follow_detailed = true
#* In tree-view, always accumulate child process resources in the parent process. #* In tree-view, always accumulate child process resources in the parent process.
proc_aggregate = false proc_aggregate = false
@@ -219,9 +208,6 @@ io_graph_combined = false
#* Example: "/mnt/media:100 /:20 /boot:1". #* Example: "/mnt/media:100 /:20 /boot:1".
io_graph_speeds = "" io_graph_speeds = ""
#* Swap the positions of the upload and download speed graphs. When true, upload will be on top.
swap_upload_download = false
#* Set fixed values for network graphs in Mebibits. Is only used if net_auto is also set to False. #* Set fixed values for network graphs in Mebibits. Is only used if net_auto is also set to False.
net_download = 100 net_download = 100
@@ -264,7 +250,7 @@ rsmi_measure_pcie_speeds = true
#* Horizontally mirror the GPU graph. #* Horizontally mirror the GPU graph.
gpu_mirror_graph = true gpu_mirror_graph = true
#* Set which GPU vendors to show. Available values are "nvidia amd intel apple" #* Set which GPU vendors to show. Available values are "nvidia amd intel"
shown_gpus = "nvidia amd intel" shown_gpus = "nvidia amd intel"
#* Custom gpu0 model name, empty string to disable. #* Custom gpu0 model name, empty string to disable.
+144
View File
@@ -0,0 +1,144 @@
# Whether to enable mouse or not.
mouse = true
# The program to open when the `keys.message_input.editor` keymap is pressed. Set the value to `"default"` to use `$EDITOR`.
editor = "default"
# "default" (unknown), "online", "dnd", "idle", "invisible", "offline"
status = "default"
# Whether to parse and render markdown in messages or not.
markdown = true
hide_blocked_users = true
show_attachment_links = true
# Use autocomplete_limit = 0 to disable autocompleting mentions
# Note: tab completion will still work, but it won't show any list.
autocomplete_limit = 20
# The number of messages to fetch when a text-based channel is selected from guilds tree. The minimum and maximum value is 0 and 100, respectively.
messages_limit = 50
[timestamps]
enabled = true
# https://pkg.go.dev/time#Layout
format = "01-02 15:04:05 (Z07:00)"
[notifications]
enabled = true
# The duration of the sound. Set the value to `0` to use default duration. This is only supported on Unix and Windows.
duration = 0
[notifications.sound]
enabled = true
only_on_ping = true
# Global shortcuts
# Esc: Reset message selection or close the channel selection popup.
[keys]
focus_guilds_tree = "Ctrl+G"
focus_messages_list = "Ctrl+T"
focus_message_input = "Ctrl+Space"
# Cycle focus between the widgets.
focus_previous = "Ctrl+H"
focus_next = "Ctrl+L"
# Hide/show the guilds tree.
toggle_guilds_tree = "Ctrl+B"
quit = "Ctrl+C"
# Log out and remove the authentication token from keyring.
# Requires re-login upon restart.
logout = "Ctrl+D"
# Only while focusing on the guilds tree
[keys.guilds_tree]
select_previous = "Rune[k]"
select_next = "Rune[j]"
select_first = "Rune[g]"
select_last = "Rune[G]"
# Select the currently highlighted text-based channel or expand a guild or channel.
select_current = "Enter"
yank_id = "Rune[i]"
collapse_parent_node = "Rune[-]"
move_to_parent_node = "Rune[p]"
# Only while focusing on sent messages
[keys.messages_list]
select_previous = "Rune[k]"
select_next = "Rune[j]"
select_first = "Rune[g]"
select_last = "Rune[G]"
# Select the message reference (reply) of the selected channel.
select_reply = "Rune[s]"
# Reply to the selected message.
reply = "Rune[r]"
# Reply (with mention) to the selected message.
reply_mention = "Rune[R]"
cancel = "Esc"
edit = "Rune[e]"
delete = "Rune[D]"
delete_confirm = "Rune[d]"
# Open the selected message's attachments or hyperlinks in the message
# using the default browser application.
open = "Rune[o]"
# Yank (copy) the selected message's content/url/id.
yank_content = "Rune[y]"
yank_url = "Rune[u]"
yank_id = "Rune[i]"
# Only while typing a message
# Alt+Enter: Insert a new line to the current text.
[keys.message_input]
# paste from clipboard (supports both text and images)
paste = "Ctrl+V"
send = "Enter"
# Remove existing text or cancel reply.
cancel = "Esc"
# Complete usernames when mentioning
tab_complete = "Tab"
open_editor = "Ctrl+E"
open_file_picker = "Ctrl+\\"
[keys.mentions_list]
up = "Ctrl+P"
down = "Ctrl+N"
# style = { foreground = "", background = "", attributes = "" or [""] }
[theme.title]
alignment = "left" # `"left"`, `"center"`, or `"right"`.
normal_style = { attributes = "dim" }
active_style = { foreground = "green", attributes = "bold" }
[theme.border]
enabled = true
padding = [0, 0, 1, 1] # [top, bottom, left, right]
normal_style = { attributes = "dim" }
active_style = { foreground = "green", attributes = "bold" }
# `"hidden"`, `"plain"`, `"round"`, `"thick"`, or `"double"`.
normal_set = "round"
active_set = "round"
[theme.guilds_tree]
auto_expand_folders = true
# Give tree-like shape
graphics = true
graphics_color = "default"
[theme.messages_list]
reply_indicator = ">"
forwarded_indicator = "<"
mention_style = { foreground = "blue" }
emoji_style = { foreground = "green" }
url_style = { foreground = "blue" }
attachment_style = { foreground = "yellow" }
[theme.mentions_list]
# Note: width and height are capped to the avaliable space
# Minimum width
# 0 = make the list as wide as possible
min_width = 20
# Maximum height
# 0 = make the list as tall as needed
max_height = 0
+44 -3
View File
@@ -32,9 +32,6 @@ dpi-aware=yes
# selection-target=primary # selection-target=primary
# workers=<number of logical CPUs> # workers=<number of logical CPUs>
[main]
include=/usr/share/foot/themes/gruvbox
[environment] [environment]
SYSTEMD_EDITOR=/usr/bin/nvim SYSTEMD_EDITOR=/usr/bin/nvim
EDITOR=/usr/bin/nvim EDITOR=/usr/bin/nvim
@@ -71,6 +68,50 @@ lines=100000
# hide-when-typing=no # hide-when-typing=no
# alternate-scroll-mode=yes # alternate-scroll-mode=yes
[colors]
alpha=0.9 # Adjust alpha to change transparency level
foreground=cdd6f4
background=1e1e2e
cursor=11111b f5e0dc
regular0=45475a
regular1=f38ba8
regular2=a6e3a1
regular3=f9e2af
regular4=89b4fa
regular5=f5c2e7
regular6=94e2d5
regular7=bac2de
bright0=585b70
bright1=f38ba8
bright2=a6e3a1
bright3=f9e2af
bright4=89b4fa
bright5=f5c2e7
bright6=94e2d5
bright7=a6adc8
## dimmed colors (see foot.ini(5) man page)
# dim0=<not set>
# ...
# dim7=<not-set>
## The remaining 256-color palette
16=fab387
17=f5e0dc
# ...
# 255 = <256-color palette #255>
# Misc colors
selection-foreground=cdd6f4
selection-background=414356
jump-labels=11111b fab387
# scrollback-indicator=<regular0> <bright4> # black-on-bright-blue
search-box-no-match=11111b f38ba8
search-box-match=cdd6f4 313244
urls=89b4fa
[csd] [csd]
# preferred=server # preferred=server
size=0 size=0
+13 -11
View File
@@ -1,6 +1,6 @@
# output=<not set> # output=<not set>
font=JetBrainsMono-Regular:size=14 font=JetBrainsMono-Regular:size=14
dpi-aware=auto dpi-aware=no
# use-bold=no # use-bold=no
prompt="❯ " prompt="❯ "
# placeholder= # placeholder=
@@ -9,7 +9,7 @@ icon-theme=Qogir-dark
# fields=filename,name,generic # fields=filename,name,generic
# password-character=* # password-character=*
# filter-desktop=no # filter-desktop=no
match-mode=fzf # match-mode=fzf
# sort-result=yes # sort-result=yes
# match-counter=no # match-counter=no
# delayed-filter-ms=300 # delayed-filter-ms=300
@@ -43,15 +43,17 @@ exit-on-keyboard-focus-loss=no
# match-workers=<number of logical CPUs> # match-workers=<number of logical CPUs>
[colors] [colors]
background=0a0a0aff background=08052bdd
text=ffffffff text=e3e3eaff
prompt=00e5ffff prompt=ff7f7fff
input=ffffffff # placeholder=ffd966ff
match=00e5ffff input=ff7f7fff
selection-match=00e5ffff match=FFE57Fff
selection=333333ff selection-match=FFE57Fff
selection-text=ffffffff selection=44475add
border=00e5ffff selection-text=FFFFFFff
# counter=93a1a1ff
border=7f3fbf55
[border] [border]
# width=1 # width=1
+6 -7
View File
@@ -1,17 +1,16 @@
[Settings] [Settings]
gtk-theme-name=Arc-Dark gtk-theme-name=Arc-Dark
gtk-icon-theme-name=Qogir-Dark gtk-icon-theme-name=Qogir-dark
gtk-font-name=Noto Sans 10 gtk-font-name=Noto Sans 10
gtk-cursor-theme-name=Qogir-Dark gtk-cursor-theme-name=Qogir-dark
gtk-cursor-theme-size=20 gtk-cursor-theme-size=0
gtk-toolbar-style=GTK_TOOLBAR_BOTH_HORIZ gtk-toolbar-style=GTK_TOOLBAR_BOTH_HORIZ
gtk-toolbar-icon-size=GTK_ICON_SIZE_LARGE_TOOLBAR gtk-toolbar-icon-size=GTK_ICON_SIZE_LARGE_TOOLBAR
gtk-button-images=0 gtk-button-images=0
gtk-menu-images=0 gtk-menu-images=0
gtk-enable-event-sounds=0 gtk-enable-event-sounds=1
gtk-enable-input-feedback-sounds=0 gtk-enable-input-feedback-sounds=1
gtk-xft-antialias=1 gtk-xft-antialias=1
gtk-xft-hinting=1 gtk-xft-hinting=1
gtk-xft-hintstyle=hintslight gtk-xft-hintstyle=hintmedium
gtk-xft-rgba=rgb gtk-xft-rgba=rgb
gtk-application-prefer-dark-theme=1
+3 -3
View File
@@ -1,8 +1,8 @@
[main] [main]
gtk-theme-name=Adwaita-dark gtk-theme=Arc-Dark
time-format=%H:%M time-format=%H:%M
start-hidden=1 start-hidden=1
modules=powerbar-module modules=userinfo-module;powerbar-module
[userinfo] [userinfo]
round-image=true round-image=true
@@ -13,7 +13,7 @@ under-clock=true
show-labels=true show-labels=true
linked-buttons=true linked-buttons=true
reboot-command=systemctl reboot reboot-command=systemctl reboot
poweroff-command=systemctl poweroff poweroff-command=systemctl -i poweroff
suspend-command=systemctl suspend suspend-command=systemctl suspend
userswitch-command= userswitch-command=
logout-command=swaymsg exit logout-command=swaymsg exit
+16 -18
View File
@@ -1,45 +1,43 @@
* { * {
border: none; border: none;
text-shadow: 1px 1px 3px rgba(0, 0, 0, 0.9); text-shadow: 1px 1px 3px rgba(0, 0, 0, 0.8)
border-radius: 0px;
} }
window { window {
background-image: url("EndeavourOS_Astronaut_SpaceWalk.png"); background-image: url("EndeavourOS_Astronaut_SpaceWalk.png");
background-size: cover; background-size: cover;
background-repeat: no-repeat; background-repeat: no-repeat;
background-position: center; background-position: center;
background-color: #0a0a0a; background-color: black;
} }
#clock-label { #clock-label {
font-family: JetBrainsMono; font-family: JetBrainsMono;
font-size: 64px; font-size: 64.0px;
color: #00e5ff;
} }
#unlock-button { #unlock-button {
background-color: rgba(10, 10, 10, 0.8); background: none;
border: 2px solid #333333; background-color: rgba(127, 63, 191, 0.4);
border: 2px solid rgba(127, 63, 191, 0.5);
padding: 4px; padding: 4px;
color: #ffffff;
} }
#unlock-button:hover { #unlock-button:hover {
border-color: #00e5ff; background-color: rgba(127, 63, 191, 0.9);
background-color: #000000;
} }
#input-field { #input-field {
background-color: rgba(0, 0, 0, 0.8); border-radius: 10px;
border: 2px solid #00e5ff; background-color: rgba(127, 127, 255, 0.1);
border: 2px solid rgba(127, 63, 191, 0.5);
padding-top: 5px; padding-top: 5px;
padding-bottom: 5px; padding-bottom: 5px;
color: #ffffff;
} }
#powerbar-box button { #powerbar-box button {
background-color: rgba(10, 10, 10, 0.8); background: none;
border: 2px solid #333333; background-color: rgba(127, 63, 191, 0.4);
padding: 6px; border: 2px solid rgba(127, 63, 191, 0.5);
border-radius: 10px;
padding: 4px;
} }
#powerbar-box button:hover { #powerbar-box button:hover {
border-color: #00e5ff; background-color: rgba(127, 63, 191, 0.9);
color: #00e5ff;
} }
#input-label { #input-label {
font-size: 0px; font-size: 0px;
+53
View File
@@ -0,0 +1,53 @@
theme = "catppuccin_mocha"
[editor]
bufferline = "multiple"
true-color = true
line-number = "relative"
rulers = [100]
insert-final-newline = false
cursorline = true
[editor.cursor-shape]
insert = "bar"
normal = "block"
select = "underline"
[editor.file-picker]
git-ignore = false
[editor.indent-guides]
character = "│"
render = true
[editor.lsp]
auto-signature-help = false
display-messages = true
[editor.soft-wrap]
enable = false
# wrap-at-text-width = true
wrap-indicator = "↩ "
[editor.statusline]
left = ["mode", "spinner", "version-control", "file-name", "read-only-indicator", "file-modification-indicator"]
right = ["diagnostics", "selections", "register", "position", "position-percentage", "file-encoding", "file-line-ending"]
[editor.whitespace.characters]
space = " "
nbsp = "⍽" # Non breaking space
tab = "→"
newline = "⏎"
tabpad = "·"
[editor.whitespace.render]
space = "all"
tab = "all"
newline = "none"
[keys.normal]
X = ["extend_line_up", "extend_to_line_bounds"]
[keys.select]
X = ["extend_line_up", "extend_to_line_bounds"]
+42
View File
@@ -0,0 +1,42 @@
[[language]]
name = "go"
auto-format = true
formatter = { command = "goimports" }
[[language]]
name = "markdown"
#language-servers = [ "marksman", "ltex-ls", "mpls" ]
language-servers = [ "marksman", "ltex-ls" ]
rulers = [120]
[[language]]
name = "html"
formatter = { command = 'prettier', args = ["--parser", "html"] }
[[language]]
name = "json"
formatter = { command = 'prettier', args = ["--parser", "json"] }
[[language]]
name = "css"
formatter = { command = 'prettier', args = ["--parser", "css"] }
[[language]]
name = "javascript"
formatter = { command = 'prettier', args = ["--parser", "typescript"] }
auto-format = true
# markdown previewer https://github.com/mhersson/mpls
[language-server.mpls]
command = "mpls"
# args = ["--no-auto","--port","8989","--browser","explorer.exe"]
args = ["--browser","explorer.exe"]
[[language]]
name = "hledger-rules"
scope = "source.hledger-rules"
file-types = ["toml", { glob = "*.rules"} ]
#[language-server.ltex-ls.config]
#ltex.disabledRules = { "en-US" = ["PROFANITY"], "en-GB" = ["PROFANITY"] }
#ltex.dictionary = { "en-US" = ["builtin"], "en-GB" = ["builtin"] }
+156
View File
@@ -0,0 +1,156 @@
# Syntax highlighting
# -------------------
"attribute" = "yellow"
"type" = "yellow"
"type.enum.variant" = "teal"
"constructor" = "sapphire"
"constant" = "peach"
"constant.character" = "teal"
"constant.character.escape" = "pink"
"string" = "green"
"string.regexp" = "pink"
"string.special" = "blue"
"string.special.symbol" = "red"
"comment" = { fg = "overlay2", modifiers = ["italic"] }
"variable" = "text"
"variable.parameter" = { fg = "maroon", modifiers = ["italic"] }
"variable.builtin" = "red"
"variable.other.member" = "teal"
"label" = "sapphire" # used for lifetimes
"punctuation" = "overlay2"
"punctuation.special" = "sky"
"keyword" = "mauve"
"keyword.control.conditional" = { fg = "mauve", modifiers = ["italic"] }
"operator" = "sky"
"function" = "blue"
"function.macro" = "mauve"
"tag" = "blue"
"namespace" = { fg = "yellow", modifiers = ["italic"] }
"special" = "blue" # fuzzy highlight
"markup.heading.marker" = { fg = "peach", modifiers = ["bold"] }
"markup.heading.1" = "lavender"
"markup.heading.2" = "mauve"
"markup.heading.3" = "green"
"markup.heading.4" = "yellow"
"markup.heading.5" = "pink"
"markup.heading.6" = "teal"
"markup.list" = "mauve"
"markup.bold" = { modifiers = ["bold"] }
"markup.italic" = { modifiers = ["italic"] }
"markup.link.url" = { fg = "blue", modifiers = ["italic", "underlined"] }
"markup.link.text" = "blue"
"markup.raw" = "flamingo"
"diff.plus" = "green"
"diff.minus" = "red"
"diff.delta" = "blue"
# User Interface
# --------------
"ui.background" = { fg = "text", bg = "base" }
"ui.linenr" = { fg = "surface1" }
"ui.linenr.selected" = { fg = "lavender" }
"ui.statusline" = { fg = "subtext1", bg = "mantle" }
"ui.statusline.inactive" = { fg = "surface2", bg = "mantle" }
"ui.statusline.normal" = { fg = "base", bg = "lavender", modifiers = ["bold"] }
"ui.statusline.insert" = { fg = "base", bg = "green", modifiers = ["bold"] }
"ui.statusline.select" = { fg = "base", bg = "flamingo", modifiers = ["bold"] }
"ui.popup" = { fg = "text", bg = "surface0" }
"ui.window" = { fg = "crust" }
"ui.help" = { fg = "overlay2", bg = "surface0" }
"ui.bufferline" = { fg = "subtext0", bg = "mantle" }
"ui.bufferline.active" = { fg = "mauve", bg = "base", underline = { color = "mauve", style = "line" } }
"ui.bufferline.background" = { bg = "crust" }
"ui.text" = "text"
"ui.text.focus" = { fg = "text", bg = "surface0", modifiers = ["bold"] }
"ui.text.inactive" = { fg = "overlay1" }
"ui.virtual" = "overlay0"
"ui.virtual.ruler" = { bg = "surface0" }
"ui.virtual.indent-guide" = "surface0"
"ui.virtual.inlay-hint" = { fg = "surface1", bg = "mantle" }
"ui.virtual.jump-label" = { fg = "rosewater", modifiers = ["bold"] }
"ui.selection" = { bg = "surface1" }
"ui.cursor" = { fg = "base", bg = "secondary_cursor" }
"ui.cursor.primary" = { fg = "base", bg = "rosewater" }
"ui.cursor.match" = { fg = "peach", modifiers = ["bold"] }
"ui.cursor.primary.normal" = { fg = "base", bg = "lavender" }
"ui.cursor.primary.insert" = { fg = "base", bg = "green" }
"ui.cursor.primary.select" = { fg = "base", bg = "flamingo" }
"ui.cursor.normal" = { fg = "base", bg = "secondary_cursor_normal" }
"ui.cursor.insert" = { fg = "base", bg = "secondary_cursor_insert" }
"ui.cursor.select" = { fg = "base", bg = "secondary_cursor" }
"ui.cursorline.primary" = { bg = "cursorline" }
"ui.highlight" = { bg = "surface1", modifiers = ["bold"] }
"ui.menu" = { fg = "overlay2", bg = "surface0" }
"ui.menu.selected" = { fg = "text", bg = "surface1", modifiers = ["bold"] }
"diagnostic.error" = { underline = { color = "red", style = "curl" } }
"diagnostic.warning" = { underline = { color = "yellow", style = "curl" } }
"diagnostic.info" = { underline = { color = "sky", style = "curl" } }
"diagnostic.hint" = { underline = { color = "teal", style = "curl" } }
error = "red"
warning = "yellow"
info = "sky"
hint = "teal"
[palette]
rosewater = "#f2d5cf"
flamingo = "#eebebe"
pink = "#f4b8e4"
mauve = "#ca9ee6"
red = "#e78284"
maroon = "#ea999c"
peach = "#ef9f76"
yellow = "#e5c890"
green = "#a6d189"
teal = "#81c8be"
sky = "#99d1db"
sapphire = "#85c1dc"
blue = "#8caaee"
lavender = "#babbf1"
text = "#c6d0f5"
subtext1 = "#b5bfe2"
subtext0 = "#a5adce"
overlay2 = "#949cbb"
overlay1 = "#838ba7"
overlay0 = "#737994"
surface2 = "#626880"
surface1 = "#51576d"
surface0 = "#414559"
base = "#303446"
mantle = "#292c3c"
crust = "#232634"
cursorline = "#3b3f52"
secondary_cursor = "#b8a5a6"
secondary_cursor_normal = "#9192be"
secondary_cursor_insert = "#83a275"
+156
View File
@@ -0,0 +1,156 @@
# Syntax highlighting
# -------------------
"attribute" = "yellow"
"type" = "yellow"
"type.enum.variant" = "teal"
"constructor" = "sapphire"
"constant" = "peach"
"constant.character" = "teal"
"constant.character.escape" = "pink"
"string" = "green"
"string.regexp" = "pink"
"string.special" = "blue"
"string.special.symbol" = "red"
"comment" = { fg = "overlay2", modifiers = ["italic"] }
"variable" = "text"
"variable.parameter" = { fg = "maroon", modifiers = ["italic"] }
"variable.builtin" = "red"
"variable.other.member" = "teal"
"label" = "sapphire" # used for lifetimes
"punctuation" = "overlay2"
"punctuation.special" = "sky"
"keyword" = "mauve"
"keyword.control.conditional" = { fg = "mauve", modifiers = ["italic"] }
"operator" = "sky"
"function" = "blue"
"function.macro" = "mauve"
"tag" = "blue"
"namespace" = { fg = "yellow", modifiers = ["italic"] }
"special" = "blue" # fuzzy highlight
"markup.heading.marker" = { fg = "peach", modifiers = ["bold"] }
"markup.heading.1" = "lavender"
"markup.heading.2" = "mauve"
"markup.heading.3" = "green"
"markup.heading.4" = "yellow"
"markup.heading.5" = "pink"
"markup.heading.6" = "teal"
"markup.list" = "mauve"
"markup.bold" = { modifiers = ["bold"] }
"markup.italic" = { modifiers = ["italic"] }
"markup.link.url" = { fg = "blue", modifiers = ["italic", "underlined"] }
"markup.link.text" = "blue"
"markup.raw" = "flamingo"
"diff.plus" = "green"
"diff.minus" = "red"
"diff.delta" = "blue"
# User Interface
# --------------
"ui.background" = { fg = "text", bg = "base" }
"ui.linenr" = { fg = "surface1" }
"ui.linenr.selected" = { fg = "lavender" }
"ui.statusline" = { fg = "subtext1", bg = "mantle" }
"ui.statusline.inactive" = { fg = "surface2", bg = "mantle" }
"ui.statusline.normal" = { fg = "base", bg = "lavender", modifiers = ["bold"] }
"ui.statusline.insert" = { fg = "base", bg = "green", modifiers = ["bold"] }
"ui.statusline.select" = { fg = "base", bg = "flamingo", modifiers = ["bold"] }
"ui.popup" = { fg = "text", bg = "surface0" }
"ui.window" = { fg = "crust" }
"ui.help" = { fg = "overlay2", bg = "surface0" }
"ui.bufferline" = { fg = "subtext0", bg = "mantle" }
"ui.bufferline.active" = { fg = "mauve", bg = "base", underline = { color = "mauve", style = "line" } }
"ui.bufferline.background" = { bg = "crust" }
"ui.text" = "text"
"ui.text.focus" = { fg = "text", bg = "surface0", modifiers = ["bold"] }
"ui.text.inactive" = { fg = "overlay1" }
"ui.virtual" = "overlay0"
"ui.virtual.ruler" = { bg = "surface0" }
"ui.virtual.indent-guide" = "surface0"
"ui.virtual.inlay-hint" = { fg = "surface1", bg = "mantle" }
"ui.virtual.jump-label" = { fg = "rosewater", modifiers = ["bold"] }
"ui.selection" = { bg = "surface1" }
"ui.cursor" = { fg = "base", bg = "secondary_cursor" }
"ui.cursor.primary" = { fg = "base", bg = "rosewater" }
"ui.cursor.match" = { fg = "peach", modifiers = ["bold"] }
"ui.cursor.primary.normal" = { fg = "base", bg = "lavender" }
"ui.cursor.primary.insert" = { fg = "base", bg = "green" }
"ui.cursor.primary.select" = { fg = "base", bg = "flamingo" }
"ui.cursor.normal" = { fg = "base", bg = "secondary_cursor_normal" }
"ui.cursor.insert" = { fg = "base", bg = "secondary_cursor_insert" }
"ui.cursor.select" = { fg = "base", bg = "secondary_cursor" }
"ui.cursorline.primary" = { bg = "cursorline" }
"ui.highlight" = { bg = "surface1", modifiers = ["bold"] }
"ui.menu" = { fg = "overlay2", bg = "surface0" }
"ui.menu.selected" = { fg = "text", bg = "surface1", modifiers = ["bold"] }
"diagnostic.error" = { underline = { color = "red", style = "curl" } }
"diagnostic.warning" = { underline = { color = "yellow", style = "curl" } }
"diagnostic.info" = { underline = { color = "sky", style = "curl" } }
"diagnostic.hint" = { underline = { color = "teal", style = "curl" } }
error = "red"
warning = "yellow"
info = "sky"
hint = "teal"
[palette]
rosewater = "#dc8a78"
flamingo = "#dd7878"
pink = "#ea76cb"
mauve = "#8839ef"
red = "#d20f39"
maroon = "#e64553"
peach = "#fe640b"
yellow = "#df8e1d"
green = "#40a02b"
teal = "#179299"
sky = "#04a5e5"
sapphire = "#209fb5"
blue = "#1e66f5"
lavender = "#7287fd"
text = "#4c4f69"
subtext1 = "#5c5f77"
subtext0 = "#6c6f85"
overlay2 = "#7c7f93"
overlay1 = "#8c8fa1"
overlay0 = "#9ca0b0"
surface2 = "#acb0be"
surface1 = "#bcc0cc"
surface0 = "#ccd0da"
base = "#eff1f5"
mantle = "#e6e9ef"
crust = "#dce0e8"
cursorline = "#e8ecf1"
secondary_cursor = "#e1a99d"
secondary_cursor_normal = "#97a7fb"
secondary_cursor_insert = "#74b867"
@@ -0,0 +1,159 @@
# Syntax highlighting
# -------------------
"attribute" = "yellow"
"type" = "yellow"
"type.enum.variant" = "teal"
"constructor" = "sapphire"
"constant" = "peach"
"constant.character" = "teal"
"constant.character.escape" = "pink"
"string" = "green"
"string.regexp" = "pink"
"string.special" = "blue"
"string.special.symbol" = "red"
"comment" = { fg = "overlay2", modifiers = ["italic"] }
"variable" = "text"
"variable.parameter" = { fg = "maroon", modifiers = ["italic"] }
"variable.builtin" = "red"
"variable.other.member" = "teal"
"label" = "sapphire" # used for lifetimes
"punctuation" = "overlay2"
"punctuation.special" = "sky"
"keyword" = "mauve"
"keyword.control.conditional" = { fg = "mauve", modifiers = ["italic"] }
"operator" = "sky"
"function" = "blue"
"function.macro" = "mauve"
"tag" = "blue"
"namespace" = { fg = "yellow", modifiers = ["italic"] }
"special" = "blue" # fuzzy highlight
"markup.heading.marker" = { fg = "peach", modifiers = ["bold"] }
"markup.heading.1" = "lavender"
"markup.heading.2" = "mauve"
"markup.heading.3" = "green"
"markup.heading.4" = "yellow"
"markup.heading.5" = "pink"
"markup.heading.6" = "teal"
"markup.list" = "mauve"
"markup.bold" = { modifiers = ["bold"] }
"markup.italic" = { modifiers = ["italic"] }
"markup.link.url" = { fg = "blue", modifiers = ["italic", "underlined"] }
"markup.link.text" = "blue"
"markup.raw" = "flamingo"
"diff.plus" = "green"
"diff.minus" = "red"
"diff.delta" = "blue"
# User Interface
# --------------
# fix issue with background color getting messed up in tmux...
"ui.background" = { }
# "ui.background" = { fg = "text", bg = "base" }
"ui.linenr" = { fg = "surface1" }
"ui.linenr.selected" = { fg = "lavender" }
"ui.statusline" = { fg = "subtext1", bg = "mantle" }
"ui.statusline.inactive" = { fg = "surface2", bg = "mantle" }
"ui.statusline.normal" = { fg = "base", bg = "lavender", modifiers = ["bold"] }
"ui.statusline.insert" = { fg = "base", bg = "green", modifiers = ["bold"] }
"ui.statusline.select" = { fg = "base", bg = "flamingo", modifiers = ["bold"] }
"ui.popup" = { fg = "text", bg = "surface0" }
"ui.window" = { fg = "crust" }
"ui.help" = { fg = "overlay2", bg = "surface0" }
"ui.bufferline" = { fg = "subtext0", bg = "mantle" }
"ui.bufferline.active" = { fg = "mauve", bg = "base", underline = { color = "mauve", style = "line" } }
"ui.bufferline.background" = { bg = "crust" }
"ui.text" = "text"
"ui.text.focus" = { fg = "text", bg = "surface0", modifiers = ["bold"] }
"ui.text.inactive" = { fg = "overlay1" }
"ui.virtual" = "overlay0"
"ui.virtual.ruler" = { bg = "surface0" }
"ui.virtual.indent-guide" = "surface0"
"ui.virtual.inlay-hint" = { fg = "surface1", bg = "mantle" }
"ui.virtual.jump-label" = { fg = "rosewater", modifiers = ["bold"] }
"ui.selection" = { bg = "surface1" }
"ui.cursor" = { fg = "base", bg = "secondary_cursor" }
"ui.cursor.primary" = { fg = "base", bg = "rosewater" }
"ui.cursor.match" = { fg = "peach", modifiers = ["bold"] }
"ui.cursor.primary.normal" = { fg = "base", bg = "lavender" }
"ui.cursor.primary.insert" = { fg = "base", bg = "green" }
"ui.cursor.primary.select" = { fg = "base", bg = "flamingo" }
"ui.cursor.normal" = { fg = "base", bg = "secondary_cursor_normal" }
"ui.cursor.insert" = { fg = "base", bg = "secondary_cursor_insert" }
"ui.cursor.select" = { fg = "base", bg = "secondary_cursor" }
"ui.cursorline.primary" = { bg = "cursorline" }
"ui.highlight" = { bg = "surface1", modifiers = ["bold"] }
"ui.menu" = { fg = "overlay2", bg = "surface0" }
"ui.menu.selected" = { fg = "text", bg = "surface1", modifiers = ["bold"] }
"diagnostic.error" = { underline = { color = "red", style = "curl" } }
"diagnostic.warning" = { underline = { color = "yellow", style = "curl" } }
"diagnostic.info" = { underline = { color = "sky", style = "curl" } }
"diagnostic.hint" = { underline = { color = "teal", style = "curl" } }
error = "red"
warning = "yellow"
info = "sky"
hint = "teal"
[palette]
rosewater = "#f4dbd6"
flamingo = "#f0c6c6"
pink = "#f5bde6"
mauve = "#c6a0f6"
red = "#ed8796"
maroon = "#ee99a0"
peach = "#f5a97f"
yellow = "#eed49f"
green = "#a6da95"
teal = "#8bd5ca"
sky = "#91d7e3"
sapphire = "#7dc4e4"
blue = "#8aadf4"
lavender = "#b7bdf8"
text = "#cad3f5"
subtext1 = "#b8c0e0"
subtext0 = "#a5adcb"
overlay2 = "#939ab7"
overlay1 = "#8087a2"
overlay0 = "#6e738d"
surface2 = "#5b6078"
surface1 = "#494d64"
surface0 = "#363a4f"
base = "#24273a"
mantle = "#1e2030"
crust = "#181926"
cursorline = "#303347"
secondary_cursor = "#b6a6a7"
secondary_cursor_normal = "#8b91bf"
secondary_cursor_insert = "#80a57a"
+156
View File
@@ -0,0 +1,156 @@
# Syntax highlighting
# -------------------
"attribute" = "yellow"
"type" = "yellow"
"type.enum.variant" = "teal"
"constructor" = "sapphire"
"constant" = "peach"
"constant.character" = "teal"
"constant.character.escape" = "pink"
"string" = "green"
"string.regexp" = "pink"
"string.special" = "blue"
"string.special.symbol" = "red"
"comment" = { fg = "overlay2", modifiers = ["italic"] }
"variable" = "text"
"variable.parameter" = { fg = "maroon", modifiers = ["italic"] }
"variable.builtin" = "red"
"variable.other.member" = "teal"
"label" = "sapphire" # used for lifetimes
"punctuation" = "overlay2"
"punctuation.special" = "sky"
"keyword" = "mauve"
"keyword.control.conditional" = { fg = "mauve", modifiers = ["italic"] }
"operator" = "sky"
"function" = "blue"
"function.macro" = "mauve"
"tag" = "blue"
"namespace" = { fg = "yellow", modifiers = ["italic"] }
"special" = "blue" # fuzzy highlight
"markup.heading.marker" = { fg = "peach", modifiers = ["bold"] }
"markup.heading.1" = "lavender"
"markup.heading.2" = "mauve"
"markup.heading.3" = "green"
"markup.heading.4" = "yellow"
"markup.heading.5" = "pink"
"markup.heading.6" = "teal"
"markup.list" = "mauve"
"markup.bold" = { modifiers = ["bold"] }
"markup.italic" = { modifiers = ["italic"] }
"markup.link.url" = { fg = "blue", modifiers = ["italic", "underlined"] }
"markup.link.text" = "blue"
"markup.raw" = "flamingo"
"diff.plus" = "green"
"diff.minus" = "red"
"diff.delta" = "blue"
# User Interface
# --------------
"ui.background" = { fg = "text", bg = "base" }
"ui.linenr" = { fg = "surface1" }
"ui.linenr.selected" = { fg = "lavender" }
"ui.statusline" = { fg = "subtext1", bg = "mantle" }
"ui.statusline.inactive" = { fg = "surface2", bg = "mantle" }
"ui.statusline.normal" = { fg = "base", bg = "lavender", modifiers = ["bold"] }
"ui.statusline.insert" = { fg = "base", bg = "green", modifiers = ["bold"] }
"ui.statusline.select" = { fg = "base", bg = "flamingo", modifiers = ["bold"] }
"ui.popup" = { fg = "text", bg = "surface0" }
"ui.window" = { fg = "crust" }
"ui.help" = { fg = "overlay2", bg = "surface0" }
"ui.bufferline" = { fg = "subtext0", bg = "mantle" }
"ui.bufferline.active" = { fg = "mauve", bg = "base", underline = { color = "mauve", style = "line" } }
"ui.bufferline.background" = { bg = "crust" }
"ui.text" = "text"
"ui.text.focus" = { fg = "text", bg = "surface0", modifiers = ["bold"] }
"ui.text.inactive" = { fg = "overlay1" }
"ui.virtual" = "overlay0"
"ui.virtual.ruler" = { bg = "surface0" }
"ui.virtual.indent-guide" = "surface0"
"ui.virtual.inlay-hint" = { fg = "surface1", bg = "mantle" }
"ui.virtual.jump-label" = { fg = "rosewater", modifiers = ["bold"] }
"ui.selection" = { bg = "surface1" }
"ui.cursor" = { fg = "base", bg = "secondary_cursor" }
"ui.cursor.primary" = { fg = "base", bg = "rosewater" }
"ui.cursor.match" = { fg = "peach", modifiers = ["bold"] }
"ui.cursor.primary.normal" = { fg = "base", bg = "lavender" }
"ui.cursor.primary.insert" = { fg = "base", bg = "green" }
"ui.cursor.primary.select" = { fg = "base", bg = "flamingo" }
"ui.cursor.normal" = { fg = "base", bg = "secondary_cursor_normal" }
"ui.cursor.insert" = { fg = "base", bg = "secondary_cursor_insert" }
"ui.cursor.select" = { fg = "base", bg = "secondary_cursor" }
"ui.cursorline.primary" = { bg = "cursorline" }
"ui.highlight" = { bg = "surface1", modifiers = ["bold"] }
"ui.menu" = { fg = "overlay2", bg = "surface0" }
"ui.menu.selected" = { fg = "text", bg = "surface1", modifiers = ["bold"] }
"diagnostic.error" = { underline = { color = "red", style = "curl" } }
"diagnostic.warning" = { underline = { color = "yellow", style = "curl" } }
"diagnostic.info" = { underline = { color = "sky", style = "curl" } }
"diagnostic.hint" = { underline = { color = "teal", style = "curl" } }
error = "red"
warning = "yellow"
info = "sky"
hint = "teal"
[palette]
rosewater = "#f5e0dc"
flamingo = "#f2cdcd"
pink = "#f5c2e7"
mauve = "#cba6f7"
red = "#f38ba8"
maroon = "#eba0ac"
peach = "#fab387"
yellow = "#f9e2af"
green = "#a6e3a1"
teal = "#94e2d5"
sky = "#89dceb"
sapphire = "#74c7ec"
blue = "#89b4fa"
lavender = "#b4befe"
text = "#cdd6f4"
subtext1 = "#bac2de"
subtext0 = "#a6adc8"
overlay2 = "#9399b2"
overlay1 = "#7f849c"
overlay0 = "#6c7086"
surface2 = "#585b70"
surface1 = "#45475a"
surface0 = "#313244"
base = "#1e1e2e"
mantle = "#181825"
crust = "#11111b"
cursorline = "#2a2b3c"
secondary_cursor = "#b5a6a8"
secondary_cursor_normal = "#878ec0"
secondary_cursor_insert = "#7ea87f"
@@ -0,0 +1,156 @@
# Syntax highlighting
# -------------------
"attribute" = "yellow"
"type" = "yellow"
"type.enum.variant" = "teal"
"constructor" = "sapphire"
"constant" = "peach"
"constant.character" = "teal"
"constant.character.escape" = "pink"
"string" = "green"
"string.regexp" = "pink"
"string.special" = "blue"
"string.special.symbol" = "red"
"comment" = { fg = "overlay2" }
"variable" = "text"
"variable.parameter" = { fg = "maroon" }
"variable.builtin" = "red"
"variable.other.member" = "teal"
"label" = "sapphire" # used for lifetimes
"punctuation" = "overlay2"
"punctuation.special" = "sky"
"keyword" = "mauve"
"keyword.control.conditional" = { fg = "mauve" }
"operator" = "sky"
"function" = "blue"
"function.macro" = "mauve"
"tag" = "blue"
"namespace" = { fg = "yellow" }
"special" = "blue" # fuzzy highlight
"markup.heading.marker" = { fg = "peach", modifiers = ["bold"] }
"markup.heading.1" = "lavender"
"markup.heading.2" = "mauve"
"markup.heading.3" = "green"
"markup.heading.4" = "yellow"
"markup.heading.5" = "pink"
"markup.heading.6" = "teal"
"markup.list" = "mauve"
"markup.bold" = { modifiers = ["bold"] }
"markup.italic" = { modifiers = ["italic"] }
"markup.link.url" = { fg = "blue", modifiers = ["underlined"] }
"markup.link.text" = "blue"
"markup.raw" = "flamingo"
"diff.plus" = "green"
"diff.minus" = "red"
"diff.delta" = "blue"
# User Interface
# --------------
"ui.background" = { fg = "text", bg = "base" }
"ui.linenr" = { fg = "surface1" }
"ui.linenr.selected" = { fg = "lavender" }
"ui.statusline" = { fg = "subtext1", bg = "mantle" }
"ui.statusline.inactive" = { fg = "surface2", bg = "mantle" }
"ui.statusline.normal" = { fg = "base", bg = "lavender", modifiers = ["bold"] }
"ui.statusline.insert" = { fg = "base", bg = "green", modifiers = ["bold"] }
"ui.statusline.select" = { fg = "base", bg = "flamingo", modifiers = ["bold"] }
"ui.popup" = { fg = "text", bg = "surface0" }
"ui.window" = { fg = "crust" }
"ui.help" = { fg = "overlay2", bg = "surface0" }
"ui.bufferline" = { fg = "subtext0", bg = "mantle" }
"ui.bufferline.active" = { fg = "mauve", bg = "base", underline = { color = "mauve", style = "line" } }
"ui.bufferline.background" = { bg = "crust" }
"ui.text" = "text"
"ui.text.focus" = { fg = "text", bg = "surface0", modifiers = ["bold"] }
"ui.text.inactive" = { fg = "overlay1" }
"ui.virtual" = "overlay0"
"ui.virtual.ruler" = { bg = "surface0" }
"ui.virtual.indent-guide" = "surface0"
"ui.virtual.inlay-hint" = { fg = "surface1", bg = "mantle" }
"ui.virtual.jump-label" = { fg = "rosewater", modifiers = ["bold"] }
"ui.selection" = { bg = "surface1" }
"ui.cursor" = { fg = "base", bg = "secondary_cursor" }
"ui.cursor.primary" = { fg = "base", bg = "rosewater" }
"ui.cursor.match" = { fg = "peach", modifiers = ["bold"] }
"ui.cursor.primary.normal" = { fg = "base", bg = "lavender" }
"ui.cursor.primary.insert" = { fg = "base", bg = "green" }
"ui.cursor.primary.select" = { fg = "base", bg = "flamingo" }
"ui.cursor.normal" = { fg = "base", bg = "secondary_cursor_normal" }
"ui.cursor.insert" = { fg = "base", bg = "secondary_cursor_insert" }
"ui.cursor.select" = { fg = "base", bg = "secondary_cursor" }
"ui.cursorline.primary" = { bg = "cursorline" }
"ui.highlight" = { bg = "surface1", modifiers = ["bold"] }
"ui.menu" = { fg = "overlay2", bg = "surface0" }
"ui.menu.selected" = { fg = "text", bg = "surface1", modifiers = ["bold"] }
"diagnostic.error" = { underline = { color = "red", style = "curl" } }
"diagnostic.warning" = { underline = { color = "yellow", style = "curl" } }
"diagnostic.info" = { underline = { color = "sky", style = "curl" } }
"diagnostic.hint" = { underline = { color = "teal", style = "curl" } }
error = "red"
warning = "yellow"
info = "sky"
hint = "teal"
[palette]
rosewater = "#f2d5cf"
flamingo = "#eebebe"
pink = "#f4b8e4"
mauve = "#ca9ee6"
red = "#e78284"
maroon = "#ea999c"
peach = "#ef9f76"
yellow = "#e5c890"
green = "#a6d189"
teal = "#81c8be"
sky = "#99d1db"
sapphire = "#85c1dc"
blue = "#8caaee"
lavender = "#babbf1"
text = "#c6d0f5"
subtext1 = "#b5bfe2"
subtext0 = "#a5adce"
overlay2 = "#949cbb"
overlay1 = "#838ba7"
overlay0 = "#737994"
surface2 = "#626880"
surface1 = "#51576d"
surface0 = "#414559"
base = "#303446"
mantle = "#292c3c"
crust = "#232634"
cursorline = "#3b3f52"
secondary_cursor = "#b8a5a6"
secondary_cursor_normal = "#9192be"
secondary_cursor_insert = "#83a275"
@@ -0,0 +1,156 @@
# Syntax highlighting
# -------------------
"attribute" = "yellow"
"type" = "yellow"
"type.enum.variant" = "teal"
"constructor" = "sapphire"
"constant" = "peach"
"constant.character" = "teal"
"constant.character.escape" = "pink"
"string" = "green"
"string.regexp" = "pink"
"string.special" = "blue"
"string.special.symbol" = "red"
"comment" = { fg = "overlay2" }
"variable" = "text"
"variable.parameter" = { fg = "maroon" }
"variable.builtin" = "red"
"variable.other.member" = "teal"
"label" = "sapphire" # used for lifetimes
"punctuation" = "overlay2"
"punctuation.special" = "sky"
"keyword" = "mauve"
"keyword.control.conditional" = { fg = "mauve" }
"operator" = "sky"
"function" = "blue"
"function.macro" = "mauve"
"tag" = "blue"
"namespace" = { fg = "yellow" }
"special" = "blue" # fuzzy highlight
"markup.heading.marker" = { fg = "peach", modifiers = ["bold"] }
"markup.heading.1" = "lavender"
"markup.heading.2" = "mauve"
"markup.heading.3" = "green"
"markup.heading.4" = "yellow"
"markup.heading.5" = "pink"
"markup.heading.6" = "teal"
"markup.list" = "mauve"
"markup.bold" = { modifiers = ["bold"] }
"markup.italic" = { modifiers = ["italic"] }
"markup.link.url" = { fg = "blue", modifiers = ["underlined"] }
"markup.link.text" = "blue"
"markup.raw" = "flamingo"
"diff.plus" = "green"
"diff.minus" = "red"
"diff.delta" = "blue"
# User Interface
# --------------
"ui.background" = { fg = "text", bg = "base" }
"ui.linenr" = { fg = "surface1" }
"ui.linenr.selected" = { fg = "lavender" }
"ui.statusline" = { fg = "subtext1", bg = "mantle" }
"ui.statusline.inactive" = { fg = "surface2", bg = "mantle" }
"ui.statusline.normal" = { fg = "base", bg = "lavender", modifiers = ["bold"] }
"ui.statusline.insert" = { fg = "base", bg = "green", modifiers = ["bold"] }
"ui.statusline.select" = { fg = "base", bg = "flamingo", modifiers = ["bold"] }
"ui.popup" = { fg = "text", bg = "surface0" }
"ui.window" = { fg = "crust" }
"ui.help" = { fg = "overlay2", bg = "surface0" }
"ui.bufferline" = { fg = "subtext0", bg = "mantle" }
"ui.bufferline.active" = { fg = "mauve", bg = "base", underline = { color = "mauve", style = "line" } }
"ui.bufferline.background" = { bg = "crust" }
"ui.text" = "text"
"ui.text.focus" = { fg = "text", bg = "surface0", modifiers = ["bold"] }
"ui.text.inactive" = { fg = "overlay1" }
"ui.virtual" = "overlay0"
"ui.virtual.ruler" = { bg = "surface0" }
"ui.virtual.indent-guide" = "surface0"
"ui.virtual.inlay-hint" = { fg = "surface1", bg = "mantle" }
"ui.virtual.jump-label" = { fg = "rosewater", modifiers = ["bold"] }
"ui.selection" = { bg = "surface1" }
"ui.cursor" = { fg = "base", bg = "secondary_cursor" }
"ui.cursor.primary" = { fg = "base", bg = "rosewater" }
"ui.cursor.match" = { fg = "peach", modifiers = ["bold"] }
"ui.cursor.primary.normal" = { fg = "base", bg = "lavender" }
"ui.cursor.primary.insert" = { fg = "base", bg = "green" }
"ui.cursor.primary.select" = { fg = "base", bg = "flamingo" }
"ui.cursor.normal" = { fg = "base", bg = "secondary_cursor_normal" }
"ui.cursor.insert" = { fg = "base", bg = "secondary_cursor_insert" }
"ui.cursor.select" = { fg = "base", bg = "secondary_cursor" }
"ui.cursorline.primary" = { bg = "cursorline" }
"ui.highlight" = { bg = "surface1", modifiers = ["bold"] }
"ui.menu" = { fg = "overlay2", bg = "surface0" }
"ui.menu.selected" = { fg = "text", bg = "surface1", modifiers = ["bold"] }
"diagnostic.error" = { underline = { color = "red", style = "curl" } }
"diagnostic.warning" = { underline = { color = "yellow", style = "curl" } }
"diagnostic.info" = { underline = { color = "sky", style = "curl" } }
"diagnostic.hint" = { underline = { color = "teal", style = "curl" } }
error = "red"
warning = "yellow"
info = "sky"
hint = "teal"
[palette]
rosewater = "#dc8a78"
flamingo = "#dd7878"
pink = "#ea76cb"
mauve = "#8839ef"
red = "#d20f39"
maroon = "#e64553"
peach = "#fe640b"
yellow = "#df8e1d"
green = "#40a02b"
teal = "#179299"
sky = "#04a5e5"
sapphire = "#209fb5"
blue = "#1e66f5"
lavender = "#7287fd"
text = "#4c4f69"
subtext1 = "#5c5f77"
subtext0 = "#6c6f85"
overlay2 = "#7c7f93"
overlay1 = "#8c8fa1"
overlay0 = "#9ca0b0"
surface2 = "#acb0be"
surface1 = "#bcc0cc"
surface0 = "#ccd0da"
base = "#eff1f5"
mantle = "#e6e9ef"
crust = "#dce0e8"
cursorline = "#e8ecf1"
secondary_cursor = "#e1a99d"
secondary_cursor_normal = "#97a7fb"
secondary_cursor_insert = "#74b867"
@@ -0,0 +1,156 @@
# Syntax highlighting
# -------------------
"attribute" = "yellow"
"type" = "yellow"
"type.enum.variant" = "teal"
"constructor" = "sapphire"
"constant" = "peach"
"constant.character" = "teal"
"constant.character.escape" = "pink"
"string" = "green"
"string.regexp" = "pink"
"string.special" = "blue"
"string.special.symbol" = "red"
"comment" = { fg = "overlay2" }
"variable" = "text"
"variable.parameter" = { fg = "maroon" }
"variable.builtin" = "red"
"variable.other.member" = "teal"
"label" = "sapphire" # used for lifetimes
"punctuation" = "overlay2"
"punctuation.special" = "sky"
"keyword" = "mauve"
"keyword.control.conditional" = { fg = "mauve" }
"operator" = "sky"
"function" = "blue"
"function.macro" = "mauve"
"tag" = "blue"
"namespace" = { fg = "yellow" }
"special" = "blue" # fuzzy highlight
"markup.heading.marker" = { fg = "peach", modifiers = ["bold"] }
"markup.heading.1" = "lavender"
"markup.heading.2" = "mauve"
"markup.heading.3" = "green"
"markup.heading.4" = "yellow"
"markup.heading.5" = "pink"
"markup.heading.6" = "teal"
"markup.list" = "mauve"
"markup.bold" = { modifiers = ["bold"] }
"markup.italic" = { modifiers = ["italic"] }
"markup.link.url" = { fg = "blue", modifiers = ["underlined"] }
"markup.link.text" = "blue"
"markup.raw" = "flamingo"
"diff.plus" = "green"
"diff.minus" = "red"
"diff.delta" = "blue"
# User Interface
# --------------
"ui.background" = { fg = "text", bg = "base" }
"ui.linenr" = { fg = "surface1" }
"ui.linenr.selected" = { fg = "lavender" }
"ui.statusline" = { fg = "subtext1", bg = "mantle" }
"ui.statusline.inactive" = { fg = "surface2", bg = "mantle" }
"ui.statusline.normal" = { fg = "base", bg = "lavender", modifiers = ["bold"] }
"ui.statusline.insert" = { fg = "base", bg = "green", modifiers = ["bold"] }
"ui.statusline.select" = { fg = "base", bg = "flamingo", modifiers = ["bold"] }
"ui.popup" = { fg = "text", bg = "surface0" }
"ui.window" = { fg = "crust" }
"ui.help" = { fg = "overlay2", bg = "surface0" }
"ui.bufferline" = { fg = "subtext0", bg = "mantle" }
"ui.bufferline.active" = { fg = "mauve", bg = "base", underline = { color = "mauve", style = "line" } }
"ui.bufferline.background" = { bg = "crust" }
"ui.text" = "text"
"ui.text.focus" = { fg = "text", bg = "surface0", modifiers = ["bold"] }
"ui.text.inactive" = { fg = "overlay1" }
"ui.virtual" = "overlay0"
"ui.virtual.ruler" = { bg = "surface0" }
"ui.virtual.indent-guide" = "surface0"
"ui.virtual.inlay-hint" = { fg = "surface1", bg = "mantle" }
"ui.virtual.jump-label" = { fg = "rosewater", modifiers = ["bold"] }
"ui.selection" = { bg = "surface1" }
"ui.cursor" = { fg = "base", bg = "secondary_cursor" }
"ui.cursor.primary" = { fg = "base", bg = "rosewater" }
"ui.cursor.match" = { fg = "peach", modifiers = ["bold"] }
"ui.cursor.primary.normal" = { fg = "base", bg = "lavender" }
"ui.cursor.primary.insert" = { fg = "base", bg = "green" }
"ui.cursor.primary.select" = { fg = "base", bg = "flamingo" }
"ui.cursor.normal" = { fg = "base", bg = "secondary_cursor_normal" }
"ui.cursor.insert" = { fg = "base", bg = "secondary_cursor_insert" }
"ui.cursor.select" = { fg = "base", bg = "secondary_cursor" }
"ui.cursorline.primary" = { bg = "cursorline" }
"ui.highlight" = { bg = "surface1", modifiers = ["bold"] }
"ui.menu" = { fg = "overlay2", bg = "surface0" }
"ui.menu.selected" = { fg = "text", bg = "surface1", modifiers = ["bold"] }
"diagnostic.error" = { underline = { color = "red", style = "curl" } }
"diagnostic.warning" = { underline = { color = "yellow", style = "curl" } }
"diagnostic.info" = { underline = { color = "sky", style = "curl" } }
"diagnostic.hint" = { underline = { color = "teal", style = "curl" } }
error = "red"
warning = "yellow"
info = "sky"
hint = "teal"
[palette]
rosewater = "#f4dbd6"
flamingo = "#f0c6c6"
pink = "#f5bde6"
mauve = "#c6a0f6"
red = "#ed8796"
maroon = "#ee99a0"
peach = "#f5a97f"
yellow = "#eed49f"
green = "#a6da95"
teal = "#8bd5ca"
sky = "#91d7e3"
sapphire = "#7dc4e4"
blue = "#8aadf4"
lavender = "#b7bdf8"
text = "#cad3f5"
subtext1 = "#b8c0e0"
subtext0 = "#a5adcb"
overlay2 = "#939ab7"
overlay1 = "#8087a2"
overlay0 = "#6e738d"
surface2 = "#5b6078"
surface1 = "#494d64"
surface0 = "#363a4f"
base = "#24273a"
mantle = "#1e2030"
crust = "#181926"
cursorline = "#303347"
secondary_cursor = "#b6a6a7"
secondary_cursor_normal = "#8b91bf"
secondary_cursor_insert = "#80a57a"
@@ -0,0 +1,156 @@
# Syntax highlighting
# -------------------
"attribute" = "yellow"
"type" = "yellow"
"type.enum.variant" = "teal"
"constructor" = "sapphire"
"constant" = "peach"
"constant.character" = "teal"
"constant.character.escape" = "pink"
"string" = "green"
"string.regexp" = "pink"
"string.special" = "blue"
"string.special.symbol" = "red"
"comment" = { fg = "overlay2" }
"variable" = "text"
"variable.parameter" = { fg = "maroon" }
"variable.builtin" = "red"
"variable.other.member" = "teal"
"label" = "sapphire" # used for lifetimes
"punctuation" = "overlay2"
"punctuation.special" = "sky"
"keyword" = "mauve"
"keyword.control.conditional" = { fg = "mauve" }
"operator" = "sky"
"function" = "blue"
"function.macro" = "mauve"
"tag" = "blue"
"namespace" = { fg = "yellow" }
"special" = "blue" # fuzzy highlight
"markup.heading.marker" = { fg = "peach", modifiers = ["bold"] }
"markup.heading.1" = "lavender"
"markup.heading.2" = "mauve"
"markup.heading.3" = "green"
"markup.heading.4" = "yellow"
"markup.heading.5" = "pink"
"markup.heading.6" = "teal"
"markup.list" = "mauve"
"markup.bold" = { modifiers = ["bold"] }
"markup.italic" = { modifiers = ["italic"] }
"markup.link.url" = { fg = "blue", modifiers = ["underlined"] }
"markup.link.text" = "blue"
"markup.raw" = "flamingo"
"diff.plus" = "green"
"diff.minus" = "red"
"diff.delta" = "blue"
# User Interface
# --------------
"ui.background" = { fg = "text", bg = "base" }
"ui.linenr" = { fg = "surface1" }
"ui.linenr.selected" = { fg = "lavender" }
"ui.statusline" = { fg = "subtext1", bg = "mantle" }
"ui.statusline.inactive" = { fg = "surface2", bg = "mantle" }
"ui.statusline.normal" = { fg = "base", bg = "lavender", modifiers = ["bold"] }
"ui.statusline.insert" = { fg = "base", bg = "green", modifiers = ["bold"] }
"ui.statusline.select" = { fg = "base", bg = "flamingo", modifiers = ["bold"] }
"ui.popup" = { fg = "text", bg = "surface0" }
"ui.window" = { fg = "crust" }
"ui.help" = { fg = "overlay2", bg = "surface0" }
"ui.bufferline" = { fg = "subtext0", bg = "mantle" }
"ui.bufferline.active" = { fg = "mauve", bg = "base", underline = { color = "mauve", style = "line" } }
"ui.bufferline.background" = { bg = "crust" }
"ui.text" = "text"
"ui.text.focus" = { fg = "text", bg = "surface0", modifiers = ["bold"] }
"ui.text.inactive" = { fg = "overlay1" }
"ui.virtual" = "overlay0"
"ui.virtual.ruler" = { bg = "surface0" }
"ui.virtual.indent-guide" = "surface0"
"ui.virtual.inlay-hint" = { fg = "surface1", bg = "mantle" }
"ui.virtual.jump-label" = { fg = "rosewater", modifiers = ["bold"] }
"ui.selection" = { bg = "surface1" }
"ui.cursor" = { fg = "base", bg = "secondary_cursor" }
"ui.cursor.primary" = { fg = "base", bg = "rosewater" }
"ui.cursor.match" = { fg = "peach", modifiers = ["bold"] }
"ui.cursor.primary.normal" = { fg = "base", bg = "lavender" }
"ui.cursor.primary.insert" = { fg = "base", bg = "green" }
"ui.cursor.primary.select" = { fg = "base", bg = "flamingo" }
"ui.cursor.normal" = { fg = "base", bg = "secondary_cursor_normal" }
"ui.cursor.insert" = { fg = "base", bg = "secondary_cursor_insert" }
"ui.cursor.select" = { fg = "base", bg = "secondary_cursor" }
"ui.cursorline.primary" = { bg = "cursorline" }
"ui.highlight" = { bg = "surface1", modifiers = ["bold"] }
"ui.menu" = { fg = "overlay2", bg = "surface0" }
"ui.menu.selected" = { fg = "text", bg = "surface1", modifiers = ["bold"] }
"diagnostic.error" = { underline = { color = "red", style = "curl" } }
"diagnostic.warning" = { underline = { color = "yellow", style = "curl" } }
"diagnostic.info" = { underline = { color = "sky", style = "curl" } }
"diagnostic.hint" = { underline = { color = "teal", style = "curl" } }
error = "red"
warning = "yellow"
info = "sky"
hint = "teal"
[palette]
rosewater = "#f5e0dc"
flamingo = "#f2cdcd"
pink = "#f5c2e7"
mauve = "#cba6f7"
red = "#f38ba8"
maroon = "#eba0ac"
peach = "#fab387"
yellow = "#f9e2af"
green = "#a6e3a1"
teal = "#94e2d5"
sky = "#89dceb"
sapphire = "#74c7ec"
blue = "#89b4fa"
lavender = "#b4befe"
text = "#cdd6f4"
subtext1 = "#bac2de"
subtext0 = "#a6adc8"
overlay2 = "#9399b2"
overlay1 = "#7f849c"
overlay0 = "#6c7086"
surface2 = "#585b70"
surface1 = "#45475a"
surface0 = "#313244"
base = "#1e1e2e"
mantle = "#181825"
crust = "#11111b"
cursorline = "#2a2b3c"
secondary_cursor = "#b5a6a8"
secondary_cursor_normal = "#878ec0"
secondary_cursor_insert = "#7ea87f"
+27
View File
@@ -0,0 +1,27 @@
font=UbuntuMono 12.5
background-color=#404552
text-color=#e5e9f0
width=315
height=200
padding=10
margin=10
progress-color=over #eceff480
icon-path=/usr/share/icons/Arc-X-D
max-icon-size=70
layer=overlay
anchor=bottom-center
border-size=2
border-radius=15
border-color=#5294e2
default-timeout=0
ignore-timeout=1
[urgency=normal]
border-color=#d08770
[urgency=high]
border-color=#bf616a
default-timeout=0
+1 -2
View File
@@ -28,7 +28,7 @@ application/x-bittorrent=org.qbittorrent.qBittorrent.desktop;
inode/directory=yazi.desktop; inode/directory=yazi.desktop;
x-scheme-handler/msteams=teams.desktop; x-scheme-handler/msteams=teams.desktop;
text/calendar=userapp-khalimport.desktop; text/calendar=userapp-khalimport.desktop;
x-scheme-handler/discord=discord.desktop x-scheme-handler/discord=vesktop.desktop;
application/vnd.openxmlformats-officedocument.wordprocessingml.document=org.kde.okular.desktop; application/vnd.openxmlformats-officedocument.wordprocessingml.document=org.kde.okular.desktop;
text/markdown=org.kde.okular.desktop; text/markdown=org.kde.okular.desktop;
application/zip=userapp-file-roller.desktop; application/zip=userapp-file-roller.desktop;
@@ -38,7 +38,6 @@ x-scheme-handler/vnc=org.remmina.Remmina.desktop;
x-scheme-handler/remmina=org.remmina.Remmina.desktop; x-scheme-handler/remmina=org.remmina.Remmina.desktop;
application/x-remmina=org.remmina.Remmina.desktop; application/x-remmina=org.remmina.Remmina.desktop;
application/vnd.openxmlformats-officedocument.wordprocessingml.document=libreoffice-writer.desktop; application/vnd.openxmlformats-officedocument.wordprocessingml.document=libreoffice-writer.desktop;
image/heif=qimgv.desktop
[Added Associations] [Added Associations]
+98
View File
@@ -0,0 +1,98 @@
# ttrss
ttrss-flag-publish "b"
ttrss-flag-star "a"
ttrss-login "admin"
ttrss-mode "multi"
ttrss-passwordeval "pass show ttrss"
ttrss-url "https://rss.hjarl.com/"
urls-source "ttrss"
# data
cache-file "~/.cache/newsboat/cache.db"
cookie-cache "~/.cache/newsboat/cookies.txt"
# feeds
auto-reload yes
delete-read-articles-on-quit yes
feed-sort-order unreadarticlecount-asc
prepopulate-query-feeds yes
reload-threads 11
reload-time 30
scrolloff 15
# display
article-sort-order date
datetime-format "%D %R"
download-full-page yes
external-url-viewer "urlscan"
html-renderer "w3m -dump -T text/html"
show-read-articles no
show-read-feeds no
text-width 72
# navigation
browser "$BROWSER %u >/dev/null 2>&1 &"
#browser "w3m %u"
goto-next-feed yes
goto-first-unread no
mark-as-read-on-hover yes
# bindings
# original bindings here https://raw.githubusercontent.com/newsboat/newsboat/master/src/keymap.cpp
# unbind
unbind-key f
unbind-key F
unbind-key C
unbind-key n
unbind-key p
unbind-key ^k
unbind-key ,
# bind
bind SPACE everywhere macro-prefix
bind l everywhere open
bind h everywhere quit
bind j everywhere down
bind k everywhere up
bind J everywhere next-feed
bind K everywhere prev-feed
bind J article next
bind K article prev
bind n everywhere next
bind p everywhere prev
bind g everywhere home
bind G everywhere end
bind ^F everywhere halfpagedown
bind ^B everywhere halfpageup
bind ^D everywhere pagedown
bind ^U everywhere pageup
bind d everywhere delete-article
bind D everywhere delete-all-articles
bind $ everywhere purge-deleted
bind a everywhere mark-all-above-as-read
bind A everywhere mark-feed-read
bind ^A everywhere mark-all-feeds-read
bind i everywhere sort
bind I everywhere rev-sort
bind T everywhere set-tag
bind t everywhere toggle-article-read
bind b everywhere toggle-source-view
bind U everywhere toggle-show-read-feeds
# macros
macro w set browser "w3m %u"; open-in-browser ; set browser "$BROWSER %u >/dev/null 2>&1 &"
macro l set browser "links %u"; open-in-browser ; set browser "$BROWSER %u >/dev/null 2>&1 &"
macro m set browser "mpv %u"; open-in-browser ; set browser "$BROWSER %u >/dev/null 2>&1 &"
# format
feedlist-title-format "(%u unread, %t total) Your feeds%?T? - tag ‘%T’&?"
articlelist-title-format "(%u unread, %t total) Articles in feed %T - %U"
searchresult-title-format "(%u unread, %t total) Search result"
itemview-title-format "(%u unread, %t total) Article %T"
filebrowser-title-format "%?O?Open File&Save File? - %f"
help-title-format "Help"
selecttag-title-format "Select Tag"
selectfilter-title-format "Select Filter"
urlview-title-format "URLs"
dialogs-title-format "Dialogs"
include "~/.config/newsboat/themes/catppuccin.dark"
+19
View File
@@ -0,0 +1,19 @@
# https://raw.githubusercontent.com/catppuccin/newsboat/refs/heads/main/themes/dark
color listnormal color15 default
color listnormal_unread color2 default
color listfocus_unread color2 color0
color listfocus default color0
color background default default
color article default default
color end-of-text-marker color8 default
color info color4 color8
color hint-separator default color8
color hint-description default color8
color title color14 color8
highlight article "^(Feed|Title|Author|Link|Date): .+" color4 default bold
highlight article "^(Feed|Title|Author|Link|Date):" color14 default bold
highlight article "\\((link|image|video)\\)" color8 default
highlight article "https?://[^ ]+" color4 default
highlight article "\[[0-9]+\]" color6 default bold
+19
View File
@@ -0,0 +1,19 @@
# https://raw.githubusercontent.com/catppuccin/newsboat/refs/heads/main/themes/latte
color listnormal color15 default
color listnormal_unread color2 default
color listfocus_unread color2 color15
color listfocus default color15
color background default default
color article default default
color end-of-text-marker color8 default
color info color4 color7
color hint-separator default color7
color hint-description default color7
color title color14 color7
highlight article "^(Feed|Title|Author|Link|Date): .+" color4 default bold
highlight article "^(Feed|Title|Author|Link|Date):" color14 default bold
highlight article "\\((link|image|video)\\)" color8 default
highlight article "https?://[^ ]+" color4 default
highlight article "\[[0-9]+\]" color6 default bold
+182
View File
@@ -0,0 +1,182 @@
$env.SYSTEMD_EDITOR = "/usr/bin/nvim"
$env.EDITOR = "/usr/bin/nvim"
$env.VISUAL = "/usr/bin/nvim"
$env.path ++= ["~/.local/bin"]
$env.config = {
buffer_editor: "/usr/bin/nvim"
completions: {
external: {
enable: true
max_results: 100
completer: {|spans|
let carapace_completer = {|spans: list<string>|
carapace $spans.0 nushell ...$spans
| from json
| if ($in | default [] | where value =~ '^-.*ERR$' | is-empty) { $in } else { null }
}
match $spans.0 {
_ => $carapace_completer
} | do $in $spans
}
}
}
cursor_shape: {
vi_insert: line
vi_normal: block
}
edit_mode: 'vi'
history: {
file_format: sqlite
isolation: true
}
hooks: {
env_change: {
PWD: [
{
__zoxide_hook: true,
code: {|_, dir| zoxide add -- $dir}
}
]
}
}
keybindings: [
{
name: fuzzy_history_fzf
modifier: control
keycode: char_r
mode: [emacs, vi_normal, vi_insert]
event: {
send: ExecuteHostCommand
cmd: "commandline edit --insert (
history
# | where exit_status == 0
| get command
| reverse
| uniq
| str join (char -i 0)
| fzf
--preview '{}'
--preview-window 'bottom:3:wrap'
--scheme history
--read0
--layout reverse
--bind alt-up:preview-up,alt-down:preview-down
--height 70%
--query (commandline)
| decode utf-8
| str trim
)"
}
}
{
name: fuzzy_history_fzf
modifier: none
keycode: char_/
mode: [ vi_normal ]
event: { send: menu name: fuzzy_history_fzf }
}
{
name: clear_everything
modifier: control
keycode: char_b
mode: [ emacs, vi_insert, vi_normal ]
event: [
{ send: clearscreen }
{ send: clearscrollback }
]
}
{
name: move_right_or_take_history_hint
modifier: control
keycode: char_f
mode: [ emacs, vi_insert, vi_normal ]
event: {
until: [
{ send: historyhintcomplete }
{ send: menuright }
{ send: right }
]
}
}
{
name: delete_one_word_backward
modifier: alt
keycode: backspace
mode: vi_insert
event: {edit: backspaceword}
}
]
show_banner: false
}
# from: https://github.com/nushell/nushell/issues/8166
def monitor [
--duration (-d): duration = 1sec
...args
] {
let args = $args | into string
let cmd = $args | str join ' '
loop {
let last_run = (date now)
let till = $last_run + $duration
let out = nu --config $nu.config-path --env-config $nu.env-path --commands $cmd | complete
if $out.exit_code == 0 {
clear
print $"Running every ($duration) on '(hostname)': `($cmd)`"
print $out.stdout
print $"Last run: ($last_run)"
sleep ($till - (date now))
} else {
print $out.stdout $out.stderr
break
}
}
}
# Jump to a directory using only keywords.
def --env --wrapped z [...rest: string@zoxide_completer] {
let path = match $rest {
[] => {'~'},
[ '-' ] => {'-'},
[ $arg ] if ($arg | path type) == 'dir' => {$arg}
_ => {
zoxide query --exclude $env.PWD -- ...$rest | str trim -r -c "\n"
}
}
cd $path
}
# Jump to a directory using interactive search.
def --env --wrapped zi [...rest:string] {
cd $'(zoxide query --interactive -- ...$rest | str trim -r -c "\n")'
}
def zoxide_completer [context: string] {
let parts = $context | split row " " | skip 1
{
options: {
sort: false
completion_algorithm: prefix
positional: false
case_sensitive: false
}
completions: (zoxide query --list --exclude $env.PWD -- ...$parts | lines)
}
}
# yazi helper
def --env y [...args] {
let tmp = (mktemp -t "yazi-cwd.XXXXXX")
yazi ...$args --cwd-file $tmp
let cwd = (open $tmp)
if $cwd != "" and $cwd != $env.PWD {
cd $cwd
}
rm -fp $tmp
}
source ~/.oh-my-posh.nu
-2
View File
@@ -1,2 +0,0 @@
vim.opt_local.number = true
vim.opt_local.relativenumber = true
-11
View File
@@ -1,11 +0,0 @@
-- Indentation & Layout
vim.opt_local.colorcolumn = "100"
vim.opt_local.textwidth = 100
vim.opt_local.tabstop = 4
vim.opt_local.shiftwidth = 4
vim.opt_local.softtabstop = 4
vim.opt_local.expandtab = true
-- Formatting Behavior
vim.opt_local.formatoptions:remove("t") -- Don't autowrap while typing
vim.opt_local.formatoptions:append("j") -- Remove comment markers when joining lines
-11
View File
@@ -1,11 +0,0 @@
-- Indentation & Layout
vim.opt_local.colorcolumn = "120"
vim.opt_local.textwidth = 120
vim.opt_local.tabstop = 4
vim.opt_local.shiftwidth = 4
vim.opt_local.softtabstop = 4
vim.opt_local.expandtab = true
-- Formatting Behavior
vim.opt_local.formatoptions:remove("t") -- Don't autowrap while typing
vim.opt_local.formatoptions:append("j") -- Remove comment markers when joining lines
-21
View File
@@ -1,21 +0,0 @@
local bufname = vim.api.nvim_buf_get_name(0)
local filename_arg = bufname ~= "" and (" --stdin-filepath " .. vim.fn.shellescape(bufname)) or ""
-- Indentation & Layout
vim.opt_local.colorcolumn = ""
vim.opt_local.wrap = true
vim.opt_local.textwidth = 80
vim.opt_local.tabstop = 2
vim.opt_local.shiftwidth = 2
vim.opt_local.softtabstop = 2
vim.opt_local.expandtab = true
-- Formatting Behavior: wrap text, keep comment/quote headers, parse lists
vim.opt_local.formatoptions:append("tqn")
-- gq Formatter: Prettier handles links/parentheses cleanly; par as fallback
if vim.fn.executable("prettier") == 1 then
vim.bo.formatprg = "prettier --parser markdown" .. filename_arg
elseif vim.fn.executable("par") == 1 then
vim.bo.formatprg = "par -w80req"
end
-11
View File
@@ -1,11 +0,0 @@
-- Indentation & Layout
vim.opt_local.colorcolumn = "100"
vim.opt_local.textwidth = 100
vim.opt_local.tabstop = 4
vim.opt_local.shiftwidth = 4
vim.opt_local.softtabstop = 4
vim.opt_local.expandtab = true
-- Formatting Behavior
vim.opt_local.formatoptions:remove("t") -- Don't autowrap while typing
vim.opt_local.formatoptions:append("j") -- Remove comment markers when joining lines
+2
View File
@@ -0,0 +1,2 @@
vim.o.number = true
vim.o.relativenumber = true
+4
View File
@@ -0,0 +1,4 @@
vim.o.colorcolumn = "100"
vim.opt.tabstop = 4
vim.opt.shiftwidth = 4
vim.opt.softtabstop = 4
+4
View File
@@ -0,0 +1,4 @@
vim.o.colorcolumn = "120"
vim.opt.tabstop = 4
vim.opt.shiftwidth = 4
vim.opt.softtabstop = 4
+5
View File
@@ -0,0 +1,5 @@
vim.o.colorcolumn = ""
vim.o.wrap = true
vim.opt.tabstop = 2
vim.opt.shiftwidth = 2
vim.opt.softtabstop = 2
+4
View File
@@ -0,0 +1,4 @@
vim.o.colorcolumn = "100"
vim.opt.tabstop = 4
vim.opt.shiftwidth = 4
vim.opt.softtabstop = 4
+301 -493
View File
File diff suppressed because it is too large Load Diff
+17 -22
View File
@@ -1,43 +1,38 @@
window { window {
background-color: rgba(10, 10, 10, 0.95); background-color: rgba (38, 18, 57, 0.9);
color: #ffffff; color: #eceff4;
border-radius: 0px; border-radius: 30px
border-right: 2px solid #00e5ff;
} }
/* search entry */ /* search entry */
entry { entry {
box-shadow: none; box-shadow: 0 0 6px 5px #2e3440;
border: 1px solid #00e5ff; background-color: rgba (0, 0, 0, 0.5)
background-color: #000000;
color: #00e5ff;
padding: 5px;
} }
button, button, image {
image { background-color: #3b4252;
background-color: transparent;
background: none; background: none;
border: 1px solid transparent; border: none;
margin: 5px; margin: 10px
} }
button:hover { button:hover {
background-color: #111111; background-color: rgba (127, 63, 191, .4);
border: 1px solid #00e5ff; box-shadow: 0 0 6px 5px #190C26
box-shadow: none;
} }
/* in case you wanted to give category buttons a different look */
#category-button { #category-button {
margin: 0; margin: 0 0px 0 0px
} }
#pinned-box { #pinned-box {
padding-bottom: 5px; padding-bottom: 1px;
border-bottom: 2px solid #333333; border-bottom: 1px solid gray
} }
#files-box { #files-box {
padding: 5px; padding: 1px;
border: 1px solid #333333; border: 1px solid gray
} }
+35 -66
View File
@@ -1,27 +1,23 @@
from typing import TYPE_CHECKING from typing import TYPE_CHECKING
import os
if TYPE_CHECKING: if TYPE_CHECKING:
from qutebrowser.config.config import ConfigContainer from typing import Any
from qutebrowser.config.configfiles import ConfigAPI
c: "ConfigContainer" = c # type: ignore # noqa: F821 config: Any = None
config: "ConfigAPI" = config # type: ignore # noqa: F821 c: Any = None
config.load_autoconfig(True) config.load_autoconfig(True)
config.bind("<", "tab-move -") config.bind("<", "tab-move -")
config.bind("<Ctrl+Shift+Tab>", "tab-prev") config.bind("<Ctrl+Shift+Tab>", "tab-prev")
config.bind("<Ctrl+Tab>", "tab-next") config.bind("<Ctrl+Tab>", "tab-next")
config.bind("<Ctrl+l>", "cmd-set-text :open {url:pretty}") config.bind("<Ctrl+l>", "cmd-set-text :open {url:pretty}")
config.unbind("r", mode="normal") config.bind("<Ctrl+r>", "reload")
config.bind("<Ctrl+r>", "reload -f")
config.bind("R", "reload", mode="normal")
config.bind("<Ctrl+n>", "tab-clone -w") config.bind("<Ctrl+n>", "tab-clone -w")
config.bind("<Ctrl+t>", "tab-clone -t") config.bind("<Ctrl+t>", "tab-clone -t")
config.bind("<Ctrl+Shift+r>", "restart", mode="normal") config.bind("<Ctrl+Shift+r>", "restart", mode="normal")
config.bind("<Ctrl+h>", "history") config.bind("<Ctrl+h>", "history")
config.bind("<F8>", "config-cycle colors.webpage.darkmode.enabled true false")
config.bind("<F2>", "edit-url") config.bind("<F2>", "edit-url")
config.bind("<F10>", "config-cycle colors.webpage.darkmode.enabled true false")
config.bind("<F11>", "config-cycle tabs.position top left") config.bind("<F11>", "config-cycle tabs.position top left")
config.bind("<F12>", "devtools") config.bind("<F12>", "devtools")
config.bind("<Shift+F12>", "view-source") config.bind("<Shift+F12>", "view-source")
@@ -47,10 +43,11 @@ config.bind("tj", "back -t", mode="normal")
config.bind("wj", "back -w", mode="normal") config.bind("wj", "back -w", mode="normal")
config.bind("tk", "forward -t", mode="normal") config.bind("tk", "forward -t", mode="normal")
config.bind("wk", "forward -w", mode="normal") config.bind("wk", "forward -w", mode="normal")
config.bind("ø", "cmd-set-text :")
config.bind("m", 'cmd-set-text :quickmark-add {url:pretty} "', mode="normal") config.bind("m", 'cmd-set-text :quickmark-add {url:pretty} "', mode="normal")
config.bind("D", "tab-close") config.bind("D", "tab-close")
config.bind(",m", "hint links spawn -d mpv {hint-url}", mode="normal") config.bind(",m", "hint links spawn mpv {hint-url}", mode="normal")
config.bind(",M", "spawn -d mpv {url}", mode="normal") config.bind(",M", "spawn mpv {url}", mode="normal")
config.unbind("co") # close all tabs except this one config.unbind("co") # close all tabs except this one
config.unbind("<Ctrl+x>") # navigate decrement config.unbind("<Ctrl+x>") # navigate decrement
config.unbind("<Ctrl+a>") # navigate increment config.unbind("<Ctrl+a>") # navigate increment
@@ -72,7 +69,7 @@ c.completion.open_categories = [
c.content.register_protocol_handler = False c.content.register_protocol_handler = False
c.content.blocking.enabled = True c.content.blocking.enabled = True
c.content.fullscreen.window = True c.content.fullscreen.window = True
c.content.blocking.method = "auto" c.content.blocking.method = "both"
c.content.blocking.adblock.lists = [ c.content.blocking.adblock.lists = [
"https://raw.githubusercontent.com/uBlockOrigin/uAssets/master/filters/filters.txt", "https://raw.githubusercontent.com/uBlockOrigin/uAssets/master/filters/filters.txt",
"https://raw.githubusercontent.com/uBlockOrigin/uAssets/master/filters/badware.txt", "https://raw.githubusercontent.com/uBlockOrigin/uAssets/master/filters/badware.txt",
@@ -83,12 +80,6 @@ c.content.blocking.adblock.lists = [
"https://easylist.to/easylist/easyprivacy.txt", "https://easylist.to/easylist/easyprivacy.txt",
"https://pgl.yoyo.org/adservers/serverlist.php?hostformat=hosts&showintro=1&mimetype=plaintext", "https://pgl.yoyo.org/adservers/serverlist.php?hostformat=hosts&showintro=1&mimetype=plaintext",
] ]
c.content.javascript.log_message.excludes = {
"userscript:_qute_js": ["*TrustedHTML*"],
"userscript:_qute_stylesheet": [
"*Refused to apply inline style because it violates the following Content Security Policy directive: *"
],
}
c.completion.web_history.max_items = 10000 c.completion.web_history.max_items = 10000
c.completion.height = "100%" c.completion.height = "100%"
c.confirm_quit = ["multiple-tabs", "downloads"] c.confirm_quit = ["multiple-tabs", "downloads"]
@@ -116,14 +107,6 @@ urlconfigs: dict[str, list[tuple[str, bool | str | dict[str, str]]]] = {
{"X-YouTube-Client-Name": "85", "X-YouTube-Client-Version": "2.0"}, {"X-YouTube-Client-Name": "85", "X-YouTube-Client-Version": "2.0"},
) )
], ],
"https://*.altinn.no": [
("content.cookies.accept", "all"),
("content.javascript.can_open_tabs_automatically", True),
],
"https://*.bankid.no": [
("content.cookies.accept", "all"),
("content.javascript.can_open_tabs_automatically", True),
],
} }
for url, urlconfig in urlconfigs.items(): for url, urlconfig in urlconfigs.items():
for setting, value in urlconfig: for setting, value in urlconfig:
@@ -148,22 +131,8 @@ c.input.insert_mode.auto_leave = False
c.input.insert_mode.plugins = True c.input.insert_mode.plugins = True
c.messages.timeout = 5000 c.messages.timeout = 5000
c.qt.force_platform = "wayland" c.qt.force_platform = "wayland"
c.qt.force_software_rendering = "qt-quick"
c.qt.highdpi = True c.qt.highdpi = True
qt_args = [
"disable-features=WebAuth", # makes BankID work
]
# Disable GPU by default (for AI training), unless QUTE_ENABLE_GPU is set
if os.environ.get("QUTE_ENABLE_GPU") != "1":
qt_args.extend(
[
"disable-gpu", # Stops using the GPU for rendering
"disable-gpu-compositing", # Forces CPU compositing
"disable-accelerated-2d-canvas", # Offloads canvas drawing to CPU
"disable-accelerated-video-decode", # Prevents VRAM usage for videos
]
)
c.qt.args = qt_args
c.scrolling.bar = "always" c.scrolling.bar = "always"
c.scrolling.smooth = False c.scrolling.smooth = False
c.session.lazy_restore = False c.session.lazy_restore = False
@@ -195,18 +164,18 @@ c.tabs.tabs_are_windows = False
c.tabs.title.format = "{index}.{current_title}" c.tabs.title.format = "{index}.{current_title}"
c.tabs.undo_stack_size = 1000 c.tabs.undo_stack_size = 1000
c.tabs.width = "15%" c.tabs.width = "15%"
c.url.start_pages = "https://www.google.com/search?hl=en&source=hp" c.url.start_pages = "http://www.google.com/search?hl=en&source=hp"
c.url.default_page = "https://www.google.com/search?hl=en&source=hp" c.url.default_page = "http://www.google.com/search?hl=en&source=hp"
c.url.searchengines = { c.url.searchengines = dict(
"DEFAULT": "https://www.google.com/search?hl=en&source=hp&q={}", DEFAULT="http://www.google.com/search?hl=en&source=hp&q={}",
"aw": "https://wiki.archlinux.org/?search={}", aw="https://wiki.archlinux.org/?search={}",
"ap": "https://www.archlinux.org/packages/?q={}", ap="https://www.archlinux.org/packages/?q={}",
"gh": "https://github.com/search?q={}&type=repositories", gh="https://github.com/search?q={}&type=repositories",
"ip": "https://iplocation.io/ip/{}", ip="https://iplocation.io/ip/{}",
"sh": "https://explainshell.com/explain?cmd={}", sh="https://explainshell.com/explain?cmd={}",
"wi": "https://en.wikipedia.org/w/index.php?search={}", wi="https://en.wikipedia.org/w/index.php?search={}",
"yt": "https://yewtu.be/search?q={}", yt="https://yewtu.be/search?q={}",
} )
c.zoom.default = "100%" c.zoom.default = "100%"
# FONTS # FONTS
@@ -219,20 +188,20 @@ c.fonts.web.family.fixed = "IBM Plex Mono"
c.fonts.web.family.standard = c.fonts.web.family.sans_serif c.fonts.web.family.standard = c.fonts.web.family.sans_serif
# COLORS # COLORS
base00 = "#0A0A0A" base00 = "#181818"
base01 = "#111111" base01 = "#282828"
base02 = "#333333" base02 = "#383838"
base03 = "#585858" base03 = "#585858"
base04 = "#b8b8b8" base04 = "#b8b8b8"
base05 = "#FFFFFF" base05 = "#d8d8d8"
base06 = "#e8e8e8" base06 = "#e8e8e8"
base07 = "#f8f8f8" base07 = "#f8f8f8"
base08 = "#FF0033" base08 = "#ab4642"
base09 = "#dc9656" base09 = "#dc9656"
base0A = "#FFE57F" base0A = "#f7ca88"
base0B = "#00E5FF" base0B = "#a1b56c"
base0C = "#86c1b9" base0C = "#86c1b9"
base0D = "#00E5FF" base0D = "#7cafc2"
base0E = "#ba8baf" base0E = "#ba8baf"
base0F = "#a16946" base0F = "#a16946"
c.colors.webpage.preferred_color_scheme = "light" c.colors.webpage.preferred_color_scheme = "light"
@@ -266,9 +235,9 @@ c.colors.downloads.start.bg = base0D
c.colors.downloads.stop.fg = base00 c.colors.downloads.stop.fg = base00
c.colors.downloads.stop.bg = base0C c.colors.downloads.stop.bg = base0C
c.colors.downloads.error.fg = base08 c.colors.downloads.error.fg = base08
c.colors.hints.bg = base00 c.colors.hints.fg = base00
c.colors.hints.fg = base0B c.colors.hints.bg = base0A
c.colors.hints.match.fg = base08 c.colors.hints.match.fg = base05
c.colors.keyhint.fg = base05 c.colors.keyhint.fg = base05
c.colors.keyhint.suffix.fg = base05 c.colors.keyhint.suffix.fg = base05
c.colors.keyhint.bg = base00 c.colors.keyhint.bg = base00
@@ -326,9 +295,9 @@ c.colors.tabs.pinned.selected.even.fg = base05
c.colors.tabs.pinned.selected.odd.bg = base02 c.colors.tabs.pinned.selected.odd.bg = base02
c.colors.tabs.pinned.selected.odd.fg = base05 c.colors.tabs.pinned.selected.odd.fg = base05
c.colors.tabs.selected.odd.fg = base05 c.colors.tabs.selected.odd.fg = base05
c.colors.tabs.selected.odd.bg = base02
c.colors.tabs.selected.even.fg = base05 c.colors.tabs.selected.even.fg = base05
c.colors.tabs.selected.odd.bg = base0B c.colors.tabs.selected.even.bg = base02
c.colors.tabs.selected.even.bg = base0B
# overrides # overrides
c.colors.hints.fg = base05 c.colors.hints.fg = base05
+13 -23
View File
@@ -5,29 +5,19 @@ should_launch_new_window 1
should_launch_new_instance 1 should_launch_new_instance 1
startup_commands toggle_visual_scroll;toggle_custom_color startup_commands toggle_visual_scroll;toggle_custom_color
# Document Colors (Deep Black bg, Pure White text) # - dracula: https://github.com/dracula/sioyek
custom_background_color #0A0A0A # - catppuccin: https://github.com/catppuccin/sioyek
custom_text_color #FFFFFF # - gruvbox: https://mil.ad/blog/2022/gruvbox-for-sioyek.html
custom_color_mode_empty_background_color #000000 new_macro _theme_solaris setconfig_custom_text_color(#b58900);setconfig_custom_background_color(#586e75)
page_separator_color #333333 new_macro _theme_normal setconfig_custom_text_color(#000000);setconfig_custom_background_color(#ffffff)
new_macro _theme_dark setconfig_custom_text_color(#ffffff);setconfig_custom_background_color(#000000)
# UI & Status Bar (Electric Cyan & Black) new_macro _theme_softlight setconfig_custom_text_color(#434c5e);setconfig_custom_background_color(#faf4ed)
ui_background_color #111111 new_macro _theme_macchiato setconfig_custom_text_color(#cad3f5);setconfig_custom_background_color(#24273a)
ui_text_color #FFFFFF new_macro _theme_frappe setconfig_custom_text_color(#c6d0f5);setconfig_custom_background_color(#303446)
ui_selected_background_color #333333 new_macro _theme_moccha setconfig_custom_text_color(#cdd6f4);setconfig_custom_background_color(#1e1e2e)
ui_selected_text_color #00E5FF new_macro _theme_latte setconfig_custom_text_color(#4c4f69);setconfig_custom_background_color(#eff1f5)
new_macro _theme_gruvbox setconfig_custom_text_color(#fbf1c7);setconfig_custom_background_color(#282828)
status_bar_color #00E5FF new_macro _theme_dracula setconfig_custom_text_color(0.97255 0.97255 0.94902);setconfig_custom_background_color(0.15686 0.16471 0.21176)
status_bar_text_color #000000
# Highlights (Cyan for links, Crimson for search)
search_highlight_color #FF0033
unselected_search_highlight_color #880011
link_highlight_color #00E5FF
synctex_highlight_color #00E5FF
# Visual Mark (You autostart this, make it subtle but sharp)
visual_mark_color #333333
# page separation # page separation
page_separator_color #1d2021 page_separator_color #1d2021
+6 -14
View File
@@ -1,5 +1,5 @@
add_newline = true add_newline = true
right_format = """$cmd_duration\n""" right_format = """$cmd_duration"""
[line_break] [line_break]
disabled = false disabled = false
@@ -8,25 +8,17 @@ disabled = false
disabled = false disabled = false
[cmd_duration] [cmd_duration]
disabled = true min_time = 1000
format = 'underwent [$duration](bold yellow)'
show_milliseconds = true
[directory] [directory]
truncation_length = 5 truncation_length = 5
truncate_to_repo = false truncate_to_repo = false
truncation_symbol = "…/" truncation_symbol = '…/'
repo_root_style = "red" repo_root_style = "red"
before_repo_root_style = "cyan" before_repo_root_style = "cyan"
repo_root_format = """\ repo_root_format = '[$before_root_path]($before_repo_root_style)[$repo_root]($repo_root_style)[$path]($style)[$read_only]($read_only_style) '
[$before_root_path]\
($before_repo_root_style)\
[$repo_root]\
($repo_root_style)\
[$path]\
($style)\
[$read_only]\
($read_only_style)\
\
"""
[git_status] [git_status]
disabled = true disabled = true
+52 -55
View File
@@ -10,34 +10,29 @@ mouse_warping none
# Set inner/outer gaps # Set inner/outer gaps
smart_gaps on smart_gaps on
gaps inner 4 gaps inner 2
gaps outer 0 gaps outer 0
# Hide titlebar on windows: # Hide titlebar on windows:
default_border pixel 2 default_border pixel 1
smart_borders on
# Default Font # Default Font
font pango:Noto Sans Regular 10 font pango:Noto Sans Regular 10
# Cursor # Thin borders:
seat seat0 xcursor_theme Adwaita 0 smart_borders on
# Title format for windows # Title format for windows
set $focus #00E5FF for_window [shell="xdg_shell"] title_format "%title (%app_id)"
set $unfocused #333333 for_window [shell="x_wayland"] title_format "%class - %title"
set $urgent #FF0033
set $bg #0A0A0A
set $text_dark #000000
set $text_dim #888888
# class border bground text indicator child_border # class border bground text indicator child_border
client.focused $focus $focus $text_dark $focus $focus client.focused #556064 #F9CE5C #000000 #CB4B16 #FDF6E3
client.focused_inactive $unfocused $unfocused $text_dim $unfocused $unfocused client.focused_inactive #CB4B16 #2F3D44 #1ABC9C #454948 #454948
client.unfocused $unfocused $unfocused $text_dim $unfocused $unfocused client.unfocused #556064 #2F3D44 #1ABC9C #454948 #454948
client.urgent $urgent $urgent #FFFFFF $urgent $urgent client.urgent #CB4B16 #FDF6E3 #1ABC9C #268BD2 #268BD2
client.placeholder #000000 #000000 #FFFFFF #000000 #000000 client.placeholder #000000 #0C0C0C #ffffff #000000 #000000
client.background $bg client.background #2B2C2B
# Status Bar: # Status Bar:
bar { bar {
@@ -72,7 +67,7 @@ set $powermenu ~/.config/sway/scripts/power_menu.sh
# ------------------------------------------ # ------------------------------------------
# Launch the terminal # Launch the terminal
bindsym $mod+Return exec $term bindsym $mod+Return exec $term
bindsym $mod+Shift+Return exec foot bash bindsym $mod+Shift+Return exec foot
# Kill focused window # Kill focused window
bindsym $mod+Shift+q kill bindsym $mod+Shift+q kill
# Lock screen # Lock screen
@@ -162,15 +157,15 @@ bindsym {
floating_modifier $mod normal floating_modifier $mod normal
bindsym { bindsym {
# Resize with arrow keys # Resize with arrow keys
$mod+ctrl+Right resize shrink width 100 px $mod+ctrl+Right resize shrink width 10 px
$mod+ctrl+Up resize grow height 100 px $mod+ctrl+Up resize grow height 10 px
$mod+ctrl+Down resize shrink height 100 px $mod+ctrl+Down resize shrink height 10 px
$mod+ctrl+Left resize grow width 100 px $mod+ctrl+Left resize grow width 10 px
# Resize with Vim keys # Resize with Vim keys
$mod+ctrl+$right resize shrink width 100 px $mod+ctrl+$right resize shrink width 10 px
$mod+ctrl+$up resize grow height 100 px $mod+ctrl+$up resize grow height 10 px
$mod+ctrl+$down resize shrink height 100 px $mod+ctrl+$down resize shrink height 10 px
$mod+ctrl+$left resize grow width 100 px $mod+ctrl+$left resize grow width 10 px
} }
# Resize floating windows with mouse scroll # Resize floating windows with mouse scroll
bindsym --whole-window --border { bindsym --whole-window --border {
@@ -185,8 +180,8 @@ bindsym --whole-window --border {
# media keys # media keys
bindsym { bindsym {
# Volume # Volume
XF86AudioRaiseVolume exec pamixer --unmute -i 2 XF86AudioRaiseVolume exec pamixer -ui 2
XF86AudioLowerVolume exec pamixer --unmute -d 2 XF86AudioLowerVolume exec pamixer -ud 2
XF86AudioMute exec pamixer --toggle-mute XF86AudioMute exec pamixer --toggle-mute
Pause exec pamixer -ui 2 Pause exec pamixer -ui 2
Print exec pamixer -ud 2 Print exec pamixer -ud 2
@@ -254,15 +249,13 @@ bindsym {
# Launch the browser # Launch the browser
$mod+i exec qutebrowser $mod+i exec qutebrowser
$mod+Shift+i exec env QUTE_ENABLE_GPU=1 qutebrowser
# Launch the file explorer # Launch the file explorer
$mod+o exec pcmanfm $mod+o exec pcmanfm
# Notifications # Dismiss message
$mod+n exec swaync-client --hide-latest $mod+n exec makoctl dismiss
$mod+Shift+n exec swaync-client --close-latest $mod+Shift+n exec makoctl dismiss -a
$mod+m exec swaync-client -t -sw
} }
# config tools # config tools
@@ -277,7 +270,7 @@ mode "$mode_monitor" {
bindsym Return mode "default" bindsym Return mode "default"
bindsym Escape mode "default" bindsym Escape mode "default"
} }
bindsym $mod+Shift+m mode "$mode_monitor" bindsym $mod+m mode "$mode_monitor"
# ------------------------------------------ # ------------------------------------------
# AUTOSTART # AUTOSTART
@@ -285,9 +278,6 @@ bindsym $mod+Shift+m mode "$mode_monitor"
# Auth with polkit-gnome # Auth with polkit-gnome
exec /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1 exec /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1
# Keyring
exec gnome-keyring-daemon --start --components=secrets
# Import environment variables for user systemd service manager # Import environment variables for user systemd service manager
exec systemctl --user import-environment DISPLAY WAYLAND_DISPLAY SWAYSOCK XDG_CURRENT_DESKTOP exec systemctl --user import-environment DISPLAY WAYLAND_DISPLAY SWAYSOCK XDG_CURRENT_DESKTOP
@@ -295,9 +285,20 @@ exec systemctl --user import-environment DISPLAY WAYLAND_DISPLAY SWAYSOCK XDG_CU
exec hash dbus-update-activation-environment 2>/dev/null && \ exec hash dbus-update-activation-environment 2>/dev/null && \
dbus-update-activation-environment --systemd DISPLAY WAYLAND_DISPLAY SWAYSOCK XDG_CURRENT_DESKTOP dbus-update-activation-environment --systemd DISPLAY WAYLAND_DISPLAY SWAYSOCK XDG_CURRENT_DESKTOP
# Idle configuration
exec_always swayidle -w \
timeout 1200 'gtklock -d' \
timeout 2400 'swaymsg "output * power off"' resume 'swaymsg "output * power on"' \
before-sleep 'gtklock -d' \
after-resume 'swaymsg reload' \
idlehint 240
# Start foot server
exec_always --no-startup-id foot --server
exec { exec {
# Start foot server # Desktop notifications
exec systemctl --user enable --now foot-server.service exec mako
# Set wallpaper # Set wallpaper
~/.azotebg ~/.azotebg
@@ -313,21 +314,19 @@ exec {
# night-time color shift # night-time color shift
wlsunset -l 59.91:10.76 wlsunset -l 59.91:10.76
# persist clipboard after close
wl-clip-persist --clipboard regular --all-mime-type-regex '(?i)^(?!image/x-inkscape-svg).+'
} }
exec_always { exec_always {
pkill -x swayidle; exec swayidle -w \
timeout 1200 'gtklock -d' \
timeout 2400 'swaymsg "output * dpms off"' \
resume 'swaymsg "output * dpms on"' \
before-sleep 'gtklock -d' \
lock 'gtklock -d'
# nwg-drawer # nwg-drawer
nwg-drawer -r -c 7 -is 90 -mb 10 -ml 50 -mr 50 -mt 10 nwg-drawer -r -c 7 -is 90 -mb 10 -ml 50 -mr 50 -mt 10
# persist clipboard after close
pkill -x wl-clip-persist
wl-clip-persist --clipboard regular --all-mime-type-regex '(?i)^(?!image/x-inkscape-svg).+'
# enable noisetorch
noisetorch -u
noisetorch -i
} }
# ------------------------------------------ # ------------------------------------------
@@ -349,16 +348,13 @@ for_window [title="File Operation Progress"] floating enable, border pixel 1, st
for_window [app_id="floating_shell"] floating enable, border pixel 1, sticky enable for_window [app_id="floating_shell"] floating enable, border pixel 1, sticky enable
for_window [title="Picture in picture"] floating enable, sticky enable for_window [title="Picture in picture"] floating enable, sticky enable
for_window [title="Save File"] floating enable for_window [title="Save File"] floating enable
for_window [instance="matplotlib"] floating enable
for_window [app_id="qalculate-gtk"] floating enable
for_window [app_id="firefox" title="Firefox — Sharing Indicator"] kill for_window [app_id="firefox" title="Firefox — Sharing Indicator"] kill
# only thunderbird main window as float
for_window [app_id="org.mozilla.Thunderbird" title="^((?!Mozilla Thunderbird).)*$"] floating enable
# steam # steam
# https://github.com/ValveSoftware/steam-for-linux/issues/1040 # https://github.com/ValveSoftware/steam-for-linux/issues/1040
for_window [app_id="(?i)^steam$"] floating enable for_window [app_id="^steam$"] floating enable
for_window [app_id="(?i)^steam$" title="^Steam$"] floating disable for_window [app_id="^Steam$"] floating enable
for_window [app_id="^steam$" title="^Steam$"] floating disable
# Inhibit idle # Inhibit idle
for_window [app_id="firefox"] inhibit_idle fullscreen for_window [app_id="firefox"] inhibit_idle fullscreen
@@ -387,3 +383,4 @@ input type:mouse {
accel_profile "flat" accel_profile "flat"
pointer_accel 0.5 pointer_accel 0.5
} }
+2 -1
View File
@@ -1,4 +1,6 @@
#!/bin/sh #!/bin/sh
# usage: import-gsettings
config="${XDG_CONFIG_HOME:-$HOME/.config}/gtk-3.0/settings.ini" config="${XDG_CONFIG_HOME:-$HOME/.config}/gtk-3.0/settings.ini"
if [ ! -f "$config" ]; then exit 1; fi if [ ! -f "$config" ]; then exit 1; fi
@@ -11,4 +13,3 @@ gsettings set "$gnome_schema" gtk-theme "$gtk_theme"
gsettings set "$gnome_schema" icon-theme "$icon_theme" gsettings set "$gnome_schema" icon-theme "$icon_theme"
gsettings set "$gnome_schema" cursor-theme "$cursor_theme" gsettings set "$gnome_schema" cursor-theme "$cursor_theme"
gsettings set "$gnome_schema" font-name "$font_name" gsettings set "$gnome_schema" font-name "$font_name"
gsettings set "$gnome_schema" color-scheme 'prefer-dark'
+12 -19
View File
@@ -1,7 +1,6 @@
#!/bin/bash #!/bin/bash
SELECTION="$(printf "󰌾 Lock\n󰤄 Suspend\n󰍃 Log out\n Reboot\n Reboot to UEFI\n󰐥 Shutdown" | fuzzel --dmenu -a top-right -l 6 -w 18 -p "Select an option: ")" SELECTION="$(printf "󰌾 Lock\n󰤄 Suspend\n󰍃 Log out\n Reboot\n Reboot to UEFI\n󰐥 Shutdown" | fuzzel --dmenu -a top-right -l 6 -w 18 -p "Select an option: ")"
[[ -z "$SELECTION" ]] && exit 0
confirm_action() { confirm_action() {
local action="$1" local action="$1"
@@ -10,32 +9,26 @@ confirm_action() {
} }
case $SELECTION in case $SELECTION in
*"󰌾 Lock"*) *"󰌾 Lock"*)
gtklock gtklock;;
;; *"󰤄 Suspend"*)
*"󰤄 Suspend"*)
if confirm_action "Suspend"; then if confirm_action "Suspend"; then
systemctl suspend-then-hibernate systemctl suspend-then-hibernate
fi fi;;
;; *"󰍃 Log out"*)
*"󰍃 Log out"*)
if confirm_action "Log out"; then if confirm_action "Log out"; then
swaymsg exit swaymsg exit
fi fi;;
;; *" Reboot"*)
*" Reboot"*)
if confirm_action "Reboot"; then if confirm_action "Reboot"; then
systemctl reboot systemctl reboot
fi fi;;
;; *" Reboot to UEFI"*)
*" Reboot to UEFI"*)
if confirm_action "Reboot to UEFI"; then if confirm_action "Reboot to UEFI"; then
systemctl reboot --firmware-setup systemctl reboot --firmware-setup
fi fi;;
;; *"󰐥 Shutdown"*)
*"󰐥 Shutdown"*)
if confirm_action "Shutdown"; then if confirm_action "Shutdown"; then
systemctl poweroff systemctl poweroff
fi fi;;
;;
esac esac
-62
View File
@@ -1,62 +0,0 @@
{
"positionX": "right",
"positionY": "top",
"layer": "overlay",
"control-center-layer": "top",
"layer-shell": true,
"cssPriority": "application",
"control-center-margin-top": 8,
"control-center-margin-bottom": 8,
"control-center-margin-right": 8,
"control-center-margin-left": 8,
"notification-2d-margin": true,
"notification-window-width": 400,
"keyboard-shortcuts": true,
"image-visibility": "when-available",
"transition-length": 200,
"hide-on-clear": false,
"hide-on-action": true,
"script-fail-notify": true,
"widgets": [
"title",
"dnd",
"mpris",
"volume",
"backlight",
"buttons-grid",
"notifications"
],
"widget-config": {
"title": {
"text": "Notifications",
"clear-all-button": true,
"button-text": "Clear All"
},
"dnd": {
"text": "Do Not Disturb"
},
"mpris": {
"image-size": 96,
"image-radius": 8
},
"volume": {
"label": "Volume",
"show-percentage": true
},
"backlight": {
"label": "Brightness"
},
"buttons-grid": {
"actions": [
{
"label": "WiFi",
"command": "nm-connection-editor"
},
{
"label": "Bluetooth",
"command": "blueman-manager"
}
]
}
}
}
-63
View File
@@ -1,63 +0,0 @@
@define-color bg rgba(10, 10, 10, 0.85);
@define-color border #333333;
@define-color text #FFFFFF;
@define-color focus #00E5FF;
@define-color urgent #FF0033;
* {
font-family: "Noto Sans", sans-serif;
border-radius: 0px; /* Sharp corners */
background-clip: padding-box;
}
.control-center {
background: @bg;
border-left: 2px solid @border;
color: @text;
}
.floating-notifications .notification {
background: @bg;
border: 2px solid @focus; /* Instantly clear it's a new notification */
box-shadow: none;
margin: 4px;
}
button:hover {
background: @border;
border: 1px solid @focus;
}
.widget-title {
color: @focus;
font-size: 1.2rem;
font-weight: bold;
padding: 10px;
border-bottom: 1px solid @border;
}
.close-button {
background: transparent;
border: none;
color: @text;
}
.close-button:hover {
background: @urgent;
}
.widget-dnd,
.widget-mpris,
.widget-volume,
.widget-backlight,
.widget-buttons-grid {
background: transparent;
border: 1px solid @border;
margin: 8px;
padding: 8px;
}
.notification-row:focus,
.notification-row:hover {
background: #111111;
border-left: 2px solid @focus;
}
-2
View File
@@ -69,8 +69,6 @@ bind generic um status-merge
bind generic - stage-update-line bind generic - stage-update-line
bind generic \ stage-split-chunk bind generic \ stage-split-chunk
bind generic Y @sh -c "echo -n %(commit) | wl-copy"
bind generic c none bind generic c none
bind generic cc !git commit bind generic cc !git commit
bind generic ca !?@git commit --amend --no-edit bind generic ca !?@git commit --amend --no-edit
+45 -43
View File
@@ -12,13 +12,12 @@ set -g allow-passthrough
set -g history-limit 100000 set -g history-limit 100000
set -g focus-events on set -g focus-events on
# Advertise tmux correctly to programs running inside it. # Set the default terminal terminfo
set -g default-terminal "tmux-256color" set -g default-terminal "foot"
set -as terminal-features ',*:RGB'
set -as terminal-features ',*:clipboard'
# Allow image passthrough # True color support (Tc) and undercurl support (Smol)
set -gq allow-passthrough on set -as terminal-overrides ',foot:Tc'
set -as terminal-overrides ',foot:Smol'
# Start with index 1 # Start with index 1
set -g base-index 1 set -g base-index 1
@@ -32,8 +31,11 @@ bg_active_window="color252"
bg_highlight="red" bg_highlight="red"
# pane title # pane title
ps_pid='#(pgrep -P "#{pane_pid}" | tr "\n" " ")'
cmd='#(ps --no-headers -o args $(pgrep -P "#{pane_pid}"))'
# cmd='#(ps --no-headers -t #{pane_tty} -o args -O-c | tr "\n" " ")'
setw -g pane-border-status top setw -g pane-border-status top
setw -g pane-border-format " #{pane_current_path} #{=/-40/…:pane_current_command} #{?alternate_on,<Alt Mode> ,}" setw -g pane-border-format " #{pane_current_path} #{=/-20/…:pane_current_command} ${ps_pid}[${cmd}] #{?alternate_on,<Alt Mode> ,}"
set -g pane-border-style "fg=${fg_inactive_pane}" set -g pane-border-style "fg=${fg_inactive_pane}"
set -g pane-active-border-style "fg=${fg_active_pane}" set -g pane-active-border-style "fg=${fg_active_pane}"
@@ -60,13 +62,17 @@ set -g set-titles on
###################### ######################
### KEYBINDS ### ### KEYBINDS ###
###################### ######################
# Config that is very close to a i3 window manager's keybinding.
# Set new prefix
# Note : you can press super key by set M.
# (tested with tty only)
set -g prefix M-a set -g prefix M-a
bind M-a send-prefix
# First remove *all* keybindings # First remove *all* keybindings
unbind -a unbind -a
bind M-a send-prefix
# Basic bindings # Basic bindings
bind ? list-keys bind ? list-keys
bind d detach-client bind d detach-client
@@ -80,15 +86,16 @@ bind-key -n End send-keys "\033[F"
# Copy mode # Copy mode
bind c copy-mode bind c copy-mode
# clipboard control
bind p paste-buffer bind p paste-buffer
bind -T copy-mode-vi v send-keys -X begin-selection bind -T copy-mode-vi v send-keys -X begin-selection
bind -T copy-mode-vi y send-keys -X copy-selection bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel "xclip -i -f -selection primary | xclip -i -selection clipboard"
bind -T copy-mode-vi Enter send-keys -X copy-selection-and-cancel
bind -T copy-mode-vi V send-keys -X select-line
bind -T copy-mode-vi Escape send-keys -X clear-selection
bind -T copy-mode-vi q send-keys -X cancel
bind -T copy-mode-vi Y send-keys -X copy-end-of-line
bind -T copy-mode-vi r send-keys -X rectangle-toggle bind -T copy-mode-vi r send-keys -X rectangle-toggle
bind -T copy-mode-vi Escape send-keys -X cancel
bind -T copy-mode-vi q send-keys -X clear-selection
bind -T copy-mode MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel "xclip -selection primary -filter | xclip -selection clipboard"
bind -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel "xclip -selection primary -filter | xclip -selection clipboard"
# Rename window # Rename window
bind , command-prompt "rename-window %%" bind , command-prompt "rename-window %%"
@@ -99,10 +106,6 @@ bind t clock-mode
# Show pane numbers # Show pane numbers
bind i display-panes bind i display-panes
ps_pid='#(pgrep -P "#{pane_pid}" | tr "\n" " ")'
cmd='#(ps --no-headers -o args $(pgrep -P "#{pane_pid}"))'
bind P display-message -d 100000 "${cmd} FOLDER:#{pane_current_path} CMD:#{=/-20/…:pane_current_command} PID:${ps_pid}"
# Config Reloads # Config Reloads
bind r source-file ~/.config/tmux/tmux.conf \; refresh-client \; display-message "Config reloaded" bind r source-file ~/.config/tmux/tmux.conf \; refresh-client \; display-message "Config reloaded"
@@ -118,8 +121,6 @@ bind v split-window -h -c "#{pane_current_path}"
bind s split-window -v -c "#{pane_current_path}" bind s split-window -v -c "#{pane_current_path}"
bind V split-window -fh -c "#{pane_current_path}" bind V split-window -fh -c "#{pane_current_path}"
bind S split-window -fv -c "#{pane_current_path}" bind S split-window -fv -c "#{pane_current_path}"
bind x split-window -fh bash
# Change layouts # Change layouts
bind o rotate-window bind o rotate-window
@@ -139,17 +140,16 @@ bind w choose-tree
# Change current pane to next window # Change current pane to next window
bind ` break-pane bind ` break-pane
# Change current pane to specific window (join if exists, break if it doesn't) bind 1 if 'tmux join-pane -t :1 -h' '' 'new-window -d -t :1; join-pane -t :1'
bind 1 if-shell 'tmux join-pane -t :1 -h' '' 'break-pane -t :1' bind 2 if 'tmux join-pane -t :2 -h' '' 'new-window -d -t :2; join-pane -t :2'
bind 2 if-shell 'tmux join-pane -t :2 -h' '' 'break-pane -t :2' bind 3 if 'tmux join-pane -t :3 -h' '' 'new-window -d -t :3; join-pane -t :3'
bind 3 if-shell 'tmux join-pane -t :3 -h' '' 'break-pane -t :3' bind 4 if 'tmux join-pane -t :4 -h' '' 'new-window -d -t :4; join-pane -t :4'
bind 4 if-shell 'tmux join-pane -t :4 -h' '' 'break-pane -t :4' bind 5 if 'tmux join-pane -t :5 -h' '' 'new-window -d -t :5; join-pane -t :5'
bind 5 if-shell 'tmux join-pane -t :5 -h' '' 'break-pane -t :5' bind 6 if 'tmux join-pane -t :6 -h' '' 'new-window -d -t :6; join-pane -t :6'
bind 6 if-shell 'tmux join-pane -t :6 -h' '' 'break-pane -t :6' bind 7 if 'tmux join-pane -t :7 -h' '' 'new-window -d -t :7; join-pane -t :7'
bind 7 if-shell 'tmux join-pane -t :7 -h' '' 'break-pane -t :7' bind 8 if 'tmux join-pane -t :8 -h' '' 'new-window -d -t :8; join-pane -t :8'
bind 8 if-shell 'tmux join-pane -t :8 -h' '' 'break-pane -t :8' bind 9 if 'tmux join-pane -t :9 -h' '' 'new-window -d -t :9; join-pane -t :9'
bind 9 if-shell 'tmux join-pane -t :9 -h' '' 'break-pane -t :9' bind 0 if 'tmux join-pane -t :10 -h' '' 'new-window -d -t :10; join-pane -t :10 -h'
bind 0 if-shell 'tmux join-pane -t :10 -h' '' 'break-pane -t :10'
# move windows # move windows
bind m command-prompt -p "move window to:" "move-window -t '%%'" bind m command-prompt -p "move window to:" "move-window -t '%%'"
@@ -189,26 +189,28 @@ bind b send-keys -R \; clear-history \; send-keys Enter
# various plugins # various plugins
set -g @plugin 'tmux-plugins/tpm' set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-sensible' set -g @plugin 'tmux-plugins/tmux-sensible'
set -g @plugin 'tmux-plugins/tmux-yank'
###################### ######################
### PANE CONTROL ### ### PANE CONTROL ###
###################### ######################
set -g @plugin 'smart-splits-nvim/backend-tmux' set -g @plugin 'mrjones2014/smart-splits.nvim'
set -g @smart-splits_at_edge 'wrap' # Optional configurations with their default values if omitted:
set -g @smart-splits_resize_step_size '3'
set -g @smart-splits_move_left_key 'M-h' set -g @smart-splits_no_wrap '' # to disable wrapping. (any value disables wrapping)
set -g @smart-splits_move_down_key 'M-j'
set -g @smart-splits_move_up_key 'M-k'
set -g @smart-splits_move_right_key 'M-l'
set -g @smart-splits_resize_left_key 'C-h' set -g @smart-splits_move_left_key 'M-h' # key-mapping for navigation.
set -g @smart-splits_resize_down_key 'C-j' set -g @smart-splits_move_down_key 'M-j' # --"--
set -g @smart-splits_resize_up_key 'C-k' set -g @smart-splits_move_up_key 'M-k' # --"--
set -g @smart-splits_resize_right_key 'C-l' set -g @smart-splits_move_right_key 'M-l' # --"--
set -g @smart-splits_resize_left_key 'C-h' # key-mapping for resizing.
set -g @smart-splits_resize_down_key 'C-j' # --"--
set -g @smart-splits_resize_up_key 'C-k' # --"--
set -g @smart-splits_resize_right_key 'C-l' # --"--
set -g @smart-splits_resize_step_size '3' # change the step-size for resizing. set -g @smart-splits_resize_step_size '3' # change the step-size for resizing.
+10 -29
View File
@@ -60,7 +60,7 @@
"format-ok": "Systemd ✓", "format-ok": "Systemd ✓",
"system": true, // Monitor failed systemwide units. "system": true, // Monitor failed systemwide units.
"user": true, // Ignore failed user units. "user": true, // Ignore failed user units.
"on-click": "swaymsg exec 'footclient --app-id floating_shell --window-size-chars 250x45 systemctl-tui'" "on-click": "swaymsg exec 'footclient --app-id floating_shell --window-size-chars 120x45 isd'"
}, },
// Configuration - modules-right // Configuration - modules-right
@@ -82,19 +82,20 @@
"warning": 70, "warning": 70,
"critical": 90, "critical": 90,
}, },
"on-click": "footclient --app-id floating_shell --window-size-chars 250x150 -e btop" "on-click": "footclient --app-id floating_shell --window-size-chars 120x45 -e btop"
}, },
"temperature": { "custom/cputemp": {
"critical-threshold": 80, "exec": "sensors | grep 'CPU:' | awk '{print substr($2,2); }'",
"format": " {temperatureC}°C", "format": " {}",
"on-click": "swaymsg exec 'footclient --app-id floating_shell --window-size-chars 120x100 -e watch sensors'" "on-click": "swaymsg exec 'footclient --app-id floating_shell --window-size-chars 80x45 watch sensors'",
"interval": 1
}, },
"memory": { "memory": {
"interval": 5, "interval": 5,
"format": "{:>3}%", "format": "{:>3}%",
"on-click": "footclient --app-id floating_shell --window-size-chars 250x150 -e btop", "on-click": "footclient --app-id floating_shell --window-size-chars 100x100 -e btop",
"states": { "states": {
"warning": 70, "warning": 70,
"critical": 90 "critical": 90
@@ -106,7 +107,7 @@
"interval": 30, "interval": 30,
"format": " / {specific_free:0.0f} of {specific_total:0.0f} GB free", "format": " / {specific_free:0.0f} of {specific_total:0.0f} GB free",
"unit": "GB", "unit": "GB",
"on-click": "swaymsg exec 'footclient --app-id floating_shell --window-size-chars 250x45 gdu -d'" "on-click": "swaymsg exec 'footclient --app-id floating_shell --window-size-chars 80x45 ncdu -x /'"
}, },
"backlight": { "backlight": {
@@ -132,6 +133,7 @@
}, },
"on-click": "pavucontrol", "on-click": "pavucontrol",
"tooltip-format": "{icon}  {volume}% {format_source}", "tooltip-format": "{icon}  {volume}% {format_source}",
"on-click": "swaymsg exec 'footclient --app-id floating_shell --window-size-chars 120x12 pulsemixer'",
"on-click-middle": "pactl set-sink-mute @DEFAULT_SINK@ toggle", "on-click-middle": "pactl set-sink-mute @DEFAULT_SINK@ toggle",
"on-scroll-up": "pactl set-sink-volume @DEFAULT_SINK@ +5%", "on-scroll-up": "pactl set-sink-volume @DEFAULT_SINK@ +5%",
"on-scroll-down": "pactl set-sink-volume @DEFAULT_SINK@ -5%" "on-scroll-down": "pactl set-sink-volume @DEFAULT_SINK@ -5%"
@@ -149,27 +151,6 @@
"format-icons": ["", "", "", "", ""] "format-icons": ["", "", "", "", ""]
}, },
"custom/notification": {
"tooltip": true,
"format": "<span size='16pt'>{icon}</span>",
"format-icons": {
"notification": "󱅫",
"none": "󰂜",
"dnd-notification": "󰂠",
"dnd-none": "󰪓",
"inhibited-notification": "󰂛",
"inhibited-none": "󰪑",
"dnd-inhibited-notification": "󰂛",
"dnd-inhibited-none": "󰪑"
},
"return-type": "json",
"exec-if": "which swaync-client",
"exec": "swaync-client -swb",
"on-click": "swaync-client -t -sw",
"on-click-right": "swaync-client -d -sw",
"escape": true
},
"clock": { "clock": {
"format": "󰅐 {:%H:%M}", "format": "󰅐 {:%H:%M}",
"format-alt": "󰅐 {:%OI:%M %p}", "format-alt": "󰅐 {:%OI:%M %p}",
+47 -29
View File
@@ -1,35 +1,45 @@
/* =============================================================================
*
* Waybar configuration
*
* Configuration reference: https://github.com/Alexays/Waybar/wiki/Configuration
*
* =========================================================================== */
/* ----------------------------------------------------------------------------- /* -----------------------------------------------------------------------------
* Keyframes & Colors * Keyframes
* -------------------------------------------------------------------------- */ * -------------------------------------------------------------------------- */
@define-color highlight #00E5FF;
@define-color base1 #0A0A0A; @define-color highlight #685878 ;
@define-color text #FFFFFF; @define-color base1 #19191e ;
@define-color urgent #FF0033;
@define-color dim #333333;
@keyframes blink-warning { @keyframes blink-warning {
70% { 70% {
color: @text; color: white;
} }
to { to {
color: @text; color: white;
background-color: orange; background-color: orange;
} }
} }
@keyframes blink-critical { @keyframes blink-critical {
70% { 70% {
color: @text; color: white;
} }
to { to {
color: @text; color: white;
background-color: @urgent; background-color: red;
} }
} }
/* ----------------------------------------------------------------------------- /* -----------------------------------------------------------------------------
* Base styles * Base styles
* -------------------------------------------------------------------------- */ * -------------------------------------------------------------------------- */
/* Reset all styles */
* { * {
border: none; border: none;
border-radius: 0; border-radius: 0;
@@ -38,13 +48,13 @@
padding: 0; padding: 0;
} }
/* The whole bar */
#waybar { #waybar {
background: transparent; background: transparent;
color: @text; color: #e3e3ea;
background-color: @base1; background-color: @base1;
font-family: JetBrainsMono; font-family: JetBrainsMono;
font-size: 13px; font-size: 13px;
border-bottom: 2px solid @dim;
} }
/* Every modules */ /* Every modules */
@@ -59,36 +69,44 @@
#battery, #battery,
#clock, #clock,
#tray { #tray {
padding: 0.5rem 0.6rem; padding:0.5rem 0.6rem;
margin: 1px 0px; margin: 1px 0px;
} }
/* ----------------------------------------------------------------------------- /* -----------------------------------------------------------------------------
* Module styles * Module styles
* -------------------------------------------------------------------------- */ * -------------------------------------------------------------------------- */
#custom-launcher {
margin-left:15px;
margin-right:10px;
}
#workspaces {
font-size:13px;
}
#workspaces button { #workspaces button {
border-radius: 0px; border-radius: 5px;
color: @text; color: #eceff4;
padding: 1px 6px; padding: 1px 6px;
margin-right: 2px; margin-right: 2px;
margin-left: 2px; margin-left: 2px;
border-bottom: 2px solid transparent;
} }
#workspaces button.focused { #workspaces button.focused {
border-bottom: 2px solid @highlight; border: 1px solid #d8dee9;
color: @highlight;
} }
#workspaces button.urgent { #workspaces button.urgent {
border-color: @urgent; border-color: #c9545d;
color: @urgent; color: #c9545d;
} }
#mode { #mode {
background: @highlight; background: @highlight;
color: #000000; border-bottom: 3px transparent;
font-weight: bold; color:white;
margin-left: 5px; margin-left: 5px;
padding: 7px; padding: 7px;
} }
@@ -117,14 +135,14 @@
#memory.warning { #memory.warning {
color: orange; color: orange;
} }
#memory.critical { #memory.critical {
color: red; color: red;
animation-name: blink-critical; animation-name: blink-critical;
animation-duration: 2s; animation-duration: 2s;
padding-left: 5px; padding-left:5px;
padding-right: 5px; padding-right:5px;
} }
#backlight.icon { #backlight.icon {
@@ -162,7 +180,7 @@
} }
#custom-power { #custom-power {
margin-left: 15px; margin-left:15px;
margin-right: 15px; margin-right:15px;
font-size: 15px; font-size:15px;
} }
+1
View File
@@ -1,4 +1,5 @@
[screencast] [screencast]
chooser_type = dmenu chooser_type = dmenu
chooser_cmd = fuzzel --dmenu chooser_cmd = fuzzel --dmenu
output_name=DP-1
max_fps=30 max_fps=30
-28
View File
@@ -1,8 +1,3 @@
[[mgr.prepend_keymap]]
on = "E"
run = "shell 'exiftool %s | less' --block --confirm"
desc = "View file metadata with Exiftool"
[[mgr.prepend_keymap]] [[mgr.prepend_keymap]]
on = "q" on = "q"
run = "close" run = "close"
@@ -31,26 +26,3 @@ run = "plugin mount"
on = "T" on = "T"
run = "plugin toggle-pane max-preview" run = "plugin toggle-pane max-preview"
desc = "Maximize or restore the preview pane" desc = "Maximize or restore the preview pane"
[[mgr.prepend_keymap]]
on = "C"
run = "plugin ouch"
desc = "Compress with ouch"
[[mgr.prepend_keymap]]
on = [ "c", "a" ]
run = 'shell --block -- catai -T %s | nvim -R -c "set bt=nofile ft=xml" -'
desc = "catai: Dump selected files/folders into Neovim"
[[mgr.prepend_keymap]]
on = [ "c", "x" ]
run = """\
shell --block -- zsh -c \"args=(); for p in \\\"\\$@\\\"; do args+=(-x \\\"\\$p\\\"); done; catai -T \
\\\"\\${args[@]}\\\" | nvim -R -c \\\"set bt=nofile ft=xml\\\" -\" -- %s\
"""
desc = "catai: Dump current dir EXCEPT selected items"
[[mgr.prepend_keymap]]
on = [ "c", "d" ]
run = 'shell --block -- catai -T -d | nvim -R -c "set bt=nofile ft=xml" -'
desc = "catai: Dump git dirty files into Neovim"
+17 -112
View File
@@ -12,143 +12,48 @@ max_height = 1500
[open] [open]
prepend_rules = [ prepend_rules = [
# Directories { name = "*.csv", use = "text" },
{ mime = "inode/directory", use = [ "thunar", "pcmanfm", "open" ] },
# Text & Code
{ url = "*.csv", use = "text" },
{ url = "*.md", use = [ "glow", "nvim", "bat", "open" ] },
{ url = "*.json", use = [ "jq", "nvim", "bat", "open" ] },
{ mime = "text/*", use = [ "nvim", "bat", "open" ] },
{ mime = "inode/x-empty", use = [ "nvim", "open" ] },
# PDF & Documents
{ mime = "application/pdf", use = [ "zathura", "sioyek", "okular", "xournalpp", "chrome", "firefox", "open" ] },
{ mime = "application/vnd.openxmlformats-officedocument.*", use = [ "libreoffice", "calligra", "open" ] },
{ mime = "application/vnd.oasis.opendocument.*", use = [ "libreoffice", "calligra", "open" ] },
# Images
{ mime = "image/heic", use = [ "swappy", "krita", "open" ] },
{ mime = "image/*", use = [ "qimgv", "swappy", "krita", "open" ] },
# Video & Audio
{ mime = "video/*", use = [ "mpv", "vlc", "open" ] },
{ mime = "audio/*", use = [ "quodlibet", "mpv", "vlc", "open" ] },
# Archives
{ mime = "application/zip", use = [ "ouch", "file-roller", "open" ] },
{ mime = "application/x-tar", use = [ "ouch", "file-roller", "open" ] },
{ mime = "application/gzip", use = [ "ouch", "file-roller", "open" ] },
{ mime = "application/x-bzip*", use = [ "ouch", "file-roller", "open" ] },
{ mime = "application/x-7z-compressed", use = [ "ouch", "file-roller", "open" ] },
{ mime = "application/x-rar", use = [ "ouch", "file-roller", "open" ] },
# Web pages
{ mime = "text/html", use = [ "qutebrowser", "firefox", "chrome", "w3m", "open" ] },
# JSON files
# Certificates
{ url = "*.{crt,pem,cer,der}", use = [ "cert", "nvim", "bat", "open" ] },
# Catch-all for any file (allows Exiftool on everything as a fallback)
{ url = "*", use = [ "exiftool", "open" ] },
] ]
[opener] [opener]
# --- Text / Code (Blocking Terminal Apps) ---
text = [ text = [
{ run = "bat %s", block = true, desc = "bat" }, { run = "bat $@", block = true, desc = "bat" },
{ run = "nvim %s", block = true, desc = "nvim" }, { run = "nvim $@", block = true, desc = "nvim" },
] ]
nvim = [ { run = "nvim %s", block = true, desc = "Neovim" } ]
bat = [ { run = "bat %s", block = true, desc = "Bat" } ]
glow = [ { run = "glow --pager %s", block = true, desc = "Glow" } ]
jq = [ { run = "jq -C . %s | less -R", block = true, desc = "jq viewer" } ]
cert = [ { run = "openssl x509 -text -noout -in %s | less", block = true, desc = "View Cert (openssl)" } ]
# --- PDFs (Orphaned GUI Apps) ---
zathura = [ { run = "zathura %s", orphan = true, desc = "Zathura" } ]
sioyek = [ { run = "sioyek %s", orphan = true, desc = "Sioyek" } ]
okular = [ { run = "okular %s", orphan = true, desc = "Okular" } ]
xournalpp = [ { run = "xournalpp %s", orphan = true, desc = "Xournal++" } ]
# --- Browsers (Orphaned GUI Apps) ---
chrome = [ { run = "google-chrome-stable %s", orphan = true, desc = "Chrome" } ]
firefox = [ { run = "firefox %s", orphan = true, desc = "Firefox" } ]
qutebrowser = [ { run = "qutebrowser %s", orphan = true, desc = "Qutebrowser" } ]
w3m = [ { run = "w3m %s", orphan = true, desc = "w3m" } ]
# --- Media: Video / Audio (Orphaned GUI Apps) ---
mpv = [ { run = "mpv %s", orphan = true, desc = "MPV" } ]
vlc = [ { run = "vlc %s", orphan = true, desc = "VLC" } ]
quodlibet = [ { run = "quodlibet %s", orphan = true, desc = "quod libet" } ]
# --- Images (Orphaned GUI Apps) ---
qimgv = [ { run = "qimgv %s", orphan = true, desc = "qimgv" } ]
swappy = [ { run = "swappy -f %s", orphan = true, desc = "swappy" } ]
krita = [ { run = "krita %s", orphan = true, desc = "krita" } ]
# --- Office Documents (Orphaned GUI Apps) ---
libreoffice = [ { run = "libreoffice %s", orphan = true, desc = "LibreOffice" } ]
calligra = [ { run = "calligrawords %s", orphan = true, desc = "Calligra" } ]
# --- Archives ---
ouch = [ { run = "ouch d -y %s", desc = "Extract here with ouch" } ]
file-roller = [ { run = "file-roller %s", orphan = true, desc = "File Roller" } ]
# --- Directories (Orphaned GUI Apps) ---
thunar = [ { run = "thunar %s", orphan = true, desc = "Thunar" } ]
pcmanfm = [ { run = "pcmanfm %s", orphan = true, desc = "PCManFM" } ]
[input] [input]
cursor_blink = true cursor_blink = true
[[plugin.append_previewers]]
url = "*"
run = "file-extra-metadata"
[[plugin.prepend_fetchers]] [[plugin.prepend_fetchers]]
group = "git" id = "git"
url = "*" name = "*"
run = "git" run = "git"
[[plugin.prepend_fetchers]] [[plugin.prepend_fetchers]]
group = "git" id = "git"
url = "*/" name = "*/"
run = "git" run = "git"
[[plugin.prepend_previewers]] [[plugin.prepend_previewers]]
mime = "application/{*zip,tar,bzip2,7z*,rar,xz,zstd,java-archive}" name = "*.tar*"
run = "ouch"
[[plugin.prepend_previewers]]
url = "*/"
run = "eza-preview"
[[plugin.prepend_previewers]]
url = "*.tar*"
run = 'piper --format=url -- tar tf "$1"' run = 'piper --format=url -- tar tf "$1"'
[[plugin.prepend_previewers]] [[plugin.prepend_previewers]]
url = "*.csv" name = "*.csv"
run = 'piper -- bat -p --color=always "$1"' run = 'piper -- bat -p --color=always "$1"'
[[plugin.prepend_previewers]] [[plugin.prepend_previewers]]
url = "*.md" name = "*.md"
run = 'piper -- CLICOLOR_FORCE=1 glow -w=$w -s=dark "$1"' run = 'piper -- CLICOLOR_FORCE=1 glow -w=$w -s=dark "$1"'
[[plugin.prepend_previewers]] [[plugin.prepend_previewers]]
url = "*.parquet" name = "*/"
run = "parquet-preview" run = 'piper -- eza -TL=3 --color=always --icons=always --group-directories-first --no-quotes "$1"'
[[plugin.prepend_previewers]] [[plugin.append_previewers]]
url = "*.parq" name = "*"
run = "parquet-preview" run = 'file-extra-metadata'
[[plugin.prepend_previewers]]
url = "*.pq"
run = "parquet-preview"
[[plugin.prepend_spotters]] [[plugin.prepend_spotters]]
url = "*" name = "*"
run = "file-extra-metadata" run = 'file-extra-metadata'
+2 -13
View File
@@ -3,7 +3,7 @@ export SYSTEMD_EDITOR=nvim
export EDITOR=nvim export EDITOR=nvim
export VISUAL=nvim export VISUAL=nvim
export PAGER="bat --style=header,rule,snip" export PAGER="bat --style=header,rule,snip"
export PATH=~/.local/bin:${KREW_ROOT:-$HOME/.krew}/bin:$PATH export PATH=~/.local/bin:$PATH
export BROWSER=/usr/bin/qutebrowser export BROWSER=/usr/bin/qutebrowser
export HISTFILE=~/.config/zsh/history export HISTFILE=~/.config/zsh/history
export HISTSIZE=200000 export HISTSIZE=200000
@@ -13,17 +13,6 @@ export SAVEHIST=200000
alias ls='ls --color=auto -Ah' alias ls='ls --color=auto -Ah'
alias ..='cd ..' alias ..='cd ..'
alias ...='cd ../..' alias ...='cd ../..'
catai() {
if [[ " $* " == *" -i "* || " $* " == *" -y "* ]]; then
local cmd
cmd="$(command catai --print-cmd "$@")" && [[ -n "$cmd" ]] && print -z "$cmd"
else
command catai "$@"
fi
}
alias cataid='catai -d'
alias cataiy='catai -y'
alias sioyek="QT_QPA_PLATFORM=xcb sioyek"
# --- basic keybinds --- # --- basic keybinds ---
bindkey '^[[Z' reverse-menu-complete # shift-tab bindkey '^[[Z' reverse-menu-complete # shift-tab
@@ -47,7 +36,7 @@ autoload -Uz compinit
compinit -d "~/.config/zsh/zcompdump" compinit -d "~/.config/zsh/zcompdump"
zstyle ':completion:*' menu select zstyle ':completion:*' menu select
zstyle ':completion:*' matcher-list 'm:{a-z}={A-Za-z}' 'r:|[._-]=** r:|=**' zstyle ':completion:*' matcher-list 'm:{a-z}={A-Za-z}' 'r:|[._-]=** r:|=**'
zstyle ':completion:*' list-colors ${(s.:.)LS_COLORS} zstyle ':completion:*' list-colors ''
if command -v kubectl >/dev/null 2>&1; then if command -v kubectl >/dev/null 2>&1; then
source <(kubectl completion zsh) source <(kubectl completion zsh)
fi fi
+24 -14
View File
@@ -1,7 +1,7 @@
[core] [core]
filemode = false filemode = false
pager = delta pager = delta --diff-so-fancy
autocrlf = input autorcrlf = true
editor = nvim editor = nvim
[user] [user]
name = Henrik Bakken name = Henrik Bakken
@@ -13,10 +13,8 @@
required = true required = true
[interactive] [interactive]
diffFilter = delta --color-only diffFilter = delta --color-only
; [merge]
[merge] ; conflictstyle = diff3
conflictstyle = zdiff3
[delta] [delta]
navigate = true navigate = true
light = false light = false
@@ -31,14 +29,16 @@
plus-non-emph-style = bold green plus-non-emph-style = bold green
plus-emph-style = bold reverse green plus-emph-style = bold reverse green
[delta "interactive"] [delta "interactive"]
keep-plus-minus-markers = false keep-plus-minus-markers = false[delta "decorations"]
[delta "decorations"]
commit-decoration-style = bold yellow box ul commit-decoration-style = bold yellow box ul
file-style = bold yellow ul file-style = bold yellow ul
file-decoration-style = none file-decoration-style = none
hunk-header-decoration-style = cyan box ul hunk-header-decoration-style = cyan box ul
[init] [init]
defaultBranch = main defaultBranch = main
# better defaults
# https://blog.gitbutler.com/how-git-core-devs-configure-git/
[column] [column]
ui = auto ui = auto
[branch] [branch]
@@ -57,8 +57,6 @@
prune = true prune = true
pruneTags = true pruneTags = true
all = true all = true
[pull]
rebase = true
[help] [help]
autocorrect = prompt autocorrect = prompt
[rebase] [rebase]
@@ -66,12 +64,24 @@
autoStash = true autoStash = true
updateRefs = true updateRefs = true
[rerere] # Improved colors for the highlighted bits
enabled = true # https://github.com/so-fancy/diff-so-fancy
autoupdate = true
[color] [color]
ui = true ui = true
[color "diff-highlight"]
oldNormal = red bold
oldHighlight = red bold 52
newNormal = green bold
newHighlight = green bold 22
[color "diff"]
meta = 11
frag = magenta bold
func = 146 bold
commit = yellow bold
old = red bold
new = green bold
whitespace = red reverse
[safe] [safe]
directory = /tmp directory = /tmp
[credential] [credential]
helper = /usr/lib/git-core/git-credential-libsecret helper = store
-352
View File
@@ -1,352 +0,0 @@
#!/usr/bin/env python3.14
"""
catai: Collect project tree & files in XML tags for LLM context.
Requires Python >= 3.14 (PEP 649/749 deferred annotations, PEP 695 type statements).
"""
import argparse
import os
import shlex
import shutil
import subprocess
import sys
import tempfile
from collections.abc import Iterable, Sequence
from dataclasses import dataclass
from pathlib import Path
type GlobList = list[str]
type PathList = list[str]
DEFAULT_IGNORES: tuple[str, ...] = (
"!.git/*",
"!.env*",
"!*lock*",
"!*.lock",
"!*.min.*",
)
EXAMPLES = """
Examples:
catai # Dump entire current repo
catai src/ # Dump everything inside src/
catai src -x legacy # Everything in src/ except src/legacy/
catai src -x '*.test.ts' -x dist # Exclude multiple patterns
catai src '!legacy' '!*.spec.js' # Exclude using '!' shorthand
catai -T src/main.rs # Single file without <project_tree>
catai -i src -x vendor # Pick files in fzf
catai -y # Pick files/folders in Yazi
catai -d # Only git-modified & untracked files
"""
@dataclass(slots=True, frozen=True)
class Config:
paths: PathList
rg_globs: GlobList
dirty: bool
no_tree: bool
interactive: bool
yazi: bool
print_cmd: bool
def expand_exclude(pattern: str) -> GlobList:
"""Expand a user exclusion pattern into ripgrep glob flags."""
clean = pattern.lstrip("!").rstrip("/")
if not clean:
return []
# Normalize absolute paths or leading './' so ripgrep globs match properly
try:
p = Path(clean)
if p.is_absolute():
clean = str(p.relative_to(Path.cwd()))
elif clean.startswith("./"):
clean = clean[2:]
except ValueError:
pass
return [
f"--glob=!{clean}",
f"--glob=!{clean}/**",
f"--glob=!**/{clean}",
f"--glob=!**/{clean}/**",
]
def parse_args(argv: Sequence[str] | None = None) -> Config:
parser = argparse.ArgumentParser(
prog="catai",
description="Collect project tree and files in XML tags for LLM context.",
epilog=EXAMPLES,
formatter_class=argparse.RawDescriptionHelpFormatter,
)
parser.add_argument(
"targets",
nargs="*",
help="Files, directories, or '!exclude' globs",
)
parser.add_argument(
"-x",
"--exclude",
action="append",
default=[],
metavar="PATTERN",
help="Exclude folder or file glob (repeatable)",
)
parser.add_argument(
"-d",
"--dirty",
action="store_true",
help="Only git modified & untracked files",
)
parser.add_argument(
"-T",
"--no-tree",
action="store_true",
help="Skip <project_tree> header",
)
parser.add_argument(
"-i",
"--interactive",
action="store_true",
help="Interactive fzf file picker",
)
parser.add_argument(
"-y",
"--yazi",
action="store_true",
help="Interactive Yazi file/folder chooser",
)
parser.add_argument(
"--print-cmd",
action="store_true",
help="Print selected command instead of executing (used by zsh print -z)",
)
ns = parser.parse_args(argv)
rg_globs: GlobList = [f"--glob={g}" for g in DEFAULT_IGNORES]
for ex in ns.exclude:
rg_globs.extend(expand_exclude(ex))
paths: PathList = []
for target in ns.targets:
match target:
case s if s.startswith("!"):
rg_globs.extend(expand_exclude(s[1:]))
case s:
paths.append(s)
return Config(
paths=paths,
rg_globs=rg_globs,
dirty=ns.dirty,
no_tree=ns.no_tree,
interactive=ns.interactive,
yazi=ns.yazi,
print_cmd=ns.print_cmd,
)
def run_lines(cmd: Sequence[str]) -> list[str]:
"""Run a command and return non-empty stdout lines."""
res = subprocess.run(cmd, capture_output=True, text=True, check=False)
return [line for line in res.stdout.splitlines() if line]
def render_tree(file_paths: Iterable[str]) -> str:
"""Pure-Python directory tree renderer (no external 'tree' binary required)."""
type TreeDict = dict[str, TreeDict]
root: TreeDict = {}
for raw_path in sorted(file_paths):
parts = Path(raw_path).parts
curr = root
for part in parts:
if part in (".", ""):
continue
curr = curr.setdefault(part, {})
lines: list[str] = ["."]
def walk(node: TreeDict, prefix: str = "") -> None:
items = list(node.items())
for idx, (name, children) in enumerate(items):
is_last = idx == len(items) - 1
connector = "└── " if is_last else "├── "
lines.append(f"{prefix}{connector}{name}")
if children:
extension = " " if is_last else "│ "
walk(children, prefix + extension)
walk(root)
return "\n".join(lines)
def pick_with_fzf(cfg: Config) -> PathList:
rg_cmd = [
"rg",
"--files",
"--hidden",
"--sort",
"path",
*cfg.rg_globs,
"--",
*cfg.paths,
]
all_files = run_lines(rg_cmd)
if not all_files:
return []
preview = "bat --color=always {} 2>/dev/null || cat {}"
proc = subprocess.run(
["fzf", "-m", "--preview", preview],
input="\n".join(all_files),
stdout=subprocess.PIPE,
text=True,
check=False,
)
return [line for line in proc.stdout.splitlines() if line]
def pick_with_yazi(cfg: Config) -> PathList:
with tempfile.NamedTemporaryFile(prefix="yazi-chooser.", delete=False) as tmp:
tmp_path = Path(tmp.name)
try:
subprocess.run(["yazi", f"--chooser-file={tmp_path}", *cfg.paths], check=False)
if not tmp_path.exists() or tmp_path.stat().st_size == 0:
return []
raw_picked = [
line for line in tmp_path.read_text(encoding="utf-8").splitlines() if line
]
cwd = Path.cwd()
rel_picked: PathList = []
for p in raw_picked:
path_obj = Path(p)
try:
rel_picked.append(str(path_obj.relative_to(cwd)))
except ValueError:
rel_picked.append(str(path_obj))
return rel_picked
finally:
tmp_path.unlink(missing_ok=True)
def collect_files(cfg: Config, target_paths: PathList) -> tuple[PathList, PathList]:
"""Return (tree_files, matched_non_empty_text_files)."""
cwd = Path.cwd().resolve()
rel_targets: PathList = []
for p in target_paths:
resolved = Path(p).resolve()
try:
rel = str(resolved.relative_to(cwd))
rel_targets.append("." if rel == "" else rel)
except ValueError:
rel_targets.append(os.path.relpath(resolved, cwd))
if cfg.dirty:
dirty_cmd = [
"git",
"ls-files",
"-m",
"-o",
"--exclude-standard",
"--",
*rel_targets,
]
candidates = run_lines(dirty_cmd)
if not candidates:
return [], []
else:
candidates = rel_targets
# Non-empty, non-binary files via ripgrep '^'
rg_content_cmd = [
"rg",
"-l",
"--hidden",
"--sort",
"path",
*cfg.rg_globs,
"^",
"--",
*candidates,
]
matched_files = run_lines(rg_content_cmd)
# Single-file edge case: `rg -l '^' single_file.txt` prints the filename,
# Ensure it is always included if non-empty
if cfg.no_tree or not matched_files:
return [], matched_files
rg_tree_cmd = [
"rg",
"--files",
"--hidden",
"--sort",
"path",
*cfg.rg_globs,
"--",
*rel_targets,
]
tree_files = run_lines(rg_tree_cmd)
return tree_files, matched_files
def dump_output(tree_files: PathList, files: PathList, show_tree: bool) -> None:
out = sys.stdout
if show_tree and tree_files:
out.write("<project_tree>\n")
out.write(render_tree(tree_files))
out.write("\n</project_tree>\n\n")
for filepath in files:
path = Path(filepath)
out.write(f'<file path="{filepath}">\n')
out.flush()
try:
with path.open("rb") as f:
shutil.copyfileobj(f, sys.stdout.buffer)
# Ensure trailing newline before closing tag
if path.stat().st_size > 0:
with path.open("rb") as f:
f.seek(-1, os.SEEK_END)
if f.read(1) != b"\n":
out.write("\n")
except OSError as exc:
sys.stderr.write(f"Error reading {filepath}: {exc}\n")
out.write("</file>\n\n")
def main() -> int:
cfg = parse_args()
# Handle interactive pickers (-i / -y)
if cfg.interactive or cfg.yazi:
picked = pick_with_yazi(cfg) if cfg.yazi else pick_with_fzf(cfg)
if not picked:
return 1
if cfg.print_cmd:
print(f"catai {shlex.join(picked)}")
return 0
tree_files, files = collect_files(cfg, picked)
else:
tree_files, files = collect_files(cfg, cfg.paths)
if not files:
msg = (
"No dirty or untracked files found."
if cfg.dirty
else "No matching text files found."
)
sys.stderr.write(f"{msg}\n")
return 1
dump_output(tree_files, files, show_tree=not cfg.no_tree)
return 0
if __name__ == "__main__":
raise SystemExit(main())
@@ -15,18 +15,18 @@
"interval": 30, "interval": 30,
"format": " /mnt/hdd1 {specific_free:0.0f} of {specific_total:0.0f} GB free", "format": " /mnt/hdd1 {specific_free:0.0f} of {specific_total:0.0f} GB free",
"unit": "GB", "unit": "GB",
"on-click": "swaymsg exec 'footclient --app-id floating_shell --window-size-chars 150x45 gdu -d'" "on-click": "swaymsg exec 'footclient --app-id floating_shell --window-size-chars 80x45 ncdu -x /mnt/hdd1/'"
}, },
"custom/nvidia": { "custom/nvidia": {
"exec": "nvidia-smi --query-gpu=utilization.gpu,memory.used,temperature.gpu --format=csv,nounits,noheader | sed 's/\\([0-9]\\+\\), \\([0-9]\\+\\), \\([0-9]\\+\\)/\\1% \\2MB \\3°C/g'", "exec": "nvidia-smi --query-gpu=utilization.gpu,memory.used,temperature.gpu --format=csv,nounits,noheader | sed 's/\\([0-9]\\+\\), \\([0-9]\\+\\), \\([0-9]\\+\\)/\\1% \\2MB \\3°C/g'",
"format": "󰓅 {}", "format": "󰓅 {}",
"on-click": "swaymsg exec 'footclient --app-id floating_shell --window-size-chars 150x45 watch nvidia-smi'", "on-click": "swaymsg exec 'footclient --app-id floating_shell --window-size-chars 120x45 nvtop'",
"interval": 1 "interval": 1
}, },
"modules-right": [ "modules-right": [
"idle_inhibitor", "idle_inhibitor",
"cpu", "cpu",
"temperature", "custom/cputemp",
"memory", "memory",
"custom/nvidia", "custom/nvidia",
"disk#root", "disk#root",
@@ -36,7 +36,6 @@
"battery", "battery",
"clock", "clock",
"tray", "tray",
"custom/notification", "custom/power"
"custom/power",
] ]
} }
+23 -17
View File
@@ -1,20 +1,26 @@
# input # input
# input type:tablet_tool map_to_region 2560 0 2560 1440 input type:tablet_tool map_to_region 2560 0 2560 1440
# Monitor definition # output
set $main_monitor "BNQ BenQ RD280UG EM95T00073087" exec create_output HEADLESS-1
output DP-1 resolution 5120x1440 position 0 0
output HEADLESS-1 resolution 2560x1440 position 5120 0
bindsym $mod+x output create HEADLESS-1
bindsym $mod+Shift+x output HEADLESS-1 unplug
# Output configuration workspace 1 output DP-1
output $main_monitor mode 3840x2560@119.991Hz scale 1.25 workspace 2 output DP-1
workspace 3 output DP-1
# Workspace assignments workspace 4 output DP-1
workspace 1 output $main_monitor workspace 5 output DP-1
workspace 2 output $main_monitor workspace 6 output DP-1
workspace 3 output $main_monitor workspace 7 output DP-1
workspace 4 output $main_monitor workspace 8 output DP-1
workspace 5 output $main_monitor workspace 9 output DP-1
workspace 6 output $main_monitor workspace 10 output DP-1
workspace 7 output $main_monitor workspace INS output HEADLESS-1
workspace 8 output $main_monitor workspace DEL output HEADLESS-1
workspace 9 output $main_monitor workspace HOM output HEADLESS-1
workspace 10 output $main_monitor workspace END output HEADLESS-1
workspace PUp output HEADLESS-1
workspace PDn output HEADLESS-1
@@ -15,18 +15,18 @@
"interval": 30, "interval": 30,
"format": " /mnt/hdd1 {specific_free:0.0f} of {specific_total:0.0f} GB free", "format": " /mnt/hdd1 {specific_free:0.0f} of {specific_total:0.0f} GB free",
"unit": "GB", "unit": "GB",
"on-click": "swaymsg exec 'footclient --app-id floating_shell --window-size-chars 150x45 gdu -d'" "on-click": "swaymsg exec 'footclient --app-id floating_shell --window-size-chars 80x45 ncdu -x /mnt/hdd1/'"
}, },
"custom/nvidia": { "custom/nvidia": {
"exec": "nvidia-smi --query-gpu=utilization.gpu,memory.used,temperature.gpu --format=csv,nounits,noheader | sed 's/\\([0-9]\\+\\), \\([0-9]\\+\\), \\([0-9]\\+\\)/\\1% \\2MB \\3°C/g'", "exec": "nvidia-smi --query-gpu=utilization.gpu,memory.used,temperature.gpu --format=csv,nounits,noheader | sed 's/\\([0-9]\\+\\), \\([0-9]\\+\\), \\([0-9]\\+\\)/\\1% \\2MB \\3°C/g'",
"format": "󰓅 {}", "format": "󰓅 {}",
"on-click": "swaymsg exec 'footclient --app-id floating_shell --window-size-chars 150x45 watch nvidia-smi'", "on-click": "swaymsg exec 'footclient --app-id floating_shell --window-size-chars 120x45 nvtop'",
"interval": 1 "interval": 1
}, },
"modules-right": [ "modules-right": [
"idle_inhibitor", "idle_inhibitor",
"cpu", "cpu",
"temperature", "custom/cputemp",
"memory", "memory",
"custom/nvidia", "custom/nvidia",
"disk#root", "disk#root",
@@ -36,7 +36,6 @@
"battery", "battery",
"clock", "clock",
"tray", "tray",
"custom/notification", "custom/power"
"custom/power",
] ]
} }
+1 -1
View File
@@ -1,2 +1,2 @@
output * resolution 5120x1440 output DP-1 resolution 5120x1440
exec "regreet; swaymsg exit" exec "regreet; swaymsg exit"
+2 -3
View File
@@ -12,7 +12,7 @@
"modules-right": [ "modules-right": [
"idle_inhibitor", "idle_inhibitor",
"cpu", "cpu",
"temperature", "custom/cputemp",
"memory", "memory",
"disk#root", "disk#root",
"backlight", "backlight",
@@ -20,7 +20,6 @@
"battery", "battery",
"clock", "clock",
"tray", "tray",
"custom/notification", "custom/power"
"custom/power",
] ]
} }
+1 -1
View File
@@ -1,2 +1,2 @@
output * resolution 2736x1824 scale 1.6 output eDP-1 resolution 2736x1824 scale 1.6
exec "regreet; swaymsg exit" exec "regreet; swaymsg exit"
@@ -12,7 +12,7 @@
"modules-right": [ "modules-right": [
"idle_inhibitor", "idle_inhibitor",
"cpu", "cpu",
"temperature", "custom/cputemp",
"memory", "memory",
"disk#root", "disk#root",
"backlight", "backlight",
@@ -20,7 +20,6 @@
"battery", "battery",
"clock", "clock",
"tray", "tray",
"custom/notification", "custom/power"
"custom/power",
] ]
} }
+1 -1
View File
@@ -1,2 +1,2 @@
output * resolution 2496x1664 scale 1.6 output eDP-1 resolution 2496x1664 scale 1.6
exec "regreet; swaymsg exit" exec "regreet; swaymsg exit"
+21 -24
View File
@@ -14,7 +14,6 @@
# - ... etc # - ... etc
# - sudo enable ufw # - sudo enable ufw
from difflib import unified_diff from difflib import unified_diff
from getpass import getuser
from os.path import lexists from os.path import lexists
from pathlib import Path from pathlib import Path
from shutil import rmtree from shutil import rmtree
@@ -22,15 +21,14 @@ from subprocess import run
from urllib.request import urlretrieve from urllib.request import urlretrieve
HOSTNAME = open("/etc/hostname").read().strip() HOSTNAME = open("/etc/hostname").read().strip()
HOME_TGT = Path.home() HOME_TGT = Path("~").expanduser()
ROOT_TGT = Path("/") ROOT_TGT = Path("/")
DOTFILES = Path(__file__).resolve().parent DOTFILES = HOME_TGT / "dotfiles"
HOME_SRC = DOTFILES / "HOME" HOME_SRC = DOTFILES / "HOME"
ROOT_SRC = DOTFILES / "ROOT" ROOT_SRC = DOTFILES / "ROOT"
CFG_TGT = HOME_TGT / ".config" CFG_TGT = HOME_TGT / ".config"
CFG_SRC = DOTFILES / "CONFIG" CFG_SRC = DOTFILES / "CONFIG"
CUSTOM_SRC = DOTFILES / f"custom-{HOSTNAME}" CUSTOM_SRC = DOTFILES / f"custom-{HOSTNAME}"
USERNAME = getuser()
installmap = dict( installmap = dict(
fonts=( fonts=(
"noto-fonts-emoji", "noto-fonts-emoji",
@@ -52,12 +50,12 @@ installmap = dict(
tmux=("tmux", "urlscan"), tmux=("tmux", "urlscan"),
editors=( editors=(
"neovim", "neovim",
"helix",
"ripgrep", "ripgrep",
"npm", # required for nvim plugins "npm", # required for nvim plugins
"go", # required for vim-hexokinase build "go", # required for vim-hexokinase build
"tree-sitter-cli", # required for nvim treesitter
), ),
utils=("uv", "gdu", "unzip", "jq", "bluetui"), utils=("uv", "ncdu", "unzip", "jq", "bluetui"),
gittools=( gittools=(
"tig", "tig",
"diff-so-fancy", "diff-so-fancy",
@@ -66,8 +64,6 @@ installmap = dict(
"git-lfs", "git-lfs",
"lazygit", "lazygit",
"bat", "bat",
"gnome-keyring", # for git credentials
"seahorse", # keyring ui
), ),
readers=( readers=(
"sioyek", "sioyek",
@@ -90,19 +86,19 @@ installmap = dict(
"v4l-utils", "v4l-utils",
# photos # photos
"qimgv", "qimgv",
"kimageformats5", # heif support "digikam",
# music # music
"quodlibet", "quodlibet",
"gst-plugins-good", # required deb "gst-plugins-good", # required deb
# audio # audio
"pamixer", "pamixer",
"noisetorch",
), ),
filebrowsers=( filebrowsers=(
"yazi", "yazi",
"ranger", "ranger",
"pcmanfm", "pcmanfm",
"thunar", "thunar",
"ouch",
"gparted", "gparted",
"sshfs", "sshfs",
"file-roller", "file-roller",
@@ -115,32 +111,35 @@ installmap = dict(
"qutebrowser", "qutebrowser",
"firefox", "firefox",
"google-chrome", "google-chrome",
"microsoft-edge-stable-bin",
"w3m", "w3m",
"python-adblock", # for qutebrowser ad blocker "python-adblock", # for qutebrowser ad blocker
"python-tldextract", "python-tldextract",
"bitwarden-cli", # for qutebrowser autofill "bitwarden-cli", # for qutebrowser autofill
), ),
chat=("discord", "gurk"), chat=("discordo-git", "gurk"),
emailcalrss=( emailcalrss=(
"khard", # contacts "khard", # contacts
"khal", # calendar "khal", # calendar
"aerc", # email "aerc", # email
"eilmeldung", # rss reader "newsboat", # rss reader
"vdirsyncer", # sync calendar+contacts "vdirsyncer", # sync calendar+contacts
"pandoc", # md2html for aerc "pandoc", # md2html for aerc
"pass", # password manager for aerc "pass", # password manager for aerc and newsboat
"w3m", # terminal browser for aerc "w3m", # terminal browser for aerc and newsboat
"urlscan", # url finder for newsboat
"python-aiohttp-oauthlib", # for google vdirsyncer "python-aiohttp-oauthlib", # for google vdirsyncer
), ),
monitors=( monitors=(
"htop", # hardware "htop", # hardware
"btop", # hardware "btop", # hardware
"nvtop", # gpu "nvtop", # gpu
"systemctl-tui", # systemd "lazyjournal", # journald
"isd", # systemd
"bandwhich", # network "bandwhich", # network
"sysstat", "sysstat",
), ),
apps=("keepassxc", "bitwarden", "qalculate-gtk", "discord"), apps=("keepassxc", "bitwarden", "qalculate-gtk", "vesktop"),
sway=( sway=(
"xdg-terminal-exec", "xdg-terminal-exec",
# visuals # visuals
@@ -280,7 +279,6 @@ def install_zsh(overwrite: bool, reinstall: bool) -> None:
run("chsh -s /usr/bin/zsh".split()) run("chsh -s /usr/bin/zsh".split())
helper_maybe_copy(CFG_SRC, CFG_TGT, "starship.toml", overwrite, symlink=True) helper_maybe_copy(CFG_SRC, CFG_TGT, "starship.toml", overwrite, symlink=True)
helper_maybe_copy(HOME_SRC, HOME_TGT, ".zshenv", overwrite, symlink=True) helper_maybe_copy(HOME_SRC, HOME_TGT, ".zshenv", overwrite, symlink=True)
helper_maybe_copy(HOME_SRC, HOME_TGT, ".local/bin/catai", overwrite, symlink=True)
def install_tmux(overwrite: bool, reinstall: bool) -> None: def install_tmux(overwrite: bool, reinstall: bool) -> None:
@@ -299,6 +297,7 @@ def install_tmux(overwrite: bool, reinstall: bool) -> None:
def install_editors(overwrite: bool, reinstall: bool) -> None: def install_editors(overwrite: bool, reinstall: bool) -> None:
helper_install(*installmap["editors"], reinstall=reinstall) helper_install(*installmap["editors"], reinstall=reinstall)
helper_clone_foldercontents(CFG_SRC, CFG_TGT, "nvim", overwrite) helper_clone_foldercontents(CFG_SRC, CFG_TGT, "nvim", overwrite)
helper_clone_foldercontents(CFG_SRC, CFG_TGT, "helix", overwrite)
def install_gittools(overwrite: bool, reinstall: bool) -> None: def install_gittools(overwrite: bool, reinstall: bool) -> None:
@@ -330,9 +329,7 @@ def install_filebrowsers(overwrite: bool, reinstall: bool) -> None:
"yazi-rs/plugins:smart-enter", "yazi-rs/plugins:smart-enter",
"yazi-rs/plugins:smart-filter", "yazi-rs/plugins:smart-filter",
"yazi-rs/plugins:toggle-pane", "yazi-rs/plugins:toggle-pane",
"ahkohd/eza-preview",
"boydaihungst/file-extra-metadata", "boydaihungst/file-extra-metadata",
"ya pkg add ndtoan96/ouch",
]: ]:
run(f"ya pkg add {plugin}".split()) run(f"ya pkg add {plugin}".split())
tgt = ".local/share/applications/userapp-file-roller.desktop" tgt = ".local/share/applications/userapp-file-roller.desktop"
@@ -348,6 +345,7 @@ def install_netbrowsers(overwrite: bool, reinstall: bool) -> None:
def install_chat(overwrite: bool, reinstall: bool) -> None: def install_chat(overwrite: bool, reinstall: bool) -> None:
helper_install(*installmap["chat"], reinstall=reinstall) helper_install(*installmap["chat"], reinstall=reinstall)
helper_clone_foldercontents(CFG_SRC, CFG_TGT, "discordo", overwrite)
helper_clone_foldercontents(CFG_SRC, CFG_TGT, "gurk", overwrite) helper_clone_foldercontents(CFG_SRC, CFG_TGT, "gurk", overwrite)
@@ -358,12 +356,13 @@ def install_monitors(overwrite: bool, reinstall: bool) -> None:
def install_emailcalrss(overwrite: bool, reinstall: bool) -> None: def install_emailcalrss(overwrite: bool, reinstall: bool) -> None:
helper_install(*installmap["emailcalrss"], reinstall=reinstall) helper_install(*installmap["emailcalrss"], reinstall=reinstall)
for tgt in ["vdirsyncer", "khard", "khal", "aerc"]: for tgt in ["vdirsyncer", "khard", "khal", "aerc", "newsboat"]:
helper_clone_foldercontents(CFG_SRC, CFG_TGT, tgt, overwrite) helper_clone_foldercontents(CFG_SRC, CFG_TGT, tgt, overwrite)
tgt = ".local/share/applications/userapp-khalimport.desktop" tgt = ".local/share/applications/userapp-khalimport.desktop"
helper_maybe_copy(HOME_SRC, HOME_TGT, tgt, overwrite, symlink=True) helper_maybe_copy(HOME_SRC, HOME_TGT, tgt, overwrite, symlink=True)
run("systemctl enable --user --now vdirsyncer.timer".split()) run("systemctl enable --user --now vdirsyncer.timer".split())
run(f"chmod 600 {CFG_TGT / 'aerc/accounts.conf'}".split()) run(f"chmod 600 {CFG_TGT / 'aerc/accounts.conf'}".split())
(HOME_TGT / ".cache/newsboat").mkdir(exist_ok=True)
(HOME_TGT / "Calendars").mkdir(exist_ok=True) (HOME_TGT / "Calendars").mkdir(exist_ok=True)
(HOME_TGT / "Contacts").mkdir(exist_ok=True) (HOME_TGT / "Contacts").mkdir(exist_ok=True)
@@ -399,7 +398,7 @@ def install_sway(overwrite: bool, reinstall: bool) -> None:
"waybar", "waybar",
"gtklock", "gtklock",
"gtk-3.0", "gtk-3.0",
"swaync", "mako",
"fuzzel", "fuzzel",
"nwg-drawer", "nwg-drawer",
"xdg-desktop-portal-wlr", "xdg-desktop-portal-wlr",
@@ -409,8 +408,6 @@ def install_sway(overwrite: bool, reinstall: bool) -> None:
helper_clone_foldercontents(CFG_SRC, CFG_TGT, sub, overwrite) helper_clone_foldercontents(CFG_SRC, CFG_TGT, sub, overwrite)
helper_maybe_copy(CFG_SRC, CFG_TGT, "xdg-terminals.list", overwrite, symlink=True) helper_maybe_copy(CFG_SRC, CFG_TGT, "xdg-terminals.list", overwrite, symlink=True)
helper_maybe_copy(CFG_SRC, CFG_TGT, "mimeapps.list", overwrite, symlink=True) helper_maybe_copy(CFG_SRC, CFG_TGT, "mimeapps.list", overwrite, symlink=True)
# swaync configs
helper_clone_foldercontents(CFG_SRC, CFG_TGT, "swaync", overwrite)
# custom sway configs # custom sway configs
helper_clone_foldercontents(CUSTOM_SRC / "CONFIG", CFG_TGT, "sway", overwrite) helper_clone_foldercontents(CUSTOM_SRC / "CONFIG", CFG_TGT, "sway", overwrite)
# custom waybar configs # custom waybar configs
@@ -433,7 +430,7 @@ def configure_pytools(overwrite: bool) -> None:
def install_virtwin(overwrite: bool, reinstall: bool) -> None: def install_virtwin(overwrite: bool, reinstall: bool) -> None:
helper_install(*installmap["virtwin"], reinstall=reinstall) helper_install(*installmap["virtwin"], reinstall=reinstall)
run(["sudo", "usermod", "-aG", "libvirt", USERNAME]) run("sudo usermod -aG libvirt $USER".split())
run("sudo virsh net-start default".split()) run("sudo virsh net-start default".split())
run("sudo virsh net-autostart default".split()) run("sudo virsh net-autostart default".split())
run("systemctl enable --now libvirtd".split()) run("systemctl enable --now libvirtd".split())