Compare commits

..
49 Commits
Author SHA1 Message Date
Henrik Bakken f404c4410f tig bugfix 2026-10-25 00:49:02 +02:00
Henrik Bakken 84b09c0e48 catai upgrade 2026-10-25 00:49:02 +02:00
Henrik Bakken 67ef3a3059 nvim ftplugin bugfixes 2026-10-19 12:33:02 +02:00
Henrik Bakken d085d60bad qutebrowser+sway tweaks 2026-10-19 12:33:02 +02:00
Henrik Bakken 4b51cf4253 bugfix swayidle 2026-10-19 12:29:31 +02:00
Henrik Bakken 1b0c38a8d1 nvim git grep case sensitive 2026-10-19 12:29:31 +02:00
Henrik Bakken 02dcab9871 nvim ftplugin tweaks 2026-10-19 12:29:31 +02:00
Henrik Bakken 1ec951997b theming 2026-10-19 12:29:31 +02:00
Henrik Bakken eb82be6847 nvim gitsigns refresh 2026-10-19 12:29:31 +02:00
Henrik Bakken fbf7f3716d endos fixes 2026-10-19 12:29:31 +02:00
Henrik Bakken 5a09671d0e remove noisetorch 2026-10-19 12:29:31 +02:00
Henrik Bakken ff21471623 added ouch 2026-10-09 22:01:28 +02:00
Henrik Bakken 3a350b4f15 yazi revamp 2026-10-09 21:48:41 +02:00
Henrik Bakken 10df55cded nvim ftplugin cleanup - use local settings 2026-10-09 20:37:01 +02:00
Henrik Bakken e138d87f2c sway trying to fix unlocking 2026-10-09 11:34:13 +02:00
Henrik Bakken 6fe5f1a047 nvim split on cursor 2026-10-09 11:12:21 +02:00
Henrik Bakken 2f7cc0f43d aerc remove deprecated feature 2026-10-09 10:04:25 +02:00
Henrik Bakken cdf8164ed8 waybar cleanup + notifications 2026-10-08 23:42:53 +02:00
Henrik Bakken ee68c858fb atuin back to fulltext, omg 2026-10-08 21:54:57 +02:00
Henrik Bakken 19da4a0f06 swaync better 2026-10-08 21:54:57 +02:00
Henrik Bakken 46c2c5f97e tmux+nvim smart splits upgrade 2026-10-08 21:27:10 +02:00
Henrik Bakken f19d8c4f15 tmux+starship tweaks 2026-10-08 20:49:53 +02:00
Henrik Bakken 10b67325e8 sway display setting tweaks 2026-10-08 10:25:19 +02:00
Henrik Bakken b82de0988e gitconfig fixes - secure credentials 2026-10-07 23:00:03 +02:00
Henrik Bakken e219f9976e sioyek alias in .zshrc 2026-10-07 22:30:35 +02:00
Henrik Bakken 1bf1ac4664 sioyek visuals 2026-10-07 22:28:47 +02:00
Henrik Bakken 73ff813c6a qutebrowser tweaks 2026-10-07 22:21:14 +02:00
Henrik Bakken 7adc711bcd div tweaks incl yazi 2026-10-07 22:07:19 +02:00
Henrik Bakken dc9b1aaf4f gtklock safer poweroff 2026-10-07 21:41:28 +02:00
Henrik Bakken 943dfe676d gtk disable sounds 2026-10-07 21:40:45 +02:00
Henrik Bakken 2148012cce tig add copy commit 2026-10-07 21:40:02 +02:00
Henrik Bakken cd40badbe0 waybar use default temperature module 2026-10-07 21:36:37 +02:00
Henrik Bakken 50f61afdf6 styling fixes - less purple 2026-10-07 21:32:33 +02:00
Henrik Bakken 0891f4ffdb delete nushell+discordo+helix configs 2026-10-07 21:15:40 +02:00
Henrik Bakken 3dc419248f atuin+btop+fuzzel tweaks 2026-10-07 21:14:22 +02:00
Henrik Bakken fbbb662cf9 delete mako config 2026-10-07 21:13:54 +02:00
Henrik Bakken af5e04a5e4 tmux fix terminal and copy 2026-10-07 21:05:23 +02:00
Henrik Bakken 84432e1f82 tmux better moving of panes 2026-10-07 21:05:05 +02:00
Henrik Bakken 3428c87856 nvim theme to gruvbox-material 2026-10-07 20:36:47 +02:00
Henrik Bakken 13382f42fa sway tweaks 2026-10-07 13:28:46 +02:00
Henrik Bakken 43edbad2f6 sway theming 2026-10-07 13:28:28 +02:00
Henrik Bakken c481cbc15f mako -> swaync 2026-10-07 13:27:36 +02:00
Henrik Bakken bcdb3ea110 nvim updates 2026-10-06 23:32:50 +02:00
Henrik Bakken b5621616d8 zsh added krew (k8s tool) to path 2026-10-06 23:32:27 +02:00
Henrik Bakken bdfc601b5f nvim updates 2026-10-06 23:32:27 +02:00
Henrik Bakken 1687bc25d1 atuin tweak 2026-09-29 14:20:08 +02:00
Henrik Bakken 387064a349 nvim bugfixes 2026-09-18 00:09:11 +02:00
Henrik Bakken 8b2ce18321 sway floating qalculate and matplotlib 2026-09-18 00:08:20 +02:00
Henrik Bakken b6fdb23275 catai sorted 2026-09-18 00:08:11 +02:00
51 changed files with 1200 additions and 931 deletions
-1
View File
@@ -1,5 +1,4 @@
[general]
enable-osc8=true
log-file=~/aerc.log
[ui]
+5 -13
View File
@@ -74,7 +74,7 @@ inline_height = 20
## the maximum number of lines the interface should take up
## when atuin is invoked from a shell up-key binding
## the accepted values are identical to those of "inline_height"
inline_height_shell_up_key_binding = 5
inline_height_shell_up_key_binding = 20
## Invert the UI - put the search bar at the top , Default to `false`
# invert = false
@@ -108,11 +108,7 @@ ctrl_n_shortcuts = true
## with ^ or end with $, they'll match anywhere in the command.
## For details on the supported regular expression syntax, see
## https://docs.rs/regex/latest/regex/#syntax
history_filter = [
"^exit$",
"^ .*",
"_secret="
]
history_filter = [ "^exit$", "^ .*", "_secret=" ]
## prevent commands run with cwd matching any of these regexes from being written
## to history. Note that these regular expressions are unanchored, i.e. if they don't
@@ -207,14 +203,10 @@ keymap_mode = "auto"
# ]
## 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
# ignored_commands = [
# "cd",
# "ls",
# "vi"
# ]
# ignored_commands = [ "cd", "ls", "vi" ]
[keys]
# Defaults to true. If disabled, using the up/down key won't exit the TUI when scrolled past the first/last entry.
@@ -281,4 +273,4 @@ records = true
# filters = [ "global", "host", "session", "workspace", "directory" ]
[ui]
columns = ["datetime", "duration", "host", "command"]
columns = [ "datetime", "duration", "host", "command" ]
+2 -2
View File
@@ -5,7 +5,7 @@
color_theme = "Default"
#* If the theme set background should be shown, set to False if you want terminal background transparency.
theme_background = true
theme_background = false
#* Sets if 24-bit truecolor should be used, will convert 24-bit colors to 256 color (6x6x6 color cube) if false.
truecolor = true
@@ -27,7 +27,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.
#* Conflicting keys for h:"help" and k:"kill" is accessible while holding shift.
vim_keys = false
vim_keys = true
#* Disable all mouse events.
disable_mouse = false
-144
View File
@@ -1,144 +0,0 @@
# 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
+11 -13
View File
@@ -1,6 +1,6 @@
# output=<not set>
font=JetBrainsMono-Regular:size=14
dpi-aware=no
dpi-aware=auto
# use-bold=no
prompt="❯ "
# placeholder=
@@ -9,7 +9,7 @@ icon-theme=Qogir-dark
# fields=filename,name,generic
# password-character=*
# filter-desktop=no
# match-mode=fzf
match-mode=fzf
# sort-result=yes
# match-counter=no
# delayed-filter-ms=300
@@ -43,17 +43,15 @@ exit-on-keyboard-focus-loss=no
# match-workers=<number of logical CPUs>
[colors]
background=08052bdd
text=e3e3eaff
prompt=ff7f7fff
# placeholder=ffd966ff
input=ff7f7fff
match=FFE57Fff
selection-match=FFE57Fff
selection=44475add
selection-text=FFFFFFff
# counter=93a1a1ff
border=7f3fbf55
background=0a0a0aff
text=ffffffff
prompt=00e5ffff
input=ffffffff
match=00e5ffff
selection-match=00e5ffff
selection=333333ff
selection-text=ffffffff
border=00e5ffff
[border]
# width=1
+7 -6
View File
@@ -1,16 +1,17 @@
[Settings]
gtk-theme-name=Arc-Dark
gtk-icon-theme-name=Qogir-dark
gtk-icon-theme-name=Qogir-Dark
gtk-font-name=Noto Sans 10
gtk-cursor-theme-name=Qogir-dark
gtk-cursor-theme-size=0
gtk-cursor-theme-name=Qogir-Dark
gtk-cursor-theme-size=20
gtk-toolbar-style=GTK_TOOLBAR_BOTH_HORIZ
gtk-toolbar-icon-size=GTK_ICON_SIZE_LARGE_TOOLBAR
gtk-button-images=0
gtk-menu-images=0
gtk-enable-event-sounds=1
gtk-enable-input-feedback-sounds=1
gtk-enable-event-sounds=0
gtk-enable-input-feedback-sounds=0
gtk-xft-antialias=1
gtk-xft-hinting=1
gtk-xft-hintstyle=hintmedium
gtk-xft-hintstyle=hintslight
gtk-xft-rgba=rgb
gtk-application-prefer-dark-theme=1
+2 -2
View File
@@ -1,5 +1,5 @@
[main]
gtk-theme=Arc-Dark
gtk-theme-name=Adwaita-dark
time-format=%H:%M
start-hidden=1
modules=powerbar-module
@@ -13,7 +13,7 @@ under-clock=true
show-labels=true
linked-buttons=true
reboot-command=systemctl reboot
poweroff-command=systemctl -i poweroff
poweroff-command=systemctl poweroff
suspend-command=systemctl suspend
userswitch-command=
logout-command=swaymsg exit
+18 -16
View File
@@ -1,43 +1,45 @@
* {
border: none;
text-shadow: 1px 1px 3px rgba(0, 0, 0, 0.8)
text-shadow: 1px 1px 3px rgba(0, 0, 0, 0.9);
border-radius: 0px;
}
window {
background-image: url("EndeavourOS_Astronaut_SpaceWalk.png");
background-size: cover;
background-repeat: no-repeat;
background-position: center;
background-color: black;
background-color: #0a0a0a;
}
#clock-label {
font-family: JetBrainsMono;
font-size: 64.0px;
font-size: 64px;
color: #00e5ff;
}
#unlock-button {
background: none;
background-color: rgba(127, 63, 191, 0.4);
border: 2px solid rgba(127, 63, 191, 0.5);
background-color: rgba(10, 10, 10, 0.8);
border: 2px solid #333333;
padding: 4px;
color: #ffffff;
}
#unlock-button:hover {
background-color: rgba(127, 63, 191, 0.9);
border-color: #00e5ff;
background-color: #000000;
}
#input-field {
border-radius: 10px;
background-color: rgba(127, 127, 255, 0.1);
border: 2px solid rgba(127, 63, 191, 0.5);
background-color: rgba(0, 0, 0, 0.8);
border: 2px solid #00e5ff;
padding-top: 5px;
padding-bottom: 5px;
color: #ffffff;
}
#powerbar-box button {
background: none;
background-color: rgba(127, 63, 191, 0.4);
border: 2px solid rgba(127, 63, 191, 0.5);
border-radius: 10px;
padding: 4px;
background-color: rgba(10, 10, 10, 0.8);
border: 2px solid #333333;
padding: 6px;
}
#powerbar-box button:hover {
background-color: rgba(127, 63, 191, 0.9);
border-color: #00e5ff;
color: #00e5ff;
}
#input-label {
font-size: 0px;
-53
View File
@@ -1,53 +0,0 @@
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
@@ -1,42 +0,0 @@
[[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"] }
-27
View File
@@ -1,27 +0,0 @@
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
-182
View File
@@ -1,182 +0,0 @@
$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
@@ -0,0 +1,2 @@
vim.opt_local.number = true
vim.opt_local.relativenumber = true
+11
View File
@@ -0,0 +1,11 @@
-- 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
@@ -0,0 +1,11 @@
-- 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
@@ -0,0 +1,21 @@
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
@@ -0,0 +1,11 @@
-- 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
@@ -1,2 +0,0 @@
vim.o.number = true
vim.o.relativenumber = true
-4
View File
@@ -1,4 +0,0 @@
vim.o.colorcolumn = "100"
vim.opt.tabstop = 4
vim.opt.shiftwidth = 4
vim.opt.softtabstop = 4
-4
View File
@@ -1,4 +0,0 @@
vim.o.colorcolumn = "120"
vim.opt.tabstop = 4
vim.opt.shiftwidth = 4
vim.opt.softtabstop = 4
-5
View File
@@ -1,5 +0,0 @@
vim.o.colorcolumn = ""
vim.o.wrap = true
vim.opt.tabstop = 2
vim.opt.shiftwidth = 2
vim.opt.softtabstop = 2
-5
View File
@@ -1,5 +0,0 @@
vim.o.colorcolumn = "100"
vim.opt.tabstop = 4
vim.opt.shiftwidth = 4
vim.opt.softtabstop = 4
vim.g.no_python_maps = 1
+94 -45
View File
@@ -1,4 +1,4 @@
vim.g.mapleader = vim.keycode("<space>")
vim.g.mapleader = vim.keycode(" ")
vim.g.maplocalleader = vim.keycode("/")
vim.opt.langmap = "ø:"
@@ -83,7 +83,7 @@ vim.opt.spelllang = { "en" }
-- Splits
vim.opt.splitbelow = true
vim.opt.splitkeep = "screen"
vim.opt.splitkeep = "cursor"
vim.opt.splitright = true
-- Terminal & Status Column
@@ -108,7 +108,7 @@ vim.diagnostic.config({
float = { source = true },
})
vim.api.nvim_create_autocmd("BufEnter", {
vim.api.nvim_create_autocmd("FileType", {
desc = "Disable auto-commenting on new line",
pattern = "*",
callback = function() vim.opt_local.formatoptions:remove({ "r", "o" }) end,
@@ -118,6 +118,7 @@ vim.api.nvim_create_autocmd("BufEnter", {
-- MAPS
-- ----------------------------------------
vim.g.no_python_maps = 1
local map = vim.keymap.set
-- better esc
@@ -153,8 +154,8 @@ map("i", ".", ".<c-g>u")
map("i", ";", ";<c-g>u")
-- save file
map({ "x", "n", "s" }, "<leader>ww", "<cmd>w<cr><esc>", { desc = "Save File" })
map({ "x", "n", "s" }, "<leader>wa", "<cmd>wa<cr><esc>", { desc = "Save Files" })
map({ "x", "n", "s" }, "<leader>ww", "<cmd>w<cr>", { desc = "Save File" })
map({ "x", "n", "s" }, "<leader>wa", "<cmd>wa<cr>", { desc = "Save Files" })
-- quit
map("n", "<leader>qq", "<cmd>q<cr>", { desc = "Close Window" })
@@ -532,12 +533,16 @@ local function makespec_smearcursor()
}
end
local function makespec_hexokinase()
local function makespec_highlight_colors()
return {
-- coloring of colornames
"rrethy/vim-hexokinase",
build = function(plugin) vim.system({ "make", "hexokinase" }, { cwd = plugin.dir }):wait() end,
config = function() vim.g.Hexokinase_highlighters = { "virtual" } end,
"brenoprata10/nvim-highlight-colors",
event = "VeryLazy",
opts = {
render = "virtual",
virtual_symbol = "■",
enable_named_colors = true,
enable_tailwind = false,
},
}
end
@@ -828,10 +833,7 @@ local function makespec_diffview()
"DiffviewRefresh",
"DiffviewFileHistory",
},
keys = {
{ "<leader>gd", "<cmd>DiffviewOpen<cr>", desc = "DiffView Tab" },
{ "<leader>gh", "<cmd>DiffviewFileHistory<cr>", desc = "File History Tab" },
},
keys = {},
}
end
local function makespec_fugitive()
@@ -879,6 +881,7 @@ local function makespec_gitsigns()
vim.cmd.normal({ "]c", bang = true })
else
gs.nav_hunk("next")
vim.schedule(gs.preview_hunk_inline)
end
end
local function prev_hunk()
@@ -886,14 +889,14 @@ local function makespec_gitsigns()
vim.cmd.normal({ "[c", bang = true })
else
gs.nav_hunk("prev")
vim.schedule(gs.preview_hunk_inline)
end
end
local function bmap(mode, l, r, desc) vim.keymap.set(mode, l, r, { buffer = bufnr, desc = desc }) end
-- Navigation
bmap("n", "<M-,>", next_hunk, "Prev Hunk")
bmap("n", "<M-.>", prev_hunk, "Next Hunk")
bmap("n", "<M-,>", prev_hunk, "Prev Hunk")
bmap("n", "<M-.>", next_hunk, "Next Hunk")
bmap("n", "[h", prev_hunk, "Prev Hunk")
bmap("n", "]h", next_hunk, "Next Hunk")
@@ -904,6 +907,8 @@ local function makespec_gitsigns()
-- Hunk
bmap("n", "<leader>gi", gs.preview_hunk_inline, "Preview Hunk Inline")
bmap("n", "<leader>gp", gs.preview_hunk, "Preview Hunk")
bmap("n", "<leader>gd", gs.diffthis, "Diff This (Index)")
bmap("n", "<leader>gD", function() gs.diffthis("~") end, "Diff This (HEAD~1)")
bmap("n", "<leader>gq", gs.setqflist, "File Hunks to QuickFix")
bmap("n", "<leader>gQ", function() gs.setqflist("all") end, "All Hunks to QuickFix")
bmap("n", "<leader>gx", gs.reset_hunk, "Reset Hunk")
@@ -921,7 +926,7 @@ local function makespec_gitsigns()
bmap("n", "<leader>gtb", gs.toggle_current_line_blame, "Toggle Line Blame")
bmap("n", "<leader>gtd", gs.toggle_deleted, "Toggle Deleted")
-- Text object, e.g. for dih to delete hunk
-- Text Object (e.g., 'dih' to delete hunk)
bmap({ "o", "x" }, "ih", ":<C-U>Gitsigns select_hunk<CR>", "Select Hunk")
end
@@ -929,11 +934,6 @@ local function makespec_gitsigns()
"lewis6991/gitsigns.nvim",
event = { "BufReadPre", "BufNewFile" },
opts = {
signcolumn = true,
numhl = false,
linehl = false,
word_diff = false,
signs_staged_enable = false,
on_attach = on_gitsigns_attach,
},
}
@@ -1096,8 +1096,8 @@ local function makespec_snacks()
-- search
{ "<F1>", function() Snacks.picker.help() end, desc = "Help Pages" },
{ "<F9>", function() Snacks.picker.colorschemes() end, desc = "Colorschemes" },
{ "<M-/>", function() Snacks.picker.git_grep({ ignorecase = true }) end, desc = "Grep Git Files" },
{ "<leader>sg", function() Snacks.picker.git_grep({ ignorecase = true }) end, desc = "Grep Git Files" },
{ "<M-/>", function() Snacks.picker.git_grep({ ignorecase = false }) end, desc = "Grep Git Files" },
{ "<leader>sg", function() Snacks.picker.git_grep({ ignorecase = false }) end, desc = "Grep Git Files" },
{ "<leader>sa", function() Snacks.picker.grep({ untracked = true }) end, desc = "Grep Files" },
{ "<leader>*", function() Snacks.picker.grep_word() end, desc = "Visual selection or word", mode = { "n", "x" }, },
{ "<leader>/", function() Snacks.picker.search_history() end, desc = "Search History" },
@@ -1150,7 +1150,17 @@ local function makespecs_mini()
"echasnovski/mini.basics",
opts = { options = { basic = true, extra_ui = true }, mappings = { move_with_alt = true } },
},
{ "echasnovski/mini.icons", opts = {} },
{
"echasnovski/mini.icons",
opts = {},
init = function()
-- catch nvim-web-devicons
package.preload["nvim-web-devicons"] = function()
require("mini.icons").mock_nvim_web_devicons()
return package.loaded["nvim-web-devicons"]
end
end,
},
{
"echasnovski/mini.bracketed",
version = false,
@@ -1234,8 +1244,15 @@ end
local function makespec_smartsplits()
return {
"mrjones2014/smart-splits.nvim",
"smart-splits-nvim/smart-splits.nvim",
lazy = false,
opts = {
mux = { backend = "smart-splits-backend-tmux" },
move = { at_edge = "wrap" },
},
dependencies = {
{ "smart-splits-nvim/backend-tmux", main = "smart-splits-backend-tmux" },
},
-- stylua: ignore
keys = {
{ "<M-h>", function() require("smart-splits").move_cursor_left() end, desc = "Go to Left Window" },
@@ -1296,7 +1313,8 @@ local function makespec_flash()
opts = {
picker = {
win = {
input = { keys = { ["<a-s>"] = { "flash", mode = { "n", "i" } }, ["s"] = { "flash" } } },
input = { keys = { ["<a-s>"] = { "flash", mode = { "n", "i" } } } },
list = { keys = { ["s"] = { "flash" } } },
},
actions = {
flash = function(picker)
@@ -1354,9 +1372,10 @@ end
local function makespec_treesitter()
return {
"nvim-treesitter/nvim-treesitter",
branch = "main",
build = ":TSUpdate",
lazy = false,
main = "nvim-treesitter.configs",
main = "nvim-treesitter.config",
opts = {
ensure_installed = {
"bash",
@@ -1374,6 +1393,7 @@ local function makespec_treesitter()
"lua",
"markdown",
"markdown_inline",
"query", -- for folds
"python",
"regex",
"toml",
@@ -1394,6 +1414,41 @@ local function makespec_treesitter()
}
end
local function makespec_blink()
return {
"saghen/blink.cmp",
version = false,
event = "InsertEnter",
build = function() require("blink.cmp").build():pwait() end,
dependencies = {
"saghen/blink.lib",
},
opts = {
keymap = { preset = "default" },
completion = {
accept = { auto_brackets = { enabled = false } },
documentation = { auto_show = true },
},
fuzzy = { sorts = { "exact", "score", "sort_text" } },
sources = {
default = { "lsp", "buffer", "path" },
providers = {
lsp = {
-- Strip any completion item that tries to inject an auto-import
transform_items = function(_, items)
return vim.tbl_filter(function(item)
-- If the LSP item includes additionalTextEdits, it's mutating
-- lines outside your cursor (e.g., adding an import at the top)
return not (item.additionalTextEdits and #item.additionalTextEdits > 0)
end, items)
end,
},
},
},
},
}
end
local function makespec_treewalker()
return {
"aaronik/treewalker.nvim",
@@ -1470,8 +1525,6 @@ end
local function makespec_conform()
return {
"stevearc/conform.nvim",
-- Load conform right before you save a file, or when you trigger a keymap
event = { "BufWritePre" },
cmd = { "ConformInfo" },
keys = {
{
@@ -1509,6 +1562,7 @@ local function makespec_conform()
},
default_format_opts = {
lsp_format = "fallback",
timeout_ms = 1000,
},
formatters = {
javascript = { require_cwd = true },
@@ -1612,7 +1666,6 @@ local function makespec_noice()
override = {
["vim.lsp.util.convert_input_to_markdown_lines"] = true,
["vim.lsp.util.stylize_markdown"] = true,
["cmp.entry.get_documentation"] = true,
},
signature = { enabled = true, auto_open = { enabled = false, throttle = 50 } },
},
@@ -1643,13 +1696,17 @@ local lazyspecs = {
{ "ethanholz/nvim-lastplace", opts = {} }, -- keep location upon reopening
"tpope/vim-eunuch", -- Move, Rename etc
"tpope/vim-sleuth", -- do the right thing with tabstop and softtabstop
}
for _, spec in ipairs({
{
"esmuellert/codediff.nvim",
cmd = "CodeDiff",
opts = { diff = { compute_moves = true } },
},
makespec_lazydev(), -- nvim lsp helpers
makespec_snacks(),
makespec_conform(), -- autoformat
makespec_lspconfig(),
makespec_treesitter(),
makespec_blink(),
makespec_treewalker(),
makespec_todocomments(),
makespec_autotag(),
@@ -1665,7 +1722,7 @@ for _, spec in ipairs({
makespec_grugfar(),
-- visuals
makespec_smearcursor(),
makespec_hexokinase(),
makespec_highlight_colors(),
makespec_lualine(),
makespec_noice(),
-- file browsers
@@ -1676,18 +1733,10 @@ for _, spec in ipairs({
makespec_fugitive(),
makespec_diffview(),
makespec_vimflog(),
}) do
table.insert(lazyspecs, spec)
end
for _, specs in ipairs({
makespecs_themes(),
makespecs_mini(),
makespecs_previewers(),
}) do
for _, spec in ipairs(specs) do
table.insert(lazyspecs, spec)
end
end
}
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
if not (vim.uv or vim.loop).fs_stat(lazypath) then
vim.fn.system({
@@ -1705,4 +1754,4 @@ require("lazy").setup({
checker = { enabled = true },
rocks = { enabled = false },
})
vim.cmd("colorscheme sonokai")
vim.cmd("colorscheme gruvbox-material")
+23 -18
View File
@@ -1,38 +1,43 @@
window {
background-color: rgba (38, 18, 57, 0.9);
color: #eceff4;
border-radius: 30px
background-color: rgba(10, 10, 10, 0.95);
color: #ffffff;
border-radius: 0px;
border-right: 2px solid #00e5ff;
}
/* search entry */
entry {
box-shadow: 0 0 6px 5px #2e3440;
background-color: rgba (0, 0, 0, 0.5)
box-shadow: none;
border: 1px solid #00e5ff;
background-color: #000000;
color: #00e5ff;
padding: 5px;
}
button, image {
background-color: #3b4252;
background: none;
border: none;
margin: 10px
button,
image {
background-color: transparent;
background: none;
border: 1px solid transparent;
margin: 5px;
}
button:hover {
background-color: rgba (127, 63, 191, .4);
box-shadow: 0 0 6px 5px #190C26
background-color: #111111;
border: 1px solid #00e5ff;
box-shadow: none;
}
/* in case you wanted to give category buttons a different look */
#category-button {
margin: 0 0px 0 0px
margin: 0;
}
#pinned-box {
padding-bottom: 1px;
border-bottom: 1px solid gray
padding-bottom: 5px;
border-bottom: 2px solid #333333;
}
#files-box {
padding: 1px;
border: 1px solid gray
padding: 5px;
border: 1px solid #333333;
}
+43 -28
View File
@@ -1,4 +1,5 @@
from typing import TYPE_CHECKING
import os
if TYPE_CHECKING:
from qutebrowser.config.config import ConfigContainer
@@ -6,7 +7,6 @@ if TYPE_CHECKING:
c: "ConfigContainer" = c # type: ignore # noqa: F821
config: "ConfigAPI" = config # type: ignore # noqa: F821
from typing import TYPE_CHECKING
config.load_autoconfig(True)
config.bind("<", "tab-move -")
@@ -47,7 +47,6 @@ config.bind("tj", "back -t", mode="normal")
config.bind("wj", "back -w", mode="normal")
config.bind("tk", "forward -t", 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("D", "tab-close")
config.bind(",m", "hint links spawn -d mpv {hint-url}", mode="normal")
@@ -73,7 +72,7 @@ c.completion.open_categories = [
c.content.register_protocol_handler = False
c.content.blocking.enabled = True
c.content.fullscreen.window = True
c.content.blocking.method = "adblock"
c.content.blocking.method = "auto"
c.content.blocking.adblock.lists = [
"https://raw.githubusercontent.com/uBlockOrigin/uAssets/master/filters/filters.txt",
"https://raw.githubusercontent.com/uBlockOrigin/uAssets/master/filters/badware.txt",
@@ -86,7 +85,9 @@ c.content.blocking.adblock.lists = [
]
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: *"]
"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.height = "100%"
@@ -148,7 +149,21 @@ c.input.insert_mode.plugins = True
c.messages.timeout = 5000
c.qt.force_platform = "wayland"
c.qt.highdpi = True
c.qt.args = ["disable-features=WebAuth"] # makes BankID work
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.smooth = False
c.session.lazy_restore = False
@@ -182,16 +197,16 @@ c.tabs.undo_stack_size = 1000
c.tabs.width = "15%"
c.url.start_pages = "https://www.google.com/search?hl=en&source=hp"
c.url.default_page = "https://www.google.com/search?hl=en&source=hp"
c.url.searchengines = dict(
DEFAULT="https://www.google.com/search?hl=en&source=hp&q={}",
aw="https://wiki.archlinux.org/?search={}",
ap="https://www.archlinux.org/packages/?q={}",
gh="https://github.com/search?q={}&type=repositories",
ip="https://iplocation.io/ip/{}",
sh="https://explainshell.com/explain?cmd={}",
wi="https://en.wikipedia.org/w/index.php?search={}",
yt="https://yewtu.be/search?q={}",
)
c.url.searchengines = {
"DEFAULT": "https://www.google.com/search?hl=en&source=hp&q={}",
"aw": "https://wiki.archlinux.org/?search={}",
"ap": "https://www.archlinux.org/packages/?q={}",
"gh": "https://github.com/search?q={}&type=repositories",
"ip": "https://iplocation.io/ip/{}",
"sh": "https://explainshell.com/explain?cmd={}",
"wi": "https://en.wikipedia.org/w/index.php?search={}",
"yt": "https://yewtu.be/search?q={}",
}
c.zoom.default = "100%"
# FONTS
@@ -204,20 +219,20 @@ c.fonts.web.family.fixed = "IBM Plex Mono"
c.fonts.web.family.standard = c.fonts.web.family.sans_serif
# COLORS
base00 = "#181818"
base01 = "#282828"
base02 = "#383838"
base00 = "#0A0A0A"
base01 = "#111111"
base02 = "#333333"
base03 = "#585858"
base04 = "#b8b8b8"
base05 = "#d8d8d8"
base05 = "#FFFFFF"
base06 = "#e8e8e8"
base07 = "#f8f8f8"
base08 = "#ab4642"
base08 = "#FF0033"
base09 = "#dc9656"
base0A = "#f7ca88"
base0B = "#a1b56c"
base0A = "#FFE57F"
base0B = "#00E5FF"
base0C = "#86c1b9"
base0D = "#7cafc2"
base0D = "#00E5FF"
base0E = "#ba8baf"
base0F = "#a16946"
c.colors.webpage.preferred_color_scheme = "light"
@@ -251,9 +266,9 @@ c.colors.downloads.start.bg = base0D
c.colors.downloads.stop.fg = base00
c.colors.downloads.stop.bg = base0C
c.colors.downloads.error.fg = base08
c.colors.hints.fg = base00
c.colors.hints.bg = base0A
c.colors.hints.match.fg = base05
c.colors.hints.bg = base00
c.colors.hints.fg = base0B
c.colors.hints.match.fg = base08
c.colors.keyhint.fg = base05
c.colors.keyhint.suffix.fg = base05
c.colors.keyhint.bg = base00
@@ -311,9 +326,9 @@ c.colors.tabs.pinned.selected.even.fg = base05
c.colors.tabs.pinned.selected.odd.bg = base02
c.colors.tabs.pinned.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.bg = base02
c.colors.tabs.selected.odd.bg = base0B
c.colors.tabs.selected.even.bg = base0B
# overrides
c.colors.hints.fg = base05
+24 -14
View File
@@ -5,19 +5,29 @@ should_launch_new_window 1
should_launch_new_instance 1
startup_commands toggle_visual_scroll;toggle_custom_color
# - dracula: https://github.com/dracula/sioyek
# - catppuccin: https://github.com/catppuccin/sioyek
# - gruvbox: https://mil.ad/blog/2022/gruvbox-for-sioyek.html
new_macro _theme_solaris setconfig_custom_text_color(#b58900);setconfig_custom_background_color(#586e75)
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)
new_macro _theme_softlight setconfig_custom_text_color(#434c5e);setconfig_custom_background_color(#faf4ed)
new_macro _theme_macchiato setconfig_custom_text_color(#cad3f5);setconfig_custom_background_color(#24273a)
new_macro _theme_frappe setconfig_custom_text_color(#c6d0f5);setconfig_custom_background_color(#303446)
new_macro _theme_moccha setconfig_custom_text_color(#cdd6f4);setconfig_custom_background_color(#1e1e2e)
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)
new_macro _theme_dracula setconfig_custom_text_color(0.97255 0.97255 0.94902);setconfig_custom_background_color(0.15686 0.16471 0.21176)
# Document Colors (Deep Black bg, Pure White text)
custom_background_color #0A0A0A
custom_text_color #FFFFFF
custom_color_mode_empty_background_color #000000
page_separator_color #333333
# UI & Status Bar (Electric Cyan & Black)
ui_background_color #111111
ui_text_color #FFFFFF
ui_selected_background_color #333333
ui_selected_text_color #00E5FF
status_bar_color #00E5FF
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_separator_color #1d2021
@@ -45,7 +55,7 @@ custom_color_mode_empty_background_color #1d2021
# search
should_highlight_unselected_search 1
unselected_search_highlight_color #FF5733
unselected_search_highlight_color #FF5733
# gruvbox
custom_background_color #282828
+14 -6
View File
@@ -1,5 +1,5 @@
add_newline = true
right_format = """$cmd_duration"""
right_format = """$cmd_duration\n"""
[line_break]
disabled = false
@@ -8,17 +8,25 @@ disabled = false
disabled = false
[cmd_duration]
min_time = 1000
format = 'underwent [$duration](bold yellow)'
show_milliseconds = true
disabled = true
[directory]
truncation_length = 5
truncate_to_repo = false
truncation_symbol = '…/'
truncation_symbol = "…/"
repo_root_style = "red"
before_repo_root_style = "cyan"
repo_root_format = '[$before_root_path]($before_repo_root_style)[$repo_root]($repo_root_style)[$path]($style)[$read_only]($read_only_style) '
repo_root_format = """\
[$before_root_path]\
($before_repo_root_style)\
[$repo_root]\
($repo_root_style)\
[$path]\
($style)\
[$read_only]\
($read_only_style)\
\
"""
[git_status]
disabled = true
+46 -45
View File
@@ -10,29 +10,34 @@ mouse_warping none
# Set inner/outer gaps
smart_gaps on
gaps inner 2
gaps inner 4
gaps outer 0
# Hide titlebar on windows:
default_border pixel 1
default_border pixel 2
smart_borders on
# Default Font
font pango:Noto Sans Regular 10
# Thin borders:
smart_borders on
# Cursor
seat seat0 xcursor_theme Adwaita 0
# Title format for windows
for_window [shell="xdg_shell"] title_format "%title (%app_id)"
for_window [shell="x_wayland"] title_format "%class - %title"
set $focus #00E5FF
set $unfocused #333333
set $urgent #FF0033
set $bg #0A0A0A
set $text_dark #000000
set $text_dim #888888
# class border bground text indicator child_border
client.focused #556064 #F9CE5C #000000 #CB4B16 #FDF6E3
client.focused_inactive #CB4B16 #2F3D44 #1ABC9C #454948 #454948
client.unfocused #556064 #2F3D44 #1ABC9C #454948 #454948
client.urgent #CB4B16 #FDF6E3 #1ABC9C #268BD2 #268BD2
client.placeholder #000000 #0C0C0C #ffffff #000000 #000000
client.background #2B2C2B
# class border bground text indicator child_border
client.focused $focus $focus $text_dark $focus $focus
client.focused_inactive $unfocused $unfocused $text_dim $unfocused $unfocused
client.unfocused $unfocused $unfocused $text_dim $unfocused $unfocused
client.urgent $urgent $urgent #FFFFFF $urgent $urgent
client.placeholder #000000 #000000 #FFFFFF #000000 #000000
client.background $bg
# Status Bar:
bar {
@@ -67,7 +72,7 @@ set $powermenu ~/.config/sway/scripts/power_menu.sh
# ------------------------------------------
# Launch the terminal
bindsym $mod+Return exec $term
bindsym Mod4+Shift+Return exec foot bash
bindsym $mod+Shift+Return exec foot bash
# Kill focused window
bindsym $mod+Shift+q kill
# Lock screen
@@ -180,8 +185,8 @@ bindsym --whole-window --border {
# media keys
bindsym {
# Volume
XF86AudioRaiseVolume exec pamixer -ui 2
XF86AudioLowerVolume exec pamixer -ud 2
XF86AudioRaiseVolume exec pamixer --unmute -i 2
XF86AudioLowerVolume exec pamixer --unmute -d 2
XF86AudioMute exec pamixer --toggle-mute
Pause exec pamixer -ui 2
Print exec pamixer -ud 2
@@ -249,13 +254,15 @@ bindsym {
# Launch the browser
$mod+i exec qutebrowser
$mod+Shift+i exec env QUTE_ENABLE_GPU=1 qutebrowser
# Launch the file explorer
$mod+o exec pcmanfm
# Dismiss message
$mod+n exec makoctl dismiss
$mod+Shift+n exec makoctl dismiss -a
# Notifications
$mod+n exec swaync-client --hide-latest
$mod+Shift+n exec swaync-client --close-latest
$mod+m exec swaync-client -t -sw
}
# config tools
@@ -270,7 +277,7 @@ mode "$mode_monitor" {
bindsym Return mode "default"
bindsym Escape mode "default"
}
bindsym $mod+m mode "$mode_monitor"
bindsym $mod+Shift+m mode "$mode_monitor"
# ------------------------------------------
# AUTOSTART
@@ -278,6 +285,9 @@ bindsym $mod+m mode "$mode_monitor"
# Auth with polkit-gnome
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
exec systemctl --user import-environment DISPLAY WAYLAND_DISPLAY SWAYSOCK XDG_CURRENT_DESKTOP
@@ -285,20 +295,9 @@ exec systemctl --user import-environment DISPLAY WAYLAND_DISPLAY SWAYSOCK XDG_CU
exec hash dbus-update-activation-environment 2>/dev/null && \
dbus-update-activation-environment --systemd DISPLAY WAYLAND_DISPLAY SWAYSOCK XDG_CURRENT_DESKTOP
# Idle configuration
exec swayidle -w \
timeout 1200 'pgrep -x gtklock || gtklock -d' \
timeout 2400 'swaymsg "output * power off"' resume 'swaymsg "output * power on"' \
before-sleep 'pgrep -x gtklock || gtklock -d' \
after-resume 'swaymsg reload' \
idlehint 240
# Start foot server
exec systemctl --user enable --now foot-server.service
exec {
# Desktop notifications
exec mako
# Start foot server
exec systemctl --user enable --now foot-server.service
# Set wallpaper
~/.azotebg
@@ -314,19 +313,21 @@ exec {
# night-time color shift
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 {
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 -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
}
# ------------------------------------------
@@ -348,15 +349,16 @@ 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 [title="Picture in picture"] floating enable, sticky 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
# only thunderbird main window as float
for_window [app_id="org.mozilla.Thunderbird" title="^((?!Mozilla Thunderbird).)*$"] floating enable
# steam
# https://github.com/ValveSoftware/steam-for-linux/issues/1040
for_window [app_id="^steam$"] floating enable
for_window [app_id="^Steam$"] floating enable
for_window [app_id="^steam$" title="^Steam$"] floating disable
for_window [app_id="(?i)^steam$"] floating enable
for_window [app_id="(?i)^steam$" title="^Steam$"] floating disable
# Inhibit idle
for_window [app_id="firefox"] inhibit_idle fullscreen
@@ -385,4 +387,3 @@ input type:mouse {
accel_profile "flat"
pointer_accel 0.5
}
+1 -2
View File
@@ -1,6 +1,4 @@
#!/bin/sh
# usage: import-gsettings
config="${XDG_CONFIG_HOME:-$HOME/.config}/gtk-3.0/settings.ini"
if [ ! -f "$config" ]; then exit 1; fi
@@ -13,3 +11,4 @@ gsettings set "$gnome_schema" gtk-theme "$gtk_theme"
gsettings set "$gnome_schema" icon-theme "$icon_theme"
gsettings set "$gnome_schema" cursor-theme "$cursor_theme"
gsettings set "$gnome_schema" font-name "$font_name"
gsettings set "$gnome_schema" color-scheme 'prefer-dark'
+29 -22
View File
@@ -1,6 +1,7 @@
#!/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: ")"
[[ -z "$SELECTION" ]] && exit 0
confirm_action() {
local action="$1"
@@ -9,26 +10,32 @@ confirm_action() {
}
case $SELECTION in
*"󰌾 Lock"*)
gtklock;;
*"󰤄 Suspend"*)
if confirm_action "Suspend"; then
systemctl suspend-then-hibernate
fi;;
*"󰍃 Log out"*)
if confirm_action "Log out"; then
swaymsg exit
fi;;
*" Reboot"*)
if confirm_action "Reboot"; then
systemctl reboot
fi;;
*" Reboot to UEFI"*)
if confirm_action "Reboot to UEFI"; then
systemctl reboot --firmware-setup
fi;;
*"󰐥 Shutdown"*)
if confirm_action "Shutdown"; then
systemctl poweroff
fi;;
*"󰌾 Lock"*)
gtklock
;;
*"󰤄 Suspend"*)
if confirm_action "Suspend"; then
systemctl suspend-then-hibernate
fi
;;
*"󰍃 Log out"*)
if confirm_action "Log out"; then
swaymsg exit
fi
;;
*" Reboot"*)
if confirm_action "Reboot"; then
systemctl reboot
fi
;;
*" Reboot to UEFI"*)
if confirm_action "Reboot to UEFI"; then
systemctl reboot --firmware-setup
fi
;;
*"󰐥 Shutdown"*)
if confirm_action "Shutdown"; then
systemctl poweroff
fi
;;
esac
+62
View File
@@ -0,0 +1,62 @@
{
"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
@@ -0,0 +1,63 @@
@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,6 +69,8 @@ bind generic um status-merge
bind generic - stage-update-line
bind generic \ stage-split-chunk
bind generic Y @sh -c "echo -n %(commit) | wl-copy"
bind generic c none
bind generic cc !git commit
bind generic ca !?@git commit --amend --no-edit
+29 -38
View File
@@ -14,9 +14,8 @@ set -g focus-events on
# Advertise tmux correctly to programs running inside it.
set -g default-terminal "tmux-256color"
# Tell tmux which features the outer Foot client supports.
set -as terminal-features ',foot*:RGB,clipboard,focus,title'
set -as terminal-features ',*:RGB'
set -as terminal-features ',*:clipboard'
# Allow image passthrough
set -gq allow-passthrough on
@@ -61,11 +60,6 @@ set -g set-titles on
######################
### 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
# First remove *all* keybindings
@@ -86,17 +80,15 @@ bind-key -n End send-keys "\033[F"
# Copy mode
bind c copy-mode
# clipboard control
bind p paste-buffer
bind -T copy-mode-vi v send-keys -X begin-selection
bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel "wl-copy"
bind -T copy-mode-vi y send-keys -X copy-selection
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 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 "wl-copy"
bind -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel "wl-copy"
# Rename window
bind , command-prompt "rename-window %%"
@@ -147,16 +139,17 @@ bind w choose-tree
# Change current pane to next window
bind ` break-pane
bind 1 if 'tmux join-pane -t :1 -h' '' 'new-window -d -t :1; join-pane -t :1'
bind 2 if 'tmux join-pane -t :2 -h' '' 'new-window -d -t :2; join-pane -t :2'
bind 3 if 'tmux join-pane -t :3 -h' '' 'new-window -d -t :3; join-pane -t :3'
bind 4 if 'tmux join-pane -t :4 -h' '' 'new-window -d -t :4; join-pane -t :4'
bind 5 if 'tmux join-pane -t :5 -h' '' 'new-window -d -t :5; join-pane -t :5'
bind 6 if 'tmux join-pane -t :6 -h' '' 'new-window -d -t :6; join-pane -t :6'
bind 7 if 'tmux join-pane -t :7 -h' '' 'new-window -d -t :7; join-pane -t :7'
bind 8 if 'tmux join-pane -t :8 -h' '' 'new-window -d -t :8; join-pane -t :8'
bind 9 if 'tmux join-pane -t :9 -h' '' 'new-window -d -t :9; join-pane -t :9'
bind 0 if 'tmux join-pane -t :10 -h' '' 'new-window -d -t :10; join-pane -t :10 -h'
# Change current pane to specific window (join if exists, break if it doesn't)
bind 1 if-shell 'tmux join-pane -t :1 -h' '' 'break-pane -t :1'
bind 2 if-shell 'tmux join-pane -t :2 -h' '' 'break-pane -t :2'
bind 3 if-shell 'tmux join-pane -t :3 -h' '' 'break-pane -t :3'
bind 4 if-shell 'tmux join-pane -t :4 -h' '' 'break-pane -t :4'
bind 5 if-shell 'tmux join-pane -t :5 -h' '' 'break-pane -t :5'
bind 6 if-shell 'tmux join-pane -t :6 -h' '' 'break-pane -t :6'
bind 7 if-shell 'tmux join-pane -t :7 -h' '' 'break-pane -t :7'
bind 8 if-shell 'tmux join-pane -t :8 -h' '' 'break-pane -t :8'
bind 9 if-shell 'tmux join-pane -t :9 -h' '' 'break-pane -t :9'
bind 0 if-shell 'tmux join-pane -t :10 -h' '' 'break-pane -t :10'
# move windows
bind m command-prompt -p "move window to:" "move-window -t '%%'"
@@ -196,28 +189,26 @@ bind b send-keys -R \; clear-history \; send-keys Enter
# various plugins
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-sensible'
set -g @plugin 'tmux-plugins/tmux-yank'
######################
### PANE CONTROL ###
######################
set -g @plugin 'mrjones2014/smart-splits.nvim'
set -g @plugin 'smart-splits-nvim/backend-tmux'
# Optional configurations with their default values if omitted:
set -g @smart-splits_at_edge 'wrap'
set -g @smart-splits_resize_step_size '3'
set -g @smart-splits_no_wrap '' # to disable wrapping. (any value disables wrapping)
set -g @smart-splits_move_left_key 'M-h'
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_move_left_key 'M-h' # key-mapping for navigation.
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' # 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_left_key 'C-h'
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.
+29 -10
View File
@@ -60,7 +60,7 @@
"format-ok": "Systemd ✓",
"system": true, // Monitor failed systemwide units.
"user": true, // Ignore failed user units.
"on-click": "swaymsg exec 'footclient --app-id floating_shell --window-size-chars 120x45 isd'"
"on-click": "swaymsg exec 'footclient --app-id floating_shell --window-size-chars 250x45 systemctl-tui'"
},
// Configuration - modules-right
@@ -82,20 +82,19 @@
"warning": 70,
"critical": 90,
},
"on-click": "footclient --app-id floating_shell --window-size-chars 120x45 -e btop"
"on-click": "footclient --app-id floating_shell --window-size-chars 250x150 -e btop"
},
"custom/cputemp": {
"exec": "sensors | grep 'CPU:' | awk '{print substr($2,2); }'",
"format": " {}",
"on-click": "swaymsg exec 'footclient --app-id floating_shell --window-size-chars 80x45 watch sensors'",
"interval": 1
"temperature": {
"critical-threshold": 80,
"format": " {temperatureC}°C",
"on-click": "swaymsg exec 'footclient --app-id floating_shell --window-size-chars 120x100 -e watch sensors'"
},
"memory": {
"interval": 5,
"format": "{:>3}%",
"on-click": "footclient --app-id floating_shell --window-size-chars 100x100 -e btop",
"on-click": "footclient --app-id floating_shell --window-size-chars 250x150 -e btop",
"states": {
"warning": 70,
"critical": 90
@@ -107,7 +106,7 @@
"interval": 30,
"format": " / {specific_free:0.0f} of {specific_total:0.0f} GB free",
"unit": "GB",
"on-click": "swaymsg exec 'footclient --app-id floating_shell --window-size-chars 80x45 ncdu -x /'"
"on-click": "swaymsg exec 'footclient --app-id floating_shell --window-size-chars 250x45 gdu -d'"
},
"backlight": {
@@ -133,7 +132,6 @@
},
"on-click": "pavucontrol",
"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-scroll-up": "pactl set-sink-volume @DEFAULT_SINK@ +5%",
"on-scroll-down": "pactl set-sink-volume @DEFAULT_SINK@ -5%"
@@ -151,6 +149,27 @@
"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": {
"format": "󰅐 {:%H:%M}",
"format-alt": "󰅐 {:%OI:%M %p}",
+75 -93
View File
@@ -1,60 +1,50 @@
/* =============================================================================
*
* Waybar configuration
*
* Configuration reference: https://github.com/Alexays/Waybar/wiki/Configuration
*
* =========================================================================== */
/* -----------------------------------------------------------------------------
* Keyframes
* Keyframes & Colors
* -------------------------------------------------------------------------- */
@define-color highlight #685878 ;
@define-color base1 #19191e ;
@define-color highlight #00E5FF;
@define-color base1 #0A0A0A;
@define-color text #FFFFFF;
@define-color urgent #FF0033;
@define-color dim #333333;
@keyframes blink-warning {
70% {
color: white;
}
to {
color: white;
background-color: orange;
}
70% {
color: @text;
}
to {
color: @text;
background-color: orange;
}
}
@keyframes blink-critical {
70% {
color: white;
}
to {
color: white;
background-color: red;
}
70% {
color: @text;
}
to {
color: @text;
background-color: @urgent;
}
}
/* -----------------------------------------------------------------------------
* Base styles
* -------------------------------------------------------------------------- */
/* Reset all styles */
* {
border: none;
border-radius: 0;
min-height: 0;
margin: 1px;
padding: 0;
border: none;
border-radius: 0;
min-height: 0;
margin: 1px;
padding: 0;
}
/* The whole bar */
#waybar {
background: transparent;
color: #e3e3ea;
background-color: @base1;
font-family: JetBrainsMono;
font-size: 13px;
background: transparent;
color: @text;
background-color: @base1;
font-family: JetBrainsMono;
font-size: 13px;
border-bottom: 2px solid @dim;
}
/* Every modules */
@@ -69,80 +59,72 @@
#battery,
#clock,
#tray {
padding:0.5rem 0.6rem;
margin: 1px 0px;
padding: 0.5rem 0.6rem;
margin: 1px 0px;
}
/* -----------------------------------------------------------------------------
* Module styles
* -------------------------------------------------------------------------- */
#custom-launcher {
margin-left:15px;
margin-right:10px;
}
#workspaces {
font-size:13px;
}
#workspaces button {
border-radius: 5px;
color: #eceff4;
padding: 1px 6px;
margin-right: 2px;
margin-left: 2px;
border-radius: 0px;
color: @text;
padding: 1px 6px;
margin-right: 2px;
margin-left: 2px;
border-bottom: 2px solid transparent;
}
#workspaces button.focused {
border: 1px solid #d8dee9;
border-bottom: 2px solid @highlight;
color: @highlight;
}
#workspaces button.urgent {
border-color: #c9545d;
color: #c9545d;
border-color: @urgent;
color: @urgent;
}
#mode {
background: @highlight;
border-bottom: 3px transparent;
color:white;
margin-left: 5px;
padding: 7px;
background: @highlight;
color: #000000;
font-weight: bold;
margin-left: 5px;
padding: 7px;
}
#window {
font-weight: bold;
font-weight: bold;
}
#network.disconnected {
color: orange;
color: orange;
}
#cpu.warning {
color: orange;
color: orange;
}
#cpu.critical {
color: red;
color: red;
}
#memory {
animation-timing-function: linear;
animation-iteration-count: infinite;
animation-direction: alternate;
animation-timing-function: linear;
animation-iteration-count: infinite;
animation-direction: alternate;
}
#memory.warning {
color: orange;
}
color: orange;
}
#memory.critical {
color: red;
animation-name: blink-critical;
animation-duration: 2s;
padding-left:5px;
padding-right:5px;
color: red;
animation-name: blink-critical;
animation-duration: 2s;
padding-left: 5px;
padding-right: 5px;
}
#backlight.icon {
@@ -152,35 +134,35 @@
}
#pulseaudio.muted {
color: @highlight;
color: @highlight;
}
#battery {
animation-timing-function: linear;
animation-iteration-count: infinite;
animation-direction: alternate;
animation-timing-function: linear;
animation-iteration-count: infinite;
animation-direction: alternate;
}
#battery.warning {
color: orange;
color: orange;
}
#battery.critical {
color: red;
color: red;
}
#battery.warning.discharging {
animation-name: blink-warning;
animation-duration: 3s;
animation-name: blink-warning;
animation-duration: 3s;
}
#battery.critical.discharging {
animation-name: blink-critical;
animation-duration: 2s;
animation-name: blink-critical;
animation-duration: 2s;
}
#custom-power {
margin-left:15px;
margin-right:15px;
font-size:15px;
margin-left: 15px;
margin-right: 15px;
font-size: 15px;
}
-1
View File
@@ -1,5 +1,4 @@
[screencast]
chooser_type = dmenu
chooser_cmd = fuzzel --dmenu
output_name=DP-1
max_fps=30
+39 -11
View File
@@ -1,28 +1,56 @@
[[mgr.prepend_keymap]]
on = "q"
run = "close"
on = "E"
run = "shell 'exiftool %s | less' --block --confirm"
desc = "View file metadata with Exiftool"
[[mgr.prepend_keymap]]
on = "q"
run = "close"
desc = "Close tab"
[[mgr.prepend_keymap]]
on = "l"
run = "plugin smart-enter"
on = "l"
run = "plugin smart-enter"
desc = "Enter the child directory, or open the file"
[[mgr.prepend_keymap]]
on = [ "c", "m" ]
run = "plugin chmod"
on = [ "c", "m" ]
run = "plugin chmod"
desc = "Chmod on selected files"
[[mgr.prepend_keymap]]
on = "F"
run = "plugin smart-filter"
on = "F"
run = "plugin smart-filter"
desc = "Smart filter"
[[mgr.prepend_keymap]]
on = "M"
on = "M"
run = "plugin mount"
[[mgr.prepend_keymap]]
on = "T"
run = "plugin toggle-pane max-preview"
on = "T"
run = "plugin toggle-pane max-preview"
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"
+99 -4
View File
@@ -12,14 +12,93 @@ max_height = 1500
[open]
prepend_rules = [
# Directories
{ 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]
# --- Text / Code (Blocking Terminal Apps) ---
text = [
{ run = "bat $@", block = true, desc = "bat" },
{ run = "nvim $@", block = true, desc = "nvim" },
{ run = "bat %s", block = true, desc = "bat" },
{ run = "nvim %s", 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]
cursor_blink = true
@@ -38,6 +117,14 @@ group = "git"
url = "*/"
run = "git"
[[plugin.prepend_previewers]]
mime = "application/{*zip,tar,bzip2,7z*,rar,xz,zstd,java-archive}"
run = "ouch"
[[plugin.prepend_previewers]]
url = "*/"
run = "eza-preview"
[[plugin.prepend_previewers]]
url = "*.tar*"
run = 'piper --format=url -- tar tf "$1"'
@@ -51,8 +138,16 @@ url = "*.md"
run = 'piper -- CLICOLOR_FORCE=1 glow -w=$w -s=dark "$1"'
[[plugin.prepend_previewers]]
url = "*/"
run = 'piper -- eza -TL=3 --color=always --icons=always --group-directories-first --no-quotes "$1"'
url = "*.parquet"
run = "parquet-preview"
[[plugin.prepend_previewers]]
url = "*.parq"
run = "parquet-preview"
[[plugin.prepend_previewers]]
url = "*.pq"
run = "parquet-preview"
[[plugin.prepend_spotters]]
url = "*"
+12 -9
View File
@@ -3,7 +3,7 @@ export SYSTEMD_EDITOR=nvim
export EDITOR=nvim
export VISUAL=nvim
export PAGER="bat --style=header,rule,snip"
export PATH=~/.local/bin:$PATH
export PATH=~/.local/bin:${KREW_ROOT:-$HOME/.krew}/bin:$PATH
export BROWSER=/usr/bin/qutebrowser
export HISTFILE=~/.config/zsh/history
export HISTSIZE=200000
@@ -13,14 +13,17 @@ export SAVEHIST=200000
alias ls='ls --color=auto -Ah'
alias ..='cd ..'
alias ...='cd ../..'
catai () {
rg -l --hidden --glob '!.git/*' '^' -- "$@" | while IFS= read -r f; do
printf "\n── %s ──\n" "$f"
echo '```'
cat "$f"
echo '```'
done
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 ---
bindkey '^[[Z' reverse-menu-complete # shift-tab
@@ -44,7 +47,7 @@ autoload -Uz compinit
compinit -d "~/.config/zsh/zcompdump"
zstyle ':completion:*' menu select
zstyle ':completion:*' matcher-list 'm:{a-z}={A-Za-z}' 'r:|[._-]=** r:|=**'
zstyle ':completion:*' list-colors ''
zstyle ':completion:*' list-colors ${(s.:.)LS_COLORS}
if command -v kubectl >/dev/null 2>&1; then
source <(kubectl completion zsh)
fi
+15 -25
View File
@@ -1,7 +1,7 @@
[core]
filemode = false
pager = delta --diff-so-fancy
autorcrlf = true
pager = delta
autocrlf = input
editor = nvim
[user]
name = Henrik Bakken
@@ -13,8 +13,10 @@
required = true
[interactive]
diffFilter = delta --color-only
; [merge]
; conflictstyle = diff3
[merge]
conflictstyle = zdiff3
[delta]
navigate = true
light = false
@@ -29,16 +31,14 @@
plus-non-emph-style = bold green
plus-emph-style = bold reverse green
[delta "interactive"]
keep-plus-minus-markers = false[delta "decorations"]
keep-plus-minus-markers = false
[delta "decorations"]
commit-decoration-style = bold yellow box ul
file-style = bold yellow ul
file-decoration-style = none
hunk-header-decoration-style = cyan box ul
[init]
defaultBranch = main
# better defaults
# https://blog.gitbutler.com/how-git-core-devs-configure-git/
[column]
ui = auto
[branch]
@@ -57,6 +57,8 @@
prune = true
pruneTags = true
all = true
[pull]
rebase = true
[help]
autocorrect = prompt
[rebase]
@@ -64,24 +66,12 @@
autoStash = true
updateRefs = true
# Improved colors for the highlighted bits
# https://github.com/so-fancy/diff-so-fancy
[rerere]
enabled = true
autoupdate = true
[color]
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]
directory = /tmp
directory = /tmp
[credential]
helper = store
helper = /usr/lib/git-core/git-credential-libsecret
+352
View File
@@ -0,0 +1,352 @@
#!/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,
"format": " /mnt/hdd1 {specific_free:0.0f} of {specific_total:0.0f} GB free",
"unit": "GB",
"on-click": "swaymsg exec 'footclient --app-id floating_shell --window-size-chars 80x45 ncdu -x /mnt/hdd1/'"
"on-click": "swaymsg exec 'footclient --app-id floating_shell --window-size-chars 150x45 gdu -d'"
},
"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'",
"format": "󰓅 {}",
"on-click": "swaymsg exec 'footclient --app-id floating_shell --window-size-chars 120x45 nvtop'",
"on-click": "swaymsg exec 'footclient --app-id floating_shell --window-size-chars 150x45 watch nvidia-smi'",
"interval": 1
},
"modules-right": [
"idle_inhibitor",
"cpu",
"custom/cputemp",
"temperature",
"memory",
"custom/nvidia",
"disk#root",
@@ -36,6 +36,7 @@
"battery",
"clock",
"tray",
"custom/power"
"custom/notification",
"custom/power",
]
}
+16 -14
View File
@@ -1,18 +1,20 @@
# input
# input type:tablet_tool map_to_region 2560 0 2560 1440
# output
output DP-1 mode 3840x2560
output DP-1 scale 1.25
# Monitor definition
set $main_monitor "BNQ BenQ RD280UG EM95T00073087"
# switch to workspace
workspace 1 output DP-1
workspace 2 output DP-1
workspace 3 output DP-1
workspace 4 output DP-1
workspace 5 output DP-1
workspace 6 output DP-1
workspace 7 output DP-1
workspace 8 output DP-1
workspace 9 output DP-1
workspace 10 output DP-1
# Output configuration
output $main_monitor mode 3840x2560@119.991Hz scale 1.25
# Workspace assignments
workspace 1 output $main_monitor
workspace 2 output $main_monitor
workspace 3 output $main_monitor
workspace 4 output $main_monitor
workspace 5 output $main_monitor
workspace 6 output $main_monitor
workspace 7 output $main_monitor
workspace 8 output $main_monitor
workspace 9 output $main_monitor
workspace 10 output $main_monitor
@@ -15,18 +15,18 @@
"interval": 30,
"format": " /mnt/hdd1 {specific_free:0.0f} of {specific_total:0.0f} GB free",
"unit": "GB",
"on-click": "swaymsg exec 'footclient --app-id floating_shell --window-size-chars 80x45 ncdu -x /mnt/hdd1/'"
"on-click": "swaymsg exec 'footclient --app-id floating_shell --window-size-chars 150x45 gdu -d'"
},
"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'",
"format": "󰓅 {}",
"on-click": "swaymsg exec 'footclient --app-id floating_shell --window-size-chars 120x45 nvtop'",
"on-click": "swaymsg exec 'footclient --app-id floating_shell --window-size-chars 150x45 watch nvidia-smi'",
"interval": 1
},
"modules-right": [
"idle_inhibitor",
"cpu",
"custom/cputemp",
"temperature",
"memory",
"custom/nvidia",
"disk#root",
@@ -36,6 +36,7 @@
"battery",
"clock",
"tray",
"custom/power"
"custom/notification",
"custom/power",
]
}
+1 -1
View File
@@ -1,2 +1,2 @@
output DP-1 resolution 5120x1440
output * resolution 5120x1440
exec "regreet; swaymsg exit"
+3 -2
View File
@@ -12,7 +12,7 @@
"modules-right": [
"idle_inhibitor",
"cpu",
"custom/cputemp",
"temperature",
"memory",
"disk#root",
"backlight",
@@ -20,6 +20,7 @@
"battery",
"clock",
"tray",
"custom/power"
"custom/notification",
"custom/power",
]
}
+1 -1
View File
@@ -1,2 +1,2 @@
output eDP-1 resolution 2736x1824 scale 1.6
output * resolution 2736x1824 scale 1.6
exec "regreet; swaymsg exit"
@@ -12,7 +12,7 @@
"modules-right": [
"idle_inhibitor",
"cpu",
"custom/cputemp",
"temperature",
"memory",
"disk#root",
"backlight",
@@ -20,6 +20,7 @@
"battery",
"clock",
"tray",
"custom/power"
"custom/notification",
"custom/power",
]
}
+1 -1
View File
@@ -1,2 +1,2 @@
output eDP-1 resolution 2496x1664 scale 1.6
output * resolution 2496x1664 scale 1.6
exec "regreet; swaymsg exit"
+13 -10
View File
@@ -52,12 +52,12 @@ installmap = dict(
tmux=("tmux", "urlscan"),
editors=(
"neovim",
"helix",
"ripgrep",
"npm", # required for nvim plugins
"go", # required for vim-hexokinase build
"tree-sitter-cli", # required for nvim treesitter
),
utils=("uv", "ncdu", "unzip", "jq", "bluetui"),
utils=("uv", "gdu", "unzip", "jq", "bluetui"),
gittools=(
"tig",
"diff-so-fancy",
@@ -66,6 +66,8 @@ installmap = dict(
"git-lfs",
"lazygit",
"bat",
"gnome-keyring", # for git credentials
"seahorse", # keyring ui
),
readers=(
"sioyek",
@@ -89,19 +91,18 @@ installmap = dict(
# photos
"qimgv",
"kimageformats5", # heif support
"digikam",
# music
"quodlibet",
"gst-plugins-good", # required deb
# audio
"pamixer",
"noisetorch",
),
filebrowsers=(
"yazi",
"ranger",
"pcmanfm",
"thunar",
"ouch",
"gparted",
"sshfs",
"file-roller",
@@ -119,7 +120,7 @@ installmap = dict(
"python-tldextract",
"bitwarden-cli", # for qutebrowser autofill
),
chat=("discordo-git", "gurk"),
chat=("discord", "gurk"),
emailcalrss=(
"khard", # contacts
"khal", # calendar
@@ -135,8 +136,7 @@ installmap = dict(
"htop", # hardware
"btop", # hardware
"nvtop", # gpu
"lazyjournal", # journald
"isd", # systemd
"systemctl-tui", # systemd
"bandwhich", # network
"sysstat",
),
@@ -280,6 +280,7 @@ def install_zsh(overwrite: bool, reinstall: bool) -> None:
run("chsh -s /usr/bin/zsh".split())
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, ".local/bin/catai", overwrite, symlink=True)
def install_tmux(overwrite: bool, reinstall: bool) -> None:
@@ -298,7 +299,6 @@ def install_tmux(overwrite: bool, reinstall: bool) -> None:
def install_editors(overwrite: bool, reinstall: bool) -> None:
helper_install(*installmap["editors"], reinstall=reinstall)
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:
@@ -330,7 +330,9 @@ def install_filebrowsers(overwrite: bool, reinstall: bool) -> None:
"yazi-rs/plugins:smart-enter",
"yazi-rs/plugins:smart-filter",
"yazi-rs/plugins:toggle-pane",
"ahkohd/eza-preview",
"boydaihungst/file-extra-metadata",
"ya pkg add ndtoan96/ouch",
]:
run(f"ya pkg add {plugin}".split())
tgt = ".local/share/applications/userapp-file-roller.desktop"
@@ -346,7 +348,6 @@ def install_netbrowsers(overwrite: bool, reinstall: bool) -> None:
def install_chat(overwrite: bool, reinstall: bool) -> None:
helper_install(*installmap["chat"], reinstall=reinstall)
helper_clone_foldercontents(CFG_SRC, CFG_TGT, "discordo", overwrite)
helper_clone_foldercontents(CFG_SRC, CFG_TGT, "gurk", overwrite)
@@ -398,7 +399,7 @@ def install_sway(overwrite: bool, reinstall: bool) -> None:
"waybar",
"gtklock",
"gtk-3.0",
"mako",
"swaync",
"fuzzel",
"nwg-drawer",
"xdg-desktop-portal-wlr",
@@ -408,6 +409,8 @@ def install_sway(overwrite: bool, reinstall: bool) -> None:
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, "mimeapps.list", overwrite, symlink=True)
# swaync configs
helper_clone_foldercontents(CFG_SRC, CFG_TGT, "swaync", overwrite)
# custom sway configs
helper_clone_foldercontents(CUSTOM_SRC / "CONFIG", CFG_TGT, "sway", overwrite)
# custom waybar configs