Compare commits

...
139 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
Henrik Bakken 4a9fd6c201 mothership screen settings 2026-08-04 21:05:05 +02:00
Henrik Bakken 0acc0b37b7 nvim tweaks 2026-07-03 15:52:03 +02:00
Henrik Bakken c47abe26fe qutebrowser silence TrustedHTML error and handle BankID 2026-07-03 15:51:10 +02:00
Henrik Bakken 900a20a31f sway: try to fix red screen of death 2026-06-15 13:39:18 +02:00
Henrik Bakken 5c052509c4 yazi fix config 2026-05-29 11:26:21 +02:00
Henrik Bakken 03a9ca5060 vesktop->discord, heif image support 2026-05-27 09:50:29 +02:00
Henrik Bakken 9f17fbcb37 btop update 2026-05-23 00:34:36 +02:00
Henrik Bakken c42475c571 nvim better completeopt 2026-05-23 00:33:52 +02:00
Henrik Bakken 0d1702456e nvim stop ftplugin hijacking omnifunc 2026-05-09 02:01:23 +02:00
Henrik Bakken 2914b79ded nvim ty disable autoimports 2026-05-09 02:01:18 +02:00
Henrik Bakken 1c8d5284ca nvim lspconfig 2026-05-09 02:01:18 +02:00
Henrik Bakken 640379c105 sway+tmux added bash emergency brakes 2026-05-06 13:43:03 +02:00
Henrik Bakken 379ae0f786 qutebrowser gemini tips
- finn.no maps showing (webgl)
- altinn login
- avoid dangerous lowercase normal-mode mapping
2026-04-26 21:03:31 +02:00
Henrik Bakken fe08de4f9a nvim-lint simplified, no timeout 2026-04-26 00:49:39 +02:00
Henrik Bakken 2d0f0470a0 nvim which-key fix and enable TreeWalker in python 2026-04-26 00:49:10 +02:00
Henrik Bakken 99ab844325 nvim remove bugged guicursor setting 2026-04-25 21:25:12 +02:00
Henrik Bakken 927f556aef nvim + tmux tweaks 2026-04-18 02:52:32 +02:00
Henrik Bakken f0e19a1f71 nvim + tmux tweaks 2026-04-18 01:53:01 +02:00
Henrik Bakken 608d9b8cf7 Merge remote-tracking branch 'hjarl/main' 2026-04-09 19:33:32 +02:00
Henrik Bakken adbe1641ec nvim tweaks 2026-04-09 19:31:03 +02:00
Henrik Bakken 0509989016 remove edge 2026-03-31 12:18:44 +02:00
Henrik Bakken 49dae6be39 misc edits: foot, nvim, sway, qute 2026-03-30 16:04:15 +02:00
Henrik Bakken 4c362b4a71 newsboat -> eilmeldung 2026-03-25 15:34:39 +01:00
Henrik Bakken 0a1940c966 nvim bugfixes 2026-03-22 23:35:37 +01:00
Henrik Bakken ddd7cb9fc4 nvim treesitter fix 2026-03-22 23:30:55 +01:00
Henrik Bakken 749c89da0c nvim mini.bracketed 2026-03-20 01:09:49 +01:00
Henrik Bakken 1466a808c9 nvim sensible notification history view 2026-03-20 01:09:29 +01:00
Henrik Bakken a9f9a69887 nvim bugfix coloring bigfiles 2026-03-20 01:09:20 +01:00
Henrik Bakken bd2c3c5303 nvim with neoscroll+smear 2026-03-20 01:09:04 +01:00
Henrik Bakken 98d8281d28 foot fix deprecation 2026-03-19 23:58:45 +01:00
Henrik Bakken 49e474caeb nvim treewalker (OMG!) 2026-03-19 23:57:59 +01:00
Henrik Bakken 04e1114959 nvim tweaks (gemini) 2026-03-19 23:53:37 +01:00
Henrik Bakken 45e614e0c8 nvim tweaks 2026-03-19 22:50:20 +01:00
Henrik Bakken c9d9c39900 vim.o -> vim.opt 2026-03-19 22:49:48 +01:00
Henrik Bakken 180e3e18e1 sway thunderbird floating window fix attempt 2026-03-11 10:25:27 +01:00
Henrik Bakken 63f288c103 nvim tweaks (gemini) 2026-03-11 02:33:17 +01:00
Henrik Bakken 2d1994a042 zsh bugfix catai 2026-03-11 02:22:11 +01:00
Henrik Bakken b04ac36fb8 removed helix themes 2026-03-11 00:54:13 +01:00
Henrik Bakken 5310712394 codex tips 2026-03-10 22:01:15 +01:00
Henrik Bakken e2e5716f80 zshrc added catai 2026-03-10 00:23:48 +01:00
Henrik Bakken fdfefd1d16 nvim better gitsign hunks 2026-03-07 23:08:11 +01:00
Henrik Bakken c08828490c atuin use absolute time 2026-03-07 23:07:52 +01:00
Henrik Bakken f9545c9a5d nvim snacks.picker git_grep ignorecase 2026-03-04 01:10:22 +01:00
Henrik Bakken ed1b0297db nvim undo-tree -> atone 2026-03-04 01:10:12 +01:00
Henrik Bakken ed551d49ab sway rebind menu key 2026-02-21 15:04:28 +01:00
Henrik Bakken 775b156dba endos.py bugfix: make parent dirs 2026-02-21 14:57:31 +01:00
Henrik Bakken ee1344aca6 swayidle don't reduce brightness 2026-02-21 14:47:33 +01:00
Henrik Bakken 93d36adea8 nvim better repeat-goto-next 2026-02-21 00:15:46 +01:00
Henrik Bakken c8e3d09a09 atuin preview multi-line commands 2026-02-21 00:15:21 +01:00
Henrik Bakken f2494ee53e sore thumb relief: dual alt keyboard 2026-02-21 00:13:04 +01:00
Henrik Bakken 8fb6d19af1 btop+tmux 2026-01-27 10:24:53 +01:00
Henrik Bakken 27776b26cd xournalpp config 2026-01-23 13:46:46 +01:00
Henrik Bakken 69fbd7cd0e tweaks 2025-12-04 20:57:42 +01:00
Henrik Bakken be85a81057 added virtwin 2025-12-01 11:22:46 +01:00
Henrik Bakken 54feaab93c qutebrowser+mimeapps 2025-11-29 21:02:34 +01:00
Henrik Bakken 7f9354c811 endos.py bugfix typo 2025-11-22 21:12:55 +01:00
Henrik Bakken 3a40f7d1d7 waybar unit-specific network configs 2025-11-22 21:12:55 +01:00
Henrik Bakken 5468143a10 remove flashfocus 2025-11-20 12:28:37 +01:00
Henrik Bakken b3d67b9f2e discordo config 2025-11-20 11:59:44 +01:00
Henrik Bakken 28d1aee359 qutebrowser deny register_protocol_handler, remove qtargs 2025-11-18 22:21:01 +01:00
Henrik Bakken 64655ec14e sway workspace config 2025-11-18 21:24:05 +01:00
Henrik Bakken faeb82b6ff endos.py include gtklock config 2025-11-17 20:23:28 +01:00
Henrik Bakken b16376854b endos.py luks 2025-11-17 20:23:28 +01:00
Henrik Bakken 545444c44b enable headless screen for sharing 2025-11-17 20:23:28 +01:00
Henrik Bakken 944cfda071 endos.py added xdg-terminal-exec 2025-11-17 14:03:39 +01:00
Henrik Bakken 620ecae951 endos.py added digikam 2025-11-15 20:43:35 +01:00
Henrik Bakken 29b622c4e6 endos.py added xournalpp 2025-11-14 12:21:10 +01:00
Henrik Bakken ff7282ee40 endos.py tweaks 2025-11-14 10:40:03 +01:00
Henrik Bakken 6d99debc67 okular 2025-11-11 12:01:55 +01:00
Henrik Bakken 6e33fdc5a0 bugfix endos.py and homeassistant 2025-11-09 23:00:31 +01:00
Henrik Bakken 818e445bf8 qutebrowser bitwarden args 2025-11-09 21:34:16 +01:00
Henrik Bakken 8d094bde9e k9s+btop configs 2025-11-07 21:02:21 +01:00
Henrik Bakken 9393888574 swayidle tweak, remove foot padding 2025-11-07 18:51:23 +01:00
Henrik Bakken ccd537e7b8 quodlibet dependency added 2025-11-07 12:43:22 +01:00
Henrik Bakken a6e27b8903 sleep hack for surface 2025-11-06 19:00:30 +01:00
Henrik Bakken 8c2dcfcfa5 qutebrowser: bitwarden with fuzzel 2025-11-06 15:14:28 +01:00
Henrik Bakken 8d217d7894 added doxx for docx files 2025-11-06 14:54:55 +01:00
Henrik Bakken d56dbfcc3b rclone config added 2025-11-06 14:43:00 +01:00
Henrik Bakken 5902e9ad33 yazi added file-extra-metadata 2025-11-06 14:42:51 +01:00
Henrik Bakken 91be525403 zsh fzf tweak 2025-11-06 10:20:38 +01:00
Henrik Bakken afa25c9ddd bluetui added 2025-11-05 23:14:22 +01:00
Henrik Bakken 6c777a7541 full refactoring re mothership to endos 2025-11-05 21:59:21 +01:00
Henrik Bakken a799c63b90 endos-related tweaks 2025-11-02 20:06:57 +01:00
Henrik Bakken 8afe69fab8 foot config 2025-11-02 20:06:57 +01:00
Henrik Bakken 9dbbce9a41 deprecate legacy 2025-11-02 20:06:57 +01:00
Henrik Bakken 7b8e7e8ed2 starship tweaks 2025-11-02 20:06:57 +01:00
Henrik Bakken 6164c47093 zsh replacing nushell 2025-11-02 20:06:57 +01:00
Henrik Bakken 3dba4eed8e quotebrowser locale bugfix and tweaks + aerc binds 2025-10-31 11:41:45 +01:00
Henrik Bakken 29a90d44d8 added endos.py - the sweet nextgen install script 2025-10-31 11:41:45 +01:00
Henrik Bakken 823150aa43 vdirsyncer revamp 2025-10-28 00:02:48 +01:00
163 changed files with 4952 additions and 5518 deletions
+3 -1
View File
@@ -1,3 +1,5 @@
.gitsecret/keys/random_seed
!*.secret
homeassistant/SERVICE_ACCOUNT.JSON
CONFIG/homeassistant/SERVICE_ACCOUNT.JSON
CONFIG/vdirsyncer/config
CONFIG/rclone/rclone.conf
+3 -1
View File
@@ -1 +1,3 @@
homeassistant/SERVICE_ACCOUNT.JSON:5a3eabcbc53278f7713423b0ea20d0558f6334f8a1f6aed2a2e4cfb2ca9c93ab
CONFIG/homeassistant/SERVICE_ACCOUNT.JSON:5a3eabcbc53278f7713423b0ea20d0558f6334f8a1f6aed2a2e4cfb2ca9c93ab
CONFIG/vdirsyncer/config:73434db7346e1d070c38c8099c0c8ec99925f4d89ba3e558875fa2a179f41a25
CONFIG/rclone/rclone.conf:85e963d7e0487bf4c10c63a135cc958259eb4156276661276fccb4d9595e79bd
+2 -3
View File
@@ -1,5 +1,4 @@
[general]
enable-osc8=true
log-file=~/aerc.log
[ui]
@@ -25,8 +24,8 @@ icon-signed=✔
icon-signed-encrypted=✔
icon-unknown=✘
icon-invalid=⚠
reverse-thread-order=true
threading-enabled=true
reverse-thread-order=false
threading-enabled=false
[viewer]
always-show-mime=true
+2 -2
View File
@@ -73,12 +73,12 @@ D = :delete-message<Enter>
<tab> = :next-part<Enter>
<C-o> = :prev-part<Enter>
<backtab> = :prev-part<Enter>
<C-l> = :open-link <space>
A = :unmark -a<Enter>:mark -T<Enter>:archive flat<Enter>
aa = :archive flat<Enter>
D = :delete-message<Enter>
dd = :mv Trash<Enter>
f = :forward -A<Enter>
f = :open-link <space>
<C-f> = :forward -A<Enter>
H = :toggle-headers<Enter>
J = :next-message<Enter>
K = :prev-message<Enter>
+276
View File
@@ -0,0 +1,276 @@
## where to store your database, default is your system data directory
## linux/mac: ~/.local/share/atuin/history.db
## windows: %USERPROFILE%/.local/share/atuin/history.db
# db_path = "~/.history.db"
## where to store your encryption key, default is your system data directory
## linux/mac: ~/.local/share/atuin/key
## windows: %USERPROFILE%/.local/share/atuin/key
# key_path = "~/.key"
## where to store your auth session token, default is your system data directory
## linux/mac: ~/.local/share/atuin/session
## windows: %USERPROFILE%/.local/share/atuin/session
# session_path = "~/.session"
## date format used, either "us" or "uk"
# dialect = "us"
## default timezone to use when displaying time
## either "l", "local" to use the system's current local timezone, or an offset
## from UTC in the format of "<+|->H[H][:M[M][:S[S]]]"
## for example: "+9", "-05", "+03:30", "-01:23:45", etc.
# timezone = "local"
## enable or disable automatic sync
# auto_sync = true
## enable or disable automatic update checks
update_check = false
## address of the sync server
# sync_address = "https://api.atuin.sh"
## how often to sync history. note that this is only triggered when a command
## is ran, so sync intervals may well be longer
## set it to 0 to sync after every command
# sync_frequency = "10m"
## which search mode to use
## possible values: prefix, fulltext, fuzzy, skim
search_mode = "fulltext"
## which filter mode to use by default
## possible values: "global", "host", "session", "directory", "workspace"
## consider using search.filters to customize the enablement and order of filter modes
# filter_mode = "global"
## With workspace filtering enabled, Atuin will filter for commands executed
## in any directory within a git repository tree (default: false).
##
## To use workspace mode by default when available, set this to true and
## set filter_mode to "workspace" or leave it unspecified and
## set search.filters to include "workspace" before other filter modes.
# workspaces = false
## which filter mode to use when atuin is invoked from a shell up-key binding
## the accepted values are identical to those of "filter_mode"
## leave unspecified to use same mode set in "filter_mode"
filter_mode_shell_up_key_binding = "session"
## which search mode to use when atuin is invoked from a shell up-key binding
## the accepted values are identical to those of "search_mode"
## leave unspecified to use same mode set in "search_mode"
# search_mode_shell_up_key_binding = "fuzzy"
## which style to use
## possible values: auto, full, compact
# style = "auto"
## the maximum number of lines the interface should take up
## set it to 0 to always go full screen
inline_height = 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 = 20
## Invert the UI - put the search bar at the top , Default to `false`
# invert = false
## enable or disable showing a preview of the selected command
## useful when the command is longer than the terminal width and is cut off
# show_preview = true
## what to do when the escape key is pressed when searching
## possible values: return-original, return-query
exit_mode = "return-query"
## possible values: emacs, subl
# word_jump_mode = "emacs"
## characters that count as a part of a word
# word_chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
## number of context lines to show when scrolling by pages
# scroll_context_lines = 1
## use ctrl instead of alt as the shortcut modifier key for numerical UI shortcuts
## alt-0 .. alt-9
ctrl_n_shortcuts = true
## default history list format - can also be specified with the --format arg
# history_format = "{time}\t{command}\t{duration}"
## prevent commands matching any of these regexes from being written to history.
## Note that these regular expressions are unanchored, i.e. if they don't start
## with ^ or end with $, they'll match anywhere in the command.
## For details on the supported regular expression syntax, see
## https://docs.rs/regex/latest/regex/#syntax
history_filter = [ "^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
## start with ^ or end with $, they'll match anywhere in CWD.
## For details on the supported regular expression syntax, see
## https://docs.rs/regex/latest/regex/#syntax
# cwd_filter = [
# "^/very/secret/area",
# ]
## Configure the maximum height of the preview to show.
## Useful when you have long scripts in your history that you want to distinguish
## by more than the first few lines.
max_preview_height = 20
## Configure whether or not to show the help row, which includes the current Atuin
## version (and whether an update is available), a keymap hint, and the total
## amount of commands in your history.
# show_help = true
## Configure whether or not to show tabs for search and inspect
# show_tabs = true
## Configure whether or not the tabs row may be auto-hidden, which includes the current Atuin
## tab, such as Search or Inspector, and other tabs you may wish to see. This will
## only be hidden if there are fewer than this count of lines available, and does not affect the use
## of keyboard shortcuts to switch tab. 0 to never auto-hide, default is 8 (lines).
## This is ignored except in `compact` mode.
# auto_hide_height = 8
## Defaults to true. This matches history against a set of default regex, and will not save it if we get a match. Defaults include
## 1. AWS key id
## 2. Github pat (old and new)
## 3. Slack oauth tokens (bot, user)
## 4. Slack webhooks
## 5. Stripe live/test keys
# secrets_filter = true
## Defaults to true. If enabled, upon hitting enter Atuin will immediately execute the command. Press tab to return to the shell and edit.
# This applies for new installs. Old installs will keep the old behaviour unless configured otherwise.
# enter_accept = true
## Defaults to false. If enabled, when triggered after && or ||, Atuin will complete commands to chain rather than replace the current line.
# command_chaining = false
## Defaults to "emacs". This specifies the keymap on the startup of `atuin
## search`. If this is set to "auto", the startup keymap mode in the Atuin
## search is automatically selected based on the shell's keymap where the
## keybinding is defined. If this is set to "emacs", "vim-insert", or
## "vim-normal", the startup keymap mode in the Atuin search is forced to be
## the specified one.
keymap_mode = "auto"
## Cursor style in each keymap mode. If specified, the cursor style is changed
## in entering the cursor shape. Available values are "default" and
## "{blink,steady}-{block,underline,bar}".
# keymap_cursor = { emacs = "blink-block", vim_insert = "blink-block", vim_normal = "steady-block" }
# network_connect_timeout = 5
# network_timeout = 5
## Timeout (in seconds) for acquiring a local database connection (sqlite)
# local_timeout = 5
## Set this to true and Atuin will minimize motion in the UI - timers will not update live, etc.
## Alternatively, set env NO_MOTION=true
# prefers_reduced_motion = false
[stats]
## Set commands where we should consider the subcommand for statistics. Eg, kubectl get vs just kubectl
# common_subcommands = [
# "apt",
# "cargo",
# "composer",
# "dnf",
# "docker",
# "git",
# "go",
# "ip",
# "jj",
# "kubectl",
# "nix",
# "nmcli",
# "npm",
# "pecl",
# "pnpm",
# "podman",
# "port",
# "systemctl",
# "tmux",
# "yarn",
# ]
## Set commands that should be totally stripped and ignored from stats
# common_prefix = [ "sudo" ]
## Set commands that will be completely ignored from stats
# ignored_commands = [ "cd", "ls", "vi" ]
[keys]
# Defaults to true. If disabled, using the up/down key won't exit the TUI when scrolled past the first/last entry.
# scroll_exits = true
# Defaults to true. The left arrow key will exit the TUI when scrolling before the first character
# exit_past_line_start = true
# Defaults to true. The right arrow key performs the same functionality as Tab and copies the selected line to the command line to be modified.
# accept_past_line_end = true
[sync]
# Enable sync v2 by default
# This ensures that sync v2 is enabled for new installs only
# In a later release it will become the default across the board
records = true
[preview]
## which preview strategy to use to calculate the preview height (respects max_preview_height).
## possible values: auto, static
## auto: length of the selected command.
## static: length of the longest command stored in the history.
## fixed: use max_preview_height as fixed height.
# strategy = "auto"
[daemon]
## Enables using the daemon to sync. Requires the daemon to be running in the background. Start it with `atuin daemon`
# enabled = false
## How often the daemon should sync in seconds
# sync_frequency = 300
## The path to the unix socket used by the daemon (on unix systems)
## linux/mac: ~/.local/share/atuin/atuin.sock
## windows: Not Supported
# socket_path = "~/.local/share/atuin/atuin.sock"
## Use systemd socket activation rather than opening the given path (the path must still be correct for the client)
## linux: false
## mac/windows: Not Supported
# systemd_socket = false
## The port that should be used for TCP on non unix systems
# tcp_port = 8889
# [theme]
## Color theme to use for rendering in the terminal.
## There are some built-in themes, including the base theme ("default"),
## "autumn" and "marine". You can add your own themes to the "./themes" subdirectory of your
## Atuin config (or ATUIN_THEME_DIR, if provided) as TOML files whose keys should be one or
## more of AlertInfo, AlertWarn, AlertError, Annotation, Base, Guidance, Important, and
## the string values as lowercase entries from this list:
## https://ogeon.github.io/docs/palette/master/palette/named/index.html
## If you provide a custom theme file, it should be called "NAME.toml" and the theme below
## should be the stem, i.e. `theme = "NAME"` for your chosen NAME.
# name = "autumn"
## Whether the theme manager should output normal or extra information to help fix themes.
## Boolean, true or false. If unset, left up to the theme manager.
# debug = true
[search]
## The list of enabled filter modes, in order of priority.
## The "workspace" mode is skipped when not in a workspace or workspaces = false.
## Default filter mode can be overridden with the filter_mode setting.
# filters = [ "global", "host", "session", "workspace", "directory" ]
[ui]
columns = [ "datetime", "duration", "host", "command" ]
+286
View File
@@ -0,0 +1,286 @@
#? Config file for btop v.1.4.7
#* Name of a btop++/bpytop/bashtop formatted ".theme" file, "Default" and "TTY" for builtin themes.
#* Themes should be placed in "../share/btop/themes" relative to binary or "$HOME/.config/btop/themes"
color_theme = "Default"
#* If the theme set background should be shown, set to False if you want terminal background transparency.
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
#* Set to true to force tty mode regardless if a real tty has been detected or not.
#* Will force 16-color mode and TTY theme, set all graph symbols to "tty" and swap out other non tty friendly symbols.
force_tty = false
#* 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.
#* Format: "box_name:P:G,box_name:P:G" P=(0 or 1) for alternate positions, G=graph symbol to use for box.
#* Use whitespace " " as separator between different presets.
#* Example: "cpu:0:default,mem:0:tty,proc:1:default cpu:0:braille,proc:0:tty"
presets = "cpu:1:default,proc:0:default cpu:0:default,mem:0:default,net:0:default cpu:0:block,net:0:tty"
#* Set to True to enable "h,j,k,l,g,G" keys for directional control in lists.
#* Conflicting keys for h:"help" and k:"kill" is accessible while holding shift.
vim_keys = true
#* Disable all mouse events.
disable_mouse = false
#* Rounded corners on boxes, is ignored if TTY mode is ON.
rounded_corners = true
#* Use terminal synchronized output sequences to reduce flickering on supported terminals.
terminal_sync = true
#* Default symbols to use for graph creation, "braille", "block" or "tty".
#* "braille" offers the highest resolution but might not be included in all fonts.
#* "block" has half the resolution of braille but uses more common characters.
#* "tty" uses only 3 different symbols but will work with most fonts and should work in a real TTY.
#* Note that "tty" only has half the horizontal resolution of the other two, so will show a shorter historical view.
graph_symbol = "braille"
# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty".
graph_symbol_cpu = "default"
# Graph symbol to use for graphs in gpu box, "default", "braille", "block" or "tty".
graph_symbol_gpu = "default"
# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty".
graph_symbol_mem = "default"
# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty".
graph_symbol_net = "default"
# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty".
graph_symbol_proc = "default"
#* Manually set which boxes to show. Available values are "cpu mem net proc" and "gpu0" through "gpu5", separate values with whitespace.
shown_boxes = "gpu0 cpu mem net proc"
#* Update time in milliseconds, recommended 2000 ms or above for better sample times for graphs.
update_ms = 2000
#* Processes sorting, "pid" "program" "arguments" "threads" "user" "memory" "cpu lazy" "cpu direct",
#* "cpu lazy" sorts top process over time (easier to follow), "cpu direct" updates top process directly.
proc_sorting = "memory"
#* Reverse sorting order, True or False.
proc_reversed = false
#* Show processes as a tree.
proc_tree = false
#* Use the cpu graph colors in the process list.
proc_colors = true
#* Use a darkening gradient in the process list.
proc_gradient = true
#* If process cpu usage should be of the core it's running on or usage of the total available cpu power.
proc_per_core = false
#* Show process memory as bytes instead of percent.
proc_mem_bytes = true
#* Show cpu graph for each process.
proc_cpu_graphs = true
#* Use /proc/[pid]/smaps for memory information in the process info box (very slow but more accurate)
proc_info_smaps = false
#* Show proc box on left side of screen instead of right.
proc_left = false
#* (Linux) Filter processes tied to the Linux kernel(similar behavior to htop).
proc_filter_kernel = false
#* 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.
proc_aggregate = false
#* Should cpu and memory usage display be preserved for dead processes when paused.
keep_dead_proc_usage = false
#* Sets the CPU stat shown in upper half of the CPU graph, "total" is always available.
#* Select from a list of detected attributes from the options menu.
cpu_graph_upper = "Auto"
#* Sets the CPU stat shown in lower half of the CPU graph, "total" is always available.
#* Select from a list of detected attributes from the options menu.
cpu_graph_lower = "Auto"
#* If gpu info should be shown in the cpu box. Available values = "Auto", "On" and "Off".
show_gpu_info = "Auto"
#* Toggles if the lower CPU graph should be inverted.
cpu_invert_lower = true
#* Set to True to completely disable the lower CPU graph.
cpu_single_graph = false
#* Show cpu box at bottom of screen instead of top.
cpu_bottom = false
#* Shows the system uptime in the CPU box.
show_uptime = true
#* Shows the CPU package current power consumption in watts. Requires running `make setcap` or `make setuid` or running with sudo.
show_cpu_watts = true
#* Show cpu temperature.
check_temp = true
#* Which sensor to use for cpu temperature, use options menu to select from list of available sensors.
cpu_sensor = "Auto"
#* Show temperatures for cpu cores also if check_temp is True and sensors has been found.
show_coretemp = true
#* Set a custom mapping between core and coretemp, can be needed on certain cpus to get correct temperature for correct core.
#* Use lm-sensors or similar to see which cores are reporting temperatures on your machine.
#* Format "x:y" x=core with wrong temp, y=core with correct temp, use space as separator between multiple entries.
#* Example: "4:0 5:1 6:3"
cpu_core_map = ""
#* Which temperature scale to use, available values: "celsius", "fahrenheit", "kelvin" and "rankine".
temp_scale = "celsius"
#* Use base 10 for bits/bytes sizes, KB = 1000 instead of KiB = 1024.
base_10_sizes = false
#* Show CPU frequency.
show_cpu_freq = true
#* How to calculate CPU frequency, available values: "first", "range", "lowest", "highest" and "average".
freq_mode = "first"
#* Draw a clock at top of screen, formatting according to strftime, empty string to disable.
#* Special formatting: /host = hostname | /user = username | /uptime = system uptime
clock_format = "%X"
#* Update main ui in background when menus are showing, set this to false if the menus is flickering too much for comfort.
background_update = true
#* Custom cpu model name, empty string to disable.
custom_cpu_name = ""
#* Optional filter for shown disks, should be full path of a mountpoint, separate multiple values with whitespace " ".
#* Only disks matching the filter will be shown. Prepend exclude= to only show disks not matching the filter. Examples: disk_filter="/boot /home/user", disks_filter="exclude=/boot /home/user"
disks_filter = ""
#* Show graphs instead of meters for memory values.
mem_graphs = true
#* Show mem box below net box instead of above.
mem_below_net = false
#* Count ZFS ARC in cached and available memory.
zfs_arc_cached = true
#* If swap memory should be shown in memory box.
show_swap = true
#* Show swap as a disk, ignores show_swap value above, inserts itself after first disk.
swap_disk = true
#* If mem box should be split to also show disks info.
show_disks = false
#* Filter out non physical disks. Set this to False to include network disks, RAM disks and similar.
only_physical = true
#* Read disks list from /etc/fstab. This also disables only_physical.
use_fstab = true
#* Setting this to True will hide all datasets, and only show ZFS pools. (IO stats will be calculated per-pool)
zfs_hide_datasets = false
#* Set to true to show available disk space for privileged users.
disk_free_priv = false
#* Toggles if io activity % (disk busy time) should be shown in regular disk usage view.
show_io_stat = true
#* Toggles io mode for disks, showing big graphs for disk read/write speeds.
io_mode = false
#* Set to True to show combined read/write io graphs in io mode.
io_graph_combined = false
#* Set the top speed for the io graphs in MiB/s (100 by default), use format "mountpoint:speed" separate disks with whitespace " ".
#* Example: "/mnt/media:100 /:20 /boot:1".
io_graph_speeds = ""
#* 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.
net_download = 100
net_upload = 100
#* Use network graphs auto rescaling mode, ignores any values set above and rescales down to 10 Kibibytes at the lowest.
net_auto = true
#* Sync the auto scaling for download and upload to whichever currently has the highest scale.
net_sync = true
#* Starts with the Network Interface specified here.
net_iface = ""
#* "True" shows bitrates in base 10 (Kbps, Mbps). "False" shows bitrates in binary sizes (Kibps, Mibps, etc.). "Auto" uses base_10_sizes.
base_10_bitrate = "Auto"
#* Show battery stats in top right if battery is present.
show_battery = true
#* Which battery to use if multiple are present. "Auto" for auto detection.
selected_battery = "Auto"
#* Show power stats of battery next to charge indicator.
show_battery_watts = true
#* Set loglevel for "~/.local/state/btop.log" levels are: "ERROR" "WARNING" "INFO" "DEBUG".
#* The level set includes all lower levels, i.e. "DEBUG" will show all logging info.
log_level = "WARNING"
#* Automatically save current settings to config file on exit.
save_config_on_exit = true
#* Measure PCIe throughput on NVIDIA cards, may impact performance on certain cards.
nvml_measure_pcie_speeds = true
#* Measure PCIe throughput on AMD cards, may impact performance on certain cards.
rsmi_measure_pcie_speeds = true
#* Horizontally mirror the GPU graph.
gpu_mirror_graph = true
#* Set which GPU vendors to show. Available values are "nvidia amd intel apple"
shown_gpus = "nvidia amd intel"
#* Custom gpu0 model name, empty string to disable.
custom_gpu_name0 = ""
#* Custom gpu1 model name, empty string to disable.
custom_gpu_name1 = ""
#* Custom gpu2 model name, empty string to disable.
custom_gpu_name2 = ""
#* Custom gpu3 model name, empty string to disable.
custom_gpu_name3 = ""
#* Custom gpu4 model name, empty string to disable.
custom_gpu_name4 = ""
#* Custom gpu5 model name, empty string to disable.
custom_gpu_name5 = ""
+156
View File
@@ -0,0 +1,156 @@
# -*- conf -*-
# shell=$SHELL (if set, otherwise user's default shell from /etc/passwd)
# term=foot (or xterm-256color if built with -Dterminfo=disabled)
# login-shell=no
# app-id=foot
# title=foot
# locked-title=no
font=monospace:size=10,JetBrainsMono Nerd Font:size=10
# font-bold=<bold variant of regular font>
# font-italic=<italic variant of regular font>
# font-bold-italic=<bold+italic variant of regular font>
# line-height=<font metrics>
# letter-spacing=0
# horizontal-letter-offset=0
# vertical-letter-offset=0
# underline-offset=<font metrics>
# box-drawings-uses-font-glyphs=no
dpi-aware=yes
# initial-window-size-pixels=700x500 # Or,
# initial-window-size-chars=<COLSxROWS>
# initial-window-mode=windowed
# resize-delay-ms=100
# notify=notify-send -a ${app-id} -i ${app-id} ${title} ${body}
# bold-text-in-bright=no
# word-delimiters=,│`|:"'()[]{}<>
# selection-target=primary
# workers=<number of logical CPUs>
[main]
include=/usr/share/foot/themes/gruvbox
[environment]
SYSTEMD_EDITOR=/usr/bin/nvim
EDITOR=/usr/bin/nvim
VISUAL=/usr/bin/nvim
PAGER="bat --style=header,rule,snip"
[bell]
# urgent=no
# notify=no
# command=
# command-focused=no
[scrollback]
lines=100000
# multiplier=3.0
# indicator-position=relative
# indicator-format=
[url]
# launch=xdg-open ${url}
# label-letters=sadfjklewcmpgh
# osc8-underline=url-mode
# protocols=http, https, ftp, ftps, file, gemini, gopher
# uri-characters=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_.,~:;/?#@!$&%*+="'()[]
[cursor]
# style=block
# color=<inverse foreground/background>
# blink=no
# beam-thickness=1.5
# underline-thickness=<font underline thickness>
[mouse]
# hide-when-typing=no
# alternate-scroll-mode=yes
[csd]
# preferred=server
size=0
# font=<primary font>
# color=<foreground color>
# hide-when-typing=no
# border-width=0
# border-color=<csd.color>
# button-width=26
# button-color=<background color>
# button-minimize-color=<regular4>
# button-maximize-color=<regular2>
# button-close-color=<regular1>
[key-bindings]
# scrollback-up-page=Shift+Page_Up
# scrollback-up-half-page=none
# scrollback-up-line=none
# scrollback-down-page=Shift+Page_Down
# scrollback-down-half-page=none
# scrollback-down-line=none
# clipboard-copy=Control+Shift+c XF86Copy
# clipboard-paste=Control+Shift+v XF86Paste
# primary-paste=Shift+Insert
search-start=Control+Shift+f
font-increase=Control+plus
font-decrease=Control+minus
font-reset=Control+equal
# spawn-terminal=Control+Shift+n
# minimize=none
# maximize=none
# fullscreen=none
# pipe-visible=[sh -c "xurls | fuzzel | xargs -r firefox"] none
# pipe-scrollback=[sh -c "xurls | fuzzel | xargs -r firefox"] none
# pipe-selected=[xargs -r firefox] none
# show-urls-launch=Control+Shift+o
show-urls-copy=Control+Shift+y
# show-urls-persistent=none
# prompt-prev=Control+Shift+z
# prompt-next=Control+Shift+x
# unicode-input=none
# noop=none
[search-bindings]
# cancel=Control+g Control+c Escape
# commit=Return
find-prev=Control+p
find-next=Control+n
# cursor-left=Left Control+b
# cursor-left-word=Control+Left Mod1+b
# cursor-right=Right Control+f
# cursor-right-word=Control+Right Mod1+f
# cursor-home=Home Control+a
# cursor-end=End Control+e
# delete-prev=BackSpace
# delete-prev-word=Mod1+BackSpace Control+BackSpace
# delete-next=Delete
# delete-next-word=Mod1+d Control+Delete
# extend-to-word-boundary=Control+w
# extend-to-next-whitespace=Control+Shift+w
# clipboard-paste=Control+v Control+Shift+v Control+y XF86Paste
# primary-paste=Shift+Insert
# unicode-input=none
[url-bindings]
# cancel=Control+g Control+c Control+d Escape
# toggle-url-visible=t
[text-bindings]
# \x03=Mod4+c # Map Super+c -> Ctrl+c
[mouse-bindings]
# selection-override-modifiers=Shift
# primary-paste=BTN_MIDDLE
# select-begin=BTN_LEFT
# select-begin-block=Control+BTN_LEFT
# select-extend=BTN_RIGHT
# select-extend-character-wise=Control+BTN_RIGHT
# select-word=BTN_LEFT-2
# select-word-whitespace=Control+BTN_LEFT-2
# select-row=BTN_LEFT-3
# vim: ft=dosini
+113
View File
@@ -0,0 +1,113 @@
# output=<not set>
font=JetBrainsMono-Regular:size=14
dpi-aware=auto
# use-bold=no
prompt="❯ "
# placeholder=
icon-theme=Qogir-dark
# icons-enabled=yes
# fields=filename,name,generic
# password-character=*
# filter-desktop=no
match-mode=fzf
# sort-result=yes
# match-counter=no
# delayed-filter-ms=300
# delayed-filter-limit=20000
# show-actions=no
terminal=footclient -e
# launch-prefix=<not set>
# list-executables-in-path=no
# anchor=center
# x-margin=0
# y-margin=0
lines=16
width=50
tabs=4
horizontal-pad=50
vertical-pad=18
inner-pad=10
image-size-ratio=.25
# line-height=<use font metrics>
# letter-spacing=0
# layer=overlay
exit-on-keyboard-focus-loss=no
# cache=<not set>
# render-workers=<number of logical CPUs>
# match-workers=<number of logical CPUs>
[colors]
background=0a0a0aff
text=ffffffff
prompt=00e5ffff
input=ffffffff
match=00e5ffff
selection-match=00e5ffff
selection=333333ff
selection-text=ffffffff
border=00e5ffff
[border]
# width=1
# radius=10
[dmenu]
# mode=text # text|index
# exit-immediately-if-empty=no
[key-bindings]
# cancel=Escape Control+g Control+c Control+bracketleft
# execute=Return KP_Enter Control+y
# execute-or-next=Tab
# execute-input=Shift+Return Shift+KP_Enter
# cursor-left=Left Control+b
# cursor-left-word=Control+Left Mod1+b
# cursor-right=Right Control+f
# cursor-right-word=Control+Right Mod1+f
# cursor-home=Home Control+a
# cursor-end=End Control+e
# delete-prev=BackSpace Control+h
# delete-prev-word=Mod1+BackSpace Control+BackSpace Control+w
# delete-line-backward=Control+u
# delete-next=Delete KP_Delete Control+d
# delete-next-word=Mod1+d Control+Delete Control+KP_Delete
# delete-line-forward=Control+k
# prev=Up Control+p
# prev-with-wrap=ISO_Left_Tab
# prev-page=Page_Up KP_Page_Up
# next=Down Control+n
# next-with-wrap=none
# next-page=Page_Down KP_Page_Down
# expunge=Shift+Delete
# clipboard-paste=Control+v XF86Paste
# primary-paste=Shift+Insert Shift+KP_Insert
# custom-N: *dmenu mode only*. Like execute, but with a non-zero
# exit-code; custom-1 exits with code 10, custom-2 with 11, custom-3
# with 12, and so on.
# custom-1=Mod1+1
# custom-2=Mod1+2
# custom-3=Mod1+3
# custom-4=Mod1+4
# custom-5=Mod1+5
# custom-6=Mod1+6
# custom-7=Mod1+7
# custom-8=Mod1+8
# custom-9=Mod1+9
# custom-10=Mod1+0
# custom-11=Mod1+exclam
# custom-12=Mod1+at
# custom-13=Mod1+numbersign
# custom-14=Mod1+dollar
# custom-15=Mod1+percent
# custom-16=Mod1+dead_circumflex
# custom-17=Mod1+ampersand
# custom-18=Mod1+asterix
# custom-19=Mod1+parentleft
+17
View File
@@ -0,0 +1,17 @@
[Settings]
gtk-theme-name=Arc-Dark
gtk-icon-theme-name=Qogir-Dark
gtk-font-name=Noto Sans 10
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=0
gtk-enable-input-feedback-sounds=0
gtk-xft-antialias=1
gtk-xft-hinting=1
gtk-xft-hintstyle=hintslight
gtk-xft-rgba=rgb
gtk-application-prefer-dark-theme=1
+19
View File
@@ -0,0 +1,19 @@
[main]
gtk-theme-name=Adwaita-dark
time-format=%H:%M
start-hidden=1
modules=powerbar-module
[userinfo]
round-image=true
horizontal-layout=false
under-clock=true
[powerbar]
show-labels=true
linked-buttons=true
reboot-command=systemctl reboot
poweroff-command=systemctl poweroff
suspend-command=systemctl suspend
userswitch-command=
logout-command=swaymsg exit
+49
View File
@@ -0,0 +1,49 @@
* {
border: none;
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: #0a0a0a;
}
#clock-label {
font-family: JetBrainsMono;
font-size: 64px;
color: #00e5ff;
}
#unlock-button {
background-color: rgba(10, 10, 10, 0.8);
border: 2px solid #333333;
padding: 4px;
color: #ffffff;
}
#unlock-button:hover {
border-color: #00e5ff;
background-color: #000000;
}
#input-field {
background-color: rgba(0, 0, 0, 0.8);
border: 2px solid #00e5ff;
padding-top: 5px;
padding-bottom: 5px;
color: #ffffff;
}
#powerbar-box button {
background-color: rgba(10, 10, 10, 0.8);
border: 2px solid #333333;
padding: 6px;
}
#powerbar-box button:hover {
border-color: #00e5ff;
color: #00e5ff;
}
#input-label {
font-size: 0px;
}
#window-box infobar {
background-color: transparent;
}
Binary file not shown.
+30
View File
@@ -0,0 +1,30 @@
- id: "1733842664884"
alias: Varmestyring
description: ""
use_blueprint:
path: MikaelUlvesjo/nordpool_simple_blueprint.yaml
input:
grid_area: sensor.nordpool_kwh_no1_nok_3_095_025
hour_rank: 16
turnon:
- action: climate.set_temperature
metadata: {}
data:
temperature: 19.5
target:
device_id:
- b65d14f7ef6300f4939db8935072b756
- ca85a2f25f3d48681e8d7e32d9de5e8e
- 2e1665d98e2051ea6f30e0b6ea31e7c5
turnoff:
- action: climate.set_temperature
metadata: {}
data:
temperature: 18
target:
device_id:
- b65d14f7ef6300f4939db8935072b756
- ca85a2f25f3d48681e8d7e32d9de5e8e
- 2e1665d98e2051ea6f30e0b6ea31e7c5
allways_off: 5
allways_on: 1
+269
View File
@@ -0,0 +1,269 @@
# Loads default set of integrations. Do not remove.
default_config:
# Load frontend themes from the themes folder
frontend:
themes: !include_dir_merge_named themes
http:
use_x_forwarded_for: true
trusted_proxies: 10.2.0.0/16
automation: !include automations.yaml
script: !include scripts.yaml
scene: !include scenes.yaml
google_assistant:
project_id: homeassistant-mothership-1123
service_account: !include SERVICE_ACCOUNT.JSON
report_state: true
sensor:
- platform: nordpool
region: "NO1"
currency: "NOK"
low_price_cutoff: 0.95
# - platform: template
# sensors:
# # NORDPOOL PRICES
# nordpool_today_hr_00_01:
# friendly_name: "Today hour 0"
# icon_template: mdi:cash
# unit_of_measurement: "øre"
# value_template: "{{ states.sensor.nordpool_kwh_oslo_nok_3_10_025.attributes.today[0] }}"
# nordpool_today_hr_01_02:
# friendly_name: "Today hour 1"
# icon_template: mdi:cash
# unit_of_measurement: "øre"
# value_template: "{{ states.sensor.nordpool_kwh_oslo_nok_3_10_025.attributes.today[1] }}"
# nordpool_today_hr_02_03:
# friendly_name: "Today hour 2"
# icon_template: mdi:cash
# unit_of_measurement: "øre"
# value_template: "{{ states.sensor.nordpool_kwh_oslo_nok_3_10_025.attributes.today[2] }}"
# nordpool_today_hr_03_04:
# friendly_name: "Today hour 3"
# icon_template: mdi:cash
# unit_of_measurement: "øre"
# value_template: "{{ states.sensor.nordpool_kwh_oslo_nok_3_10_025.attributes.today[3] }}"
# nordpool_today_hr_04_05:
# friendly_name: "Today hour 4"
# icon_template: mdi:cash
# unit_of_measurement: "øre"
# value_template: "{{ states.sensor.nordpool_kwh_oslo_nok_3_10_025.attributes.today[4] }}"
# nordpool_today_hr_05_06:
# friendly_name: "Today hour 5"
# icon_template: mdi:cash
# unit_of_measurement: "øre"
# value_template: "{{ states.sensor.nordpool_kwh_oslo_nok_3_10_025.attributes.today[5] }}"
# nordpool_today_hr_06_07:
# friendly_name: "Today hour 6"
# icon_template: mdi:cash
# unit_of_measurement: "øre"
# value_template: "{{ states.sensor.nordpool_kwh_oslo_nok_3_10_025.attributes.today[6] }}"
# nordpool_today_hr_07_08:
# friendly_name: "Today hour 7"
# icon_template: mdi:cash
# unit_of_measurement: "øre"
# value_template: "{{ states.sensor.nordpool_kwh_oslo_nok_3_10_025.attributes.today[7] }}"
# nordpool_today_hr_08_09:
# friendly_name: "Today hour 8"
# icon_template: mdi:cash
# unit_of_measurement: "øre"
# value_template: "{{ states.sensor.nordpool_kwh_oslo_nok_3_10_025.attributes.today[8] }}"
# nordpool_today_hr_09_10:
# friendly_name: "Today hour 9"
# icon_template: mdi:cash
# unit_of_measurement: "øre"
# value_template: "{{ states.sensor.nordpool_kwh_oslo_nok_3_10_025.attributes.today[9] }}"
# nordpool_today_hr_10_11:
# friendly_name: "Today hour 10"
# icon_template: mdi:cash
# unit_of_measurement: "øre"
# value_template: "{{ states.sensor.nordpool_kwh_oslo_nok_3_10_025.attributes.today[10] }}"
# nordpool_today_hr_11_12:
# friendly_name: "Today hour 11"
# icon_template: mdi:cash
# unit_of_measurement: "øre"
# value_template: "{{ states.sensor.nordpool_kwh_oslo_nok_3_10_025.attributes.today[11] }}"
# nordpool_today_hr_12_13:
# friendly_name: "Today hour 12"
# icon_template: mdi:cash
# unit_of_measurement: "øre"
# value_template: "{{ states.sensor.nordpool_kwh_oslo_nok_3_10_025.attributes.today[12] }}"
# nordpool_today_hr_13_14:
# friendly_name: "Today hour 13"
# icon_template: mdi:cash
# unit_of_measurement: "øre"
# value_template: "{{ states.sensor.nordpool_kwh_oslo_nok_3_10_025.attributes.today[13] }}"
# nordpool_today_hr_14_15:
# friendly_name: "Today hour 14"
# icon_template: mdi:cash
# unit_of_measurement: "øre"
# value_template: "{{ states.sensor.nordpool_kwh_oslo_nok_3_10_025.attributes.today[14] }}"
# nordpool_today_hr_15_16:
# friendly_name: "Today hour 15"
# icon_template: mdi:cash
# unit_of_measurement: "øre"
# value_template: "{{ states.sensor.nordpool_kwh_oslo_nok_3_10_025.attributes.today[15] }}"
# nordpool_today_hr_16_17:
# friendly_name: "Today hour 16"
# icon_template: mdi:cash
# unit_of_measurement: "øre"
# value_template: "{{ states.sensor.nordpool_kwh_oslo_nok_3_10_025.attributes.today[16] }}"
# nordpool_today_hr_17_18:
# friendly_name: "Today hour 17"
# icon_template: mdi:cash
# unit_of_measurement: "øre"
# value_template: "{{ states.sensor.nordpool_kwh_oslo_nok_3_10_025.attributes.today[17] }}"
# nordpool_today_hr_18_19:
# friendly_name: "Today hour 18"
# icon_template: mdi:cash
# unit_of_measurement: "øre"
# value_template: "{{ states.sensor.nordpool_kwh_oslo_nok_3_10_025.attributes.today[18] }}"
# nordpool_today_hr_19_20:
# friendly_name: "Today hour 19"
# icon_template: mdi:cash
# unit_of_measurement: "øre"
# value_template: "{{ states.sensor.nordpool_kwh_oslo_nok_3_10_025.attributes.today[19] }}"
# nordpool_today_hr_20_21:
# friendly_name: "Today hour 20"
# icon_template: mdi:cash
# unit_of_measurement: "øre"
# value_template: "{{ states.sensor.nordpool_kwh_oslo_nok_3_10_025.attributes.today[20] }}"
# nordpool_today_hr_21_22:
# friendly_name: "Today hour 21"
# icon_template: mdi:cash
# unit_of_measurement: "øre"
# value_template: "{{ states.sensor.nordpool_kwh_oslo_nok_3_10_025.attributes.today[21] }}"
# nordpool_today_hr_22_23:
# friendly_name: "Today hour 22"
# icon_template: mdi:cash
# unit_of_measurement: "øre"
# value_template: "{{ states.sensor.nordpool_kwh_oslo_nok_3_10_025.attributes.today[22] }}"
# nordpool_today_hr_23_24:
# friendly_name: "Today hour 23"
# icon_template: mdi:cash
# unit_of_measurement: "øre"
# value_template: "{{ states.sensor.nordpool_kwh_oslo_nok_3_10_025.attributes.today[23] }}"
# nordpool_tomorrow_hr_00_01:
# friendly_name: "Tomorrow hour 0"
# icon_template: mdi:cash
# unit_of_measurement: "øre"
# value_template: "{{ states.sensor.nordpool_kwh_oslo_nok_3_10_025.attributes.tomorrow[0] }}"
# nordpool_tomorrow_hr_01_02:
# friendly_name: "Tomorrow hour 1"
# icon_template: mdi:cash
# unit_of_measurement: "øre"
# value_template: "{{ states.sensor.nordpool_kwh_oslo_nok_3_10_025.attributes.tomorrow[1] }}"
# nordpool_tomorrow_hr_02_03:
# friendly_name: "Tomorrow hour 2"
# icon_template: mdi:cash
# unit_of_measurement: "øre"
# value_template: "{{ states.sensor.nordpool_kwh_oslo_nok_3_10_025.attributes.tomorrow[2] }}"
# nordpool_tomorrow_hr_03_04:
# friendly_name: "Tomorrow hour 3"
# icon_template: mdi:cash
# unit_of_measurement: "øre"
# value_template: "{{ states.sensor.nordpool_kwh_oslo_nok_3_10_025.attributes.tomorrow[3] }}"
# nordpool_tomorrow_hr_04_05:
# friendly_name: "Tomorrow hour 4"
# icon_template: mdi:cash
# unit_of_measurement: "øre"
# value_template: "{{ states.sensor.nordpool_kwh_oslo_nok_3_10_025.attributes.tomorrow[4] }}"
# nordpool_tomorrow_hr_05_06:
# friendly_name: "Tomorrow hour 5"
# icon_template: mdi:cash
# unit_of_measurement: "øre"
# value_template: "{{ states.sensor.nordpool_kwh_oslo_nok_3_10_025.attributes.tomorrow[5] }}"
# nordpool_tomorrow_hr_06_07:
# friendly_name: "Tomorrow hour 6"
# icon_template: mdi:cash
# unit_of_measurement: "øre"
# value_template: "{{ states.sensor.nordpool_kwh_oslo_nok_3_10_025.attributes.tomorrow[6] }}"
# nordpool_tomorrow_hr_07_08:
# friendly_name: "Tomorrow hour 7"
# icon_template: mdi:cash
# unit_of_measurement: "øre"
# value_template: "{{ states.sensor.nordpool_kwh_oslo_nok_3_10_025.attributes.tomorrow[7] }}"
# nordpool_tomorrow_hr_08_09:
# friendly_name: "Tomorrow hour 8"
# icon_template: mdi:cash
# unit_of_measurement: "øre"
# value_template: "{{ states.sensor.nordpool_kwh_oslo_nok_3_10_025.attributes.tomorrow[8] }}"
# nordpool_tomorrow_hr_09_10:
# friendly_name: "Tomorrow hour 9"
# icon_template: mdi:cash
# unit_of_measurement: "øre"
# value_template: "{{ states.sensor.nordpool_kwh_oslo_nok_3_10_025.attributes.tomorrow[9] }}"
# nordpool_tomorrow_hr_10_11:
# friendly_name: "Tomorrow hour 10"
# icon_template: mdi:cash
# unit_of_measurement: "øre"
# value_template: "{{ states.sensor.nordpool_kwh_oslo_nok_3_10_025.attributes.tomorrow[10] }}"
# nordpool_tomorrow_hr_11_12:
# friendly_name: "Tomorrow hour 11"
# icon_template: mdi:cash
# unit_of_measurement: "øre"
# value_template: "{{ states.sensor.nordpool_kwh_oslo_nok_3_10_025.attributes.tomorrow[11] }}"
# nordpool_tomorrow_hr_12_13:
# friendly_name: "Tomorrow hour 12"
# icon_template: mdi:cash
# unit_of_measurement: "øre"
# value_template: "{{ states.sensor.nordpool_kwh_oslo_nok_3_10_025.attributes.tomorrow[12] }}"
# nordpool_tomorrow_hr_13_14:
# friendly_name: "Tomorrow hour 13"
# icon_template: mdi:cash
# unit_of_measurement: "øre"
# value_template: "{{ states.sensor.nordpool_kwh_oslo_nok_3_10_025.attributes.tomorrow[13] }}"
# nordpool_tomorrow_hr_14_15:
# friendly_name: "Tomorrow hour 14"
# icon_template: mdi:cash
# unit_of_measurement: "øre"
# value_template: "{{ states.sensor.nordpool_kwh_oslo_nok_3_10_025.attributes.tomorrow[14] }}"
# nordpool_tomorrow_hr_15_16:
# friendly_name: "Tomorrow hour 15"
# icon_template: mdi:cash
# unit_of_measurement: "øre"
# value_template: "{{ states.sensor.nordpool_kwh_oslo_nok_3_10_025.attributes.tomorrow[15] }}"
# nordpool_tomorrow_hr_16_17:
# friendly_name: "Tomorrow hour 16"
# icon_template: mdi:cash
# unit_of_measurement: "øre"
# value_template: "{{ states.sensor.nordpool_kwh_oslo_nok_3_10_025.attributes.tomorrow[16] }}"
# nordpool_tomorrow_hr_17_18:
# friendly_name: "Tomorrow hour 17"
# icon_template: mdi:cash
# unit_of_measurement: "øre"
# value_template: "{{ states.sensor.nordpool_kwh_oslo_nok_3_10_025.attributes.tomorrow[17] }}"
# nordpool_tomorrow_hr_18_19:
# friendly_name: "Tomorrow hour 18"
# icon_template: mdi:cash
# unit_of_measurement: "øre"
# value_template: "{{ states.sensor.nordpool_kwh_oslo_nok_3_10_025.attributes.tomorrow[18] }}"
# nordpool_tomorrow_hr_19_20:
# friendly_name: "Tomorrow hour 19"
# icon_template: mdi:cash
# unit_of_measurement: "øre"
# value_template: "{{ states.sensor.nordpool_kwh_oslo_nok_3_10_025.attributes.tomorrow[19] }}"
# nordpool_tomorrow_hr_20_21:
# friendly_name: "Tomorrow hour 20"
# icon_template: mdi:cash
# unit_of_measurement: "øre"
# value_template: "{{ states.sensor.nordpool_kwh_oslo_nok_3_10_025.attributes.tomorrow[20] }}"
# nordpool_tomorrow_hr_21_22:
# friendly_name: "Tomorrow hour 21"
# icon_template: mdi:cash
# unit_of_measurement: "øre"
# value_template: "{{ states.sensor.nordpool_kwh_oslo_nok_3_10_025.attributes.tomorrow[21] }}"
# nordpool_tomorrow_hr_22_23:
# friendly_name: "Tomorrow hour 22"
# icon_template: mdi:cash
# unit_of_measurement: "øre"
# value_template: "{{ states.sensor.nordpool_kwh_oslo_nok_3_10_025.attributes.tomorrow[22] }}"
# nordpool_tomorrow_hr_23_24:
# friendly_name: "Tomorrow hour 23"
# icon_template: mdi:cash
# unit_of_measurement: "øre"
# value_template: "{{ states.sensor.nordpool_kwh_oslo_nok_3_10_025.attributes.tomorrow[23] }}"
View File
+10
View File
@@ -0,0 +1,10 @@
aliases:
dp: deployments
sec: v1/secrets
jo: jobs
cr: clusterroles
crb: clusterrolebindings
ro: roles
rb: rolebindings
np: networkpolicies
gr: gitrepo
+48
View File
@@ -0,0 +1,48 @@
k9s:
liveViewAutoRefresh: false
gpuVendors: {}
screenDumpDir: /home/hjalmarlucius/.local/state/k9s/screen-dumps
refreshRate: 2
apiServerTimeout: 2m0s
maxConnRetry: 5
readOnly: false
noExitOnCtrlC: false
portForwardAddress: localhost
ui:
enableMouse: false
headless: false
logoless: false
crumbsless: false
splashless: false
reactive: false
noIcons: false
defaultsToFullScreen: false
useFullGVRTitle: false
skipLatestRevCheck: false
disablePodCounting: false
shellPod:
image: busybox:1.35.0
namespace: default
limits:
cpu: 100m
memory: 100Mi
imageScans:
enable: false
exclusions:
namespaces: []
labels: {}
logger:
tail: 100
buffer: 5000
sinceSeconds: -1
textWrap: false
disableAutoscroll: false
showTime: true
thresholds:
cpu:
critical: 90
warn: 70
memory:
critical: 90
warn: 70
defaultView: ""
+6 -6
View File
@@ -1,6 +1,6 @@
[default]
default_calendar = purelymail
default_calendar = henrik@hjarl.com
highlight_event_days = true
[view]
@@ -16,18 +16,18 @@ longdateformat = %d.%m.%Y
[calendars]
[[purelymail]]
path = ~/.config/vdirsyncer/calendars/purelymail/
[[henrik@hjarl.com]]
path = ~/Calendars/henrik@hjarl.com/
color = yellow
priority = 10
[[google]]
path = ~/.config/vdirsyncer/calendars/google/bakken.henrik@gmail.com
[[bakken.henrik@gmail.com]]
path = ~/Calendars/google/bakken.henrik@gmail.com
color = light magenta
priority = 5
[[holidays]]
path = ~/.config/vdirsyncer/calendars/holidays/
path = ~/Calendars/holidays/
color = dark cyan
readonly = True
priority = 0
+4 -4
View File
@@ -1,6 +1,6 @@
[addressbooks]
[[bakken.henrik@gmail.com]]
path = ~/.config/vdirsyncer/contacts/google/default/
[[henrik@hjarl.com]]
path = ~/Contacts/henrik@hjarl.com/default/
[general]
debug = no
@@ -40,9 +40,9 @@ preferred_email_address_type = pref, work, home
# example:
# private_objects = Jabber, Skype, Twitter
# default: , (the empty list)
private_objects = Jabber, Skype, Twitter
private_objects = ,
# preferred vcard version: 3.0 / 4.0
preferred_version = 3.0
preferred_version = 4.0
# Look into source vcf files to speed up search queries: yes / no
search_in_source_files = no
# skip unparsable vcard files: yes / no
+13 -1
View File
@@ -28,6 +28,18 @@ application/x-bittorrent=org.qbittorrent.qBittorrent.desktop;
inode/directory=yazi.desktop;
x-scheme-handler/msteams=teams.desktop;
text/calendar=userapp-khalimport.desktop;
x-scheme-handler/discord=vesktop.desktop:
x-scheme-handler/discord=discord.desktop
application/vnd.openxmlformats-officedocument.wordprocessingml.document=org.kde.okular.desktop;
text/markdown=org.kde.okular.desktop;
application/zip=userapp-file-roller.desktop;
x-scheme-handler/rdp=org.remmina.Remmina.desktop;
x-scheme-handler/spice=org.remmina.Remmina.desktop;
x-scheme-handler/vnc=org.remmina.Remmina.desktop;
x-scheme-handler/remmina=org.remmina.Remmina.desktop;
application/x-remmina=org.remmina.Remmina.desktop;
application/vnd.openxmlformats-officedocument.wordprocessingml.document=libreoffice-writer.desktop;
image/heif=qimgv.desktop
[Added Associations]
[Removed Associations]
+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
File diff suppressed because it is too large Load Diff
+43
View File
@@ -0,0 +1,43 @@
window {
background-color: rgba(10, 10, 10, 0.95);
color: #ffffff;
border-radius: 0px;
border-right: 2px solid #00e5ff;
}
/* search entry */
entry {
box-shadow: none;
border: 1px solid #00e5ff;
background-color: #000000;
color: #00e5ff;
padding: 5px;
}
button,
image {
background-color: transparent;
background: none;
border: 1px solid transparent;
margin: 5px;
}
button:hover {
background-color: #111111;
border: 1px solid #00e5ff;
box-shadow: none;
}
#category-button {
margin: 0;
}
#pinned-box {
padding-bottom: 5px;
border-bottom: 2px solid #333333;
}
#files-box {
padding: 5px;
border: 1px solid #333333;
}
@@ -6,10 +6,6 @@
config_version: 2
settings:
colors.webpage.darkmode.enabled:
global: false
content.fullscreen.window:
global: true
downloads.location.directory:
global: /home/hjalmarlucius/Downloads
session.default_name:
View File
@@ -1,22 +1,27 @@
from typing import TYPE_CHECKING
import os
if TYPE_CHECKING:
from typing import Any
from qutebrowser.config.config import ConfigContainer
from qutebrowser.config.configfiles import ConfigAPI
config: Any = None
c: Any = None
c: "ConfigContainer" = c # type: ignore # noqa: F821
config: "ConfigAPI" = config # type: ignore # noqa: F821
config.load_autoconfig(True)
config.bind("<", "tab-move -")
config.bind("<Ctrl+Shift+Tab>", "tab-prev")
config.bind("<Ctrl+Tab>", "tab-next")
config.bind("<Ctrl+l>", "cmd-set-text :open {url:pretty}")
config.bind("<Ctrl+r>", "reload")
config.unbind("r", mode="normal")
config.bind("<Ctrl+r>", "reload -f")
config.bind("R", "reload", mode="normal")
config.bind("<Ctrl+n>", "tab-clone -w")
config.bind("<Ctrl+t>", "tab-clone -t")
config.bind("<Ctrl+Shift+r>", "restart", mode="normal")
config.bind("<Ctrl+h>", "history")
config.bind("<F8>", "config-cycle colors.webpage.darkmode.enabled true false")
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("<F12>", "devtools")
config.bind("<Shift+F12>", "view-source")
@@ -25,10 +30,11 @@ config.bind("<Shift+Escape>", "mode-enter passthrough", mode="insert")
config.bind(">", "tab-move +")
config.bind("K", "tab-prev")
config.bind("J", "tab-next")
config.bind("pww", "spawn --userscript qute-bitwarden")
config.bind("pwu", "spawn --userscript qute-bitwarden --username-only")
config.bind("pwp", "spawn --userscript qute-bitwarden --password-only")
config.bind("pwo", "spawn --userscript qute-bitwarden --totp-only")
fuzzelargs = """--dmenu-invocation 'fuzzel --dmenu -p "Bitwarden"' --password-prompt-invocation 'fuzzel --dmenu -p "Master Password: " --password --lines 0'"""
config.bind("pww", f"spawn --userscript qute-bitwarden {fuzzelargs}")
config.bind("pwu", f"spawn --userscript qute-bitwarden {fuzzelargs} --username-only")
config.bind("pwp", f"spawn --userscript qute-bitwarden {fuzzelargs} --password-only")
config.bind("pwo", f"spawn --userscript qute-bitwarden {fuzzelargs} --totp-only")
config.bind("do", "download-open")
config.bind("dx", "download-cancel")
config.bind("dD", "download-delete")
@@ -41,11 +47,10 @@ 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 mpv {hint-url}", mode="normal")
config.bind(",M", "spawn mpv {url}", mode="normal")
config.bind(",m", "hint links spawn -d mpv {hint-url}", mode="normal")
config.bind(",M", "spawn -d mpv {url}", mode="normal")
config.unbind("co") # close all tabs except this one
config.unbind("<Ctrl+x>") # navigate decrement
config.unbind("<Ctrl+a>") # navigate increment
@@ -64,8 +69,10 @@ c.completion.open_categories = [
"history",
"filesystem",
]
c.content.register_protocol_handler = False
c.content.blocking.enabled = True
c.content.blocking.method = "both"
c.content.fullscreen.window = True
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",
@@ -76,6 +83,12 @@ c.content.blocking.adblock.lists = [
"https://easylist.to/easylist/easyprivacy.txt",
"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.height = "100%"
c.confirm_quit = ["multiple-tabs", "downloads"]
@@ -103,12 +116,14 @@ urlconfigs: dict[str, list[tuple[str, bool | str | dict[str, str]]]] = {
{"X-YouTube-Client-Name": "85", "X-YouTube-Client-Version": "2.0"},
)
],
# "https://mail.google.com?extsrc=mailto&url=%25s": [
# ("content.register_protocol_handler", True)
# ],
# "https://calendar.google.com?cid=%25s": [
# ("content.register_protocol_handler", True)
# ],
"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 setting, value in urlconfig:
@@ -117,12 +132,11 @@ for url, urlconfig in urlconfigs.items():
c.downloads.position = "bottom"
c.downloads.prevent_mixed_content = False
c.editor.command = [
"foot",
"-title",
"scratchpad",
"-geometry",
"86x24+40+60",
"-e",
"footclient",
"--app-id",
"floating_shell",
"--window-size-chars",
"80x45",
"nvim",
"-f",
"{}",
@@ -133,16 +147,23 @@ c.input.insert_mode.auto_load = True
c.input.insert_mode.auto_leave = False
c.input.insert_mode.plugins = True
c.messages.timeout = 5000
c.qt.args = [
"disable-features=PermissionElement",
"ozone-platform-hint=wayland",
"ignore-gpu-blocklist",
"enable-gpu-rasterization",
"enable-accelerated-video-decode",
"enable-quic",
"enable-zero-copy",
]
c.qt.force_platform = "wayland"
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.smooth = False
c.session.lazy_restore = False
@@ -174,18 +195,18 @@ c.tabs.tabs_are_windows = False
c.tabs.title.format = "{index}.{current_title}"
c.tabs.undo_stack_size = 1000
c.tabs.width = "15%"
c.url.start_pages = "http://www.google.com/search?hl=en&source=hp&ie=ISO-8859-l"
c.url.default_page = "http://www.google.com/search?hl=en&source=hp&ie=ISO-8859-l"
c.url.searchengines = dict(
DEFAULT="http://www.google.com/search?hl=en&source=hp&ie=ISO-8859-l&q={}",
aw="https://wiki.archlinux.org/?search={}",
ap="https://www.archlinux.org/packages/?sort=&q={}",
gh="https://github.com/search?q={}&type=Code",
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.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 = {
"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
@@ -198,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"
@@ -245,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
@@ -305,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
Binary file not shown.
+69
View File
@@ -0,0 +1,69 @@
# required in Wayland/Sway:
# env QT_QPA_PLATFORM=xcb
# should_launch_new_instance 1
should_launch_new_window 1
should_launch_new_instance 1
startup_commands toggle_visual_scroll;toggle_custom_color
# 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
page_separator_width 10
# dark mode
dark_mode_background_color #1e1e2e
dark_mode_contrast 0.9
# UI
ui_font Noto Sans Mono
font_size 12
status_bar_font_size 16
status_bar_color #427b58
status_bar_text_color #fbf1c7
ui_text_color #cad3f5
ui_background_color #363a4f
ui_selected_text_color #cad3f5
ui_selected_background_color #5b6078
# brighten blue links
custom_color_contrast 1
custom_color_mode_empty_background_color #1d2021
# search
should_highlight_unselected_search 1
unselected_search_highlight_color #FF5733
# gruvbox
custom_background_color #282828
custom_text_color #fbf1c7
# text_highlight_color #eed49f
# visual_mark_color #8087a2
# search_highlight_color #eed49f
# link_highlight_color #8aadf4
# synctex_highlight_color #a6da95
+32
View File
@@ -0,0 +1,32 @@
add_newline = true
right_format = """$cmd_duration\n"""
[line_break]
disabled = false
[time]
disabled = false
[cmd_duration]
disabled = true
[directory]
truncation_length = 5
truncate_to_repo = false
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)\
\
"""
[git_status]
disabled = true
+389
View File
@@ -0,0 +1,389 @@
# ------------------------------------------
# THEME
# ------------------------------------------
# Apply gtk theming
exec_always ~/.config/sway/scripts/import-gsettings
# mouse settings: don't refocus, don't move with output
focus_follows_mouse no
mouse_warping none
# Set inner/outer gaps
smart_gaps on
gaps inner 4
gaps outer 0
# Hide titlebar on windows:
default_border pixel 2
smart_borders on
# Default Font
font pango:Noto Sans Regular 10
# Cursor
seat seat0 xcursor_theme Adwaita 0
# Title format for windows
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 $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 {
swaybar_command waybar
}
# ------------------------------------------
# DEFINITIONS
# ------------------------------------------
# Logo key. Use Mod1 for Alt.
set $mod Mod4
# Add Vim key support
set $left h
set $down j
set $up k
set $right l
# Set default terminal emulator
set $term footclient
# Application launcher
set $launcher fuzzel
# Application menu
set $menu nwg-drawer
# Power Menu
set $powermenu ~/.config/sway/scripts/power_menu.sh
# ------------------------------------------
# BINDINGS
# ------------------------------------------
# Launch the terminal
bindsym $mod+Return exec $term
bindsym $mod+Shift+Return exec foot bash
# Kill focused window
bindsym $mod+Shift+q kill
# Lock screen
bindsym $mod+f1 exec gtklock
# Reload the configuration file
bindsym $mod+Shift+c reload
# menus
bindsym {
# Open the power menu
$mod+Shift+e exec $powermenu
# Start your launcher
$mod+d exec $launcher
# Menu
$mod+Shift+d exec $menu
# Activities
$mod+p exec ~/.config/sway/scripts/window_switcher.sh
}
# move around
bindsym {
# Change window focus
$mod+Left focus left
$mod+Down focus down
$mod+Up focus up
$mod+Right focus right
# Vim key support
$mod+$left focus left
$mod+$down focus down
$mod+$up focus up
$mod+$right focus right
# Move the focused window
$mod+Shift+Left move left
$mod+Shift+Down move down
$mod+Shift+Up move up
$mod+Shift+Right move right
# Vim key support
$mod+Shift+$left move left
$mod+Shift+$down move down
$mod+Shift+$up move up
$mod+Shift+$right move right
}
# layout
bindsym {
# Set how the current window will be split
$mod+s splitv
$mod+v splith
$mod+q split toggle
# Switch the current container between different layout styles
$mod+w layout stacking
$mod+t layout tabbed
$mod+e layout toggle split
# Make the current focus fullscreen
$mod+f fullscreen
# Toggle between tiling and floating mode
$mod+Shift+space floating toggle
$mod+Ctrl+space sticky toggle
# Swap focus between the tiling area and the floating area
$mod+space focus mode_toggle
# Move focus to the parent container
$mod+a focus parent
# Move focus to the child container
$mod+Shift+a focus child
}
# scratchpad
bindsym {
# Move the currently focused window to the scratchpad
$mod+Shift+minus move scratchpad
# Show the next scratchpad window or hide the focused scratchpad window.
# If there are multiple scratchpad windows, this command cycles through them.
$mod+minus scratchpad show
}
# resize
# Move windows by holding down $mod and left mouse button.
# Resize them with right mouse button + $mod.
# Change "normal" to "inverse" to switch left and right
floating_modifier $mod normal
bindsym {
# Resize with arrow keys
$mod+ctrl+Right resize shrink width 100 px
$mod+ctrl+Up resize grow height 100 px
$mod+ctrl+Down resize shrink height 100 px
$mod+ctrl+Left resize grow width 100 px
# Resize with Vim keys
$mod+ctrl+$right resize shrink width 100 px
$mod+ctrl+$up resize grow height 100 px
$mod+ctrl+$down resize shrink height 100 px
$mod+ctrl+$left resize grow width 100 px
}
# Resize floating windows with mouse scroll
bindsym --whole-window --border {
# Resize vertically
$mod+button4 resize shrink height 5 px or 5 ppt
$mod+button5 resize grow height 5 px or 5 ppt
# Resize horizontally
$mod+Shift+button4 resize shrink width 5 px or 5 ppt
$mod+Shift+button5 resize grow width 5 px or 5 ppt
}
# media keys
bindsym {
# Volume
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
Scroll_Lock exec pamixer --toggle-mute
# Player
XF86AudioPlay exec playerctl play-pause
XF86AudioNext exec playerctl next
XF86AudioPrev exec playerctl previous
# Backlight
XF86MonBrightnessUp exec brightnessctl -c backlight set +5%
XF86MonBrightnessDown exec brightnessctl -c backlight set 5%-
}
# workspaces
bindsym {
# Switch to workspace
$mod+1 workspace 1
$mod+2 workspace 2
$mod+3 workspace 3
$mod+4 workspace 4
$mod+5 workspace 5
$mod+6 workspace 6
$mod+7 workspace 7
$mod+8 workspace 8
$mod+9 workspace 9
$mod+0 workspace 10
$mod+Insert workspace INS
$mod+Delete workspace DEL
$mod+Home workspace HOM
$mod+End workspace END
$mod+Prior workspace PUp
$mod+Next workspace Pdn
# Move focused container to workspace
$mod+Shift+1 move container to workspace 1
$mod+Shift+2 move container to workspace 2
$mod+Shift+3 move container to workspace 3
$mod+Shift+4 move container to workspace 4
$mod+Shift+5 move container to workspace 5
$mod+Shift+6 move container to workspace 6
$mod+Shift+7 move container to workspace 7
$mod+Shift+8 move container to workspace 8
$mod+Shift+9 move container to workspace 9
$mod+Shift+0 move container to workspace 10
$mod+Shift+Insert move container to workspace INS
$mod+Shift+Delete move container to workspace DEL
$mod+Shift+Home move container to workspace HOM
$mod+Shift+End move container to workspace END
$mod+Shift+Prior move container to workspace PUp
$mod+Shift+Next move container to workspace Pdn
}
# local config
include $HOME/.config/sway/local_config
# apps
bindsym {
# Snip a selection and pipe to swappy
$mod+Shift+s exec grim -g "$(slurp)" - | swappy -f -
# unicode picker
$mod+u exec unipicker --command "fuzzel --dmenu | wl-copy"
# 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
# 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
set $mode_monitor (b) btop, (h) htop, (s) isd, (j) journal, (n) nvtop
mode "$mode_monitor" {
bindsym b exec footclient --app-id floating_shell --window-size-chars 140x50 btop, mode "default"
bindsym h exec footclient --app-id floating_shell --window-size-chars 140x50 htop, mode "default"
bindsym s exec footclient --app-id floating_shell --window-size-chars 140x50 isd, mode "default"
bindsym j exec footclient --app-id floating_shell --window-size-chars 140x50 lazyjournal, mode "default"
bindsym n exec footclient --app-id floating_shell --window-size-chars 140x50 nvtop, mode "default"
bindsym Return mode "default"
bindsym Escape mode "default"
}
bindsym $mod+Shift+m mode "$mode_monitor"
# ------------------------------------------
# AUTOSTART
# ------------------------------------------
# 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
# Update dbus environments with display variables
exec hash dbus-update-activation-environment 2>/dev/null && \
dbus-update-activation-environment --systemd DISPLAY WAYLAND_DISPLAY SWAYSOCK XDG_CURRENT_DESKTOP
exec {
# Start foot server
exec systemctl --user enable --now foot-server.service
# Set wallpaper
~/.azotebg
# Network Applet
nm-applet --indicator
# automount usb
pcmanfm --daemon-mode
# Bluetooth Applet
blueman-applet
# 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
}
# ------------------------------------------
# WINDOWS
# ------------------------------------------
# Custom windowing rules
for_window [class="Yad" instance="yad"] floating enable
for_window [app_id="yad"] floating enable
for_window [app_id="blueman-manager"] floating enable, resize set width 40 ppt height 30 ppt
for_window [app_id="pavucontrol" ] floating enable, resize set width 40 ppt height 30 ppt
for_window [window_role="pop-up"] floating enable
for_window [window_role="bubble"] floating enable
for_window [window_role="task_dialog"] floating enable
for_window [window_role="Preferences"] floating enable
for_window [window_type="dialog"] floating enable
for_window [window_type="menu"] floating enable
for_window [window_role="About"] floating enable
for_window [title="File Operation Progress"] floating enable, border pixel 1, sticky enable, resize set width 40 ppt height 30 ppt
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="(?i)^steam$"] floating enable
for_window [app_id="(?i)^steam$" title="^Steam$"] floating disable
# Inhibit idle
for_window [app_id="firefox"] inhibit_idle fullscreen
for_window [app_id="Chromium"] inhibit_idle fullscreen
# Don't allow applications to inhibit shortcuts, i.e. grab total control of the
# keyboard. Chrome currently abuses this by enabling it for all "--app=..." shortcuts.
seat * shortcuts_inhibitor disable
# ------------------------------------------
# IO
# ------------------------------------------
input type:touchpad {
dwt enabled
tap disabled
natural_scroll enabled
accel_profile "adaptive"
}
input type:keyboard {
xkb_layout "us_custom,us_norwegian"
xkb_options "grp:shifts_toggle,caps:escape"
}
input type:mouse {
accel_profile "flat"
pointer_accel 0.5
}
+14
View File
@@ -0,0 +1,14 @@
#!/bin/sh
config="${XDG_CONFIG_HOME:-$HOME/.config}/gtk-3.0/settings.ini"
if [ ! -f "$config" ]; then exit 1; fi
gnome_schema="org.gnome.desktop.interface"
gtk_theme="$(grep 'gtk-theme-name' "$config" | cut -d'=' -f2)"
icon_theme="$(grep 'gtk-icon-theme-name' "$config" | cut -d'=' -f2)"
cursor_theme="$(grep 'gtk-cursor-theme-name' "$config" | cut -d'=' -f2)"
font_name="$(grep 'gtk-font-name' "$config" | cut -d'=' -f2)"
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'
+41
View File
@@ -0,0 +1,41 @@
#!/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"
CONFIRMATION="$(printf "No\nYes" | fuzzel --dmenu -a top-right -l 2 -w 18 -p "$action?")"
[[ "$CONFIRMATION" == *"Yes"* ]]
}
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
;;
esac
+32
View File
@@ -0,0 +1,32 @@
#!/bin/bash
# Define the lengths for each column
ws_length=2
app_id_length=14
name_length=50
# Fetch the data from swaymsg and format it
formatted_output=$(swaymsg -t get_tree | jq -r --arg ws_length "$ws_length" --arg app_id_length "$app_id_length" --arg name_length "$name_length" '
def lpad($len; $char):
if (.|length) > $len then $char * ($len - (.|length)) +.[:$len-1] + "\u2026" else $char * ($len - (.|length)) +. end;
def rpad($len; $char):
if (.|length) > $len then.[:$len-1] + "\u2026" else. + $char * ($len - (.|length)) end;
..
| objects
| select(.type == "workspace") as $ws
|..
| objects
| select(has("app_id"))
| (if.focused then "*" else " " end) as $asterisk
| "\($asterisk)[\($ws.name | lpad($ws_length | tonumber; " "))]\((.app_id // "xwayland") | lpad($app_id_length | tonumber; " ")): \(.name | rpad($name_length | tonumber; " ")) (\(.id))"
')
# Launch fuzzel with the formatted output
row=$(echo "$formatted_output" | fuzzel --dmenu --width=80 --lines=12)
# Get the container ID from the selection and focus the container
if [ -n "$row" ]; then
winid="${row##*(}"
winid="${winid%%)*}"
swaymsg "[con_id=$winid] focus"
fi
+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
+47 -42
View File
@@ -12,9 +12,13 @@ set -g allow-passthrough
set -g history-limit 100000
set -g focus-events on
# screen colors
# Advertise tmux correctly to programs running inside it.
set -g default-terminal "tmux-256color"
set -sa terminal-features ",xterm-256color:RGB"
set -as terminal-features ',*:RGB'
set -as terminal-features ',*:clipboard'
# Allow image passthrough
set -gq allow-passthrough on
# Start with index 1
set -g base-index 1
@@ -28,11 +32,8 @@ bg_active_window="color252"
bg_highlight="red"
# 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-format " #{pane_current_path} #{=/-20/…:pane_current_command} ${ps_pid}[${cmd}] #{?alternate_on,<Alt Mode> ,}"
setw -g pane-border-format " #{pane_current_path} #{=/-40/…:pane_current_command} #{?alternate_on,<Alt Mode> ,}"
set -g pane-border-style "fg=${fg_inactive_pane}"
set -g pane-active-border-style "fg=${fg_active_pane}"
@@ -59,17 +60,13 @@ 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
bind M-a send-prefix
# First remove *all* keybindings
unbind -a
bind M-a send-prefix
# Basic bindings
bind ? list-keys
bind d detach-client
@@ -77,18 +74,21 @@ bind D choose-client
bind : command-prompt
bind '~' show-messages
# Fix Home and End keys
bind-key -n Home send-keys "\033[H"
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 "xclip -i -f -selection primary | xclip -i -selection clipboard"
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 "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
bind , command-prompt "rename-window %%"
@@ -99,6 +99,10 @@ bind t clock-mode
# Show pane numbers
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
bind r source-file ~/.config/tmux/tmux.conf \; refresh-client \; display-message "Config reloaded"
@@ -114,6 +118,8 @@ bind v split-window -h -c "#{pane_current_path}"
bind s split-window -v -c "#{pane_current_path}"
bind V split-window -fh -c "#{pane_current_path}"
bind S split-window -fv -c "#{pane_current_path}"
bind x split-window -fh bash
# Change layouts
bind o rotate-window
@@ -133,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 '%%'"
@@ -182,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.
Binary file not shown.
+204
View File
@@ -0,0 +1,204 @@
{
"layer": "top", // Waybar at top layer
"position": "top", // Waybar position (top|bottom|left|right)
// "height": 30, // Auto-height is used when commented
// "width": 1280, // Full screen width when commented
"spacing": 16, // Gaps between modules (in px)
// See `man waybar` for more configuration options
// Configuration - modules-left
"modules-left": [
"custom/launcher",
"sway/workspaces",
"sway/mode",
"sway/window"
],
"custom/launcher": {
"format":"<span size='x-large'></span>",
"on-click": "exec nwg-drawer",
"tooltip": false
},
"sway/workspaces": {
"disable-scroll": true,
"all-outputs": true,
"format": "{icon}",
"format-icons": {
"3": "3",
"4": "4",
"5": "5",
"6": "6",
"7": "7",
"8": "8",
"9": "9",
"10": "10"
}
},
"sway/mode": {
"format": "<span style=\"italic\">{}</span>",
"tooltip": false
},
"sway/window": {
"format": "{}",
//"all-outputs": true, // Active window shows only on active display when commented
"max-length": 120
},
// Configuration - modules-center
"modules-center": [
"systemd-failed-units", "network"
],
"systemd-failed-units": {
"hide-on-ok": false, // Do not hide if there is zero failed units.
"format": "Systemd ✗ {nr_failed}",
"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 250x45 systemctl-tui'"
},
// Configuration - modules-right
"idle_inhibitor": {
"format": "{icon}",
"format-icons": {
"activated": "",
"deactivated": ""
},
"tooltip-format-activated": "Idle Inhibitor Activated",
"tooltip-format-deactivated": "Idle Inhibitor Deactivated"
},
"cpu": {
"interval": 5,
"format": "{usage:>3}%",
"states": {
"warning": 70,
"critical": 90,
},
"on-click": "footclient --app-id floating_shell --window-size-chars 250x150 -e btop"
},
"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 250x150 -e btop",
"states": {
"warning": 70,
"critical": 90
}
},
"disk#root": {
"path": "/",
"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 250x45 gdu -d'"
},
"backlight": {
"format": "{icon} {percent}%",
"format-icons": ["󰄰", "󰪞", "󰪟", "󰪠", "󰪡", "󰪢", "󰪣", "󰪤", "󰪥"],
"tooltip-format": "Backlight (Scroll): {percent:}%",
"on-scroll-down": "brightnessctl -c backlight set 5%-",
"on-scroll-up": "brightnessctl -c backlight set +5%"
},
"pulseaudio": {
"scroll-step": 2,
"format": "{icon} {volume}%",
"format-muted":"󰝟 muted",
"format-icons": {
"headphones": "",
"handsfree": "",
"headset": "",
"phone": "",
"portable": "",
"car": "",
"default": ["󰕿", "󰖀", "󰕾"]
},
"on-click": "pavucontrol",
"tooltip-format": "{icon}  {volume}% {format_source}",
"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%"
},
"include": "~/.config/waybar/local_config.jsonc",
"battery": {
"states": {
"warning": 30,
"critical": 15
},
"format": "{icon} {capacity}%",
"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}",
"tooltip-format": " {:%A %m/%d}\n\n<tt><small>{calendar}</small></tt>",
"calendar": {
"on-scroll": 1,
"format": {
"months": "<span color='#ffead3'><b>{}</b></span>",
"days": "<span color='#ecc6d9'><b>{}</b></span>",
"weeks": "<span color='#99ffdd'><b>W{}</b></span>",
"weekdays": "<span color='#ffcc66'><b>{}</b></span>",
"today": "<span color='#ff6699'><b><u>{}</u></b></span>"
},
},
"actions": {
"on-scroll-up": "shift_up",
"on-scroll-down": "shift_down"
},
"on-click": "swaymsg exec 'footclient --app-id floating_shell --window-size-chars 120x45 khal interactive'"
},
"tray": {
"icon-size": 16,
"spacing":10
},
"custom/power": {
"format":"⏻",
"on-click": "exec ~/.config/sway/scripts/power_menu.sh",
"tooltip": false
},
}
+168
View File
@@ -0,0 +1,168 @@
/* -----------------------------------------------------------------------------
* Keyframes & Colors
* -------------------------------------------------------------------------- */
@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: @text;
}
to {
color: @text;
background-color: orange;
}
}
@keyframes blink-critical {
70% {
color: @text;
}
to {
color: @text;
background-color: @urgent;
}
}
/* -----------------------------------------------------------------------------
* Base styles
* -------------------------------------------------------------------------- */
* {
border: none;
border-radius: 0;
min-height: 0;
margin: 1px;
padding: 0;
}
#waybar {
background: transparent;
color: @text;
background-color: @base1;
font-family: JetBrainsMono;
font-size: 13px;
border-bottom: 2px solid @dim;
}
/* Every modules */
#mode,
#network,
#custom-keyboard-layout,
#idle_inhibitor,
#cpu,
#memory,
#backlight,
#pulseaudio,
#battery,
#clock,
#tray {
padding: 0.5rem 0.6rem;
margin: 1px 0px;
}
/* -----------------------------------------------------------------------------
* Module styles
* -------------------------------------------------------------------------- */
#workspaces button {
border-radius: 0px;
color: @text;
padding: 1px 6px;
margin-right: 2px;
margin-left: 2px;
border-bottom: 2px solid transparent;
}
#workspaces button.focused {
border-bottom: 2px solid @highlight;
color: @highlight;
}
#workspaces button.urgent {
border-color: @urgent;
color: @urgent;
}
#mode {
background: @highlight;
color: #000000;
font-weight: bold;
margin-left: 5px;
padding: 7px;
}
#window {
font-weight: bold;
}
#network.disconnected {
color: orange;
}
#cpu.warning {
color: orange;
}
#cpu.critical {
color: red;
}
#memory {
animation-timing-function: linear;
animation-iteration-count: infinite;
animation-direction: alternate;
}
#memory.warning {
color: orange;
}
#memory.critical {
color: red;
animation-name: blink-critical;
animation-duration: 2s;
padding-left: 5px;
padding-right: 5px;
}
#backlight.icon {
}
#pulseaudio {
}
#pulseaudio.muted {
color: @highlight;
}
#battery {
animation-timing-function: linear;
animation-iteration-count: infinite;
animation-direction: alternate;
}
#battery.warning {
color: orange;
}
#battery.critical {
color: red;
}
#battery.warning.discharging {
animation-name: blink-warning;
animation-duration: 3s;
}
#battery.critical.discharging {
animation-name: blink-critical;
animation-duration: 2s;
}
#custom-power {
margin-left: 15px;
margin-right: 15px;
font-size: 15px;
}
+4
View File
@@ -0,0 +1,4 @@
[screencast]
chooser_type = dmenu
chooser_cmd = fuzzel --dmenu
max_fps=30
+1
View File
@@ -0,0 +1 @@
foot.desktop
+6
View File
@@ -0,0 +1,6 @@
partial alphanumeric_keys
xkb_symbols "basic" {
include "us(basic)"
name[Group1]= "US Custom";
key <MENU> { [ Super_L ] };
};
+16
View File
@@ -0,0 +1,16 @@
partial alphanumeric_keys
xkb_symbols "basic" {
include "us(basic)"
name[Group1]= "US Custom Norwegian";
key <MENU> { [ Super_L ] };
key <AD01> { [ q, Q, aring, Aring ] };
key <AD11> { [ bracketleft, braceleft, aring, Aring ] };
key <AD02> { [ w, W, ae, AE ] };
key <AC11> { [apostrophe, quotedbl, ae, AE ] };
key <AD05> { [ t, T, oslash, Oslash ] };
key <AC10> { [ semicolon, colon, oslash, Oslash ] };
key <AC03> { [ d, D, eacute, Eacute ] };
include "level3(ralt_switch)"
};
+314
View File
@@ -0,0 +1,314 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--The Xournal++ settings file. Do not edit this file! Most settings are available in the Settings dialog, the others are commented in this file, but handle with care!-->
<settings>
<property name="pressureSensitivity" value="true"/>
<property name="minimumPressure" value="0.05"/>
<property name="pressureMultiplier" value="1"/>
<property name="zoomGesturesEnabled" value="true"/>
<property name="selectedToolbar" value="Portrait"/>
<property name="lastSavePath" value="/home/hjalmarlucius/Downloads"/>
<property name="lastOpenPath" value=""/>
<property name="lastImagePath" value=""/>
<property name="edgePanSpeed" value="20"/>
<property name="edgePanMaxMult" value="5"/>
<property name="zoomStep" value="10"/>
<property name="zoomStepScroll" value="2"/>
<property name="displayDpi" value="72"/>
<property name="mainWndWidth" value="1702"/>
<property name="mainWndHeight" value="1398"/>
<property name="maximized" value="false"/>
<property name="showToolbar" value="true"/>
<property name="showSidebar" value="true"/>
<property name="sidebarWidth" value="159"/>
<property name="sidebarNumberingStyle" value="1"/>
<property name="sidebarOnRight" value="false"/>
<property name="scrollbarOnLeft" value="false"/>
<property name="menubarVisible" value="false"/>
<property name="filepathShownInTitlebar" value="false"/>
<property name="pageNumberShownInTitlebar" value="false"/>
<property name="numColumns" value="1"/>
<property name="numRows" value="1"/>
<property name="viewFixedRows" value="false"/>
<property name="showPairedPages" value="false"/>
<property name="layoutVertical" value="false"/>
<property name="layoutRightToLeft" value="false"/>
<property name="layoutBottomToTop" value="false"/>
<property name="numPairsOffset" value="1"/>
<!--The icon theme, allowed values are "disabled", "onDrawOfLastPage", and "onScrollOfLastPage"-->
<property name="emptyLastPageAppend" value="onScrollOfLastPage"/>
<property name="presentationMode" value="false"/>
<!--Which GUI elements are shown in default view mode, separated by a colon (,)-->
<property name="defaultViewModeAttributes" value="showMenubar,showToolbar"/>
<!--Which GUI elements are shown in fullscreen view mode, separated by a colon (,)-->
<property name="fullscreenViewModeAttributes" value="goFullscren,showToolbar,showSidebar"/>
<!--Which GUI elements are shown in presentation view mode, separated by a colon (,)-->
<property name="presentationViewModeAttributes" value="goFullscren,showToolbar"/>
<!--The cursor icon used with a stylus, allowed values are "none", "dot", "big", "arrow"-->
<property name="stylusCursorType" value="dot"/>
<!--The eraser cursor visibility used with a stylus, allowed values are "never", "always", "hover", "touch"-->
<property name="eraserVisibility" value="always"/>
<!--The icon theme, allowed values are "iconsColor", "iconsLucide"-->
<property name="iconTheme" value="iconsColor"/>
<!--Dark/light mode, allowed values are "useSystem", "forceLight", "forceDark"-->
<property name="themeVariant" value="useSystem"/>
<property name="highlightPosition" value="true"/>
<property name="cursorHighlightColor" value="2164260608"/>
<property name="cursorHighlightBorderColor" value="2147483903"/>
<property name="cursorHighlightRadius" value="30"/>
<property name="cursorHighlightBorderWidth" value="0"/>
<property name="useStockIcons" value="false"/>
<property name="disableScrollbarFadeout" value="false"/>
<property name="disableAudio" value="false"/>
<!--Hides scroolbars in the main window, allowed values: "none", "horizontal", "vertical", "both"-->
<property name="scrollbarHideType" value="none"/>
<property name="autoloadMostRecent" value="false"/>
<property name="autoloadPdfXoj" value="true"/>
<property name="defaultSaveName" value="%F-Note-%H-%M"/>
<property name="defaultPdfExportName" value="%{name}_annotated"/>
<property name="autosaveEnabled" value="true"/>
<property name="autosaveTimeout" value="3"/>
<property name="addHorizontalSpace" value="false"/>
<property name="addHorizontalSpaceAmountRight" value="150"/>
<property name="addHorizontalSpaceAmountLeft" value="150"/>
<property name="addVerticalSpace" value="false"/>
<property name="addVerticalSpaceAmountAbove" value="150"/>
<property name="addVerticalSpaceAmountBelow" value="150"/>
<property name="unlimitedScrolling" value="false"/>
<property name="drawDirModsEnabled" value="false"/>
<property name="drawDirModsRadius" value="50"/>
<property name="snapRotation" value="true"/>
<property name="snapRotationTolerance" value="0.3"/>
<property name="snapGrid" value="false"/>
<property name="snapGridTolerance" value="0.5"/>
<property name="snapGridSize" value="14.17"/>
<property name="strokeRecognizerMinSize" value="40"/>
<property name="touchDrawing" value="false"/>
<property name="gtkTouchInertialScrolling" value="true"/>
<property name="pressureGuessing" value="false"/>
<property name="recolor.enabled" value="false"/>
<property name="recolor.sidebar" value="false"/>
<property name="recolor.dark" value="4281349190"/>
<property name="recolor.light" value="4291219701"/>
<property name="selectionBorderColor" value="4294901760"/>
<property name="backgroundColor" value="4292664021"/>
<property name="selectionMarkerColor" value="4285702095"/>
<property name="activeSelectionColor" value="4286381056"/>
<property name="touchZoomStartThreshold" value="0"/>
<property name="pageRerenderThreshold" value="5"/>
<!--The count of rendered PDF pages which will be cached.-->
<property name="pdfPageCacheSize" value="10"/>
<property name="preloadPagesBefore" value="3"/>
<property name="preloadPagesAfter" value="5"/>
<property name="eagerPageCleanup" value="true"/>
<!--Config for new pages-->
<property name="pageTemplate" value="xoj/template&#10;copyLastPageSettings=true&#10;size=595.275591x841.889764&#10;backgroundType=lined&#10;backgroundColor=#ffffff&#10;"/>
<property name="sizeUnit" value=""/>
<property name="audioFolder" value=""/>
<property name="audioInputDevice" value="-1"/>
<property name="audioOutputDevice" value="-1"/>
<property name="audioSampleRate" value="44100"/>
<property name="audioGain" value="1"/>
<property name="defaultSeekTime" value="5"/>
<property name="pluginEnabled" value=""/>
<property name="pluginDisabled" value=""/>
<property name="strokeFilterIgnoreTime" value="150"/>
<property name="strokeFilterIgnoreLength" value="1"/>
<property name="strokeFilterSuccessiveTime" value="500"/>
<property name="strokeFilterEnabled" value="false"/>
<property name="doActionOnStrokeFiltered" value="false"/>
<property name="trySelectOnStrokeFiltered" value="false"/>
<property name="snapRecognizedShapesEnabled" value="false"/>
<property name="restoreLineWidthEnabled" value="false"/>
<property name="numIgnoredStylusEvents" value="0"/>
<property name="inputSystemTPCButton" value="false"/>
<property name="inputSystemDrawOutsideWindow" value="true"/>
<property name="preferredLocale" value=""/>
<property name="useSpacesForTab" value="false"/>
<property name="numberOfSpacesForTab" value="4"/>
<property name="laserPointerFadeOutTime" value="500"/>
<property name="stabilizerAveragingMethod" value="0"/>
<property name="stabilizerPreprocessor" value="0"/>
<property name="stabilizerBuffersize" value="20"/>
<property name="stabilizerSigma" value="0.5"/>
<property name="stabilizerDeadzoneRadius" value="1.3"/>
<property name="stabilizerDrag" value="0.4"/>
<property name="stabilizerMass" value="5"/>
<property name="stabilizerCuspDetection" value="true"/>
<property name="stabilizerFinalizeStroke" value="true"/>
<property name="colorPalette" value="/usr/share/xournalpp/palettes/xournal.gpl"/>
<property name="latexSettings.autoCheckDependencies" value="true"/>
<property name="latexSettings.defaultText" value="x^2"/>
<property name="latexSettings.globalTemplatePath" value="/usr/share/xournalpp/resources/default_template.tex"/>
<property name="latexSettings.genCmd" value="pdflatex -halt-on-error -interaction=nonstopmode '{}'"/>
<property name="latexSettings.sourceViewThemeId" value="classic"/>
<property name="latexSettings.editorFont" value="Monospace 12"/>
<property name="latexSettings.useCustomEditorFont" value="false"/>
<property name="latexSettings.editorWordWrap" value="true"/>
<property name="latexSettings.sourceViewAutoIndent" value="true"/>
<property name="latexSettings.sourceViewSyntaxHighlight" value="true"/>
<property name="latexSettings.sourceViewShowLineNumbers" value="false"/>
<property name="latexSettings.useExternalEditor" value="false"/>
<property name="latexSettings.externalEditorAutoConfirm" value="false"/>
<property name="latexSettings.externalEditorCmd" value=""/>
<property name="latexSettings.temporaryFileExt" value="tex"/>
<property name="font" font="Sans" size="12"/>
<data name="buttonConfig">
<data name="default">
<attribute name="color" type="hex" value="ff000000"/>
<attribute name="drawingType" type="string" value="default"/>
<attribute name="size" type="string" value="thin"/>
<attribute name="strokeType" type="string" value="none"/>
<attribute name="tool" type="string" value="pen"/>
</data>
<data name="eraser">
<attribute name="eraserMode" type="string" value="none"/>
<attribute name="size" type="string" value="none"/>
<attribute name="tool" type="string" value="eraser"/>
</data>
<data name="left">
<attribute name="tool" type="string" value="none"/>
</data>
<data name="middle">
<attribute name="tool" type="string" value="hand"/>
</data>
<data name="right">
<attribute name="tool" type="string" value="none"/>
</data>
<data name="stylus">
<attribute name="color" type="hex" value="ffffff00"/>
<attribute name="drawingType" type="string" value="default"/>
<attribute name="size" type="string" value="none"/>
<attribute name="tool" type="string" value="highlighter"/>
</data>
<data name="stylus2">
<attribute name="tool" type="string" value="none"/>
</data>
<data name="touch">
<attribute name="device" type="string" value=""/>
<attribute name="disableDrawing" type="boolean" value="false"/>
<attribute name="tool" type="string" value="none"/>
</data>
</data>
<data name="deviceClasses">
<data name="">
<attribute name="deviceClass" type="int" value="0"/>
<attribute name="deviceSource" type="int" value="0"/>
</data>
<data name="Wacom Co.,Ltd. Wacom One pen tablet small">
<attribute name="deviceClass" type="int" value="2"/>
<attribute name="deviceSource" type="int" value="1"/>
</data>
<data name="Wacom Co.,Ltd. Wacom One pen tablet small (Eraser)">
<attribute name="deviceClass" type="int" value="3"/>
<attribute name="deviceSource" type="int" value="2"/>
</data>
<data name="Wayland Pointer">
<attribute name="deviceClass" type="int" value="1"/>
<attribute name="deviceSource" type="int" value="0"/>
</data>
<data name="Wayland Wheel Scrolling">
<attribute name="deviceClass" type="int" value="1"/>
<attribute name="deviceSource" type="int" value="0"/>
</data>
</data>
<data name="tools">
<attribute name="current" type="string" value="pen"/>
<data name="drawArrow">
<attribute name="drawingType" type="string" value="default"/>
</data>
<data name="drawCoordinateSystem">
<attribute name="drawingType" type="string" value="default"/>
</data>
<data name="drawDoubleArrow">
<attribute name="drawingType" type="string" value="default"/>
</data>
<data name="drawEllipse">
<attribute name="drawingType" type="string" value="default"/>
</data>
<data name="drawRect">
<attribute name="drawingType" type="string" value="default"/>
</data>
<data name="drawSpline">
<attribute name="drawingType" type="string" value="default"/>
</data>
<data name="eraser">
<attribute name="drawingType" type="string" value="default"/>
<attribute name="size" type="string" value="MEDIUM"/>
<attribute name="type" type="string" value="default"/>
</data>
<data name="hand">
<attribute name="drawingType" type="string" value="default"/>
</data>
<data name="highlighter">
<attribute name="color" type="hex" value="ffffff00"/>
<attribute name="drawingType" type="string" value="default"/>
<attribute name="fill" type="int" value="0"/>
<attribute name="fillAlpha" type="int" value="128"/>
<attribute name="size" type="string" value="MEDIUM"/>
</data>
<data name="image">
<attribute name="drawingType" type="string" value="default"/>
</data>
<data name="laserPointerHighlighter">
<attribute name="color" type="hex" value="ffff0000"/>
<attribute name="drawingType" type="string" value="default"/>
<attribute name="size" type="string" value="MEDIUM"/>
</data>
<data name="laserPointerPen">
<attribute name="color" type="hex" value="ffff0000"/>
<attribute name="drawingType" type="string" value="default"/>
<attribute name="size" type="string" value="MEDIUM"/>
</data>
<data name="pen">
<attribute name="color" type="hex" value="ffff00ff"/>
<attribute name="drawingType" type="string" value="default"/>
<attribute name="fill" type="int" value="0"/>
<attribute name="fillAlpha" type="int" value="128"/>
<attribute name="size" type="string" value="THIN"/>
<attribute name="style" type="string" value="plain"/>
</data>
<data name="playObject">
<attribute name="drawingType" type="string" value="default"/>
</data>
<data name="selectMultiLayerRect">
<attribute name="drawingType" type="string" value="default"/>
</data>
<data name="selectMultiLayerRegion">
<attribute name="drawingType" type="string" value="default"/>
</data>
<data name="selectObject">
<attribute name="drawingType" type="string" value="default"/>
</data>
<data name="selectPdfTextLinear">
<attribute name="color" type="hex" value="ff000000"/>
<attribute name="drawingType" type="string" value="default"/>
</data>
<data name="selectPdfTextRect">
<attribute name="color" type="hex" value="ff000000"/>
<attribute name="drawingType" type="string" value="default"/>
</data>
<data name="selectRect">
<attribute name="drawingType" type="string" value="default"/>
</data>
<data name="selectRegion">
<attribute name="drawingType" type="string" value="default"/>
</data>
<data name="showFloatingToolbox">
<attribute name="drawingType" type="string" value="default"/>
</data>
<data name="text">
<attribute name="color" type="hex" value="ff000000"/>
<attribute name="drawingType" type="string" value="default"/>
</data>
<data name="verticalSpace">
<attribute name="drawingType" type="string" value="default"/>
</data>
</data>
<data name="touch">
<attribute name="cmdDisable" type="string" value=""/>
<attribute name="cmdEnable" type="string" value=""/>
<attribute name="disableTouch" type="boolean" value="false"/>
<attribute name="method" type="string" value="auto"/>
<attribute name="timeout" type="int" value="1000"/>
</data>
</settings>
+56
View File
@@ -0,0 +1,56 @@
[[mgr.prepend_keymap]]
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"
desc = "Enter the child directory, or open the file"
[[mgr.prepend_keymap]]
on = [ "c", "m" ]
run = "plugin chmod"
desc = "Chmod on selected files"
[[mgr.prepend_keymap]]
on = "F"
run = "plugin smart-filter"
desc = "Smart filter"
[[mgr.prepend_keymap]]
on = "M"
run = "plugin mount"
[[mgr.prepend_keymap]]
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"
+154
View File
@@ -0,0 +1,154 @@
[mgr]
linemode = "mtime"
show_hidden = true
sort_by = "natural"
ratio = [ 1, 4, 5 ]
[preview]
wrap = "yes"
image_delay = 50
max_width = 1500
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 %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
[[plugin.append_previewers]]
url = "*"
run = "file-extra-metadata"
[[plugin.prepend_fetchers]]
group = "git"
url = "*"
run = "git"
[[plugin.prepend_fetchers]]
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"'
[[plugin.prepend_previewers]]
url = "*.csv"
run = 'piper -- bat -p --color=always "$1"'
[[plugin.prepend_previewers]]
url = "*.md"
run = 'piper -- CLICOLOR_FORCE=1 glow -w=$w -s=dark "$1"'
[[plugin.prepend_previewers]]
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 = "*"
run = "file-extra-metadata"
+81
View File
@@ -0,0 +1,81 @@
# --- env ---
export SYSTEMD_EDITOR=nvim
export EDITOR=nvim
export VISUAL=nvim
export PAGER="bat --style=header,rule,snip"
export PATH=~/.local/bin:${KREW_ROOT:-$HOME/.krew}/bin:$PATH
export BROWSER=/usr/bin/qutebrowser
export HISTFILE=~/.config/zsh/history
export HISTSIZE=200000
export SAVEHIST=200000
# --- aliases ---
alias ls='ls --color=auto -Ah'
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 ---
bindkey '^[[Z' reverse-menu-complete # shift-tab
bindkey '^[^M' self-insert-unmeta # alt+enter newline
bindkey "^[^?" backward-kill-word # alt+backspace
# --- options ---
setopt HIST_IGNORE_ALL_DUPS HIST_IGNORE_SPACE SHARE_HISTORY EXTENDED_HISTORY
setopt AUTO_CD AUTO_MENU
setopt AUTO_PUSHD PUSHD_SILENT PUSHD_TO_HOME
setopt NO_NOMATCH
WORDCHARS='_-*?.[]~=&;!#$%^(){}<>'
# --- command line to EDITOR ---
autoload -Uz edit-command-line
zle -N edit-command-line
bindkey '^X^E' edit-command-line
# --- autocompletion ---
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 ${(s.:.)LS_COLORS}
if command -v kubectl >/dev/null 2>&1; then
source <(kubectl completion zsh)
fi
# --- div plugins ---
# autosuggestions must come before atuin
source /usr/share/zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh
eval "$(zoxide init zsh)"
eval "$(starship init zsh)"
# --- vi mode ---
bindkey -v
source /usr/share/zsh/plugins/zsh-vi-mode/zsh-vi-mode.plugin.zsh
# --- search ---
# fzf: Ctrl-T, Alt-C
FZF_DEFAULT_COMMAND='fd --type f --hidden --exclude .git' \
FZF_CTRL_R_COMMAND= \
FZF_CTRL_T_COMMAND="$FZF_DEFAULT_COMMAND" \
source <(fzf --zsh)
# atuin: Ctrl+R, /
eval "$(atuin init zsh)"
# handle collisions
function zvm_after_init() {
bindkey -M vicmd '^R' redo
bindkey -M viins '^R' atuin-search
}
# --- syntax hl ---
# must be the last plugins sourced
source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
+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())
@@ -0,0 +1,7 @@
[Desktop Entry]
Type=Application
Name=file-roller
Exec=file-roller %f
Categories=FileTools;FileManager;
MimeType=application/zip
Terminal=false
-36
View File
@@ -1,36 +0,0 @@
import pdb
class Config(pdb.DefaultConfig):
editor = "e"
stdin_paste = "epaste"
filename_color = pdb.Color.lightgray
use_terminal256formatter = False
# exec_if_unfocused = "play ~/sounds/dialtone.wav 2> /dev/null &"
def __init__(self):
# import readline
# readline.parse_and_bind('set convert-meta on')
# readline.parse_and_bind('Meta-/: complete')
try:
from pygments.formatters import terminal
except ImportError:
pass
else:
self.colorscheme = terminal.TERMINAL_COLORS.copy()
self.colorscheme.update(
{
terminal.Keyword: ("darkred", "red"),
terminal.Number: ("darkyellow", "yellow"),
terminal.String: ("brown", "green"),
terminal.Name.Function: ("darkgreen", "blue"),
terminal.Name.Namespace: ("teal", "cyan"),
}
)
def setup(self, pdb):
# make 'l' an alias to 'longlist'
Pdb = pdb.__class__
Pdb.do_l = Pdb.do_longlist
Pdb.do_st = Pdb.do_sticky
-8
View File
@@ -1,8 +0,0 @@
# required for qt5ct to know QT_QPA_PLATFORMTHEME
export QT_QPA_PLATFORMTHEME=qt5ct
export SYSTEMD_EDITOR=/usr/bin/nvim
export EDITOR=/usr/bin/nvim
export VISUAL=/usr/bin/nvim
export TERMINAL=/usr/bin/footclient
export PAGER="bat --style=header,rule,snip"
export BROWSER=/usr/bin/qutebrowser
+1
View File
@@ -0,0 +1 @@
export ZDOTDIR="$HOME/.config/zsh"
-16
View File
@@ -1,16 +0,0 @@
[terminal]
# The VT to run the greeter on. Can be "next", "current" or a number
# designating the VT.
vt = 1
# The default session, also known as the greeter.
[default_session]
# `agreety` is the bundled agetty/login-lookalike. You can replace `/bin/sh`
# with whatever you want started, such as `sway`.
command = "start-sway --unsupported-gpu --config /etc/greetd/sway-config 2> /etc/sway/sway.log"
# The user to run the command as. The privileges this user must have depends
# on the greeter. A graphical greeter may for example require the user to be
# in the `video` group.
user = "greeter"
-2
View File
@@ -1,2 +0,0 @@
sway
bash
@@ -0,0 +1 @@
br_netfilter
-23
View File
@@ -1,23 +0,0 @@
[General]
Backend = GreetD
Theme = sidebar
BlurBackground = true
IconTheme = breeze
[Overrides]
Background = /usr/share/qtgreet/backgrounds/Water.svg
BaseColor = Theme
TextColor = Theme
FontFamily = Noto Sans
[videobg]
File =
Playlist =
[Environment]
[PowerCommands]
Suspend = dbus
Hibernate = dbus
Shutdown = dbus
Reboot = dbus
-19
View File
@@ -1,19 +0,0 @@
#!/bin/sh
# Session
export XDG_SESSION_TYPE=wayland
export XDG_SESSION_DESKTOP=sway
export XDG_CURRENT_DESKTOP=sway
# Environment
# Source environmental variable from all files in PATH_ENVIRONMENT
# file should be named *.conf and have KEY=value format use # for comment
PATH_ENVIRONMENT=$HOME/.config/environment.d
if [ -d "$PATH_ENVIRONMENT" ]; then
for i in "$PATH_ENVIRONMENT"/*.conf ; do
if [ -f "$i" ]; then
set -a; . "$i"; set +a
fi
done
fi
exec sway "$@"
+23
View File
@@ -0,0 +1,23 @@
# output
set $out-left DP-1
set $out-right DP-2
output $out-left resolution 2560x1440 position 0 0
output $out-right resolution 3840x2160 position 2560 0
# switch to workspace
workspace 1 output $out-left
workspace 2 output $out-left
workspace 3 output $out-left
workspace 4 output $out-left
workspace 5 output $out-left
workspace 6 output $out-right
workspace 7 output $out-right
workspace 8 output $out-right
workspace 9 output $out-right
workspace 10 output $out-right
workspace INS output $out-left
workspace DEL output $out-right
workspace HOM output $out-left
workspace END output $out-right
workspace PUp output $out-left
workspace PDn output $out-right
@@ -0,0 +1,42 @@
{
"network": {
"interface": "enp6s0",
"format-disabled": " Disabled",
"format-wifi": " {bandwidthDownBits:>} 󰶡 {bandwidthUpBits:>} 󰶣 ({signalStrength}%)",
"tooltip-format-wifi": "{essid}",
"format-ethernet": "󰈀 {bandwidthDownBits:>} 󰶡 {bandwidthUpBits:>} 󰶣",
"tooltip-format-ethernet": "{ifname}: {ipaddr}/{cidr}",
"format-disconnected": " Disconnected",
"on-click": "footclient --app-id floating_shell --window-size-chars 60x45 -e nmtui",
"interval": 2
},
"disk#hdd1": {
"path": "/mnt/hdd1",
"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 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 150x45 watch nvidia-smi'",
"interval": 1
},
"modules-right": [
"idle_inhibitor",
"cpu",
"temperature",
"memory",
"custom/nvidia",
"disk#root",
"disk#hdd1",
"backlight",
"pulseaudio",
"battery",
"clock",
"tray",
"custom/notification",
"custom/power",
]
}
@@ -1,12 +0,0 @@
# `-l` activates layer-shell mode. Notice that `swaymsg exit` will run after gtkgreet.
exec "qtgreet; swaymsg exit"
bindsym Mod4+shift+e exec swaynag \
-t warning \
-m 'What do you want to do?' \
-b 'Poweroff' 'sudo poweroff' \
-b 'Reboot' 'sudo reboot'
output DP-1 resolution 2560x1440 position 0 0
# include /etc/sway/config.d/*
@@ -0,0 +1,3 @@
output DP-1 resolution 2560x1440 position 0 0
output DP-2 resolution 3840x2160 position 2560 0
exec "regreet; swaymsg exit"
@@ -0,0 +1,3 @@
[Login]
HandlePowerKey=ignore
HandlePowerKeyLongPress=poweroff
@@ -0,0 +1,5 @@
[Sleep]
AllowSuspend=no
AllowHibernation=no
AllowHybridSleep=no
AllowSuspendThenHibernate=no
-70
View File
@@ -1,70 +0,0 @@
set $out-left DP-1
set $out-right DP-2
output $out-left resolution 2560x1440 position 0 0
output $out-right resolution 3840x2160 position 2560 0
# switch to workspace
workspace $ws1 output $out-left
workspace $ws2 output $out-right
workspace $ws3 output $out-left
workspace $ws4 output $out-right
workspace $ws5 output $out-left
workspace $ws6 output $out-right
workspace $ws7 output $out-left
workspace $ws8 output $out-right
workspace $ws9 output $out-left
workspace $ws10 output $out-right
# switch to workspace
bindsym $mod+1 workspace $ws1
bindsym $mod+2 workspace $ws2
bindsym $mod+3 workspace $ws3
bindsym $mod+4 workspace $ws4
bindsym $mod+5 workspace $ws5
bindsym $mod+6 workspace $ws6
bindsym $mod+7 workspace $ws7
bindsym $mod+8 workspace $ws8
bindsym $mod+9 workspace $ws9
bindsym $mod+0 workspace $ws10
bindsym $mod+Insert workspace $ws5
bindsym $mod+Delete workspace $ws6
bindsym $mod+Home workspace $ws7
bindsym $mod+End workspace $ws8
bindsym $mod+Prior workspace $ws9
bindsym $mod+Next workspace $ws10
# Move focused container to workspace
bindsym $mod+Ctrl+1 move container to workspace $ws1
bindsym $mod+Ctrl+2 move container to workspace $ws2
bindsym $mod+Ctrl+3 move container to workspace $ws3
bindsym $mod+Ctrl+4 move container to workspace $ws4
bindsym $mod+Ctrl+5 move container to workspace $ws5
bindsym $mod+Ctrl+6 move container to workspace $ws6
bindsym $mod+Ctrl+7 move container to workspace $ws7
bindsym $mod+Ctrl+8 move container to workspace $ws8
bindsym $mod+Ctrl+9 move container to workspace $ws9
bindsym $mod+Ctrl+0 move container to workspace $ws10
bindsym $mod+Ctrl+Insert move container to workspace $ws5
bindsym $mod+Ctrl+Delete move container to workspace $ws6
bindsym $mod+Ctrl+Home move container to workspace $ws7
bindsym $mod+Ctrl+End move container to workspace $ws8
bindsym $mod+Ctrl+Prior move container to workspace $ws9
bindsym $mod+Ctrl+Next move container to workspace $ws10
# Move to workspace with focused container
bindsym $mod+Shift+1 move container to workspace $ws1; workspace $ws1
bindsym $mod+Shift+2 move container to workspace $ws2; workspace $ws2
bindsym $mod+Shift+3 move container to workspace $ws3; workspace $ws3
bindsym $mod+Shift+4 move container to workspace $ws4; workspace $ws4
bindsym $mod+Shift+5 move container to workspace $ws5; workspace $ws5
bindsym $mod+Shift+6 move container to workspace $ws6; workspace $ws6
bindsym $mod+Shift+7 move container to workspace $ws7; workspace $ws7
bindsym $mod+Shift+8 move container to workspace $ws8; workspace $ws8
bindsym $mod+Shift+9 move container to workspace $ws9; workspace $ws9
bindsym $mod+Shift+0 move container to workspace $ws10; workspace $ws10
bindsym $mod+Shift+Insert move container to workspace $ws5; workspace $ws5
bindsym $mod+Shift+Delete move container to workspace $ws8; workspace $ws6
bindsym $mod+Shift+Home move container to workspace $ws6; workspace $ws7
bindsym $mod+Shift+End move container to workspace $ws9; workspace $ws8
bindsym $mod+Shift+Prior move container to workspace $ws7; workspace $ws9
bindsym $mod+Shift+Next move container to workspace $ws10; workspace $ws10
@@ -1,34 +0,0 @@
{
"disk#disk1": {
"path": "/",
"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 /'"
},
"disk#disk2": {
"path": "/mnt/hdd1",
"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/'"
},
"network": {
"interface": "enp6s0",
"interval": 5,
"format-wifi": "{icon}",
"format-ethernet": "󰈀",
"format-disconnected": "󰖪",
"format-disabled": "󰀝",
"format-icons": [ "󰤯", "󰤟", "󰤢", "󰤥", "󰤨" ],
"format-wifi": "{icon} {ipaddr} {essid} ({signalStrength}%)",
"format-ethernet": "{icon} {ipaddr}",
"format-disconnected": "", //An empty format will hide the module.
"tooltip-format": "{icon} {ifname}: {ipaddr}",
"tooltip-format-ethernet": "{icon} {ifname}: {ipaddr}",
"tooltip-format-wifi": "{icon} {ifname} ({essid}): {ipaddr} ({signalStrength}%)",
"tooltip-format-disconnected": "{icon} disconnected",
"tooltip-format-disabled": "{icon} disabled",
"on-click": "swaymsg exec 'footclient --app-id floating_shell --window-size-chars 60x45 nmtui connect'"
}
}
@@ -0,0 +1,20 @@
# input
# input type:tablet_tool map_to_region 2560 0 2560 1440
# Monitor definition
set $main_monitor "BNQ BenQ RD280UG EM95T00073087"
# 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
@@ -0,0 +1,42 @@
{
"network": {
"interface": "wlan0",
"format-disabled": " Disabled",
"format-wifi": " {bandwidthDownBits:>} 󰶡 {bandwidthUpBits:>} 󰶣 ({signalStrength}%)",
"tooltip-format-wifi": "{essid}",
"format-ethernet": "󰈀 {bandwidthDownBits:>} 󰶡 {bandwidthUpBits:>} 󰶣",
"tooltip-format-ethernet": "{ifname}: {ipaddr}/{cidr}",
"format-disconnected": " Disconnected",
"on-click": "footclient --app-id floating_shell --window-size-chars 60x45 -e nmtui",
"interval": 2
},
"disk#hdd1": {
"path": "/mnt/hdd1",
"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 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 150x45 watch nvidia-smi'",
"interval": 1
},
"modules-right": [
"idle_inhibitor",
"cpu",
"temperature",
"memory",
"custom/nvidia",
"disk#root",
"disk#hdd1",
"backlight",
"pulseaudio",
"battery",
"clock",
"tray",
"custom/notification",
"custom/power",
]
}
@@ -1,12 +0,0 @@
# `-l` activates layer-shell mode. Notice that `swaymsg exit` will run after gtkgreet.
exec "qtgreet; swaymsg exit"
bindsym Mod4+shift+e exec swaynag \
-t warning \
-m 'What do you want to do?' \
-b 'Poweroff' 'sudo poweroff' \
-b 'Reboot' 'sudo reboot'
output DP-1 resolution 5120x1440
# include /etc/sway/config.d/*
@@ -0,0 +1,2 @@
output * resolution 5120x1440
exec "regreet; swaymsg exit"
@@ -0,0 +1,3 @@
[Login]
HandlePowerKey=ignore
HandlePowerKeyLongPress=poweroff

Some files were not shown because too many files have changed in this diff Show More