diff --git a/.config/alacritty/alacritty.yml b/.config/alacritty/alacritty.yml
deleted file mode 100644
index eb8b30f..0000000
--- a/.config/alacritty/alacritty.yml
+++ /dev/null
@@ -1,77 +0,0 @@
-window:
- decorations: none
- startup_mode: Maximized
-
-font:
- normal:
- family: Iosevka Term SS09
- style: Regular
-
- bold:
- family: Iosevka Term SS09
- style: Semibold
-
- italic:
- family: Iosevka Term Curly Slab
- style: Light Italic
-
- bold_italic:
- family: Iosevka SS15
- style: Extralight Italic
-
- size: 10
-
- offset:
- x: 0
- y: 3
-
- glyph_offset:
- x: 0
- y: 2
-
-cursor:
- # Values for `style`:
- # - ▇ Block
- # - _ Underline
- # - | Beam
- style: Block
- vi_mode_style: Beam
- unfocused_hollow: true
- thickness: 0.15
-
-mouse:
- hide_when_typing: true
- # url:
- # launcher:
- # program: /home/dln/bin/url-copy
-
-colors:
- primary:
- background: '#fcfcfc'
- foreground: '#000000'
-
- normal:
- black: '#212121'
- red: '#b7141e'
- green: '#457b23'
- yellow: '#f5971d'
- blue: '#134eb2'
- magenta: '#550087'
- cyan: '#0e707c'
- white: '#eeeeee'
- bright:
- black: '#424242'
- red: '#e83a3f'
- green: '#7aba39'
- yellow: '#fee92e'
- blue: '#53a4f3'
- magenta: '#a94dbb'
- cyan: '#26bad1'
- white: '#d8d8d8'
-
-key_bindings:
-- { key: V, mods: Alt, action: Paste }
-- { key: C, mods: Alt, action: Copy }
-- { key: V, mods: Shift|Alt, action: Paste }
-- { key: C, mods: Shift|Alt, action: Copy }
-- { key: Return, mods: Alt, action: ToggleFullscreen }
diff --git a/.config/atuin/config.toml b/.config/atuin/config.toml
deleted file mode 100644
index 0768eb6..0000000
--- a/.config/atuin/config.toml
+++ /dev/null
@@ -1,205 +0,0 @@
-## 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 = true
-
-## 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 = "fuzzy"
-
-## which filter mode to use
-## possible values: global, host, session, directory
-# filter_mode = "global"
-#filter_mode = "session"
-
-## With workspace filtering enabled, Atuin will filter for commands executed
-## in any directory within a git repository tree (default: false)
-# workspaces = false
-# workspaces = true
-
-## 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 = "global"
-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"
-search_mode_shell_up_key_binding = "prefix"
-
-## which style to use
-## possible values: auto, full, compact
-# style = "auto"
-style = "compact"
-
-## the maximum number of lines the interface should take up
-## set it to 0 to always go full screen
-# inline_height = 0
-inline_height = 6
-
-## Invert the UI - put the search bar at the top , Default to `false`
-# invert = false
-# invert = true
-
-## 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 = false
-
-## what to do when the escape key is pressed when searching
-## possible values: return-original, return-query
-# exit_mode = "return-original"
-
-## 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 = false
-
-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 = [
-# "^secret-cmd",
-# "^innocuous-cmd .*--secret=.+"
-# ]
-
-history_filter = []
-
-## 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"
-# ]
-
-cwd_filter = ["^~/media", "^/home/dln/media"]
-
-## 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 = 4
-
-## 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
-show_help = false
-
-## 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 = false
-enter_accept = true
-
-
-## 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,underilne,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
-
-prefers_reduced_motion = true
-
-#[stats]
-# Set commands where we should consider the subcommand for statistics. Eg, kubectl get vs just kubectl
-#common_subcommands = [
-# "cargo",
-# "go",
-# "git",
-# "npm",
-# "yarn",
-# "pnpm",
-# "kubectl",
-#]
-
-[stats]
-common_subcommands = [
- "cargo",
- "go",
- "git",
- "nix",
- "npm",
- "yarn",
- "pnpm",
- "kubectl",
- "task",
-]
-# Set commands that should be totally stripped and ignored from stats
-#common_prefix = ["sudo"]
-#
-common_prefix = ["doas", "sudo"]
diff --git a/.config/autostart/gnome-keyring-ssh.desktop b/.config/autostart/gnome-keyring-ssh.desktop
deleted file mode 100644
index d0cbed2..0000000
--- a/.config/autostart/gnome-keyring-ssh.desktop
+++ /dev/null
@@ -1,157 +0,0 @@
-[Desktop Entry]
-Type=Application
-Name[af]=SSH-sleutelagent
-Name[ar]=عميل مفاتيح SSH
-Name[as]=SSH কি সহায়ক
-Name[ast]=Axente de claves SSH
-Name[be]=SSH-агент ключоў
-Name[bg]=Агентът на SSH за ключове
-Name[bn]=SSH কী এজেন্ট
-Name[bn_IN]=SSH কি এজেন্ট
-Name[bs]=Agent za SSH ključeve
-Name[ca]=Agent de claus SSH
-Name[ca@valencia]=Agent de claus SSH
-Name[cs]=Agent klíčů SSH
-Name[da]=SSH-nøgleagent
-Name[de]=SSH-Schlüsselagent
-Name[el]=Πράκτορας κλειδιού SSH
-Name[en_GB]=SSH Key Agent
-Name[eo]=SSH-ŝlosila agento
-Name[es]=Agente de claves SSH
-Name[et]=SSH-võtmete agent
-Name[eu]=SSH gako-agentea
-Name[fa]=عامل کلید SSH
-Name[fi]=SSH-avainten agentti
-Name[fr]=Agent de clés SSH
-Name[fur]=Agjent clâfs SSH
-Name[gd]=Àidseant iuchair SSH
-Name[gl]=Axente de chave SSH
-Name[gu]=SSH કી ઍજન્ટ
-Name[he]=סוכן מפתחות SSH
-Name[hi]=AFS कुँजी प्रतिनिधि
-Name[hr]=Agent SSH ključa
-Name[hu]=SSH-kulcs ügynök
-Name[id]=Agen Kunci SSH
-Name[it]=Agente chiavi SSH
-Name[ja]=SSH 鍵エージェント
-Name[kk]=SSH кілттер агенті
-Name[km]=ភ្នាក់ងារសោ SSH
-Name[kn]=SSH ಕೀಲಿ ಮಧ್ಯವರ್ತಿ
-Name[ko]=SSH 키 에이전트
-Name[lt]=SSH raktų tarnyba
-Name[lv]=SSH atslēgu aģents
-Name[mjw]=SSH Key Agent
-Name[mk]=Агент за SSH клучеви
-Name[ml]=എസ്എസ്എച് കീ ഏജന്റ്
-Name[mr]=SSH कि एजंट
-Name[ms]=Ejen Kunci SSH
-Name[nb]=SSH-nøkkelagent
-Name[nl]=SSH-sleutelagent
-Name[nn]=Nøkkelagent for SSH
-Name[oc]=Agent de claus SSH
-Name[or]=SSH କି ସଦସ୍ୟ
-Name[pa]=SSH ਕੁੰਜੀ ਏਜੰਟ
-Name[pl]=Agent kluczy SSH
-Name[pt]=Agente de chaves SSH
-Name[pt_BR]=Agente de chaves SSH
-Name[ro]=Agent pentru chei SSH
-Name[ru]=Агент ключей SSH
-Name[sk]=Agent kľúčov SSH
-Name[sl]=Agent ključev SSH
-Name[sr]=Агент за ССХ кључеве
-Name[sr@latin]=Agent za SSH ključeve
-Name[sv]=SSH-nyckelagent
-Name[ta]=SSH முகவர்
-Name[te]=SSH కీ వాహకము
-Name[th]=เอเจนต์กุญแจ SSH
-Name[tr]=SSH Anahtar Aracı
-Name[ug]=SSH ئاچقۇچ ياردەمچىسى
-Name[uk]=Агент ключів SSH
-Name[vi]=Đại diện khóa SSH
-Name[zh_CN]=SSH 密钥代理
-Name[zh_HK]=SSH 密碼匙代理程式
-Name[zh_TW]=SSH 金鑰代理程式
-Name=SSH Key Agent
-Comment[af]=GNOME-sleutelring: SSH-agent
-Comment[ar]=حلقة مفاتيح جنوم: عميل SSH
-Comment[as]=GNOME Keyring: SSH সহায়ক
-Comment[ast]=Depósitu de claves de GNOME: axente SSH
-Comment[be]=Вязкі ключоў GNOME: SSH-агент
-Comment[bg]=Ключодържател на GNOME: агент на SSH
-Comment[bn]=GNOME কী রিং: SSH এজেন্ট
-Comment[bn_IN]=GNOME Keyring: SSH এজেন্ট
-Comment[bs]=Gnomovi privjesci: SSH agent
-Comment[ca]=Anell de claus del GNOME: agent SSH
-Comment[ca@valencia]=Anell de claus del GNOME: agent SSH
-Comment[cs]=Klíčenka GNOME: Agent SSH
-Comment[da]=GNOME-nøgleringsdæmon: SSH-agent
-Comment[de]=GNOME-Schlüsselbunddienst: SSH-Agent
-Comment[el]=Κλειδοθήκη GNOME: Πράκτορας SSH
-Comment[en_GB]=GNOME Keyring: SSH Agent
-Comment[eo]=GNOME Ŝlosilaro: SSH-agento
-Comment[es]=Depósito de claves de GNOME: agente SSH
-Comment[et]=GNOME võtmerõngas: SSH-agent
-Comment[eu]=GNOMEren gako-sorta: SSH agentea
-Comment[fa]=دستهکلید گنوم: عامل SSH
-Comment[fi]=Gnomen avainnippu: SSH-agentti
-Comment[fr]=Trousseau de clés de GNOME : agent SSH
-Comment[fur]=Puarteclâfs di GNOME: agjent SSH
-Comment[gd]=Dul-iuchrach: Àidseant SSH
-Comment[gl]=GNOME Keyring: Axente SSH
-Comment[gu]=GNOME કીરીંગ: SSH ઍજન્ટ
-Comment[he]=קבוצת מפתחות של GNOME: סוכן SSH
-Comment[hi]=गनोम कीरिंग: SSH प्रतिनिधि
-Comment[hr]=GNOME skup ključeva: SSH agent
-Comment[hu]=GNOME kulcstartó – SSH-ügynök
-Comment[id]=Ring Kunci GNOME: Agen SSH
-Comment[it]=Portachiavi di GNOME: agente SSH
-Comment[ja]=GNOME キーリング: SSH エージェント
-Comment[kk]=GNOME Keyring: SSH агенті
-Comment[km]=GNOME Keyring ៖ ភ្នាក់ងារ SSH
-Comment[kn]=GNOME ಕೀಲಿಗೊಂಚಲು: SSH ಮಧ್ಯವರ್ತಿ
-Comment[ko]=그놈 키 모음: SSH 에이전트
-Comment[lt]=GNOME raktinė: SSH tarnyba
-Comment[lv]=GNOME atslēgu saišķis — SSH aģents
-Comment[mjw]=GNOME Keyring: SSH Agent
-Comment[mk]=Приврзок на GNOME: SSH агент
-Comment[ml]=ഗ്നോം കീറിങ്: എസ്എസ്എച് ഏജന്റ്
-Comment[mr]=GNOME किरिंग: SSH एजंट
-Comment[ms]=Gelang Kunci GNOME: Ejen SSH
-Comment[nb]=GNOME nøkkelring: SSH-agent
-Comment[ne]=जिनोम किरिङ : SSH एजेन्ट
-Comment[nl]=Sleutelbos-service: SSH-agent
-Comment[nn]=GNOME Nøkkelring: SSH-agent
-Comment[oc]=Trossèl de claus GNOME : agent SSH
-Comment[or]=GNOME କି ରିଙ୍ଗ: SSH ସଦସ୍ୟ
-Comment[pa]=ਗਨੋਮ ਕੀਰਿੰਗ: SSH ਏਜੰਟ
-Comment[pl]=Baza kluczy dla środowiska GNOME: agent SSH
-Comment[pt]=GNOME Keyring: agente SSH
-Comment[pt_BR]=Chaveiro do GNOME: Agente SSH
-Comment[ro]=Inelul de chei GNOME: Agent SSH
-Comment[ru]=Связка ключей GNOME: SSH-агент
-Comment[sk]=SSH agent zväzku kľúčov GNOME
-Comment[sl]=Zbirka ključev GNOME: agent SSH
-Comment[sr]=Гномови привесци: ССХ агент
-Comment[sr@latin]=Gnomovi privesci: SSH agent
-Comment[sv]=GNOME-nyckelring: SSH-agent
-Comment[ta]=GNOME கீரிங்: SSH முகவர்
-Comment[te]=GNOME కీరింగ్: SSH వాహకం
-Comment[th]=พวงกุญแจของ GNOME: เอเจนต์ SSH
-Comment[tr]=GNOME Anahtarlığı: SSH Aracı
-Comment[ug]=گىنوم ئاچقۇچ ھالقىسى:SSH ياردەمچىسى
-Comment[uk]=Служба в'язки ключів GNOME: агент SSH
-Comment[vi]=Chùm chìa khóa GNOME: Đại diện SSH
-Comment[zh_CN]=GNOME 密钥环:SSH 代理
-Comment[zh_HK]=GNOME 密碼匙圈:SSH 代理程式
-Comment[zh_TW]=GNOME 鑰匙圈:SSH 代理程式
-Comment=GNOME Keyring: SSH Agent
-Exec=/usr/bin/gnome-keyring-daemon --start --components=ssh
-OnlyShowIn=GNOME;Unity;MATE;Cinnamon;
-X-GNOME-Autostart-Phase=PreDisplayServer
-X-GNOME-AutoRestart=false
-X-GNOME-Autostart-Notify=true
-X-GNOME-Bugzilla-Bugzilla=GNOME
-X-GNOME-Bugzilla-Product=gnome-keyring
-X-GNOME-Bugzilla-Component=general
-X-GNOME-Bugzilla-Version=42.1
-Hidden=true
diff --git a/.config/bat/config b/.config/bat/config
deleted file mode 100644
index 609fc6e..0000000
--- a/.config/bat/config
+++ /dev/null
@@ -1,3 +0,0 @@
---italic-text=always
---plain
---theme=ansi
diff --git a/.config/bat/themes/Catppuccin Mocha.tmTheme b/.config/bat/themes/Catppuccin Mocha.tmTheme
deleted file mode 100644
index 332cc98..0000000
--- a/.config/bat/themes/Catppuccin Mocha.tmTheme
+++ /dev/null
@@ -1,2021 +0,0 @@
-
-
-
-
- name
- Catppuccin Mocha
- semanticClass
- theme.dark.catppuccin-mocha
- uuid
- 627ce890-fabb-4d39-9819-7be71f4bdca7
- author
- Catppuccin Org
- colorSpaceName
- sRGB
- settings
-
-
- settings
-
- background
- #1e1e2e
- foreground
- #cdd6f4
- caret
- #f5e0dc
- lineHighlight
- #cdd6f412
- misspelling
- #f38ba8
- accent
- #cba6f7
- selection
- #9399b240
- activeGuide
- #45475a
- findHighlight
- #3e5767
- gutterForeground
- #7f849c
-
-
-
- name
- Basic text & variable names (incl. leading punctuation)
- scope
- text, source, variable.other.readwrite, punctuation.definition.variable
- settings
-
- foreground
- #cccccc
-
-
-
- name
- Parentheses, Brackets, Braces
- scope
- punctuation
- settings
-
- foreground
- #9399b2
- fontStyle
-
-
-
-
- name
- Comments
- scope
- comment, punctuation.definition.comment
- settings
-
- foreground
- #6c7086
- fontStyle
- italic
-
-
-
- scope
- string, punctuation.definition.string
- settings
-
- foreground
- #a6e3a1
-
-
-
- scope
- constant.character.escape
- settings
-
- foreground
- #f5c2e7
-
-
-
- name
- Booleans, constants, numbers
- scope
- constant.numeric, variable.other.constant, entity.name.constant, constant.language.boolean, constant.language.false, constant.language.true, keyword.other.unit.user-defined, keyword.other.unit.suffix.floating-point
- settings
-
- foreground
- #fab387
-
-
-
- scope
- keyword, keyword.operator.word, keyword.operator.new, variable.language.super, support.type.primitive, storage.type, storage.modifier, punctuation.definition.keyword
- settings
-
- foreground
- #cba6f7
- fontStyle
-
-
-
-
- scope
- entity.name.tag.documentation
- settings
-
- foreground
- #cba6f7
-
-
-
- name
- Punctuation
- scope
- keyword.operator, punctuation.accessor, punctuation.definition.generic, meta.function.closure punctuation.section.parameters, punctuation.definition.tag, punctuation.separator.key-value
- settings
-
- foreground
- #94e2d5
-
-
-
- scope
- entity.name.function, meta.function-call.method, support.function, support.function.misc, variable.function
- settings
-
- foreground
- #89b4fa
- fontStyle
- italic
-
-
-
- name
- Classes
- scope
- entity.name.class, entity.other.inherited-class, support.class, meta.function-call.constructor, entity.name.struct
- settings
-
- foreground
- #f9e2af
- fontStyle
- italic
-
-
-
- name
- Enum
- scope
- entity.name.enum
- settings
-
- foreground
- #f9e2af
- fontStyle
- italic
-
-
-
- name
- Enum member
- scope
- meta.enum variable.other.readwrite, variable.other.enummember
- settings
-
- foreground
- #94e2d5
-
-
-
- name
- Object properties
- scope
- meta.property.object
- settings
-
- foreground
- #94e2d5
-
-
-
- name
- Types
- scope
- meta.type, meta.type-alias, support.type, entity.name.type
- settings
-
- foreground
- #f9e2af
- fontStyle
- italic
-
-
-
- name
- Decorators
- scope
- meta.annotation variable.function, meta.annotation variable.annotation.function, meta.annotation punctuation.definition.annotation, meta.decorator, punctuation.decorator
- settings
-
- foreground
- #fab387
-
-
-
- scope
- variable.parameter, meta.function.parameters
- settings
-
- foreground
- #eba0ac
- fontStyle
- italic
-
-
-
- name
- Built-ins
- scope
- constant.language, support.function.builtin
- settings
-
- foreground
- #f38ba8
-
-
-
- scope
- entity.other.attribute-name.documentation
- settings
-
- foreground
- #f38ba8
-
-
-
- name
- Preprocessor directives
- scope
- keyword.control.directive, punctuation.definition.directive
- settings
-
- foreground
- #f9e2af
-
-
-
- name
- Type parameters
- scope
- punctuation.definition.typeparameters
- settings
-
- foreground
- #89dceb
-
-
-
- name
- Namespaces
- scope
- entity.name.namespace
- settings
-
- foreground
- #f9e2af
-
-
-
- name
- Property names (left hand assignments in json/yaml/css)
- scope
- support.type.property-name.css
- settings
-
- foreground
- #89b4fa
- fontStyle
-
-
-
-
- name
- This/Self keyword
- scope
- variable.language.this, variable.language.this punctuation.definition.variable
- settings
-
- foreground
- #f38ba8
-
-
-
- name
- Object properties
- scope
- variable.object.property
- settings
-
- foreground
- #cdd6f4
-
-
-
- name
- String template interpolation
- scope
- string.template variable, string variable
- settings
-
- foreground
- #cdd6f4
-
-
-
- name
- `new` as bold
- scope
- keyword.operator.new
- settings
-
- fontStyle
- bold
-
-
-
- name
- C++ extern keyword
- scope
- storage.modifier.specifier.extern.cpp
- settings
-
- foreground
- #cba6f7
-
-
-
- name
- C++ scope resolution
- scope
- entity.name.scope-resolution.template.call.cpp, entity.name.scope-resolution.parameter.cpp, entity.name.scope-resolution.cpp, entity.name.scope-resolution.function.definition.cpp
- settings
-
- foreground
- #f9e2af
-
-
-
- name
- C++ doc keywords
- scope
- storage.type.class.doxygen
- settings
-
- fontStyle
-
-
-
-
- name
- C++ operators
- scope
- storage.modifier.reference.cpp
- settings
-
- foreground
- #94e2d5
-
-
-
- name
- C# Interpolated Strings
- scope
- meta.interpolation.cs
- settings
-
- foreground
- #cdd6f4
-
-
-
- name
- C# xml-style docs
- scope
- comment.block.documentation.cs
- settings
-
- foreground
- #cdd6f4
-
-
-
- name
- Classes, reflecting the className color in JSX
- scope
- source.css entity.other.attribute-name.class.css, entity.other.attribute-name.parent-selector.css punctuation.definition.entity.css
- settings
-
- foreground
- #f9e2af
-
-
-
- name
- Operators
- scope
- punctuation.separator.operator.css
- settings
-
- foreground
- #94e2d5
-
-
-
- name
- Pseudo classes
- scope
- source.css entity.other.attribute-name.pseudo-class
- settings
-
- foreground
- #94e2d5
-
-
-
- scope
- source.css constant.other.unicode-range
- settings
-
- foreground
- #fab387
-
-
-
- scope
- source.css variable.parameter.url
- settings
-
- foreground
- #a6e3a1
- fontStyle
-
-
-
-
- name
- CSS vendored property names
- scope
- support.type.vendored.property-name
- settings
-
- foreground
- #89dceb
-
-
-
- name
- Less/SCSS right-hand variables (@/$-prefixed)
- scope
- source.css meta.property-value variable, source.css meta.property-value variable.other.less, source.css meta.property-value variable.other.less punctuation.definition.variable.less, meta.definition.variable.scss
- settings
-
- foreground
- #eba0ac
-
-
-
- name
- CSS variables (--prefixed)
- scope
- source.css meta.property-list variable, meta.property-list variable.other.less, meta.property-list variable.other.less punctuation.definition.variable.less
- settings
-
- foreground
- #89b4fa
-
-
-
- name
- CSS Percentage values, styled the same as numbers
- scope
- keyword.other.unit.percentage.css
- settings
-
- foreground
- #fab387
-
-
-
- name
- CSS Attribute selectors, styled the same as strings
- scope
- source.css meta.attribute-selector
- settings
-
- foreground
- #a6e3a1
-
-
-
- name
- JSON/YAML keys, other left-hand assignments
- scope
- keyword.other.definition.ini, punctuation.support.type.property-name.json, support.type.property-name.json, punctuation.support.type.property-name.toml, support.type.property-name.toml, entity.name.tag.yaml, punctuation.support.type.property-name.yaml, support.type.property-name.yaml
- settings
-
- foreground
- #89b4fa
- fontStyle
-
-
-
-
- name
- JSON/YAML constants
- scope
- constant.language.json, constant.language.yaml
- settings
-
- foreground
- #fab387
-
-
-
- name
- YAML anchors
- scope
- entity.name.type.anchor.yaml, variable.other.alias.yaml
- settings
-
- foreground
- #f9e2af
- fontStyle
-
-
-
-
- name
- TOML tables / ini groups
- scope
- support.type.property-name.table, entity.name.section.group-title.ini
- settings
-
- foreground
- #f9e2af
-
-
-
- name
- TOML dates
- scope
- constant.other.time.datetime.offset.toml
- settings
-
- foreground
- #f5c2e7
-
-
-
- name
- YAML anchor puctuation
- scope
- punctuation.definition.anchor.yaml, punctuation.definition.alias.yaml
- settings
-
- foreground
- #f5c2e7
-
-
-
- name
- YAML triple dashes
- scope
- entity.other.document.begin.yaml
- settings
-
- foreground
- #f5c2e7
-
-
-
- name
- Markup Diff
- scope
- markup.changed.diff
- settings
-
- foreground
- #fab387
-
-
-
- name
- Diff
- scope
- meta.diff.header.from-file, meta.diff.header.to-file, punctuation.definition.from-file.diff, punctuation.definition.to-file.diff
- settings
-
- foreground
- #89b4fa
-
-
-
- name
- Diff Inserted
- scope
- markup.inserted.diff
- settings
-
- foreground
- #a6e3a1
-
-
-
- name
- Diff Deleted
- scope
- markup.deleted.diff
- settings
-
- foreground
- #f38ba8
-
-
-
- name
- dotenv left-hand side assignments
- scope
- variable.other.env
- settings
-
- foreground
- #89b4fa
-
-
-
- name
- dotenv reference to existing env variable
- scope
- string.quoted variable.other.env
- settings
-
- foreground
- #cdd6f4
-
-
-
- name
- GDScript functions
- scope
- support.function.builtin.gdscript
- settings
-
- foreground
- #89b4fa
-
-
-
- name
- GDScript constants
- scope
- constant.language.gdscript
- settings
-
- foreground
- #fab387
-
-
-
- name
- Comment keywords
- scope
- comment meta.annotation.go
- settings
-
- foreground
- #eba0ac
-
-
-
- name
- go:embed, go:build, etc.
- scope
- comment meta.annotation.parameters.go
- settings
-
- foreground
- #fab387
-
-
-
- name
- Go constants (nil, true, false)
- scope
- constant.language.go
- settings
-
- foreground
- #fab387
-
-
-
- name
- GraphQL variables
- scope
- variable.graphql
- settings
-
- foreground
- #cdd6f4
-
-
-
- name
- GraphQL aliases
- scope
- string.unquoted.alias.graphql
- settings
-
- foreground
- #f2cdcd
-
-
-
- name
- GraphQL enum members
- scope
- constant.character.enum.graphql
- settings
-
- foreground
- #94e2d5
-
-
-
- name
- GraphQL field in types
- scope
- meta.objectvalues.graphql constant.object.key.graphql string.unquoted.graphql
- settings
-
- foreground
- #f2cdcd
-
-
-
- name
- HTML/XML DOCTYPE as keyword
- scope
- keyword.other.doctype, meta.tag.sgml.doctype punctuation.definition.tag, meta.tag.metadata.doctype entity.name.tag, meta.tag.metadata.doctype punctuation.definition.tag
- settings
-
- foreground
- #cba6f7
-
-
-
- name
- HTML/XML-like <tags/>
- scope
- entity.name.tag
- settings
-
- foreground
- #89b4fa
- fontStyle
-
-
-
-
- name
- Special characters like &
- scope
- text.html constant.character.entity, text.html constant.character.entity punctuation, constant.character.entity.xml, constant.character.entity.xml punctuation, constant.character.entity.js.jsx, constant.charactger.entity.js.jsx punctuation, constant.character.entity.tsx, constant.character.entity.tsx punctuation
- settings
-
- foreground
- #f38ba8
-
-
-
- name
- HTML/XML tag attribute values
- scope
- entity.other.attribute-name
- settings
-
- foreground
- #f9e2af
-
-
-
- name
- Components
- scope
- support.class.component, support.class.component.jsx, support.class.component.tsx, support.class.component.vue
- settings
-
- foreground
- #f5c2e7
- fontStyle
-
-
-
-
- name
- Annotations
- scope
- punctuation.definition.annotation, storage.type.annotation
- settings
-
- foreground
- #fab387
-
-
-
- name
- Java enums
- scope
- constant.other.enum.java
- settings
-
- foreground
- #94e2d5
-
-
-
- name
- Java imports
- scope
- storage.modifier.import.java
- settings
-
- foreground
- #cdd6f4
-
-
-
- name
- Javadoc
- scope
- comment.block.javadoc.java keyword.other.documentation.javadoc.java
- settings
-
- fontStyle
-
-
-
-
- name
- Exported Variable
- scope
- meta.export variable.other.readwrite.js
- settings
-
- foreground
- #eba0ac
-
-
-
- name
- JS/TS constants & properties
- scope
- variable.other.constant.js, variable.other.constant.ts, variable.other.property.js, variable.other.property.ts
- settings
-
- foreground
- #cdd6f4
-
-
-
- name
- JSDoc; these are mainly params, so styled as such
- scope
- variable.other.jsdoc, comment.block.documentation variable.other
- settings
-
- foreground
- #eba0ac
- fontStyle
-
-
-
-
- name
- JSDoc keywords
- scope
- storage.type.class.jsdoc
- settings
-
- fontStyle
-
-
-
-
- scope
- support.type.object.console.js
- settings
-
- foreground
- #cdd6f4
-
-
-
- name
- Node constants as keywords (module, etc.)
- scope
- support.constant.node, support.type.object.module.js
- settings
-
- foreground
- #cba6f7
-
-
-
- name
- implements as keyword
- scope
- storage.modifier.implements
- settings
-
- foreground
- #cba6f7
-
-
-
- name
- Builtin types
- scope
- constant.language.null.js, constant.language.null.ts, constant.language.undefined.js, constant.language.undefined.ts, support.type.builtin.ts
- settings
-
- foreground
- #cba6f7
-
-
-
- scope
- variable.parameter.generic
- settings
-
- foreground
- #f9e2af
-
-
-
- name
- Arrow functions
- scope
- keyword.declaration.function.arrow.js, storage.type.function.arrow.ts
- settings
-
- foreground
- #94e2d5
-
-
-
- name
- Decorator punctuations (decorators inherit from blue functions, instead of styleguide peach)
- scope
- punctuation.decorator.ts
- settings
-
- foreground
- #89b4fa
- fontStyle
- italic
-
-
-
- name
- Extra JS/TS keywords
- scope
- keyword.operator.expression.in.js, keyword.operator.expression.in.ts, keyword.operator.expression.infer.ts, keyword.operator.expression.instanceof.js, keyword.operator.expression.instanceof.ts, keyword.operator.expression.is, keyword.operator.expression.keyof.ts, keyword.operator.expression.of.js, keyword.operator.expression.of.ts, keyword.operator.expression.typeof.ts
- settings
-
- foreground
- #cba6f7
-
-
-
- name
- Julia macros
- scope
- support.function.macro.julia
- settings
-
- foreground
- #94e2d5
- fontStyle
- italic
-
-
-
- name
- Julia language constants (true, false)
- scope
- constant.language.julia
- settings
-
- foreground
- #fab387
-
-
-
- name
- Julia other constants (these seem to be arguments inside arrays)
- scope
- constant.other.symbol.julia
- settings
-
- foreground
- #eba0ac
-
-
-
- name
- LaTeX preamble
- scope
- text.tex keyword.control.preamble
- settings
-
- foreground
- #94e2d5
-
-
-
- name
- LaTeX be functions
- scope
- text.tex support.function.be
- settings
-
- foreground
- #89dceb
-
-
-
- name
- LaTeX math
- scope
- constant.other.general.math.tex
- settings
-
- foreground
- #f2cdcd
-
-
-
- name
- Lua docstring keywords
- scope
- comment.line.double-dash.documentation.lua storage.type.annotation.lua
- settings
-
- foreground
- #cba6f7
- fontStyle
-
-
-
-
- name
- Lua docstring variables
- scope
- comment.line.double-dash.documentation.lua entity.name.variable.lua, comment.line.double-dash.documentation.lua variable.lua
- settings
-
- foreground
- #cdd6f4
-
-
-
- scope
- heading.1.markdown punctuation.definition.heading.markdown, heading.1.markdown, markup.heading.atx.1.mdx, markup.heading.atx.1.mdx punctuation.definition.heading.mdx, markup.heading.setext.1.markdown, markup.heading.heading-0.asciidoc
- settings
-
- foreground
- #f38ba8
-
-
-
- scope
- heading.2.markdown punctuation.definition.heading.markdown, heading.2.markdown, markup.heading.atx.2.mdx, markup.heading.atx.2.mdx punctuation.definition.heading.mdx, markup.heading.setext.2.markdown, markup.heading.heading-1.asciidoc
- settings
-
- foreground
- #fab387
-
-
-
- scope
- heading.3.markdown punctuation.definition.heading.markdown, heading.3.markdown, markup.heading.atx.3.mdx, markup.heading.atx.3.mdx punctuation.definition.heading.mdx, markup.heading.heading-2.asciidoc
- settings
-
- foreground
- #f9e2af
-
-
-
- scope
- heading.4.markdown punctuation.definition.heading.markdown, heading.4.markdown, markup.heading.atx.4.mdx, markup.heading.atx.4.mdx punctuation.definition.heading.mdx, markup.heading.heading-3.asciidoc
- settings
-
- foreground
- #a6e3a1
-
-
-
- scope
- heading.5.markdown punctuation.definition.heading.markdown, heading.5.markdown, markup.heading.atx.5.mdx, markup.heading.atx.5.mdx punctuation.definition.heading.mdx, markup.heading.heading-4.asciidoc
- settings
-
- foreground
- #89b4fa
-
-
-
- scope
- heading.6.markdown punctuation.definition.heading.markdown, heading.6.markdown, markup.heading.atx.6.mdx, markup.heading.atx.6.mdx punctuation.definition.heading.mdx, markup.heading.heading-5.asciidoc
- settings
-
- foreground
- #cba6f7
-
-
-
- scope
- markup.bold
- settings
-
- foreground
- #f38ba8
- fontStyle
- bold
-
-
-
- scope
- markup.italic
- settings
-
- foreground
- #f38ba8
- fontStyle
- italic
-
-
-
- scope
- markup.strikethrough
- settings
-
- foreground
- #a6adc8
- fontStyle
- strikethrough
-
-
-
- name
- Markdown auto links
- scope
- punctuation.definition.link, markup.underline.link
- settings
-
- foreground
- #89b4fa
-
-
-
- name
- Markdown links
- scope
- text.html.markdown punctuation.definition.link.title, string.other.link.title.markdown, markup.link, punctuation.definition.constant.markdown, constant.other.reference.link.markdown, markup.substitution.attribute-reference
- settings
-
- foreground
- #b4befe
-
-
-
- name
- Markdown code spans
- scope
- punctuation.definition.raw.markdown, markup.inline.raw.string.markdown, markup.raw.block.markdown
- settings
-
- foreground
- #a6e3a1
-
-
-
- name
- Markdown triple backtick language identifier
- scope
- fenced_code.block.language
- settings
-
- foreground
- #89dceb
-
-
-
- name
- Markdown triple backticks
- scope
- markup.fenced_code.block punctuation.definition, markup.raw support.asciidoc
- settings
-
- foreground
- #9399b2
-
-
-
- name
- Markdown quotes
- scope
- markup.quote, punctuation.definition.quote.begin
- settings
-
- foreground
- #f5c2e7
-
-
-
- name
- Markdown separators
- scope
- meta.separator.markdown
- settings
-
- foreground
- #94e2d5
-
-
-
- name
- Markdown list bullets
- scope
- punctuation.definition.list.begin.markdown, markup.list.bullet
- settings
-
- foreground
- #94e2d5
-
-
-
- name
- Nix attribute names
- scope
- entity.other.attribute-name.multipart.nix, entity.other.attribute-name.single.nix
- settings
-
- foreground
- #89b4fa
-
-
-
- name
- Nix parameter names
- scope
- variable.parameter.name.nix
- settings
-
- foreground
- #cdd6f4
- fontStyle
-
-
-
-
- name
- Nix interpolated parameter names
- scope
- meta.embedded variable.parameter.name.nix
- settings
-
- foreground
- #b4befe
- fontStyle
-
-
-
-
- name
- Nix paths
- scope
- string.unquoted.path.nix
- settings
-
- foreground
- #f5c2e7
- fontStyle
-
-
-
-
- name
- PHP Attributes
- scope
- support.attribute.builtin, meta.attribute.php
- settings
-
- foreground
- #f9e2af
-
-
-
- name
- PHP Parameters (needed for the leading dollar sign)
- scope
- meta.function.parameters.php punctuation.definition.variable.php
- settings
-
- foreground
- #eba0ac
-
-
-
- name
- PHP Constants (null, __FILE__, etc.)
- scope
- constant.language.php
- settings
-
- foreground
- #cba6f7
-
-
-
- name
- PHP functions
- scope
- text.html.php support.function
- settings
-
- foreground
- #89dceb
-
-
-
- name
- PHPdoc keywords
- scope
- keyword.other.phpdoc.php
- settings
-
- fontStyle
-
-
-
-
- name
- Python argument functions reset to text, otherwise they inherit blue from function-call
- scope
- support.variable.magic.python, meta.function-call.arguments.python
- settings
-
- foreground
- #cdd6f4
-
-
-
- name
- Python double underscore functions
- scope
- support.function.magic.python
- settings
-
- foreground
- #89dceb
- fontStyle
- italic
-
-
-
- name
- Python `self` keyword
- scope
- variable.parameter.function.language.special.self.python, variable.language.special.self.python
- settings
-
- foreground
- #f38ba8
- fontStyle
- italic
-
-
-
- name
- python keyword flow/logical (for ... in)
- scope
- keyword.control.flow.python, keyword.operator.logical.python
- settings
-
- foreground
- #cba6f7
-
-
-
- name
- python storage type
- scope
- storage.type.function.python
- settings
-
- foreground
- #cba6f7
-
-
-
- name
- python function support
- scope
- support.token.decorator.python, meta.function.decorator.identifier.python
- settings
-
- foreground
- #89dceb
-
-
-
- name
- python function calls
- scope
- meta.function-call.python
- settings
-
- foreground
- #89b4fa
-
-
-
- name
- python function decorators
- scope
- entity.name.function.decorator.python, punctuation.definition.decorator.python
- settings
-
- foreground
- #fab387
- fontStyle
- italic
-
-
-
- name
- python placeholder reset to normal string
- scope
- constant.character.format.placeholder.other.python
- settings
-
- foreground
- #f5c2e7
-
-
-
- name
- Python exception & builtins such as exit()
- scope
- support.type.exception.python, support.function.builtin.python
- settings
-
- foreground
- #fab387
-
-
-
- name
- entity.name.type
- scope
- support.type.python
- settings
-
- foreground
- #fab387
-
-
-
- name
- python constants (True/False)
- scope
- constant.language.python
- settings
-
- foreground
- #cba6f7
-
-
-
- name
- Arguments accessed later in the function body
- scope
- meta.indexed-name.python, meta.item-access.python
- settings
-
- foreground
- #eba0ac
- fontStyle
- italic
-
-
-
- name
- Python f-strings/binary/unicode storage types
- scope
- storage.type.string.python
- settings
-
- foreground
- #a6e3a1
- fontStyle
- italic
-
-
-
- name
- Python type hints
- scope
- meta.function.parameters.python
- settings
-
- fontStyle
-
-
-
-
- name
- Regex string begin/end in JS/TS
- scope
- string.regexp punctuation.definition.string.begin, string.regexp punctuation.definition.string.end
- settings
-
- foreground
- #f5c2e7
-
-
-
- name
- Regex anchors (^, $)
- scope
- keyword.control.anchor.regexp
- settings
-
- foreground
- #cba6f7
-
-
-
- name
- Regex regular string match
- scope
- string.regexp.ts
- settings
-
- foreground
- #cdd6f4
-
-
-
- name
- Regex group parenthesis & backreference (\1, \2, \3, ...)
- scope
- punctuation.definition.group.regexp, keyword.other.back-reference.regexp
- settings
-
- foreground
- #a6e3a1
-
-
-
- name
- Regex character class []
- scope
- punctuation.definition.character-class.regexp
- settings
-
- foreground
- #f9e2af
-
-
-
- name
- Regex character classes (\d, \w, \s)
- scope
- constant.other.character-class.regexp
- settings
-
- foreground
- #f5c2e7
-
-
-
- name
- Regex range
- scope
- constant.other.character-class.range.regexp
- settings
-
- foreground
- #f5e0dc
-
-
-
- name
- Regex quantifier
- scope
- keyword.operator.quantifier.regexp
- settings
-
- foreground
- #94e2d5
-
-
-
- name
- Regex constant/numeric
- scope
- constant.character.numeric.regexp
- settings
-
- foreground
- #fab387
-
-
-
- name
- Regex lookaheads, negative lookaheads, lookbehinds, negative lookbehinds
- scope
- punctuation.definition.group.no-capture.regexp, meta.assertion.look-ahead.regexp, meta.assertion.negative-look-ahead.regexp
- settings
-
- foreground
- #89b4fa
-
-
-
- name
- Rust attribute
- scope
- meta.annotation.rust, meta.annotation.rust punctuation, meta.attribute.rust, punctuation.definition.attribute.rust
- settings
-
- foreground
- #f9e2af
- fontStyle
- italic
-
-
-
- name
- Rust attribute strings
- scope
- meta.attribute.rust string.quoted.double.rust, meta.attribute.rust string.quoted.single.char.rust
- settings
-
- fontStyle
-
-
-
-
- name
- Rust keyword
- scope
- entity.name.function.macro.rules.rust, storage.type.module.rust, storage.modifier.rust, storage.type.struct.rust, storage.type.enum.rust, storage.type.trait.rust, storage.type.union.rust, storage.type.impl.rust, storage.type.rust, storage.type.function.rust, storage.type.type.rust
- settings
-
- foreground
- #cba6f7
- fontStyle
-
-
-
-
- name
- Rust u/i32, u/i64, etc.
- scope
- entity.name.type.numeric.rust
- settings
-
- foreground
- #cba6f7
- fontStyle
-
-
-
-
- name
- Rust generic
- scope
- meta.generic.rust
- settings
-
- foreground
- #fab387
-
-
-
- name
- Rust impl
- scope
- entity.name.impl.rust
- settings
-
- foreground
- #f9e2af
- fontStyle
- italic
-
-
-
- name
- Rust module
- scope
- entity.name.module.rust
- settings
-
- foreground
- #fab387
-
-
-
- name
- Rust trait
- scope
- entity.name.trait.rust
- settings
-
- foreground
- #f9e2af
- fontStyle
- italic
-
-
-
- name
- Rust struct
- scope
- storage.type.source.rust
- settings
-
- foreground
- #f9e2af
-
-
-
- name
- Rust union
- scope
- entity.name.union.rust
- settings
-
- foreground
- #f9e2af
-
-
-
- name
- Rust enum member
- scope
- meta.enum.rust storage.type.source.rust
- settings
-
- foreground
- #94e2d5
-
-
-
- name
- Rust macro
- scope
- support.macro.rust, meta.macro.rust support.function.rust, entity.name.function.macro.rust
- settings
-
- foreground
- #89b4fa
- fontStyle
- italic
-
-
-
- name
- Rust lifetime
- scope
- storage.modifier.lifetime.rust, entity.name.type.lifetime
- settings
-
- foreground
- #89b4fa
- fontStyle
- italic
-
-
-
- name
- Rust string formatting
- scope
- string.quoted.double.rust constant.other.placeholder.rust
- settings
-
- foreground
- #f5c2e7
-
-
-
- name
- Rust return type generic
- scope
- meta.function.return-type.rust meta.generic.rust storage.type.rust
- settings
-
- foreground
- #cdd6f4
-
-
-
- name
- Rust functions
- scope
- meta.function.call.rust
- settings
-
- foreground
- #89b4fa
-
-
-
- name
- Rust angle brackets
- scope
- punctuation.brackets.angle.rust
- settings
-
- foreground
- #89dceb
-
-
-
- name
- Rust constants
- scope
- constant.other.caps.rust
- settings
-
- foreground
- #fab387
-
-
-
- name
- Rust function parameters
- scope
- meta.function.definition.rust variable.other.rust
- settings
-
- foreground
- #eba0ac
-
-
-
- name
- Rust closure variables
- scope
- meta.function.call.rust variable.other.rust
- settings
-
- foreground
- #cdd6f4
-
-
-
- name
- Rust self
- scope
- variable.language.self.rust
- settings
-
- foreground
- #f38ba8
-
-
-
- name
- Rust metavariable names
- scope
- variable.other.metavariable.name.rust, meta.macro.metavariable.rust keyword.operator.macro.dollar.rust
- settings
-
- foreground
- #f5c2e7
-
-
-
- name
- Shell shebang
- scope
- comment.line.shebang, comment.line.shebang punctuation.definition.comment, comment.line.shebang, punctuation.definition.comment.shebang.shell, meta.shebang.shell
- settings
-
- foreground
- #f5c2e7
- fontStyle
- italic
-
-
-
- name
- Shell shebang command
- scope
- comment.line.shebang constant.language
- settings
-
- foreground
- #94e2d5
- fontStyle
- italic
-
-
-
- name
- Shell interpolated command
- scope
- meta.function-call.arguments.shell punctuation.definition.variable.shell, meta.function-call.arguments.shell punctuation.section.interpolation, meta.function-call.arguments.shell punctuation.definition.variable.shell, meta.function-call.arguments.shell punctuation.section.interpolation
- settings
-
- foreground
- #f38ba8
-
-
-
- name
- Shell interpolated command variable
- scope
- meta.string meta.interpolation.parameter.shell variable.other.readwrite
- settings
-
- foreground
- #fab387
- fontStyle
- italic
-
-
-
- scope
- source.shell punctuation.section.interpolation, punctuation.definition.evaluation.backticks.shell
- settings
-
- foreground
- #94e2d5
-
-
-
- name
- Shell EOF
- scope
- entity.name.tag.heredoc.shell
- settings
-
- foreground
- #cba6f7
-
-
-
- name
- Shell quoted variable
- scope
- string.quoted.double.shell variable.other.normal.shell
- settings
-
- foreground
- #cdd6f4
-
-
-
- scope
- markup.heading.synopsis.man, markup.heading.title.man, markup.heading.other.man, markup.heading.env.man
- settings
-
- foreground
- #cba6f7
-
-
-
- scope
- markup.heading.commands.man
- settings
-
- foreground
- #89b4fa
-
-
-
- scope
- markup.heading.env.man
- settings
-
- foreground
- #f5c2e7
-
-
-
-
-
diff --git a/.config/broot/conf.hjson b/.config/broot/conf.hjson
deleted file mode 100644
index c74318c..0000000
--- a/.config/broot/conf.hjson
+++ /dev/null
@@ -1,40 +0,0 @@
-show_selection_mark: true
-true_colors: true
-icon_theme: nerdfont
-
-special_paths: {
- "/media" : {
- list: "never"
- sum: "never"
- }
- "~/.config": { "show": "always" }
- "trav": {
- show: always
- list: "always",
- sum: "never"
- }
- # "~/useless": { "show": "never" }
- # "~/my-link-I-want-to-explore": { "list": "always" }
-}
-
-quit_on_last_cancel: true
-content_search_max_file_size: 10MB
-enable_kitty_keyboard: true
-lines_before_match_in_preview: 1
-lines_after_match_in_preview: 1
-
-imports: [
- verbs.hjson
-
- {
- luma: dark
- file: skins/dieter-dark.hjson
- }
- {
- luma: [
- light
- unknown
- ]
- file: skins/dieter-light.hjson
- }
-]
diff --git a/.config/broot/launcher/bash/br b/.config/broot/launcher/bash/br
deleted file mode 120000
index c577ca3..0000000
--- a/.config/broot/launcher/bash/br
+++ /dev/null
@@ -1 +0,0 @@
-/home/dln/.local/share/broot/launcher/bash/1
\ No newline at end of file
diff --git a/.config/broot/launcher/installed-v4 b/.config/broot/launcher/installed-v4
deleted file mode 100644
index 3f026af..0000000
--- a/.config/broot/launcher/installed-v4
+++ /dev/null
@@ -1,4 +0,0 @@
-
-This file tells broot the installation of the br function was done.
-If there's a problem and you want to install it again run
- broot -- install
diff --git a/.config/broot/select.hjson b/.config/broot/select.hjson
deleted file mode 100644
index 20ec81d..0000000
--- a/.config/broot/select.hjson
+++ /dev/null
@@ -1,17 +0,0 @@
-verbs: [
- {
- invocation: "ok"
- key: "enter"
- leave_broot: true
- execution: ":print_path"
- apply_to: "directory"
- }
-
- {
- invocation: "broot_home"
- keys: ["ctrl-7", "ctrl-g"]
- execution: "broot -f --conf ~/.config/broot/select.hjson $HOME"
- leave_broot: true
- }
-]
-
diff --git a/.config/broot/skins/dieter-light.hjson b/.config/broot/skins/dieter-light.hjson
deleted file mode 100644
index ad61918..0000000
--- a/.config/broot/skins/dieter-light.hjson
+++ /dev/null
@@ -1,84 +0,0 @@
-###############################################################
-# A skin for a terminal with a white background
-#
-# To create your own skin, copy this file, change the entries
-# and import your skin file from the main conf file (look
-# for "imports")
-#
-# Doc at https://dystroy.org/broot/skins/
-###############################################################
-syntax_theme: base16-ocean.light
-
-skin: {
- default: gray(0) None
- tree: gray(20) None / gray(18) None
- file: gray(1) None / gray(8) None
- directory: gray(4) None Bold / ansi(4) None
- exe: ansi(130) None
- link: Magenta None
- pruning: gray(12) None Italic
- perm__: gray(5) None
- perm_r: ansi(94) None
- perm_w: ansi(132) None
- perm_x: ansi(65) None
- owner: ansi(138) None
- group: ansi(131) None
- dates: ansi(66) None
- sparse: ansi(214) None
- git_branch: ansi(229) None
- git_insertions: ansi(28) None
- git_deletions: ansi(160) None
- git_status_current: gray(5) None
- git_status_modified: ansi(28) None
- git_status_new: ansi(94) None Bold
- git_status_ignored: gray(17) None
- git_status_conflicted: ansi(88) None
- git_status_other: ansi(88) None
- selected_line: None gray(20)
- char_match: None ansi(226)
- file_error: Red None
- flag_label: gray(9) None
- flag_value: ansi(166) None Bold
- input: gray(1) None / gray(4) gray(20)
- status_error: gray(22) ansi(124)
- status_normal: gray(2) gray(20)
- status_job: ansi(220) gray(5)
- status_italic: ansi(166) gray(20)
- status_bold: ansi(166) gray(20)
- status_code: ansi(17) gray(20)
- status_ellipsis: gray(19) gray(15)
- purpose_normal: gray(20) gray(2)
- purpose_italic: ansi(178) gray(2)
- purpose_bold: ansi(178) gray(2) Bold
- purpose_ellipsis: gray(20) gray(2)
- scrollbar_track: gray(20) none
- scrollbar_thumb: ansi(238) none
- help_paragraph: gray(2) none
- help_bold: ansi(202) none bold
- help_italic: ansi(202) none italic
- help_code: gray(5) gray(22)
- help_headers: ansi(202) none
- help_table_border: ansi(239) None
- preview_title: gray(3) None / gray(5) None
- preview: gray(5) gray(23) / gray(7) gray(23)
- preview_line_number: gray(6) gray(20)
- preview_separator: gray(7) None / gray(18) None
- preview_match: None ansi(29) Underlined
- hex_null: gray(15) None
- hex_ascii_graphic: gray(2) None
- hex_ascii_whitespace: ansi(143) None
- hex_ascii_other: ansi(215) None
- hex_non_ascii: ansi(167) None
- staging_area_title: gray(8) None / gray(13) None
- mode_command_mark: gray(15) ansi(204) Bold
- good_to_bad_0: ansi(28)
- good_to_bad_1: ansi(29)
- good_to_bad_2: ansi(29)
- good_to_bad_3: ansi(29)
- good_to_bad_4: ansi(29)
- good_to_bad_5: ansi(100)
- good_to_bad_6: ansi(136)
- good_to_bad_7: ansi(172)
- good_to_bad_8: ansi(166)
- good_to_bad_9: ansi(196)
-}
diff --git a/.config/broot/verbs.hjson b/.config/broot/verbs.hjson
deleted file mode 100644
index da78ce8..0000000
--- a/.config/broot/verbs.hjson
+++ /dev/null
@@ -1,184 +0,0 @@
-###############################################################
-# This file contains the verb definitions for broot
-#
-# Some verbs here are examples and not enabled by default: you
-# need to uncomment them if you want to use them.
-#
-# Documentation at https://dystroy.org/broot/verbs/
-###############################################################
-
-verbs: [
- {
- invocation: edit
- key: enter
- shortcut: e
- execution: "wezterm-edit-helper {file}"
- apply_to: text_file
- leave_broot: true
- }
-
- {
- invocation: nvim
- key: enter
- apply_to: text_file
- execution: "wezterm-edit-helper {file}"
- leave_broot: true
- }
-
- {
- invocation: broot_home
- key: ctrl-7
- execution: br $HOME
- leave_broot: true
- }
-
- # You should customize this standard opening of text files.
- # If you edit text files in your terminal (vi, emacs, helix, eg.), then
- # you'll find it convenient to change the 'key' from 'ctrl-e' to 'enter'.
- #
- # If $EDITOR isn't set on your computer, you should either set it using
- # something similar to
- # export EDITOR=/usr/local/bin/nvim
- # or just replace it with your editor of choice in the 'execution'
- # pattern.
- # If your editor is able to open a file on a specific line, use {line}
- # so that you may jump directly at the right line from a preview or
- # a content search.
- # Examples depending on your favourite editor:
- # execution: "nvim +{line} {file}"
- # execution: "helix {file}:{line}"
- {
- invocation: edit
- shortcut: e
- key: ctrl-e
- apply_to: text_file
- execution: "$EDITOR {file}"
- leave_broot: false
- }
-
- # Example 1: launching `tail -n` on the selected file (leaving broot)
- # {
- # name: tail_lines
- # invocation: tl {lines_count}
- # execution: "tail -f -n {lines_count} {file}"
- # }
-
- # Example 2: creating a new file without leaving broot
- # {
- # name: touch
- # invocation: touch {new_file}
- # execution: "touch {directory}/{new_file}"
- # leave_broot: false
- # }
-
- # A convenient shortcut to create new text files in
- # the current directory or below
- {
- invocation: create {subpath}
- execution: "$EDITOR {directory}/{subpath}"
- leave_broot: false
- }
-
- {
- invocation: git_diff
- shortcut: gd
- leave_broot: false
- execution: "git difftool -y {file}"
- }
-
- # On ctrl-b, propose the creation of a copy of the selection.
- # While this might occasionally be useful, this verb is mostly here
- # as an example to demonstrate rare standard groups like {file-stem}
- # and {file-dot-extension} and the auto_exec verb property which
- # allows verbs to stay unexecuted until you hit enter
- {
- invocation: "backup {version}"
- key: ctrl-b
- leave_broot: false
- auto_exec: false
- execution: "cp -r {file} {parent}/{file-stem}-{version}{file-dot-extension}"
- }
-
- # By default, `rm` does the system rm, and completely removes
- # the file. If you prefer to have the file moved to the system
- # trash, you may use the ':trash' internal with the verb below:
- # {
- # invocation: "rm"
- # internal: "trash"
- # leave_broot: false
- # }
-
- # This verb lets you launch a terminal on ctrl-T
- # (on exit you'll be back in broot)
- {
- invocation: terminal
- key: ctrl-t
- execution: "$SHELL"
- set_working_dir: true
- leave_broot: false
- }
-
- # Here's an example of a verb needing the shell capabilities.
- # It copies all children of the currently selected directory
- # to a destination you type.
- # It uses a star, which needs the shell for expansion. That's
- # why such verb must have the `from_shell: true` parameter.
- # {
- # invocation: "cpa {dest}"
- # external: "cp -r {directory}/* {dest}"
- # from_shell: true
- # }
-
- # Here's an example of a shortcut bringing you to your home directory
- # {
- # invocation: home
- # key: ctrl-home
- # execution: ":focus ~"
- # }
-
- # Here's going to the work-dir root of the current git repository
- # {
- # invocation: gtr
- # execution: ":focus {git-root}"
- # }
-
- # A popular set of shortcuts for going up and down:
- #
- # {
- # key: ctrl-k
- # execution: ":line_up"
- # }
- # {
- # key: ctrl-j
- # execution: ":line_down"
- # }
- # {
- # key: ctrl-u
- # execution: ":page_up"
- # }
- # {
- # key: ctrl-d
- # execution: ":page_down"
- # }
-
- # If you develop using git, you might like to often switch
- # to the git status filter:
- # {
- # key: alt-g
- # execution: ":toggle_git_status"
- # }
-
- # You can reproduce the bindings of Norton Commander
- # on copying or moving to the other panel:
- # {
- # key: F5
- # external: "cp -r {file} {other-panel-directory}"
- # leave_broot: false
- # }
- # {
- # key: F6
- # external: "mv {file} {other-panel-directory}"
- # leave_broot: false
- # }
-]
-
diff --git a/.config/buildkit/buildkitd.toml b/.config/buildkit/buildkitd.toml
deleted file mode 100644
index b273b2b..0000000
--- a/.config/buildkit/buildkitd.toml
+++ /dev/null
@@ -1,7 +0,0 @@
-[worker.oci]
- enabled = false
-
-[worker.containerd]
- enabled = true
- rootless = true
- address = "/run/user/1000/containerd/containerd.sock"
diff --git a/.config/chrome-beta-flags.conf b/.config/chrome-beta-flags.conf
deleted file mode 100644
index e77a043..0000000
--- a/.config/chrome-beta-flags.conf
+++ /dev/null
@@ -1 +0,0 @@
---enable-features=OzonePlatform --ozone-platform=wayland
diff --git a/.config/contour/contour.yml b/.config/contour/contour.yml
deleted file mode 100644
index 8955087..0000000
--- a/.config/contour/contour.yml
+++ /dev/null
@@ -1,769 +0,0 @@
-# Default Contour Configuration File.
-
-# Overrides the auto-detected platform plugin to be loaded.
-#
-# Possible (incomplete list of) values are:
-# - auto The platform will be auto-detected.
-# - xcb Uses XCB plugin (for X11 environment).
-# - cocoa Used to be run on Mac OS/X.
-# - direct2d Windows platform plugin using Direct2D.
-# - winrt Windows platform plugin using WinRT.
-#
-# Default: auto
-platform_plugin: auto
-
-# VT Renderer configuration.
-# ADVANCED! Do not touch unless you know what you are doing.
-renderer:
- # Backend to use for rendering the terminal onto the screen
- #
- # Possible values are:
- # - default Uses the default rendering option as decided by the terminal.
- # - software Uses software-based rendering.
- # - OpenGL Use (possibly) hardware accelerated OpenGL
- backend: OpenGL
-
- # Number of hashtable slots to map to the texture tiles.
- # Larger values may increase performance, but too large may also decrease.
- # This value is rounded up to a value equal to the power of two.
- #
- # Default: 4096
- tile_hashtable_slots: 4096
-
- # Number of tiles that must fit at lest into the texture atlas.
- #
- # This does not include direct mapped tiles (US-ASCII glyphs,
- # cursor shapes and decorations), if tile_direct_mapping is set to true).
- #
- # Value must be at least as large as grid cells available in the terminal view.
- # This value is automatically adjusted if too small.
- #
- # Default: 4000
- tile_cache_count: 4000
-
- # Enables/disables the use of direct-mapped texture atlas tiles for
- # the most often used ones (US-ASCII, cursor shapes, underline styles)
- # You most likely do not want to touch this.
- #
- # Default: true
- tile_direct_mapping: true
-
-# Word delimiters when selecting word-wise.
-word_delimiters: " /\\()\"'-.,:;<>~!@#$%^&*+=[]{}~?|│"
-
-# Default PTY read buffer size.
-#
-# This is an advance option. Use with care!
-# Default: 16384
-read_buffer_size: 16384
-
-# Size in bytes per PTY Buffer Object.
-#
-# This is an advanced option of an internal storage. Only change with care!
-pty_buffer_size: 1048576
-
-default_profile: main
-
-# Flag to determine whether to spawn new process or not when creating new terminal
-# Default: false
-spawn_new_process: false
-
-# Whether or not to reflow the lines on terminal resize events.
-# Default: true
-reflow_on_resize: true
-
-# Section of experimental features.
-# All experimental features are disabled by default and must be explicitly enabled here.
-# NOTE: Contour currently has no experimental features behind this configuration wall.
-# experimental:
-# # Enables experimental support for feature X/Y/Z
-# feature_xyz: true
-
-# This keyboard modifier can be used to bypass the terminal's mouse protocol,
-# which can be used to select screen content even if the an application
-# mouse protocol has been activated (Default: Shift).
-#
-# The same modifier values apply as with input modifiers (see below).
-bypass_mouse_protocol_modifier: Shift
-
-# Modifier to be pressed in order to initiate block-selection
-# using the left mouse button.
-#
-# This is usually the Control modifier, but on OS/X that is not possible,
-# so Alt or Meta would be recommended instead.
-#
-# Supported modifiers:
-# - Alt
-# - Control
-# - Shift
-# - Meta
-#
-# Default: Control
-mouse_block_selection_modifier: Control
-
-# Selects an action to perform when a text selection has been made.
-#
-# Possible values are:
-#
-# - None Does nothing
-# - CopyToClipboard Copies the selection to the primary clipboard.
-# - CopyToSelectionClipboard Copies the selection to the selection clipboard.
-# This is not supported on all platforms.
-#
-# Default: CopyToSelectionClipboard
-on_mouse_select: CopyToSelectionClipboard
-
-# Determines whether the instance is reloading the configuration files whenever it is changing or not.
-#
-# Default: false
-live_config: false
-
-# Inline image related default configuration and limits
-# -----------------------------------------------------
-images:
- # Enable or disable sixel scrolling (SM/RM ?80 default)
- sixel_scrolling: true
- # Configures the maximum number of color registers available when rendering Sixel graphics.
- sixel_register_count: 4096
- # maximum width in pixels of an image to be accepted (0 defaults to system screen pixel width)
- max_width: 0
- # maximum height in pixels of an image to be accepted (0 defaults to system screen pixel height)
- max_height: 0
-
-# Terminal Profiles
-# -----------------
-#
-# Dominates how your terminal visually looks like. You will need at least one terminal profile.
-profiles:
- main:
- # You can override the process to be started inside the terminal.
- # If nothing is specified, the users' default login shell will be used.
- # But you may as well log in to a remote host.
- # shell: "ssh ubuntu-vm"
- # shell: "/bin/bash"
- # arguments: ["some", "optional", "arguments", "for", "the", "shell"]
-
- # If this terminal is being executed from within Flatpak, enforces sandboxing
- # then this boolean indicates whether or not that sandbox should be escaped or not.
- #
- # Default value is true.
- #
- # It only makes sense to set this value to false if you really know what you are doing.
- escape_sandbox: true
-
- # Advanced value that is useful when CopyPreviousMarkRange is used
- # with multiline-prompts. This offset value is being added to the
- # current cursor's line number minus 1 (i.e. the line above the current cursor).
- #
- # Default value is 0.
- copy_last_mark_range_offset: 0
-
- # Sets initial working directory when spawning a new terminal.
- # A leading ~ is expanded to the user's home directory.
- # Default value is the user's home directory.
- initial_working_directory: "~"
-
- # When this profile is *activated*, this flag decides
- # whether or not the title bar will be shown
- show_title_bar: false
- # When this profile is being *activated*, this flag decides
- # whether or not to put the terminal's screen into fullscreen mode.
- #
- # It is activated during startup as well as when switching from another profile to this one.
- fullscreen: false
-
- # When this profile is *activated*, this flag decides
- # whether or not to put the window into maximized mode.
- maximized: false
-
- # Defines the class part of the WM_CLASS property of the window.
- wm_class: "contour"
-
- # Environment variables to be passed to the shell.
- # environment:
- # TERM: contour
- # COLORTERM: truecolor
-
- # Determines the terminal type that is being advertised.
- # Possible values are:
- # - VT100
- # - VT220
- # - VT240
- # - VT330
- # - VT340
- # - VT320
- # - VT420
- # - VT510
- # - VT520
- # - VT525
- # Default: VT525
- terminal_id: VT525
-
- # Determines the initial terminal size in characters.
- terminal_size:
- columns: 80
- lines: 25
-
- history:
- # Number of lines to preserve (-1 for infinite).
- limit: 1000
- # Boolean indicating whether or not to scroll down to the bottom on screen updates.
- auto_scroll_on_update: true
- # Number of lines to scroll on ScrollUp & ScrollDown events.
- # Default: 3
- scroll_multiplier: 3
-
- # visual scrollbar support
- scrollbar:
- # scroll bar position: Left, Right, Hidden (ignore-case)
- position: Hidden
- # whether or not to hide the scrollbar when in alt-screen.
- hide_in_alt_screen: true
-
- # mouse setting
- mouse:
- # whether or not to hide mouse when typing
- #
- # Default value: true
- hide_while_typing: true
-
- # Some VT sequences should need access permissions.
- #
- # These can be to:
- # - allow Allows the given functionality
- # - deny Denies the given functionality
- # - ask Asks the user interactively via popup dialog for permission of the given action.
- #
- # Default for all of these entries should be: "ask".
- permissions:
- # Allows changing the font via `OSC 50 ; Pt ST`.
- change_font: ask
- # Allows capturing the screen buffer via `CSI > Pm ; Ps ; Pc ST`.
- # The response can be read from stdin as sequence `OSC 314 ; ST`
- capture_buffer: ask
- # Allows displaying the "Host Writable Statusline" programmatically using `DECSSDT 2`.
- display_host_writable_statusline: ask
-
- # If enabled, and you double-click on a word in the primary screen,
- # all other words matching this word will be highlighted as well.
- # So the double-clicked word will be selected as well as highlighted, along with
- # all other words being simply highlighted.
- #
- # This is currently implemented by initiating a search on the double-clicked word.
- # Therefore one can even use FocusNextSearchMatch and FocusPreviousSearchMatch to
- # jump to the next/previous same word, also outside of the current viewport.
- #
- # Default: true
- highlight_word_and_matches_on_double_click: true
-
- # Font related configuration (font face, styles, size, rendering mode).
- font:
- # Initial font size in pixels.
- size: 20
-
- # DPI scaling factor applied on top of the system configured on (default: 1.0).
- dpi_scale: 1.0
-
- # Font Locator API
- # Selects an engine to use for locating font files on the system.
- # This is implicitly also responsible for font fallback
- # Possible values are:
- # - native : automatically choose the best available on the current platform
- # - fontconfig : uses fontconfig to select fonts
- # - CoreText : uses OS/X CoreText to select fonts.
- # - DirectWrite : selects DirectWrite engine (Windows only)
- locator: native
-
- # Text shaping related settings
- text_shaping:
- # Selects which text shaping and font rendering engine to use.
- # Supported values are:
- # - native : automatically choose the best available on the current platform.
- # - DirectWrite : selects DirectWrite engine (Windows only)
- # - CoreText : selects CoreText engine (Mac OS/X only) (currently not implemented)
- # - OpenShaper : selects OpenShaper (harfbuzz/freetype/fontconfig, available on all
- # platforms)
- engine: native
-
- # Uses builtin textures for pixel-perfect box drawing.
- # If disabled, the font's provided box drawing characters
- # will be used (Default: true).
- builtin_box_drawing: true
-
- # Font render modes tell the font rasterizer engine what rendering technique to use.
- #
- # Modes available are:
- # - lcd Uses a subpixel rendering technique optimized for LCD displays.
- # - light Uses a subpixel rendering technique in gray-scale.
- # - gray Uses standard gray-scaled anti-aliasing.
- # - monochrome Uses pixel-perfect bitmap rendering.
- render_mode: gray
-
- # Indicates whether or not to include *only* monospace fonts in the font and
- # font-fallback list (Default: true).
- strict_spacing: false
-
- # Font family to use for displaying text.
- #
- # A font can be either described in detail as below or as a
- # simple string value (e.g. "monospace" with the appropriate
- # weight/slant applied automatically).
- regular:
- # Font family defines the font family name, such as:
- # Fira Code", "Courier New", or "monospace" (default).
- family: "Iosevka Term SS09 Light"
-
- # Font weight can be one of:
- # thin, extra_light, light, demilight, book, normal,
- # medium, demibold, bold, extra_bold, black, extra_black.
- weight: light
-
- # Font slant can be one of: normal, italic, oblique.
- slant: normal
-
- # Set of optional font features to be enabled. This
- # is usually a 4-letter code, such as ss01 or ss02 etc.
- #
- # Please see your font's documentation to find out what it
- # supports.
- #
- # Default: []
- features: [ss09]
-
- # If bold/italic/bold_italic are not explicitly specified, the regular font with
- # the respective weight and slant will be used.
- bold:
- family: "Iosevka Term SS09"
- features: [ss09]
- weight: demibold
- italic:
- family: "Iosevka Term Curly Slab"
- weight: light
- slant: italic
- bold_italic:
- family: "Iosevka Term Curly Slab Ex"
- weight: regular
- slant: italic
- #bold: "Hack"
- #italic: "Hack"
- #bold_italic: "Hack"
-
- # This is a special font to be used for displaying unicode symbols
- # that are to be rendered in emoji presentation.
- # Defaults to "emoji".
- emoji: "Noto Color Emoji"
-
- # Indicates whether or not bold text should be rendered in bright colors,
- # for indexed colors.
- #
- # If disabled, normal color will be used instead.
- #
- # Default: false
- draw_bold_text_with_bright_colors: false
-
- # Terminal cursor display configuration
- cursor:
- # Supported shapes are:
- #
- # - block a filled rectangle
- # - rectangle just the outline of a block
- # - underscore a line under the text
- # - bar: the well known i-Beam
- shape: "bar"
- # Determines whether or not the cursor will be blinking over time.
- blinking: false
- # Blinking interval (in milliseconds) to use when cursor is blinking.
- blinking_interval: 500
-
- # vi-like normal-mode specific settings.
- # Note, currently only the cursor can be customized.
- normal_mode:
- cursor:
- shape: block
- blinking: false
- blinking_interval: 500
-
- # vi-like visual/visual-line/visual-block mode specific settings.
- # Note, currently only the cursor can be customized.
- visual_mode:
- cursor:
- shape: block
- blinking: false
- blinking_interval: 500
-
- # Time duration in milliseconds for which yank highlight is shown.
- vi_mode_highlight_timeout: 300
-
- # Configures a `scrolloff` for cursor movements in normal and visual (block) modes.
- #
- # Default: 8
- vi_mode_scrolloff: 8
-
- status_line:
- # Either none or indicator.
- # This only reflects the initial state of the status line, as it can
- # be changed at any time during runtime by the user or by an application.
- display: none
-
- # Position to place the status line to, if it is to be shown.
- # This can be either value `top` or value `bottom`.
- # Default: bottom
- position: bottom
-
- # Synchronize the window title with the Host Writable status_line if
- # and only if the host writable status line was denied to be shown.
- # Default: false
- sync_to_window_title: false
-
- # Background configuration
- background:
- # Background opacity to use. A value of 1.0 means fully opaque whereas 0.0 means fully
- # transparent. Only values between 0.0 and 1.0 are allowed.
- opacity: 1.0
- # Some platforms can blur the transparent background (currently only Windows 10 is supported).
- blur: false
-
- # Specifies a colorscheme to use (alternatively the colors can be inlined).
- colors: "default"
-
- # Hyperlinks (via OSC-8) can be stylized and colorized on hover.
- hyperlink_decoration:
- normal: dotted
- hover: underline
-
-# Color Profiles
-# --------------
-#
-# Here you can configure your color profiles, whereas a color can be expressed in standard web format,
-# with a leading # followed by red/green/blue values, 7 characters in total.
-# You may alternatively use 0x as prefix instead of #.
-# For example 0x102030 is equal to '#102030'.
-color_schemes:
- default:
- # Default colors
- default:
- # Default background color (this can be made transparent, see above).
- background: "#11171d"
- # Default foreground text color.
- foreground: "#e3e0cd"
-
- # Background image support.
- background_image:
- # Full path to the image to use as background.
- #
- # Default: empty string (disabled)
- # path: '/Users/trapni/Pictures/bg.png'
-
- # Image opacity to be applied to make the image not look to intense
- # and not get too distracted by the background image.
- # Default: 0.5
- opacity: 0.5
-
- # Optionally blurs background image to make it less distracting
- # and keep the focus on the actual terminal contents.
- #
- # Default: false
- blur: false
-
- # Mandates the color of the cursor and potentially overridden text.
- #
- # The color can be specified in RGB as usual, plus
- # - CellForeground: Selects the cell's foreground color.
- # - CellBackground: Selects the cell's background color.
- cursor:
- # Specifies the color to be used for the actual cursor shape.
- #
- # Default: CellForeground
- default: "#00d992"
- # Specifies the color to be used for the characters that would
- # be covered otherwise.
- #
- # Default: CellBackground
- text: CellBackground
-
- # color to pick for hyperlinks decoration, when hovering
- hyperlink_decoration:
- normal: "#f0f000"
- hover: "#ff0000"
-
- # Color to pick for vi_mode highlights.
- # The value format is equivalent to how selection colors and alpha contribution is defined.
- vi_mode_highlight:
- foreground: CellForeground
- foreground_alpha: 1.0
- background: "#ffa500"
- background_alpha: 0.5
-
- # Color override for the current cursor's line when in vi_mode:
- # The value format is equivalent to how selection colors and alpha contribution is defined.
- # To disable cursorline in vi_mode, set foreground to CellForeground and background to CellBackground.
- vi_mode_cursorline:
- foreground: "#ffffff"
- foreground_alpha: 0.2
- background: "#808080"
- background_alpha: 0.4
-
- # The text selection color can be customized here.
- # Leaving a value empty will default to the inverse of the content's color values.
- #
- # The color can be specified in RGB as usual, plus
- # - CellForeground: Selects the cell's foreground color.
- # - CellBackground: Selects the cell's background color.
- selection:
- # Specifies the color to be used for the selected text.
- #
- # Default: CellBackground
- foreground: CellForeground
- # Specifies the alpha value (between 0.0 and 1.0) the configured foreground color
- # will contribute to the original color.
- #
- # A value of 1.0 will paint over, whereas a value of 0.5 will give
- # a look of a half-transparently painted grid cell.
- foreground_alpha: 1.0
- # Specifies the color to be used for the selected background.
- #
- # Default: CellForeground
- background: "#4040f0"
- # Specifies the alpha value (between 0.0 and 1.0) the configured background color
- # will contribute to the original color.
- #
- # A value of 1.0 will paint over, whereas a value of 0.5 will give
- # a look of a half-transparently painted grid cell.
- background_alpha: 0.5
-
- # Search match highlighting. Similar to selection highlighting.
- search_highlight:
- foreground: CellBackground
- background: CellForeground
- foreground_alpha: 1.0
- background_alpha: 1.0
-
- # Search match highlighting (focused term). Similar to selection highlighting.
- search_highlight_focused:
- foreground: CellBackground
- background: CellForeground
- foreground_alpha: 1.0
- background_alpha: 1.0
-
- # Coloring for the word that is highlighted due to double-clicking it.
- #
- # The format is similar to selection highlighting.
- word_highlight_current:
- foreground: CellForeground
- background: "#909090"
- foreground_alpha: 1.0
- background_alpha: 0.5
-
- # Coloring for the word that is highlighted due to double-clicking
- # another word that matches this word.
- #
- # The format is similar to selection highlighting.
- word_highlight_other:
- foreground: CellForeground
- background: "#909090"
- foreground_alpha: 1.0
- background_alpha: 0.5
-
- # Defines the colors to be used for the Indicator status line.
- # Values must be in RGB form.
- indicator_statusline:
- # Default: default background
- foreground: "#808080"
- # Default: default foreground
- background: "#000000"
-
- # Alternate colors to be used for the indicator status line when
- # this terminal is currently not in focus.
- indicator_statusline_inactive:
- # Default: default background
- foreground: "#808080"
- # Default: default foreground
- background: "#000000"
-
- # Colors for the IME (Input Method Editor) area.
- input_method_editor:
- # Default: default #FFFFFF
- foreground: "#FFFFFF"
- # Default: default #FF0000
- background: "#FF0000"
-
- # Normal colors
- normal:
- black: "#000000"
- red: "#ff0035"
- green: "#85ff00"
- yellow: "#ffc900"
- blue: "#00a7ff"
- magenta: "#cb01ff"
- cyan: "#00e0ff"
- white: "#f0f0f0"
-
- # Bright colors
- bright:
- black: "#000000"
- red: "#ffb4af"
- green: "#d2ffba"
- yellow: "#ffebb7"
- blue: "#b1deff"
- magenta: "#edb5ff"
- cyan: "#bdf4ff"
- white: "#ffffff"
- # Dim (faint) colors, if not set, they're automatically computed based on normal colors.
- # dim:
- # black: '#1d1f21'
- # red: '#cc342b'
- # green: '#198844'
- # yellow: '#fba922'
- # blue: '#3971ed'
- # magenta: '#a36ac7'
- # cyan: '#3971ed'
- # white: '#c5c8c6'
-
-# Key Bindings
-# ------------
-#
-# In this section you can customize key bindings.
-# Each array element in `input_mapping` represents one key binding,
-# whereas `mods` represents an array of keyboard modifiers that must be pressed - as well as
-# the `key` or `mouse` - in order to activate the corresponding action,
-#
-# Additionally one can filter input mappings based on special terminal modes using the `modes` option:
-# - Alt : The terminal is currently in alternate screen buffer, otherwise it is in primary screen buffer.
-# - AppCursor : The application key cursor mode is enabled (otherwise it's normal cursor mode).
-# - AppKeypad : The application keypad mode is enabled (otherwise it's the numeric keypad mode).
-# - Select : The terminal has currently an active grid cell selection (such as selected text).
-# - Insert : The Insert input mode is active, that is the default and one way to test
-# that the input mode is not in normal mode or any of the visual select modes.
-# - Search : There is a search term currently being edited or already present.
-# - Trace : The terminal is currently in trace-mode, i.e., each VT sequence can be interactively
-# single-step executed using custom actions. See TraceEnter/TraceStep/TraceLeave actions.
-#
-# You can combine these modes by concatenating them via | and negate a single one
-# by prefixing with ~.
-#
-# The `modes` option defaults to not filter at all (the input mappings always
-# match based on modifier and key press / mouse event).
-#
-# `key` represents keys on your keyboard, and `mouse` represents buttons
-# as well as the scroll wheel.
-#
-# Modifiers:
-# - Alt
-# - Control
-# - Shift
-# - Meta (this is the Windows key on Windows OS, and the Command key on OS/X, and Meta on anything else)
-#
-# Keys can be expressed case-insensitively symbolic:
-# APOSTROPHE, ADD, BACKSLASH, COMMA, DECIMAL, DIVIDE, EQUAL, LEFT_BRACKET,
-# MINUS, MULTIPLY, PERIOD, RIGHT_BRACKET, SEMICOLON, SLASH, SUBTRACT, SPACE
-# Enter, Backspace, Tab, Escape, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12,
-# DownArrow, LeftArrow, RightArrow, UpArrow, Insert, Delete, Home, End, PageUp, PageDown,
-# Numpad_NumLock, Numpad_Divide, Numpad_Multiply, Numpad_Subtract, Numpad_CapsLock,
-# Numpad_Add, Numpad_Decimal, Numpad_Enter, Numpad_Equal,
-# Numpad_0, Numpad_1, Numpad_2, Numpad_3, Numpad_4,
-# Numpad_5, Numpad_6, Numpad_7, Numpad_8, Numpad_9
-# or in case of standard characters, just the character.
-#
-# Mouse buttons can be one of the following self-explanatory ones:
-# Left, Middle, Right, WheelUp, WheelDown
-#
-# Actions:
-# - CancelSelection Cancels currently active selection, if any.
-# - ChangeProfile Changes the profile to the given profile `name`.
-# - ClearHistoryAndReset Clears the history, performs a terminal hard reset and attempts to force a redraw of the currently running application.
-# - CopyPreviousMarkRange Copies the most recent range that is delimited by vertical line marks into clipboard.
-# - CopySelection Copies the current selection into the clipboard buffer.
-# - DecreaseFontSize Decreases the font size by 1 pixel.
-# - DecreaseOpacity Decreases the default-background opacity by 5%.
-# - FocusNextSearchMatch Focuses the next search match (if any).
-# - FocusPreviousSearchMatch Focuses the next previous match (if any).
-# - FollowHyperlink Follows the hyperlink that is exposed via OSC 8 under the current cursor position.
-# - IncreaseFontSize Increases the font size by 1 pixel.
-# - IncreaseOpacity Increases the default-background opacity by 5%.
-# - NewTerminal Spawns a new terminal at the current terminals current working directory.
-# - NoSearchHighlight Disables current search highlighting, if anything is still highlighted due to a prior search.
-# - OpenConfiguration Opens the configuration file.
-# - OpenFileManager Opens the current working directory in a system file manager.
-# - PasteClipboard Pastes clipboard to standard input. Pass boolean parameter 'strip' to indicate whether or not to strip repetitive whitespaces down to one and newlines to whitespaces.
-# - PasteSelection Pastes current selection to standard input.
-# - Quit Quits the application.
-# - ReloadConfig Forces a configuration reload.
-# - ResetConfig Overwrites current configuration with builtin default configuration and loads it. Attention, all your current configuration will be lost due to overwrite!
-# - ResetFontSize Resets font size to what is configured in the config file.
-# - ScreenshotVT Takes a screenshot in form of VT escape sequences.
-# - ScrollDown Scrolls down by the multiplier factor.
-# - ScrollMarkDown Scrolls one mark down (if none present, bottom of the screen)
-# - ScrollMarkUp Scrolls one mark up
-# - ScrollOneDown Scrolls down by exactly one line.
-# - ScrollOneUp Scrolls up by exactly one line.
-# - ScrollPageDown Scrolls a page down.
-# - ScrollPageUp Scrolls a page up.
-# - ScrollToBottom Scrolls to the bottom of the screen buffer.
-# - ScrollToTop Scrolls to the top of the screen buffer.
-# - ScrollUp Scrolls up by the multiplier factor.
-# - SearchReverse Initiates search mode (starting to search at current cursor position, moving upwards).
-# - SendChars Writes given characters in `chars` member to the applications input.
-# - ToggleAllKeyMaps Disables/enables responding to all keybinds (this keybind will be preserved when disabling all others).
-# - ToggleFullScreen Enables/disables full screen mode.
-# - ToggleInputProtection Enables/disables terminal input protection.
-# - ToggleStatusLine Shows/hides the VT320 compatible Indicator status line.
-# - ToggleTitleBar Shows/Hides titlebar
-# - TraceBreakAtEmptyQueue Executes any pending VT sequence from the VT sequence buffer in trace mode, then waits.
-# - TraceEnter Enables trace mode, suspending execution until explicitly requested to continue (See TraceLeave and TraceStep).
-# - TraceLeave Disables trace mode. Any pending VT sequence will be flushed out and normal execution will be resumed.
-# - TraceStep Executes a single VT sequence that is to be executed next.
-# - ViNormalMode Enters/Leaves Vi-like normal mode. The cursor can then be moved via h/j/k/l movements in normal mode and text can be selected via v, yanked via y, and clipboard pasted via p.
-# - WriteScreen Writes VT sequence in `chars` member to the screen (bypassing the application).
-
-input_mapping:
- - { mods: [Control], mouse: Left, action: FollowHyperlink }
- - { mods: [], mouse: Middle, action: PasteSelection }
- - { mods: [], mouse: WheelDown, action: ScrollDown }
- - { mods: [], mouse: WheelUp, action: ScrollUp }
- - { mods: [Alt], key: Enter, action: ToggleFullscreen }
- - { mods: [Alt], mouse: WheelDown, action: DecreaseOpacity }
- - { mods: [Alt], mouse: WheelUp, action: IncreaseOpacity }
- - { mods: [Control, Alt], key: S, action: ScreenshotVT }
- - { mods: [Control, Shift], key: Plus, action: IncreaseFontSize }
- - { mods: [Control], key: "0", action: ResetFontSize }
- - { mods: [Control, Shift], key: Minus, action: DecreaseFontSize }
- - { mods: [Control, Shift], key: "_", action: DecreaseFontSize }
- - { mods: [Control, Shift], key: N, action: NewTerminal }
- - { mods: [Control, Shift], key: V, action: PasteClipboard, strip: false }
- - { mods: [Control, Alt], key: V, action: PasteClipboard, strip: true }
- - { mods: [Control], key: C, action: CopySelection, mode: "Select|Insert" }
- - { mods: [Control], key: C, action: CancelSelection, mode: "Select|Insert" }
- - {
- mods: [Control],
- key: V,
- action: PasteClipboard,
- strip: false,
- mode: "Select|Insert",
- }
- - { mods: [Control], key: V, action: CancelSelection, mode: "Select|Insert" }
- - { mods: [], key: Escape, action: CancelSelection, mode: "Select|Insert" }
- - { mods: [Control, Shift], key: Space, action: ViNormalMode, mode: "Insert" }
- - { mods: [Control, Shift], key: Comma, action: OpenConfiguration }
- - { mods: [Control, Shift], key: Q, action: Quit }
- - { mods: [Control], mouse: WheelDown, action: DecreaseFontSize }
- - { mods: [Control], mouse: WheelUp, action: IncreaseFontSize }
- - { mods: [Shift], key: DownArrow, action: ScrollOneDown }
- - { mods: [Shift], key: End, action: ScrollToBottom }
- - { mods: [Shift], key: Home, action: ScrollToTop }
- - { mods: [Shift], key: PageDown, action: ScrollPageDown }
- - { mods: [Shift], key: PageUp, action: ScrollPageUp }
- - { mods: [Shift], key: UpArrow, action: ScrollOneUp }
- - { mods: [Control, Alt], key: K, action: ScrollMarkUp, mode: "~Alt" }
- - { mods: [Control, Alt], key: J, action: ScrollMarkDown, mode: "~Alt" }
- - { mods: [Shift], mouse: WheelDown, action: ScrollPageDown }
- - { mods: [Shift], mouse: WheelUp, action: ScrollPageUp }
- - { mods: [Control, Alt], key: O, action: OpenFileManager }
- - { mods: [Control, Alt], key: ".", action: ToggleStatusLine }
- - { mods: [Control, Shift], key: "F", action: SearchReverse }
- - { mods: [Control, Shift], key: "H", action: NoSearchHighlight }
- - { mods: [], key: "F3", action: FocusNextSearchMatch }
- - { mods: [Shift], key: "F3", action: FocusPreviousSearchMatch }
-# - { mods: [Control, Meta], key: 'E', action: TraceEnter, mode: "~Trace" }
-# - { mods: [Control, Meta], key: 'E', action: TraceLeave, mode: "Trace" }
-# - { mods: [Control, Meta], key: 'N', action: TraceStep, mode: "Trace" }
-# - { mods: [Control, Meta], key: 'F', action: TraceBreakAtEmptyQueue, mode: "Trace" }
diff --git a/.config/efm-langserver/config.yaml b/.config/efm-langserver/config.yaml
deleted file mode 100644
index a7b4c56..0000000
--- a/.config/efm-langserver/config.yaml
+++ /dev/null
@@ -1,14 +0,0 @@
-version: 2
-root-markers:
-- .git/
-
-tools:
- clang-format: &clang-format
- format-command: 'clang-format -style="{BasedOnStyle: Google, IndentWidth: 2, AlignConsecutiveDeclarations: true, AlignConsecutiveAssignments: true, ColumnLimit: 0}"'
- format-stdin: true
-
-languages:
- proto:
- - <<: *clang-format
-
-
diff --git a/.config/environment.d/difftastic.conf b/.config/environment.d/difftastic.conf
deleted file mode 100644
index b58731b..0000000
--- a/.config/environment.d/difftastic.conf
+++ /dev/null
@@ -1 +0,0 @@
-DFT_BACKGROUND=light
diff --git a/.config/environment.d/docker.conf b/.config/environment.d/docker.conf
deleted file mode 100644
index 1747f14..0000000
--- a/.config/environment.d/docker.conf
+++ /dev/null
@@ -1 +0,0 @@
-DOCKER_HOST=unix://${XDG_RUNTIME_DIR}/podman/podman.sock
diff --git a/.config/environment.d/golang.conf b/.config/environment.d/golang.conf
deleted file mode 100644
index ecea26b..0000000
--- a/.config/environment.d/golang.conf
+++ /dev/null
@@ -1 +0,0 @@
-GOPROXY=https://athens.aarn.shelman.io
diff --git a/.config/environment.d/mozilla.conf b/.config/environment.d/mozilla.conf
deleted file mode 100644
index e165145..0000000
--- a/.config/environment.d/mozilla.conf
+++ /dev/null
@@ -1,2 +0,0 @@
-MOZ_ENABLE_WAYLAND=1
-MOZ_DISABLE_RDD_SANDBOX=1
diff --git a/.config/environment.d/otel.conf b/.config/environment.d/otel.conf
deleted file mode 100644
index 08d9968..0000000
--- a/.config/environment.d/otel.conf
+++ /dev/null
@@ -1,3 +0,0 @@
-OTEL_EXPORTER_OTLP_ENDPOINT=https://otel.aarn.shelman.io
-OTEL_RESOURCE_ATTRIBUTES=instance=dln-dev
-OTEL_LOG_LEVEL=debug
diff --git a/.config/environment.d/ssh.conf b/.config/environment.d/ssh.conf
deleted file mode 100644
index cae7205..0000000
--- a/.config/environment.d/ssh.conf
+++ /dev/null
@@ -1 +0,0 @@
-SSH_AUTH_SOCK=${XDG_RUNTIME_DIR}/gcr/ssh
diff --git a/.config/fish/conf.d/abbr.fish b/.config/fish/conf.d/abbr.fish
deleted file mode 100644
index 0eaf442..0000000
--- a/.config/fish/conf.d/abbr.fish
+++ /dev/null
@@ -1,6 +0,0 @@
-abbr --add b git branch -va
-abbr --add d git diff --stat -p -C --color-words
-abbr --add new git checkout --detach main
-abbr --add s git status -sb
-abbr --add sl git branchless smartlog
-abbr --add sw git branchless switch --interactive
diff --git a/.config/fish/conf.d/aliases.fish b/.config/fish/conf.d/aliases.fish
deleted file mode 100644
index d2d3ddb..0000000
--- a/.config/fish/conf.d/aliases.fish
+++ /dev/null
@@ -1,10 +0,0 @@
-alias e='wezterm-edit-helper'
-alias dotgit='git --work-tree $HOME --git-dir $HOME/.dot_git'
-alias git='git-branchless wrap --'
-alias l='bat --wrap=never --pager="less -S"'
-alias ls=eza
-alias tail='tail -n $LINES'
-alias timestamp='TZ=Z date "+%Y%m%dT%H%M%SZ"'
-alias top='btm --basic --enable_cache_memory --enable_gpu_memory --battery'
-alias w="history -1 | sed -e 's/[0-9]* //' | xargs viddy -n1"
-alias xc=fish_clipboard_copy
diff --git a/.config/fish/conf.d/prompt.fish b/.config/fish/conf.d/prompt.fish
deleted file mode 100644
index c246201..0000000
--- a/.config/fish/conf.d/prompt.fish
+++ /dev/null
@@ -1,91 +0,0 @@
-function fish_prompt
- switch "$fish_key_bindings"
- case fish_hybrid_key_bindings fish_vi_key_bindings
- set STARSHIP_KEYMAP "$fish_bind_mode"
- case '*'
- set STARSHIP_KEYMAP insert
- end
- set STARSHIP_CMD_PIPESTATUS $pipestatus
- set STARSHIP_CMD_STATUS $status
- # Account for changes in variable name between v2.7 and v3.0
- set STARSHIP_DURATION "$CMD_DURATION$cmd_duration"
- set STARSHIP_JOBS (count (jobs -p))
- if test "$TRANSIENT" = 1
- # Clear from cursor to end of screen as `commandline -f repaint` does not do this
- # See https://github.com/fish-shell/fish-shell/issues/8418
- printf \e\[0J
- if type -q starship_transient_prompt_func
- starship_transient_prompt_func
- else
- printf "\n\e[1;32m%%\e[0m "
- end
- else
- starship prompt --terminal-width="$COLUMNS" --status=$STARSHIP_CMD_STATUS --pipestatus="$STARSHIP_CMD_PIPESTATUS" --keymap=$STARSHIP_KEYMAP --cmd-duration=$STARSHIP_DURATION --jobs=$STARSHIP_JOBS
- end
-end
-
-function fish_right_prompt
- switch "$fish_key_bindings"
- case fish_hybrid_key_bindings fish_vi_key_bindings
- set STARSHIP_KEYMAP "$fish_bind_mode"
- case '*'
- set STARSHIP_KEYMAP insert
- end
- set STARSHIP_CMD_PIPESTATUS $pipestatus
- set STARSHIP_CMD_STATUS $status
- # Account for changes in variable name between v2.7 and v3.0
- set STARSHIP_DURATION "$CMD_DURATION$cmd_duration"
- set STARSHIP_JOBS (count (jobs -p))
- if test "$TRANSIENT" = 1
- if type -q starship_transient_rprompt_func
- starship_transient_rprompt_func
- else
- printf ""
- end
- else
- starship prompt --right --terminal-width="$COLUMNS" --status=$STARSHIP_CMD_STATUS --pipestatus="$STARSHIP_CMD_PIPESTATUS" --keymap=$STARSHIP_KEYMAP --cmd-duration=$STARSHIP_DURATION --jobs=$STARSHIP_JOBS
- end
-end
-
-# Disable virtualenv prompt, it breaks starship
-set -g VIRTUAL_ENV_DISABLE_PROMPT 1
-
-# Remove default mode prompt
-builtin functions -e fish_mode_prompt
-
-set -gx STARSHIP_SHELL fish
-
-# Transience related functions
-function reset-transient --on-event fish_postexec
- set -g TRANSIENT 0
-end
-
-function transient_execute
- if commandline --is-valid
- set -g TRANSIENT 1
- commandline -f repaint
- else
- set -g TRANSIENT 0
- end
- commandline -f execute
-end
-
-# --user is the default, but listed anyway to make it explicit.
-function enable_transience --description 'enable transient prompt keybindings'
- bind --user \r transient_execute
- bind --user -M insert \r transient_execute
-end
-
-# Erase the transient prompt related key bindings.
-# --user is the default, but listed anyway to make it explicit.
-# Erasing a user binding will revert to the preset.
-function disable_transience --description 'remove transient prompt keybindings'
- bind --user -e \r
- bind --user -M insert -e \r
-end
-
-# Set up the session key that will be used to store logs
-# We don't use `random [min] [max]` because it is unavailable in older versions of fish shell
-set -gx STARSHIP_SESSION_KEY (string sub -s1 -l16 (random)(random)(random)(random)(random)0000000000000000)
-
-enable_transience
diff --git a/.config/fish/conf.d/semantic-prompt.fish b/.config/fish/conf.d/semantic-prompt.fish
deleted file mode 100644
index 23947c4..0000000
--- a/.config/fish/conf.d/semantic-prompt.fish
+++ /dev/null
@@ -1,56 +0,0 @@
-# SPDX-License-Identifier: CC0-1.0
-if status --is-interactive
- set _fishprompt_aid "fish"$fish_pid
- set _fishprompt_started 0
- # empty if running; or a numeric exit code; or CANCEL
- set _fishprompt_postexec ""
-
- functions -c fish_prompt _fishprompt_saved_prompt
- set _fishprompt_prompt_count 0
- set _fishprompt_disp_count 0
- function _fishprompt_start --on-event fish_prompt
- set _fishprompt_prompt_count (math $_fishprompt_prompt_count + 1)
- # don't use post-exec, because it is called *before* omitted-newline output
- if [ -n "$_fishprompt_postexec" ]
- printf "\033]133;D;%s;aid=%s\007" "$_fishprompt_postexec" $_fishprompt_aid
- end
- printf "\033]133;A;aid=%s;cl=m\007" $_fishprompt_aid
- end
-
- function fish_prompt
- set _fishprompt_disp_count (math $_fishprompt_disp_count + 1)
- printf "\033]133;P;k=i\007%b\033]133;B\007" (string join "\n" (_fishprompt_saved_prompt))
- set _fishprompt_started 1
- set _fishprompt_postexec ""
- end
-
- function _fishprompt_preexec --on-event fish_preexec
- if [ "$_fishprompt_started" = 1 ]
- printf "\033]133;C;\007"
- end
- set _fishprompt_started 0
- end
-
- function _fishprompt_postexec --on-event fish_postexec
- set _fishprompt_postexec $status
- _fishprompt_start
- end
-
- function __fishprompt_cancel --on-event fish_cancel
- set _fishprompt_postexec CANCEL
- _fishprompt_start
- end
-
- function _fishprompt_exit --on-process %self
- if [ "$_fishprompt_started" = 1 ]
- printf "\033]133;Z;aid=%s\007" $_fishprompt_aid
- end
- end
-
- if functions -q fish_right_prompt
- functions -c fish_right_prompt _fishprompt_saved_right_prompt
- function fish_right_prompt
- printf "\033]133;P;k=r\007%b\033]133;B\007" (string join "\n" (_fishprompt_saved_right_prompt))
- end
- end
-end
diff --git a/.config/fish/conf.d/task.fish b/.config/fish/conf.d/task.fish
deleted file mode 100644
index ee2d0a5..0000000
--- a/.config/fish/conf.d/task.fish
+++ /dev/null
@@ -1,37 +0,0 @@
-set GO_TASK_PROGNAME task
-
-function __task_get_tasks --description "Prints all available tasks with their description"
- # Read the list of tasks (and potential errors)
- $GO_TASK_PROGNAME --list-all 2>&1 | read -lz rawOutput
-
- # Return on non-zero exit code (for cases when there is no Taskfile found or etc.)
- if test $status -ne 0
- return
- end
-
- # Grab names and descriptions (if any) of the tasks
- set -l output (echo $rawOutput | sed -e '1d; s/\* \(.*\):\s*\(.*\)\s*(aliases.*/\1\t\2/' -e 's/\* \(.*\):\s*\(.*\)/\1\t\2/'| string split0)
- if test $output
- echo $output
- end
-end
-
-complete -c $GO_TASK_PROGNAME -d 'Runs the specified task(s). Falls back to the "default" task if no task name was specified, or lists all tasks if an unknown task name was
-specified.' -xa "(__task_get_tasks)"
-
-complete -c $GO_TASK_PROGNAME -s c -l color -d 'colored output (default true)'
-complete -c $GO_TASK_PROGNAME -s d -l dir -d 'sets directory of execution'
-complete -c $GO_TASK_PROGNAME -l dry -d 'compiles and prints tasks in the order that they would be run, without executing them'
-complete -c $GO_TASK_PROGNAME -s f -l force -d 'forces execution even when the task is up-to-date'
-complete -c $GO_TASK_PROGNAME -s h -l help -d 'shows Task usage'
-complete -c $GO_TASK_PROGNAME -s i -l init -d 'creates a new Taskfile.yml in the current folder'
-complete -c $GO_TASK_PROGNAME -s l -l list -d 'lists tasks with description of current Taskfile'
-complete -c $GO_TASK_PROGNAME -s o -l output -d 'sets output style: [interleaved|group|prefixed]' -xa "interleaved group prefixed"
-complete -c $GO_TASK_PROGNAME -s p -l parallel -d 'executes tasks provided on command line in parallel'
-complete -c $GO_TASK_PROGNAME -s s -l silent -d 'disables echoing'
-complete -c $GO_TASK_PROGNAME -l status -d 'exits with non-zero exit code if any of the given tasks is not up-to-date'
-complete -c $GO_TASK_PROGNAME -l summary -d 'show summary about a task'
-complete -c $GO_TASK_PROGNAME -s t -l taskfile -d 'choose which Taskfile to run. Defaults to "Taskfile.yml"'
-complete -c $GO_TASK_PROGNAME -s v -l verbose -d 'enables verbose mode'
-complete -c $GO_TASK_PROGNAME -l version -d 'show Task version'
-complete -c $GO_TASK_PROGNAME -s w -l watch -d 'enables watch of the given task'
diff --git a/.config/fish/conf.d/zoxide.fish b/.config/fish/conf.d/zoxide.fish
deleted file mode 100644
index fa10e76..0000000
--- a/.config/fish/conf.d/zoxide.fish
+++ /dev/null
@@ -1,100 +0,0 @@
-# =============================================================================
-#
-# Utility functions for zoxide.
-#
-
-# pwd based on the value of _ZO_RESOLVE_SYMLINKS.
-function __zoxide_pwd
- builtin pwd -L
-end
-
-# A copy of fish's internal cd function. This makes it possible to use
-# `alias cd=z` without causing an infinite loop.
-if ! builtin functions --query __zoxide_cd_internal
- if builtin functions --query cd
- builtin functions --copy cd __zoxide_cd_internal
- else
- alias __zoxide_cd_internal='builtin cd'
- end
-end
-
-# cd + custom logic based on the value of _ZO_ECHO.
-function __zoxide_cd
- __zoxide_cd_internal $argv
-end
-
-# =============================================================================
-#
-# Hook configuration for zoxide.
-#
-
-# Initialize hook to add new entries to the database.
-function __zoxide_hook --on-variable PWD
- test -z "$fish_private_mode"
- and command zoxide add -- (__zoxide_pwd)
-end
-
-# =============================================================================
-#
-# When using zoxide with --no-cmd, alias these internal functions as desired.
-#
-
-if test -z $__zoxide_z_prefix
- set __zoxide_z_prefix 'z!'
-end
-set __zoxide_z_prefix_regex ^(string escape --style=regex $__zoxide_z_prefix)
-
-# Jump to a directory using only keywords.
-function __zoxide_z
- set -l argc (count $argv)
- if test $argc -eq 0
- __zoxide_cd $HOME
- else if test "$argv" = -
- __zoxide_cd -
- else if test $argc -eq 1 -a -d $argv[1]
- __zoxide_cd $argv[1]
- else if set -l result (string replace --regex $__zoxide_z_prefix_regex '' $argv[-1]); and test -n $result
- __zoxide_cd $result
- else
- set -l result (command zoxide query --exclude (__zoxide_pwd) -- $argv)
- and __zoxide_cd $result
- end
-end
-
-# Completions.
-function __zoxide_z_complete
- set -l tokens (commandline --current-process --tokenize)
- set -l curr_tokens (commandline --cut-at-cursor --current-process --tokenize)
-
- if test (count $tokens) -le 2 -a (count $curr_tokens) -eq 1
- # If there are < 2 arguments, use `cd` completions.
- complete --do-complete "'' "(commandline --cut-at-cursor --current-token) | string match --regex '.*/$'
- else if test (count $tokens) -eq (count $curr_tokens); and ! string match --quiet --regex $__zoxide_z_prefix_regex. $tokens[-1]
- # If the last argument is empty and the one before doesn't start with
- # $__zoxide_z_prefix, use interactive selection.
- set -l query $tokens[2..-1]
- set -l result (zoxide query --exclude (__zoxide_pwd) --interactive -- $query)
- and echo $__zoxide_z_prefix$result
- commandline --function repaint
- end
-end
-complete --command __zoxide_z --no-files --arguments '(__zoxide_z_complete)'
-
-# Jump to a directory using interactive search.
-function __zoxide_zi
- set -l result (command zoxide query --interactive -- $argv)
- and __zoxide_cd $result
-end
-
-# =============================================================================
-#
-# Commands for zoxide. Disable these using --no-cmd.
-#
-
-abbr --erase cd &>/dev/null
-alias cd=__zoxide_z
-
-abbr --erase cdi &>/dev/null
-alias cdi=__zoxide_zi
-
-set -gx _ZO_EXCLUDE_DIRS "$HOME/media:$HOME/media/*"
diff --git a/.config/fish/config.fish b/.config/fish/config.fish
deleted file mode 100644
index 00991a5..0000000
--- a/.config/fish/config.fish
+++ /dev/null
@@ -1,71 +0,0 @@
-set fish_greeting
-set fish_emoji_width 2
-
-fish_add_path $HOME/.cargo/bin
-fish_add_path $HOME/bin
-
-if status is-interactive
-
- ## Pager
- set -gx LESS "--mouse --wheel-lines=1 -nRXF"
- set -gx LESSCOLORIZER bat
- set -gx LESSOPEN "|lesspipe.sh %s"
- set -gx PAGER bat
- set -gx BAT_PAGER "less -r"
-
- ## OpenTelemetry
- set -gx OTEL_EXPORTER_OTLP_ENDPOINT https://otel.aarn.shelman.io
- set -gx OTEL_RESOURCE_ATTRIBUTES instance=dln-dev
- set -gx OTEL_LOG_LEVEL debug
-
- ## Utilities
-
- set -gx EDITOR (which nvim)
- set -gx VISUAL $EDITOR
- set -gx SUDO_EDITOR $EDITOR
-
- function tree
- eza --tree --color=always $argv | bat --wrap=never
- end
-
- bind \cg __zoxide_zi
-
- function git_jump
- set _dir $(git rev-parse --show-toplevel 2>/dev/null || pwd)
- if [ "$_dir" = "$PWD" ]
- #set _dir $(br -f --conf ~/.config/broot/select.hjson)
- set _dir $(br -f --conf "$HOME/.config/broot/conf.hjson")
- end
- [ -n "$_dir" ] && pushd $_dir >>/dev/null
- commandline -f repaint
- end
- bind \c_ git_jump
-
- function git_broot
- br $(git rev-parse --show-toplevel 2>/dev/null || pwd)
- commandline -f repaint
- end
-
- bind \ee git_broot
- bind \eg gitui
-
-
- ## Kubernetes
- fish_add_path $HOME/.krew/bin
- # function kubectl --wraps kubectl
- # command kubecolor $argv
- # end
-
- ## History
-
- # FIXME: how to use autin history for these?
- bind \cn history-prefix-search-forward
- bind \cp history-prefix-search-backward
- # bind \cP _atuin_bind_up
- bind \cJ forward-char
-
- atuin init fish | source
-end
-
-## Direnv
-direnv hook fish | source
diff --git a/.config/fish/fish_variables b/.config/fish/fish_variables
deleted file mode 100644
index 10b98ea..0000000
--- a/.config/fish/fish_variables
+++ /dev/null
@@ -1,48 +0,0 @@
-# This file contains fish universal variable definitions.
-# VERSION: 3.0
-SETUVAR __fish_initialized:3400
-SETUVAR fish_color_autosuggestion:\x2d\x2ditalics\x1e\x2d\x2dbold\x1ered
-SETUVAR fish_color_cancel:\x1d
-SETUVAR fish_color_command:\x2d\x2dbold
-SETUVAR fish_color_comment:\x2d\x2ditalic\x1e\x2d\x2ddim
-SETUVAR fish_color_cwd:normal
-SETUVAR fish_color_cwd_root:normal
-SETUVAR fish_color_end:\x1d
-SETUVAR fish_color_error:\x1d
-SETUVAR fish_color_escape:\x1d
-SETUVAR fish_color_gray:6c7086
-SETUVAR fish_color_history_current:\x1d
-SETUVAR fish_color_host:normal
-SETUVAR fish_color_host_remote:yellow
-SETUVAR fish_color_keyword:\x1d
-SETUVAR fish_color_match:\x1d
-SETUVAR fish_color_normal:normal
-SETUVAR fish_color_operator:\x1d
-SETUVAR fish_color_option:\x1d
-SETUVAR fish_color_param:normal
-SETUVAR fish_color_quote:\x2d\x2ditalics
-SETUVAR fish_color_redirection:\x1d
-SETUVAR fish_color_search_match:\x2dr
-SETUVAR fish_color_selection:\x2dr
-SETUVAR fish_color_status:normal
-SETUVAR fish_color_string:\x2d\x2ditalics
-SETUVAR fish_color_user:normal
-SETUVAR fish_color_valid_path:\x1d
-SETUVAR fish_cursor_default:line
-SETUVAR fish_cursor_normal:line
-SETUVAR fish_key_bindings:fish_default_key_bindings
-SETUVAR fish_pager_color_background:\x1d
-SETUVAR fish_pager_color_completion:normal
-SETUVAR fish_pager_color_description:brblack
-SETUVAR fish_pager_color_prefix:\x2d\x2dunderline
-SETUVAR fish_pager_color_progress:brblack
-SETUVAR fish_pager_color_secondary_background:\x1d
-SETUVAR fish_pager_color_secondary_completion:\x1d
-SETUVAR fish_pager_color_secondary_description:\x1d
-SETUVAR fish_pager_color_secondary_prefix:\x1d
-SETUVAR fish_pager_color_selected_background:\x2dr
-SETUVAR fish_pager_color_selected_completion:\x1d
-SETUVAR fish_pager_color_selected_description:\x1d
-SETUVAR fish_pager_color_selected_prefix:\x1d
-SETUVAR fish_user_paths:/home/dln/\x2enix\x2dprofile/bin\x1e/home/dln/\x2ekrew/bin\x1e/home/dln/bin\x1e/home/dln/\x2ecargo/bin
-SETUVAR --export theme:Catppuccin\x20Latte
diff --git a/.config/fish/themes/Catppuccin Mocha.theme b/.config/fish/themes/Catppuccin Mocha.theme
deleted file mode 100644
index 104281b..0000000
--- a/.config/fish/themes/Catppuccin Mocha.theme
+++ /dev/null
@@ -1,30 +0,0 @@
-# name: 'Catppuccin mocha'
-# url: 'https://github.com/catppuccin/fish'
-# preferred_background: 1e1e2e
-
-fish_color_normal cdd6f4
-fish_color_command 89b4fa
-fish_color_param f2cdcd
-fish_color_keyword f38ba8
-fish_color_quote a6e3a1
-fish_color_redirection f5c2e7
-fish_color_end fab387
-fish_color_comment 7f849c --italics --dim
-fish_color_error f38ba8
-fish_color_gray 6c7086
-fish_color_selection --background=313244
-fish_color_search_match --background=313244
-fish_color_option a6e3a1
-fish_color_operator f5c2e7
-fish_color_escape eba0ac
-fish_color_autosuggestion 6c7086
-fish_color_cancel f38ba8
-fish_color_cwd f9e2af
-fish_color_user 94e2d5
-fish_color_host 89b4fa
-fish_color_host_remote a6e3a1
-fish_color_status f38ba8
-fish_pager_color_progress 6c7086
-fish_pager_color_prefix f5c2e7
-fish_pager_color_completion cdd6f4
-fish_pager_color_description 6c7086
diff --git a/.config/git/allowed_signers b/.config/git/allowed_signers
deleted file mode 100644
index 42c52d6..0000000
--- a/.config/git/allowed_signers
+++ /dev/null
@@ -1,3 +0,0 @@
-dln@arity.se sk-ssh-ed25519@openssh.com AAAAGnNrLXNzaC1lZDI1NTE5QG9wZW5zc2guY29tAAAAIFtd5SEEgKWzR6617GqxhSIi//4Afq7iRP0ny6fbwU7kAAAABHNzaDo=
-daniel@arity.se sk-ssh-ed25519@openssh.com AAAAGnNrLXNzaC1lZDI1NTE5QG9wZW5zc2guY29tAAAAIFtd5SEEgKWzR6617GqxhSIi//4Afq7iRP0ny6fbwU7kAAAABHNzaDo=
-dln@shelman.io sk-ssh-ed25519@openssh.com AAAAGnNrLXNzaC1lZDI1NTE5QG9wZW5zc2guY29tAAAAIFtd5SEEgKWzR6617GqxhSIi//4Afq7iRP0ny6fbwU7kAAAABHNzaDo=
diff --git a/.config/git/signing-key.sh b/.config/git/signing-key.sh
deleted file mode 100755
index aed9246..0000000
--- a/.config/git/signing-key.sh
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/usr/bin/env bash
-set -euo pipefail
-ssh-add -L | awk '/^sk-ssh/ { print "key::" $1 " " $2 }'
diff --git a/.config/helix/config.toml b/.config/helix/config.toml
deleted file mode 100644
index c789a38..0000000
--- a/.config/helix/config.toml
+++ /dev/null
@@ -1,52 +0,0 @@
-theme = "sumi-e"
-# theme = "github_light"
-
-[editor]
-true-color = true
-undercurl = true
-cursorline = true
-color-modes = true
-auto-pairs = false
-popup-border = "all"
-rulers = [80]
-gutters = ["diagnostics", "line-numbers", "spacer", "diff", "spacer"]
-
-[editor.cursor-shape]
-insert = "bar"
-normal = "block"
-select = "underline"
-
-[editor.indent-guides]
-character = "│" # "╎"
-render = true
-skip-levels = 1
-
-[editor.statusline]
-separator = "│"
-mode.normal = " "
-mode.insert = " "
-mode.select = " "
-left = ["spinner", "mode", "diagnostics"]
-center = ["file-name", "file-encoding"]
-right = ["version-control", "separator", "selections", "register", "separator", "position"]
-
-[editor.lsp]
-display-inlay-hints = true
-display-messages = true
-
-[keys.normal]
-backspace = "delete_char_backward"
-C-h = "delete_char_backward"
-C = ["select_mode", "goto_line_end", "normal_mode", "change_selection_noyank"]
-H = ":toggle lsp.display-inlay-hints"
-Z = { Z = ":write-quit-all" }
-esc = ["keep_primary_selection", "collapse_selection"]
-"`" = ["goto_last_accessed_file"]
-tab = ["buffer_picker"]
-C-r = ":config-reload"
-C-f = [":new", ":insert-output lf -selection-path=/dev/stdout", "split_selection_on_newline", "goto_file", "goto_last_modification", "goto_last_modified_file", ":buffer-close!", ":redraw"]
-V = ["goto_first_nonwhitespace", "extend_to_line_end"]
-x = "extend_line"
-
-[keys.select]
-x = "extend_line"
diff --git a/.config/helix/languages.toml b/.config/helix/languages.toml
deleted file mode 100644
index 1193075..0000000
--- a/.config/helix/languages.toml
+++ /dev/null
@@ -1,46 +0,0 @@
-[[language]]
-name = "rust"
-auto-format = true
-roots = [
- "Cargo.toml",
- "Cargo.lock"
-]
-language-servers = [
- "rust-analyzer",
- "gpt",
-]
-
-[[language]]
-name = "go"
-language-servers = [
- "gopls",
- "gpt",
-]
-
-[language.auto-pairs]
-'(' = ')'
-'{' = '}'
-'[' = ']'
-'"' = '"'
-'`' = '`'
-
-[language-server.rust-analyzer]
-command = "rust-analyzer"
-
-[language-server.rust-analyzer.config.inlayHints]
-bindingModeHints.enable = false
-chainingHints.enable = false
-# closingBraceHints.enable = false
-closingBraceHints.minLines = 10
-closureReturnTypeHints.enable = "with_block"
-# discriminantHints.enable = "fieldless"
-discriminantHints.enable = "always"
-lifetimeElisionHints.enable = "skip_trivial"
-parameterHints.enable = true
-typeHints.enable = true
-typeHints.hideClosureInitialization = false
-
-[language-server.gpt]
-command = "helix-gpt"
-args = ["--handler", "copilot", "--logFile", "/home/dln/.cache/helix/helix-gpt.log"]
-
diff --git a/.config/helix/themes/sumi-e.toml b/.config/helix/themes/sumi-e.toml
deleted file mode 100644
index d7a73c7..0000000
--- a/.config/helix/themes/sumi-e.toml
+++ /dev/null
@@ -1,193 +0,0 @@
-
-# GENERAL ==============================
-
-warning = { fg = "#ff7700", bg = "#221100", modifierd = [ "italic" ] }
-error = { fg = "#ff0038", bg = "#220000", modifiers = [ "italic" ] }
-hint = { fg = "#00d992", bg = "#002211", modifierd = [ "italic" ] }
-info = { fg = "#ffcc00", bg = "#222200", modifiers = ["italic"] }
-diagnostic = { fg = "#c49848"}
-"diagnostic.info" = { underline = { color = "#ffcc00", style = "curl" } }
-"diagnostic.hint" = { fg = "#00d992", underline = { color = "#00d992", style = "curl" } }
-"diagnostic.warning" = { fg = "#ff7700", underline = { color = "#ff7700", style = "curl" } }
-"diagnostic.error" = { fg = "#ff0038", underline = { color = "#ff0038", style = "curl" } }
-"diagnostic.unnecessary" = { fg = "#ffcc00", modifiers = ["dim", "italic"], underline = { style = "curl" } }
-"diagnostic.deprecated" = { modifiers = ["crossed_out"] }
-
-
-# UI ==============================
-# For styling helix itself.
-
-'ui.background' = { bg="background" }
-'ui.background.separator' = { fg="#00a171" }
-'ui.window' = { bg="#224466" }
-'ui.gutter' = { bg="#11171d" }
-
-'ui.text' = { fg = "#cccccc" }
-'ui.text.focus' = { bg = "#294467" }
-'ui.text.info' = { }
-
-'ui.cursor' = { bg = "#00a171", fg = "#000000" }
-'ui.cursor.primary' = { bg ="#23fdb6", fg = "#000000" }
-'ui.cursor.insert' = { fg = "#ff0000" }
-'ui.cursor.select' = { fg = "#3399ff" }
-'ui.cursor.match' = { fg = "#000000", bg = "#ffd54f" }
-'ui.cursorline.primary' = { bg = "#141b23" }
-
-'ui.selection' = { bg = "#294467" }
-'ui.selection.primary' = { bg = "#294467" }
-
-'ui.linenr' = { fg = "#374351", modifiers = [ "bold", "italic" ] }
-'ui.linenr.selected' = { fg = "#617d9d", bg = "#14202e" }
-
-'ui.virtual' = { }
-"ui.virtual.indent-guide" = { fg = "#273341" }
-"ui.virtual.inlay-hint" = { fg = "#51a0cf", modifiers = ["italic", "bold"] }
-'ui.virtual.ruler' = { bg = "#11171d" }
-'ui.virtual.whitespace' = { }
-'ui.virtual.wrap' = { fg = "#ffd54f" }
-"ui.virtual.jump-label" = { fg = "#96ffe6", bg = "#051e33", modifiers = ["bold", "italic"] }
-
-# 'ui.statusline' = { bg = "#151920", fg = "#4d5a6c" }
-'ui.statusline' = { bg = "#11171d", fg = "#637184", modifiers = ["italic", "bold"] }
-'ui.statusline.inactive' = { }
-"ui.statusline.normal" = { }
-"ui.statusline.insert" = { fg = "#d7b640" }
-"ui.statusline.select" = { fg = "#3dc9ff" }
-
-'ui.help' = { }
-
-'ui.highlight' = { bg="#224466" }
-"ui.highlight.frameline" = { }
-
-'ui.menu' = { bg = "#242d38", fg="#bfd5e2" }
-'ui.menu.selected' = { bg = "#135d7e" }
-
-'ui.popup' = { bg = "#253d6b", fg="#b2c6e9" }
-'ui.popup.info' = { }
-
-
-# SYNTAX HIGHLIGHTING ==============================
-# All the keys here are Treesitter scopes.
-
-'property' = { }
-'special' = { fg="#ffecd3" }
-'attribute' = { }
-
-'type' = { }
-'type.builtin' = { }
-'type.enum.variant' = { }
-
-'constructor' = { }
-
-'constant' = { }
-'constant.builtin' = { }
-'constant.builtin.boolean' = { }
-'constant.character' = { }
-'constant.character.escape' = { }
-'constant.numeric' = { }
-'constant.numeric.integer' = { }
-'constant.numeric.float' = { }
-
-'string' = { fg="#88ab8a", modifiers=["italic"] }
-'string.regexp' = { }
-'string.special' = { }
-'string.special.path' = { }
-'string.special.url' = { }
-'string.special.symbol' = { }
-
-'comment' = { fg = "#e57373", modifiers = ["bold", "italic"] }
-'comment.line' = { }
-'comment.block' = { }
-'comment.block.documentation' = { }
-
-'variable' = { fg="#999999", modifiers = [ "italic" ] }
-# 'variable.builtin' = { }
-'variable.parameter' = { fg = "#eeccaa", modifiers = [ "italic" ] }
-# 'variable.other.member' = { }
-
-'label' = { }
-
-'punctuation' = { fg = "#b0bec5" }
-'punctuation.delimiter' = { fg = "#b0bec5" }
-'punctuation.bracket' = { fg = "#b0bec5" }
-
-'keyword' = { fg = "#d5d5d5" }
-# 'keyword.control' = { }
-# 'keyword.control.conditional' = { }
-# 'keyword.control.repeat' = { }
-# 'keyword.control.import' = { }
-# 'keyword.control.return' = { }
-# 'keyword.control.exception' = { }
-# 'keyword.operator' = { }
-# 'keyword.directive' = { }
-# 'keyword.function' = { }
-
-'operator' = { }
-
-'function' = { fg = "#f7f7f7" }
-'function.builtin' = { }
-'function.method' = { }
-'function.macro' = { }
-'function.special' = { }
-
-'tag' = { }
-'tag.error' = { }
-
-'namespace' = { fg = "#b0bec5" }
-
-
-# Markup ==============================
-# Colors for markup languages, like Markdown or XML.
-
-'markup.heading.1' = { }
-'markup.heading.2' = { }
-'markup.heading.3' = { }
-'markup.heading.4' = { }
-'markup.heading.5' = { }
-'markup.heading.6' = { }
-'markup.heading.marker' = { }
-
-'markup.list' = { }
-'markup.list.numbered' = { }
-'markup.list.unnumbered' = { }
-
-'markup.bold' = { }
-'markup.italic' = { }
-
-'markup.link' = { }
-'markup.link.url' = { }
-'markup.link.label' = { }
-'markup.link.text' = { }
-
-'markup.quote' = { }
-
-
-# Markup - Interface ==============================
-# "These scopes are used for theming the editor interface."
-
-'markup.normal' = { }
-'markup.normal.completion' = { }
-'markup.normal.raw' = { }
-
-'markup.heading.completion' = { }
-'markup.heading.raw' = { }
-
-'markup.raw' = { }
-'markup.raw.block' = { }
-'markup.raw.inline' = { }
-'markup.raw.inline.completion' = { }
-'markup.raw.inline.hover' = { }
-
-# Diff ==============================
-# Version control changes.
-
-'diff.plus' = { fg = "#678350" }
-'diff.minus' = { fg = "#ff0038" }
-'diff.delta' = { fg = "#897a21" }
-'diff.delta.gutter' = { fg = "#ffff00" }
-# 'diff.delta.moved' = { }
-
-
-[palette] # Define your custom colors here.
-white = '#ffffff'
-
diff --git a/.config/k9s/config.yaml b/.config/k9s/config.yaml
deleted file mode 100644
index f80e58d..0000000
--- a/.config/k9s/config.yaml
+++ /dev/null
@@ -1,42 +0,0 @@
-k9s:
- liveViewAutoRefresh: false
- screenDumpDir: /home/dln/.local/state/k9s/screen-dumps
- refreshRate: 2
- maxConnRetry: 5
- readOnly: false
- noExitOnCtrlC: false
- ui:
- enableMouse: false
- headless: true
- logoless: true
- crumbsless: true
- reactive: false
- noIcons: false
- defaultsToFullScreen: true
- skin: dieter
- 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
- showTime: false
- thresholds:
- cpu:
- critical: 90
- warn: 70
- memory:
- critical: 90
- warn: 70
diff --git a/.config/k9s/plugins.yaml b/.config/k9s/plugins.yaml
deleted file mode 100644
index 59b9f8c..0000000
--- a/.config/k9s/plugins.yaml
+++ /dev/null
@@ -1,22 +0,0 @@
-plugins:
- raw-logs-follow:
- shortCut: Shift-L
- description: kubectl logs
- scopes:
- - po
- command: bash
- background: false
- args:
- - -c
- - |
- kubectl logs $NAME -n $NAMESPACE --context $CONTEXT | bat --wrap=never --pager="less" --force-colorization
- toolbox:
- shortCut: Shift-K
- description: ktoolbox in current namespace
- scopes:
- - all
- command: ktoolbox
- background: false
- args:
- - -n
- - $NAMESPACE
diff --git a/.config/k9s/skins/dieter.yaml b/.config/k9s/skins/dieter.yaml
deleted file mode 100644
index 46c9a99..0000000
--- a/.config/k9s/skins/dieter.yaml
+++ /dev/null
@@ -1,76 +0,0 @@
-# Dieter
-
-k9s:
- body:
- fgColor: default
- bgColor: default
- logoColor: default
- prompt:
- fgColor: default
- bgColor: default
- suggestColor: default
- info:
- fgColor: default
- sectionColor: default
- dialog:
- fgColor: default
- bgColor: default
- buttonFgColor: default
- buttonBgColor: default
- buttonFocusFgColor: white
- buttonFocusBgColor: darkblue
- labelFgColor: default
- fieldFgColor: default
- frame:
- border:
- fgColor: default
- focusColor: default
- menu:
- fgColor: default
- keyColor: default
- numKeyColor: default
- crumbs:
- fgColor: default
- bgColor: default
- activeColor: default
- status:
- newColor: default
- modifyColor: default
- addColor: default
- errorColor: red
- highlightColor: default
- killColor: default
- completedColor: default
- title:
- fgColor: default
- bgColor: default
- highlightColor: default
- counterColor: default
- filterColor: default
- views:
- table:
- fgColor: default
- bgColor: default
- cursorFgColor: teal
- cursorBgColor: darkblue
- header:
- fgColor: default
- bgColor: default
- sorterColor: blue
- xray:
- fgColor: default
- bgColor: default
- cursorColor: blue
- graphicColor: blue
- yaml:
- keyColor: default
- colonColor: default
- valueColor: default
- logs:
- fgColor: default
- bgColor: default
- indicator:
- fgColor: default
- bgColor: default
- toggleOnColor: default
- toggleOffColor: default
diff --git a/.config/nerdctl/nerdctl.toml b/.config/nerdctl/nerdctl.toml
deleted file mode 100644
index 6bbbda3..0000000
--- a/.config/nerdctl/nerdctl.toml
+++ /dev/null
@@ -1,3 +0,0 @@
-debug_full = false
-snapshotter = "native"
-insecure_registry = false
diff --git a/.config/nvim/lazyvim.json b/.config/nvim/lazyvim.json
deleted file mode 100644
index 05f524f..0000000
--- a/.config/nvim/lazyvim.json
+++ /dev/null
@@ -1,24 +0,0 @@
-{
- "extras": [
- "lazyvim.plugins.extras.dap.core",
- "lazyvim.plugins.extras.formatting.prettier",
- "lazyvim.plugins.extras.lang.go",
- "lazyvim.plugins.extras.lang.json",
- "lazyvim.plugins.extras.lang.markdown",
- "lazyvim.plugins.extras.lang.nix",
- "lazyvim.plugins.extras.lang.rust",
- "lazyvim.plugins.extras.lang.toml",
- "lazyvim.plugins.extras.lang.typescript",
- "lazyvim.plugins.extras.lang.yaml",
- "lazyvim.plugins.extras.lsp.none-ls",
- "lazyvim.plugins.extras.test.core",
- "lazyvim.plugins.extras.ui.edgy",
- "lazyvim.plugins.extras.ui.treesitter-context",
- "lazyvim.plugins.extras.util.gitui",
- "lazyvim.plugins.extras.util.project"
- ],
- "news": {
- "NEWS.md": "6077"
- },
- "version": 6
-}
\ No newline at end of file
diff --git a/.config/nvim/lua/plugins/editor.lua b/.config/nvim/lua/plugins/editor.lua
deleted file mode 100644
index 1185b23..0000000
--- a/.config/nvim/lua/plugins/editor.lua
+++ /dev/null
@@ -1,71 +0,0 @@
-return {
- {
- "folke/flash.nvim",
- enabled = false,
- },
-
- {
- "danielfalk/smart-open.nvim",
- branch = "0.2.x",
- dependencies = {
- "kkharji/sqlite.lua",
- { "nvim-telescope/telescope-fzf-native.nvim", build = "make" },
- { "nvim-telescope/telescope-fzy-native.nvim" },
- },
- config = function()
- local util = require("lazyvim.util")
- util.on_load("telescope.nvim", function()
- local telescope = require("telescope")
- telescope.load_extension("smart_open")
- end)
- end,
- },
-
- {
- "telescope.nvim",
- keys = {
- {
- "",
- function()
- require("telescope").extensions.smart_open.smart_open({
- filename_first = false,
- })
- end,
- desc = "Telescope smart open",
- },
- },
- opts = function(_, opts)
- local actions = require("telescope.actions")
- opts.defaults = {
- layout_strategy = "horizontal",
- layout_config = {
- anchor = "top",
- horizontal = {
- prompt_position = "top",
- mirror = false,
- preview_width = 0.49,
- -- preview_height = 0.5,
- },
- width = 0.9,
- height = 0.9,
- preview_cutoff = 10,
- },
- mappings = {
- i = {
- [""] = actions.close, -- close popup
- [""] = false, -- clear prompt
- [""] = false, -- clear prompt
- },
- },
- -- path_display = { "filename_first" },
- -- previewer = false,
- preview = {
- -- hide_on_startup = true,
- },
- sorting_strategy = "ascending",
- winblend = 0,
- wrap_results = true,
- }
- end,
- },
-}
diff --git a/.config/nvim/lua/plugins/overseer.lua b/.config/nvim/lua/plugins/overseer.lua
deleted file mode 100644
index fb545a8..0000000
--- a/.config/nvim/lua/plugins/overseer.lua
+++ /dev/null
@@ -1,90 +0,0 @@
-return {
- {
- "folke/which-key.nvim",
- opts = function(_, opts)
- if LazyVim.has("noice.nvim") then
- opts.defaults["o"] = { name = "+overseer" }
- end
- end,
- },
-
- {
- "folke/edgy.nvim",
- optional = true,
- opts = function(_, opts)
- opts.right = opts.right or {}
- table.insert(opts.right, {
- title = "Overseer",
- ft = "OverseerList",
- open = function()
- require("overseer").open()
- end,
- })
- end,
- },
-
- {
- "nvim-neotest/neotest",
- dependencies = "stevearc/overseer.nvim",
- opts = function(_, opts)
- local consumers = opts.consumers or {}
- consumers.overseer = require("neotest.consumers.overseer")
- end,
- },
-
- {
- "stevearc/overseer.nvim",
- cmd = {
- "OverseerOpen",
- "OverseerClose",
- "OverseerToggle",
- "OverseerSaveBundle",
- "OverseerLoadBundle",
- "OverseerDeleteBundle",
- "OverseerRunCmd",
- "OverseerRun",
- "OverseerInfo",
- "OverseerBuild",
- "OverseerQuickAction",
- "OverseerTaskAction",
- "OverseerClearCache",
- },
- dependencies = "nvim-telescope/telescope.nvim",
- opts = {
- dap = false,
- task_list = {
- bindings = {
- [""] = false,
- [""] = false,
- [""] = false,
- [""] = false,
- },
- },
- form = {
- win_opts = {
- winblend = 0,
- },
- },
- confirm = {
- win_opts = {
- winblend = 0,
- },
- },
- task_win = {
- win_opts = {
- winblend = 0,
- },
- },
- },
- -- stylua: ignore
- keys = {
- { "ow", "OverseerToggle", desc = "Task list" },
- { "oo", "OverseerRun", desc = "Run task" },
- { "oq", "OverseerQuickAction", desc = "Action recent task" },
- { "oi", "OverseerInfo", desc = "Overseer Info" },
- { "ob", "OverseerBuild", desc = "Task builder" },
- { "ot", "OverseerTaskAction", desc = "Task action" },
- { "oc", "OverseerClearCache", desc = "Clear cache" },
- },
- },
-}
diff --git a/.config/nvim/spell/en.utf-8.add b/.config/nvim/spell/en.utf-8.add
deleted file mode 100644
index ab924f2..0000000
--- a/.config/nvim/spell/en.utf-8.add
+++ /dev/null
@@ -1,10 +0,0 @@
-#rytographically
-crytographically/!
-OIDC
-Kubernetes
-auth
-JWT
-PKCE
-OPA
-#askfile
-Taskfile/!
diff --git a/.config/nvim/spell/en.utf-8.add.spl b/.config/nvim/spell/en.utf-8.add.spl
deleted file mode 100644
index b8cee88..0000000
Binary files a/.config/nvim/spell/en.utf-8.add.spl and /dev/null differ
diff --git a/.config/paru/paru.conf b/.config/paru/paru.conf
deleted file mode 100644
index 23800b5..0000000
--- a/.config/paru/paru.conf
+++ /dev/null
@@ -1,8 +0,0 @@
-Include = /etc/paru.conf
-
-[options]
-RemoveMake = ask
-SkipReview
-
-[bin]
-Sudo = doas
diff --git a/.config/rg/rg.conf b/.config/rg/rg.conf
deleted file mode 100644
index a09bccf..0000000
--- a/.config/rg/rg.conf
+++ /dev/null
@@ -1,10 +0,0 @@
---glob=!/.git/
---glob=!/.terraform/
---pretty
---colors=column:fg:100,181,246
---colors=line:fg:100,181,246
---colors=path:fg:26,35,126
---colors=path:style:bold
---colors=match:style:nobold
---colors=match:bg:255,235,59
---colors=match:fg:0,0,0
diff --git a/.config/sapling/sapling.conf b/.config/sapling/sapling.conf
deleted file mode 100644
index f6bbe26..0000000
--- a/.config/sapling/sapling.conf
+++ /dev/null
@@ -1,22 +0,0 @@
-[ui]
-username =Daniel Lundin
-
-[alias]
-sw = switch
-switch = !sl sl -M -T ':\033[31m{node|short} \033[1;33m{bookmarks}{if(bookmarks, " ")}{remotenames} {if(github_pull_request_number, "\033[1;37;41m PR #{github_pull_request_number} ")}\033[0;3;32m {date|age} \033[35;1;3mby {author|user} - \033[0;34;3m{desc|firstline}\033[0m' | sed -E -e '/31m[0-9abcdef]{12}/!d' -e 's/.+ ://' | fzf-tmux -p 90%,50% -y 0 --ansi --color=light | sed "s/ .*//" | xargs -r -n1 sl go && sl log -r . -T status
-
-l = ll
-ll = log -G -T '\033[31m{node|short} \033[3;32m{date|age} \033[35;1;3mby {author|person}\n \033[0;34;3m{desc|firstline}\033[0m\n\n'
-
-[pager]
-pager = delta --hunk-header-style "line-number file" --line-numbers --max-line-distance 0.9 --inspect-raw-lines=false
-
-[color]
-sl.public = color70 bold
-sl.draft = color208 bold
-sl.current = color99 bold
-sl.diff = red bold
-
-[committemplate]
-emptymsg = ""
-
diff --git a/.config/starship.toml b/.config/starship.toml
deleted file mode 100644
index f983e5f..0000000
--- a/.config/starship.toml
+++ /dev/null
@@ -1,77 +0,0 @@
-"$schema" = 'https://starship.rs/config-schema.json'
-
-add_newline = true
-
-format = """\
-$fill\
-${custom.pwd}\
-$line_break\
-$hostname\
-$directory\
-($character)\
-"""
-
-right_format = """\
-$cmd_duration\
-$git_branch$git_commit$git_status$git_state\
-"""
-
-[hostname]
-ssh_only = false
-format = "[$hostname](italic bold)"
-disabled = false
-
-[time]
-disabled = false
-format = '[ $time](italic dimmed inverted)'
-time_format = '%R'
-
-[custom.pwd]
-command = "prompt_pwd -D 100"
-when = true
-format = "[ $output]($style)"
-style = "italic dimmed"
-
-[directory]
-fish_style_pwd_dir_length = 1
-truncation_length = 1
-truncate_to_repo = false
-truncation_symbol = "…"
-style = "italic"
-
-[line_break]
-disabled = false
-
-[fill]
-symbol = '┄'
-style = 'dimmed fg:#888888'
-
-[character]
-success_symbol = "[%](bold)"
-error_symbol = "[✖](bold red)"
-
-[cmd_duration]
-min_time = 500
-format = '[ $duration ](yellow)'
-
-[git_branch]
-format = "[$symbol$branch]($style)"
-style = "italic bold green"
-symbol = " "
-truncation_length = 16
-truncation_symbol = ""
-
-[git_commit]
-format = "[ $hash$tag]($style) "
-style = "cyan"
-
-[git_state]
-style = ""
-
-[git_status]
-format = '([$all_status$ahead_behind]($style))'
-style = "fg:#00ac73"
-modified = "[ ](yellow)"
-deleted = "[ ✘](red)"
-untracked = "[ ?](purple)"
-staged = "[ ](cyan)"
diff --git a/.config/systemd/user/opener@.service b/.config/systemd/user/opener@.service
deleted file mode 100644
index fcd14c9..0000000
--- a/.config/systemd/user/opener@.service
+++ /dev/null
@@ -1,11 +0,0 @@
-[Unit]
-Description=Open URL in your local web browser from the SSH-connected remote environment.
-After=graphical-session.target
-
-[Service]
-Restart=always
-Environment=OPENER_CONF=%t/opener.%i.conf
-ExecStart=/bin/sh -c 'echo "address: %t/opener.%i.sock" > $OPENER_CONF && exec %h/bin/opener --config $OPENER_CONF'
-
-[Install]
-WantedBy=graphical-session.target
diff --git a/.config/systemd/user/tmux.service b/.config/systemd/user/tmux.service
deleted file mode 100644
index fc4806c..0000000
--- a/.config/systemd/user/tmux.service
+++ /dev/null
@@ -1,10 +0,0 @@
-[Unit]
-Description=Run tmux server
-
-[Service]
-Restart=always
-StartLimitIntervalSec=0
-ExecStart=/usr/bin/tmux -D -u
-
-[Install]
-WantedBy=default.target
diff --git a/.config/vconsole/personal.map b/.config/vconsole/personal.map
deleted file mode 100644
index 1740bb1..0000000
--- a/.config/vconsole/personal.map
+++ /dev/null
@@ -1,3 +0,0 @@
-include "linux-with-two-alt-keys"
-keycode 58 = Control
-
diff --git a/.config/zsh-abbr/user-abbreviations b/.config/zsh-abbr/user-abbreviations
deleted file mode 100644
index b0d3a00..0000000
--- a/.config/zsh-abbr/user-abbreviations
+++ /dev/null
@@ -1,13 +0,0 @@
-abbr "b"="git branch -va"
-abbr "c"="git commit"
-abbr "d"="git diff --stat -p -C --color-words"
-abbr "g"="git"
-abbr "gsw"="git gerrit-switch"
-abbr "k"="kubectl"
-abbr "new"="git checkout --detach main"
-abbr "p"="git push"
-abbr "rec"="git record"
-abbr "s"="git st"
-abbr "sl"="git branchless smartlog"
-abbr "sw"="git branchless switch --interactive"
-abbr "sy"="git sync --pull"
diff --git a/.envrc b/.envrc
new file mode 100644
index 0000000..0f94eed
--- /dev/null
+++ b/.envrc
@@ -0,0 +1,2 @@
+# shellcheck shell=bash
+use flake
diff --git a/.gitconfig b/.gitconfig
deleted file mode 100644
index e001475..0000000
--- a/.gitconfig
+++ /dev/null
@@ -1,150 +0,0 @@
-[alias]
-b = branch -va
-cl = clone --filter=blob:none
-co = checkout
-d = diff --stat -p -C --color-words
-ds = diff --staged --stat -p -C --color-words
-dt = difftool
-patch = !git --no-pager diff --no-color
-pullr = pull --rebase --autostash
-sh = show --stat -p -C --color-words --show-signature
-st = status -sb
-t = tag --sort=-v:refname --format='%(color:bold italic)%(objectname:short)%(color:noitalic) %(refname:short)'
-
-new = !git fetch -u origin main:main && git branchless switch -d origin/main
-sl = branchless smartlog
-sync = branchless sync
-sw = branchless switch
-s = branchless switch -i
-
-copr = "!f() { \
- pr=$1 \
- && test -n \"$pr\" || pr=`tea pr list -o simple | fzf --bind 'enter:become(echo {+1})'` \
- && git fetch origin refs/pull/$pr/head \
- && git checkout --detach FETCH_HEAD \
- ;};f"
-
-g = graph -S -m simple -s round
-ll = "log --pretty='format:%x1B[0;3;36m%as %G? %x1B[0;95;3m%<(12,trunc)%al %x1B[3;32m• %h%x1B[0;1;92m%(decorate:prefix= [,suffix=]%n)%>|(35)%Creset %s'"
-lla = "log --graph --all --topo-order --pretty='format:\t%x1B[0;3;36m%as %x1B[0;95;3m%<(12)%al %x1B[3;32m• %h%x1B[0;1;92m%d%x1B[0m %s'"
-
-guilt = "!f(){ git log --pretty='format:%an <%ae>' $@ | sort | uniq -c | sort -rn; }; f"
-serve = daemon --verbose --export-all --base-path=.git --reuseaddr --strict-paths .git/
-
-[apply]
-whitespace = nowarn
-
-[blame]
-date = relative
-
-[branch "main"]
-rebase = true
-
-[branch "master"]
-rebase = true
-
-[color]
-branch = auto
-diff = auto
-status = auto
-ui = auto
-
-[column]
-ui = auto
-
-[core]
-compression = 3
-excludesfile = "~/.gitignore"
-looseCompression = 3
-pager = delta
-
-[delta]
-file-added-label = "[+]"
-file-decoration-style=none
-file-modified-label = "[*]"
-file-removed-label = "[-]"
-file-renamed-label = "[>]"
-file-style = bold reverse
-file-transformation = "s/$/ ░▒▓/"
-hunk-header-decoration-style=none
-hunk-header-file-style = bold
-hunk-header-line-number-style = bold
-hunk-header-style = line-number bold
-hunk-label = "⯁"
-hunk-label-style = bold
-line-numbers = true
-max-line-distance = 0.9
-
-[http]
-cookiefile = /home/dln/.gitcookies
-
-[hub]
-protocol = git
-
-[interactive]
-diffFilter = delta --color-only --features=interactive
-
-[commit]
-gpgsign = false
-verbose = true
-
-[credential]
-helper = store
-
-[diff]
-algorithm = histogram
-tool = difft
-
-[difftool]
-prompt = false
-
-[difftool "difft"]
-cmd = difft --color=always --display inline "$LOCAL" "$REMOTE" | bat
-
-[fetch]
-prune = true
-prunetags = true
-showForcedUpdates = true
-
-[filter "lfs"]
-clean = git-lfs clean -- %f
-process = git-lfs filter-process
-required = true
-smudge = git-lfs smudge -- %f
-
-[gpg]
-format = ssh
-
-[gpg "ssh"]
-allowedSignersFile = ~/.config/git/allowed_signers
-defaultKeyCommand = /home/dln/.config/git/signing-key.sh
-
-[init]
-defaultBranch = main
-
-[lfs]
-concurrenttransfers = 32
-
-[merge]
-conflictstyle = zdiff3
-
-[pack]
-compression = 3
-threads = 0
-
-[push]
-default = tracking
-
-[rebase]
-autosquash = true
-
-[rerere]
-enabled = true
-
-[tag]
-sort = -v:refname
-
-[user]
-email = dln@arity.se
-name = Daniel Lundin
-useConfigOnly = true
diff --git a/.gitignore b/.gitignore
deleted file mode 100644
index 4bb6205..0000000
--- a/.gitignore
+++ /dev/null
@@ -1,14 +0,0 @@
-*~
-*.a
-*.class
-/.idea
-*.iml
-*.ipr
-*.iwr
-*.iws
-*.la
-*.o
-*.pyc
-*.so
-*.swp
-
diff --git a/.gnupg/gpg-agent.conf b/.gnupg/gpg-agent.conf
deleted file mode 100644
index db49aaf..0000000
--- a/.gnupg/gpg-agent.conf
+++ /dev/null
@@ -1,4 +0,0 @@
-enable-ssh-support
-default-cache-ttl 3600
-max-cache-ttl 3600
-extra-socket /run/user/1000/gnupg/S.gpg-agent.extra
diff --git a/.gnupg/gpg.conf b/.gnupg/gpg.conf
deleted file mode 100644
index 50f74df..0000000
--- a/.gnupg/gpg.conf
+++ /dev/null
@@ -1,2 +0,0 @@
-#use-agent
-keyid-format LONG
diff --git a/.inputrc b/.inputrc
deleted file mode 100644
index 062ffe5..0000000
--- a/.inputrc
+++ /dev/null
@@ -1,11 +0,0 @@
-set meta-flag on
-set convert-meta off
-set output-meta on
-set completion-ignore-case on
-set visible-stats on
-set show-all-if-ambiguous on
-set completion-query-items 150
-
-#"\C-p": history-search-backward
-#"\C-n": history-search-forward
-
diff --git a/.jjconfig.toml b/.jjconfig.toml
deleted file mode 100644
index befcefa..0000000
--- a/.jjconfig.toml
+++ /dev/null
@@ -1,21 +0,0 @@
-[user]
-name = "Daniel Lundin"
-email = "dln@arity.se"
-
-[ui]
-default-command = "l"
-diff-editor = ["scm-diff-editor", "--dir-diff", "$left", "$right"]
-pager = ["delta", "--line-numbers", "--max-line-distance=0.9"]
-
-[aliases]
-l = ["log", "--ignore-working-copy", "-r", "(main..@): | (main..@)-"]
-la = ["log", "--ignore-working-copy", "-r", "all()"]
-b = ["branch", "list"]
-n = ["new", "main"]
-d = ["diff"]
-
-[revset-aliases]
-# The `main.. &` bit is an optimization to scan for non-`mine()` commits only
-# among commits that are not in `main`.
-"immutable_heads()" = "main@origin | (main@origin.. & ~mine())"
-
diff --git a/.lessfilter b/.lessfilter
deleted file mode 100755
index 43d2942..0000000
--- a/.lessfilter
+++ /dev/null
@@ -1,46 +0,0 @@
-#! /usr/bin/env bash
-mime=$(file -Lbs --mime-type "$1")
-category=${mime%%/*}
-kind=${mime##*/}
-ext=${1##*.}
-if [ "$kind" = json ]; then
- if [ "$(command -v jq)" ]; then
- jq -Cr . "$1"
- fi
-elif [ "$kind" = vnd.sqlite3 ]; then
- if [ "$(command -v yes)" ] && [ "$(command -v sqlite3)" ] && [ "$(command -v bat)" ]; then
- yes .q | sqlite3 "$1" | bat --color=always -plsql
- fi
-# https://github.com/wofr06/lesspipe/pull/107
-elif [ -d "$1" ]; then
- if [ "$(command -v exa)" ]; then
- exa --git -hl --color=always --icons "$1"
- fi
-# https://github.com/wofr06/lesspipe/pull/110
-elif [ "$kind" = pdf ]; then
- if [ "$(command -v pdftotext)" ] && [ "$(command -v sed)" ]; then
- pdftotext -q "$1" - | sed "s/\f/$(hr ─)\n/g"
- fi
-# https://github.com/wofr06/lesspipe/pull/115
-elif [ "$kind" = rfc822 ]; then
- if [ "$(command -v bat)" ]; then
- bat --color=always -lEmail "$1"
- fi
-# https://github.com/wofr06/lesspipe/pull/106
-elif [ "$category" = image ]; then
- if [ "$(command -v chafa)" ]; then
- chafa -f symbols "$1"
- fi
- if [ "$(command -v exiftool)" ]; then
- exiftool "$1" | bat --color=always -plyaml
- fi
-# https://github.com/wofr06/lesspipe/pull/117
-elif [ "$category" = text ]; then
- if [ "$(command -v bat)" ]; then
- bat --color=always "$1"
- elif [ "$(command -v pygmentize)" ]; then
- pygmentize "$1" | less
- fi
-else
- exit 1
-fi
diff --git a/.local/share/applications/firefox-arity.desktop b/.local/share/applications/firefox-arity.desktop
deleted file mode 100644
index c417974..0000000
--- a/.local/share/applications/firefox-arity.desktop
+++ /dev/null
@@ -1,13 +0,0 @@
-[Desktop Entry]
-Version=1.0
-Name=Firefox (Arity)
-GenericName=Web Browser
-Comment=Browse the Web
-Exec=firefox %u -P Arity --name firefox-arity
-Icon=firefox
-Terminal=false
-Type=Application
-MimeType=text/html;text/xml;application/xhtml+xml;application/vnd.mozilla.xul+xml;text/mml;x-scheme-handler/http;x-scheme-handler/https;
-StartupWMClass=firefox-arity
-Categories=Network;WebBrowser;
-Keywords=web;browser;internet;
diff --git a/.local/share/applications/firefox-work.desktop b/.local/share/applications/firefox-work.desktop
deleted file mode 100644
index 805a7a9..0000000
--- a/.local/share/applications/firefox-work.desktop
+++ /dev/null
@@ -1,13 +0,0 @@
-[Desktop Entry]
-Version=1.0
-Name=Firefox (Work)
-GenericName=Web Browser
-Comment=Browse the Web
-Exec=firefox %u -P Work --new-instance --name firefox-work
-Icon=firefox
-Terminal=false
-Type=Application
-MimeType=text/html;text/xml;application/xhtml+xml;application/vnd.mozilla.xul+xml;text/mml;x-scheme-handler/http;x-scheme-handler/https;
-StartupWMClass=firefox-work
-Categories=Network;WebBrowser;
-Keywords=web;browser;internet;
diff --git a/.local/share/applications/google-chrome-beta-client.desktop b/.local/share/applications/google-chrome-beta-client.desktop
deleted file mode 100644
index cd2f598..0000000
--- a/.local/share/applications/google-chrome-beta-client.desktop
+++ /dev/null
@@ -1,11 +0,0 @@
-[Desktop Entry]
-Version=1.0
-Name=Client Chrome
-StartupWMClass=Google-chrome-beta-client
-Exec=/usr/bin/google-chrome-beta %U --user-data-dir=.config/Google-chrome-beta-client --class=Google-chrome-beta-client
-StartupNotify=true
-Terminal=false
-Icon=google-chrome-beta
-Type=Application
-Categories=Network;WebBrowser;
-MimeType=application/pdf;application/rdf+xml;application/rss+xml;application/xhtml+xml;application/xhtml_xml;application/xml;image/gif;image/jpeg;image/png;image/webp;text/html;text/xml;x-scheme-handler/http;x-scheme-handler/https;
diff --git a/.local/share/applications/google-chrome-beta-private.desktop b/.local/share/applications/google-chrome-beta-private.desktop
deleted file mode 100644
index 581a1ba..0000000
--- a/.local/share/applications/google-chrome-beta-private.desktop
+++ /dev/null
@@ -1,11 +0,0 @@
-[Desktop Entry]
-Version=1.0
-Name=Private Chrome
-StartupWMClass=Google-chrome-beta-private
-Exec=/usr/bin/google-chrome-beta %U --user-data-dir=.config/Google-chrome-beta-private --class=Google-chrome-beta-private
-StartupNotify=true
-Terminal=false
-Icon=google-chrome-beta
-Type=Application
-Categories=Netprivate;WebBrowser;
-MimeType=application/pdf;application/rdf+xml;application/rss+xml;application/xhtml+xml;application/xhtml_xml;application/xml;image/gif;image/jpeg;image/png;image/webp;text/html;text/xml;x-scheme-handler/http;x-scheme-handler/https;
diff --git a/.local/share/applications/google-chrome-beta-work.desktop b/.local/share/applications/google-chrome-beta-work.desktop
deleted file mode 100644
index 9912349..0000000
--- a/.local/share/applications/google-chrome-beta-work.desktop
+++ /dev/null
@@ -1,11 +0,0 @@
-[Desktop Entry]
-Version=1.0
-Name=Work Chrome
-StartupWMClass=Google-chrome-beta-work
-Exec=/usr/bin/google-chrome-beta %U --user-data-dir=.config/Google-chrome-beta-work --class=Google-chrome-beta-work
-StartupNotify=true
-Terminal=false
-Icon=google-chrome-beta
-Type=Application
-Categories=Network;WebBrowser;
-MimeType=application/pdf;application/rdf+xml;application/rss+xml;application/xhtml+xml;application/xhtml_xml;application/xml;image/gif;image/jpeg;image/png;image/webp;text/html;text/xml;x-scheme-handler/http;x-scheme-handler/https;
diff --git a/.local/share/applications/meet.desktop b/.local/share/applications/meet.desktop
deleted file mode 100644
index 4dca9eb..0000000
--- a/.local/share/applications/meet.desktop
+++ /dev/null
@@ -1,9 +0,0 @@
-[Desktop Entry]
-Version=1.0
-Name=Google Meet
-StartupWMClass=meet.google.com
-Exec=/usr/bin/google-chrome-stable --profile-directory='Profile 1' --app=https://meet.google.com
-Terminal=false
-Icon=camera-video
-Type=Application
-Categories=Network;Office
diff --git a/.local/share/applications/plex.desktop b/.local/share/applications/plex.desktop
deleted file mode 100644
index 49d5d49..0000000
--- a/.local/share/applications/plex.desktop
+++ /dev/null
@@ -1,9 +0,0 @@
-[Desktop Entry]
-Version=1.0
-Name=plex
-StartupWMClass=plex.aarn.shelman.io
-Exec=/usr/bin/google-chrome-stable --profile-directory='Profile 2' --app=https://plex.home:32400/web/index.html
-Terminal=false
-Icon=google-chrome
-Type=Application
-Categories=Audio;
diff --git a/.local/share/applications/spotify.desktop b/.local/share/applications/spotify.desktop
deleted file mode 100644
index 4359bc1..0000000
--- a/.local/share/applications/spotify.desktop
+++ /dev/null
@@ -1,11 +0,0 @@
-[Desktop Entry]
-Type=Application
-Name=Spotify
-GenericName=Music Player
-Icon=spotify-client
-TryExec=spotify
-Exec=spotify --force-device-scale-factor=2 %U
-Terminal=false
-MimeType=x-scheme-handler/spotify;
-Categories=Audio;Music;Player;AudioVideo;
-StartupWMClass=spotify
diff --git a/.local/share/applications/wezterm-dev-secondary.desktop b/.local/share/applications/wezterm-dev-secondary.desktop
deleted file mode 100644
index 9c1905b..0000000
--- a/.local/share/applications/wezterm-dev-secondary.desktop
+++ /dev/null
@@ -1,10 +0,0 @@
-[Desktop Entry]
-Name=wezterm-dev-secondary
-GenericName=wezterm-dev-secondary
-StartupWMClass=org.wezfurlong.wezterm-dev-secondary
-Type=Application
-TryExec=/usr/bin/wezterm
-Icon=org.wezfurlong.wezterm
-Terminal=false
-Categories=System;TerminalEmulator;
-Exec=/usr/bin/wezterm --config 'default_prog={"/usr/bin/fish"}' start --class=org.wezfurlong.wezterm-dev-secondary --domain=dev
diff --git a/.local/share/applications/wezterm-dev.desktop b/.local/share/applications/wezterm-dev.desktop
deleted file mode 100644
index 9cff6ce..0000000
--- a/.local/share/applications/wezterm-dev.desktop
+++ /dev/null
@@ -1,10 +0,0 @@
-[Desktop Entry]
-Name=wezterm-dev
-GenericName=wezterm-dev
-StartupWMClass=org.wezfurlong.wezterm-dev
-Type=Application
-TryExec=/usr/bin/wezterm
-Icon=org.wezfurlong.wezterm
-Terminal=false
-Categories=System;TerminalEmulator;
-Exec=/usr/bin/wezterm --config 'default_prog={"/usr/bin/fish"}' start --class=org.wezfurlong.wezterm-dev --domain=dev
diff --git a/.local/share/applications/wezterm-local.desktop b/.local/share/applications/wezterm-local.desktop
deleted file mode 100644
index 773565d..0000000
--- a/.local/share/applications/wezterm-local.desktop
+++ /dev/null
@@ -1,10 +0,0 @@
-[Desktop Entry]
-Name=wezterm-local
-GenericName=wezterm-local
-StartupWMClass=wezterm-local
-Type=Application
-TryExec=/usr/bin/wezterm
-Icon=org.wezfurlong.wezterm
-Terminal=false
-Categories=System;TerminalEmulator;
-Exec=/usr/bin/wezterm --config 'default_prog={"tmux", "-u", "new", "-As0"}' start --class=wezterm-local
diff --git a/.local/share/applications/wezterm-nemo.desktop b/.local/share/applications/wezterm-nemo.desktop
deleted file mode 100644
index 392778e..0000000
--- a/.local/share/applications/wezterm-nemo.desktop
+++ /dev/null
@@ -1,10 +0,0 @@
-[Desktop Entry]
-Name=wezterm-nemo
-GenericName=wezterm-nemo
-StartupWMClass=org.wezfurlong.wezterm-nemo
-Type=Application
-TryExec=/usr/bin/wezterm
-Icon=org.wezfurlong.wezterm
-Terminal=false
-Categories=System;TerminalEmulator;
-Exec=/usr/bin/wezterm --config 'default_prog={"fish"}' start --class=org.wezfurlong.wezterm-nemo --domain=nemo
diff --git a/.local/share/applications/youtube-music.desktop b/.local/share/applications/youtube-music.desktop
deleted file mode 100644
index a6d0926..0000000
--- a/.local/share/applications/youtube-music.desktop
+++ /dev/null
@@ -1,9 +0,0 @@
-[Desktop Entry]
-Version=1.0
-Name=YouTube Music (provar)
-StartupWMClass=music.youtube.com
-Exec=/usr/bin/google-chrome-stable --user-data-dir=$HOME/.config/google-chrome --profile-directory='Profile 2' --app=https://music.youtube.com --class=music.youtube.com
-Terminal=false
-Icon=google-chrome
-Type=Application
-Categories=Audio;
diff --git a/.ssh/config b/.ssh/config
deleted file mode 100644
index 50a9bcc..0000000
--- a/.ssh/config
+++ /dev/null
@@ -1,35 +0,0 @@
-ServerAliveInterval 15
-ServerAliveCountMax 3
-ControlMaster auto
-ControlPath ${XDG_RUNTIME_DIR}/ssh_control:%h:%p:%r
-ControlPersist 1200
-Ciphers aes128-gcm@openssh.com,aes256-gcm@openssh.com,chacha20-poly1305@openssh.com,aes256-ctr,aes192-ctr,aes128-ctr
-
-AddressFamily inet
-PreferredAuthentications=publickey
-
-Include ~/.ssh/private_config
-
-Host 10.1.100.16
-Host dln-dev
-Host dev
-Hostname 10.1.100.16
- #Hostname aarn.shelman.io
- #Port 2022
-ForwardAgent yes
-ExitOnForwardFailure yes
-Compression no
-#RemoteForward ${XDG_RUNTIME_DIR}/opener.sock ${XDG_RUNTIME_DIR}/opener.dln-dev.sock
-
-Host nemo
-Hostname 10.1.100.20
-ForwardAgent yes
-ExitOnForwardFailure yes
-Compression no
-RemoteForward ${XDG_RUNTIME_DIR}/opener.sock ${XDG_RUNTIME_DIR}/opener.nemo.sock
-#LocalForward localhost:3000 localhost:3000
-LocalForward localhost:8000 localhost:8000
-LocalForward localhost:8080 localhost:8080
-
-Host *
-ForwardAgent no
diff --git a/.ssh/rc b/.ssh/rc
deleted file mode 100755
index eb38e90..0000000
--- a/.ssh/rc
+++ /dev/null
@@ -1,4 +0,0 @@
-if [[ -S "$SSH_AUTH_SOCK" && ! -h "$SSH_AUTH_SOCK" ]]; then
- mkdir -p "${XDG_RUNTIME_DIR}/gcr";
- ln -sf "$SSH_AUTH_SOCK" "${XDG_RUNTIME_DIR}/gcr/ssh";
-fi
diff --git a/.tmux.conf b/.tmux.conf
deleted file mode 100644
index 3ef1c7d..0000000
--- a/.tmux.conf
+++ /dev/null
@@ -1,96 +0,0 @@
-set -g prefix ^o
-
-set -g base-index 1
-set -g display-panes-time 3000
-set -s escape-time 10
-set -g status on
-set -g status-interval 30
-set -g focus-events on
-set -g allow-passthrough on
-setw -g alternate-screen on
-setw -g aggressive-resize on
-setw -g automatic-rename off
-setw -g mode-keys vi
-set-option -g mouse on
-
-# clipboard
-set -g set-clipboard on
-bind-key ] paste-buffer -p
-
-set-environment -g "SSH_AUTH_SOCK" "$XDG_RUNTIME_DIR/gcr/ssh"
-set -g update-environment "BUILD_COMMAND GOPACKAGESDRIVER SSH_AUTH_SOCK SSH_CONNECTION"
-#set -g default-command "$SHELL"
-set -g history-limit 10000
-#
-set -g default-terminal "wezterm"
-set -ga terminal-features '*:clipboard:ccolor:hyperlinks:osc7:overline:sixel:strikethrough:title:usstyle:RGB'
-set -ga terminal-overrides ',wezterm:cnorm=\E[?12h\E[?25h'
-
-# Key bindings
-bind -n M-Tab if-shell 'test #{window_panes} -gt 1' 'last-pane' 'last-window'
-bind -n M-h select-pane -L
-bind -n M-l select-pane -R
-bind -n M-Left select-pane -L
-bind -n M-Right select-pane -R
-# bind -n M-j select-pane -U
-# bind -n M-k select-pane -D
-bind -T copy-mode-vi M-k send-keys -X cursor-up \; send-keys -X previous-prompt -o \; send-keys -X cursor-up
-bind -T copy-mode-vi M-j send-keys -X cursor-down \; send-keys -X next-prompt -o \; send-keys -X cursor-up
-bind -n M-k copy-mode \; send-keys -X previous-prompt -o \; send-keys -X cursor-up
-bind -n M-j copy-mode \; send-keys -X previous-prompt -o \; send-keys -X cursor-up
-bind -n M-Up select-pane -U
-bind -n M-Down select-pane -D
-bind -n M-1 select-window -t 42
-bind -n M-2 select-window -t 2
-bind -n M-3 select-window -t 3
-bind -n M-4 select-window -t 4
-bind -n M-5 select-window -t 5
-bind -n M-6 select-window -t 6
-bind -n M-7 select-window -t 7
-bind -n M-8 select-window -t 8
-bind -n M-9 select-window -t 9
-bind -n M-0 select-window -t 10
-
-bind -n M-m send-keys -t 9 q C-u "clear; tmux clear-history -t 9" C-m C-p C-p C-p C-m
-bind C-o send-keys C-o
-bind r source-file ~/.tmux.conf
-bind -n C-Right next-window
-bind -n C-Left previous-window
-bind C-s set-option -g status
-bind K confirm kill-server
-bind C-k clear-history
-bind -n C-l send-keys C-l \; clear-history
-bind-key -T copy-mode-vi WheelUpPane select-pane \; send-keys -X -N 1 scroll-up
-bind-key -T copy-mode-vi WheelDownPane select-pane \; send-keys -X -N 1 scroll-down
-bind-key / copy-mode \; send-key ?
-bind-key P 'capture-pane' \; capture-pane -S - \; save-buffer /tmp/tmux \; delete-buffer
-bind-key -n C-\\ copy-mode \; send -X search-backward " % "\; send -X search-again
-
-setw -g window-status-format ""
-setw -g window-status-current-format ""
-setw -g window-status-separator ""
-set -g status-style "bg=#444444,fg=#dddddd,italics"
-set -g popup-border-style "fg=#77fecc"
-set -g pane-border-style "fg=#334455"
-set -g pane-active-border-style "fg=#334455"
-set -g status-position bottom
-set -g status-left-length 0
-set -g status-right-length 0
-set -g status-left '[#I] #{pane_current_path}'
-set -g status-right '%F | %R'
-set -g status off
-set -g set-titles on
-set -g set-titles-string "#H - #T"
-
-new -s0 -n 1
-new-window -n 2
-new-window -n 3
-new-window -n 4
-new-window -n 5
-new-window -n 6
-new-window -n 7
-new-window -n 8
-new-window -n 9
-new-window -n 0
-
-# vim:set ft=tmux:
diff --git a/.vault b/.vault
deleted file mode 100644
index 6f129db..0000000
--- a/.vault
+++ /dev/null
@@ -1,2 +0,0 @@
-#token_helper = "/home/dln/bin/vault-token-helper"
-
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..a989f47
--- /dev/null
+++ b/README.md
@@ -0,0 +1,3 @@
+# Home Manager
+
+IT in a box!
diff --git a/bin/git-st b/bin/git-st
deleted file mode 100755
index 764d628..0000000
--- a/bin/git-st
+++ /dev/null
@@ -1,36 +0,0 @@
-#!/usr/bin/env bash
-
-if git branchless query HEAD >/dev/null 2>&1; then
- printf '\n ● \e[1m'
- git branchless query HEAD
- printf '\e[2;38;5;242m%*s\e[0m\n' "${COLUMNS:-$(tput cols)}" '' | tr ' ' '-'
-fi
-
-awk -vOFS='' '
- NR==FNR {
- all[i++] = $0;
- difffiles[$1] = $0;
- next;
- }
- ! ($2 in difffiles) {
- print; next;
- }
- {
- gsub($2, difffiles[$2]);
- print;
- }
- END {
- if (NR != FNR) {
- # Had diff output
- exit;
- }
- # Had no diff output, just print lines from git status -sb
- for (i in all) {
- print all[i];
- }
- }
-' \
- <(git diff --color --stat=$(($(tput cols) - 3)) HEAD | sed '$d; s/^ //') \
- <(git -c color.status=always status -sb)
-
-printf '\n'
diff --git a/bin/git-wtf b/bin/git-wtf
deleted file mode 100755
index e407eae..0000000
--- a/bin/git-wtf
+++ /dev/null
@@ -1,364 +0,0 @@
-#!/usr/bin/env ruby
-
-HELP = <
-.git-wtfrc" and edit it. The config file is a YAML file that specifies the
-integration branches, any branches to ignore, and the max number of commits to
-display when --all-commits isn't used. git-wtf will look for a .git-wtfrc file
-starting in the current directory, and recursively up to the root.
-
-IMPORTANT NOTE: all local branches referenced in .git-wtfrc must be prefixed
-with heads/, e.g. "heads/master". Remote branches must be of the form
-remotes//.
-EOS
-
-COPYRIGHT = <.
-This program is free software: you can redistribute it and/or modify it
-under the terms of the GNU General Public License as published by the Free
-Software Foundation, either version 3 of the License, or (at your option)
-any later version.
-
-This program is distributed in the hope that it will be useful, but WITHOUT
-ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
-more details.
-
-You can find the GNU General Public License at: http://www.gnu.org/licenses/
-EOS
-
-require 'yaml'
-CONFIG_FN = ".git-wtfrc"
-
-class Numeric; def pluralize s; "#{to_s} #{s}" + (self != 1 ? "s" : "") end end
-
-if ARGV.delete("--help") || ARGV.delete("-h")
- puts USAGE
- exit
-end
-
-## poor man's trollop
-$long = ARGV.delete("--long") || ARGV.delete("-l")
-$short = ARGV.delete("--short") || ARGV.delete("-s")
-$all = ARGV.delete("--all") || ARGV.delete("-a")
-$all_commits = ARGV.delete("--all-commits") || ARGV.delete("-A")
-$dump_config = ARGV.delete("--dump-config")
-$key = ARGV.delete("--key") || ARGV.delete("-k")
-$show_relations = ARGV.delete("--relations") || ARGV.delete("-r")
-ARGV.each { |a| abort "Error: unknown argument #{a}." if a =~ /^--/ }
-
-## search up the path for a file
-def find_file fn
- while true
- return fn if File.exist? fn
- fn2 = File.join("..", fn)
- return nil if File.expand_path(fn2) == File.expand_path(fn)
- fn = fn2
- end
-end
-
-want_color = `git config color.wtf`
-want_color = `git config color.ui` if want_color.empty?
-$color = case want_color.chomp
- when "true"; true
- when "auto"; $stdout.tty?
-end
-
-def red s; $color ? "\033[31m#{s}\033[0m" : s end
-def green s; $color ? "\033[32m#{s}\033[0m" : s end
-def yellow s; $color ? "\033[33m#{s}\033[0m" : s end
-def cyan s; $color ? "\033[36m#{s}\033[0m" : s end
-def grey s; $color ? "\033[1;30m#{s}\033[0m" : s end
-def purple s; $color ? "\033[35m#{s}\033[0m" : s end
-
-## the set of commits in 'to' that aren't in 'from'.
-## if empty, 'to' has been merged into 'from'.
-def commits_between from, to
- if $long
- `git log --pretty=format:"- %s [#{yellow "%h"}] (#{purple "%ae"}; %ar)" #{from}..#{to}`
- else
- `git log --pretty=format:"- %s [#{yellow "%h"}]" #{from}..#{to}`
- end.split(/[\r\n]+/)
-end
-
-def show_commits commits, prefix=" "
- if commits.empty?
- puts "#{prefix} none"
- else
- max = $all_commits ? commits.size : $config["max_commits"]
- max -= 1 if max == commits.size - 1 # never show "and 1 more"
- commits[0 ... max].each { |c| puts "#{prefix}#{c}" }
- puts grey("#{prefix}... and #{commits.size - max} more (use -A to see all).") if commits.size > max
- end
-end
-
-def ahead_behind_string ahead, behind
- [ahead.empty? ? nil : "#{ahead.size.pluralize 'commit'} ahead",
- behind.empty? ? nil : "#{behind.size.pluralize 'commit'} behind"].
- compact.join("; ")
-end
-
-def widget merged_in, remote_only=false, local_only=false, local_only_merge=false
- left, right = case
- when remote_only; %w({ })
- when local_only; %w{( )}
- else %w([ ])
- end
- middle = case
- when merged_in && local_only_merge; green("~")
- when merged_in; green("x")
- else " "
- end
- print left, middle, right
-end
-
-def show b
- have_both = b[:local_branch] && b[:remote_branch]
-
- pushc, pullc, oosync = if have_both
- [x = commits_between(b[:remote_branch], b[:local_branch]),
- y = commits_between(b[:local_branch], b[:remote_branch]),
- !x.empty? && !y.empty?]
- end
-
- if b[:local_branch]
- puts "Local branch: " + green(b[:local_branch].sub(/^heads\//, ""))
-
- if have_both
- if pushc.empty?
- puts "#{widget true} in sync with remote"
- else
- action = oosync ? "push after rebase / merge" : "push"
- puts "#{widget false} NOT in sync with remote (you should #{action})"
- show_commits pushc unless $short
- end
- end
- end
-
- if b[:remote_branch]
- puts "Remote branch: #{cyan b[:remote_branch]} (#{b[:remote_url]})"
-
- if have_both
- if pullc.empty?
- puts "#{widget true} in sync with local"
- else
- action = pushc.empty? ? "merge" : "rebase / merge"
- puts "#{widget false} NOT in sync with local (you should #{action})"
- show_commits pullc unless $short
- end
- end
- end
-
- puts "\n#{red "WARNING"}: local and remote branches have diverged. A merge will occur unless you rebase." if oosync
-end
-
-def show_relations b, all_branches
- ibs, fbs = all_branches.partition { |name, br| $config["integration-branches"].include?(br[:local_branch]) || $config["integration-branches"].include?(br[:remote_branch]) }
- if $config["integration-branches"].include? b[:local_branch]
- puts "\nFeature branches:" unless fbs.empty?
- fbs.each do |name, br|
- next if $config["ignore"].member?(br[:local_branch]) || $config["ignore"].member?(br[:remote_branch])
- next if br[:ignore]
- local_only = br[:remote_branch].nil?
- remote_only = br[:local_branch].nil?
- name = if local_only
- purple br[:name]
- elsif remote_only
- cyan br[:name]
- else
- green br[:name]
- end
-
- ## for remote_only branches, we'll compute wrt the remote branch head. otherwise, we'll
- ## use the local branch head.
- head = remote_only ? br[:remote_branch] : br[:local_branch]
-
- remote_ahead = b[:remote_branch] ? commits_between(b[:remote_branch], head) : []
- local_ahead = b[:local_branch] ? commits_between(b[:local_branch], head) : []
-
- if local_ahead.empty? && remote_ahead.empty?
- puts "#{widget true, remote_only, local_only} #{name} #{local_only ? "(local-only) " : ""}is merged in"
- elsif local_ahead.empty?
- puts "#{widget true, remote_only, local_only, true} #{name} merged in (only locally)"
- else
- behind = commits_between head, (br[:local_branch] || br[:remote_branch])
- ahead = remote_only ? remote_ahead : local_ahead
- puts "#{widget false, remote_only, local_only} #{name} #{local_only ? "(local-only) " : ""}is NOT merged in (#{ahead_behind_string ahead, behind})"
- show_commits ahead unless $short
- end
- end
- else
- puts "\nIntegration branches:" unless ibs.empty? # unlikely
- ibs.sort_by { |v, br| v }.each do |v, br|
- next if $config["ignore"].member?(br[:local_branch]) || $config["ignore"].member?(br[:remote_branch])
- next if br[:ignore]
- local_only = br[:remote_branch].nil?
- remote_only = br[:local_branch].nil?
- name = remote_only ? cyan(br[:name]) : green(br[:name])
-
- ahead = commits_between v, (b[:local_branch] || b[:remote_branch])
- if ahead.empty?
- puts "#{widget true, local_only} merged into #{name}"
- else
- #behind = commits_between b[:local_branch], v
- puts "#{widget false, local_only} NOT merged into #{name} (#{ahead.size.pluralize 'commit'} ahead)"
- show_commits ahead unless $short
- end
- end
- end
-end
-
-#### EXECUTION STARTS HERE ####
-
-## find config file and load it
-$config = { "integration-branches" => %w(heads/master heads/next heads/edge), "ignore" => [], "max_commits" => 5 }.merge begin
- fn = find_file CONFIG_FN
- if fn && (h = YAML::load_file(fn)) # yaml turns empty files into false
- h["integration-branches"] ||= h["versions"] # support old nomenclature
- h
- else
- {}
- end
-end
-
-if $dump_config
- puts $config.to_yaml
- exit
-end
-
-## first, index registered remotes
-remotes = `git config --get-regexp ^remote\.\*\.url`.split(/[\r\n]+/).inject({}) do |hash, l|
- l =~ /^remote\.(.+?)\.url (.+)$/ or next hash
- hash[$1] ||= $2
- hash
-end
-
-## next, index followed branches
-branches = `git config --get-regexp ^branch\.`.split(/[\r\n]+/).inject({}) do |hash, l|
- case l
- when /branch\.(.*?)\.remote (.+)/
- name, remote = $1, $2
-
- hash[name] ||= {}
- hash[name].merge! :remote => remote, :remote_url => remotes[remote]
- when /branch\.(.*?)\.merge ((refs\/)?heads\/)?(.+)/
- name, remote_branch = $1, $4
- hash[name] ||= {}
- hash[name].merge! :remote_mergepoint => remote_branch
- end
- hash
-end
-
-## finally, index all branches
-remote_branches = {}
-`git show-ref`.split(/[\r\n]+/).each do |l|
- sha1, ref = l.chomp.split " refs/"
-
- if ref =~ /^heads\/(.+)$/ # local branch
- name = $1
- next if name == "HEAD"
- branches[name] ||= {}
- branches[name].merge! :name => name, :local_branch => ref
- elsif ref =~ /^remotes\/(.+?)\/(.+)$/ # remote branch
- remote, name = $1, $2
- remote_branches["#{remote}/#{name}"] = true
- next if name == "HEAD"
- ignore = !($all || remote == "origin")
-
- branch = name
- if branches[name] && branches[name][:remote] == remote
- # nothing
- else
- name = "#{remote}/#{branch}"
- end
-
- branches[name] ||= {}
- branches[name].merge! :name => name, :remote => remote, :remote_branch => "#{remote}/#{branch}", :remote_url => remotes[remote], :ignore => ignore
- end
-end
-
-## assemble remotes
-branches.each do |k, b|
- next unless b[:remote] && b[:remote_mergepoint]
- b[:remote_branch] = if b[:remote] == "."
- b[:remote_mergepoint]
- else
- t = "#{b[:remote]}/#{b[:remote_mergepoint]}"
- remote_branches[t] && t # only if it's still alive
- end
-end
-
-show_dirty = ARGV.empty?
-targets = if ARGV.empty?
- [`git symbolic-ref HEAD`.chomp.sub(/^refs\/heads\//, "")]
-else
- ARGV.map { |x| x.sub(/^heads\//, "") }
-end.map { |t| branches[t] or abort "Error: can't find branch #{t.inspect}." }
-
-targets.each do |t|
- show t
- show_relations t, branches if $show_relations || t[:remote_branch].nil?
-end
-
-modified = show_dirty && `git ls-files -m` != ""
-uncommitted = show_dirty && `git diff-index --cached HEAD` != ""
-
-if $key
- puts
- puts KEY
-end
-
-puts if modified || uncommitted
-puts "#{red "NOTE"}: working directory contains modified files." if modified
-puts "#{red "NOTE"}: staging area contains staged but uncommitted files." if uncommitted
-
-# the end!
diff --git a/bin/ktoolbox b/bin/ktoolbox
deleted file mode 120000
index fcc985d..0000000
--- a/bin/ktoolbox
+++ /dev/null
@@ -1 +0,0 @@
-/home/dln/src/github.com/dln/ktoolbox/ktoolbox
\ No newline at end of file
diff --git a/bin/pst b/bin/pst
deleted file mode 100755
index 3239f28..0000000
--- a/bin/pst
+++ /dev/null
@@ -1,15 +0,0 @@
-#!/bin/bash
-set -eo pipefail
-
-URL="https://paste.aarn.shelman.io"
-
-FILEPATH="$1"
-FILENAME=$(basename -- "$FILEPATH")
-EXTENSION="${FILENAME##*.}"
-
-RESPONSE=$(curl -s --data-binary "@${FILEPATH:-/dev/stdin}" --url $URL)
-PASTELINK="$URL$RESPONSE"
-
-[ -z "$EXTENSION" ] &&
- echo "$PASTELINK" ||
- echo "$PASTELINK.$EXTENSION"
diff --git a/bin/starship-sl-status b/bin/starship-sl-status
deleted file mode 100755
index 8a80026..0000000
--- a/bin/starship-sl-status
+++ /dev/null
@@ -1,26 +0,0 @@
-#!/usr/bin/env bash
-set -xfeuo pipefail
-
-state="${XDG_RUNTIME_DIR}/starship-sl-status"
-checkout="${state}.checkout"
-status="${state}.data"
-
-if [[ "$PWD" != $(readlink -f "$state")* ]]; then
- rm -f "$state"
- root="$(sl root 2>/dev/null || true)"
- ln -s "$root" "$state"
- if [[ -z "${root}" ]]; then
- echo >"${status}"
- echo >"${checkout}"
- exit 0
- fi
-fi
-
-saved_cid=$(cat "${checkout}" 2>/dev/null || true)
-root_cid=$(cat "${state}/.sl/checkoutidentifier" || true)
-if [[ ${root_cid} != "${saved_cid}" ]]; then
- echo "${root_cid}" >"${checkout}"
- sl log -r . -T '{if(github_pull_request_number, "#{github_pull_request_number} @ ", if(bookmarks, "{bookmarks} @ "))}{node|short}{if(remotenames, ":{remotenames}")}' >"${status}"
-fi
-
-cat "$status" || true
diff --git a/bin/tmux-build-helper b/bin/tmux-build-helper
deleted file mode 100755
index e27347c..0000000
--- a/bin/tmux-build-helper
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/usr/bin/env bash
-set -ef -o pipefail
-eval "$(direnv export bash)"
-eval "${BUILD_COMMAND:-echo 'BUILD_COMMAND not set'}" | bat --paging=always
diff --git a/bin/tmux-edit-helper b/bin/tmux-edit-helper
deleted file mode 120000
index cdf7994..0000000
--- a/bin/tmux-edit-helper
+++ /dev/null
@@ -1 +0,0 @@
-tmux-nvim-helper
\ No newline at end of file
diff --git a/bin/tmux-edit-history b/bin/tmux-edit-history
deleted file mode 100755
index 6631110..0000000
--- a/bin/tmux-edit-history
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/usr/bin/env bash
-set -eo pipefail
-_file=$(fre --store_name edit-history --sorted | exec fzf --no-sort --preview "bat {}" --preview-window=down,70%,wrap,border-top --color=bg+:16,fg+:49,pointer:49 --layout=reverse "--bind=alt-e:become(tmux-edit-helper)")
-[ -n "$_file" ] && exec tmux-edit-helper "$_file"
diff --git a/bin/tmux-hx-helper b/bin/tmux-hx-helper
deleted file mode 100755
index 633150e..0000000
--- a/bin/tmux-hx-helper
+++ /dev/null
@@ -1,44 +0,0 @@
-#!/usr/bin/env bash
-set -eo pipefail
-
-eval "$(direnv export bash 2>/dev/null)"
-
-PATH="$HOME/bin:$PATH"
-
-if [ -n "$1" ]; then
- _file=$(readlink -f "$@")
-else
- FZF=${FZF:-"fzf-tmux -p 90%,90% -y 0"}
- _root=$(git rev-parse --show-toplevel 2>/dev/null || pwd)
- _store=$(echo "$_root" | sha1sum | cut -d ' ' -f 1)
- _file=$( ( (fre --store_name "$_store" --sorted | xargs -n 100 ls -d 2>/dev/null || true) && fd --type f --hidden --follow --exclude .git --ignore-file "${_root}/.gitignore" . "$_root") | cat -n | sort -k2 -k1n | uniq -f1 | sort -nk1,1 | cut -f2- | sed -e "s#^${_root}/##" | $FZF --no-sort --preview "bat {}" --preview-window=bottom,70%,border-top --color=bg+:16,fg+:49,pointer:49 --layout=reverse "--bind=alt-e:become(tmux-edit-history)")
- _file="${_root}/${_file}"
- fre --store_name "$_store" --add "$_file"
-fi
-
-fre --store_name "edit-history" --add "$_file"
-
-tmux-shortcut 1 env \
- "AR=$AR" \
- "AS=$AS" \
- "BUILD_COMMAND=$BUILD_COMMAND" \
- "CC=$CC" \
- "CXX=$CXX" \
- "GOFLAGS=$GOFLAGS" \
- "GOPACKAGESDRIVER=$GOPACKAGESDRIVER" \
- "LC_ALL=$LC_ALL" \
- "LD=$LD" \
- "NM=$NM" \
- "NM=$NM" \
- "OBJCOPY=$OBJCOPY" \
- "OBJDUMP=$OBJDUMP" \
- "PATH=$PATH" \
- "RANLIB=$RANLIB" \
- "READELF=$READELF" \
- "RUST_SRC_PATH=$RUST_SRC_PATH" \
- "SIZE=$SIZE" \
- "STRIP=$STRIP" \
- helix "${_file}"
-sleep 0.1
-tmux send-keys Escape &&
- tmux send-keys ":open ${_file}" Enter ":reload" Enter
diff --git a/bin/tmux-nvim-helper b/bin/tmux-nvim-helper
deleted file mode 100755
index 68f1e9e..0000000
--- a/bin/tmux-nvim-helper
+++ /dev/null
@@ -1,46 +0,0 @@
-#!/usr/bin/env bash
-set -fe -o pipefail
-
-eval "$(direnv export bash 2>/dev/null)"
-
-PATH="$HOME/bin:$PATH"
-
-if [ -n "$1" ]; then
- _file=$(readlink -f "$@")
-else
- FZF=${FZF:-"fzf-tmux -p 90%,50% -y 0 --layout=reverse"}
- _root=$(git rev-parse --show-toplevel 2>/dev/null || jj workspace root 2>/dev/null || pwd)
- _store=$(echo "$_root" | sha1sum | cut -d ' ' -f 1)
- _file=$( ( (fre --store_name "$_store" --sorted | xargs -n 100 ls -d 2>/dev/null || true) && fd --type f --hidden --follow --exclude .git --exclude .jj --ignore-file "${_root}/.gitignore" . "$_root") | cat -n | sort -k2 -k1n | uniq -f1 | sort -nk1,1 | cut -f2- | sed -e "s#^${_root}/##" | $FZF --no-sort)
- _file="${_root}/${_file}"
- fre --store_name "$_store" --add "$_file"
-fi
-
-fre --store_name "edit-history" --add "$_file"
-
-_nvim_socket="$XDG_RUNTIME_DIR/nvim-persistent.sock"
-
-(tmux select-window -t nvim 2>/dev/null && tmux select-pane -t 0) && exec nvim --server "$_nvim_socket" --remote "$_file"
-
-# nvim is not running/listening on remote socket, so start it.
-tmux new-window -S -t 42 -n nvim \
- -e "AR=$AR" \
- -e "AS=$AS" \
- -e "BUILD_COMMAND=$BUILD_COMMAND" \
- -e "CC=$CC" \
- -e "CXX=$CXX" \
- -e "GOFLAGS=$GOFLAGS" \
- -e "GOPACKAGESDRIVER=$GOPACKAGESDRIVER" \
- -e "LC_ALL=$LC_ALL" \
- -e "LD=$LD" \
- -e "NM=$NM" \
- -e "NM=$NM" \
- -e "OBJCOPY=$OBJCOPY" \
- -e "OBJDUMP=$OBJDUMP" \
- -e "PATH=$PATH" \
- -e "RANLIB=$RANLIB" \
- -e "READELF=$READELF" \
- -e "RUST_SRC_PATH=$RUST_SRC_PATH" \
- -e "SIZE=$SIZE" \
- -e "STRIP=$STRIP" \
- nvim --listen "$_nvim_socket" "$_file"
diff --git a/bin/tmux-shortcut b/bin/tmux-shortcut
deleted file mode 100755
index 536ab54..0000000
--- a/bin/tmux-shortcut
+++ /dev/null
@@ -1,20 +0,0 @@
-#!/usr/bin/env bash
-set -eo pipefail
-
-nr="@app-${1}"
-shift
-
-pane="$(tmux show -vg ${nr} || true)"
-if [[ -n "${pane}" ]] && tmux has-session -t "${pane}" ; then
- if tmux list-panes -F "#{pane_id}" | grep "^${pane}\$" >>/dev/null ; then
- # Pane is on this window. Focus it and exit.
- exec tmux select-pane -t "${pane}"
- fi
-else
- # App pane does not exist, so create a new window.
- pane=$(tmux new-window -d -P -F '#{pane_id}' "$@")
- tmux set -g "${nr}" "${pane}"
-fi
-
-# Swap active pane for app
-tmux swap-pane -s "${pane}"
diff --git a/bin/tpm2-pkcs11-init-ssh.sh b/bin/tpm2-pkcs11-init-ssh.sh
deleted file mode 100755
index b66fb8d..0000000
--- a/bin/tpm2-pkcs11-init-ssh.sh
+++ /dev/null
@@ -1,24 +0,0 @@
-#!/bin/bash
-set -e
-
-store=$1
-if [ -z "$store" ]; then
- echo "Usage: $0 [store-name]"
- exit 1
-fi
-
-export TPM2_PKCS11_STORE=$HOME/.local/share/tpm2-pkcs11/${store}
-
-echo "=> Initializing store ${TPM2_PKCS11_STORE}"
-mkdir -p $TPM2_PKCS11_STORE
-tpm2_ptool init
-tpm2_ptool addtoken --pid=1 --label=ssh --sopin="$(systemd-ask-password SOPIN)" --userpin="$(systemd-ask-password USERPIN)"
-
-echo
-echo "=> Adding SSH key"
-tpm2_ptool addkey --label=ssh --algorithm=ecc256 --userpin="$(systemd-ask-password USERPIN)"
-
-echo
-echo "Store path: $TPM2_PKCS11_STORE"
-echo "SSH public key:"
-ssh-keygen -D /usr/lib/pkcs11/libtpm2_pkcs11.so 2>>/dev/null
diff --git a/bin/url-copy b/bin/url-copy
deleted file mode 100755
index 281715e..0000000
--- a/bin/url-copy
+++ /dev/null
@@ -1,2 +0,0 @@
-#!/bin/bash
-echo "$@" | xclip -selection clipboard
diff --git a/bin/vault-token-helper.sh b/bin/vault-token-helper.sh
deleted file mode 100755
index bac9855..0000000
--- a/bin/vault-token-helper.sh
+++ /dev/null
@@ -1,55 +0,0 @@
-#!/usr/bin/env bash
-
-# Vault Token helper for the Linux key retention service.
-#
-# Since version 2.6, the Linux kernel has included a efficiently store
-# authentication data on a per thread, per process, per user, or per session
-# bases.
-#
-# Linux Key Management Utilities (keyutils) provides `keyctl` to control
-# the facility from the shell.
-#
-# see https://www.kernel.org/doc/Documentation/security/keys/core.rst
-# see https://www.kernel.org/doc/Documentation/security/keys.txt
-# see https://lwn.net/Articles/210502/
-# see https://www.ibm.com/developerworks/library/l-key-retention/index.html
-#
-# Vault allows an external programs to be configured as a token helper
-# that can get, store, and erase tokens on behalf of the Vault client.
-#
-# see https://www.vaultproject.io/docs/commands/token-helper.html
-#
-# To use this script, make it executable and set your ~/.vault file to
-# contain:
-#
-# token_helper = "/path/to/vault-token-helper.sh"
-
-# Exit on error.
-set -o errexit
-# Exit on error inside any functions or subshells.
-set -o errtrace
-# Do not allow use of undefined vars.
-set -o nounset
-# Catch the error if any piped command fails.
-set -o pipefail
-
-desc=VAULT_TOKEN:${VAULT_ADDR}
-
-case $1 in
-get)
- # If the key is not set, keyctl returns "request_key: Required key not available"
- # on stderr and exits with a non-zero status. The implied
- key_id=$(keyctl request user ${desc} || echo '')
- [ -z ${key_id} ] && exit 0
- keyctl pipe ${key_id}
-;;
-store)
- # Vault sends the token on stdin but there is no linebreak, so EOF is reached
- # which causes read to return a non-zero status.
- read -r token || true
- echo -n ${token} | keyctl padd user ${desc} @u
-;;
-erase)
- keyctl purge user ${desc}
-;;
-esac
diff --git a/bin/wezterm-edit-helper b/bin/wezterm-edit-helper
deleted file mode 100755
index 7c93727..0000000
--- a/bin/wezterm-edit-helper
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/usr/bin/env bash
-set -fe -o pipefail
-
-eval "$(direnv export bash 2>/dev/null)"
-
-PATH="$HOME/bin:$PATH"
-
-if [ -n "$1" ]; then
- _file=$(readlink -f "$@")
-else
- FZF=${FZF:-"fzf-tmux -p 90%,50% -y 0 --layout=reverse"}
- _root=$(git rev-parse --show-toplevel 2>/dev/null || jj workspace root 2>/dev/null || pwd)
- _store=$(echo "$_root" | sha1sum | cut -d ' ' -f 1)
- _file=$( ( (fre --store_name "$_store" --sorted | xargs -n 100 ls -d 2>/dev/null || true) && fd --type f --hidden --follow --exclude .git --exclude .jj --ignore-file "${_root}/.gitignore" . "$_root") | cat -n | sort -k2 -k1n | uniq -f1 | sort -nk1,1 | cut -f2- | sed -e "s#^${_root}/##" | $FZF --no-sort)
- _file="${_root}/${_file}"
- fre --store_name "$_store" --add "$_file"
-fi
-
-fre --store_name "edit-history" --add "$_file"
-
-rm -f "$XDG_RUNTIME_DIR/nvim-persistent.sock"
-nvim --server "$XDG_RUNTIME_DIR/nvim-persistent.sock" --remote "$_file" &>/dev/null
-
-# Wezterm: switch tab to nvim
-printf "\033]1337;SetUserVar=%s=%s\007" nvim_activate $(date +%s | base64)
diff --git a/bin/xdg-open b/bin/xdg-open
deleted file mode 100755
index 801d576..0000000
--- a/bin/xdg-open
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/usr/bin/env sh
-set -e
-
-# Use local xdg-open if not in an ssh session
-[ -n "$SSH_TTY" ] || exec xdg-open "$@"
-
-if [ -p /dev/stdin ]; then
- exec nc -U "$XDG_RUNTIME_DIR/opener.sock" /dev/null
+ or return 1
+ # Wezterm: switch tab to nvim
+ printf "\033]1337;SetUserVar=nvim_activate=\007"
+ '';
+ };
+
+ __zoxide_zi_repaint.body = ''
+ __zoxide_zi
+ commandline -f repaint
+ '';
+
+ fish_jj_prompt.body = ''
+ # Is jj installed?
+ if not command -sq jj
+ return 1
+ end
+
+ # Are we in a jj repo?
+ if not jj root --quiet &>/dev/null
+ return 1
+ end
+
+ # Generate prompt
+ jj log --ignore-working-copy --no-graph --color always -r @ -T '
+ separate(
+ " ",
+ change_id.shortest(),
+ coalesce(
+ surround(
+ "\"",
+ "\"",
+ if(
+ description.first_line().substr(0, 24).starts_with(description.first_line()),
+ description.first_line().substr(0, 24),
+ description.first_line().substr(0, 23) ++ "…"
+ )
+ ),
+ "(no description set)"
+ ),
+ branches.join(", "),
+ commit_id.shortest(),
+ if(conflict, "(conflict)"),
+ if(empty, "(empty)"),
+ if(divergent, "(divergent)"),
+ if(hidden, "(hidden)"),
+ )
+ '
+ '';
+
+ fish_prompt.body = ''
+ echo
+ string join "" -- (set_color --italics) (prompt_hostname) ':' (prompt_pwd) (set_color green) ' ❯ ' (set_color normal)
+ '';
+
+ fish_right_prompt.body = ''
+ fish_jj_prompt || fish_vcs_prompt
+ '';
+
+ transient_prompt_func.body = ''
+ echo
+ string join "" -- (set_color green) '❯ ' (set_color normal)
+ '';
+
+ rg.body = ''
+ if status is-interactive
+ command rg -p $argv | bat
+ else
+ command rg $argv
+ end
+ '';
+ };
+
+ interactiveShellInit = lib.concatStringsSep "\n" [
+ (builtins.readFile ../files/config/fish/config.fish)
+ (builtins.readFile ../files/config/fish/semantic-prompt.fish)
+ (builtins.readFile ../files/config/fish/go-task.fish)
+ (builtins.readFile ../files/config/fish/jj.fish)
+ (builtins.readFile ../files/config/fish/vcs.fish)
+ ];
+
+ shellAbbrs = {
+ e = "edit";
+ l = "bat";
+ ls = "eza";
+ tree = "eza --tree";
+ top = "btm --basic --enable_cache_memory --enable_gpu_memory --battery";
+ ts = "TZ=Z date '+%Y%m%dT%H%M%SZ'";
+ w = "viddy -n1 $history[1]";
+ xc = "fish_clipboard_copy";
+ };
+ };
+}
diff --git a/common/gnome.nix b/common/gnome.nix
new file mode 100644
index 0000000..3aa5800
--- /dev/null
+++ b/common/gnome.nix
@@ -0,0 +1,194 @@
+{
+ config,
+ lib,
+ pkgs,
+ ...
+}:
+with lib.hm.gvariant;
+{
+ config = lib.mkIf config.shelman.desktop.enable {
+ home.packages = with pkgs; [
+ gnome-tweaks
+ gnome-pomodoro
+ gnomeExtensions.desktop-clock
+ gnomeExtensions.just-perfection
+ gnomeExtensions.vitals
+ ];
+
+ dconf.settings = {
+ "org/gnome/desktop/background" = {
+ color-shading-type = "solid";
+ picture-options = "zoom";
+ picture-uri = "file:///run/current-system/sw/share/backgrounds/gnome/vnc-l.png";
+ picture-uri-dark = "file:///run/current-system/sw/share/backgrounds/gnome/vnc-d.png";
+ primary-color = "#77767B";
+ secondary-color = "#000000";
+ };
+
+ "org/gnome/desktop/screensaver" = {
+ color-shading-type = "solid";
+ picture-options = "zoom";
+ picture-uri = "file:///run/current-system/sw/share/backgrounds/gnome/vnc-l.png";
+ primary-color = "#77767B";
+ secondary-color = "#000000";
+ };
+
+ "org/gnome/desktop/wm/keybindings" = {
+ close = [ "q" ];
+ toggle-on-all-workspaces = [ "s" ];
+ toggle-maximized = [ "m" ];
+ maximize-vertically = [ "Up" ];
+ minimize = [ "comma" ];
+ move-to-center = [ "c" ];
+ switch-applications = [ "Tab" ];
+ switch-windows = [ "Tab" ];
+ move-to-workspace-1 = [ "F1" ];
+ move-to-workspace-2 = [ "F2" ];
+ move-to-workspace-3 = [ "F3" ];
+ move-to-workspace-4 = [ "F4" ];
+ move-to-workspace-5 = [ "F5" ];
+ move-to-workspace-6 = [ "F6" ];
+ move-to-workspace-7 = [ "F7" ];
+ move-to-workspace-8 = [ "F8" ];
+ move-to-workspace-9 = [ "F9" ];
+ switch-to-workspace-1 = [ "F1" ];
+ switch-to-workspace-2 = [ "F2" ];
+ switch-to-workspace-3 = [ "F3" ];
+ switch-to-workspace-4 = [ "F4" ];
+ switch-to-workspace-5 = [ "F5" ];
+ switch-to-workspace-6 = [ "F6" ];
+ switch-to-workspace-7 = [ "F7" ];
+ switch-to-workspace-8 = [ "F8" ];
+ switch-to-workspace-9 = [ "F9" ];
+ };
+
+ "org/gnome/desktop/input-sources" = {
+ mru-sources = [
+ (mkTuple [
+ "xkb"
+ "us"
+ ])
+ ];
+ sources = [
+ (mkTuple [
+ "xkb"
+ "se+us"
+ ])
+ ];
+ xkb-options = [ "caps:ctrl_modifier" ];
+ };
+
+ "org/gnome/desktop/interface" = {
+ enable-animations = false;
+ enable-hot-corners = false;
+ show-battery-percentage = true;
+ font-antialiasing = "grayscale";
+ font-hinting = "slight";
+ font-name = "Inter Variable 11";
+ document-font-name = "Inter Variable 11";
+ monospace-font-name = "BerkeleyMono Nerd Font 11";
+ toolkit-accessibility = false;
+ };
+
+ "org/gnome/desktop/search-providers" = {
+ disabled = [
+ "org.gnome.Contacts.desktop"
+ "org.gnome.Nautilus.desktop"
+ "org.gnome.Calendar.desktop"
+ "org.gnome.clocks.desktop"
+ "org.gnome.Epiphany.desktop"
+ ];
+ sort-order = [
+ "org.gnome.Contacts.desktop"
+ "org.gnome.Documents.desktop"
+ "org.gnome.Nautilus.desktop"
+ "org.gnome.Settings.desktop"
+ "org.gnome.Calculator.desktop"
+ "org.gnome.Calendar.desktop"
+ "org.gnome.clocks.desktop"
+ "org.gnome.seahorse.Application.desktop"
+ "org.gnome.Weather.desktop"
+ "org.gnome.Characters.desktop"
+ ];
+ };
+
+ "org/gnome/desktop/wm/preferences" = {
+ focus-mode = "sloppy";
+ num-workspaces = 10;
+ resize-with-right-button = true;
+ };
+
+ "org/gnome/GWeather4" = {
+ temperature-unit = "centigrade";
+ };
+
+ "org/gnome/Weather" = {
+ locations = [
+ (mkVariant (mkTuple [
+ (mkUint32 2)
+ (mkVariant (mkTuple [
+ "Stockholm-Arlanda Airport"
+ "ESSA"
+ false
+ [
+ (mkTuple [
+ 1.0410888988146176
+ 0.31328660073298215
+ ])
+ ]
+ [
+ (mkTuple [
+ 1.0410888988146176
+ 0.31328660073298215
+ ])
+ ]
+ ]))
+ ]))
+ ];
+ };
+
+ "org/gnome/desktop/calendar" = {
+ show-weekdate = true;
+ };
+
+ "org/gnome/mutter" = {
+ center-new-windows = true;
+ edge-tiling = true;
+ };
+
+ "org/gnome/settings-daemon/plugins/color" = {
+ night-light-schedule-automatic = false;
+ night-light-schedule-from = 0.0;
+ night-light-schedule-to = 0.0;
+ night-light-temperature = mkUint32 3575;
+ };
+
+ "org/gnome/shell" = {
+ enabled-extensions = [
+ "just-perfection-desktop@just-perfection"
+ "Vitals@CoreCoding.com"
+ ];
+ };
+
+ "org/gnome/shell/extensions/just-perfection" = {
+ animation = 0;
+ notification-banner-position = 2;
+ osd-position = 6;
+ panel = false;
+ panel-in-overview = true;
+ startup-status = 0;
+ switcher-popup-delay = false;
+ top-panel-position = 0;
+ };
+
+ "org/gnome/shell/extensions/vitals" = {
+ update-time = 15;
+ };
+
+ "org/gnome/tweaks" = {
+ show-extensions-notice = false;
+ };
+
+ };
+ };
+}
diff --git a/common/k8s.nix b/common/k8s.nix
new file mode 100644
index 0000000..53820e9
--- /dev/null
+++ b/common/k8s.nix
@@ -0,0 +1,176 @@
+{ pkgs, ... }:
+{
+ home.packages = with pkgs; [
+ kail
+ kapp
+ krew
+ kubectl
+ kubectl-cnpg
+ kubectl-neat
+ kubectl-view-secret
+ kubectx
+ kubelogin-oidc
+ kubernetes-helm
+ kustomize
+ ];
+
+ programs.k9s = {
+ enable = true;
+ settings.k9s = {
+ liveViewAutoRefresh = false;
+ refreshRate = 2;
+ maxConnRetry = 5;
+ readOnly = false;
+ noExitOnCtrlC = false;
+ skipLatestRevCheck = false;
+ disablePodCounting = false;
+ imageScans.enable = false;
+ logger = {
+ tail = 100;
+ buffer = 5000;
+ sinceSeconds = -1;
+ textWrap = false;
+ showTime = false;
+ };
+ shellPod.image = "alpine:3";
+ thresholds = {
+ cpu = {
+ critical = 90;
+ warn = 70;
+ };
+ memory = {
+ critical = 90;
+ warn = 70;
+ };
+ };
+ ui = {
+ crumbsless = true;
+ defaultsToFullScreen = true;
+ enableMouse = false;
+ headless = true;
+ logoless = true;
+ noIcons = false;
+ reactive = false;
+ skin = "dieter";
+ };
+ };
+
+ views = {
+ views = {
+ "v1/pods" = {
+ columns = [
+ "NAME"
+ "PF"
+ "READY"
+ "STATUS"
+ "NODE"
+ "AGE"
+ "RESTARTS"
+ "IP"
+ "CPU"
+ "MEM"
+ "CPU/R:L"
+ "MEM/R:L"
+ "%CPU/R"
+ "%CPU/L"
+ "%MEM/R"
+ "%MEM/L"
+ ];
+ };
+ };
+ };
+
+ skins.dieter.k9s = {
+ body = {
+ fgColor = "default";
+ bgColor = "default";
+ logoColor = "default";
+ };
+ prompt = {
+ fgColor = "default";
+ bgColor = "default";
+ suggestColor = "default";
+ };
+ info = {
+ fgColor = "default";
+ sectionColor = "default";
+ };
+ dialog = {
+ fgColor = "default";
+ bgColor = "default";
+ buttonFgColor = "default";
+ buttonBgColor = "default";
+ buttonFocusFgColor = "white";
+ buttonFocusBgColor = "darkblue";
+ labelFgColor = "default";
+ fieldFgColor = "default";
+ };
+ frame = {
+ border = {
+ fgColor = "default";
+ focusColor = "default";
+ };
+ menu = {
+ fgColor = "default";
+ keyColor = "default";
+ numKeyColor = "default";
+ };
+ crumbs = {
+ fgColor = "default";
+ bgColor = "default";
+ activeColor = "default";
+ };
+ status = {
+ newColor = "default";
+ modifyColor = "default";
+ addColor = "default";
+ errorColor = "red";
+ highlightColor = "default";
+ killColor = "default";
+ completedColor = "default";
+ };
+ title = {
+ fgColor = "default";
+ bgColor = "default";
+ highlightColor = "default";
+ counterColor = "default";
+ filterColor = "default";
+ };
+ };
+ views = {
+ table = {
+ fgColor = "default";
+ bgColor = "default";
+ cursorFgColor = "teal";
+ cursorBgColor = "darkblue";
+ header = {
+ fgColor = "default";
+ bgColor = "default";
+ sorterColor = "blue";
+ };
+ };
+ xray = {
+ fgColor = "default";
+ bgColor = "default";
+ cursorColor = "blue";
+ graphicColor = "blue";
+ };
+ yaml = {
+ keyColor = "default";
+ colonColor = "default";
+ valueColor = "default";
+ };
+ logs = {
+ fgColor = "default";
+ bgColor = "default";
+ indicator = {
+ fgColor = "default";
+ bgColor = "default";
+ toggleOnColor = "default";
+ toggleOffColor = "default";
+ };
+ };
+ };
+ };
+ };
+}
diff --git a/common/nix.nix b/common/nix.nix
new file mode 100644
index 0000000..3b66fd3
--- /dev/null
+++ b/common/nix.nix
@@ -0,0 +1,15 @@
+{ outputs, ... }:
+{
+ nixpkgs = {
+ config.allowUnfree = true;
+ overlays = [
+ outputs.overlays.additions
+ outputs.overlays.modifications
+ outputs.overlays.unstable-packages
+ ];
+ };
+
+ programs.home-manager.enable = true;
+
+ systemd.user.startServices = "sd-switch";
+}
diff --git a/common/nvim.nix b/common/nvim.nix
new file mode 100644
index 0000000..83f255b
--- /dev/null
+++ b/common/nvim.nix
@@ -0,0 +1,19 @@
+{ ... }:
+{
+ programs.neovim = {
+ enable = true;
+ defaultEditor = true;
+ viAlias = true;
+ vimAlias = true;
+ withNodeJs = false;
+ withPython3 = false;
+ withRuby = false;
+ };
+
+ xdg.configFile = {
+ "nvim" = {
+ recursive = true;
+ source = ./../files/config/nvim;
+ };
+ };
+}
diff --git a/common/scripts.nix b/common/scripts.nix
new file mode 100644
index 0000000..4848c39
--- /dev/null
+++ b/common/scripts.nix
@@ -0,0 +1,17 @@
+{
+ config,
+ lib,
+ pkgs,
+ ...
+}:
+{
+ home.file = {
+ ".local/bin" = {
+ recursive = true;
+ source = ./../files/scripts;
+ };
+
+ };
+
+ home.sessionPath = [ "$HOME/.local/bin" ];
+}
diff --git a/common/ssh.nix b/common/ssh.nix
new file mode 100644
index 0000000..1f59463
--- /dev/null
+++ b/common/ssh.nix
@@ -0,0 +1,14 @@
+{ ... }:
+{
+ programs.ssh = {
+ enable = true;
+ addKeysToAgent = "yes";
+ compression = false;
+ controlMaster = "auto";
+ controlPath = "\${XDG_RUNTIME_DIR}/ssh_control:%h:%p:%r";
+ controlPersist = "15m";
+ extraConfig = ''
+ PreferredAuthentications publickey
+ '';
+ };
+}
diff --git a/common/utils.nix b/common/utils.nix
new file mode 100644
index 0000000..ef5f380
--- /dev/null
+++ b/common/utils.nix
@@ -0,0 +1,60 @@
+{ pkgs, ... }:
+{
+ home.packages = with pkgs; [
+ dust
+ jless
+ procs
+ viddy
+ ];
+
+ programs = {
+ bat = {
+ enable = true;
+ config = {
+ italic-text = "always";
+ paging = "auto";
+ style = "plain";
+ theme = "ansi";
+ };
+ };
+
+ bottom.enable = true;
+
+ direnv = {
+ enable = true;
+ nix-direnv.enable = true;
+ silent = false;
+ };
+
+ eza = {
+ enable = true;
+ enableFishIntegration = true;
+ };
+
+ fd.enable = true;
+
+ fzf = {
+ enable = true;
+ enableFishIntegration = true;
+ };
+
+ jq.enable = true;
+ less.enable = true;
+ lesspipe.enable = true;
+ tmux.enable = true;
+
+ ripgrep = {
+ enable = true;
+ arguments = [
+ "--glob=!.git/*"
+ "--glob=!.jj/*"
+ ];
+ };
+
+ zoxide = {
+ enable = true;
+ enableFishIntegration = true;
+ options = [ "--cmd=cd" ];
+ };
+ };
+}
diff --git a/common/vcs.nix b/common/vcs.nix
new file mode 100644
index 0000000..e63f1d3
--- /dev/null
+++ b/common/vcs.nix
@@ -0,0 +1,166 @@
+{ config, pkgs, ... }:
+{
+
+ home.packages = with pkgs; [
+ delta
+ diffedit3
+ difftastic
+ git-graph
+ git-town
+ lazyjj
+ tea
+ ];
+
+ programs.gh = {
+ enable = true;
+ };
+
+ programs.git = {
+ enable = true;
+
+ aliases = {
+ b = "branch -va";
+ cl = "clone --filter=blob:none";
+ co = "checkout";
+ d = "diff --stat -p -C --color-words";
+ ds = "diff --staged --stat -p -C --color-words";
+ g = "graph -S -m simple -s round";
+ guilt = "!f(){ git log --pretty='format:%an <%ae>' $@ | sort | uniq -c | sort -rn; }; f";
+ lla = "log --graph --all --topo-order --pretty='format:\t%x1B[0;3;36m%as %x1B[0;95;3m%<(12)%al %x1B[3;32m• %h%x1B[0;1;92m%d%x1B[0m %s'";
+ ll = "log --pretty='format:%x1B[0;3;36m%as %G? %x1B[0;95;3m%<(12,trunc)%al %x1B[3;32m• %h%x1B[0;1;92m%(decorate:prefix= [,suffix=]%n)%>|(35)%Creset %s'";
+ patch = "!git --no-pager diff --no-color";
+ pullr = "pull --rebase --autostash";
+ sh = "show --stat -p -C --color-words --show-signature";
+ st = "status -sb";
+ };
+
+ delta = {
+ enable = true;
+ options = {
+ file-added-label = "[+]";
+ file-decoration-style = "none";
+ file-modified-label = "[*]";
+ file-removed-label = "[-]";
+ file-renamed-label = "[>]";
+ file-style = "bold reverse";
+ file-transformation = "s/$/ ░▒▓/";
+ hunk-header-decoration-style = "none";
+ hunk-header-file-style = "bold";
+ hunk-header-line-number-style = "bold";
+ hunk-header-style = "bold";
+ hunk-label = "⯁";
+ hunk-label-style = "bold";
+ line-numbers = true;
+ max-line-distance = "0.9";
+ navigate = true;
+ };
+ };
+
+ extraConfig = {
+ apply.whitespace = "nowarn";
+ blame.date = "relative";
+ branch.main.rebase = true;
+ color = {
+ branch = "auto";
+ diff = "auto";
+ status = "auto";
+ ui = "auto";
+ };
+ column.ui = "auto";
+ core = {
+ compression = 3;
+ looseCompression = 3;
+ excludesfile = "~/.config/git/ignore";
+ };
+ fetch = {
+ prune = true;
+ prunetags = true;
+ showForcedUpdates = true;
+ };
+ gpg = {
+ format = "ssh";
+ ssh = {
+ allowedSignersFile = "${config.home.homeDirectory}/.ssh/authorized_keys";
+ defaultKeyCommand = "${config.home.homeDirectory}/.local/bin/git-signing-key";
+ };
+ };
+ init.defaultBranch = "main";
+ merge.conflictstyle = "zdiff3";
+ pack = {
+ compression = 3;
+ threads = 0;
+ };
+ pull.rebase = true;
+ push.default = "tracking";
+ rebase.autosquash = true;
+ rerere.enabled = true;
+ tag.sort = "-v:refname";
+ user.useConfigOnly = true;
+ };
+
+ ignores = [
+ "*~"
+ "*.a"
+ "*.class"
+ "*.iml"
+ "*.ipr"
+ "*.iwr"
+ "*.iws"
+ "*.la"
+ "*.o"
+ "*.pyc"
+ "*.so"
+ "*.swp"
+ ".direnv"
+ ".idea"
+ ".null-ls_*"
+ ];
+
+ signing = {
+ key = null;
+ signByDefault = true;
+ };
+ };
+
+ programs.gitui = {
+ enable = true;
+ keyConfig = ''
+ (
+ open_help: Some(( code: F(1), modifiers: "")),
+ move_left: Some(( code: Char('h'), modifiers: "")),
+ move_right: Some(( code: Char('l'), modifiers: "")),
+ move_up: Some(( code: Char('k'), modifiers: "")),
+ move_down: Some(( code: Char('j'), modifiers: "")),
+ popup_up: Some(( code: Char('p'), modifiers: "CONTROL")),
+ popup_down: Some(( code: Char('n'), modifiers: "CONTROL")),
+ page_up: Some(( code: Char('b'), modifiers: "CONTROL")),
+ page_down: Some(( code: Char('f'), modifiers: "CONTROL")),
+ home: Some(( code: Char('g'), modifiers: "")),
+ end: Some(( code: Char('G'), modifiers: "SHIFT")),
+ shift_up: Some(( code: Char('K'), modifiers: "SHIFT")),
+ shift_down: Some(( code: Char('J'), modifiers: "SHIFT")),
+ edit_file: Some(( code: Char('I'), modifiers: "SHIFT")),
+ status_reset_item: Some(( code: Char('U'), modifiers: "SHIFT")),
+ diff_reset_lines: Some(( code: Char('u'), modifiers: "")),
+ diff_stage_lines: Some(( code: Char('s'), modifiers: "")),
+ stashing_save: Some(( code: Char('w'), modifiers: "")),
+ stashing_toggle_index: Some(( code: Char('m'), modifiers: "")),
+ stash_open: Some(( code: Char('l'), modifiers: "")),
+ abort_merge: Some(( code: Char('M'), modifiers: "SHIFT")),
+ )
+ '';
+ theme = ''
+ (
+ selection_bg: Some(Black),
+ selection_fg: Some(Reset),
+ cmdbar_bg: Some(Reset),
+ cmdbar_extra_lines_bg: Some(Reset),
+ )
+ '';
+ };
+
+ programs.jujutsu = {
+ enable = true;
+ package = pkgs.jujutsu-openssh;
+ };
+}
diff --git a/common/web.nix b/common/web.nix
new file mode 100644
index 0000000..5062a94
--- /dev/null
+++ b/common/web.nix
@@ -0,0 +1,22 @@
+{
+ config,
+ lib,
+ pkgs,
+ ...
+}:
+{
+ config = lib.mkIf config.shelman.desktop.enable {
+
+ home.packages = with pkgs; [ tor-browser ];
+
+ programs.firefox = {
+ enable = true;
+ };
+
+ programs.chromium = {
+ enable = true;
+ package = pkgs.ungoogled-chromium;
+ };
+
+ };
+}
diff --git a/common/wezterm.nix b/common/wezterm.nix
new file mode 100644
index 0000000..6555bdb
--- /dev/null
+++ b/common/wezterm.nix
@@ -0,0 +1,11 @@
+{ config, lib, ... }:
+{
+ config = lib.mkIf config.shelman.desktop.enable {
+
+ programs.wezterm = {
+ enable = true;
+ extraConfig = builtins.readFile ./../files/config/wezterm/wezterm.lua;
+ };
+
+ };
+}
diff --git a/files/config/fish/config.fish b/files/config/fish/config.fish
new file mode 100644
index 0000000..dc30f48
--- /dev/null
+++ b/files/config/fish/config.fish
@@ -0,0 +1,59 @@
+# Bindings
+bind \cg __zoxide_zi_repaint
+bind \cJ forward-char
+bind \cn history-prefix-search-forward
+bind \cp history-prefix-search-backward
+
+# Settings
+set fish_greeting
+set fish_emoji_width 2
+
+# xdg-open support on ssh remotes
+if test -n SSH_TTY; and type -q wezterm-open-url
+ set -x DE generic
+ set -x BROWSER wezterm-open-url
+end
+
+# Colors
+set fish_color_command --bold
+set fish_color_comment --italics --dim
+set fish_color_autosuggestion --italics --bold red
+set fish_color_cancel
+set fish_color_command --bold
+set fish_color_comment --italics --dim
+set fish_color_cwd normal
+set fish_color_cwd_root normal
+set fish_color_end
+set fish_color_error
+set fish_color_escape
+set fish_color_gray 6c7086
+set fish_color_history_current
+set fish_color_host normal
+set fish_color_host_remote yellow
+set fish_color_keyword
+set fish_color_match
+set fish_color_normal normal
+set fish_color_operator
+set fish_color_option
+set fish_color_param normal
+set fish_color_quote --italics
+set fish_color_redirection
+set fish_color_search_match -r
+set fish_color_selection -r
+set fish_color_status normal
+set fish_color_string --italics
+set fish_color_user normal
+set fish_color_valid_path
+set fish_pager_color_background
+set fish_pager_color_completion normal
+set fish_pager_color_description --dim
+set fish_pager_color_prefix --underline
+set fish_pager_color_progress --dim
+set fish_pager_color_secondary_background
+set fish_pager_color_secondary_completion
+set fish_pager_color_secondary_description
+set fish_pager_color_secondary_prefix
+set fish_pager_color_selected_background -r
+set fish_pager_color_selected_completion
+set fish_pager_color_selected_description
+set fish_pager_color_selected_prefix
diff --git a/files/config/fish/go-task.fish b/files/config/fish/go-task.fish
new file mode 100644
index 0000000..6c7e2cf
--- /dev/null
+++ b/files/config/fish/go-task.fish
@@ -0,0 +1,37 @@
+set GO_TASK_PROGNAME task
+
+function __task_get_tasks --description "Prints all available tasks with their description"
+ # Read the list of tasks (and potential errors)
+ $GO_TASK_PROGNAME --list-all 2>&1 | read -lz rawOutput
+
+ # Return on non-zero exit code (for cases when there is no Taskfile found or etc.)
+ if test $status -ne 0
+ return
+ end
+
+ # Grab names and descriptions (if any) of the tasks
+ set -l output (echo $rawOutput | sed -e '1d; s/\* \(.*\):\s*\(.*\)\s*(aliases.*/\1\t\2/' -e 's/\* \(.*\):\s*\(.*\)/\1\t\2/'| string split0)
+ if test $output
+ echo $output
+ end
+end
+
+complete -c $GO_TASK_PROGNAME -d 'Runs the specified task(s). Falls back to the "default" task if no task name was specified, or lists all tasks if an unknown task name was
+ specified.' -xa "(__task_get_tasks)"
+
+complete -c $GO_TASK_PROGNAME -s c -l color -d 'colored output (default true)'
+complete -c $GO_TASK_PROGNAME -s d -l dir -d 'sets directory of execution'
+complete -c $GO_TASK_PROGNAME -l dry -d 'compiles and prints tasks in the order that they would be run, without executing them'
+complete -c $GO_TASK_PROGNAME -s f -l force -d 'forces execution even when the task is up-to-date'
+complete -c $GO_TASK_PROGNAME -s h -l help -d 'shows Task usage'
+complete -c $GO_TASK_PROGNAME -s i -l init -d 'creates a new Taskfile.yml in the current folder'
+complete -c $GO_TASK_PROGNAME -s l -l list -d 'lists tasks with description of current Taskfile'
+complete -c $GO_TASK_PROGNAME -s o -l output -d 'sets output style: [interleaved|group|prefixed]' -xa "interleaved group prefixed"
+complete -c $GO_TASK_PROGNAME -s p -l parallel -d 'executes tasks provided on command line in parallel'
+complete -c $GO_TASK_PROGNAME -s s -l silent -d 'disables echoing'
+complete -c $GO_TASK_PROGNAME -l status -d 'exits with non-zero exit code if any of the given tasks is not up-to-date'
+complete -c $GO_TASK_PROGNAME -l summary -d 'show summary about a task'
+complete -c $GO_TASK_PROGNAME -s t -l taskfile -d 'choose which Taskfile to run. Defaults to "Taskfile.yml"'
+complete -c $GO_TASK_PROGNAME -s v -l verbose -d 'enables verbose mode'
+complete -c $GO_TASK_PROGNAME -l version -d 'show Task version'
+complete -c $GO_TASK_PROGNAME -s w -l watch -d 'enables watch of the given task'
diff --git a/files/config/fish/jj.fish b/files/config/fish/jj.fish
new file mode 100644
index 0000000..78be3e2
--- /dev/null
+++ b/files/config/fish/jj.fish
@@ -0,0 +1,338 @@
+# TODO: passthru other args? E.g.. --at-operation, --repository
+function __jj
+ command jj --ignore-working-copy --color=never --quiet $argv 2>/dev/null
+end
+
+# Aliases
+# Based on https://github.com/fish-shell/fish-shell/blob/cd71359c42f633d9d71a63591ae16d150407a2b2/share/completions/git.fish#L625.
+#
+# Aliases are stored in global variables.
+# `__jj_aliases` is a list of all aliases and `__jj_alias_$alias` is the command line for the alias.
+function __jj_add_alias
+ set -l alias $argv[1]
+ set -l alias_escaped (string escape --style=var -- $alias)
+ set -g __jj_alias_$alias_escaped $argv
+ set --append -g __jj_aliases $alias
+end
+
+__jj config list aliases -T 'concat(name, "\t", value, "\n")' --include-defaults | while read -l config_alias
+ set -l parsed (string match --regex '^aliases\.(.+)\t(.*)$' --groups-only -- $config_alias)
+ set -l alias $parsed[1]
+ set -l command $parsed[2]
+ set -l args $alias
+ # Replace wrapping `[]` if any
+ set -l command (string replace -r --all '^\[|]$' "" -- $command)
+ while test (string length -- $command) -gt 0
+ set -l parsed (string match -r '^"((?:\\\"|[^"])*?)"(?:,\s)?(.*)$' --groups-only -- $command)
+ set --append args $parsed[1]
+ set command $parsed[2]
+ end
+ __jj_add_alias $args
+end
+
+__jj_add_alias ci commit
+__jj_add_alias desc describe
+__jj_add_alias op operation
+__jj_add_alias st status
+
+# Resolve aliases that call another alias.
+for alias in $__jj_aliases
+ set -l handled $alias
+
+ while true
+ set -l alias_escaped (string escape --style=var -- $alias)
+ set -l alias_varname __jj_alias_$alias_escaped
+ set -l aliased_command $$alias_varname[1][2]
+ set -l aliased_escaped (string escape --style=var -- $aliased_command)
+ set -l aliased_varname __jj_alias_$aliased_escaped
+ set -q $aliased_varname
+ or break
+
+ # Prevent infinite recursion
+ contains $aliased_escaped $handled
+ and break
+
+ # Expand alias in cmdline
+ set -l aliased_cmdline $$aliased_varname[1][2..-1]
+ set --append aliased_cmdline $$alias_varname[1][3..-1]
+ set -g $alias_varname $$alias_varname[1][1] $aliased_cmdline
+ set --append handled $aliased_escaped
+ end
+end
+
+function __jj_aliases_with_descriptions
+ for alias in $__jj_aliases
+ set -l alias_escaped (string escape --style=var -- $alias)
+ set -l alias_varname __jj_alias_$alias_escaped
+ set -l aliased_cmdline (string join " " -- $$alias_varname[1][2..-1] | string replace -r --all '\\\"' '"')
+ printf "%s\talias: %s\n" $alias $aliased_cmdline
+ end
+end
+
+# Based on https://github.com/fish-shell/fish-shell/blob/2d4e42ee93327b9cfd554a0d809f85e3d371e70e/share/functions/__fish_seen_subcommand_from.fish.
+# Test to see if we've seen a subcommand from a list.
+# This logic may seem backwards, but the commandline will often be much shorter than the list.
+function __jj_seen_subcommand_from
+ set -l cmd (commandline -opc)
+ set -e cmd[1]
+
+ # Check command line arguments first.
+ for i in $cmd
+ if contains -- $i $argv
+ return 0
+ end
+ end
+
+ # Check aliases.
+ set -l alias $cmd[1]
+ set -l alias_escaped (string escape --style=var -- $alias)
+ set -l varname __jj_alias_$alias_escaped
+ set -q $varname
+ or return 1
+
+ for i in $$varname[1][2..-1]
+ if contains -- $i $argv
+ return 0
+ end
+ end
+
+ return 1
+end
+
+function __jj_changes
+ __jj log --no-graph --limit 1000 -r $argv[1] \
+ -T 'separate("\t", change_id.shortest(), if(description, description.first_line(), "(no description set)")) ++ "\n"'
+end
+
+function __jj_branches
+ set -f filter $argv[1]
+ if string length --quiet -- $argv[2]
+ __jj branch list --all-remotes -r "$argv[2]" \
+ -T "if($filter, name ++ if(remote, \"@\" ++ remote) ++ \"\t\" ++ if(normal_target, normal_target.change_id().shortest() ++ \": \" ++ if(normal_target.description(), normal_target.description().first_line(), \"(no description set)\"), \"(conflicted branch)\") ++ \"\n\")"
+ else
+ __jj branch list --all-remotes \
+ -T "if($filter, name ++ if(remote, \"@\" ++ remote) ++ \"\t\" ++ if(normal_target, normal_target.change_id().shortest() ++ \": \" ++ if(normal_target.description(), normal_target.description().first_line(), \"(no description set)\"), \"(conflicted branch)\") ++ \"\n\")"
+ end
+end
+
+function __jj_all_branches
+ __jj_branches '!remote || !remote.starts_with("git")' $argv[1]
+end
+
+function __jj_local_branches
+ __jj_branches '!remote' ''
+end
+
+function __jj_remote_branches
+ __jj_branches 'remote && !remote.starts_with("git")' ''
+end
+
+function __jj_all_changes
+ if string length --quiet -- $argv[1]
+ set -f REV $argv[1]
+ else
+ set -f REV "all()"
+ end
+ __jj_changes $REV
+ __jj_all_branches $REV
+end
+
+function __jj_mutable_changes
+ set -f REV "mutable()"
+ __jj_changes $REV
+ __jj_all_branches $REV
+end
+
+function __jj_revision_modified_files
+ if test $argv[1] = "@"
+ set -f suffix ""
+ else
+ set -l change_id (__jj log --no-graph --limit 1 -T 'change_id.shortest()')
+ set -f suffix " in $change_id"
+ end
+
+ __jj diff -r $argv[1] --summary | while read -l line
+ set -l file (string split " " -m 1 -- $line)
+ switch $file[1]
+ case M
+ set -f change Modified
+ case D
+ set -f change Deleted
+ case A
+ set -f change Added
+ end
+ printf "%s\t%s%s\n" $file[2] $change $suffix
+ end
+end
+
+function __jj_remotes
+ __jj git remote list | while read -l remote
+ printf "%s\t%s\n" (string split " " -m 1 -- $remote)
+ end
+end
+
+function __jj_operations
+ __jj operation log --no-graph --limit 1000 -T 'separate("\t", id.short(), description) ++ "\n"'
+end
+
+function __jj_parse_revision
+ set -l cmd (commandline -opc)
+ set -e cmd[1]
+ set -l return_next false
+ set -l return_value 1
+
+ # Check aliases.
+ set -l alias $cmd[1]
+ set -l alias_escaped (string escape --style=var -- $alias)
+ set -l varname __jj_alias_$alias_escaped
+
+ if set -q $varname
+ set cmd $$varname[1][2..-1] $cmd[2..-1]
+ end
+
+ # Check command line arguments first.
+ for i in $cmd
+ if $return_next
+ echo $i
+ set return_value 0
+ else if contains -- $i -r --revision --from
+ set return_next true
+ else
+ set -l match (string match --regex '^(?:-r=?|--revision=|--from=)(.+)\s*$' --groups-only -- $i)
+ if set -q match[1]
+ echo $match[1]
+ set return_value 0
+ end
+ end
+ end
+
+ return $return_value
+end
+
+function __jj_revision_files
+ set -l description (__jj log --no-graph --limit 1 -r $argv[1] -T 'change_id.shortest() ++ ": " ++ coalesce(description.first_line().substr(0, 30), "(no description set)")')
+ __jj file list -r $argv[1] | while read -l file
+ printf "%s\t%s\n" $file $description
+ end
+end
+
+function __jj_revision_conflicted_files
+ __jj resolve --list -r $argv[1] | while read -l line
+ set -l file (string split " " -m 1 -- $line)
+ printf "%s\t%s\n" $file[1] $file[2]
+ end
+end
+
+function __jj_parse_revision_files
+ set -l rev (__jj_parse_revision)
+ if test $status -eq 1
+ set rev "@"
+ end
+ __jj_revision_files $rev
+end
+
+function __jj_parse_revision_conflicted_files
+ set -l rev (__jj_parse_revision)
+ if test $status -eq 1
+ set rev "@"
+ end
+ __jj_revision_conflicted_files $rev
+end
+
+function __jj_parse_revision_files_or_wc_modified_files
+ set -l revs (__jj_parse_revision)
+ if test $status -eq 1
+ __jj_revision_modified_files "@"
+ else
+ for rev in $revs
+ __jj_revision_files $rev
+ end
+ end
+end
+
+function __jj_parse_revision_modified_files_or_wc_modified_files
+ set -l revs (__jj_parse_revision)
+ if test $status -eq 1
+ __jj_revision_modified_files "@"
+ else
+ for rev in $revs
+ __jj_revision_modified_files $rev
+ end
+ end
+end
+
+# Aliases.
+complete -f -c jj -n __fish_use_subcommand -a '(__jj_aliases_with_descriptions)'
+
+# Files.
+complete -f -c jj -n '__jj_seen_subcommand_from file; and __jj_seen_subcommand_from show' -ka '(__jj_parse_revision_files)'
+complete -f -c jj -n '__jj_seen_subcommand_from file; and __jj_seen_subcommand_from chmod' -ka '(__jj_parse_revision_files)'
+complete -f -c jj -n '__jj_seen_subcommand_from commit' -ka '(__jj_revision_modified_files "@")'
+complete -c jj -n '__jj_seen_subcommand_from diff' -ka '(__jj_parse_revision_files_or_wc_modified_files)'
+complete -c jj -n '__jj_seen_subcommand_from interdiff' -ka '(__jj_parse_revision_files)'
+complete -f -c jj -n '__jj_seen_subcommand_from resolve' -ka '(__jj_parse_revision_conflicted_files)'
+complete -f -c jj -n '__jj_seen_subcommand_from restore' -ka '(__jj_parse_revision_files_or_wc_modified_files)'
+complete -f -c jj -n '__jj_seen_subcommand_from split' -ka '(__jj_parse_revision_modified_files_or_wc_modified_files)'
+complete -f -c jj -n '__jj_seen_subcommand_from squash' -ka '(__jj_parse_revision_modified_files_or_wc_modified_files)'
+complete -f -c jj -n '__jj_seen_subcommand_from untrack' -ka '(__jj_parse_revision_files_or_wc_modified_files)'
+
+# Revisions.
+complete -f -c jj -n '__jj_seen_subcommand_from abandon' -ka '(__jj_mutable_changes)'
+complete -f -c jj -n '__jj_seen_subcommand_from backout' -s r -l revision -rka '(__jj_all_changes)'
+complete -f -c jj -n '__jj_seen_subcommand_from backout' -s d -l destination -rka '(__jj_all_changes)'
+complete -f -c jj -n '__jj_seen_subcommand_from file; and __jj_seen_subcommand_from show' -s r -l revision -rka '(__jj_all_changes)'
+complete -f -c jj -n '__jj_seen_subcommand_from chmod' -s r -l revision -rka '(__jj_mutable_changes)'
+complete -f -c jj -n '__jj_seen_subcommand_from describe' -ka '(__jj_mutable_changes)'
+complete -f -c jj -n '__jj_seen_subcommand_from diff' -s r -l revision -rka '(__jj_all_changes)'
+complete -f -c jj -n '__jj_seen_subcommand_from diff' -l from -rka '(__jj_all_changes)'
+complete -f -c jj -n '__jj_seen_subcommand_from diff' -l to -rka '(__jj_all_changes)'
+complete -f -c jj -n '__jj_seen_subcommand_from diffedit' -s r -l revision -rka '(__jj_mutable_changes)'
+complete -f -c jj -n '__jj_seen_subcommand_from diffedit' -l from -rka '(__jj_all_changes)'
+complete -f -c jj -n '__jj_seen_subcommand_from diffedit' -l to -rka '(__jj_mutable_changes)'
+complete -f -c jj -n '__jj_seen_subcommand_from duplicate' -ka '(__jj_all_changes)'
+complete -f -c jj -n '__jj_seen_subcommand_from edit' -ka '(__jj_mutable_changes)'
+complete -f -c jj -n '__jj_seen_subcommand_from file; and __jj_seen_subcommand_from list' -s r -l revision -rka '(__jj_all_changes)'
+complete -f -c jj -n '__jj_seen_subcommand_from interdiff' -l from -rka '(__jj_all_changes)'
+complete -f -c jj -n '__jj_seen_subcommand_from interdiff' -l to -rka '(__jj_all_changes)'
+complete -f -c jj -n '__jj_seen_subcommand_from log' -s r -rka '(__jj_all_changes)'
+complete -f -c jj -n '__jj_seen_subcommand_from new' -ka '(__jj_all_changes)'
+complete -f -c jj -n '__jj_seen_subcommand_from new' -s A -l after -l insert-after -rka '(__jj_all_changes)'
+complete -f -c jj -n '__jj_seen_subcommand_from new' -s B -l before -l insert-before -rka '(__jj_mutable_changes)'
+complete -f -c jj -n '__jj_seen_subcommand_from obslog' -s r -l revision -rka '(__jj_all_changes)'
+complete -f -c jj -n '__jj_seen_subcommand_from parallelize' -ka '(__jj_mutable_changes)'
+complete -f -c jj -n '__jj_seen_subcommand_from rebase' -s r -l revisions -rka '(__jj_mutable_changes)'
+complete -f -c jj -n '__jj_seen_subcommand_from rebase' -s s -l source -rka '(__jj_mutable_changes)'
+complete -f -c jj -n '__jj_seen_subcommand_from rebase' -s b -l branch -rka '(__jj_mutable_changes)'
+complete -f -c jj -n '__jj_seen_subcommand_from rebase' -s d -l destination -rka '(__jj_all_changes)'
+complete -f -c jj -n '__jj_seen_subcommand_from rebase' -s A -l after -l insert-after -rka '(__jj_all_changes)'
+complete -f -c jj -n '__jj_seen_subcommand_from rebase' -s B -l before -l insert-before -rka '(__jj_mutable_changes)'
+complete -f -c jj -n '__jj_seen_subcommand_from resolve' -s r -l revision -rka '(__jj_mutable_changes)'
+complete -f -c jj -n '__jj_seen_subcommand_from restore' -l from -rka '(__jj_all_changes)'
+complete -f -c jj -n '__jj_seen_subcommand_from restore' -l to -rka '(__jj_mutable_changes)'
+complete -f -c jj -n '__jj_seen_subcommand_from restore' -s c -l changes-in -rka '(__jj_all_changes)'
+complete -f -c jj -n '__jj_seen_subcommand_from show' -ka '(__jj_all_changes)'
+complete -f -c jj -n '__jj_seen_subcommand_from split' -s r -l revision -rka '(__jj_mutable_changes)'
+complete -f -c jj -n '__jj_seen_subcommand_from squash' -s r -l revision -rka '(__jj_mutable_changes)'
+complete -f -c jj -n '__jj_seen_subcommand_from squash' -l from -rka '(__jj_mutable_changes)'
+complete -f -c jj -n '__jj_seen_subcommand_from squash' -l to -l into -rka '(__jj_mutable_changes)'
+complete -f -c jj -n '__jj_seen_subcommand_from unsquash' -s r -l revision -rka '(__jj_mutable_changes)'
+
+# Branches.
+complete -f -c jj -n '__jj_seen_subcommand_from branch; and __jj_seen_subcommand_from delete forget rename set d f r s' -ka '(__jj_local_branches)'
+complete -f -c jj -n '__jj_seen_subcommand_from branch; and __jj_seen_subcommand_from track t' -ka '(__jj_branches "remote && !tracked" "")'
+complete -f -c jj -n '__jj_seen_subcommand_from branch; and __jj_seen_subcommand_from untrack' -ka '(__jj_branches "remote && tracked && !remote.starts_with(\"git\")" "")'
+complete -f -c jj -n '__jj_seen_subcommand_from branch; and __jj_seen_subcommand_from create move set c m s' -s r -l revision -kra '(__jj_all_changes)'
+complete -f -c jj -n '__jj_seen_subcommand_from branch; and __jj_seen_subcommand_from move' -l from -rka '(__jj_changes "all()")'
+complete -f -c jj -n '__jj_seen_subcommand_from branch; and __jj_seen_subcommand_from move' -l to -rka '(__jj_changes "all()")'
+
+# Git.
+complete -f -c jj -n '__jj_seen_subcommand_from git; and __jj_seen_subcommand_from push' -s c -l change -kra '(__jj_changes "all()")'
+complete -f -c jj -n '__jj_seen_subcommand_from git; and __jj_seen_subcommand_from push' -s r -l revisions -kra '(__jj_changes "all()")'
+complete -f -c jj -n '__jj_seen_subcommand_from git; and __jj_seen_subcommand_from fetch push' -s b -l branch -rka '(__jj_local_branches)'
+complete -f -c jj -n '__jj_seen_subcommand_from git; and __jj_seen_subcommand_from fetch push' -l remote -rka '(__jj_remotes)'
+complete -f -c jj -n '__jj_seen_subcommand_from git; and __jj_seen_subcommand_from remote; and __jj_seen_subcommand_from remove rename set-url' -ka '(__jj_remotes)'
+
+# Operations.
+complete -f -c jj -l at-op -l at-operation -rka '(__jj_operations)'
+complete -f -c jj -n '__jj_seen_subcommand_from undo' -ka '(__jj_operations)'
+complete -f -c jj -n '__jj_seen_subcommand_from operation; and __jj_seen_subcommand_from abandon undo restore' -ka '(__jj_operations)'
diff --git a/files/config/fish/semantic-prompt.fish b/files/config/fish/semantic-prompt.fish
new file mode 100644
index 0000000..2656f40
--- /dev/null
+++ b/files/config/fish/semantic-prompt.fish
@@ -0,0 +1,55 @@
+## Semantic prompt (for Wezterm)
+
+set _fishprompt_aid "fish"$fish_pid
+set _fishprompt_started 0
+# empty if running; or a numeric exit code; or CANCEL
+set _fishprompt_postexec ""
+
+functions -c fish_prompt _fishprompt_saved_prompt
+set _fishprompt_prompt_count 0
+set _fishprompt_disp_count 0
+function _fishprompt_start --on-event fish_prompt
+ set _fishprompt_prompt_count (math $_fishprompt_prompt_count + 1)
+ # don't use post-exec, because it is called *before* omitted-newline output
+ if [ -n "$_fishprompt_postexec" ]
+ printf "\033]133;D;%s;aid=%s\007" "$_fishprompt_postexec" $_fishprompt_aid
+ end
+ printf "\033]133;A;aid=%s;cl=m\007" $_fishprompt_aid
+end
+
+function fish_prompt
+ set _fishprompt_disp_count (math $_fishprompt_disp_count + 1)
+ printf "\033]133;P;k=i\007%b\033]133;B\007" (string join "\n" (_fishprompt_saved_prompt))
+ set _fishprompt_started 1
+ set _fishprompt_postexec ""
+end
+
+function _fishprompt_preexec --on-event fish_preexec
+ if [ "$_fishprompt_started" = 1 ]
+ printf "\033]133;C;\007"
+ end
+ set _fishprompt_started 0
+end
+
+function _fishprompt_postexec --on-event fish_postexec
+ set _fishprompt_postexec $status
+ _fishprompt_start
+end
+
+function __fishprompt_cancel --on-event fish_cancel
+ set _fishprompt_postexec CANCEL
+ _fishprompt_start
+end
+
+function _fishprompt_exit --on-process %self
+ if [ "$_fishprompt_started" = 1 ]
+ printf "\033]133;Z;aid=%s\007" $_fishprompt_aid
+ end
+end
+
+if functions -q fish_right_prompt
+ functions -c fish_right_prompt _fishprompt_saved_right_prompt
+ function fish_right_prompt
+ printf "\033]133;P;k=r\007%b\033]133;B\007" (string join "\n" (_fishprompt_saved_right_prompt))
+ end
+end
diff --git a/files/config/fish/vcs.fish b/files/config/fish/vcs.fish
new file mode 100644
index 0000000..d86672a
--- /dev/null
+++ b/files/config/fish/vcs.fish
@@ -0,0 +1,72 @@
+
+function __jj_in_repo
+ jj --ignore-working-copy --quiet root >>/dev/null 2>&1
+end
+
+function vcs_root
+ jj workspace root --ignore-working-copy 2>/dev/null || git rev-parse --show-toplevel 2>/dev/null || pwd
+end
+
+function vcs_broot
+ br (vcs_root)
+ commandline -f repaint
+end
+
+function vcs_jump
+ set _dir (vcs_root)
+ if [ "$_dir" = "$PWD" ]
+ set _dir (br -f --conf "$HOME/.config/broot/conf.toml")
+ end
+ [ -n "$_dir" ] && pushd $_dir >>/dev/null
+ commandline -f repaint
+end
+
+function vcs_status
+ if __jj_in_repo
+ jj status --ignore-working-copy
+ else
+ git status -sb
+ end
+ commandline -f repaint
+end
+
+function vcs_diff
+ if __jj_in_repo
+ jj show $argv
+ else
+ git diff --stat -p -C --color-words $argv
+ end
+ commandline -f repaint
+end
+
+
+function vcs_log
+ if __jj_in_repo
+ jj log --ignore-working-copy $argv
+ else
+ git diff --stat -p -C --color-words $argv
+ end
+ commandline -f repaint
+end
+
+function vcs_ui
+ if __jj_in_repo
+ lazyjj
+ else
+ gitui
+ end
+ commandline -f repaint
+end
+
+# Abbreviations
+
+abbr -a d vcs_diff
+abbr -a s vcs_status
+
+# Bindings
+bind \c_ vcs_jump
+bind \ea vcs_log
+bind \ee vcs_broot
+bind \eg vcs_ui
+bind \eS vcs_diff
+bind \es vcs_status
diff --git a/.config/nvim/init.lua b/files/config/nvim/init.lua
similarity index 100%
rename from .config/nvim/init.lua
rename to files/config/nvim/init.lua
diff --git a/.config/nvim/lua/config/autocmds.lua b/files/config/nvim/lua/config/autocmds.lua
similarity index 100%
rename from .config/nvim/lua/config/autocmds.lua
rename to files/config/nvim/lua/config/autocmds.lua
diff --git a/.config/nvim/lua/config/keymaps.lua b/files/config/nvim/lua/config/keymaps.lua
similarity index 100%
rename from .config/nvim/lua/config/keymaps.lua
rename to files/config/nvim/lua/config/keymaps.lua
diff --git a/.config/nvim/lua/config/lazy.lua b/files/config/nvim/lua/config/lazy.lua
similarity index 57%
rename from .config/nvim/lua/config/lazy.lua
rename to files/config/nvim/lua/config/lazy.lua
index d5db9cc..7d70096 100644
--- a/.config/nvim/lua/config/lazy.lua
+++ b/files/config/nvim/lua/config/lazy.lua
@@ -10,8 +10,26 @@ require("lazy").setup({
spec = {
-- add LazyVim and import its plugins
{ "LazyVim/LazyVim", import = "lazyvim.plugins" },
- -- import any extras modules here
- -- import/override with your plugins
+ -- extras
+ { import = "lazyvim.plugins.extras.dap.core" },
+ { import = "lazyvim.plugins.extras.editor.overseer" },
+ { import = "lazyvim.plugins.extras.editor.telescope" },
+ { import = "lazyvim.plugins.extras.formatting.prettier" },
+ { import = "lazyvim.plugins.extras.lang.go" },
+ { import = "lazyvim.plugins.extras.lang.json" },
+ { import = "lazyvim.plugins.extras.lang.markdown" },
+ { import = "lazyvim.plugins.extras.lang.nix" },
+ { import = "lazyvim.plugins.extras.lang.rust" },
+ { import = "lazyvim.plugins.extras.lang.toml" },
+ { import = "lazyvim.plugins.extras.lang.typescript" },
+ { import = "lazyvim.plugins.extras.lang.yaml" },
+ { import = "lazyvim.plugins.extras.lsp.none-ls" },
+ { import = "lazyvim.plugins.extras.test.core" },
+ { import = "lazyvim.plugins.extras.ui.edgy" },
+ { import = "lazyvim.plugins.extras.ui.treesitter-context" },
+ { import = "lazyvim.plugins.extras.util.gitui" },
+ { import = "lazyvim.plugins.extras.util.project" },
+ -- plugins
{ import = "plugins" },
},
defaults = {
@@ -23,14 +41,6 @@ require("lazy").setup({
version = false, -- always use the latest git commit
-- version = "*", -- try installing the latest stable version for plugins that support semver
},
- icons = {
- overseer = {
- Canceled = " ",
- Failure = " ",
- Success = " ",
- Running = " ",
- },
- },
checker = { enabled = false }, -- automatically check for plugin updates
performance = {
rtp = {
diff --git a/.config/nvim/lua/config/options.lua b/files/config/nvim/lua/config/options.lua
similarity index 60%
rename from .config/nvim/lua/config/options.lua
rename to files/config/nvim/lua/config/options.lua
index 7b694a6..75e6b54 100644
--- a/.config/nvim/lua/config/options.lua
+++ b/files/config/nvim/lua/config/options.lua
@@ -1,27 +1,5 @@
--- Options are automatically loaded before lazy.nvim startup
--- Default options that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/options.lua
--- Add any additional options here
-
vim.opt.number = true
vim.opt.relativenumber = false
--- vim.opt.clipboard = ""
-function no_paste(reg)
- return function(lines)
- -- Do nothing! We can't paste with OSC52
- end
-end
-
-vim.g.clipboard = {
- name = "OSC 52",
- copy = {
- ["+"] = require("vim.ui.clipboard.osc52").copy("+"),
- ["*"] = require("vim.ui.clipboard.osc52").copy("*"),
- },
- paste = {
- ["+"] = no_paste("+"), -- Pasting disabled
- ["*"] = no_paste("*"), -- Pasting disabled
- },
-}
vim.g.do_filetype_lua = 1
vim.g.root_spec = { { ".git", "lua" }, "lsp", "cwd" }
diff --git a/.config/nvim/lua/plugins/coding.lua b/files/config/nvim/lua/plugins/coding.lua
similarity index 100%
rename from .config/nvim/lua/plugins/coding.lua
rename to files/config/nvim/lua/plugins/coding.lua
diff --git a/.config/nvim/lua/plugins/colorscheme.lua b/files/config/nvim/lua/plugins/colorscheme.lua
similarity index 52%
rename from .config/nvim/lua/plugins/colorscheme.lua
rename to files/config/nvim/lua/plugins/colorscheme.lua
index 59cf784..b2967b9 100644
--- a/.config/nvim/lua/plugins/colorscheme.lua
+++ b/files/config/nvim/lua/plugins/colorscheme.lua
@@ -1,8 +1,6 @@
return {
{
- "shelmangroup/dieter.nvim",
- dir = "/home/dln/src/git.shelman.io/shelmangroup/dieter.nvim",
- version = false,
+ "https://git.shelman.io/shelmangroup/dieter.nvim.git",
lazy = false,
priority = 1000,
},
diff --git a/files/config/nvim/lua/plugins/editor.lua b/files/config/nvim/lua/plugins/editor.lua
new file mode 100644
index 0000000..e237117
--- /dev/null
+++ b/files/config/nvim/lua/plugins/editor.lua
@@ -0,0 +1,95 @@
+return {
+ {
+ "folke/flash.nvim",
+ enabled = false,
+ },
+
+ {
+ "telescope.nvim",
+ keys = {
+ {
+ "",
+ function()
+ local telescope = require("telescope")
+ local jj_pick_status, jj_res = pcall(telescope.extensions.jj.files, opts)
+ if jj_pick_status then
+ return
+ end
+ local git_files_status, git_res = pcall(telescope.builtin.git_files, opts)
+ if not git_files_status then
+ error("Could not launch jj/git files: \n" .. jj_res .. "\n" .. git_res)
+ end
+ end,
+ desc = "VCS Files",
+ },
+ },
+ opts = function(_, opts)
+ local actions = require("telescope.actions")
+ opts.defaults = {
+ layout_strategy = "horizontal",
+ layout_config = {
+ anchor = "top",
+ horizontal = {
+ prompt_position = "top",
+ mirror = false,
+ preview_width = 0.49,
+ -- preview_height = 0.5,
+ },
+ width = 0.99,
+ height = 0.9,
+ preview_cutoff = 10,
+ },
+ mappings = {
+ i = {
+ [""] = actions.close, -- close popup
+ [""] = false, -- clear prompt
+ [""] = false, -- clear prompt
+ },
+ },
+ path_display = { "filename_first" },
+ -- previewer = false,
+ preview = {
+ -- hide_on_startup = true,
+ },
+ sorting_strategy = "ascending",
+ winblend = 0,
+ wrap_results = true,
+ }
+ end,
+ },
+
+ { "avm99963/vim-jjdescription", lazy = false },
+
+ {
+ "zschreur/telescope-jj.nvim",
+ keys = {
+ {
+ "jc",
+ function()
+ require("telescope").extensions.jj.conflicts()
+ end,
+ desc = "jj conflicts",
+ },
+ {
+ "jd",
+ function()
+ require("telescope").extensions.jj.diff()
+ end,
+ desc = "jj diffs",
+ },
+ {
+ "jf",
+ function()
+ require("telescope").extensions.jj.files()
+ end,
+ desc = "jj files",
+ },
+ },
+ config = function()
+ LazyVim.on_load("telescope.nvim", function()
+ local telescope = require("telescope")
+ telescope.load_extension("jj")
+ end)
+ end,
+ },
+}
diff --git a/.config/nvim/lua/plugins/extras.lua b/files/config/nvim/lua/plugins/extras.lua
similarity index 100%
rename from .config/nvim/lua/plugins/extras.lua
rename to files/config/nvim/lua/plugins/extras.lua
diff --git a/.config/nvim/lua/plugins/formatting.lua b/files/config/nvim/lua/plugins/formatting.lua
similarity index 91%
rename from .config/nvim/lua/plugins/formatting.lua
rename to files/config/nvim/lua/plugins/formatting.lua
index 1cd976c..f1272ab 100644
--- a/.config/nvim/lua/plugins/formatting.lua
+++ b/files/config/nvim/lua/plugins/formatting.lua
@@ -5,6 +5,7 @@ return {
formatters_by_ft = {
["cue"] = { { "cue_fmt" } },
["html"] = { { "prettierd", "prettier" } },
+ ["nix"] = { "nixfmt" },
["sass"] = { { "prettierd", "prettier" } },
["proto"] = { { "buf" } },
["terraform"] = { { "terraform_fmt" } },
diff --git a/.config/nvim/lua/plugins/incline.lua b/files/config/nvim/lua/plugins/incline.lua
similarity index 100%
rename from .config/nvim/lua/plugins/incline.lua
rename to files/config/nvim/lua/plugins/incline.lua
diff --git a/.config/nvim/lua/plugins/lsp.lua b/files/config/nvim/lua/plugins/lsp.lua
similarity index 100%
rename from .config/nvim/lua/plugins/lsp.lua
rename to files/config/nvim/lua/plugins/lsp.lua
diff --git a/.config/nvim/lua/plugins/treesitter.lua b/files/config/nvim/lua/plugins/treesitter.lua
similarity index 100%
rename from .config/nvim/lua/plugins/treesitter.lua
rename to files/config/nvim/lua/plugins/treesitter.lua
diff --git a/.config/nvim/lua/plugins/ui.lua b/files/config/nvim/lua/plugins/ui.lua
similarity index 90%
rename from .config/nvim/lua/plugins/ui.lua
rename to files/config/nvim/lua/plugins/ui.lua
index fd5b977..0fc1c59 100644
--- a/.config/nvim/lua/plugins/ui.lua
+++ b/files/config/nvim/lua/plugins/ui.lua
@@ -90,7 +90,7 @@ return {
},
},
- messages = { enabled = true },
+ messages = { enabled = true, view = "mini" },
lsp = {
hover = { enabled = false },
signature = { enabled = false },
@@ -105,10 +105,18 @@ return {
{
"rcarriga/nvim-notify",
opts = {
- stages = "fade_in_slide_out",
timeout = 1000,
render = "wrapped-compact",
top_down = false,
+ max_width = function()
+ return math.floor(vim.o.columns * 0.5)
+ end,
+ on_open = function(win)
+ vim.api.nvim_win_set_config(win, {
+ focusable = false,
+ zindex = 100,
+ })
+ end,
},
},
@@ -120,7 +128,13 @@ return {
{
"ahmedkhalf/project.nvim",
opts = {
+ exclude_dirs = {
+ "~/.cargo/*",
+ "~/.config/*",
+ "/tmp/*",
+ },
manual_mode = false,
+ patterns = { ".git", ".jj" },
},
},
}
diff --git a/.config/wezterm/wezterm.lua b/files/config/wezterm/wezterm.lua
similarity index 91%
rename from .config/wezterm/wezterm.lua
rename to files/config/wezterm/wezterm.lua
index 4881b99..c60845e 100644
--- a/.config/wezterm/wezterm.lua
+++ b/files/config/wezterm/wezterm.lua
@@ -85,10 +85,18 @@ wezterm.on("tab-8", activate_tab("t8", 7))
wezterm.on("tab-9", activate_tab("t9", 8))
wezterm.on("tab-10", activate_tab("t10", 9))
-wezterm.on("user-var-changed", function(window, pane, name, _)
+wezterm.on("user-var-changed", function(window, pane, name, value)
if name == "nvim_activate" then
activate_nvim(window, pane)
end
+ if name == "open_url" then
+ local url = string.match(value, "%S+")
+ local u = wezterm.url.parse(string.match(value, "%S+"))
+ if u.scheme == "https" or u.scheme == "http" then
+ wezterm.log_info(url)
+ wezterm.background_child_process({ "xdg-open", url })
+ end
+ end
end)
-- ------------------------------------------------------------------------------------
@@ -140,22 +148,25 @@ local berkeley_mono_features = {
-- #[ ## ### #### ################
-config.font = wezterm.font({
- family = "Berkeley Mono Nerd Font",
- weight = "Regular",
- harfbuzz_features = berkeley_mono_features,
+config.font = wezterm.font_with_fallback({
+ {
+ family = "BerkeleyMono Nerd Font",
+ -- family = "Ubuntu Mono",
+ -- weight = "Regular",
+ harfbuzz_features = berkeley_mono_features,
+ },
+ "Noto Sans Mono",
+ "Noto Color Emoji",
})
+
config.font_rules = {
{
italic = true,
intensity = "Bold",
reverse = false,
- -- font = wezterm.font("Iosevka Term SS15 Lt Ex Obl", { weight = "Light", italic = true }),
- -- font = wezterm.font("Iosevka Term Curly Slab Lt Ex", { weight = "Light", italic = true }),
- -- font = wezterm.font("Iosevka Term Curly Slab Ex", { weight = "Light", italic = true }),
- -- font = wezterm.font("Monaspace Radon Var", { weight = "Regular", italic = false }),
font = wezterm.font({
- family = "Berkeley Mono Nerd Font",
+ family = "BerkeleyMono Nerd Font",
+ -- family = "Monaspace Radon Light",
italic = true,
harfbuzz_features = berkeley_mono_features,
}),
@@ -189,6 +200,7 @@ config.allow_square_glyphs_to_overflow_width = "Always"
-- Config
config.enable_wayland = true
+config.xcursor_theme = "Adwaita"
config.check_for_updates = false
-- UI
@@ -251,6 +263,8 @@ config.disable_default_key_bindings = true
config.keys = {
{ key = "c", mods = "ALT|SHIFT", action = act.CopyTo("ClipboardAndPrimarySelection") },
{ key = "v", mods = "ALT|SHIFT", action = act.PasteFrom("Clipboard") },
+ { key = "c", mods = "CTRL|SHIFT", action = act.CopyTo("ClipboardAndPrimarySelection") },
+ { key = "v", mods = "CTRL|SHIFT", action = act.PasteFrom("Clipboard") },
{ key = "0", mods = "CTRL", action = "ResetFontSize" },
{ key = "-", mods = "CTRL", action = "DecreaseFontSize" },
{ key = "=", mods = "CTRL", action = "IncreaseFontSize" },
diff --git a/files/scripts/git-signing-key b/files/scripts/git-signing-key
new file mode 100755
index 0000000..9c49d31
--- /dev/null
+++ b/files/scripts/git-signing-key
@@ -0,0 +1,3 @@
+#!/usr/bin/env bash
+set -euo pipefail
+ssh-add -L | awk '/^sk-ssh-/ { print "key::" $1 " " $2 }'
diff --git a/bin/test-term.sh b/files/scripts/test-term.sh
similarity index 96%
rename from bin/test-term.sh
rename to files/scripts/test-term.sh
index 91ae7e2..a19fceb 100755
--- a/bin/test-term.sh
+++ b/files/scripts/test-term.sh
@@ -57,6 +57,10 @@ echo -e '\e[48;2;240;143;104mtruecolor background, de facto standard (commonly u
echo
echo "Emoji: 🚀 💩 😁 🍖 🔥 🔷 ❤️ "
+echo
+echo "Nerdfonts: "
+echo " "
+
echo
echo "Geometrical:"
echo -e '◆ ◇ ◈ ● ○ ◉ ◎ ◍ ◌'
diff --git a/files/scripts/wezterm-open-url b/files/scripts/wezterm-open-url
new file mode 100755
index 0000000..8cb656f
--- /dev/null
+++ b/files/scripts/wezterm-open-url
@@ -0,0 +1,4 @@
+#!/usr/bin/env bash
+if [[ $1 == http* ]]; then
+ printf "\033]1337;SetUserVar=open_url=%s\007" "$(echo -n "$1" | base64)"
+fi
diff --git a/flake.lock b/flake.lock
new file mode 100644
index 0000000..09d6f23
--- /dev/null
+++ b/flake.lock
@@ -0,0 +1,48 @@
+{
+ "nodes": {
+ "home-manager": {
+ "inputs": {
+ "nixpkgs": [
+ "nixpkgs"
+ ]
+ },
+ "locked": {
+ "lastModified": 1722462338,
+ "narHash": "sha256-ss0G8t8RJVDewA3MyqgAlV951cWRK6EtVhVKEZ7J5LU=",
+ "owner": "nix-community",
+ "repo": "home-manager",
+ "rev": "6e090576c4824b16e8759ebca3958c5b09659ee8",
+ "type": "github"
+ },
+ "original": {
+ "owner": "nix-community",
+ "repo": "home-manager",
+ "type": "github"
+ }
+ },
+ "nixpkgs": {
+ "locked": {
+ "lastModified": 1722421184,
+ "narHash": "sha256-/DJBI6trCeVnasdjUo9pbnodCLZcFqnVZiLUfqLH4jA=",
+ "owner": "nixos",
+ "repo": "nixpkgs",
+ "rev": "9f918d616c5321ad374ae6cb5ea89c9e04bf3e58",
+ "type": "github"
+ },
+ "original": {
+ "owner": "nixos",
+ "ref": "nixos-unstable",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "root": {
+ "inputs": {
+ "home-manager": "home-manager",
+ "nixpkgs": "nixpkgs"
+ }
+ }
+ },
+ "root": "root",
+ "version": 7
+}
diff --git a/flake.nix b/flake.nix
new file mode 100644
index 0000000..2ea8237
--- /dev/null
+++ b/flake.nix
@@ -0,0 +1,72 @@
+{
+ description = "NixOS configuration";
+
+ inputs = {
+ nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
+
+ home-manager.url = "github:nix-community/home-manager";
+ home-manager.inputs.nixpkgs.follows = "nixpkgs";
+ };
+
+ outputs =
+ {
+ self,
+ nixpkgs,
+ home-manager,
+ ...
+ }@inputs:
+ let
+ inherit (self) outputs;
+
+ mkHome =
+ modules:
+ home-manager.lib.homeManagerConfiguration {
+ modules = [ ./common ] ++ modules;
+ pkgs = nixpkgs.legacyPackages.x86_64-linux;
+ extraSpecialArgs = {
+ inherit inputs outputs;
+ };
+ };
+
+ supportedSystems = [
+ "x86_64-linux"
+ "aarch64-linux"
+ ];
+
+ forEachSystem =
+ f:
+ builtins.listToAttrs (
+ map (system: {
+ name = system;
+ value = f system;
+ }) supportedSystems
+ );
+ systemBits = forEachSystem (system: rec {
+ inherit system;
+ pkgs = import nixpkgs {
+ localSystem = system;
+ overlays = [ ];
+ };
+ });
+
+ forEachSystem' = f: forEachSystem (system: (f systemBits.${system}));
+ inherit (nixpkgs) lib;
+ in
+ {
+ overlays = import ./overlays { inherit inputs outputs; };
+
+ devShells = forEachSystem' (
+ { system, pkgs, ... }:
+ {
+ default = pkgs.mkShell { packages = [ pkgs.just ]; };
+ }
+ );
+
+ homeConfigurations = {
+ "dln@dinky" = mkHome [ ./users/dln/dinky.nix ];
+ "dln@nemo" = mkHome [ ./users/dln/nemo.nix ];
+ "lsjostro@nemo" = mkHome [ ./users/lsjostro/nemo.nix ];
+ };
+
+ };
+}
diff --git a/justfile b/justfile
new file mode 100644
index 0000000..73fe5fa
--- /dev/null
+++ b/justfile
@@ -0,0 +1,17 @@
+set shell := ["/usr/bin/env", "bash", "-euo", "pipefail", "-c"]
+
+[private]
+default:
+ @just --list
+
+clean:
+ nh clean all
+
+build:
+ nh home build .
+
+switch:
+ nh home switch .
+
+update:
+ nh home switch --update --ask .
diff --git a/overlays/default.nix b/overlays/default.nix
new file mode 100644
index 0000000..1ab8f99
--- /dev/null
+++ b/overlays/default.nix
@@ -0,0 +1,21 @@
+{ inputs, ... }:
+{
+
+ additions = final: _prev: import ../pkgs final.pkgs;
+
+ modifications = final: prev: {
+
+ # https://discourse.nixos.org/t/disable-ssh-agent-from-gnome-keyring-on-gnome/28176/5
+ gnome-keyring = prev.gnome-keyring.overrideAttrs (oldAttrs: {
+ configureFlags = oldAttrs.configureFlags or [ ] ++ [ "--disable-ssh-agent" ];
+ });
+
+ };
+
+ unstable-packages = final: _prev: {
+ unstable = import inputs.nixpkgs-unstable {
+ system = final.system;
+ config.allowUnfree = true;
+ };
+ };
+}
diff --git a/pkgs/default.nix b/pkgs/default.nix
new file mode 100644
index 0000000..ab3485b
--- /dev/null
+++ b/pkgs/default.nix
@@ -0,0 +1,5 @@
+pkgs: {
+ gnome-ssh-askpass4 = pkgs.callPackage ./gnome-ssh-askpass4 { };
+ jujutsu-openssh = pkgs.callPackage ./jujutsu-openssh { };
+ lazyjj = pkgs.callPackage ./lazyjj { };
+}
diff --git a/pkgs/gnome-ssh-askpass4/default.nix b/pkgs/gnome-ssh-askpass4/default.nix
new file mode 100644
index 0000000..7247a0f
--- /dev/null
+++ b/pkgs/gnome-ssh-askpass4/default.nix
@@ -0,0 +1,48 @@
+{
+ lib,
+ stdenv,
+ fetchFromGitHub,
+ gcr_4,
+ glib,
+ gtk4,
+ pkg-config,
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+ pname = "gnome-ssh-askpass4";
+ version = "0.0.0";
+
+ src = fetchFromGitHub {
+ name = "openssh";
+ owner = "openssh";
+ repo = "openssh-portable";
+ rev = "5b0d9e3ed8fd407936d973990ae169cc296150f7";
+ hash = "sha256-QJilKQ6weWZuf3L8yUplXwjqlzH5Ki7YeDnCh4HSuIQ=";
+ };
+
+ sourceRoot = "openssh/contrib";
+
+ nativeBuildInputs = [
+ pkg-config
+ ];
+
+ buildInputs = [
+ gcr_4
+ glib
+ gtk4
+ ];
+
+ strictDeps = true;
+
+ buildPhase = ''make gnome-ssh-askpass4'';
+
+ installPhase = ''install -Dm 755 gnome-ssh-askpass4 $out/bin/gnome-ssh-askpass4'';
+
+ meta = with lib; {
+ description = "A simple SSH passphrase grabber for GNOME";
+ homepage = "https://github.com/openssh/openssh-portable";
+ license = licenses.bsd2;
+ maintainers = with maintainers; [ ];
+ mainProgram = "gnome-ssh-askpass4";
+ };
+})
diff --git a/pkgs/jujutsu-openssh/Cargo.lock b/pkgs/jujutsu-openssh/Cargo.lock
new file mode 100644
index 0000000..b2483de
--- /dev/null
+++ b/pkgs/jujutsu-openssh/Cargo.lock
@@ -0,0 +1,3877 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "addr2line"
+version = "0.22.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e4503c46a5c0c7844e948c9a4d6acd9f50cccb4de1c48eb9e291ea17470c678"
+dependencies = [
+ "gimli",
+]
+
+[[package]]
+name = "adler"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+
+[[package]]
+name = "ahash"
+version = "0.8.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011"
+dependencies = [
+ "cfg-if",
+ "getrandom",
+ "once_cell",
+ "version_check",
+ "zerocopy",
+]
+
+[[package]]
+name = "aho-corasick"
+version = "1.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "allocator-api2"
+version = "0.2.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f"
+
+[[package]]
+name = "android-tzdata"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0"
+
+[[package]]
+name = "android_system_properties"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "anes"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299"
+
+[[package]]
+name = "anstream"
+version = "0.6.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "418c75fa768af9c03be99d17643f93f79bbba589895012a80e3452a19ddda15b"
+dependencies = [
+ "anstyle",
+ "anstyle-parse",
+ "anstyle-query",
+ "anstyle-wincon",
+ "colorchoice",
+ "is_terminal_polyfill",
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "038dfcf04a5feb68e9c60b21c9625a54c2c0616e79b72b0fd87075a056ae1d1b"
+
+[[package]]
+name = "anstyle-parse"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c03a11a9034d92058ceb6ee011ce58af4a9bf61491aa7e1e59ecd24bd40d22d4"
+dependencies = [
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle-query"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ad186efb764318d35165f1758e7dcef3b10628e26d41a44bc5550652e6804391"
+dependencies = [
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "anstyle-wincon"
+version = "3.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "61a38449feb7068f52bb06c12759005cf459ee52bb4adc1d5a7c4322d716fb19"
+dependencies = [
+ "anstyle",
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "anyhow"
+version = "1.0.86"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da"
+
+[[package]]
+name = "arc-swap"
+version = "1.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "69f7f8c3906b62b754cd5326047894316021dcfe5a194c8ea52bdd94934a3457"
+
+[[package]]
+name = "arrayvec"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711"
+
+[[package]]
+name = "assert_cmd"
+version = "2.0.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed72493ac66d5804837f480ab3766c72bdfab91a65e565fc54fa9e42db0073a8"
+dependencies = [
+ "anstyle",
+ "bstr",
+ "doc-comment",
+ "predicates",
+ "predicates-core",
+ "predicates-tree",
+ "wait-timeout",
+]
+
+[[package]]
+name = "assert_matches"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b34d609dfbaf33d6889b2b7106d3ca345eacad44200913df5ba02bfd31d2ba9"
+
+[[package]]
+name = "async-trait"
+version = "0.1.81"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e0c28dcc82d7c8ead5cb13beb15405b57b8546e93215673ff8ca0349a028107"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0"
+
+[[package]]
+name = "backoff"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b62ddb9cb1ec0a098ad4bbf9344d0713fa193ae1a80af55febcff2627b6a00c1"
+dependencies = [
+ "getrandom",
+ "instant",
+ "rand",
+]
+
+[[package]]
+name = "backtrace"
+version = "0.3.73"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5cc23269a4f8976d0a4d2e7109211a419fe30e8d88d677cd60b6bc79c5732e0a"
+dependencies = [
+ "addr2line",
+ "cc",
+ "cfg-if",
+ "libc",
+ "miniz_oxide",
+ "object",
+ "rustc-demangle",
+]
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "bitflags"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1"
+
+[[package]]
+name = "blake2"
+version = "0.10.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe"
+dependencies = [
+ "digest",
+]
+
+[[package]]
+name = "block-buffer"
+version = "0.10.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "bstr"
+version = "1.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05efc5cfd9110c8416e471df0e96702d58690178e206e61b7173706673c93706"
+dependencies = [
+ "memchr",
+ "regex-automata 0.4.7",
+ "serde",
+]
+
+[[package]]
+name = "bumpalo"
+version = "3.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c"
+
+[[package]]
+name = "byteorder"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
+
+[[package]]
+name = "bytes"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "514de17de45fdb8dc022b1a7975556c53c86f9f0aa5f534b98977b171857c2c9"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "camino"
+version = "1.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e0ec6b951b160caa93cc0c7b209e5a3bff7aae9062213451ac99493cd844c239"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "cargo-platform"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "24b1f0365a6c6bb4020cd05806fd0d33c44d38046b8bd7f0e40814b9763cabfc"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "cargo_metadata"
+version = "0.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7daec1a2a2129eeba1644b220b4647ec537b0b5d4bfd6876fcc5a540056b592"
+dependencies = [
+ "camino",
+ "cargo-platform",
+ "semver",
+ "serde",
+ "serde_json",
+ "thiserror",
+]
+
+[[package]]
+name = "cassowary"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df8670b8c7b9dae1793364eafadf7239c40d669904660c5960d74cfd80b46a53"
+
+[[package]]
+name = "cast"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5"
+
+[[package]]
+name = "castaway"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a17ed5635fc8536268e5d4de1e22e81ac34419e5f052d4d51f4e01dcc263fcc"
+dependencies = [
+ "rustversion",
+]
+
+[[package]]
+name = "cc"
+version = "1.0.99"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96c51067fd44124faa7f870b4b1c969379ad32b2ba805aa959430ceaa384f695"
+dependencies = [
+ "jobserver",
+ "libc",
+ "once_cell",
+]
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "chrono"
+version = "0.4.38"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401"
+dependencies = [
+ "android-tzdata",
+ "iana-time-zone",
+ "num-traits",
+ "windows-targets 0.52.5",
+]
+
+[[package]]
+name = "ciborium"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "42e69ffd6f0917f5c029256a24d0161db17cea3997d185db0d35926308770f0e"
+dependencies = [
+ "ciborium-io",
+ "ciborium-ll",
+ "serde",
+]
+
+[[package]]
+name = "ciborium-io"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05afea1e0a06c9be33d539b876f1ce3692f4afea2cb41f740e7743225ed1c757"
+
+[[package]]
+name = "ciborium-ll"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57663b653d948a338bfb3eeba9bb2fd5fcfaecb9e199e87e1eda4d9e8b240fd9"
+dependencies = [
+ "ciborium-io",
+ "half",
+]
+
+[[package]]
+name = "clap"
+version = "4.5.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "64acc1846d54c1fe936a78dc189c34e28d3f5afc348403f28ecf53660b9b8462"
+dependencies = [
+ "clap_builder",
+ "clap_derive",
+]
+
+[[package]]
+name = "clap-markdown"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ebc67e6266e14f8b31541c2f204724fa2ac7ad5c17d6f5908fbb92a60f42cff"
+dependencies = [
+ "clap",
+]
+
+[[package]]
+name = "clap_builder"
+version = "4.5.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6fb8393d67ba2e7bfaf28a23458e4e2b543cc73a99595511eb207fdb8aede942"
+dependencies = [
+ "anstream",
+ "anstyle",
+ "clap_lex",
+ "strsim",
+ "terminal_size",
+]
+
+[[package]]
+name = "clap_complete"
+version = "4.5.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d598e88f6874d4b888ed40c71efbcbf4076f1dfbae128a08a8c9e45f710605d"
+dependencies = [
+ "clap",
+]
+
+[[package]]
+name = "clap_complete_nushell"
+version = "4.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1accf1b463dee0d3ab2be72591dccdab8bef314958340447c882c4c72acfe2a3"
+dependencies = [
+ "clap",
+ "clap_complete",
+]
+
+[[package]]
+name = "clap_derive"
+version = "4.5.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2bac35c6dafb060fd4d275d9a4ffae97917c13a6327903a8be2153cd964f7085"
+dependencies = [
+ "heck",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "clap_lex"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b82cf0babdbd58558212896d1a4272303a57bdb245c2bf1147185fb45640e70"
+
+[[package]]
+name = "clap_mangen"
+version = "0.2.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "74b70fc13e60c0e1d490dc50eb73a749be6d81f4ef03783df1d9b7b0c62bc937"
+dependencies = [
+ "clap",
+ "roff",
+]
+
+[[package]]
+name = "clru"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cbd0f76e066e64fdc5631e3bb46381254deab9ef1158292f27c8c57e3bf3fe59"
+
+[[package]]
+name = "colorchoice"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b6a852b24ab71dffc585bcb46eaf7959d175cb865a7152e35b348d1b2960422"
+
+[[package]]
+name = "compact_str"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f86b9c4c00838774a6d902ef931eff7470720c51d90c2e32cfe15dc304737b3f"
+dependencies = [
+ "castaway",
+ "cfg-if",
+ "itoa",
+ "ryu",
+ "static_assertions",
+]
+
+[[package]]
+name = "config"
+version = "0.13.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23738e11972c7643e4ec947840fc463b6a571afcd3e735bdfce7d03c7a784aca"
+dependencies = [
+ "async-trait",
+ "lazy_static",
+ "nom",
+ "pathdiff",
+ "serde",
+ "toml",
+]
+
+[[package]]
+name = "console"
+version = "0.15.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0e1f83fc076bd6dd27517eacdf25fef6c4dfe5f1d7448bafaaf3a26f13b5e4eb"
+dependencies = [
+ "encode_unicode",
+ "lazy_static",
+ "libc",
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f"
+
+[[package]]
+name = "cpufeatures"
+version = "0.2.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "crc32fast"
+version = "1.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "criterion"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f2b12d017a929603d80db1831cd3a24082f8137ce19c69e6447f54f5fc8d692f"
+dependencies = [
+ "anes",
+ "cast",
+ "ciborium",
+ "clap",
+ "criterion-plot",
+ "is-terminal",
+ "itertools 0.10.5",
+ "num-traits",
+ "once_cell",
+ "oorandom",
+ "plotters",
+ "rayon",
+ "regex",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "tinytemplate",
+ "walkdir",
+]
+
+[[package]]
+name = "criterion-plot"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6b50826342786a51a89e2da3a28f1c32b06e387201bc2d19791f622c673706b1"
+dependencies = [
+ "cast",
+ "itertools 0.10.5",
+]
+
+[[package]]
+name = "crossbeam"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1137cd7e7fc0fb5d3c5a8678be38ec56e819125d8d7907411fe24ccb943faca8"
+dependencies = [
+ "crossbeam-channel",
+ "crossbeam-deque",
+ "crossbeam-epoch",
+ "crossbeam-queue",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-channel"
+version = "0.5.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "33480d6946193aa8033910124896ca395333cae7e2d1113d1fef6c3272217df2"
+dependencies = [
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-deque"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d"
+dependencies = [
+ "crossbeam-epoch",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-epoch"
+version = "0.9.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e"
+dependencies = [
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-queue"
+version = "0.3.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df0346b5d5e76ac2fe4e327c5fd1118d6be7c51dfb18f9b7922923f287471e35"
+dependencies = [
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80"
+
+[[package]]
+name = "crossterm"
+version = "0.27.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f476fe445d41c9e991fd07515a6f463074b782242ccf4a5b7b1d1012e70824df"
+dependencies = [
+ "bitflags 2.5.0",
+ "crossterm_winapi",
+ "libc",
+ "mio",
+ "parking_lot",
+ "signal-hook",
+ "signal-hook-mio",
+ "winapi",
+]
+
+[[package]]
+name = "crossterm_winapi"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "acdd7c62a3665c7f6830a51635d9ac9b23ed385797f70a83bb8bafe9c572ab2b"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "crunchy"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7"
+
+[[package]]
+name = "crypto-common"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
+dependencies = [
+ "generic-array",
+ "typenum",
+]
+
+[[package]]
+name = "dashmap"
+version = "5.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856"
+dependencies = [
+ "cfg-if",
+ "hashbrown 0.14.5",
+ "lock_api",
+ "once_cell",
+ "parking_lot_core",
+]
+
+[[package]]
+name = "deranged"
+version = "0.3.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4"
+dependencies = [
+ "powerfmt",
+]
+
+[[package]]
+name = "diff"
+version = "0.1.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8"
+
+[[package]]
+name = "difflib"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6184e33543162437515c2e2b48714794e37845ec9851711914eec9d308f6ebe8"
+
+[[package]]
+name = "digest"
+version = "0.10.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
+dependencies = [
+ "block-buffer",
+ "crypto-common",
+ "subtle",
+]
+
+[[package]]
+name = "dirs"
+version = "5.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225"
+dependencies = [
+ "dirs-sys",
+]
+
+[[package]]
+name = "dirs-sys"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c"
+dependencies = [
+ "libc",
+ "option-ext",
+ "redox_users",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "doc-comment"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10"
+
+[[package]]
+name = "dunce"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b"
+
+[[package]]
+name = "either"
+version = "1.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0"
+
+[[package]]
+name = "encode_unicode"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f"
+
+[[package]]
+name = "encoding_rs"
+version = "0.8.34"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b45de904aa0b010bce2ab45264d0631681847fa7b6f2eaa7dab7619943bc4f59"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "equivalent"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
+
+[[package]]
+name = "errno"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba"
+dependencies = [
+ "libc",
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "esl01-renderdag"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3a1840969ab8be31e186bb6d2f672d586dcd203dd4019a80dc1277a14686eca9"
+dependencies = [
+ "bitflags 1.3.2",
+ "itertools 0.10.5",
+]
+
+[[package]]
+name = "faster-hex"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2a2b11eda1d40935b26cf18f6833c526845ae8c41e58d09af6adeb6f0269183"
+
+[[package]]
+name = "fastrand"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a"
+
+[[package]]
+name = "filetime"
+version = "0.2.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ee447700ac8aa0b2f2bd7bc4462ad686ba06baa6727ac149a2d6277f0d240fd"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "redox_syscall 0.4.1",
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "fixedbitset"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80"
+
+[[package]]
+name = "flate2"
+version = "1.0.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5f54427cfd1c7829e2a139fcefea601bf088ebca651d2bf53ebc600eac295dae"
+dependencies = [
+ "crc32fast",
+ "miniz_oxide",
+]
+
+[[package]]
+name = "fnv"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+
+[[package]]
+name = "form_urlencoded"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456"
+dependencies = [
+ "percent-encoding",
+]
+
+[[package]]
+name = "futures"
+version = "0.1.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3a471a38ef8ed83cd6e40aa59c1ffe17db6855c18e3604d9c4ed8c08ebc28678"
+
+[[package]]
+name = "futures"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-executor",
+ "futures-io",
+ "futures-sink",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-channel"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78"
+dependencies = [
+ "futures-core",
+ "futures-sink",
+]
+
+[[package]]
+name = "futures-core"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d"
+
+[[package]]
+name = "futures-executor"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d"
+dependencies = [
+ "futures-core",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-io"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1"
+
+[[package]]
+name = "futures-macro"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "futures-sink"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5"
+
+[[package]]
+name = "futures-task"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004"
+
+[[package]]
+name = "futures-util"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48"
+dependencies = [
+ "futures 0.1.31",
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-macro",
+ "futures-sink",
+ "futures-task",
+ "memchr",
+ "pin-project-lite",
+ "pin-utils",
+ "slab",
+]
+
+[[package]]
+name = "gen-protos"
+version = "0.19.0"
+dependencies = [
+ "prost-build",
+]
+
+[[package]]
+name = "generic-array"
+version = "0.14.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
+dependencies = [
+ "typenum",
+ "version_check",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi",
+]
+
+[[package]]
+name = "gimli"
+version = "0.29.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd"
+
+[[package]]
+name = "git2"
+version = "0.18.3"
+source = "git+https://github.com/bnjmnt4n/git2-rs.git?rev=8fd23a45f#8fd23a45f4166d4e87debc02d9ba70ef601fe751"
+dependencies = [
+ "bitflags 2.5.0",
+ "libc",
+ "libgit2-sys",
+ "log",
+ "openssl-probe",
+ "openssl-sys",
+ "url",
+]
+
+[[package]]
+name = "gix"
+version = "0.63.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "984c5018adfa7a4536ade67990b3ebc6e11ab57b3d6cd9968de0947ca99b4b06"
+dependencies = [
+ "gix-actor",
+ "gix-attributes",
+ "gix-command",
+ "gix-commitgraph",
+ "gix-config",
+ "gix-date",
+ "gix-diff",
+ "gix-discover",
+ "gix-features",
+ "gix-filter",
+ "gix-fs",
+ "gix-glob",
+ "gix-hash",
+ "gix-hashtable",
+ "gix-ignore",
+ "gix-index",
+ "gix-lock",
+ "gix-macros",
+ "gix-object",
+ "gix-odb",
+ "gix-pack",
+ "gix-path",
+ "gix-pathspec",
+ "gix-ref",
+ "gix-refspec",
+ "gix-revision",
+ "gix-revwalk",
+ "gix-sec",
+ "gix-submodule",
+ "gix-tempfile",
+ "gix-trace",
+ "gix-traverse",
+ "gix-url",
+ "gix-utils",
+ "gix-validate",
+ "gix-worktree",
+ "once_cell",
+ "parking_lot",
+ "smallvec",
+ "thiserror",
+]
+
+[[package]]
+name = "gix-actor"
+version = "0.31.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9b8ee65074b2bbb91d9d97c15d172ea75043aefebf9869b5b329149dc76501c"
+dependencies = [
+ "bstr",
+ "gix-date",
+ "gix-utils",
+ "itoa",
+ "thiserror",
+ "winnow 0.6.13",
+]
+
+[[package]]
+name = "gix-attributes"
+version = "0.22.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eefb48f42eac136a4a0023f49a54ec31be1c7a9589ed762c45dcb9b953f7ecc8"
+dependencies = [
+ "bstr",
+ "gix-glob",
+ "gix-path",
+ "gix-quote",
+ "gix-trace",
+ "kstring",
+ "smallvec",
+ "thiserror",
+ "unicode-bom",
+]
+
+[[package]]
+name = "gix-bitmap"
+version = "0.2.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a371db66cbd4e13f0ed9dc4c0fea712d7276805fccc877f77e96374d317e87ae"
+dependencies = [
+ "thiserror",
+]
+
+[[package]]
+name = "gix-chunk"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "45c8751169961ba7640b513c3b24af61aa962c967aaf04116734975cd5af0c52"
+dependencies = [
+ "thiserror",
+]
+
+[[package]]
+name = "gix-command"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c22e086314095c43ffe5cdc5c0922d5439da4fd726f3b0438c56147c34dc225"
+dependencies = [
+ "bstr",
+ "gix-path",
+ "gix-trace",
+ "shell-words",
+]
+
+[[package]]
+name = "gix-commitgraph"
+version = "0.24.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f7b102311085da4af18823413b5176d7c500fb2272eaf391cfa8635d8bcb12c4"
+dependencies = [
+ "bstr",
+ "gix-chunk",
+ "gix-features",
+ "gix-hash",
+ "memmap2",
+ "thiserror",
+]
+
+[[package]]
+name = "gix-config"
+version = "0.37.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "53fafe42957e11d98e354a66b6bd70aeea00faf2f62dd11164188224a507c840"
+dependencies = [
+ "bstr",
+ "gix-config-value",
+ "gix-features",
+ "gix-glob",
+ "gix-path",
+ "gix-ref",
+ "gix-sec",
+ "memchr",
+ "once_cell",
+ "smallvec",
+ "thiserror",
+ "unicode-bom",
+ "winnow 0.6.13",
+]
+
+[[package]]
+name = "gix-config-value"
+version = "0.14.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fbd06203b1a9b33a78c88252a625031b094d9e1b647260070c25b09910c0a804"
+dependencies = [
+ "bitflags 2.5.0",
+ "bstr",
+ "gix-path",
+ "libc",
+ "thiserror",
+]
+
+[[package]]
+name = "gix-date"
+version = "0.8.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "367ee9093b0c2b04fd04c5c7c8b6a1082713534eab537597ae343663a518fa99"
+dependencies = [
+ "bstr",
+ "itoa",
+ "thiserror",
+ "time",
+]
+
+[[package]]
+name = "gix-diff"
+version = "0.44.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "40b9bd8b2d07b6675a840b56a6c177d322d45fa082672b0dad8f063b25baf0a4"
+dependencies = [
+ "bstr",
+ "gix-command",
+ "gix-filter",
+ "gix-fs",
+ "gix-hash",
+ "gix-object",
+ "gix-path",
+ "gix-tempfile",
+ "gix-trace",
+ "gix-worktree",
+ "imara-diff",
+ "thiserror",
+]
+
+[[package]]
+name = "gix-discover"
+version = "0.32.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fc27c699b63da66b50d50c00668bc0b7e90c3a382ef302865e891559935f3dbf"
+dependencies = [
+ "bstr",
+ "dunce",
+ "gix-fs",
+ "gix-hash",
+ "gix-path",
+ "gix-ref",
+ "gix-sec",
+ "thiserror",
+]
+
+[[package]]
+name = "gix-features"
+version = "0.38.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac7045ac9fe5f9c727f38799d002a7ed3583cd777e3322a7c4b43e3cf437dc69"
+dependencies = [
+ "crc32fast",
+ "crossbeam-channel",
+ "flate2",
+ "gix-hash",
+ "gix-trace",
+ "gix-utils",
+ "jwalk",
+ "libc",
+ "once_cell",
+ "parking_lot",
+ "prodash",
+ "sha1_smol",
+ "thiserror",
+ "walkdir",
+]
+
+[[package]]
+name = "gix-filter"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00ce6ea5ac8fca7adbc63c48a1b9e0492c222c386aa15f513405f1003f2f4ab2"
+dependencies = [
+ "bstr",
+ "encoding_rs",
+ "gix-attributes",
+ "gix-command",
+ "gix-hash",
+ "gix-object",
+ "gix-packetline-blocking",
+ "gix-path",
+ "gix-quote",
+ "gix-trace",
+ "gix-utils",
+ "smallvec",
+ "thiserror",
+]
+
+[[package]]
+name = "gix-fs"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3338ff92a2164f5209f185ec0cd316f571a72676bb01d27e22f2867ba69f77a"
+dependencies = [
+ "fastrand",
+ "gix-features",
+ "gix-utils",
+]
+
+[[package]]
+name = "gix-glob"
+version = "0.16.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c2a29ad0990cf02c48a7aac76ed0dbddeb5a0d070034b83675cc3bbf937eace4"
+dependencies = [
+ "bitflags 2.5.0",
+ "bstr",
+ "gix-features",
+ "gix-path",
+]
+
+[[package]]
+name = "gix-hash"
+version = "0.14.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f93d7df7366121b5018f947a04d37f034717e113dcf9ccd85c34b58e57a74d5e"
+dependencies = [
+ "faster-hex",
+ "thiserror",
+]
+
+[[package]]
+name = "gix-hashtable"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ddf80e16f3c19ac06ce415a38b8591993d3f73aede049cb561becb5b3a8e242"
+dependencies = [
+ "gix-hash",
+ "hashbrown 0.14.5",
+ "parking_lot",
+]
+
+[[package]]
+name = "gix-ignore"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "640dbeb4f5829f9fc14d31f654a34a0350e43a24e32d551ad130d99bf01f63f1"
+dependencies = [
+ "bstr",
+ "gix-glob",
+ "gix-path",
+ "gix-trace",
+ "unicode-bom",
+]
+
+[[package]]
+name = "gix-index"
+version = "0.33.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2d8c5a5f1c58edcbc5692b174cda2703aba82ed17d7176ff4c1752eb48b1b167"
+dependencies = [
+ "bitflags 2.5.0",
+ "bstr",
+ "filetime",
+ "fnv",
+ "gix-bitmap",
+ "gix-features",
+ "gix-fs",
+ "gix-hash",
+ "gix-lock",
+ "gix-object",
+ "gix-traverse",
+ "gix-utils",
+ "gix-validate",
+ "hashbrown 0.14.5",
+ "itoa",
+ "libc",
+ "memmap2",
+ "rustix",
+ "smallvec",
+ "thiserror",
+]
+
+[[package]]
+name = "gix-lock"
+version = "14.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3bc7fe297f1f4614774989c00ec8b1add59571dc9b024b4c00acb7dedd4e19d"
+dependencies = [
+ "gix-tempfile",
+ "gix-utils",
+ "thiserror",
+]
+
+[[package]]
+name = "gix-macros"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "999ce923619f88194171a67fb3e6d613653b8d4d6078b529b15a765da0edcc17"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "gix-object"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1fe2dc4a41191c680c942e6ebd630c8107005983c4679214fdb1007dcf5ae1df"
+dependencies = [
+ "bstr",
+ "gix-actor",
+ "gix-date",
+ "gix-features",
+ "gix-hash",
+ "gix-utils",
+ "gix-validate",
+ "itoa",
+ "smallvec",
+ "thiserror",
+ "winnow 0.6.13",
+]
+
+[[package]]
+name = "gix-odb"
+version = "0.61.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e92b9790e2c919166865d0825b26cc440a387c175bed1b43a2fa99c0e9d45e98"
+dependencies = [
+ "arc-swap",
+ "gix-date",
+ "gix-features",
+ "gix-fs",
+ "gix-hash",
+ "gix-object",
+ "gix-pack",
+ "gix-path",
+ "gix-quote",
+ "parking_lot",
+ "tempfile",
+ "thiserror",
+]
+
+[[package]]
+name = "gix-pack"
+version = "0.51.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a8da51212dbff944713edb2141ed7e002eea326b8992070374ce13a6cb610b3"
+dependencies = [
+ "clru",
+ "gix-chunk",
+ "gix-features",
+ "gix-hash",
+ "gix-hashtable",
+ "gix-object",
+ "gix-path",
+ "gix-tempfile",
+ "memmap2",
+ "parking_lot",
+ "smallvec",
+ "thiserror",
+ "uluru",
+]
+
+[[package]]
+name = "gix-packetline-blocking"
+version = "0.17.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c31d42378a3d284732e4d589979930d0d253360eccf7ec7a80332e5ccb77e14a"
+dependencies = [
+ "bstr",
+ "faster-hex",
+ "gix-trace",
+ "thiserror",
+]
+
+[[package]]
+name = "gix-path"
+version = "0.10.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23623cf0f475691a6d943f898c4d0b89f5c1a2a64d0f92bce0e0322ee6528783"
+dependencies = [
+ "bstr",
+ "gix-trace",
+ "home",
+ "once_cell",
+ "thiserror",
+]
+
+[[package]]
+name = "gix-pathspec"
+version = "0.7.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a76cab098dc10ba2d89f634f66bf196dea4d7db4bf10b75c7a9c201c55a2ee19"
+dependencies = [
+ "bitflags 2.5.0",
+ "bstr",
+ "gix-attributes",
+ "gix-config-value",
+ "gix-glob",
+ "gix-path",
+ "thiserror",
+]
+
+[[package]]
+name = "gix-quote"
+version = "0.4.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cbff4f9b9ea3fa7a25a70ee62f545143abef624ac6aa5884344e70c8b0a1d9ff"
+dependencies = [
+ "bstr",
+ "gix-utils",
+ "thiserror",
+]
+
+[[package]]
+name = "gix-ref"
+version = "0.44.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3394a2997e5bc6b22ebc1e1a87b41eeefbcfcff3dbfa7c4bd73cb0ac8f1f3e2e"
+dependencies = [
+ "gix-actor",
+ "gix-date",
+ "gix-features",
+ "gix-fs",
+ "gix-hash",
+ "gix-lock",
+ "gix-object",
+ "gix-path",
+ "gix-tempfile",
+ "gix-utils",
+ "gix-validate",
+ "memmap2",
+ "thiserror",
+ "winnow 0.6.13",
+]
+
+[[package]]
+name = "gix-refspec"
+version = "0.23.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dde848865834a54fe4d9b4573f15d0e9a68eaf3d061b42d3ed52b4b8acf880b2"
+dependencies = [
+ "bstr",
+ "gix-hash",
+ "gix-revision",
+ "gix-validate",
+ "smallvec",
+ "thiserror",
+]
+
+[[package]]
+name = "gix-revision"
+version = "0.27.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "63e08f8107ed1f93a83bcfbb4c38084c7cb3f6cd849793f1d5eec235f9b13b2b"
+dependencies = [
+ "bstr",
+ "gix-date",
+ "gix-hash",
+ "gix-hashtable",
+ "gix-object",
+ "gix-revwalk",
+ "gix-trace",
+ "thiserror",
+]
+
+[[package]]
+name = "gix-revwalk"
+version = "0.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4181db9cfcd6d1d0fd258e91569dbb61f94cb788b441b5294dd7f1167a3e788f"
+dependencies = [
+ "gix-commitgraph",
+ "gix-date",
+ "gix-hash",
+ "gix-hashtable",
+ "gix-object",
+ "smallvec",
+ "thiserror",
+]
+
+[[package]]
+name = "gix-sec"
+version = "0.10.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fddc27984a643b20dd03e97790555804f98cf07404e0e552c0ad8133266a79a1"
+dependencies = [
+ "bitflags 2.5.0",
+ "gix-path",
+ "libc",
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "gix-submodule"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "921cd49924ac14b6611b22e5fb7bbba74d8780dc7ad26153304b64d1272460ac"
+dependencies = [
+ "bstr",
+ "gix-config",
+ "gix-path",
+ "gix-pathspec",
+ "gix-refspec",
+ "gix-url",
+ "thiserror",
+]
+
+[[package]]
+name = "gix-tempfile"
+version = "14.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3b0e276cd08eb2a22e9f286a4f13a222a01be2defafa8621367515375644b99"
+dependencies = [
+ "dashmap",
+ "gix-fs",
+ "libc",
+ "once_cell",
+ "parking_lot",
+ "tempfile",
+]
+
+[[package]]
+name = "gix-trace"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f924267408915fddcd558e3f37295cc7d6a3e50f8bd8b606cee0808c3915157e"
+
+[[package]]
+name = "gix-traverse"
+version = "0.39.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f20cb69b63eb3e4827939f42c05b7756e3488ef49c25c412a876691d568ee2a0"
+dependencies = [
+ "bitflags 2.5.0",
+ "gix-commitgraph",
+ "gix-date",
+ "gix-hash",
+ "gix-hashtable",
+ "gix-object",
+ "gix-revwalk",
+ "smallvec",
+ "thiserror",
+]
+
+[[package]]
+name = "gix-url"
+version = "0.27.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0db829ebdca6180fbe32be7aed393591df6db4a72dbbc0b8369162390954d1cf"
+dependencies = [
+ "bstr",
+ "gix-features",
+ "gix-path",
+ "home",
+ "thiserror",
+ "url",
+]
+
+[[package]]
+name = "gix-utils"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "35192df7fd0fa112263bad8021e2df7167df4cc2a6e6d15892e1e55621d3d4dc"
+dependencies = [
+ "fastrand",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "gix-validate"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "82c27dd34a49b1addf193c92070bcbf3beaf6e10f16a78544de6372e146a0acf"
+dependencies = [
+ "bstr",
+ "thiserror",
+]
+
+[[package]]
+name = "gix-worktree"
+version = "0.34.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "53f6b7de83839274022aff92157d7505f23debf739d257984a300a35972ca94e"
+dependencies = [
+ "bstr",
+ "gix-attributes",
+ "gix-features",
+ "gix-fs",
+ "gix-glob",
+ "gix-hash",
+ "gix-ignore",
+ "gix-index",
+ "gix-object",
+ "gix-path",
+ "gix-validate",
+]
+
+[[package]]
+name = "glob"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
+
+[[package]]
+name = "globset"
+version = "0.4.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57da3b9b5b85bd66f31093f8c408b90a74431672542466497dcbdfdc02034be1"
+dependencies = [
+ "aho-corasick",
+ "bstr",
+ "log",
+ "regex-automata 0.4.7",
+ "regex-syntax 0.8.4",
+]
+
+[[package]]
+name = "half"
+version = "2.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6dd08c532ae367adf81c312a4580bc67f1d0fe8bc9c460520283f4c0ff277888"
+dependencies = [
+ "cfg-if",
+ "crunchy",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
+
+[[package]]
+name = "hashbrown"
+version = "0.14.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1"
+dependencies = [
+ "ahash",
+ "allocator-api2",
+]
+
+[[package]]
+name = "heck"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
+
+[[package]]
+name = "hermit-abi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024"
+
+[[package]]
+name = "hex"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
+
+[[package]]
+name = "home"
+version = "0.5.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5"
+dependencies = [
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "iana-time-zone"
+version = "0.1.60"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141"
+dependencies = [
+ "android_system_properties",
+ "core-foundation-sys",
+ "iana-time-zone-haiku",
+ "js-sys",
+ "wasm-bindgen",
+ "windows-core",
+]
+
+[[package]]
+name = "iana-time-zone-haiku"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "idna"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6"
+dependencies = [
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "ignore"
+version = "0.4.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b46810df39e66e925525d6e38ce1e7f6e1d208f72dc39757880fcb66e2c58af1"
+dependencies = [
+ "crossbeam-deque",
+ "globset",
+ "log",
+ "memchr",
+ "regex-automata 0.4.7",
+ "same-file",
+ "walkdir",
+ "winapi-util",
+]
+
+[[package]]
+name = "imara-diff"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e98c1d0ad70fc91b8b9654b1f33db55e59579d3b3de2bffdced0fdb810570cb8"
+dependencies = [
+ "ahash",
+ "hashbrown 0.12.3",
+]
+
+[[package]]
+name = "indexmap"
+version = "2.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26"
+dependencies = [
+ "equivalent",
+ "hashbrown 0.14.5",
+]
+
+[[package]]
+name = "indoc"
+version = "2.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b248f5224d1d606005e02c97f5aa4e88eeb230488bcc03bc9ca4d7991399f2b5"
+
+[[package]]
+name = "insta"
+version = "1.39.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "810ae6042d48e2c9e9215043563a58a80b877bc863228a74cf10c49d4620a6f5"
+dependencies = [
+ "console",
+ "lazy_static",
+ "linked-hash-map",
+ "regex",
+ "similar",
+]
+
+[[package]]
+name = "instant"
+version = "0.1.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "is-terminal"
+version = "0.4.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f23ff5ef2b80d608d61efee834934d862cd92461afc0560dedf493e4c033738b"
+dependencies = [
+ "hermit-abi",
+ "libc",
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "is_terminal_polyfill"
+version = "1.70.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f8478577c03552c21db0e2724ffb8986a5ce7af88107e6be5d2ee6e158c12800"
+
+[[package]]
+name = "itertools"
+version = "0.10.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itertools"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itoa"
+version = "1.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b"
+
+[[package]]
+name = "jj-cli"
+version = "0.19.0"
+dependencies = [
+ "anyhow",
+ "assert_cmd",
+ "assert_matches",
+ "async-trait",
+ "cargo_metadata",
+ "chrono",
+ "clap",
+ "clap-markdown",
+ "clap_complete",
+ "clap_complete_nushell",
+ "clap_mangen",
+ "config",
+ "criterion",
+ "crossterm",
+ "dirs",
+ "dunce",
+ "esl01-renderdag",
+ "futures 0.3.30",
+ "git2",
+ "gix",
+ "gix-filter",
+ "hex",
+ "indexmap",
+ "indoc",
+ "insta",
+ "itertools 0.12.1",
+ "jj-cli",
+ "jj-lib",
+ "libc",
+ "maplit",
+ "minus",
+ "once_cell",
+ "pest",
+ "pest_derive",
+ "pollster",
+ "rayon",
+ "regex",
+ "rpassword",
+ "scm-record",
+ "serde",
+ "slab",
+ "strsim",
+ "tempfile",
+ "test-case",
+ "testutils",
+ "textwrap",
+ "thiserror",
+ "timeago",
+ "toml_edit",
+ "tracing",
+ "tracing-chrome",
+ "tracing-subscriber",
+ "unicode-width",
+]
+
+[[package]]
+name = "jj-lib"
+version = "0.19.0"
+dependencies = [
+ "assert_matches",
+ "async-trait",
+ "backoff",
+ "blake2",
+ "bytes",
+ "chrono",
+ "config",
+ "criterion",
+ "digest",
+ "either",
+ "esl01-renderdag",
+ "futures 0.3.30",
+ "git2",
+ "gix",
+ "gix-filter",
+ "glob",
+ "hex",
+ "ignore",
+ "indoc",
+ "insta",
+ "itertools 0.12.1",
+ "jj-lib-proc-macros",
+ "maplit",
+ "num_cpus",
+ "once_cell",
+ "pest",
+ "pest_derive",
+ "pollster",
+ "pretty_assertions",
+ "prost",
+ "rand",
+ "rand_chacha",
+ "rayon",
+ "ref-cast",
+ "regex",
+ "rustix",
+ "serde",
+ "serde_json",
+ "smallvec",
+ "strsim",
+ "tempfile",
+ "test-case",
+ "testutils",
+ "thiserror",
+ "tokio",
+ "tracing",
+ "version_check",
+ "watchman_client",
+ "whoami",
+ "winreg",
+ "zstd",
+]
+
+[[package]]
+name = "jj-lib-proc-macros"
+version = "0.19.0"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "jobserver"
+version = "0.1.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2b099aaa34a9751c5bf0878add70444e1ed2dd73f347be99003d4577277de6e"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "js-sys"
+version = "0.3.69"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d"
+dependencies = [
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "jwalk"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2735847566356cd2179a2a38264839308f7079fa96e6bd5a42d740460e003c56"
+dependencies = [
+ "crossbeam",
+ "rayon",
+]
+
+[[package]]
+name = "kstring"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec3066350882a1cd6d950d055997f379ac37fd39f81cd4d8ed186032eb3c5747"
+dependencies = [
+ "static_assertions",
+]
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+
+[[package]]
+name = "libc"
+version = "0.2.155"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c"
+
+[[package]]
+name = "libgit2-sys"
+version = "0.17.0+1.8.1"
+source = "git+https://github.com/bnjmnt4n/git2-rs.git?rev=8fd23a45f#8fd23a45f4166d4e87debc02d9ba70ef601fe751"
+dependencies = [
+ "cc",
+ "libc",
+ "libz-sys",
+ "openssl-sys",
+ "pkg-config",
+]
+
+[[package]]
+name = "libredox"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d"
+dependencies = [
+ "bitflags 2.5.0",
+ "libc",
+]
+
+[[package]]
+name = "libz-sys"
+version = "1.1.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c15da26e5af7e25c90b37a2d75cdbf940cf4a55316de9d84c679c9b8bfabf82e"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "linked-hash-map"
+version = "0.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f"
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.4.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89"
+
+[[package]]
+name = "lock_api"
+version = "0.4.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17"
+dependencies = [
+ "autocfg",
+ "scopeguard",
+]
+
+[[package]]
+name = "log"
+version = "0.4.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c"
+
+[[package]]
+name = "lru"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3262e75e648fce39813cb56ac41f3c3e3f65217ebf3844d818d1f9398cfb0dc"
+dependencies = [
+ "hashbrown 0.14.5",
+]
+
+[[package]]
+name = "maplit"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d"
+
+[[package]]
+name = "matchers"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558"
+dependencies = [
+ "regex-automata 0.1.10",
+]
+
+[[package]]
+name = "memchr"
+version = "2.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3"
+
+[[package]]
+name = "memmap2"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fe751422e4a8caa417e13c3ea66452215d7d63e19e604f4980461212f3ae1322"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "minimal-lexical"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
+
+[[package]]
+name = "miniz_oxide"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08"
+dependencies = [
+ "adler",
+]
+
+[[package]]
+name = "minus"
+version = "5.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "093bd0520d2a37943566a73750e6d44094dac75d66a978d1f0d97ffc78686832"
+dependencies = [
+ "crossbeam-channel",
+ "crossterm",
+ "once_cell",
+ "parking_lot",
+ "regex",
+ "textwrap",
+ "thiserror",
+]
+
+[[package]]
+name = "mio"
+version = "0.8.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c"
+dependencies = [
+ "libc",
+ "log",
+ "wasi",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "multimap"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "defc4c55412d89136f966bbb339008b474350e5e6e78d2714439c386b3137a03"
+
+[[package]]
+name = "nom"
+version = "7.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
+dependencies = [
+ "memchr",
+ "minimal-lexical",
+]
+
+[[package]]
+name = "nu-ansi-term"
+version = "0.46.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84"
+dependencies = [
+ "overload",
+ "winapi",
+]
+
+[[package]]
+name = "num-conv"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9"
+
+[[package]]
+name = "num-traits"
+version = "0.2.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "num_cpus"
+version = "1.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43"
+dependencies = [
+ "hermit-abi",
+ "libc",
+]
+
+[[package]]
+name = "num_threads"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "object"
+version = "0.36.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "576dfe1fc8f9df304abb159d767a29d0476f7750fbf8aa7ad07816004a207434"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.19.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92"
+dependencies = [
+ "parking_lot_core",
+]
+
+[[package]]
+name = "oorandom"
+version = "11.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ab1bc2a289d34bd04a330323ac98a1b4bc82c9d9fcb1e66b63caa84da26b575"
+
+[[package]]
+name = "openssl-probe"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
+
+[[package]]
+name = "openssl-src"
+version = "300.3.1+3.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7259953d42a81bf137fbbd73bd30a8e1914d6dce43c2b90ed575783a22608b91"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "openssl-sys"
+version = "0.9.102"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c597637d56fbc83893a35eb0dd04b2b8e7a50c91e64e9493e398b5df4fb45fa2"
+dependencies = [
+ "cc",
+ "libc",
+ "openssl-src",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "option-ext"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d"
+
+[[package]]
+name = "overload"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39"
+
+[[package]]
+name = "parking_lot"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27"
+dependencies = [
+ "lock_api",
+ "parking_lot_core",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.9.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "redox_syscall 0.5.2",
+ "smallvec",
+ "windows-targets 0.52.5",
+]
+
+[[package]]
+name = "paste"
+version = "1.0.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a"
+
+[[package]]
+name = "pathdiff"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd"
+
+[[package]]
+name = "percent-encoding"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e"
+
+[[package]]
+name = "pest"
+version = "2.7.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cd53dff83f26735fdc1ca837098ccf133605d794cdae66acfc2bfac3ec809d95"
+dependencies = [
+ "memchr",
+ "thiserror",
+ "ucd-trie",
+]
+
+[[package]]
+name = "pest_derive"
+version = "2.7.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2a548d2beca6773b1c244554d36fcf8548a8a58e74156968211567250e48e49a"
+dependencies = [
+ "pest",
+ "pest_generator",
+]
+
+[[package]]
+name = "pest_generator"
+version = "2.7.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c93a82e8d145725dcbaf44e5ea887c8a869efdcc28706df2d08c69e17077183"
+dependencies = [
+ "pest",
+ "pest_meta",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "pest_meta"
+version = "2.7.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a941429fea7e08bedec25e4f6785b6ffaacc6b755da98df5ef3e7dcf4a124c4f"
+dependencies = [
+ "once_cell",
+ "pest",
+ "sha2",
+]
+
+[[package]]
+name = "petgraph"
+version = "0.6.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db"
+dependencies = [
+ "fixedbitset",
+ "indexmap",
+]
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02"
+
+[[package]]
+name = "pin-utils"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+
+[[package]]
+name = "pkg-config"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec"
+
+[[package]]
+name = "plotters"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a15b6eccb8484002195a3e44fe65a4ce8e93a625797a063735536fd59cb01cf3"
+dependencies = [
+ "num-traits",
+ "plotters-backend",
+ "plotters-svg",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "plotters-backend"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "414cec62c6634ae900ea1c56128dfe87cf63e7caece0852ec76aba307cebadb7"
+
+[[package]]
+name = "plotters-svg"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "81b30686a7d9c3e010b84284bdd26a29f2138574f52f5eb6f794fc0ad924e705"
+dependencies = [
+ "plotters-backend",
+]
+
+[[package]]
+name = "pollster"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "22686f4785f02a4fcc856d3b3bb19bf6c8160d103f7a99cc258bddd0251dc7f2"
+
+[[package]]
+name = "powerfmt"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391"
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
+
+[[package]]
+name = "predicates"
+version = "3.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68b87bfd4605926cdfefc1c3b5f8fe560e3feca9d5552cf68c466d3d8236c7e8"
+dependencies = [
+ "anstyle",
+ "difflib",
+ "predicates-core",
+]
+
+[[package]]
+name = "predicates-core"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b794032607612e7abeb4db69adb4e33590fa6cf1149e95fd7cb00e634b92f174"
+
+[[package]]
+name = "predicates-tree"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "368ba315fb8c5052ab692e68a0eefec6ec57b23a36959c14496f0b0df2c0cecf"
+dependencies = [
+ "predicates-core",
+ "termtree",
+]
+
+[[package]]
+name = "pretty_assertions"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af7cee1a6c8a5b9208b3cb1061f10c0cb689087b3d8ce85fb9d2dd7a29b6ba66"
+dependencies = [
+ "diff",
+ "yansi",
+]
+
+[[package]]
+name = "prettyplease"
+version = "0.2.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5f12335488a2f3b0a83b14edad48dca9879ce89b2edd10e80237e4e852dd645e"
+dependencies = [
+ "proc-macro2",
+ "syn",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.86"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "prodash"
+version = "28.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "744a264d26b88a6a7e37cbad97953fa233b94d585236310bcbc88474b4092d79"
+
+[[package]]
+name = "prost"
+version = "0.12.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "deb1435c188b76130da55f17a466d252ff7b1418b2ad3e037d127b94e3411f29"
+dependencies = [
+ "bytes",
+ "prost-derive",
+]
+
+[[package]]
+name = "prost-build"
+version = "0.12.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "22505a5c94da8e3b7c2996394d1c933236c4d743e81a410bcca4e6989fc066a4"
+dependencies = [
+ "bytes",
+ "heck",
+ "itertools 0.12.1",
+ "log",
+ "multimap",
+ "once_cell",
+ "petgraph",
+ "prettyplease",
+ "prost",
+ "prost-types",
+ "regex",
+ "syn",
+ "tempfile",
+]
+
+[[package]]
+name = "prost-derive"
+version = "0.12.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "81bddcdb20abf9501610992b6759a4c888aef7d1a7247ef75e2404275ac24af1"
+dependencies = [
+ "anyhow",
+ "itertools 0.12.1",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "prost-types"
+version = "0.12.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9091c90b0a32608e984ff2fa4091273cbdd755d54935c51d520887f4a1dbd5b0"
+dependencies = [
+ "prost",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.36"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "rand"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
+dependencies = [
+ "libc",
+ "rand_chacha",
+ "rand_core",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
+dependencies = [
+ "ppv-lite86",
+ "rand_core",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "ratatui"
+version = "0.26.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f44c9e68fd46eda15c646fbb85e1040b657a58cdc8c98db1d97a55930d991eef"
+dependencies = [
+ "bitflags 2.5.0",
+ "cassowary",
+ "compact_str",
+ "crossterm",
+ "itertools 0.12.1",
+ "lru",
+ "paste",
+ "stability",
+ "strum",
+ "unicode-segmentation",
+ "unicode-truncate",
+ "unicode-width",
+]
+
+[[package]]
+name = "rayon"
+version = "1.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa"
+dependencies = [
+ "either",
+ "rayon-core",
+]
+
+[[package]]
+name = "rayon-core"
+version = "1.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2"
+dependencies = [
+ "crossbeam-deque",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c82cf8cff14456045f55ec4241383baeff27af886adb72ffb2162f99911de0fd"
+dependencies = [
+ "bitflags 2.5.0",
+]
+
+[[package]]
+name = "redox_users"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd283d9651eeda4b2a83a43c1c91b266c40fd76ecd39a50a8c630ae69dc72891"
+dependencies = [
+ "getrandom",
+ "libredox",
+ "thiserror",
+]
+
+[[package]]
+name = "ref-cast"
+version = "1.0.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ccf0a6f84d5f1d581da8b41b47ec8600871962f2a528115b542b362d4b744931"
+dependencies = [
+ "ref-cast-impl",
+]
+
+[[package]]
+name = "ref-cast-impl"
+version = "1.0.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bcc303e793d3734489387d205e9b186fac9c6cfacedd98cbb2e8a5943595f3e6"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "regex"
+version = "1.10.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b91213439dad192326a0d7c6ee3955910425f441d7038e0d6933b0aec5c4517f"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-automata 0.4.7",
+ "regex-syntax 0.8.4",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132"
+dependencies = [
+ "regex-syntax 0.6.29",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.4.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax 0.8.4",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.6.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1"
+
+[[package]]
+name = "regex-syntax"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b"
+
+[[package]]
+name = "roff"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b833d8d034ea094b1ea68aa6d5c740e0d04bad9d16568d08ba6f76823a114316"
+
+[[package]]
+name = "rpassword"
+version = "7.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "80472be3c897911d0137b2d2b9055faf6eeac5b14e324073d83bc17b191d7e3f"
+dependencies = [
+ "libc",
+ "rtoolbox",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "rtoolbox"
+version = "0.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c247d24e63230cdb56463ae328478bd5eac8b8faa8c69461a77e8e323afac90e"
+dependencies = [
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "rustc-demangle"
+version = "0.1.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f"
+
+[[package]]
+name = "rustix"
+version = "0.38.34"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f"
+dependencies = [
+ "bitflags 2.5.0",
+ "errno",
+ "libc",
+ "linux-raw-sys",
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "rustversion"
+version = "1.0.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6"
+
+[[package]]
+name = "ryu"
+version = "1.0.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f"
+
+[[package]]
+name = "same-file"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "scm-record"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4a1bf431016c7a34038f440696c672f0fee1a15d6aea31fe100df6974a35bf5f"
+dependencies = [
+ "cassowary",
+ "crossterm",
+ "num-traits",
+ "ratatui",
+ "serde",
+ "serde_json",
+ "thiserror",
+ "tracing",
+ "unicode-width",
+]
+
+[[package]]
+name = "scopeguard"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
+
+[[package]]
+name = "semver"
+version = "1.0.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "serde"
+version = "1.0.204"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bc76f558e0cbb2a839d37354c575f1dc3fdc6546b5be373ba43d95f231bf7c12"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_bser"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a56b4bcc15e42e5b5ae16c6f75582bef80d36c6ffe2c03b1b5317754b38f8717"
+dependencies = [
+ "anyhow",
+ "byteorder",
+ "bytes",
+ "serde",
+ "serde_bytes",
+ "thiserror",
+]
+
+[[package]]
+name = "serde_bytes"
+version = "0.11.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b8497c313fd43ab992087548117643f6fcd935cbf36f176ffda0aacf9591734"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.204"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e0cd7e117be63d3c3678776753929474f3b04a43a080c744d6b0ae2a8c28e222"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.120"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4e0d21c9a8cae1235ad58a00c11cb40d4b1e5c784f1ef2c537876ed6ffd8b7c5"
+dependencies = [
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_spanned"
+version = "0.6.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "79e674e01f999af37c49f70a6ede167a8a60b2503e56c5599532a65baa5969a0"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "sha1_smol"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae1a47186c03a32177042e55dbc5fd5aee900b8e0069a8d70fba96a9375cd012"
+
+[[package]]
+name = "sha2"
+version = "0.10.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "digest",
+]
+
+[[package]]
+name = "sharded-slab"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6"
+dependencies = [
+ "lazy_static",
+]
+
+[[package]]
+name = "shell-words"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "24188a676b6ae68c3b2cb3a01be17fbf7240ce009799bb56d5b1409051e78fde"
+
+[[package]]
+name = "signal-hook"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8621587d4798caf8eb44879d42e56b9a93ea5dcd315a6487c357130095b62801"
+dependencies = [
+ "libc",
+ "signal-hook-registry",
+]
+
+[[package]]
+name = "signal-hook-mio"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "29ad2e15f37ec9a6cc544097b78a1ec90001e9f71b81338ca39f430adaca99af"
+dependencies = [
+ "libc",
+ "mio",
+ "signal-hook",
+]
+
+[[package]]
+name = "signal-hook-registry"
+version = "1.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "similar"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fa42c91313f1d05da9b26f267f931cf178d4aba455b4c4622dd7355eb80c6640"
+
+[[package]]
+name = "slab"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "smallvec"
+version = "1.13.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67"
+
+[[package]]
+name = "smawk"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b7c388c1b5e93756d0c740965c41e8822f866621d41acbdf6336a6a168f8840c"
+
+[[package]]
+name = "socket2"
+version = "0.5.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c"
+dependencies = [
+ "libc",
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "stability"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2ff9eaf853dec4c8802325d8b6d3dffa86cc707fd7a1a4cdbf416e13b061787a"
+dependencies = [
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "static_assertions"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
+
+[[package]]
+name = "strsim"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f"
+
+[[package]]
+name = "strum"
+version = "0.26.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5d8cec3501a5194c432b2b7976db6b7d10ec95c253208b45f83f7136aa985e29"
+dependencies = [
+ "strum_macros",
+]
+
+[[package]]
+name = "strum_macros"
+version = "0.26.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be"
+dependencies = [
+ "heck",
+ "proc-macro2",
+ "quote",
+ "rustversion",
+ "syn",
+]
+
+[[package]]
+name = "subtle"
+version = "2.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292"
+
+[[package]]
+name = "syn"
+version = "2.0.70"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2f0209b68b3613b093e0ec905354eccaedcfe83b8cb37cbdeae64026c3064c16"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "tempfile"
+version = "3.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1"
+dependencies = [
+ "cfg-if",
+ "fastrand",
+ "rustix",
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "terminal_size"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "21bebf2b7c9e0a515f6e0f8c51dc0f8e4696391e6f1ff30379559f8365fb0df7"
+dependencies = [
+ "rustix",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "termtree"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3369f5ac52d5eb6ab48c6b4ffdc8efbcad6b89c765749064ba298f2c68a16a76"
+
+[[package]]
+name = "test-case"
+version = "3.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eb2550dd13afcd286853192af8601920d959b14c401fcece38071d53bf0768a8"
+dependencies = [
+ "test-case-macros",
+]
+
+[[package]]
+name = "test-case-core"
+version = "3.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "adcb7fd841cd518e279be3d5a3eb0636409487998a4aff22f3de87b81e88384f"
+dependencies = [
+ "cfg-if",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "test-case-macros"
+version = "3.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c89e72a01ed4c579669add59014b9a524d609c0c88c6a585ce37485879f6ffb"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+ "test-case-core",
+]
+
+[[package]]
+name = "testutils"
+version = "0.19.0"
+dependencies = [
+ "async-trait",
+ "config",
+ "futures 0.3.30",
+ "git2",
+ "hex",
+ "itertools 0.12.1",
+ "jj-lib",
+ "rand",
+ "tempfile",
+]
+
+[[package]]
+name = "textwrap"
+version = "0.16.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23d434d3f8967a09480fb04132ebe0a3e088c173e6d0ee7897abbdf4eab0f8b9"
+dependencies = [
+ "smawk",
+ "unicode-linebreak",
+ "unicode-width",
+]
+
+[[package]]
+name = "thiserror"
+version = "1.0.61"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c546c80d6be4bc6a00c0f01730c08df82eaa7a7a61f11d656526506112cc1709"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.61"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "46c3384250002a6d5af4d114f2845d37b57521033f30d5c3f46c4d70e1197533"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "thread_local"
+version = "1.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c"
+dependencies = [
+ "cfg-if",
+ "once_cell",
+]
+
+[[package]]
+name = "time"
+version = "0.3.36"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885"
+dependencies = [
+ "deranged",
+ "itoa",
+ "libc",
+ "num-conv",
+ "num_threads",
+ "powerfmt",
+ "serde",
+ "time-core",
+ "time-macros",
+]
+
+[[package]]
+name = "time-core"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3"
+
+[[package]]
+name = "time-macros"
+version = "0.2.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf"
+dependencies = [
+ "num-conv",
+ "time-core",
+]
+
+[[package]]
+name = "timeago"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1710e589de0a76aaf295cd47a6699f6405737dbfd3cf2b75c92d000b548d0e6"
+
+[[package]]
+name = "tinytemplate"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be4d6b5f19ff7664e8c98d03e2139cb510db9b0a60b55f8e8709b689d939b6bc"
+dependencies = [
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "tinyvec"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50"
+dependencies = [
+ "tinyvec_macros",
+]
+
+[[package]]
+name = "tinyvec_macros"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
+
+[[package]]
+name = "tokio"
+version = "1.38.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ba4f4a02a7a80d6f274636f0aa95c7e383b912d41fe721a31f29e29698585a4a"
+dependencies = [
+ "backtrace",
+ "bytes",
+ "libc",
+ "mio",
+ "num_cpus",
+ "parking_lot",
+ "pin-project-lite",
+ "signal-hook-registry",
+ "socket2",
+ "tokio-macros",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "tokio-macros"
+version = "2.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5f5ae998a069d4b5aba8ee9dad856af7d520c3699e6159b185c2acd48155d39a"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "tokio-util"
+version = "0.6.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "36943ee01a6d67977dd3f84a5a1d2efeb4ada3a1ae771cadfaa535d9d9fc6507"
+dependencies = [
+ "bytes",
+ "futures-core",
+ "futures-io",
+ "futures-sink",
+ "log",
+ "pin-project-lite",
+ "slab",
+ "tokio",
+]
+
+[[package]]
+name = "toml"
+version = "0.5.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "toml_datetime"
+version = "0.6.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4badfd56924ae69bcc9039335b2e017639ce3f9b001c393c1b2d1ef846ce2cbf"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "toml_edit"
+version = "0.19.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421"
+dependencies = [
+ "indexmap",
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+ "winnow 0.5.40",
+]
+
+[[package]]
+name = "tracing"
+version = "0.1.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef"
+dependencies = [
+ "pin-project-lite",
+ "tracing-attributes",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-attributes"
+version = "0.1.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "tracing-chrome"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bf0a738ed5d6450a9fb96e86a23ad808de2b727fd1394585da5cdd6788ffe724"
+dependencies = [
+ "serde_json",
+ "tracing-core",
+ "tracing-subscriber",
+]
+
+[[package]]
+name = "tracing-core"
+version = "0.1.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54"
+dependencies = [
+ "once_cell",
+ "valuable",
+]
+
+[[package]]
+name = "tracing-log"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3"
+dependencies = [
+ "log",
+ "once_cell",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-subscriber"
+version = "0.3.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b"
+dependencies = [
+ "matchers",
+ "nu-ansi-term",
+ "once_cell",
+ "regex",
+ "sharded-slab",
+ "smallvec",
+ "thread_local",
+ "tracing",
+ "tracing-core",
+ "tracing-log",
+]
+
+[[package]]
+name = "typenum"
+version = "1.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825"
+
+[[package]]
+name = "ucd-trie"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed646292ffc8188ef8ea4d1e0e0150fb15a5c2e12ad9b8fc191ae7a8a7f3c4b9"
+
+[[package]]
+name = "uluru"
+version = "3.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7c8a2469e56e6e5095c82ccd3afb98dad95f7af7929aab6d8ba8d6e0f73657da"
+dependencies = [
+ "arrayvec",
+]
+
+[[package]]
+name = "unicode-bidi"
+version = "0.3.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75"
+
+[[package]]
+name = "unicode-bom"
+version = "2.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7eec5d1121208364f6793f7d2e222bf75a915c19557537745b195b253dd64217"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
+
+[[package]]
+name = "unicode-linebreak"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3b09c83c3c29d37506a3e260c08c03743a6bb66a9cd432c6934ab501a190571f"
+
+[[package]]
+name = "unicode-normalization"
+version = "0.1.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5"
+dependencies = [
+ "tinyvec",
+]
+
+[[package]]
+name = "unicode-segmentation"
+version = "1.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202"
+
+[[package]]
+name = "unicode-truncate"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a5fbabedabe362c618c714dbefda9927b5afc8e2a8102f47f081089a9019226"
+dependencies = [
+ "itertools 0.12.1",
+ "unicode-width",
+]
+
+[[package]]
+name = "unicode-width"
+version = "0.1.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0336d538f7abc86d282a4189614dfaa90810dfc2c6f6427eaf88e16311dd225d"
+
+[[package]]
+name = "url"
+version = "2.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "22784dbdf76fdde8af1aeda5622b546b422b6fc585325248a2bf9f5e41e94d6c"
+dependencies = [
+ "form_urlencoded",
+ "idna",
+ "percent-encoding",
+]
+
+[[package]]
+name = "utf8parse"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821"
+
+[[package]]
+name = "valuable"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d"
+
+[[package]]
+name = "vcpkg"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
+
+[[package]]
+name = "version_check"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+
+[[package]]
+name = "wait-timeout"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9f200f5b12eb75f8c1ed65abd4b2db8a6e1b138a20de009dacee265a2498f3f6"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "walkdir"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b"
+dependencies = [
+ "same-file",
+ "winapi-util",
+]
+
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "wasite"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b"
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.92"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8"
+dependencies = [
+ "cfg-if",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.92"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da"
+dependencies = [
+ "bumpalo",
+ "log",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "syn",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.92"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.92"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.92"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96"
+
+[[package]]
+name = "watchman_client"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "88bc4c9bb443a7aae10d4fa7807bffc397805315e2305288c90c80e2f66cfb52"
+dependencies = [
+ "anyhow",
+ "bytes",
+ "futures 0.3.30",
+ "maplit",
+ "serde",
+ "serde_bser",
+ "thiserror",
+ "tokio",
+ "tokio-util",
+ "winapi",
+]
+
+[[package]]
+name = "web-sys"
+version = "0.3.69"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "whoami"
+version = "1.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a44ab49fad634e88f55bf8f9bb3abd2f27d7204172a112c7c9987e01c1c94ea9"
+dependencies = [
+ "redox_syscall 0.4.1",
+ "wasite",
+ "web-sys",
+]
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-util"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4d4cc384e1e73b93bafa6fb4f1df8c41695c8a91cf9c4c64358067d15a7b6c6b"
+dependencies = [
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "windows-core"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9"
+dependencies = [
+ "windows-targets 0.52.5",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+dependencies = [
+ "windows-targets 0.48.5",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
+dependencies = [
+ "windows-targets 0.52.5",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
+dependencies = [
+ "windows_aarch64_gnullvm 0.48.5",
+ "windows_aarch64_msvc 0.48.5",
+ "windows_i686_gnu 0.48.5",
+ "windows_i686_msvc 0.48.5",
+ "windows_x86_64_gnu 0.48.5",
+ "windows_x86_64_gnullvm 0.48.5",
+ "windows_x86_64_msvc 0.48.5",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.52.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb"
+dependencies = [
+ "windows_aarch64_gnullvm 0.52.5",
+ "windows_aarch64_msvc 0.52.5",
+ "windows_i686_gnu 0.52.5",
+ "windows_i686_gnullvm",
+ "windows_i686_msvc 0.52.5",
+ "windows_x86_64_gnu 0.52.5",
+ "windows_x86_64_gnullvm 0.52.5",
+ "windows_x86_64_msvc 0.52.5",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.52.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.52.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.52.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "88ba073cf16d5372720ec942a8ccbf61626074c6d4dd2e745299726ce8b89670"
+
+[[package]]
+name = "windows_i686_gnullvm"
+version = "0.52.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.52.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.52.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.52.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.52.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0"
+
+[[package]]
+name = "winnow"
+version = "0.5.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "winnow"
+version = "0.6.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "59b5e5f6c299a3c7890b876a2a587f3115162487e704907d9b6cd29473052ba1"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "winreg"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a277a57398d4bfa075df44f501a17cfdf8542d224f0d36095a2adc7aee4ef0a5"
+dependencies = [
+ "cfg-if",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "yansi"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec"
+
+[[package]]
+name = "zerocopy"
+version = "0.7.34"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae87e3fcd617500e5d106f0380cf7b77f3c6092aae37191433159dda23cfb087"
+dependencies = [
+ "zerocopy-derive",
+]
+
+[[package]]
+name = "zerocopy-derive"
+version = "0.7.34"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "15e934569e47891f7d9411f1a451d947a60e000ab3bd24fbb970f000387d1b3b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "zstd"
+version = "0.12.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a27595e173641171fc74a1232b7b1c7a7cb6e18222c11e9dfb9888fa424c53c"
+dependencies = [
+ "zstd-safe",
+]
+
+[[package]]
+name = "zstd-safe"
+version = "6.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ee98ffd0b48ee95e6c5168188e44a54550b1564d9d530ee21d5f0eaed1069581"
+dependencies = [
+ "libc",
+ "zstd-sys",
+]
+
+[[package]]
+name = "zstd-sys"
+version = "2.0.11+zstd.1.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75652c55c0b6f3e6f12eb786fe1bc960396bf05a1eb3bf1f3691c3610ac2e6d4"
+dependencies = [
+ "cc",
+ "pkg-config",
+]
diff --git a/pkgs/jujutsu-openssh/default.nix b/pkgs/jujutsu-openssh/default.nix
new file mode 100644
index 0000000..a5cee1e
--- /dev/null
+++ b/pkgs/jujutsu-openssh/default.nix
@@ -0,0 +1,90 @@
+{
+ lib,
+ fetchFromGitHub,
+ rustPlatform,
+ pkg-config,
+ openssl,
+ gzip,
+ libgit2,
+ openssh,
+ zstd,
+ installShellFiles,
+ nix-update-script,
+ testers,
+ jujutsu-openssh,
+}:
+
+rustPlatform.buildRustPackage rec {
+ pname = "jujutsu-openssh";
+ version = "0.19.0+pr3191.openssh";
+
+ src = fetchFromGitHub {
+ owner = "martinvonz";
+ repo = "jj";
+ rev = "f97577cf3f8da3f8cba40bb908a21d5b932cf68f"; # https://github.com/martinvonz/jj/pull/3191/commits
+ hash = "sha256-njRXH1JGBflIPU8nWPawjVEbqXm+zCITjI7EIcpVt84=";
+ };
+
+ # cargoHash = "";
+ cargoLock.lockFile = ./Cargo.lock;
+ cargoLock.outputHashes = {
+ "git2-0.18.3" = "sha256-3g7ajPfLfuPWh46rIa70wQRWLZ+jZXBApkyPlJULi/I=";
+ };
+
+ cargoBuildFlags = [
+ "--bin"
+ "jj"
+ ]; # don't install the fake editors
+ useNextest = false; # nextest is the upstream integration framework, but is problematic for test skipping
+ ZSTD_SYS_USE_PKG_CONFIG = "1"; # disable vendored zlib
+
+ nativeBuildInputs = [
+ gzip
+ installShellFiles
+ pkg-config
+ ];
+
+ buildInputs = [
+ openssl
+ zstd
+ libgit2
+ openssh
+ ];
+
+ postInstall = ''
+ $out/bin/jj util mangen > ./jj.1
+ installManPage ./jj.1
+
+ installShellCompletion --cmd jj \
+ --bash <($out/bin/jj util completion bash) \
+ --fish <($out/bin/jj util completion fish) \
+ --zsh <($out/bin/jj util completion zsh)
+ '';
+
+ checkFlags = [
+ # signing tests spin up an ssh-agent and do git checkouts
+ "--skip=test_ssh_signing"
+ ];
+
+ passthru = {
+ updateScript = nix-update-script { };
+ tests = {
+ version = testers.testVersion {
+ package = jujutsu-openssh;
+ command = "jj --version";
+ };
+ };
+ };
+
+ meta = with lib; {
+ description = "Git-compatible DVCS that is both simple and powerful";
+ homepage = "https://github.com/martinvonz/jj";
+ changelog = "https://github.com/martinvonz/jj/blob/v${version}/CHANGELOG.md";
+ license = licenses.asl20;
+ maintainers = with maintainers; [
+ _0x4A6F
+ thoughtpolice
+ ];
+ mainProgram = "jj";
+ };
+}
diff --git a/pkgs/lazyjj/default.nix b/pkgs/lazyjj/default.nix
new file mode 100644
index 0000000..cf68629
--- /dev/null
+++ b/pkgs/lazyjj/default.nix
@@ -0,0 +1,29 @@
+{
+ stdenvNoCC,
+ fetchzip,
+}: let
+ version = "0.2.1";
+in
+ stdenvNoCC.mkDerivation {
+ name = "lazyjj";
+ inherit version;
+
+ src = fetchzip {
+ url = "https://github.com/Cretezy/lazyjj/releases/download/v0.2.1/lazyjj-v0.2.1-x86_64-unknown-linux-musl.tar.gz";
+ hash = "sha256-yMfGWuzsl94elFxRvGaLA61KBopBnBT3j5pxbCrKl0w=";
+ };
+
+ installPhase = ''
+ runHook preInstall
+ mkdir -p $out/bin
+ install -m755 -D $src/lazyjj $out/bin/lazyjj
+ runHook postInstall
+ '';
+
+ meta = {
+ homepage = "https://github.com/Cretezy/lazyjj";
+ description = "TUI for jj";
+ mainProgram = "lazyjj";
+ platforms = ["x86_64-linux"];
+ };
+ }
diff --git a/users/dln/desktop.nix b/users/dln/desktop.nix
new file mode 100644
index 0000000..7b80912
--- /dev/null
+++ b/users/dln/desktop.nix
@@ -0,0 +1,67 @@
+{ pkgs, ... }:
+{
+ shelman = {
+ desktop.enable = true;
+ };
+
+ home.packages = with pkgs; [
+ audacity
+ bitwig-studio
+ dynamic-wallpaper
+ gimp-with-plugins
+ helvum
+ inkscape
+ moonlight-qt
+ obsidian
+ pavucontrol
+ plexamp
+ reaper
+ signal-desktop
+ ];
+
+ xdg.desktopEntries = {
+ firefox-work = {
+ categories = [
+ "Network"
+ "WebBrowser"
+ ];
+ comment = "Browse the Web";
+ exec = "firefox %u -P work --new-instance --name firefox-work";
+ genericName = "Web Browser";
+ icon = "firefox";
+ mimeType = [
+ "text/html"
+ "text/xml"
+ "application/xhtml+xml"
+ "application/vnd.mozilla.xul+xml"
+ "text/mml"
+ "x-scheme-handler/http"
+ "x-scheme-handler/https"
+ ];
+ name = "Firefox (Work)";
+ settings = {
+ StartupWMClass = "firefox-work";
+ Keywords = "web;browser;internet";
+ };
+ terminal = false;
+ type = "Application";
+ };
+
+ wezterm-nemo = {
+ categories = [
+ "System"
+ "TerminalEmulator"
+ ];
+ exec = "wezterm start --class=org.wezfurlong.wezterm-nemo --domain=nemo";
+ genericName = "wezterm-nemo";
+ icon = "org.wezfurlong.wezterm";
+ name = "wezterm-nemo";
+ settings = {
+ StartupWMClass = "org.wezfurlong.wezterm-nemo";
+ TryExec = "wezterm";
+ };
+ terminal = false;
+ type = "Application";
+ };
+ };
+}
diff --git a/users/dln/dinky.nix b/users/dln/dinky.nix
new file mode 100644
index 0000000..c31bbae
--- /dev/null
+++ b/users/dln/dinky.nix
@@ -0,0 +1,14 @@
+{ ... }:
+{
+ imports = [
+ ./home.nix
+ ./desktop.nix
+ ];
+
+ dconf.settings = {
+ "org/gnome/shell" = {
+ enabled-extensions = [ "Battery-Health-Charging@maniacx.github.com" ];
+ };
+ };
+
+}
diff --git a/users/dln/home.nix b/users/dln/home.nix
new file mode 100644
index 0000000..495944b
--- /dev/null
+++ b/users/dln/home.nix
@@ -0,0 +1,140 @@
+{ pkgs, ... }:
+let
+ realName = "Daniel Lundin";
+ email = "dln@arity.se";
+in
+{
+ home = {
+ username = "dln";
+ homeDirectory = "/home/dln";
+ packages = with pkgs; [
+ openconnect
+ ouch
+ ];
+ };
+
+ programs.atuin.settings = {
+ cwd_filter = [
+ "^~/media"
+ "^/home/dln/media"
+ ];
+ };
+
+ programs.git = {
+ userName = realName;
+ userEmail = email;
+ };
+
+ programs.jujutsu = {
+ settings = {
+ user = {
+ email = email;
+ name = realName;
+ };
+
+ signing = {
+ sign-all = true;
+ backend = "ssh";
+ backends.ssh.allowed-signers = "/home/dln/.ssh/authorized_keys";
+ key = "/home/dln/.ssh/git_signing_key.pub";
+ };
+
+ ui = {
+ "default-command" = [
+ "log"
+ "--limit=20"
+ "--template=builtin_log_comfortable"
+ ];
+
+ pager = "bat";
+ };
+
+ "merge-tools" = {
+ difft."diff-args" = [
+ "--color=always"
+ "$left"
+ "$right"
+ ];
+ };
+
+ aliases = {
+ l = [
+ "log"
+ "-T"
+ "builtin_log_comfortable"
+ "-r"
+ "(main..@) | (main..@)-"
+ ];
+ la = [
+ "log"
+ "-T"
+ "builtin_log_oneline"
+ "-r"
+ "all()"
+ ];
+ b = [
+ "branch"
+ "list"
+ ];
+ n = [
+ "new"
+ "main"
+ ];
+ d = [ "diff" ];
+ s = [ "show" ];
+ sh = [
+ "show"
+ "--tool=difft"
+ ];
+ };
+
+ "revset-aliases" = {
+ # Prevent rewriting commits on main@origin and commits authored by other users;
+ "immutable_heads()" = "main@origin | (main@origin.. & ~mine())";
+ "user(x)" = "author(x) | committer(x)";
+ "trunk()" = "latest((present(main) | present(master)) & remote_branches())";
+ "open" = "(mine() ~ ::trunk()) ~ heads(empty())";
+ "wip" = ''description("wip: ")'';
+ "ready" = "open() ~ (wip::)";
+ };
+
+ colors = {
+ "commit_id prefix" = {
+ bold = true;
+ };
+ "diff token" = {
+ underline = false;
+ };
+ };
+ };
+ };
+
+ programs.ssh.matchBlocks = {
+ dev = {
+ hostname = "10.1.100.16";
+ };
+
+ nemo = {
+ hostname = "10.1.100.20";
+ forwardAgent = true;
+ localForwards = [
+ {
+ bind.address = "localhost";
+ bind.port = 8000;
+ host.address = "localhost";
+ host.port = 8000;
+ }
+ {
+ bind.address = "localhost";
+ bind.port = 8080;
+ host.address = "localhost";
+ host.port = 8080;
+ }
+ ];
+ };
+ };
+
+ services.syncthing.enable = true;
+
+ home.stateVersion = "24.05"; # https://nixos.wiki/wiki/FAQ/When_do_I_update_stateVersion
+}
diff --git a/users/dln/nemo.nix b/users/dln/nemo.nix
new file mode 100644
index 0000000..49687bb
--- /dev/null
+++ b/users/dln/nemo.nix
@@ -0,0 +1,9 @@
+{ ... }:
+{
+ imports = [
+ ./home.nix
+ ./desktop.nix
+ ];
+
+ # Host specific user config goes here
+}
diff --git a/users/lsjostro/home.nix b/users/lsjostro/home.nix
new file mode 100644
index 0000000..f1d8a4d
--- /dev/null
+++ b/users/lsjostro/home.nix
@@ -0,0 +1,40 @@
+{ pkgs, ... }:
+{
+ home = {
+ username = "lsjostro";
+ homeDirectory = "/home/lsjostro";
+ packages = with pkgs; [ openconnect ];
+ };
+
+ programs.git = {
+ userName = "Lars Sjöstrom";
+ userEmail = "lars@radicore.se";
+ };
+
+ programs.ssh.matchBlocks = {
+ dev = {
+ hostname = "10.1.100.17";
+ };
+
+ nemo = {
+ hostname = "10.1.100.20";
+ forwardAgent = true;
+ localForwards = [
+ {
+ bind.address = "localhost";
+ bind.port = 8000;
+ host.address = "localhost";
+ host.port = 8000;
+ }
+ {
+ bind.address = "localhost";
+ bind.port = 8080;
+ host.address = "localhost";
+ host.port = 8080;
+ }
+ ];
+ };
+ };
+
+ home.stateVersion = "24.05"; # https://nixos.wiki/wiki/FAQ/When_do_I_update_stateVersion
+}
diff --git a/users/lsjostro/nemo.nix b/users/lsjostro/nemo.nix
new file mode 100644
index 0000000..0de2f39
--- /dev/null
+++ b/users/lsjostro/nemo.nix
@@ -0,0 +1,6 @@
+{ ... }:
+{
+ imports = [ ./home.nix ];
+
+ # Host specific user config goes here
+}