6 Commits

Author SHA1 Message Date
1a9bfb612a potd 2025-09-11 15:14:17 +02:00
ac48910f5e 🔤 Update README with instructions for setting up dotfiles on termux 2024-02-28 14:20:28 +01:00
4a6a47950f 🐛 source complete_alias 2024-02-28 14:10:14 +01:00
361beea62b completition 2024-02-28 14:06:02 +01:00
c7193de91f gitdotfiles 2024-02-28 12:52:58 +01:00
fba5b40824 Termux variant 2024-02-28 12:48:12 +01:00
168 changed files with 1038 additions and 11683 deletions

View File

@@ -1,84 +0,0 @@
# jaandrle customizations
include "/usr/share/X11/locale/cs_CZ.UTF-8/Compose" # Include Czech locale Compose file
<Multi_key> <backslash> <space> : "" U202F # Thin non-breaking space
<Multi_key> <bar> <space> : "" U200B # Zero-width space
<Multi_key> <8> <8> : "∞" U221E # Infinity symbol
<Multi_key> <equal> <equal>: "≡" # Triple equals (identical to)
<Multi_key> <asciitilde> <asciitilde>: "≈" # Almost equal to
<Multi_key> <equal> <asciitilde>: "≃" # Asymptotically equal to
<Multi_key> <asterisk> <asterisk>: "★" # Black star
<Multi_key> <c> <h> <e> <c> <k> : "✓" # Check mark
<Multi_key> <c> <r> <o> <s> <s> : "✗" # Ballot X (cross mark)
# Arrows (numeric keypad and number row)
<Multi_key> <a> <minus> <8> : "↑" # Up arrow (numeric keypad)
<Multi_key> <a> <minus> <6> : "→" # Right arrow (numeric keypad)
<Multi_key> <a> <minus> <2> : "↓" # Down arrow (numeric keypad)
<Multi_key> <a> <minus> <4> : "←" # Left arrow (numeric keypad)
<Multi_key> <a> <minus> <5> : "↔" # Left-right arrow (numeric keypad)
<Multi_key> <a> <minus> <7> : "↖" # Up-left arrow (numeric keypad)
<Multi_key> <a> <minus> <9> : "↗" # Up-right arrow (numeric keypad)
<Multi_key> <a> <minus> <3> : "↘" # Down-right arrow (numeric keypad)
<Multi_key> <a> <minus> <1> : "↙" # Down-left arrow (numeric keypad)
<Multi_key> <a> <minus> <KP_8> : "↑" # Up arrow (numeric keypad)
<Multi_key> <a> <minus> <KP_6> : "→" # Right arrow (numeric keypad)
<Multi_key> <a> <minus> <KP_2> : "↓" # Down arrow (numeric keypad)
<Multi_key> <a> <minus> <KP_4> : "←" # Left arrow (numeric keypad)
<Multi_key> <a> <minus> <KP_5> : "↔" # Left-right arrow (numeric keypad)
<Multi_key> <a> <minus> <KP_7> : "↖" # Up-left arrow (numeric keypad)
<Multi_key> <a> <minus> <KP_9> : "↗" # Up-right arrow (numeric keypad)
<Multi_key> <a> <minus> <KP_3> : "↘" # Down-right arrow (numeric keypad)
<Multi_key> <a> <minus> <KP_1> : "↙" # Down-left arrow (numeric keypad)
# Double-arrows (numeric keypad and number row)
<Multi_key> <a> <equal> <8> : "⇑" # Double up arrow (numeric keypad)
<Multi_key> <a> <equal> <6> : "⇒" # Double right arrow (numeric keypad)
<Multi_key> <a> <equal> <2> : "⇓" # Double down arrow (numeric keypad)
<Multi_key> <a> <equal> <4> : "⇐" # Double left arrow (numeric keypad)
<Multi_key> <a> <equal> <5> : "⇔" # Double left-right arrow (numeric keypad)
<Multi_key> <a> <equal> <KP_8> : "⇑" # Double up arrow (numeric keypad)
<Multi_key> <a> <equal> <KP_6> : "⇒" # Double right arrow (numeric keypad)
<Multi_key> <a> <equal> <KP_2> : "⇓" # Double down arrow (numeric keypad)
<Multi_key> <a> <equal> <KP_4> : "⇐" # Double left arrow (numeric keypad)
<Multi_key> <a> <equal> <KP_5> : "⇔" # Double left-right arrow (numeric keypad)
# Greek letters (lowercase)
<Multi_key> <g> <a> : "α" # Alpha (greek letter lowercase)
<Multi_key> <g> <b> : "β" # Beta (greek letter lowercase)
<Multi_key> <g> <g> : "γ" # Gamma (greek letter lowercase)
<Multi_key> <g> <d> : "δ" # Delta (greek letter lowercase)
<Multi_key> <g> <3> : "ε" # Epsilon (greek letter lowercase)
<Multi_key> <g> <z> : "ζ" # Zeta (greek letter lowercase)
<Multi_key> <g> <e> : "η" # Eta (greek letter lowercase)
<Multi_key> <g> <h> : "θ" # Theta (greek letter lowercase)
<Multi_key> <g> <i> : "ι" # Iota (greek letter lowercase)
<Multi_key> <g> <k> : "κ" # Kappa (greek letter lowercase)
<Multi_key> <g> <l> : "λ" # Lambda (greek letter lowercase)
<Multi_key> <g> <m> : "μ" # Mu (greek letter lowercase)
<Multi_key> <g> <n> : "ν" # Nu (greek letter lowercase)
<Multi_key> <g> <x> : "ξ" # Xi (greek letter lowercase)
# note: no omicron (greek letter lowercase)
<Multi_key> <g> <p> : "π" # Pi (greek letter lowercase)
<Multi_key> <g> <p> : "Ϟ" # Koppa/Pi (greek letter lowercase)
<Multi_key> <g> <r> : "ρ" # Rho (greek letter lowercase)
<Multi_key> <g> <s> : "σ" # Sigma (greek letter lowercase)
<Multi_key> <g> <t> : "τ" # Tau (greek letter lowercase)
<Multi_key> <g> <u> : "ψ" # Psi (greek letter lowercase)
<Multi_key> <g> <f> : "φ" # Phi (greek letter lowercase)
<Multi_key> <g> <c> : "χ" # Chi (greek letter lowercase)
<Multi_key> <g> <o> : "ω" # Omega (greek letter lowercase)
# Greek letters (uppercase)
<Multi_key> <g> <G> : "Γ" # Gamma (greek letter uppercase)
<Multi_key> <g> <D> : "Δ" # Delta (greek letter uppercase)
<Multi_key> <g> <H> : "Θ" # Theta (greek letter uppercase)
<Multi_key> <g> <L> : "Λ" # Lambda (greek letter uppercase)
<Multi_key> <g> <X> : "Ξ" # Xi (greek letter uppercase)
<Multi_key> <g> <P> : "Π" # Pi (greek letter uppercase)
<Multi_key> <g> <S> : "Σ" # Sigma (greek letter uppercase)
<Multi_key> <g> <F> : "Φ" # Phi (greek letter uppercase)
<Multi_key> <g> <U> : "Ψ" # Psi (greek letter uppercase)
<Multi_key> <g> <O> : "Ω" # Omega (greek letter uppercase)
# Math (https://gist.github.com/m93a/187539552593dd4ed8b122167c09384c)
<Multi_key> <m> <E> : "∃" # There exists (math symbol)
<Multi_key> <m> <exclam> <E> : "∄" # There does not exist (math symbol)
<Multi_key> <m> <minus> : "" # Minus sign (math symbol)
<Multi_key> <m> <exclam> <minus> : "¬" # Logical NOT (math symbol)
<Multi_key> <m> <i> <n> : "∈" # Element of (math symbol)
<Multi_key> <m> <exclam> <i> <n> : "∉" # Not an element of (math symbol)

View File

@@ -1,24 +0,0 @@
# Bash Configuration
This directory contains the bash configuration files organized by responsibility.
## Structure
```
.bash/
```
- [`system/`](./system/README.md): System-level configurations for `.profile`
- [`shell/`](./shell/README.md): Shell-specific configurations
- [`toolchains/`](./toolchains/README.md): (Development) toolchain configurations
- [`hooks/`](./hooks/README.md): hooks scripts
## Usage
The main `.bashrc` and `.profile` files source the appropriate index files from each category:
```bash
# In .bashrc:
[ -f "$BASH_DOTFILES/system/index.sh" ] && . "$BASH_DOTFILES/system/index.sh"
[ -f "$BASH_DOTFILES/shell/index.sh" ] && . "$BASH_DOTFILES/shell/index.sh"
[ -f "$BASH_DOTFILES/toolchains/index.sh" ] && . "$BASH_DOTFILES/toolchains/index.sh"
```

1
.bash/complete-alias Submodule

Submodule .bash/complete-alias added at 7f2555c2fe

View File

@@ -1,14 +0,0 @@
# Hook Scripts
Bash hook scripts executed at specific points during shell operation.
## Files
- `oncd` - Executed on directory change
- `onprompt` - Executed when displaying prompt
## Important Notes
- Hooks should be fast and non-blocking
- Currently minimal implementations
- Can be extended for additional functionality

View File

@@ -1 +0,0 @@
#!/bin/env bash

View File

@@ -1,2 +0,0 @@
#!/bin/env bash
history -a

View File

@@ -1,19 +0,0 @@
# Shell Configuration
Shell-specific bash configurations controlling shell behavior and appearance.
## Files
- `index.sh` - Main entry point
- `bindings.sh` - Key bindings and editor settings
- `complete-alias/` - Alias completion system with test suite (submodule)
- `completion/` - Completion function scripts
- `completion.sh` - Tab completion configurations
- `config.sh` - General shell settings
- `history.sh` - History control
- `ux.sh` - Prompt and UI/UX configuration (renamed from ui.sh)
## Important Notes
- Controls how bash behaves and looks
- Automatically sourced by main `.bashrc`

View File

@@ -1,15 +0,0 @@
#!/usr/bin/env bash
# Editor bindings and preferences
export EDITOR='vim'
export SUDO_EDITOR="$HOME/.local/bin/vim"
export PAGER="less -RFX"
[[ "$-" != *i* ]] && return
set -o vi # Vi editing mode
bind -m vi-command 'Control-l: clear-screen'
bind -m vi-insert 'Control-l: clear-screen'
# export MANPAGER="/bin/sh -c \"sed -e 's/\x1B\[[[:digit:]]\+m//g' | col -b | vim --appimage-extract-and-run --not-a-term -c 'set ft=man ts=8 nomod nolist noma' -\""
export MANPAGER="vim --appimage-extract-and-run +MANPAGER --not-a-term -c 'set ts=8 nolist number' -"
alias cat=/usr/local/bin/vimcat

View File

@@ -1,674 +0,0 @@
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The GNU General Public License is a free, copyleft license for
software and other kinds of works.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users. We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors. You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights. Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received. You must make sure that they, too, receive
or can get the source code. And you must show them these terms so they
know their rights.
Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.
For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software. For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.
Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so. This is fundamentally incompatible with the aim of
protecting users' freedom to change the software. The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable. Therefore, we
have designed this version of the GPL to prohibit the practice for those
products. If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.
Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary. To prevent this, the GPL assures that
patents cannot be used to render the program non-free.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Use with the GNU Affero General Public License.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
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 should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
<program> Copyright (C) <year> <name of author>
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<http://www.gnu.org/licenses/>.
The GNU General Public License does not permit incorporating your program
into proprietary programs. If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
<http://www.gnu.org/philosophy/why-not-lgpl.html>.

View File

@@ -1,279 +0,0 @@
# complete-alias
automagical shell alias completion;
- works with all common aliases, even self-aliases;
- one completion function, for all aliases;
- alias completion as easy as type-and-tab;
## install
1. install dependency [bash-completion][];
- linux:
install `bash-completion` using system package manager:
dnf install bash-completion ## fedora
apt install bash-completion ## debian
for other linux distros, see faq;
- macos (experimental):
install `bash-completion` homebrew formulae version 2:
brew install bash-completion@2
- windows (experimental):
see faq;
2. source `complete_alias` in `~/.bash_completion`:
. {complete_alias}
where `{complete_alias}` is the path of `complete_alias`;
## usage
1. edit aliases to complete in `complete_alias`:
for example, to complete aliases `foo`, `bar` and `baz`:
complete -F _complete_alias foo
complete -F _complete_alias bar
complete -F _complete_alias baz
2. to complete an alias, type it and press `<tab>`;
## example
to complete alias `sctl` aliased to `systemctl`:
$ alias sctl='systemctl'
$ cp complete_alias ~/.complete_alias
$ echo ". ~/.complete_alias" >> ~/.bash_completion
$ echo "complete -F _complete_alias sctl" >> ~/.complete_alias
$ sctl <tab>
add-requires
add-wants
cancel
cat
condreload
...
## config
to config `complete-alias`, set these envars *before* sourcing the main script:
- `COMPAL_AUTO_UNMASK`
this is a bool; default is `0`; when set to `1`, enables auto unmask; when
set to `0`, uses manual unmask;
auto unmask automatically manages non-alias command completions, but incurs
a small overhead on source; manual unmask is the traditional way of setting
non-alias command completions, which is static and faster but requires user
intervention if the preset is not satisfying;
## compat
- support for gnu bash(>=4.4) on linux is aimed;
- support for older versions of bash is uncertain;
- support for other shells is possible but unlikely;
- support for other operating systems is experimental;
## faq
- how to install it on windows?
support for windows is limited to [msys2][] and [git for windows][gfw]:
- msys2:
msys2 features [pacman][] so you can install like linux:
pacman -S bash-completion
cat complete_alias >> ~/.bash_completion
- git for windows:
tldr: steal `bash_completion` and source it before `complete_alias`;
git for windows provides git bash, which is a minimal environment based
on msys2; for what matters here, git bash does not have package manager;
so the above install procedure does not apply;
the idea is, you must somehow get `bash-completion` and load it before
`complete-alias` in a shell environment; for example, you can download
`bash-completion` package from [a msys2 mirror][msys2-mirror]; however,
the easiest solution i found to make things work is to simply download
the main script [`bash_completion`][bash_completion] from its git repo;
this does not give you its entirety, but is good enough to work;
now you have 2 files: `bash_completion` and `complete_alias`; you need
to source them in this order in `~/.bashrc`:
. ~/.bash_completion.sh
. ~/.complete_alias.sh
attention: here we renamed the files; we cannot use `~/.bash_completion`
because this is the very filename sourced by the very script; using this
filename will cause an infinite loop;
now install is complete; add your own aliases in `~/.complete_alias.sh`;
- how to install `bash-completion` on other linux distros?
these commands are sourced from wikis and users:
pacman -S bash-completion ## arch
yum install bash-completion ## centos
emerge --ask app-shells/bash-completion ## gentoo
zypper install bash-completion ## suse
apt install bash-completion ## ubuntu
these commands are not tested; open a ticket if you find them not working;
- how to complete *all* my aliases?
run this one-liner *after* all aliases have been defined:
complete -F _complete_alias "${!BASH_ALIASES[@]}"
it works like this:
complete -F _complete_alias foo
complete -F _complete_alias bar
complete -F _complete_alias baz
...
note that if you simply put this one-liner in `complete_alias` code, things
may not work, depending on the order of file sourcing, which in turn varies
across user configurations; the correct way to use this one-liner is to put
it in the same file where aliases are defined; for example, if your aliases
are defined in `~/.bashrc`, then that file should look like this:
alias foo='...'
alias bar='...'
alias baz='...'
...
complete -F _complete_alias "${!BASH_ALIASES[@]}"
- what are special characters in alias body?
these characters have special meanings and may cause errors when used in
alias body (this is not a complete list):
- newline (`\n`):
we do not allow alias body to contain the newline character; this limits
the cases to consider and makes smaller, faster code; we treat a newline
as a word breaker in the outmost scope, but you better not rely on this;
- backquote (`` ` ``):
avoid the old-style backquote form `` `command` `` of command
substitution as much as possible; instead, use the `$(command)` form;
the backquote form is more tricky and less legible when nested in quotes
or another command substitution; we do not intend to fully support
backquotes;
- backslash (`\`):
avoid backslashes unless you absolutely have to use them; they are
mostly used to escape a character; we have double quotes that can do the
same; the bash manual is not complete on where a backslash is special
and where it is literal; and we may make mistakes on its interpretation;
- colon (`:`):
a colon seems innocent but is special to word completion code: it is one
of the characters that breaks words for the completer; you can read more
about it at [this link][bash-faq]; however, we do not guarantee the same
treatment of colons here as there; we treat a colon as a word breaker in
the outmost scope and a literal otherwise; if you always want it to be a
literal, just quote it;
- why is `sudo` completion not working correctly?
there is a known case with `sudo` that can go wrong; for example:
$ unalias sudo
$ complete -r sudo
$ alias ls='ping'
$ complete -F _complete_alias ls
$ sudo ls <tab>
{ip}
{ip}
{ip}
...
here we are expecting a list of files, but the completion reply is a list of
ip addrs; the reason is, the completion function for `sudo` is almost always
`_sudo`, which is provided by `bash-completion`; this function strips `sudo`
then meta-completes the remaining command line; in our case, this is `ls` to
be completed by `_complete_alias`; but there is no way for `_complete_alias`
to see the original command line, and so it cannot tell `ls` from `sudo ls`;
as a result, `ls` and `sudo ls` are always completed the same even when they
should not; unfortunately, there is nothing `_complete_alias` can do here;
the easiest solution is to make `sudo` a self-alias:
$ alias sudo='sudo'
$ complete -F _complete_alias sudo
$ alias ls='ping'
$ complete -F _complete_alias ls
$ sudo ls <tab>
{file}
{file}
{file}
...
this gives `_complete_alias` a chance to see the original command line, then
decide what is the right thing to do; you may add a trailing space to `sudo`
alias body if you like it that way, and things still work correctly (listing
ip addrs is correct in this case):
$ alias sudo='sudo '
$ complete -F _complete_alias sudo
$ alias ls='ping'
$ complete -F _complete_alias ls
$ sudo ls <tab>
{ip}
{ip}
{ip}
...
## license
The source code is licensed under the [GNU General Public License v3.0][GPLv3].
Copyright (C) 2016-2021 Cyker Way
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 should have received a copy of the GNU General Public License along with
this program. If not, see <http://www.gnu.org/licenses/>.
[GPLv3]: https://www.gnu.org/licenses/gpl-3.0.txt
[bash-completion]: https://github.com/scop/bash-completion
[bash-faq]: https://tiswww.case.edu/php/chet/bash/FAQ
[bash_completion]: https://raw.githubusercontent.com/scop/bash-completion/master/bash_completion
[gfw]: https://gitforwindows.org/
[msys2-mirror]: http://repo.msys2.org/
[msys2]: http://www.msys2.org/
[pacman]: https://wiki.archlinux.org/index.php/Pacman

File diff suppressed because it is too large Load Diff

View File

@@ -1,14 +0,0 @@
#!/bin/bash
## ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
## test escaped command in alias body; complete with function;
##
## . test_escape_function.sh
## test_escape_function <tab>
##
## ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
complete -F _known_hosts '/tmp/aaa\ \ \ bbb'
alias test_escape_function='/tmp/aaa\ \ \ bbb'
complete -F _complete_alias test_escape_function

View File

@@ -1,14 +0,0 @@
#!/bin/bash
## ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
## test escaped command in alias body; complete with option;
##
## . test_escape_option.sh
## test_escape_option <tab>
##
## ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
complete -u '/tmp/aaa\ \ \ bbb'
alias test_escape_option='/tmp/aaa\ \ \ bbb'
complete -F _complete_alias test_escape_option

View File

@@ -1,15 +0,0 @@
#!/bin/bash
## ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
## test non-alias command;
##
## . test_non_alias.sh
## test_non_alias <tab>
##
## ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
alias ls="ls --color=auto"
alias sudo="sudo "
alias test_non_alias="sudo /bin/ls"
complete -F _complete_alias test_non_alias

View File

@@ -1,14 +0,0 @@
#!/bin/bash
## ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
## test quoted command in alias body; complete with function;
##
## . test_quotes_function.sh
## test_quotes_function <tab>
##
## ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
complete -F _known_hosts '"/tmp/aaa bbb"'
alias test_quotes_function='"/tmp/aaa bbb"'
complete -F _complete_alias test_quotes_function

View File

@@ -1,14 +0,0 @@
#!/bin/bash
## ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
## test quoted command in alias body; complete with option;
##
## . test_quotes_option.sh
## test_quotes_option <tab>
##
## ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
complete -u '"/tmp/aaa bbb"'
alias test_quotes_option='"/tmp/aaa bbb"'
complete -F _complete_alias test_quotes_option

View File

@@ -1,62 +0,0 @@
#!/usr/bin/env bash
[[ "$-" != *i* ]] && return
if ! shopt -oq posix; then # Enable programmable completion features
if [ -f /usr/share/bash-completion/bash_completion ]; then
source /usr/share/bash-completion/bash_completion
elif [ -f /etc/bash_completion ]; then
source /etc/bash_completion
fi
fi
SCRIPT_DIR=$(builtin cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &> /dev/null && pwd)
source "$SCRIPT_DIR/complete-alias/complete_alias"
complete -F _complete_alias gitdotfiles
source <(bs .completion bash)
source <(gh completion -s bash)
source <(roxy completions bash)
source <(node --completion-bash)
source <(npm completion)
source <(nodejsscript --completion bash)
# NPX completion
_npx() {
local cur="${COMP_WORDS[COMP_CWORD]}"
if [[ $COMP_CWORD != 1 ]]; then
case "${COMP_WORDS[1]}" in
gulp)
local compls=$(npx gulp --tasks-simple)
if [[ $compls == *"__autocomplete_bash"* ]]; then
compls="$compls $(npx gulp -L __autocomplete_bash --_l=$COMP_CWORD --_c=$cur)"
fi
;;
esac
COMPREPLY=($(compgen -W "$compls" -- "$cur"))
return 0;
fi
local dir=$(pwd -P)
while [[ -n "$dir" ]]; do
if [[ ! -d $dir/node_modules/.bin ]]; then
dir=${dir%/*}
continue
fi
local execs=( $(cd $dir/node_modules/.bin; find -L . -type f -executable) )
execs=( ${execs[@]/#.\//} )
COMPREPLY=( $(compgen -W "${execs[*]} serve" -- "$cur" ) )
break
done
}
complete -F _npx npx
# On demand
alias C--pnpm='source "$BASH_DOTFILES/shell/completion/pnpm.completion"'
alias C--cordova='source "$BASH_DOTFILES/shell/completion/cordova.completion"'
alias C--uu='source <($HOME/.local/bin/uu --completion-bash)'
alias C--jc='source <(jc -B)'
alias C--but='source <(but completions bash)'

View File

@@ -1,134 +0,0 @@
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#
platforms() {
get_cordova && COMPREPLY=( $(compgen -W "$(${CORDOVA_BIN} platform ls | tr -d "[]',")" -- $1) )
}
plugins() {
get_cordova && COMPREPLY=( $(compgen -W "$(${CORDOVA_BIN} plugin ls | tr -d "[]',")" -- $1) )
}
get_cordova() {
local cordova
if [[ -n "${CORDOVA_BIN}" ]]; then return 0; fi
cordova=$(eval echo ${COMP_WORDS[0]})
if [[ -x $cordova ]]; then CORDOVA_BIN=$cordova; return 0; fi
cordova=$(which cordova)
if [[ $? -eq 0 ]]; then CORDOVA_BIN=$cordova; return 0; fi
return 1
}
get_top_level_dir() {
local path
path=$(pwd)
while [ $path != '/' ]; do
if [ -d $path/.cordova ]; then
echo $path
return 0
fi
path=$(dirname $path)
done
return 1
}
_cordova()
{
local cur prev opts
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
# Skip over any initial command line switches
local i=1
while [[ $i -lt ${#COMP_WORDS[*]} ]] && [[ "${COMP_WORDS[${i}]}" == -* ]]; do
i=$((i+1));
done
# For the first word, supply all of the valid top-level commands
if [[ ${COMP_CWORD} -eq $i ]]; then
opts="help create info platform plugin prepare compile build clean run emulate serve"
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
return 0
fi
case "${COMP_WORDS[$i]}" in
create)
if [[ ${COMP_CWORD} -eq $((i+1)) ]]; then
COMPREPLY=( $(compgen -d -- ${cur}) )
return 0
fi
;;
platform)
if [[ ${COMP_CWORD} -eq $((i+1)) ]]; then
opts="add rm remove ls"
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
return 0
fi
case "${COMP_WORDS[$((i+1))]}" in
add)
opts="ios android wp7 wp8 blackberry www"
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
return 0;
;;
rm|remove)
platforms ${cur}
return 0
;;
esac
;;
plugin)
if [[ ${COMP_CWORD} -eq $((i+1)) ]]; then
opts="add rm remove ls"
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
return 0
fi
case "${COMP_WORDS[$((i+1))]}" in
add)
COMPREPLY=( $(compgen nospace -d -- ${cur}) )
return 0;
;;
rm|remove)
plugins ${cur}
return 0
;;
esac
;;
prepare|compile|emulate)
platforms ${cur}
return 0
;;
build)
platforms ${cur}
COMPREPLY+=( $(compgen -W '--release --debug --help --device --emulator --buildConfig' -- ${cur}) )
return 0
;;
run)
platforms ${cur}
COMPREPLY+=( $(compgen -W '--list --noprepare --nobuild --target --release --debug --help --device --emulator --buildConfig' -- ${cur}) )
return 0
;;
serve)
if [[ ${COMP_CWORD} -eq $((i+1)) ]]; then
platforms ${cur}
return 0
fi
;;
esac
}
complete -F _cordova cordova

View File

@@ -1,32 +0,0 @@
###-begin-pnpm-completion-###
if type complete &>/dev/null; then
_pnpm_completion () {
local words cword
if type _get_comp_words_by_ref &>/dev/null; then
_get_comp_words_by_ref -n = -n @ -n : -w words -i cword
else
cword="$COMP_CWORD"
words=("${COMP_WORDS[@]}")
fi
local si="$IFS"
IFS=$'\n' COMPREPLY=($(COMP_CWORD="$cword" \
COMP_LINE="$COMP_LINE" \
COMP_POINT="$COMP_POINT" \
SHELL=bash \
pnpm completion-server -- "${words[@]}" \
2>/dev/null)) || return $?
IFS="$si"
if [ "$COMPREPLY" = "__tabtab_complete_files__" ]; then
COMPREPLY=($(compgen -f -- "$cword"))
fi
if type __ltrim_colon_completions &>/dev/null; then
__ltrim_colon_completions "${words[cword]}"
fi
}
complete -o default -F _pnpm_completion pnpm
fi
###-end-pnpm-completion-###

View File

@@ -1,12 +0,0 @@
#!/usr/bin/env bash
# General shell configuration
# use `2>/dev/null` for prevent fail when on old bash
shopt -s expand_aliases
export GPG_TTY=$(tty)
shopt -s globstar 2>/dev/null || true # Recursive globbing
[[ "$-" != *i* ]] && return
# Auto-correct
shopt -s cdspell
shopt -s dirspell 2>/dev/null || true

View File

@@ -1,10 +0,0 @@
#!/usr/bin/env bash
[[ "$-" != *i* ]] && return
export HISTCONTROL="ignoreboth:erasedups"
shopt -s histappend cmdhist
export HISTFILESIZE=10000
export HISTSIZE="$HISTFILESIZE"
export HISTIGNORE="?? :but:but rub *:but commit:but ?? ?? :tree:vim:git info:git i:git lazy:git l"
bind '"\C-@": "\e^I history | grep '\''\e\e^A'\''\e\ei"'

View File

@@ -1,9 +0,0 @@
#!/usr/bin/env bash
# Shell configuration index
# Source all shell-related configuration files
declare dir="$BASH_DOTFILES/shell"
for file in "$dir"/*.sh; do
[[ -f "$file" && "$file" != "$dir/index.sh" ]] && source "$file"
done
unset dir

View File

@@ -1,93 +0,0 @@
#!/usr/bin/env bash
# UI/UX configuration
# Check window size after each command
shopt -s checkwinsize
# Color support for ls and other tools
if [ -x /usr/bin/dircolors ]; then
if [[ -r "$HOME/.dircolors" ]]; then
eval "$(dircolors -b "$HOME/.dircolors")" 2>/dev/null || true
else
eval "$(dircolors -b)" 2>/dev/null || true
fi
fi
alias grep='grep --color=auto'
alias fgrep='fgrep --color=auto'
alias egrep='egrep --color=auto'
alias diff='diff --color=auto'
export LS_COLORS="$LS_COLORS:tw=01;04;34:ow=01;04;34:"
alias ls='ls --color=auto -pQFh --group-directories-first'
[[ "$-" != *i* ]] && return
updatePrompt() {
local -r prev_exit="$?"
# color_helper_>>color<< (Note: \[\]= escaping)
local -r chR="\[\033[1;91m\]" #red
local -r chW="\[\033[00m\]" #white
local -r chG="\[\033[01;32m\]" #green
local -r chB="\[\033[0;34m\]" #blue
local -r chP="\[\033[0;35m\]" #purple
local -r chY="\[\033[0;33m\]" #yellow
PS1=""
if [ "$prev_exit" -eq 0 ]; then
PS1+="$chG$chW"
else
PS1+="$chR$chW"
fi
local jobs
jobs=$(jobs -p | wc -w)
[[ "$jobs" -ne 0 ]] && PS1+="${chY}${jobs}${chW}"
PS1+="${debian_chroot:+($debian_chroot)}"
PS1+=" At ${chG}\A${chW}"
PS1+=" by ${chP}\u${chW}"
if sudo -n true 2>/dev/null; then
PS1+="${chR} (sudo)${chW}"
fi
PS1+=" in "
if \git rev-parse --is-inside-work-tree >/dev/null 2>&1; then
local branch
branch="$(\git symbolic-ref -q HEAD)"
PS1+="[${branch#refs/heads/}"
local status
status="$(git for-each-ref --format='%(upstream:trackshort)' "$branch" 2>/dev/null | awk '!seen[$1]++ {printf $1}')"
status+="$(git status --porcelain 2>/dev/null | awk '!seen[$1]++ {printf $1}')"
[ "$status" != "" ] && \
PS1+="|$chY$status$chW"
PS1+="] "
fi
PS1+="${chB}\w${chW}"
PS1+="\n${PS1_jaaENV:-:}"
local -r hook="$BASH_DOTFILES/hooks/onprompt"
if [[ -f "$hook" ]]; then
source "$hook"
fi
}
[ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ] \
&& debian_chroot=$(cat /etc/debian_chroot)
setPrompt() {
local color_prompt
[[ $TERM == "xterm-color" ]] || [[ $TERM == *-256color ]] \
&& color_prompt=yes
which tput >&/dev/null && ! tput setaf 1 >&/dev/null \
&& color_prompt=
if [[ "$color_prompt" != yes ]]; then
PROMPT_COMMAND="${PROMPT_COMMAND:+$PROMPT_COMMAND}"
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
return
fi
case "$TERM" in
xterm*|rxvt*)
;;
*)
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
return
;;
esac
PROMPT_COMMAND="updatePrompt${PROMPT_COMMAND:+; $PROMPT_COMMAND}"
PS2="|"
}
setPrompt
unset -f setPrompt

View File

@@ -1,16 +0,0 @@
# System Configuration
System-level bash configurations for environment variables and paths.
## Files
- `index.sh` - Main entry point
- `android.sh` - Android SDK setup
- `bin.sh` - Binary paths and executable configurations
- `gui.sh` - GUI-related environment settings
- `java.sh` - Java environment configuration
## Important Notes
- These configs set environment variables needed system-wide
- Automatically sourced by main `.profile` via index file

View File

@@ -1,6 +0,0 @@
#!/usr/bin/env bash
export ANDROID_HOME_BAK2="$HOME/.local/share/JetBrains/Toolbox/apps/android-studio/"
export ANDROID_HOME_BAK="$HOME/Android/Sdk"
export ANDROID_SDK_ROOT="$HOME/Android/Sdk"
export PATH="$PATH:$ANDROID_SDK_ROOT/platform-tools/"
export PATH="$PATH:$ANDROID_SDK_ROOT/emulator/"

View File

@@ -1,5 +0,0 @@
#!/usr/bin/env bash
[[ -d "$HOME/.local/bin" ]] && \
export PATH="$HOME/.local/bin:$PATH"
export PATH="$PATH:$HOME/.local/share/JetBrains/Toolbox/scripts"
export PATH="$PATH:$HOME/.lmstudio/bin"

View File

@@ -1,5 +0,0 @@
#!/usr/bin/env bash
export APPMENU_DISPLAY_BOTH=1
[[ -z "$UBUNTU_MENUPROXY" ]] && \
export UBUNTU_MENUPROXY=1
export GTK_MODULES UBUNTU_MENUPROXY

View File

@@ -1,9 +0,0 @@
#!/usr/bin/env bash
# System configuration index
# Source all system-related configuration files
declare dir="$BASH_DOTFILES/system"
for file in "$dir"/*.sh; do
[[ -f "$file" && "$file" != "$dir/index.sh" ]] && source "$file"
done
unset dir

View File

@@ -1,3 +0,0 @@
#!/usr/bin/env bash
[[ -z "$JAVA_HOME" ]] && \
export JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64/"

View File

@@ -1,41 +0,0 @@
# Toolchain Configuration
Development tool configurations including aliases and environment managers.
## Files
- `index.sh` - Main entry point
- `aliases.sh` - Comprehensive aliases collection (grouped by functionality)
- `brew.sh` - Homebrew setup
- `cross-session/` - Cross-session variable management system:
- `index.sh` - Entry point
- `store.sh` - Storage for cross-session variables
- `jaaenv.sh` - Custom environment management (Java, Node.js, PHP, Gradle)
- `nvm-node.sh` - Node/nvm setup
- `portkiller/` - Port killer utility (git submodule)
- `sdkman.sh` - SDKMAN setup
- `tv.sh` - television (completition) setup
- `vifm.sh` - VIFM replaced via this
## Organization
- **Color/UX settings**: Located in `shell/ux.sh`
- **Cross-session management**: Now in `cross-session/` subdirectory
- **Aliases**: Grouped in `aliases.sh` by functionality:
- System aliases (ls, grep, etc.)
- Git and version control
- Utility functions
- Network utilities
- Node.js tools
- RPG utilities
- Process management
- **Environment management**: Split across specialized files:
- `jaaenv.sh` - Main environment system
- `nvm-node.sh` - Node.js version management
- `sdkman.sh` - SDKMAN management
## Important Notes
- Contains development tools and shortcuts
- Environment managers handle Java, Node.js, PHP, Gradle versions
- Automatically sourced by main `.bashrc`

View File

@@ -1,126 +0,0 @@
#!/usr/bin/env bash
export PATH="$PATH:$HOME/.local/share/soar/bin"
cd() {
builtin cd "$@" || return $?
crossSession 'OLDPWD' "$(pwd)"
local -r hook="$BASH_DOTFILES/hooks/oncd"
[[ -f "$hook" ]] && source "$hook"
}
alias gitdotfiles='/usr/bin/git --git-dir="$HOME/.dotfiles/" --work-tree="$HOME"'
alias §df='df -Th'
git(){
if [[ -z "$1" ]]; then
git-i
return 0
fi
command git "$@"
}
alias smerge='/usr/bin/flatpak run --branch=stable --arch=x86_64 --command=sublime_merge --file-forwarding com.sublimemerge.App @@u %u @@'
kommit(){
if flatpak info org.kde.kommit > /dev/null 2>&1; then
flatpak run \
--branch=stable --arch=x86_64 \
--file-forwarding \
--command=kommit org.kde.kommit @@u $* @@ > /dev/null 2>&1 & disown;
else
command kommit $* > /dev/null 2>&1 & disown;
fi
}
export SVN_CONFIG_DIR="$HOME/.config/subversion"
alias svn='svn --config-dir "$SVN_CONFIG_DIR"'
§(){
[[ -z "$1" ]] && clear && return 0
echo "$ [--help]= clear or [print this text]"
alias | grep "alias §" --color=never
declare -F | grep 'declare -f §' --color=never
\ls ~/.local/bin | grep -P "^§" | xargs -I{} echo '~/.local/bin/'{}
printenv | grep -e '^l' | xargs -I{} echo \${}
}
bw-session(){
bw logout
login=$(§kwallet.mjs --wallet kdewallet readPassword accounts bw-json)
export BW_CLIENTSECRET=`echo "$login" | jq -r .secret`
export BW_CLIENTID=`echo "$login" | jq -r .id`
bw login --apikey --raw
export BW_SESSION=`bw unlock --raw $(echo "$login" | jq -r .pass)` && echo "Bitwarden session ON" || echo "Bitwarden session FAILED"
unset BW_CLIENTSECRET
unset BW_CLIENTID
}
alias §ps-mem='ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem'
alias §ps-cpu='ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%cpu'
alias §lsoft-all='lsoft -P -i -n'
§ping-test() {
ping -c 1 -q 8.23.224.107 | grep --color=never -A 1 -i '\---'
ping -c 1 -q www.google.com | grep --color=never -A 1 -i '\---'
}
§whoami(){
[[ "$1" == '--help' ]] && echo '§whoami; §whoami --ip' && return 0
local ip=$(curl -s ifconfig.me)
[[ "$1" == '--ip' ]] && echo "$ip" && return 0
local L="\t%s\n"
printf "\n"
printf "$L" "USER: $(echo $USER)"
printf "$L" "IP ADDR: $ip"
printf "$L" "HOSTNAME: $(hostname -f)"
printf "$L" "KERNEL: $(uname -rms)"
printf "\n"
}
§curl-location() { curl --silent -I "$1" | grep -i location; }
§interfaces() {
node <<-JAVASCRIPT
var os = require('os');
var i = os.networkInterfaces();
Object.keys(i).forEach(function(name) {
i[name].forEach(function(int) {
if (int.family === 'IPv4') {
console.log('%s: %s', name, int.address);
}
});
});
JAVASCRIPT
}
§speedtest() {
curl -s https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py | python3 -
}
portkiller(){
"$BASH_DOTFILES/portkiller/portkiller.sh" $*
}
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'
§cmdfu() { curl "https://www.commandlinefu.com/commands/matching/$@/$(echo -n $@ | openssl base64)/plaintext"; }
alias npx-wca='npx -y web-component-analyzer'
alias npx-qnm='npx -y qnm'
alias npx-hint='npx -y hint'
alias npx-markdown='npx -y markserv'
alias npx-toon='npx -y @toon-format/cli'
rpg(){
rpg-cli "$@"
if ( [[ "$1" == "cd" ]] || [[ "$1" == "ls" ]] ); then
[[ "$2" == "" ]] && $1 . && return 0
[[ "$2" == ".." ]] && $1 .. && return 0
[[ "-1" != "$(nodejsscript --print "s.ls().findIndex(e=> e==='$2'.replace(/\/$/, ''))")" ]] && $1 "$2" && return 0
fi
return 0
}
rpg-dungeon(){
current=$(basename $PWD)
number_re='^[0-9]+$'
if [[ $current =~ $number_re ]]; then
next=$(($current + 1))
command mkdir -p $next && cd $next && rpg ls
elif [[ -d 1 ]] ; then
cd 1 && rpg ls
else
command mkdir -p dungeon/1 && cd dungeon/1 && rpg ls
fi
}

View File

@@ -1,18 +0,0 @@
#!/usr/bin/env bash
eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"
[[ "$-" != *i* ]] && return
if type brew &>/dev/null
then
HOMEBREW_PREFIX="$(brew --prefix)"
if [[ -r "${HOMEBREW_PREFIX}/etc/profile.d/bash_completion.sh" ]]
then
PS1='force' source "${HOMEBREW_PREFIX}/etc/profile.d/bash_completion.sh"
else
for COMPLETION in "${HOMEBREW_PREFIX}/etc/bash_completion.d/"*
do
[[ -r "${COMPLETION}" ]] && source "${COMPLETION}"
done
fi
fi

View File

@@ -1,39 +0,0 @@
#!/usr/bin/env bash
declare -r CROSS_SESSION="$BASH_DOTFILES/toolchains/cross-session/store.sh"
[[ -f "$CROSS_SESSION" ]] && \
source "$CROSS_SESSION"
# Cross session management function
crossSession() {
if [[ '--help' == "${1:---help}" ]]; then
echo 'crossSession [--help]'
echo ' Print this help.'
echo 'crossSession [--list]'
echo ' Lists all cross session variables or print this help.'
echo 'crossSession <name> [<value>]'
echo ' Sets cross session variable <name> to <value> (or empty for unset).'
return 0
fi
if [[ '--list' == "$1" ]]; then
cat "$CROSS_SESSION"
return 0
fi
local name="$1"
local value="$2"
# Check if the variable already exists in the file
if grep -q "^export $name=" "$CROSS_SESSION"; then
if [[ -z "$value" ]]; then
# If new value is empty, remove the variable from the file
sed -i "/^export $name=/d" "$CROSS_SESSION"
else
# If it exists, replace the old value with the new value
sed -i "s|^export $name=.*|export $name=\"$value\"|" "$CROSS_SESSION"
fi
else
if [[ -n "$value" ]]; then
# If it doesn't exist and new value is not empty, append the new variable to the file
echo "export $name='$value'" >> "$CROSS_SESSION"
fi
fi
}

View File

@@ -1,9 +0,0 @@
# vim: filetype=bash
export OLDPWD="/home/jaandrle/Vzdálené/GitHub/facilitator-network-cell"
export mwdcp='/home/jaandrle/Vzdálené/GitHub/dcp-fe-container-certifedpassport'
export mdde='/home/jaandrle/Vzdálené/GitHub/deka-dom-el'
export mwdgf='/home/jaandrle/Vzdálené/GitHub/DGF-Certified-Supervisory-Academy'
export mwdgfapi='/home/jaandrle/Vzdálené/GitHub/DGF-Certified-Supervisory-Academy-API'
export mkde='/home/jaandrle/Dokumenty/Projekty/kde-překlady'
export mwnetcell='/home/jaandrle/Vzdálené/GitHub/facilitator-network-cell'
export mb='/home/jaandrle/.bash'

View File

@@ -1,13 +0,0 @@
#!/usr/bin/env bash
# Toolchains configuration index
# Source all toolchain-related configuration files
declare dir="$BASH_DOTFILES/toolchains"
source "$dir/cross-session/index.sh"
for file in "$dir"/*.sh; do
[[ -f "$file" && "$file" != "$dir/index.sh" ]] && source "$file"
done
unset dir

View File

@@ -1,179 +0,0 @@
#!/usr/bin/env bash
# jaaENV - Environment management system
function jaaENV {
if [[ "$1" = "--help" ]]; then
echo "jaaENV - Environment Management System"
echo "Utility to manage multiple tool versions in one config file '.jaaENV'"
echo "Replaces: 'nvm use 16 && sdk use java 11 && ...'"
echo ""
echo "Usage:"
echo " jaaENV # Load settings from .jaaENV or compose.yaml"
echo " jaaENV --help # Show this help"
echo " jaaENV --ls # List available versions (nvm, sdk, php, java)"
echo " jaaENV --save nodejs php # Save current versions to .jaaENV"
echo ""
echo "Example .jaaENV file:"
echo " nodejs=16.13.0"
echo " php=8.1"
echo " java=11"
echo " gradle=7.4"
echo ""
echo "Supported options:"
echo " android_home # Use ANDROID_HOME instead of ANDROID_SDK_ROOT"
echo " jdk # Set JAVA_HOME for Android Studio (9+)"
echo " nodejs|php # Node.js/PHP version management"
echo " java # Java version switching"
echo " gradle # Gradle version management"
echo ""
echo "Requirements:"
echo " NVM: https://github.com/nvm-sh/nvm (Node.js)"
echo " SDKMAN: https://sdkman.io (Java, Gradle, etc.)"
echo " PHP: update-alternatives + https://deb.sury.org/"
echo " Java: update-alternatives"
echo ""
echo "Quick setup:"
echo " sudo update-alternatives --set php /usr/bin/php8.1"
return 0
fi
if [[ "$1" == "--save" ]]; then
shift
rm -vi .jaaENV
while [[ $# -gt 0 ]]; do
case "$1" in
nodejs|node)
echo "nodejs=$(node --version | cut -c2-)" >> .jaaENV
;;
gradle)
echo "gradle=$(gradle --version | awk '/Gradle/ {print $2}')" >> .jaaENV
;;
php)
echo "php=$(php --version | awk '/^PHP/ {print $2}')" >> .jaaENV
;;
java)
local java_version
java_version=$(java -version 2>&1 | awk -F '"' '/version/ {print $2}')
if [[ "$java_version" == 1.8* ]]; then
java_version="8"
else
java_version=$(echo "$java_version" | cut -d'.' -f1)
fi
echo "java=$java_version" >> .jaaENV
;;
*)
echo "Unknown '$1' skipped"
;;
esac
shift
done
return 0
fi
if [[ "$1" == "--ls" ]]; then
echo ":: nvm ls --no-alias ::"
nvm ls --no-alias
echo ":: update-alternatives --list php ::"
update-alternatives --list php
echo ":: update-alternatives --list java ::"
update-alternatives --list java
echo ":: sdk ls gradle | grep -E '\*|>' ::"
sdk ls gradle | grep -E '\*|>'
return 0
fi
if [[ -f "compose.yaml" ]]; then
jdk=$(grep -Po 'VERSION_JAVA=\K.*' compose.yaml)
nodejs=$(grep -Po 'VERSION_NODEJS=\K.*' compose.yaml)
elif [[ -f ".jaaENV" ]]; then
source ./.jaaENV
else
echo 'No env file `compose.yaml` or `.jaaENV`'
return 1
fi
local chP="\[\033[0;35m\]" #purple
local chW="\[\033[00m\]" #white
export PS1_jaaENV="${chP}¦${chW}"
if [[ -n "${ANDROID_SDK_ROOT_BAK+x}" ]]; then
export ANDROID_SDK_ROOT="$ANDROID_SDK_ROOT_BAK"
echo "\$ANDROID_SDK_ROOT=$ANDROID_SDK_ROOT_BAK"
unset ANDROID_SDK_ROOT_BAK
fi
if [[ -n "${unset_android_sdk+x}" ]]; then
export ANDROID_SDK_ROOT_BAK="$ANDROID_SDK_ROOT"
unset ANDROID_SDK_ROOT
fi
if [[ -n "${java+x}" ]]; then
if [[ "$java" == "8" ]]; then
java="1.8"
fi
local java_local
java_local=$(java -version 2>&1 | awk -F '"' '/version/ {print $2}')
if [[ "$java_local" != "$java"* ]]; then
if [[ "$java" == "1.8" ]]; then
java="8"
fi
echo "Switching Java version: $java$java_local"
local java_path="/usr/lib/jvm/java-$java-openjdk-amd64/"
if [[ "$java" == "8" ]]; then
java_path+="jre/"
fi
sudo update-alternatives --set java "${java_path}bin/java"
local javac
javac=$(update-alternatives --list javac | grep "java-$java")
if [[ -n "$javac" ]]; then
sudo update-alternatives --set javac "$javac"
fi
sudo -k
fi
export JAVA_HOME=$(readlink -f "$(which java)" | cut -d '/' -f1-5)/
echo "\$JAVA_HOME=$JAVA_HOME"
fi
if [[ -n "${android_home+x}" ]]; then
export ANDROID_HOME="$ANDROID_HOME_BAK"
echo "\$ANDROID_HOME=$ANDROID_HOME"
else
unset ANDROID_HOME
echo "\$ANDROID_SDK_ROOT=$ANDROID_SDK_ROOT"
fi
if [[ -n "${android_home_is_sdk+x}" ]]; then
export ANDROID_HOME="$ANDROID_SDK_ROOT"
echo "\$ANDROID_HOME=$ANDROID_HOME"
fi
if [[ -n "${JAVA_HOME_BAK+x}" ]]; then
export JAVA_HOME="$JAVA_HOME_BAK"
unset JAVA_HOME_BAK
fi
if [[ -n "${jdk+x}" ]]; then
if (( $(echo "$jdk > 9" | bc -l) )); then
export JAVA_HOME_BAK="$JAVA_HOME"
export JAVA_HOME="/snap/android-studio/current/android-studio/jre"
fi
echo "\$JAVA_HOME=$JAVA_HOME"
fi
if [[ -n "${nodejs+x}" ]]; then
if [[ "$(which node)" == *linuxbrew* ]]; then
brew unlink node
fi
nvm use "$nodejs"
fi
if [[ -n "${gradle+x}" ]]; then
sdk use gradle "$gradle" | tr -d '\n'
echo
fi
if [[ -n "${php+x}" ]]; then
local php_local
php_local=$(php --version | awk '/^PHP/ {print $2}')
if [[ "$php_local" == "$php"* ]]; then
echo "PHP version: $php"
else
echo "Switching PHP version: $php$php_local"
sudo update-alternatives --set php "/usr/bin/php$php"
sudo -k
fi
fi
# Cleanup variables
unset android_home unset_android_sdk nodejs gradle php java
}

View File

@@ -1,7 +0,0 @@
#!/usr/bin/env bash
export NVM_DIR="$HOME/.nvm"
eval "$([[ -s "$NVM_DIR/nvm.sh" ]] && echo "source '$NVM_DIR/nvm.sh'")"
eval "$([[ -s "$NVM_DIR/bash_completion" ]] && echo "source '$NVM_DIR/bash_completion'")"
export NODE_COMPILE_CACHE="$HOME/.cache/nodejs-compile-cache" # https://nolanlawson.com/2024/10/20/why-im-skeptical-of-rewriting-javascript-tools-in-faster-languages/

Submodule .bash/toolchains/portkiller deleted from cab2f17072

View File

@@ -1,7 +0,0 @@
#!/usr/bin/env bash
# SDKMAN! - Software Development Kit Manager
export SDKMAN_DIR="$HOME/.sdkman"
[[ -s "$SDKMAN_DIR/bin/sdkman-init.sh" ]] && source "$SDKMAN_DIR/bin/sdkman-init.sh"
# Usage: sdk install java 11.0.12-open, sdk use java 11.0.12-open

View File

@@ -1,462 +0,0 @@
#!/usr/bin/env bash
[[ "$-" != *i* ]] && return
_tv() {
local i cur prev opts cmd
COMPREPLY=()
if [[ "${BASH_VERSINFO[0]}" -ge 4 ]]; then
cur="$2"
else
cur="${COMP_WORDS[COMP_CWORD]}"
fi
prev="$3"
cmd=""
opts=""
for i in "${COMP_WORDS[@]:0:COMP_CWORD}"
do
case "${cmd},${i}" in
",$1")
cmd="tv"
;;
tv,help)
cmd="tv__help"
;;
tv,init)
cmd="tv__init"
;;
tv,list-channels)
cmd="tv__list__channels"
;;
tv,update-channels)
cmd="tv__update__channels"
;;
tv__help,help)
cmd="tv__help__help"
;;
tv__help,init)
cmd="tv__help__init"
;;
tv__help,list-channels)
cmd="tv__help__list__channels"
;;
tv__help,update-channels)
cmd="tv__help__update__channels"
;;
*)
;;
esac
done
case "${cmd}" in
tv)
opts="$(tv list-channels) [CHANNEL] -s -p -i -t -k -h -V --source-command --ansi --no-sort --source-display --source-output --source-entry-delimiter --preview-command --preview-header --preview-footer --cache-preview --preview-offset --no-preview --hide-preview --show-preview --preview-border --preview-padding --preview-word-wrap --hide-preview-scrollbar --preview-size --input --input-header --input-prompt --input-position --input-border --input-padding --no-status-bar --hide-status-bar --show-status-bar --results-border --results-padding --layout --no-remote --hide-remote --show-remote --no-help-panel --hide-help-panel --show-help-panel --ui-scale --height --width --inline --tick-rate --watch --autocomplete-prompt --exact --select-1 --take-1 --take-1-fast --keybindings --expect --config-file --cable-dir --global-history --help --version [PATH] list-channels init update-channels help"
if [[ ${cur} == -* || ${COMP_CWORD} -eq 1 ]] ; then
COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
return 0
fi
case "${prev}" in
--source-command)
COMPREPLY=($(compgen -f "${cur}"))
return 0
;;
-s)
COMPREPLY=($(compgen -f "${cur}"))
return 0
;;
--source-display)
COMPREPLY=($(compgen -f "${cur}"))
return 0
;;
--source-output)
COMPREPLY=($(compgen -f "${cur}"))
return 0
;;
--source-entry-delimiter)
COMPREPLY=($(compgen -f "${cur}"))
return 0
;;
--preview-command)
COMPREPLY=($(compgen -f "${cur}"))
return 0
;;
-p)
COMPREPLY=($(compgen -f "${cur}"))
return 0
;;
--preview-header)
COMPREPLY=($(compgen -f "${cur}"))
return 0
;;
--preview-footer)
COMPREPLY=($(compgen -f "${cur}"))
return 0
;;
--preview-offset)
COMPREPLY=($(compgen -f "${cur}"))
return 0
;;
--preview-border)
COMPREPLY=($(compgen -W "none plain rounded thick" -- "${cur}"))
return 0
;;
--preview-padding)
COMPREPLY=($(compgen -f "${cur}"))
return 0
;;
--preview-size)
COMPREPLY=($(compgen -f "${cur}"))
return 0
;;
--input)
COMPREPLY=($(compgen -f "${cur}"))
return 0
;;
-i)
COMPREPLY=($(compgen -f "${cur}"))
return 0
;;
--input-header)
COMPREPLY=($(compgen -f "${cur}"))
return 0
;;
--input-prompt)
COMPREPLY=($(compgen -f "${cur}"))
return 0
;;
--input-position)
COMPREPLY=($(compgen -W "top bottom" -- "${cur}"))
return 0
;;
--input-border)
COMPREPLY=($(compgen -W "none plain rounded thick" -- "${cur}"))
return 0
;;
--input-padding)
COMPREPLY=($(compgen -f "${cur}"))
return 0
;;
--results-border)
COMPREPLY=($(compgen -W "none plain rounded thick" -- "${cur}"))
return 0
;;
--results-padding)
COMPREPLY=($(compgen -f "${cur}"))
return 0
;;
--layout)
COMPREPLY=($(compgen -W "landscape portrait" -- "${cur}"))
return 0
;;
--ui-scale)
COMPREPLY=($(compgen -f "${cur}"))
return 0
;;
--height)
COMPREPLY=($(compgen -f "${cur}"))
return 0
;;
--width)
COMPREPLY=($(compgen -f "${cur}"))
return 0
;;
--tick-rate)
COMPREPLY=($(compgen -f "${cur}"))
return 0
;;
-t)
COMPREPLY=($(compgen -f "${cur}"))
return 0
;;
--watch)
COMPREPLY=($(compgen -f "${cur}"))
return 0
;;
--autocomplete-prompt)
COMPREPLY=($(compgen -f "${cur}"))
return 0
;;
--keybindings)
COMPREPLY=($(compgen -f "${cur}"))
return 0
;;
-k)
COMPREPLY=($(compgen -f "${cur}"))
return 0
;;
--expect)
COMPREPLY=($(compgen -f "${cur}"))
return 0
;;
--config-file)
COMPREPLY=($(compgen -f "${cur}"))
return 0
;;
--cable-dir)
COMPREPLY=($(compgen -f "${cur}"))
return 0
;;
*)
COMPREPLY=()
;;
esac
COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
return 0
;;
tv__help)
opts="list-channels init update-channels help"
if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then
COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
return 0
fi
case "${prev}" in
*)
COMPREPLY=()
;;
esac
COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
return 0
;;
tv__help__help)
opts=""
if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then
COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
return 0
fi
case "${prev}" in
*)
COMPREPLY=()
;;
esac
COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
return 0
;;
tv__help__init)
opts=""
if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then
COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
return 0
fi
case "${prev}" in
*)
COMPREPLY=()
;;
esac
COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
return 0
;;
tv__help__list__channels)
opts=""
if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then
COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
return 0
fi
case "${prev}" in
*)
COMPREPLY=()
;;
esac
COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
return 0
;;
tv__help__update__channels)
opts=""
if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then
COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
return 0
fi
case "${prev}" in
*)
COMPREPLY=()
;;
esac
COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
return 0
;;
tv__init)
opts="-h --help bash zsh fish power-shell cmd nu"
if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then
COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
return 0
fi
case "${prev}" in
*)
COMPREPLY=()
;;
esac
COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
return 0
;;
tv__list__channels)
opts="-h --help"
if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then
COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
return 0
fi
case "${prev}" in
*)
COMPREPLY=()
;;
esac
COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
return 0
;;
tv__update__channels)
opts="-h --force --help"
if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then
COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
return 0
fi
case "${prev}" in
*)
COMPREPLY=()
;;
esac
COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
return 0
;;
esac
}
if [[ "${BASH_VERSINFO[0]}" -eq 4 && "${BASH_VERSINFO[1]}" -ge 4 || "${BASH_VERSINFO[0]}" -gt 4 ]]; then
complete -F _tv -o nosort -o bashdefault -o default tv
else
complete -F _tv -o bashdefault -o default tv
fi
_disable_bracketed_paste() {
# Disable bracketed paste mode to prevent unwanted escape sequences
printf '\e[?2004l' > /dev/tty
}
_enable_bracketed_paste() {
# Re-enable bracketed paste mode
printf '\e[?2004h' > /dev/tty
}
__tv_path_completion() {
local base="$1"
local lbuf="$2"
local suffix=""
local tail=" "
local dir leftover matches
# Evaluate the base path (handle ~, variables, etc.)
eval "base=\"$base\"" 2>/dev/null || return
# Extract directory part if base contains a slash
[[ "$base" == *"/"* ]] && dir="$base"
while true; do
if [[ -z "$dir" || -d "$dir" ]]; then
# Calculate leftover part (what comes after the directory)
leftover="${base#"$dir"}"
leftover="${leftover#/}"
# Set default directory if empty
[[ -z "$dir" ]] && dir='.'
# Remove trailing slash unless it's root
[[ "$dir" != "/" ]] && dir="${dir%/}"
# move to the next line so that the prompt is not overwritten
printf "\n"
# Call tv with proper arguments and process output
matches=$(
tv "$dir" --autocomplete-prompt "$lbuf" --no-status-bar --inline --input "$leftover" < /dev/tty | while IFS= read -r item; do
item="${item%$suffix}$suffix"
dirP="$dir/"
[[ "$dirP" == "./" ]] && dirP=""
# Quote the item to handle special characters
printf '%s ' "$dirP$(printf '%q' "$item")"
done
)
# Remove trailing space
matches="${matches% }"
if [[ -n "$matches" ]]; then
# Update readline buffer
local new_line="$lbuf$matches$tail"
local rhs="${READLINE_LINE:$READLINE_POINT}"
READLINE_LINE="$new_line$rhs"
READLINE_POINT=${#new_line}
fi
# move the cursor back to the previous line
printf "\033[A"
break
fi
# Move up one directory level
dir=$(dirname "$dir")
dir="${dir%/}/"
done
}
tv_smart_autocomplete() {
_disable_bracketed_paste
local tokens prefix lbuf
local current_prompt="${READLINE_LINE:0:$READLINE_POINT}"
# Split the current prompt into tokens
# This is a simplified version of zsh's word splitting
read -ra tokens <<< "$current_prompt"
if [[ ${#tokens[@]} -lt 1 ]]; then
# Fall back to default completion if no tokens
_enable_bracketed_paste
return
fi
# Handle trailing space
[[ "${READLINE_LINE:$((READLINE_POINT-1)):1}" == " " ]] && tokens+=("")
# Get the last token as prefix
prefix="${tokens[-1]}"
# Calculate lbuf (everything except the last token)
if [[ -n "$prefix" ]]; then
lbuf="${current_prompt:0:$((${#current_prompt} - ${#prefix}))}"
else
lbuf="$current_prompt"
fi
__tv_path_completion "$prefix" "$lbuf"
_enable_bracketed_paste
}
tv_shell_history() {
_disable_bracketed_paste
local current_prompt="${READLINE_LINE:0:$READLINE_POINT}"
local output
# move to the next line so that the prompt is not overwritten
printf "\n"
# Get history using tv with the same arguments as zsh version
output=$(tv bash-history --no-status-bar --input "$current_prompt" --inline)
if [[ -n "$output" ]]; then
# Clear the right side of cursor and set new line
READLINE_LINE="$output"
READLINE_POINT=${#READLINE_LINE}
# Uncomment this to automatically accept the line
# (i.e. run the command without having to press enter twice)
# accept-line() { echo; }; accept-line
fi
# move the cursor back to the previous line
printf "\033[A"
_enable_bracketed_paste
}
# Bind the functions to key combinations
bind -x '"\C-T": tv_smart_autocomplete'
bind -x '"\C-R": tv_shell_history'

View File

@@ -1,108 +0,0 @@
#!/usr/bin/env bash
# VIFM configuration - migrated from .bash_vifm
vifm() {
\cat <<-"HELP"
Use bash build-in:
- cd (ch dir), ls or tree (list), find
- mkdir (make dir), touch (make file), rm (remove)
- cp (copy), mv (move+rename)
- cat (print file), head (print first lines), tail (print last lines)
- ln (link), chmod (change perm), chown (change owner)
- file/dir info: stat , file , mimetype
- cd stack: pushd, popd, dirs -v
Use helpers:
- rsync (copy), fd (verbo-less find), chafa (ascii images viewer)
- m (marks, `cd "$m<name>"`), cd-kdialog
- trash-* (trash)
Use bash/terminal features:
- history search (`cd`)
- tab completion
- substitution: `!#:`, `!!:`
- globbing: `*`, `?`, `{}``for file in *; do; done`
Use GUI:
- open . or open <file/dir>
- dolphin
Use VIM:
- ls > <batch>.sh → vim <batch>.sh → :wq → bash <batch>.sh
Use vim aliases?:
- y (yank), p (paste), P (paste and clear)
- y [file(s)|dir(s)]; p | xargs -I{} <cp|mv|…> {}; P
Use `$PROMPT_COMMAND`:
- `PROMPT_COMMAND+='; ls -A'; PROMPT_COMMAND="${PROMPT_COMMAND/; ls -A}"`
HELP
}
m() {
if [[ "-d" == "$1" ]]; then
unset "m$2"
crossSession "m$2"
return 0
fi
if [[ -z "$1" ]]; then
printenv | grep -e '^m' | sort | xargs -I{} echo \${}
return 0
fi
if [[ "--help" == "$1" ]]; then
\cat <<-"HELP"
m [--help]
Lists all marks or print this help.
m -d <name>
Deletes mark <name>. Unsets variable and cross session variable.
m <name> [path]
Sets mark <name> to current directory or [path].
The mark is just a bash variable, use `$m<name>`.
cd $m<name>
cd to mark <name>.
HELP
return 0
fi
local n="m$1"
[[ -z "${!n}" ]] || return 1
[[ -z "$2" ]] && local p="$(pwd)" || local p="$(readlink -f $2)"
crossSession "$n" "$p"
export $n="$p"
}
alias cd-kdialog='cd "$(kdialog --getexistingdirectory --title "Vyberte složku" 2>/dev/null)"'
alias fd='fdfind'
# vim-like aliases?
alias dw='rm'
alias cw='mv'
alias g='fdfind'
# yanked files
export YANKED=()
p() {
for f in "${YANKED[@]}"; do
IFS=$'' echo "$f"
done
} # p | xargs -I{} …
P() { YANKED=(); echo 'YANKED=()'; }
y() {
local pwd
pwd="$(pwd)"
if [[ -z "$1" ]]; then
YANKED=("$pwd")
else
for f in "$@"; do
if [[ "$f" == /* ]]; then
YANKED+=("$f")
elif [[ "$f" == ./* || "$f" == '.' ]]; then
YANKED+=("$pwd${f:1}")
else
YANKED+=("$pwd/$f")
fi
done
fi
echo "$(p)"
}
# tab completion
[[ $(command -v _complete_alias) ]] || source "$BASH_DOTFILES/shell/complete-alias/complete_alias"
source <(fdfind --gen-completions)
complete -F _complete_alias fd
complete -F _complete_alias dw
complete -F _complete_alias cw
complete -F _complete_alias g

68
.bashrc
View File

@@ -1,7 +1,63 @@
#!/usr/bin/env bash
export GREP_COLOR="1;32"
export EDITOR="vim"
export SUDO_EDITOR="vim"
export VISUAL="vim"
export BASH_DOTFILES="$HOME/.bash"
[[ -f "$BASH_DOTFILES/shell/index.sh" ]] \
&& source "$BASH_DOTFILES/shell/index.sh"
[[ -f "$BASH_DOTFILES/toolchains/index.sh" ]] \
&& source "$BASH_DOTFILES/toolchains/index.sh"
[[ -f /etc/bashrc ]] && . /etc/bashrc # Source global definitions
[ -d "$HOME/bin" ] && PATH="$HOME/bin:$PATH"
[[ $- != *i* ]] && return # If not running interactively, don't do anything
export HISTCONTROL=ignoreboth:erasedups
shopt -s histappend cmdhist
shopt -s histverify
export HISTSIZE=1000
export HISTFILESIZE=2000
set -o vi
bind -m vi-command 'Control-l: clear-screen'
bind -m vi-insert 'Control-l: clear-screen'
export MANPAGER="/bin/sh -c \"col -b | vim --not-a-term -c 'set ft=man ts=8 nomod nolist noma' -\""
export LS_COLORS=$LS_COLORS:'tw=01;04;34:ow=01;04;34:'
alias myip='curl -s -m 5 https://ipleak.net/json/'
alias q='exit'
if [ -x /usr/bin/dircolors ]; then
test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
alias ls='ls --color=auto'
alias dir='dir --color=auto'
alias vdir='vdir --color=auto'
alias grep='grep --color=auto'
alias fgrep='fgrep --color=auto'
alias egrep='egrep --color=auto'
alias diff='diff --color=auto'
fi
alias myls='ls -pQFhA --group-directories-first'
alias myrm='rm -vi'
alias mycp='cp -vi'
alias mymv='mv -vi'
alias mydf='df -Th'
alias myless='less -R -S'
mylsl(){ mls -l $* --color=always | mless; }
myup(){ cd $(eval printf '../'%.0s {1..$1}); }
mkcd(){ mkdir -p "${1:?}" && cd "${1}"; }
update(){ ~/update.sh && mv ~/update_new.sh ~/update.sh; }
myping(){ # Pings ip address of noip.com and www.google.com.
ping -c 1 -q 8.23.224.107 | grep --color=never -A 1 -i '\---'
ping -c 1 -q www.google.com | grep --color=never -A 1 -i '\---'
}
pushd(){ builtin pushd "$@" >/dev/null && dirs -v; }
popd() { builtin popd "$@" >/dev/null && dirs -v; }
usevim() { ln -s $PREFIX/bin/vim ~/bin/termux-file-editor; }
LAST_PWD_PATH="$(dirname "${BASH_SOURCE[0]}")/.bash_last_pwd"
[ -f "$LAST_PWD_PATH" ] && OLDPWD=`cat $LAST_PWD_PATH`
cd(){ builtin cd "$@" && echo `pwd` > "$LAST_PWD_PATH"; }
alias gitdotfiles='/usr/bin/git --git-dir="$HOME/.dotfiles/" --work-tree="$HOME"'
source ./.bash/complete-alias/complete_alias
complete -F _complete_alias gitdotfiles
# termux-setup-storage

View File

@@ -1,38 +0,0 @@
# A valid snippet should starts with:
#
# snippet trigger_word [ "description" [ options ] ]
#
# and end with:
#
# endsnippet
#
# Snippet options:
#
# b - Beginning of line.
# i - In-word expansion.
# w - Word boundary.
# r - Regular expression
# e - Custom context snippet
# A - Snippet will be triggered automatically, when condition matches.
#
# Basic example:
#
# snippet emitter "emitter properties" b
# private readonly ${1} = new Emitter<$2>()
# public readonly ${1/^_(.*)/$1/}: Event<$2> = this.$1.event
# endsnippet
#
# Online reference: https://github.com/SirVer/ultisnips/blob/master/doc/UltiSnips.txt
snippet cmt "/* | */"
${1}/* ${0} */
endsnippet
snippet f "inline function"
${1}function${2}(${3}){${0}}
endsnippet
snippet fun "function"
${1}function ${2:name}(${3:params}){
${0:/* code */}
}
endsnippet

View File

@@ -1,20 +0,0 @@
# an idea from https://github.com/robinpokorny/git3moji
# [![git3mojiv1.0](https://img.shields.io/badge/git3mojiv1.0-%E2%9A%A1%EF%B8%8F%F0%9F%90%9B%F0%9F%93%BA%F0%9F%91%AE%F0%9F%94%A4-fffad8.svg?style=flat-square)](https://robinpokorny.github.io/git3moji/)
snippet zap--⚡features-primary-concerns-3 ""
:zap:
endsnippet
snippet bug--🐛-fixes-3 ""
:bug:
endsnippet
snippet zapcop--⚡️👮-refactoring-3 ""
:zap::cop:
endsnippet
snippet tv--📺ci-tooling-configuration-3 ""
:tv:
endsnippet
snippet cop--👮tests-linting-comments-3 ""
:cop:
endsnippet
snippet abc--🔤-documentation-3 ""
:abc:
endsnippet

View File

@@ -1,204 +0,0 @@
snippet alembic--experimenting-new-things "" b
:alembic:
endsnippet
snippet alien--updating-code-due-to-external-api-changes "" b
:alien:
endsnippet
snippet ambulance--critical-hotfix "" b
:ambulance:
endsnippet
snippet apple--fixing-something-on-macos "" b
:apple:
endsnippet
snippet arrow_down--downgrading-dependencies "" b
:arrow_down:
endsnippet
snippet arrow_up--upgrading-dependencies "" b
:arrow_up:
endsnippet
snippet art--improving-structure--format-of-the-code "" b
:art:
endsnippet
snippet beers--writing-code-drunkenly "" b
:beers:
endsnippet
snippet bento--adding-or-updating-assets "" b
:bento:
endsnippet
snippet bookmark--releasing--version-tags "" b
:bookmark:
endsnippet
snippet boom--introducing-breaking-changes "" b
:boom:
endsnippet
snippet bug--fixing-a-bug "" b
:bug:
endsnippet
snippet building_construction--making-architectural-changes "" b
:building_construction:
endsnippet
snippet bulb--documenting-source-code "" b
:bulb:
endsnippet
snippet busts_in_silhouette--add-contributor(s) "" b
:busts_in_silhouette:
endsnippet
snippet camera_flash--adding-or-updating-snapshots "" b
:camera_flash:
endsnippet
snippet card_file_box--performing-database-related-changes "" b
:card_file_box:
endsnippet
snippet chart_with_upwards_trend--adding-analytics-or-tracking-code "" b
:chart_with_upwards_trend:
endsnippet
snippet checkered_flag--fixing-something-on-windows "" b
:checkered_flag:
endsnippet
snippet children_crossing--improving-user-experience--usability "" b
:children_crossing:
endsnippet
snippet clown_face--mocking-things "" b
:clown_face:
endsnippet
snippet construction--work-in-progress "" b
:construction:
endsnippet
snippet construction_worker--adding-ci-build-system "" b
:construction_worker:
endsnippet
snippet dizzy--adding-or-updating-animations-and-transitions "" b
:dizzy:
endsnippet
snippet egg--adding-an-easter-egg "" b
:egg:
endsnippet
snippet fire--removing-code-or-files "" b
:fire:
endsnippet
snippet globe_with_meridians--internationalization-and-localization "" b
:globe_with_meridians:
endsnippet
snippet goal_net--catching-errors"-b
:goal_net:
endsnippet
snippet green_apple--fixing-something-on-ios "" b
:green_apple:
endsnippet
snippet green_heart--fixing-ci-build "" b
:green_heart:
endsnippet
snippet heavy_minus_sign--removing-a-dependency "" b
:heavy_minus_sign:
endsnippet
snippet heavy_plus_sign--adding-a-dependency "" b
:heavy_plus_sign:
endsnippet
snippet iphone--working-on-responsive-design "" b
:iphone:
endsnippet
snippet label--adding-or-updating-types--flow--typescript "" b
:label:
endsnippet
snippet lipstick--updating-the-ui-and-style-files "" b
:lipstick:
endsnippet
snippet lock--fixing-security-issues "" b
:lock:
endsnippet
snippet loud_sound--adding-logs "" b
:loud_sound:
endsnippet
snippet mag--improving-seo "" b
:mag:
endsnippet
snippet memo--add-or-update-documentation "" b
:memo:
endsnippet
snippet mute--removing-logs "" b
:mute:
endsnippet
snippet ok_hand--updating-code-due-to-code-review-changes "" b
:ok_hand:
endsnippet
snippet package--updating-compiled-files-or-packages "" b
:package:
endsnippet
snippet page_facing_up--adding-or-updating-license "" b
:page_facing_up:
endsnippet
snippet pencil--writing-docs "" b
:pencil:
endsnippet
snippet pencil2--fixing-typos "" b
:pencil2:
endsnippet
snippet penguin--fixing-something-on-linux "" b
:penguin:
endsnippet
snippet poop--writing-bad-code-that-needs-to-be-improved "" b
:poop:
endsnippet
snippet pushpin--pinning-dependencies-to-specific-versions "" b
:pushpin:
endsnippet
snippet recycle--refactoring-code "" b
:recycle:
endsnippet
snippet rewind--reverting-changes "" b
:rewind:
endsnippet
snippet robot--fixing-something-on-android "" b
:robot:
endsnippet
snippet rocket--deploying-stuff "" b
:rocket:
endsnippet
snippet rotating_light--removing-linter-warnings "" b
:rotating_light:
endsnippet
snippet see_no_evil--adding-or-updating-a- "" b
:see_no_evil:
endsnippet
snippet seedling--adding-or-updating-seed-files"-b
:seedling:
endsnippet
snippet sparkles--introducing-new-features "" b
:sparkles:
endsnippet
snippet speech_balloon--updating-text-and-literals "" b
:speech_balloon:
endsnippet
snippet tada--initial-commit "" b
:tada:
endsnippet
snippet triangular_flag_on_post--adding--updating--or-removing-feature-flags "" b
:triangular_flag_on_post:
endsnippet
snippet truck--moving-or-renaming-files "" b
:truck:
endsnippet
snippet twisted_rightwards_arrows--merging-branches "" b
:twisted_rightwards_arrows:
endsnippet
snippet wastebasket--deprecating-code-that-needs-to-be-cleaned-up "" b
:wastebasket:
endsnippet
snippet whale--work-about-docker "" b
:whale:
endsnippet
snippet wheel_of_dharma--work-about-kubernetes "" b
:wheel_of_dharma:
endsnippet
snippet wheelchair--improving-accessibility "" b
:wheelchair:
endsnippet
snippet white_check_mark--updating-tests "" b
:white_check_mark:
endsnippet
snippet wrench--changing-configuration-files "" b
:wrench:
endsnippet
snippet zap--improving-performance "" b
:zap:
endsnippet

View File

@@ -1,38 +0,0 @@
snippet skeleton "HTML5" b
<!DOCTYPE html>
<!-- ${0}DEL IE https://www.paulirish.com/2008/conditional-stylesheets-vs-css-hacks-answer-neither/ -->
<html class="no-js" lang="en">
<head>
<meta charset="utf-8" />
<!-- DEL IE https://stackoverflow.com/questions/6771258/what-does-meta-http-equiv-x-ua-compatible-content-ie-edge-do -->
<!-- DEL https://www.vzhurudolu.cz/prirucka/viewport-meta -->
<meta name="viewport" content="width=device-width, initial-scale=1" />
<!-- DEL CSP https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP | https://github.com/Prinzhorn/minimal-csp -->
<!-- DEL https://github.com/jensimmons/cssremedy -->
<!-- DEL meta značky obecně https://www.vzhurudolu.cz/prirucka/meta-open-graph -->
<title></title>
<meta name="description" content="">
<!-- DEL IE https://www.sitepoint.com/html5-older-browsers-and-the-shiv/ -->
<!-- DEL https://www.vzhurudolu.cz/prirucka/checklist -->
</head>
<body>
<!-- DEL -->
</body>
</html>
endsnippet
snippet cmt "comment"
<!-- ${0} -->
endsnippet
snippet cmt.js "comment"
/* ${0} */
endsnippet
snippet viewport_cordova "viewport used in cordova apps"
<meta name="viewport" content="user-scalable=no, width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1"/>
endsnippet
snippet csp_cordova "CSP used in cordova"
<meta http-equiv="Content-Security-Policy" content="default-src * gap://ready file: gulp_place('app.url_scheme', 'variable'):; style-src 'self' 'unsafe-inline'; img-src * data: *; script-src 'self' 'unsafe-inline' 'unsafe-eval'"/>
<meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; img-src 'self' data: android-webview-video-poster:; script-src 'self' 'unsafe-inline' 'unsafe-eval'">
endsnippet

View File

@@ -1,87 +0,0 @@
snippet skeleton_node "nodejs" b
#!/usr/bin/env node
/* jshint esversion: 8,-W097, -W040, node: true, expr: true, undef: true */
${0}
endsnippet
snippet skeleton_cli "nodejsscript" b
#!/usr/bin/env nodejsscript
/* jshint esversion: 11,-W097, -W040, module: true, node: true, expr: true, undef: true *//* global echo, $, pipe, s, fetch, cyclicLoop */
${0}
endsnippet
snippet skeleton_zx "zx" b
#!/usr/bin/env zx
/* jshint esversion: 8,-W097, -W040, node: true, expr: true, undef: true */
${0}
endsnippet
snippet jshint "JSHint header" b
/* jshint esversion: 6,-W097, -W040, browser: true, expr: true, undef: true */
/* global ${0} */
endsnippet
snippet global "JSHint global"
/* global ${0} */
endsnippet
snippet global_ns "JSHint global"
/* ${1} *//* global ${0} */
endsnippet
snippet devel "JSHint devel"
${1}/* jshint devel: true *///gulp.keep.line${0}
endsnippet
snippet log "console.log"
${1}console.log('${0}');
endsnippet
snippet stor "localStorage"
${1}localStorage.${2:g}etItem("${0}");
endsnippet
snippet import "import with backward order"
import ${2:values} from "${1:specifier}";$0
endsnippet
snippet promise "return? new Promise"
${1:return }new Promise(function(resolve, reject){
${0:/* async code */}
});
endsnippet
snippet for "classical loop"
for(${1:let} ${2:i}= 0, ${2}_length= ${3:ITERABLE}.length; ${2}<${2}_length; ${2}++){
${0:/* statement */}
}
endsnippet
snippet foreach "PHP-like name" b
for(${2:const} ${3:element} of ${1:iterable}){
${0:/* statement */}
}
endsnippet
snippet switch "classical switch"
switch (${1}){
case ${2}:
${0}
break;
default:
}
endsnippet
snippet desctr "object destructure"
${1:const} { $0 }= ${2:def};
endsnippet
snippet ready "document ready"
${1}document.addEventListener('DOMContentLoaded', ${0}, false)
endsnippet
snippet readyEvent "vanilla JS content ready event name"
${1}DOMContentLoaded${0}
endsnippet
snippet selid
${1}document.getElementById('${0}')
endsnippet
snippet seltag
${1}getElementsByTagName('${0}')
endsnippet
snippet selclass
${1}getElementsByClassName('${0}')
endsnippet
snippet sel
${1}querySelector('${0}')
endsnippet
snippet selall
${1}querySelectorAll('${0}')
endsnippet

View File

@@ -1,88 +0,0 @@
extends javascript
snippet skeleton_node "nodejs" b
#!/usr/bin/env node
/* jshint esversion: 8,-W097, -W040, node: true, expr: true, undef: true */
${0}
endsnippet
snippet skeleton_cli "nodejsscript" b
#!/usr/bin/env nodejsscript
/* jshint esversion: 11,-W097, -W040, module: true, node: true, expr: true, undef: true *//* global echo, $, pipe, s, fetch, cyclicLoop */
${0}
endsnippet
snippet skeleton_zx "zx" b
#!/usr/bin/env zx
/* jshint esversion: 8,-W097, -W040, node: true, expr: true, undef: true */
${0}
endsnippet
snippet jshint "JSHint header" b
/* jshint esversion: 6,-W097, -W040, browser: true, expr: true, undef: true */
/* global ${0} */
endsnippet
snippet global "JSHint global"
/* global ${0} */
endsnippet
snippet global_ns "JSHint global"
/* ${1} *//* global ${0} */
endsnippet
snippet devel "JSHint devel"
${1}/* jshint devel: true *///gulp.keep.line${0}
endsnippet
snippet log "console.log"
${1}console.log('${0}');
endsnippet
snippet stor "localStorage"
${1}localStorage.${2:g}etItem("${0}");
endsnippet
snippet import "import with backward order"
import ${2:values} from "${1:specifier}";$0
endsnippet
snippet promise "return? new Promise"
${1:return }new Promise(function(resolve, reject){
${0:/* async code */}
});
endsnippet
snippet for "classical loop"
for(${1:let} ${2:i}= 0, ${2}_length= ${3:ITERABLE}.length; ${2}<${2}_length; ${2}++){
${0:/* statement */}
}
endsnippet
snippet foreach "PHP-like name" b
for(${2:const} ${3:element} of ${1:iterable}){
${0:/* statement */}
}
endsnippet
snippet switch "classical switch"
switch (${1}){
case ${2}:
${0}
break;
default:
}
endsnippet
snippet desctr "object destructure"
${1:const} { $0 }= ${2:def};
endsnippet
snippet ready "document ready"
${1}document.addEventListener('DOMContentLoaded', ${0}, false)
endsnippet
snippet readyEvent "vanilla JS content ready event name"
${1}DOMContentLoaded${0}
endsnippet
snippet selid
${1}document.getElementById('${0}')
endsnippet
snippet seltag
${1}getElementsByTagName('${0}')
endsnippet
snippet selclass
${1}getElementsByClassName('${0}')
endsnippet
snippet sel
${1}querySelector('${0}')
endsnippet
snippet selall
${1}querySelectorAll('${0}')
endsnippet

View File

@@ -1,14 +0,0 @@
snippet jshint "JSHint config for package.json" b
"jshintConfig": {
"esversion": 6,
"browser": "true",
"undef": "true",
"latedef": "true",
"maxparams": 4,
"maxdepth": 3,
"maxcomplexity": 17,
"globals": {
"gulp_place": false
}
}
endsnippet

View File

@@ -1,40 +0,0 @@
extends html
snippet skeleton "HTML5" b
<!DOCTYPE html>
<!-- ${0}DEL IE https://www.paulirish.com/2008/conditional-stylesheets-vs-css-hacks-answer-neither/ -->
<html class="no-js" lang="en">
<head>
<meta charset="utf-8" />
<!-- DEL IE https://stackoverflow.com/questions/6771258/what-does-meta-http-equiv-x-ua-compatible-content-ie-edge-do -->
<!-- DEL https://www.vzhurudolu.cz/prirucka/viewport-meta -->
<meta name="viewport" content="width=device-width, initial-scale=1" />
<!-- DEL CSP https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP | https://github.com/Prinzhorn/minimal-csp -->
<!-- DEL https://github.com/jensimmons/cssremedy -->
<!-- DEL meta značky obecně https://www.vzhurudolu.cz/prirucka/meta-open-graph -->
<title></title>
<meta name="description" content="">
<!-- DEL IE https://www.sitepoint.com/html5-older-browsers-and-the-shiv/ -->
<!-- DEL https://www.vzhurudolu.cz/prirucka/checklist -->
</head>
<body>
<!-- DEL -->
</body>
</html>
endsnippet
snippet cmt "comment"
<!-- ${0} -->
endsnippet
snippet cmt.js "comment"
/* ${0} */
endsnippet
snippet viewport_cordova "viewport used in cordova apps"
<meta name="viewport" content="user-scalable=no, width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1"/>
endsnippet
snippet csp_cordova "CSP used in cordova"
<meta http-equiv="Content-Security-Policy" content="default-src * gap://ready file: gulp_place('app.url_scheme', 'variable'):; style-src 'self' 'unsafe-inline'; img-src * data: *; script-src 'self' 'unsafe-inline' 'unsafe-eval'"/>
<meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; img-src 'self' data: android-webview-video-poster:; script-src 'self' 'unsafe-inline' 'unsafe-eval'">
endsnippet
#endextends

View File

@@ -1,40 +0,0 @@
extends html
snippet skeleton "HTML5" b
<!DOCTYPE html>
<!-- ${0}DEL IE https://www.paulirish.com/2008/conditional-stylesheets-vs-css-hacks-answer-neither/ -->
<html class="no-js" lang="en">
<head>
<meta charset="utf-8" />
<!-- DEL IE https://stackoverflow.com/questions/6771258/what-does-meta-http-equiv-x-ua-compatible-content-ie-edge-do -->
<!-- DEL https://www.vzhurudolu.cz/prirucka/viewport-meta -->
<meta name="viewport" content="width=device-width, initial-scale=1" />
<!-- DEL CSP https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP | https://github.com/Prinzhorn/minimal-csp -->
<!-- DEL https://github.com/jensimmons/cssremedy -->
<!-- DEL meta značky obecně https://www.vzhurudolu.cz/prirucka/meta-open-graph -->
<title></title>
<meta name="description" content="">
<!-- DEL IE https://www.sitepoint.com/html5-older-browsers-and-the-shiv/ -->
<!-- DEL https://www.vzhurudolu.cz/prirucka/checklist -->
</head>
<body>
<!-- DEL -->
</body>
</html>
endsnippet
snippet cmt "comment"
<!-- ${0} -->
endsnippet
snippet cmt.js "comment"
/* ${0} */
endsnippet
snippet viewport_cordova "viewport used in cordova apps"
<meta name="viewport" content="user-scalable=no, width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1"/>
endsnippet
snippet csp_cordova "CSP used in cordova"
<meta http-equiv="Content-Security-Policy" content="default-src * gap://ready file: gulp_place('app.url_scheme', 'variable'):; style-src 'self' 'unsafe-inline'; img-src * data: *; script-src 'self' 'unsafe-inline' 'unsafe-eval'"/>
<meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; img-src 'self' data: android-webview-video-poster:; script-src 'self' 'unsafe-inline' 'unsafe-eval'">
endsnippet
#endextends

View File

@@ -1,9 +0,0 @@
snippet skeleton "bash" b
#!/usr/bin/env ${1:bash}
set -eou pipefail
${0}
endsnippet
snippet info "script name and version" b
this="${0##*/}"
version="`date +%Y-%m-%d`"
endsnippet

View File

@@ -1,88 +0,0 @@
extends javascript
snippet skeleton_node "nodejs" b
#!/usr/bin/env node
/* jshint esversion: 8,-W097, -W040, node: true, expr: true, undef: true */
${0}
endsnippet
snippet skeleton_cli "nodejsscript" b
#!/usr/bin/env nodejsscript
/* jshint esversion: 11,-W097, -W040, module: true, node: true, expr: true, undef: true *//* global echo, $, pipe, s, fetch, cyclicLoop */
${0}
endsnippet
snippet skeleton_zx "zx" b
#!/usr/bin/env zx
/* jshint esversion: 8,-W097, -W040, node: true, expr: true, undef: true */
${0}
endsnippet
snippet jshint "JSHint header" b
/* jshint esversion: 6,-W097, -W040, browser: true, expr: true, undef: true */
/* global ${0} */
endsnippet
snippet global "JSHint global"
/* global ${0} */
endsnippet
snippet global_ns "JSHint global"
/* ${1} *//* global ${0} */
endsnippet
snippet devel "JSHint devel"
${1}/* jshint devel: true *///gulp.keep.line${0}
endsnippet
snippet log "console.log"
${1}console.log('${0}');
endsnippet
snippet stor "localStorage"
${1}localStorage.${2:g}etItem("${0}");
endsnippet
snippet import "import with backward order"
import ${2:values} from "${1:specifier}";$0
endsnippet
snippet promise "return? new Promise"
${1:return }new Promise(function(resolve, reject){
${0:/* async code */}
});
endsnippet
snippet for "classical loop"
for(${1:let} ${2:i}= 0, ${2}_length= ${3:ITERABLE}.length; ${2}<${2}_length; ${2}++){
${0:/* statement */}
}
endsnippet
snippet foreach "PHP-like name" b
for(${2:const} ${3:element} of ${1:iterable}){
${0:/* statement */}
}
endsnippet
snippet switch "classical switch"
switch (${1}){
case ${2}:
${0}
break;
default:
}
endsnippet
snippet desctr "object destructure"
${1:const} { $0 }= ${2:def};
endsnippet
snippet ready "document ready"
${1}document.addEventListener('DOMContentLoaded', ${0}, false)
endsnippet
snippet readyEvent "vanilla JS content ready event name"
${1}DOMContentLoaded${0}
endsnippet
snippet selid
${1}document.getElementById('${0}')
endsnippet
snippet seltag
${1}getElementsByTagName('${0}')
endsnippet
snippet selclass
${1}getElementsByClassName('${0}')
endsnippet
snippet sel
${1}querySelector('${0}')
endsnippet
snippet selall
${1}querySelectorAll('${0}')
endsnippet

View File

@@ -1,88 +0,0 @@
extends javascript
snippet skeleton_node "nodejs" b
#!/usr/bin/env node
/* jshint esversion: 8,-W097, -W040, node: true, expr: true, undef: true */
${0}
endsnippet
snippet skeleton_cli "nodejsscript" b
#!/usr/bin/env nodejsscript
/* jshint esversion: 11,-W097, -W040, module: true, node: true, expr: true, undef: true *//* global echo, $, pipe, s, fetch, cyclicLoop */
${0}
endsnippet
snippet skeleton_zx "zx" b
#!/usr/bin/env zx
/* jshint esversion: 8,-W097, -W040, node: true, expr: true, undef: true */
${0}
endsnippet
snippet jshint "JSHint header" b
/* jshint esversion: 6,-W097, -W040, browser: true, expr: true, undef: true */
/* global ${0} */
endsnippet
snippet global "JSHint global"
/* global ${0} */
endsnippet
snippet global_ns "JSHint global"
/* ${1} *//* global ${0} */
endsnippet
snippet devel "JSHint devel"
${1}/* jshint devel: true *///gulp.keep.line${0}
endsnippet
snippet log "console.log"
${1}console.log('${0}');
endsnippet
snippet stor "localStorage"
${1}localStorage.${2:g}etItem("${0}");
endsnippet
snippet import "import with backward order"
import ${2:values} from "${1:specifier}";$0
endsnippet
snippet promise "return? new Promise"
${1:return }new Promise(function(resolve, reject){
${0:/* async code */}
});
endsnippet
snippet for "classical loop"
for(${1:let} ${2:i}= 0, ${2}_length= ${3:ITERABLE}.length; ${2}<${2}_length; ${2}++){
${0:/* statement */}
}
endsnippet
snippet foreach "PHP-like name" b
for(${2:const} ${3:element} of ${1:iterable}){
${0:/* statement */}
}
endsnippet
snippet switch "classical switch"
switch (${1}){
case ${2}:
${0}
break;
default:
}
endsnippet
snippet desctr "object destructure"
${1:const} { $0 }= ${2:def};
endsnippet
snippet ready "document ready"
${1}document.addEventListener('DOMContentLoaded', ${0}, false)
endsnippet
snippet readyEvent "vanilla JS content ready event name"
${1}DOMContentLoaded${0}
endsnippet
snippet selid
${1}document.getElementById('${0}')
endsnippet
snippet seltag
${1}getElementsByTagName('${0}')
endsnippet
snippet selclass
${1}getElementsByClassName('${0}')
endsnippet
snippet sel
${1}querySelector('${0}')
endsnippet
snippet selall
${1}querySelectorAll('${0}')
endsnippet

View File

@@ -1,127 +0,0 @@
extends javascript, html
snippet skeleton_node "nodejs" b
#!/usr/bin/env node
/* jshint esversion: 8,-W097, -W040, node: true, expr: true, undef: true */
${0}
endsnippet
snippet skeleton_cli "nodejsscript" b
#!/usr/bin/env nodejsscript
/* jshint esversion: 11,-W097, -W040, module: true, node: true, expr: true, undef: true *//* global echo, $, pipe, s, fetch, cyclicLoop */
${0}
endsnippet
snippet skeleton_zx "zx" b
#!/usr/bin/env zx
/* jshint esversion: 8,-W097, -W040, node: true, expr: true, undef: true */
${0}
endsnippet
snippet jshint "JSHint header" b
/* jshint esversion: 6,-W097, -W040, browser: true, expr: true, undef: true */
/* global ${0} */
endsnippet
snippet global "JSHint global"
/* global ${0} */
endsnippet
snippet global_ns "JSHint global"
/* ${1} *//* global ${0} */
endsnippet
snippet devel "JSHint devel"
${1}/* jshint devel: true *///gulp.keep.line${0}
endsnippet
snippet log "console.log"
${1}console.log('${0}');
endsnippet
snippet stor "localStorage"
${1}localStorage.${2:g}etItem("${0}");
endsnippet
snippet import "import with backward order"
import ${2:values} from "${1:specifier}";$0
endsnippet
snippet promise "return? new Promise"
${1:return }new Promise(function(resolve, reject){
${0:/* async code */}
});
endsnippet
snippet for "classical loop"
for(${1:let} ${2:i}= 0, ${2}_length= ${3:ITERABLE}.length; ${2}<${2}_length; ${2}++){
${0:/* statement */}
}
endsnippet
snippet foreach "PHP-like name" b
for(${2:const} ${3:element} of ${1:iterable}){
${0:/* statement */}
}
endsnippet
snippet switch "classical switch"
switch (${1}){
case ${2}:
${0}
break;
default:
}
endsnippet
snippet desctr "object destructure"
${1:const} { $0 }= ${2:def};
endsnippet
snippet ready "document ready"
${1}document.addEventListener('DOMContentLoaded', ${0}, false)
endsnippet
snippet readyEvent "vanilla JS content ready event name"
${1}DOMContentLoaded${0}
endsnippet
snippet selid
${1}document.getElementById('${0}')
endsnippet
snippet seltag
${1}getElementsByTagName('${0}')
endsnippet
snippet selclass
${1}getElementsByClassName('${0}')
endsnippet
snippet sel
${1}querySelector('${0}')
endsnippet
snippet selall
${1}querySelectorAll('${0}')
endsnippet
snippet skeleton "HTML5" b
<!DOCTYPE html>
<!-- ${0}DEL IE https://www.paulirish.com/2008/conditional-stylesheets-vs-css-hacks-answer-neither/ -->
<html class="no-js" lang="en">
<head>
<meta charset="utf-8" />
<!-- DEL IE https://stackoverflow.com/questions/6771258/what-does-meta-http-equiv-x-ua-compatible-content-ie-edge-do -->
<!-- DEL https://www.vzhurudolu.cz/prirucka/viewport-meta -->
<meta name="viewport" content="width=device-width, initial-scale=1" />
<!-- DEL CSP https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP | https://github.com/Prinzhorn/minimal-csp -->
<!-- DEL https://github.com/jensimmons/cssremedy -->
<!-- DEL meta značky obecně https://www.vzhurudolu.cz/prirucka/meta-open-graph -->
<title></title>
<meta name="description" content="">
<!-- DEL IE https://www.sitepoint.com/html5-older-browsers-and-the-shiv/ -->
<!-- DEL https://www.vzhurudolu.cz/prirucka/checklist -->
</head>
<body>
<!-- DEL -->
</body>
</html>
endsnippet
snippet cmt "comment"
<!-- ${0} -->
endsnippet
snippet cmt.js "comment"
/* ${0} */
endsnippet
snippet viewport_cordova "viewport used in cordova apps"
<meta name="viewport" content="user-scalable=no, width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1"/>
endsnippet
snippet csp_cordova "CSP used in cordova"
<meta http-equiv="Content-Security-Policy" content="default-src * gap://ready file: gulp_place('app.url_scheme', 'variable'):; style-src 'self' 'unsafe-inline'; img-src * data: *; script-src 'self' 'unsafe-inline' 'unsafe-eval'"/>
<meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; img-src 'self' data: android-webview-video-poster:; script-src 'self' 'unsafe-inline' 'unsafe-eval'">
endsnippet
#endextends

View File

@@ -1,19 +0,0 @@
# What protocol to use when performing git operations. Supported values: ssh, https
git_protocol: ssh
# What editor gh should run when creating issues, pull requests, etc. If blank, will refer to environment.
editor:
# When to interactively prompt. This is a global config that cannot be overridden by hostname. Supported values: enabled, disabled
prompt: enabled
# A pager program to send command output to, e.g. "less". Set the value to "cat" to disable the pager.
pager:
# Aliases allow you to create nicknames for gh commands
aliases:
§modules: issue list --label "modules (auxiliary)" --state "closed"
§grepAsana_: '!grep "Issue is synchronized with this \[Asana task\]" | §awk -F "(" 2 | §awk -F ")" 1 | §awk -F "/" 6'
§indigo: api user/orgs -q '.[0].login'
§workflow-test: '!git commit -mWIP .github/workflows/$1 && git push && gh workflow run --ref $(git rev-parse --abbrev-ref HEAD) $@'
# The path to a unix socket through which send HTTP connections. If blank, HTTP traffic will be handled by net/http.DefaultTransport.
http_unix_socket:
# What web browser gh should use when opening URLs. If blank, will refer to environment.
browser:
version: "1"

View File

@@ -1,117 +0,0 @@
# better? defaults
[help]
autocorrect = prompt
[init]
defaultBranch = main
[column]
ui = auto
[branch]
sort = -committerdate
[tag]
sort = version:refname
[status]
branch = true
short = true
showStash = true
showUntrackedFiles = all
submoduleSummary = true
[log]
date = iso
[fetch]
prune = true
pruneTags = true
[push]
autoSetupRemote = true
followTags = true
recurseSubmodules = on-demand
[pull]
rebase = true
[rerere]
enabled = true
autoupdate = true
[gc]
reflogExpire = 200
reflogExpireUnreachable = 90
[commit]
verbose = true
gpgsign = true
template = ~/.config/git/template
[rebase]
autoSquash = true
autoStash = true
updateRefs = true
# my setup
[core]
pager = PAGER=less delta
editor = vim
whitespace = -trailing-space,-space-before-tab
compression = 9 # trade cpu for network
[alias]
commit--interactive= !clear && git status && git commit --interactive
diff-dirs = diff --dirstat --find-copies --find-renames --histogram --color
notes-json = !git notes | njs -p '$.stdin.lines().map(l=> l.split(\" \")).map(([ id_note, id_commit ])=> ({id_commit, id_note, head: s.$().run`git show ${id_note}`.head().toString().split(\"\\n\")}))' 'o=> JSON.stringify(o, null, \"\t\")'
submodule-update-merge = submodule update --remote --merge
symbolic-ref-defaultBranch = !git symbolic-ref refs/remotes/origin/HEAD | cut -d'/' -f4-
tag-l = tag -l --sort=-creatordate --format='%(refname:short): [%(creatordate:short)] %(subject)'
h-branches = !echo 'brv (git-extras)'
h-format-htma = !echo '%Cred%h%Creset %Cgreen[%ad] -%C(yellow)%d%Creset %s %C(bold blue)<%an>%Creset'
h-unstage = !echo reset HEAD --
h-undoall = !echo reset --soft HEAD^
h-submodule-delete = !echo 'delete-submodule (git-extras)'
[but "alias"]
sta = status -v
sta-f = status -vf
co = commit
[diff]
pager = diffnav
wsErrorHighlight = all
tool = vimdiff
submodule = log
algorithm = histogram
# https://git-scm.com/docs/git-diff#Documentation/git-diff.txt-code--color-movedltmodegtcode
colorMoved = dimmed-zebra
mnemonicPrefix = true
renames = true
[interactive]
diffFilter = delta --color-only
[merge]
tool = vimdiff
conflictstyle = zdiff3
[delta] # [dandavison/delta: A syntax-highlighting pager for git, diff, and grep output](https://github.com/dandavison/delta)
syntax-theme= Visual Studio Dark+
dark = true
navigate = true
side-by-side = true
line-numbers = true
[filter "lfs"]
required = true
clean = git-lfs clean -- %f
smudge = git-lfs smudge -- %f
process = git-lfs filter-process
[diff "exif"]
textconv = exiftool
[difftool "kommitdiff"]
[mergetool "kommitmerge"]
cmd = kommitmerge \"$BASE\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\"
trustExitCode = true
[maintenance]
repo = /home/jaandrle/Vzdálené/GitHub/dcp-fe-container-certifedpassport
repo = /home/jaandrle/Vzdálené/GitHub/DHLC-Internet-Networking-old
repo = /home/jaandrle/Vzdálené/GitHub/DGF-Certified-Supervisory-Academy
[submodule]
recurse = true
[format]
coverLetter = auto
compactSummary = true
minimal = true
signOff = true
outputDirectory = .patches
thread = shallow
numbered = auto
[am]
# keepcr = true # to preserve line endings
threeWay = true
[include]
path = ./identities/current.conf

View File

@@ -1,64 +0,0 @@
set mainfont {{Ubuntu Mono} 11}
set textfont {{Ubuntu Mono} 11}
set uifont {{Ubuntu Mono} 11 bold}
set tabstop 8
set findmergefiles 0
set maxgraphpct 50
set maxwidth 16
set cmitmode patch
set wrapcomment none
set autoselect 1
set autosellen 40
set showneartags 1
set maxrefs 20
set visiblerefs {"master"}
set hideremotes 0
set showlocalchanges 1
set datetimeformat {%Y-%m-%d %H:%M:%S}
set limitdiffs 1
set uicolor #302c2c
set want_ttk 1
set bgcolor #2e3031
set fgcolor #d9dedc
set uifgcolor black
set uifgdisabledcolor #999
set colors {"#00ff00" red blue magenta darkgrey brown orange}
set diffcolors {{#ffffff} #ffffff #3376f0}
set mergecolors {red blue "#00ff00" purple brown "#009090" magenta "#808000" "#009000" "#ff0080" cyan "#b07070" "#70b0f0" "#70f0b0" "#f0b070" "#ff70b0"}
set markbgcolor #8b8b8e
set diffcontext 3
set selectbgcolor #000000
set foundbgcolor yellow
set currentsearchhitbgcolor orange
set extdifftool meld
set perfile_attrs 0
set headbgcolor #00ff00
set headfgcolor black
set headoutlinecolor black
set remotebgcolor #ffddaa
set tagbgcolor yellow
set tagfgcolor black
set tagoutlinecolor black
set reflinecolor black
set filesepbgcolor #aaaaaa
set filesepfgcolor black
set linehoverbgcolor #ffff80
set linehoverfgcolor black
set linehoveroutlinecolor black
set mainheadcirclecolor yellow
set workingfilescirclecolor red
set indexcirclecolor #00ff00
set circlecolors {white blue gray blue blue}
set linkfgcolor blue
set circleoutlinecolor black
set diffbgcolors {{#600000} #004800}
set web_browser xdg-open
set geometry(main) 1920x1023+0+26
set geometry(state) normal
set geometry(topwidth) 1920
set geometry(topheight) 255
set geometry(pwsash0) "672 1"
set geometry(pwsash1) "1008 1"
set geometry(botwidth) 836
set geometry(botheight) 763
set permviews {}

View File

@@ -1,21 +0,0 @@
[user]
name = Jan Andrle
email = andrle.jan@centrum.cz
signingkey = B3A25AED155AFFAB
[credential]
# see https://stackoverflow.com/questions/5343068/is-there-a-way-to-cache-https-credentials-for-pushing-commits/18362082#18362082
helper = /usr/share/doc/git/contrib/credential/libsecret/git-credential-libsecret
[credential "https://github.com"]
helper = !/usr/bin/gh auth git-credential
[credential "https://gist.github.com"]
helper = !/usr/bin/gh auth git-credential
[credential "https://git.dhl.com"]
helper = !/usr/bin/gh auth git-credential
[sendemail]
anotate = true
smtpserver = smtp.centrum.cz
# chainReplyTo = false
suppresscc = self
smtpuser = andrle.jan@centrum.cz
smtpencryption = ssl
smtpserverport = 465

View File

@@ -1,252 +0,0 @@
{
"target": "/home/jaandrle/.local/bin/",
"packages": [
{
"repository": "shiftkey/desktop",
"name": "GitHub Desktop",
"group": "skip-dev",
"file_name": "github-desktop",
"exec": "yes",
"description": "Fork of GitHub Desktop to support various Linux distributions",
"last_update": "2024-08-17T01:47:21Z",
"downloads": "/home/jaandrle/.local/bin/github-desktop",
"version": "release-3.4.4-linuxbeta2",
"glare": ".*x86_64.*.AppImage"
},
{
"repository": "pinokiocomputer/pinokio",
"name": "Pinokio",
"group": "ai",
"file_name": "pinokio",
"exec": "yes",
"description": "AI Browser",
"glare": "AppImage",
"last_update": "2026-01-27T19:10:41Z",
"version": "v6.0.10",
"downloads": "/home/jaandrle/.local/bin/pinokio"
},
{
"repository": "jaandrle/jaaCSS-cli",
"name": "jaaCSS",
"description": "EXPERIMENT Helper for managing functional CSS classes",
"group": "dev",
"file_name": "jaaCSS.js",
"exec": "yes",
"downloads": "/home/jaandrle/.local/bin/jaaCSS.js",
"version": "v1.3.2",
"last_update": "2022-09-02T13:33:16Z",
"glare": "jaaCSS.js"
},
{
"repository": "th-ch/youtube-music",
"name": "youtube-music",
"description": "YouTube Music Desktop App bundled with custom plugins (and built-in ad blocker / downloader)",
"group": "skip-nondev",
"file_name": "youtube-music",
"exec": "yes",
"last_update": "2024-10-16T11:58:54Z",
"downloads": "/home/jaandrle/.local/bin/youtube-music",
"version": "v3.6.2",
"glare": "AppImage"
},
{
"repository": "rvpanoz/luna",
"name": "luna",
"description": "Manage npm dependencies through a modern UI.",
"group": "skip-dev",
"file_name": "luna",
"exec": "yes",
"glare": "AppImage",
"last_update": "2020-10-29T23:06:39Z",
"version": "v.3.4.6",
"downloads": "/home/jaandrle/.local/bin/luna"
},
{
"repository": "angela-d/wifi-channel-watcher",
"name": "wifi-channel-watcher",
"group": "skip-nondev",
"file_name": "wifi-channel-watcher",
"exec": "no",
"description": "Monitor channel usage of neighboring routers & get an alert if your active channel is not optimal.\tTroubleshoot wifi without lifting a finger!"
},
{
"repository": "AppImage/AppImageKit",
"name": "AppImageKit",
"group": "skip-nondev",
"file_name": "appimagekit",
"exec": "yes",
"description": "Package desktop applications as AppImages that run on common Linux-based operating systems, such as RHEL, CentOS, openSUSE, SLED, Ubuntu, Fedora, debian and derivatives. Join #AppImage on irc.freenode.net",
"glare": ".*x86_64.*.AppImage",
"last_update": "2023-03-08T23:25:46Z",
"version": "continuous",
"downloads": "/home/jaandrle/.local/bin/appimagekit"
},
{
"repository": "dynobo/normcap",
"name": "NormCap",
"description": "Switched to flatpak version | OCR powered screen-capture tool to capture information instead of images",
"group": "skip-nondev",
"file_name": "normcap",
"exec": "yes",
"last_update": "2023-12-12T22:23:37Z",
"downloads": "/home/jaandrle/.local/bin/normcap",
"version": "v0.5.2"
},
{
"repository": "upscayl/upscayl",
"name": "upscayl",
"description": "🆙 Upscayl - Free and Open Source AI Image Upscaler for Linux, MacOS and Windows built with Linux-First philosophy.",
"group": "nondev",
"file_name": "upscayl",
"exec": "yes",
"last_update": "2024-12-25T13:44:34Z",
"downloads": "/home/jaandrle/.local/bin/upscayl",
"version": "v2.15.0",
"glare": "AppImage"
},
{
"repository": "h3poteto/fedistar",
"name": "Fedistar",
"description": "Multi-column Mastodon, Pleroma, and Friendica client for desktop",
"group": "nondev",
"file_name": "fedistar.appimage",
"exec": "yes",
"last_update": "2026-02-26T15:30:17Z",
"downloads": "/home/jaandrle/.local/bin/fedistar.appimage",
"version": "v1.12.5",
"glare": ".*amd64.*.AppImage"
},
{
"repository": "neovim/neovim",
"name": "neovim",
"tag_name_regex": "v.*",
"description": "Vim-fork focused on extensibility and usability",
"group": "skip-dev",
"file_name": "nvim",
"exec": "yes",
"downloads": "/home/jaandrle/.local/bin/nvim",
"version": "v0.9.5",
"last_update": "2023-12-30T13:31:47Z"
},
{
"repository": "vim/vim-appimage",
"name": "vim",
"description": "AppImage for gVim",
"group": "dev",
"file_name": "vim",
"exec": "yes",
"downloads": "/home/jaandrle/.local/bin/vim",
"version": "v9.2.0110",
"glare": "GVim.*x86_64.*.AppImage",
"last_update": "2026-03-05T01:59:40Z"
},
{
"repository": "viarotel-org/escrcpy",
"name": "Escrcpy",
"description": "📱 Graphical Scrcpy to display and control Android, devices powered by Electron. | 使用图形化的 Scrcpy 显示和控制您的 Android 设备,由 Electron 驱动。",
"group": "dev",
"file_name": "escrcpy.appimage",
"exec": "yes",
"last_update": "2026-02-27T02:20:44Z",
"downloads": "/home/jaandrle/.local/bin/escrcpy.appimage",
"version": "v2.5.1",
"glare": ".*x86_64.*.AppImage"
},
{
"repository": "drovp/drovp",
"name": "drovp",
"description": "Desktop app for encoding, converting, upscaling, and much more.",
"group": "dev-test",
"file_name": "drovp",
"exec": "yes",
"last_update": "2024-10-06T16:26:38Z",
"downloads": "/home/jaandrle/.local/bin/drovp",
"version": "0.8.2",
"glare": "x64.AppImage"
},
{
"repository": "janhq/jan",
"name": "Jan",
"description": "Jan is an open source alternative to ChatGPT that runs 100% offline on your computer",
"group": "ai",
"file_name": "jan",
"exec": "yes",
"last_update": "2026-02-11T10:30:05Z",
"downloads": "/home/jaandrle/.local/bin/jan",
"version": "v0.7.7",
"glare": ".*amd64.AppImage"
},
{
"repository": "Bin-Huang/chatbox",
"name": "Chatbox",
"description": "Chatbox is a desktop client for ChatGPT, Claude and other LLMs, available on Windows, Mac, Linux",
"group": "ai",
"file_name": "Chatbox",
"exec": "yes",
"last_update": "2026-02-13T04:42:28Z",
"downloads": "/home/jaandrle/.local/bin/Chatbox",
"version": "v1.19.0",
"glare": ".*x86_64.*.AppImage"
},
{
"repository": "Martichou/rquickshare",
"group": "nondev",
"name": "r-quick-share",
"description": "Rust implementation of NearbyShare/QuickShare from Android for Linux and macOS.",
"file_name": "r-quick-share",
"exec": "yes",
"downloads": "/home/jaandrle/.local/bin/r-quick-share",
"glare": ".*main.*amd64.AppImage",
"last_update": "2025-02-23T18:15:49Z",
"version": "v0.11.5"
},
{
"repository": "konnektoren/konnektoren-mobile-app",
"group": "nondev",
"name": "Konnektoren",
"description": "Konnektoren Mobile App (learning german) — https://konnektoren.help/home/",
"file_name": "konnektoren",
"exec": "yes",
"downloads": "/home/jaandrle/.local/bin/konnektoren",
"glare": "AppImage",
"last_update": "2025-04-27T07:33:51Z",
"version": "konnektoren-mobile-app-v0.1.4"
},
{
"repository": "TibixDev/winboat",
"group": "nondev",
"name": "WinBoat",
"description": "Run Windows apps on 🐧 Linux with ✨ seamless integration",
"file_name": "winboat",
"exec": "yes",
"downloads": "/home/jaandrle/.local/bin/winboat",
"glare": ".*x86_64.AppImage",
"version": "v0.9.0",
"last_update": "2025-11-23T23:23:48Z"
},
{
"repository": "Sarwarhridoy4/github-ssh-manager",
"group": "dev",
"name": "GitHub SSH Manager",
"description": "A cross-platform GUI tool built with **Go** and **Fyne** that allows you to manage multiple GitHub SSH keys effortlessly. Generate keys, view public keys, upload to GitHub, test SSH connections, and manage your `~/.ssh/config` all from one place.",
"file_name": "github-ssh-manager",
"exec": "yes",
"downloads": "/home/jaandrle/.local/bin/github-ssh-manager",
"glare": "AppImage",
"last_update": "2026-02-23T06:22:10Z",
"version": "2.5"
},
{
"repository": "asinglebit/guitar",
"group": "dev",
"name": "guitar",
"description": "A terminal based git client with topological graph rendering",
"file_name": "guitar",
"exec": "yes",
"downloads": "/home/jaandrle/.local/bin/guitar",
"glare": "linux",
"last_update": "2026-01-21T20:18:29Z",
"version": "v0.1.45"
}
]
}

View File

@@ -1,2 +0,0 @@
[Mouse]
cursorTheme=breeze_cursors

View File

@@ -1,8 +0,0 @@
[General]
ColorScheme=TUXEDODark
[Icons]
Theme=tuxedo-breeze-dark
[KDE]
widgetStyle=Breeze

View File

@@ -1,3 +0,0 @@
[KSplash]
Engine=KSplashQML
Theme=org.tuxedodark.desktop

View File

@@ -1,10 +0,0 @@
[TabBox]
LayoutName=org.kde.breeze.desktop
[Windows]
Placement=Centered
[org.kde.kdecoration2]
NoPlugin=false
library=org.kde.breeze
theme=Breeze

View File

@@ -1 +0,0 @@
org.tuxedodark.desktop

View File

@@ -1,2 +0,0 @@
[Theme]
name=tuxedo-dark

View File

@@ -1,77 +0,0 @@
{
"version": "1.0",
"scripts": {
"§vim_plugins.mjs": {
"npx": false,
"completions": {
"path": [],
"clone": [
"-t",
"--target",
"-b",
"--branch"
],
"C": "clone",
"remove": [],
"R": "remove",
"rm": "remove",
"list": [
"-t",
"--type"
],
"L": "list",
"ls": "list",
"export": [],
"status": [],
"S": "status",
"pull": [],
"P": "pull",
"update": "pull"
},
"completions_all": [
"--help",
"--version"
]
},
"§time.mjs": {
"npx": false,
"completions": {
"diff": [
"--unit"
],
"?": "diff",
"zone": [
"--z"
]
},
"completions_all": [
"--help",
"--version"
]
},
"/home/jaandrle/Vzdálené/GitHub/DGF-Certified-Supervisory-Academy/build/bs/publishModule.mjs": {
"npx": true,
"completions": {},
"completions_all": [
"--lang",
"--division",
"--APP_CODE",
"--help",
"--version"
]
},
"§pdftk-data.mjs": {
"npx": false,
"completions": {
"extract": [],
"update": [],
"convert": []
},
"completions_all": [
"--debug",
"--help",
"--version"
]
}
}
}

View File

@@ -1,18 +0,0 @@
Reflect.defineProperty($, "clipboard", {
get(){
if($.env.XDG_SESSION_TYPE === "x11")
return s.$().run`xclip -o -selection clipboard`;
return s.$().run`wl-paste`;
}
})
// /** Custom uncaughtException function */
// export const uncaughtException= console.log;
// /** Place for custom code when script starts */
// export function onscript(){}
/** Place for custom code when REPL starts (`--interactive`) */
export function onrepl(){
Reflect.defineProperty(s, "jq", { get(){ return file=> s.cat(file).xargs(JSON.parse); } });
}
/** Place for custom code when eval starts (`--eval`/`--print`) */
// export function oneval(){}

View File

@@ -1,11 +0,0 @@
[General]
color=#FF2E88
has-screenshot-permission=true
language=ces, eng
last-update-check=0
mode=parse
notification=true
show-introduction=false
tray=false
update=false
version=false

View File

@@ -1,6 +0,0 @@
// Settings in here override those in "Default/Preferences.sublime-settings",
// and are overridden in turn by syntax-specific settings.
{
"theme": "Merge Dark.sublime-theme",
"hardware_acceleration": "opengl",
}

View File

@@ -1,3 +0,0 @@
{
"spell_check": true
}

View File

@@ -1,31 +0,0 @@
// https://github.com/Sublime-Instincts/CommandsBrowser/tree/master/sm_commands_metadata
[
{
"caption": "Switch…",
"command": "checkout_branch",
},
{
"caption": "Switch -C…",
"command": "create_branch",
},
{
"caption": "Checkout -B…",
"command": "create_branch",
},
{
"caption": "Commit…",
"command": "commit",
},
{
"caption": "Browse repository",
"command": "git",
"args": { "argv": [ "browse" ] }
},
{
"caption": "Branch -D --all (delete remote and local branch)",
"command": "delete_branch",
"args": {
"argv": [ true, true, true ]
}
}
]

View File

@@ -1,6 +0,0 @@
[
{
"keys": ["ctrl+;"],
"command": "show_command_palette"
},
]

View File

@@ -1,4 +0,0 @@
{
"draw_white_space": "all",
"word_wrap": true,
}

View File

@@ -1,13 +0,0 @@
// Settings in here override those in "Default/Preferences.sublime-settings",
// and are overridden in turn by syntax-specific settings.
{
"hardware_acceleration": "opengl",
"diff_algorithm": "match_git",
"diff_style": "auto",
"font_face": "Ubuntu Mono",
"side_bar_layout": "tabs",
"signature_error_highlighting": "no_public_key",
"theme": "Merge Dark.sublime-theme",
"expand_merge_commits_by_default": true,
"ignore_diff_white_space": false,
}

View File

@@ -1,14 +0,0 @@
[metadata]
name = "alias"
description = "A channel to select from shell aliases"
[source]
# you may need to adjust the command depending on your shell
command = "$SHELL -ic 'alias'"
output = "{split:=:0}"
[preview]
command = "$SHELL -ic 'alias' | grep -E '^(alias )?{split:=:0}='"
[ui.preview_panel]
size = 30

View File

@@ -1,23 +0,0 @@
[metadata]
name = "channels"
description = "A channel to find and select other channels"
[source]
command = "tv list-channels"
[keybindings]
enter = "actions:zap"
ctrl-t = "actions:echo"
[actions.echo]
description = "Echo the channel name"
command = "echo '{}'"
mode = "execute"
[actions.zap]
description = "Switch to the channel"
command = "tv '{}'"
mode = "execute"
# [preview]
# command = "bat -n --color=always ~/.config/television/cable/'{}'.toml"

View File

@@ -1,23 +0,0 @@
[metadata]
name = "compose"
description = "Search XCompose key mappings (no preview)"
[source]
command = [
"cat ~/.XCompose /usr/share/X11/locale/cs_CZ.UTF-8/Compose",
"cat /usr/share/X11/locale/en_US.UTF-8/Compose",
]
ansi = false
output = "{}"
[ui]
ui_scale = 90
layout = "portrait"
input_bar_position = "top"
input_header = "Search Compose mappings:"
[ui.preview_panel]
hidden = true # No preview panel
[ui.remote_control]
show_channel_descriptions = true

View File

@@ -1,25 +0,0 @@
[metadata]
name = "dirs"
description = "A channel to select from directories"
requirements = ["fdfind"]
[source]
command = ["printenv | grep -e '^m' | sort | cut -d= -f2-", "fdfind -t d", "fdfind -t d --hidden"]
[preview]
command = "ls -la --color=always '{}'"
[keybindings]
shortcut = "f2"
ctrl-o = "actions:cd"
ctrl-up = "actions:goto_parent_dir"
[actions.cd]
description = "Open a shell in the selected directory"
command = "cd '{}' && $SHELL"
mode = "execute"
[actions.goto_parent_dir]
description = "Re-opens tv in the parent directory"
command = "tv dirs .."
mode = "execute"

View File

@@ -1,32 +0,0 @@
[metadata]
name = "docker-compose"
description = "Manage Docker Compose services"
requirements = ["docker"]
[source]
command = "docker compose ps --format '{{.Name}}\t{{.Service}}\t{{.Status}}'"
display = "{split:\t:1} ({split:\t:2})"
output = "{split:\t:1}"
[preview]
command = "docker compose logs --tail=30 --no-log-prefix '{split:\t:1}'"
[actions.up]
description = "Start the selected service"
command = "docker compose up -d '{split:\t:1}'"
mode = "fork"
[actions.down]
description = "Stop and remove the selected service"
command = "docker compose down '{split:\t:1}'"
mode = "fork"
[actions.restart]
description = "Restart the selected service"
command = "docker compose restart '{split:\t:1}'"
mode = "fork"
[actions.logs]
description = "Follow logs of the selected service"
command = "docker compose logs -f '{split:\t:1}'"
mode = "execute"

View File

@@ -1,19 +0,0 @@
[metadata]
name = "dotfiles"
description = "A channel to select from your user's dotfiles"
requirements = ["fdfind", "bat"]
[source]
command = "fdfind -t f . $HOME/.config"
[preview]
command = "bat -n --color=always '{}'"
[keybindings]
enter = "actions:edit"
[actions.edit]
description = "Edit the selected dotfile"
command = "${EDITOR:-vim} '{}'"
shell = "bash"
mode = "execute"

View File

@@ -1,28 +0,0 @@
[metadata]
name = "files"
description = "A channel to select files and directories"
requirements = ["fdfind", "batcat", "cat", "head"]
[source]
command = ["fdfind -t f", "fdfind -t f -H", "fdfind -t f -H -I"]
[preview]
command = ["batcat -n --color=always '{}'", "cat '{}'", "head -50 '{}'"]
env = { BAT_THEME = "ansi" }
[keybindings]
shortcut = "f1"
ctrl-e = "actions:edit"
ctrl-up = "actions:goto_parent_dir"
[actions.edit]
description = "Opens the selected entries with the default editor (falls back to vim)"
command = "${EDITOR:-vim} '{}'"
shell = "bash"
# use `mode = "fork"` if you want to return to tv afterwards
mode = "execute"
[actions.goto_parent_dir]
description = "Re-opens tv in the parent directory"
command = "tv files .."
mode = "execute"

View File

@@ -1,37 +0,0 @@
[metadata]
name = "git-branch"
description = "A channel to select from git branches"
requirements = ["git"]
[source]
command = "git --no-pager branch --all --format=\"%(refname:short)\""
output = "{split: :0}"
[preview]
command = "git show -p --stat --pretty=fuller --color=always '{0}'"
[keybindings]
ctrl-o = "actions:checkout"
ctrl-d = "actions:delete"
ctrl-m = "actions:merge"
ctrl-r = "actions:rebase"
[actions.checkout]
description = "Checkout the selected branch"
command = "git switch '{0}'"
mode = "execute"
[actions.delete]
description = "Delete the selected branch"
command = "git delete-branch '{0}'"
mode = "execute"
[actions.merge]
description = "Merge the selected branch into current branch"
command = "git merge '{0}'"
mode = "execute"
[actions.rebase]
description = "Rebase current branch onto the selected branch"
command = "git rebase '{0}'"
mode = "execute"

View File

@@ -1,34 +0,0 @@
[metadata]
name = "git-diff"
description = "A channel to select files from git diff commands"
requirements = ["git"]
[source]
command = "GIT_PAGER= git diff --name-only HEAD"
[preview]
command = "GIT_PAGER= git diff HEAD --color=always -- '{}'"
[ui]
layout = "portrait"
[keybindings]
ctrl-s = "actions:stage"
ctrl-r = "actions:restore"
ctrl-e = "actions:edit"
[actions.stage]
description = "Stage the selected file"
command = "git add '{}'"
mode = "fork"
[actions.restore]
description = "Discard changes in the selected file"
command = "git restore '{}'"
mode = "fork"
[actions.edit]
description = "Open the selected file in editor"
command = "${EDITOR:-vim} '{}'"
shell = "bash"
mode = "execute"

View File

@@ -1,34 +0,0 @@
[metadata]
name = "git-log"
description = "A channel to select from git log entries"
requirements = ["git"]
[source]
command = "git log --graph --pretty=format:'%C(yellow)%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --color=always"
output = "{strip_ansi|split: :1}"
ansi = true
no_sort = true
frecency = false
[preview]
command = "git show -p --stat --pretty=fuller --color=always '{strip_ansi|split: :1}' | head -n 1000"
[keybindings]
ctrl-y = "actions:cherry-pick"
ctrl-r = "actions:revert"
ctrl-o = "actions:checkout"
[actions.cherry-pick]
description = "Cherry-pick the selected commit"
command = "git cherry-pick '{strip_ansi|split: :1}'"
mode = "execute"
[actions.revert]
description = "Revert the selected commit"
command = "git revert '{strip_ansi|split: :1}'"
mode = "execute"
[actions.checkout]
description = "Checkout the selected commit"
command = "git checkout '{strip_ansi|split: :1}'"
mode = "execute"

View File

@@ -1,28 +0,0 @@
[metadata]
name = "git-reflog"
description = "A channel to select from git reflog entries"
requirements = ["git"]
[source]
command = "git reflog --decorate --color=always"
output = "{0|strip_ansi}"
ansi = true
no_sort = true
frecency = false
[preview]
command = "git show -p --stat --pretty=fuller --color=always '{0|strip_ansi}'"
[keybindings]
ctrl-o = "actions:checkout"
ctrl-r = "actions:reset"
[actions.checkout]
description = "Checkout the selected reflog entry"
command = "git checkout '{0|strip_ansi}'"
mode = "execute"
[actions.reset]
description = "Reset --hard to the selected reflog entry"
command = "git reset --hard '{0|strip_ansi}'"
mode = "execute"

View File

@@ -1,26 +0,0 @@
[metadata]
name = "git-tags"
description = "Browse and checkout git tags"
requirements = ["git"]
[source]
command = "git tag --sort=-creatordate"
no_sort = true
frecency = false
[preview]
command = "git show --color=always '{}'"
[keybindings]
ctrl-o = "actions:checkout"
ctrl-d = "actions:delete"
[actions.checkout]
description = "Checkout the selected tag"
command = "git switch '{}'"
mode = "execute"
[actions.delete]
description = "Delete the selected tag"
command = "git tag -d '{}'"
mode = "execute"

View File

@@ -1,24 +0,0 @@
[metadata]
name = "images"
description = "Browse image files with preview"
requirements = ["fdfind", "chafa"]
[source]
command = [
"fdfind -t f -e png -e jpg -e jpeg -e gif -e webp -e bmp -e svg .",
"fdfind -t f -e png -e jpg -e jpeg -e gif -e webp -e bmp -e svg -H .",
]
[preview]
command = [
"viu -w 40 -h 80 '{}'",
"chafa -s 80x40 '{}' 2>/dev/null || file '{}'",
]
[keybindings]
ctrl-o = "actions:open"
[actions.open]
description = "Open the selected image with default viewer"
command = "xdg-open '{}' 2>/dev/null || open '{}'"
mode = "fork"

View File

@@ -1,24 +0,0 @@
[metadata]
name = "journalctl"
description = "Browse systemd journal log identifiers and their logs"
requirements = ["journalctl"]
[source]
command = "journalctl --field SYSLOG_IDENTIFIER 2>/dev/null | sort -f"
[preview]
command = "journalctl -b --no-pager -o short-iso -n 50 SYSLOG_IDENTIFIER='{}' 2>/dev/null"
[ui]
layout = "portrait"
preview_panel = { size = 70 }
[actions.logs]
description = "Follow live logs for the selected identifier"
command = "journalctl -f SYSLOG_IDENTIFIER='{}'"
mode = "execute"
[actions.full]
description = "View all logs for the selected identifier in a pager"
command = "journalctl -b --no-pager -o short-iso SYSLOG_IDENTIFIER='{}' | less"
mode = "fork"

View File

@@ -1,33 +0,0 @@
[metadata]
name = "pkgs-apt"
description = "List and manage APT packages, including upgradable ones"
requirements = ["dpkg", "apt"]
[source]
command = [
"dpkg-query -W -f='${Package}\t${Version}\t${Status}\n' 2>/dev/null | grep 'install ok installed' | awk -F'\t' '{print $1, $2}'",
"apt-mark showmanual 2>/dev/null | sort -u",
"apt-get -s upgrade 2>/dev/null | grep -oP '^Inst \\K[^ ]+' | sort -u",
]
[preview]
command = "apt show '{split: :0}' 2>/dev/null"
[keybindings]
ctrl-u = "actions:upgrade"
ctrl-d = "actions:remove"
[actions.upgrade]
description = "Upgrade the selected package"
command = "sudo apt install --only-upgrade '{split: :0}'"
mode = "execute"
[actions.reinstall]
description = "Reinstall the selected package"
command = "sudo apt install --reinstall '{split: :0}'"
mode = "execute"
[actions.remove]
description = "Remove the selected package"
command = "sudo apt remove '{split: :0}'"
mode = "execute"

View File

@@ -1,29 +0,0 @@
[metadata]
name = "pkgs-brew"
description = "List and manage Homebrew packages, including outdated ones (installed on request)"
requirements = ["brew"]
[source]
command = [
"comm -12 <(brew list --installed-on-request | sort) <(brew outdated | sort)",
"brew list --installed-on-request",
"brew list --formula",
"brew list --cask",
]
[preview]
command = "brew info '{}'"
[keybindings]
ctrl-u = "actions:upgrade"
ctrl-d = "actions:uninstall"
[actions.upgrade]
description = "Upgrade the selected package"
command = "brew upgrade '{}'"
mode = "execute"
[actions.uninstall]
description = "Uninstall the selected package"
command = "brew uninstall '{}'"
mode = "execute"

View File

@@ -1,27 +0,0 @@
[metadata]
name = "pkgs-flatpak"
description = "List and manage Flatpak applications"
requirements = ["flatpak"]
[source]
command = "flatpak list --app --columns=application,name,version 2>/dev/null"
display = "{split:\t:1} ({split:\t:2})"
output = "{split:\t:0}"
[preview]
command = "flatpak info '{split:\t:0}' 2>/dev/null"
[actions.run]
description = "Launch the selected application"
command = "flatpak run '{split:\t:0}'"
mode = "execute"
[actions.uninstall]
description = "Uninstall the selected application"
command = "flatpak uninstall '{split:\t:0}'"
mode = "execute"
[actions.update]
description = "Update the selected application"
command = "flatpak update '{split:\t:0}'"
mode = "execute"

View File

@@ -1,28 +0,0 @@
[metadata]
name = "pkgs-npm"
description = "List globally installed npm packages"
requirements = ["npm"]
[source]
command = [
"npm outdated -g --depth=0 --json | njs -p '$.stdin.json()' 'Object.entries' 'e=> e.map(([p,i])=> `${p} @${i.current} → ${i.wanted} (${i.latest})`).join(\"\\n\")'",
"npm list -g --depth=0 --json | njs -p '$.stdin.json().dependencies' 'Object.entries' 'e=> e.map(([p,i])=> p).join(\"\\n\")'",
]
output = "{split: :0}"
[preview]
command = "npm info '{split: :0}' 2>/dev/null | head -30"
[keybindings]
ctrl-u = "actions:update"
ctrl-d = "actions:uninstall"
[actions.uninstall]
description = "Uninstall the selected global package"
command = "npm uninstall -g '{split: :0}'"
mode = "execute"
[actions.update]
description = "Update the selected global package"
command = "npm update -g '{split: :0}'"
mode = "execute"

View File

@@ -1,23 +0,0 @@
[metadata]
name = "recent-files"
description = "List recently modified files (via git or filesystem)"
requirements = ["git", "fdfind", "batcat"]
[source]
command = [
"git diff --name-only HEAD~10 HEAD 2>/dev/null || find . -type f -mtime -7 -not -path '*/.*' 2>/dev/null | head -100",
"fdfind -t f --changed-within 7d -E .git -E .cache -E node_modules -E .local/share/Trash",
]
[preview]
command = "batcat -n --color=always '{}'"
env = { BAT_THEME = "ansi" }
[keybindings]
ctrl-e = "actions:edit"
[actions.edit]
description = "Open the selected file in editor"
command = "${EDITOR:-vim} '{}'"
shell = "bash"
mode = "execute"

View File

@@ -1,29 +0,0 @@
[metadata]
name = "text"
description = "A channel to find and select text from files"
requirements = ["rg", "batcat"]
[source]
command = [
"rg . --no-heading --line-number --colors 'match:fg:white' --colors 'path:fg:blue' --color=always",
"rg . --no-heading --line-number --hidden --colors 'match:fg:white' --colors 'path:fg:blue' --color=always",
]
ansi = true
output = "'+{strip_ansi|split:\\::1}' '{strip_ansi|split:\\::0}'"
[preview]
command = "batcat -n --color=always '{strip_ansi|split:\\::0}'"
env = { BAT_THEME = "ansi" }
offset = '{strip_ansi|split:\::1}'
[ui]
preview_panel = { header = '{strip_ansi|split:\::..2}' }
[keybindings]
ctrl-e = "actions:edit"
[actions.edit]
description = "Open file in editor at line"
command = "${EDITOR:-vim} '+{strip_ansi|split:\\::1}' '{strip_ansi|split:\\::0}'"
shell = "bash"
mode = "execute"

View File

@@ -1,255 +0,0 @@
# CONFIGURATION FILE LOCATION ON YOUR SYSTEM:
# -------------------------------------------
# Defaults:
# ---------
# Linux: `$HOME/.config/television/config.toml`
# macOS: `$HOME/.config/television/config.toml`
# Windows: `%LocalAppData%\television\config.toml`
#
# XDG dirs:
# ---------
# You may use XDG_CONFIG_HOME if set on your system.
# In that case, television will expect the configuration file to be in:
# `$XDG_CONFIG_HOME/television/config.toml`
#
# General settings
# ----------------------------------------------------------------------------
tick_rate = 50
default_channel = "files"
# Shell settings
# --------------
# Default shell used for executing commands (source, preview, actions).
# Options: bash, zsh, fish, powershell, cmd, nu
# If not specified, the shell is detected from the environment ($SHELL on Unix).
# Channel-specific shell settings override this global setting.
# shell = "bash"
# History settings
# ---------------
# Maximum number of entries to keep in the global history (default: 100)
# The history tracks search queries across all channels and sessions
# Set to 0 to disable history functionality entirely
history_size = 200
# Whether to use global history (default: false)
# When true: history navigation shows entries from all channels
# When false: history navigation is scoped to the current channel
global_history = false
[ui]
# How much space to allocate for the UI (in percentage of the screen)
# ┌─────────────────────────┐
# │ Terminal screen │
# │ ┌───────────────────┐ │
# │ │ │ │
# │ │ Television UI │ │
# │ │ │ │
# │ └───────────────────┘ │
# │ │
# └─────────────────────────┘
ui_scale = 100
# What orientation should tv be (landscape or portrait)
orientation = "landscape"
# The theme to use for the UI
# A list of builtin themes can be found in the `themes` directory of the television
# repository. You may also create your own theme by creating a new file in a `themes`
# directory in your configuration directory (see the `config.toml` location above).
theme = "television"
# Feature-specific configurations
# Each feature can have its own configuration section
[ui.input_bar]
# Where to place the input bar in the UI (top or bottom)
position = "bottom"
# The input prompt string (defaults to ">" if not specified)
prompt = ">"
# header = "{}"
# padding = {"left": 0, "right": 0, "top": 0, "bottom": 0}
border_type = "rounded" # https://docs.rs/ratatui/latest/ratatui/widgets/block/enum.BorderType.html#variants
[ui.status_bar]
# Status bar separators (bubble):
#separator_open = ""
#separator_close = ""
# Status bar separators (box):
separator_open = ""
separator_close = ""
hidden = false
[ui.results_panel]
border_type = "rounded"
# padding = {"left": 0, "right": 0, "top": 0, "bottom": 0}
[ui.preview_panel]
# Preview panel size (percentage of screen width/height)
size = 50
#header = ""
#footer = ""
scrollbar = true
border_type = "rounded"
# padding = {"left": 0, "right": 0, "top": 0, "bottom": 0}
hidden = false
[ui.help_panel]
# Whether to split the help panel by categories
show_categories = true
hidden = true
[ui.remote_control]
# Whether to show channel descriptions in remote control mode
show_channel_descriptions = true
# Whether to sort channels alphabetically
sort_alphabetically = true
# disabled = false
# Theme color overrides
# ---------------------
# You can override specific colors from the selected theme by adding them here.
# This allows you to customize the appearance without creating a full theme file.
# Colors can be specified as ANSI color names (e.g., "red", "bright-blue") or
# as hex values (e.g., "#ff0000", "#1e1e2e").
#
# Example overrides:
# [ui.theme_overrides]
# background = "#000000"
# text_fg = "#ffffff"
# selection_bg = "#444444"
# match_fg = "#ff0000"
# Keybindings and Events
# ----------------------------------------------------------------------------
#
[keybindings]
# Application control
# ------------------
esc = "quit"
ctrl-c = "quit"
# Navigation and selection
# -----------------------
down = "select_next_entry"
ctrl-n = "select_next_entry"
ctrl-j = "select_next_entry"
up = "select_prev_entry"
ctrl-p = "select_prev_entry"
ctrl-k = "select_prev_entry"
# History navigation
# -----------------
ctrl-up = "select_prev_history"
ctrl-down = "select_next_history"
# Multi-selection
# --------------
tab = "toggle_selection_down"
backtab = "toggle_selection_up"
enter = "confirm_selection"
# Preview panel control
# --------------------
pagedown = "scroll_preview_half_page_down"
pageup = "scroll_preview_half_page_up"
ctrl-f = "cycle_previews"
# Data operations
# --------------
ctrl-y = "copy_entry_to_clipboard"
ctrl-r = "reload_source"
ctrl-s = "cycle_sources"
# UI Features
# ----------
ctrl-t = "toggle_remote_control"
ctrl-x = "toggle_action_picker"
ctrl-o = "toggle_preview"
ctrl-h = "toggle_help"
f12 = "toggle_status_bar"
ctrl-l = "toggle_layout"
# Input field actions
# ----------------------------------------
backspace = "delete_prev_char"
ctrl-w = "delete_prev_word"
ctrl-u = "delete_line"
delete = "delete_next_char"
left = "go_to_prev_char"
right = "go_to_next_char"
home = "go_to_input_start"
ctrl-a = "go_to_input_start"
end = "go_to_input_end"
ctrl-e = "go_to_input_end"
# Shell integration
# ----------------------------------------------------------------------------
#
# The shell integration feature allows you to use television as a picker for
# your shell commands (as well as your shell history with <CTRL-R>).
# E.g. typing `git checkout <CTRL-T>` will open television with a list of
# branches to choose from.
[shell_integration]
# This specifies the default fallback channel if no other channel is matched.
fallback_channel = "files"
[shell_integration.channel_triggers]
# Add your channel triggers here. Each key is a channel that will be triggered
# by the corresponding commands.
# Example: say you want the following commands to trigger the following channels
# when pressing <CTRL-T>:
# `git checkout` should trigger the `git-branches` channel
# `ls` should trigger the `dirs` channel
# `cat` and `cp` should trigger the `files` channel
#
# You would add the following to your configuration file:
# ```
# [shell_integration.channel_triggers]
# "git-branches" = ["git checkout"]
# "dirs" = ["ls"]
# "files" = ["cat", "cp"]
# ```
"alias" = ["alias", "unalias"]
"env" = ["export", "unset"]
"dirs" = ["cd", "ls", "rmdir", "z"]
"files" = [
"cat",
"less",
"head",
"tail",
"vim",
"nano",
"bat",
"cp",
"mv",
"rm",
"touch",
"chmod",
"chown",
"ln",
"tar",
"zip",
"unzip",
"gzip",
"gunzip",
"xz",
]
"git-diff" = ["git add", "git restore"]
"git-branch" = [
"git switch",
"but branch delete",
"git delete-branch",
"git checkout",
"git branch",
"git merge",
"git rebase",
"git pull",
"git push",
]
"git-log" = ["git log", "git show"]
"channels" = ["tv", "television"]
[shell_integration.keybindings]
# controls which key binding should trigger tv
# for shell autocomplete
"smart_autocomplete" = "ctrl-t"
# controls which keybinding should trigger tv
# for command history
"command_history" = "ctrl-r"

View File

@@ -1,298 +0,0 @@
/* stylelint-disable declaration-colon-space-after, scss/dollar-variable-colon-space-after */
:root {
--background-0: #1d2021;
--background-1: #282828;
--background-2: #32302f;
--background-3: #3c3836;
--background-4: #504945;
--background-5: #665c54;
--foreground-0: #665c54;
--foreground-1: #bdae93;
--foreground-2: #d5c4a1;
--foreground-3: #ebdbb2;
--foreground-4: #fbf1c7;
--red: #ea6962;
--orange: #e78a4e;
--yellow: #d8a657;
--green: #a9b665;
--cyan: #89b482;
--blue: #7daea3;
--magenta: #d3869b;
}
:root {
--border-radius-0: 3px;
--border-radius-1: 4px;
--border-radius-2: 6px;
--border-radius-3: 8px;
--space-1: 4px;
--space-2: 8px;
--space-3: 12px;
--shadow-0:
0 0.1px 0.1px 0 rgb(0 0 0 / 35%),
0 0.4px 0.5px -0.7px rgb(0 0 0 / 35%),
0 1.1px 1.2px -1.5px rgb(0 0 0 / 25%),
0 2.7px 3.2px -2px rgb(0 0 0 / 35%),
0 -0.1px 1.2px 0 rgb(0 0 0 / 20%),
0 0 3.5px -2.2px rgb(0 0 0 / 30%);
--shadow-1:
rgb(0 0 0 / 7%) 0 0.4px 0.5px 0,
rgb(0 0 0 / 7%) 0 1.2px 1.3px -0.8px,
rgb(0 0 0 / 7%) 0 2.9px 3.3px -1.7px,
rgb(0 0 0 / 7%) 0.1px 6.9px 7.8px -2.5px,
rgb(0 0 0 / 10%) 0 0 7.8px -2.5px;
--shadow-2:
rgb(0 0 0 / 15%) 0 0.4px 0.5px 0,
rgb(0 0 0 / 15%) 0 1.8px 2px -0.4px,
rgb(0 0 0 / 15%) 0 3.3px 3.7px -0.7px,
rgb(0 0 0 / 15%) 0.1px 5.3px 6px -1.1px,
rgb(0 0 0 / 15%) 0.1px 8.4px 9.5px -1.4px,
rgb(0 0 0 / 15%) 0.1px 13.1px 14.7px -1.8px,
rgb(0 0 0 / 15%) 0.2px 19.9px 22.4px -2.1px,
rgb(0 0 0 / 15%) 0.3px 29.3px 33px -2.5px,
rgb(0 0 0 / 17.5%) 0 0 9.5px -1.4px;
--font-family-sans:
-apple-system,
blinkmacsystemfont,
"Open Sans",
"Helvetica Neue",
"Segoe UI",
roboto,
oxygen,
ubuntu,
cantarell,
sans-serif;
--font-family-mono:
"Mono Lisa",
sfmono-regular,
"Source Code Pro",
menlo,
monaco,
consolas,
"Liberation Mono",
monospace;
--font-size-1: 10px;
--font-size-2: 16px;
--font-size-3: 20px;
--font-weight-mono-normal: 400;
--font-weight-sans-normal: 400;
--font-weight-mono-semibold: 500;
--font-weight-sans-semibold: 500;
--font-weight-mono-bold: 600;
--font-weight-sans-bold: 600;
}
:root {
--tridactyl-cmdl-font-size: var(--font-size-3);
--tridactyl-header-font-size: var(--font-size-2);
--tridactyl-cmdl-font-family: var(--font-family-mono);
--tridactyl-cmplt-font-family: var(--font-family-mono);
--tridactyl-header-font-weight: var(--font-weight-mono-semibold);
--tridactyl-fg: var(--foreground-2);
--tridactyl-bg: var(--background-2);
--tridactyl-url-fg: var(--blue);
--tridactyl-url-bg: var(--background-2);
--tridactyl-highlight-box-bg: var(--green);
--tridactyl-highlight-box-fg: var(--background-2);
--tridactyl-photon-colours-accent-1: var(--blue);
--tridactyl-hintspan-fg: var(--background-2) !important;
--tridactyl-hintspan-bg: var(--cyan) !important;
--tridactyl-hint-active-fg: none;
--tridactyl-hint-active-bg: none;
--tridactyl-hint-active-outline: none;
--tridactyl-hint-bg: none;
--tridactyl-hint-outline: none;
}
span.TridactylHint {
padding: 1px var(--space-1) 2px !important;
border-radius: var(--border-radius-0) !important;
font-family: var(--font-family-mono) !important;
font-weight: var(--font-weight-mono-semibold) !important;
box-shadow: var(--shadow-0) !important;
animation: 3s linear 1s infinite running hint !important;
}
span.TridactylHint:nth-child(1n) {
background: #ea6962 !important;
}
span.TridactylHint:nth-child(2n) {
background: #e78a4e !important;
}
span.TridactylHint:nth-child(3n) {
background: #d8a657 !important;
}
span.TridactylHint:nth-child(4n) {
background: #a9b665 !important;
}
span.TridactylHint:nth-child(5n) {
background: #89b482 !important;
}
span.TridactylHint:nth-child(6n) {
background: #7daea3 !important;
}
span.TridactylHint:nth-child(7n) {
background: #d3869b !important;
}
#trinewtab > img {
display: none;
}
.TridactylStatusIndicator {
position: fixed !important;
right: 5px !important;
bottom: 0 !important;
bottom: 5px !important;
padding: 0.25rem 0.375rem !important;
border: unset !important;
background: var(--tridactyl-bg) !important;
border-radius: var(--border-radius-1) !important;
box-shadow: var(--shadow-1) !important;
color: var(--yellow) !important;
font-size: 0.75rem !important;
font-weight: 500 !important;
opacity: 0.75;
}
#cmdline_iframe {
position: fixed !important;
z-index: 2147483647 !important;
top: 20% !important;
bottom: unset;
left: 10% !important;
width: 80% !important;
color-scheme: light;
}
.TridactylOwnNamespace > body {
display: flex;
box-sizing: border-box;
flex-direction: column;
align-items: stretch;
padding: 3rem;
}
#command-line-holder {
display: flex;
overflow: hidden;
flex-direction: row;
align-items: center;
order: 1;
background: var(--background-0);
border-radius: 0;
border-top-left-radius: var(--border-radius-3);
border-top-right-radius: var(--border-radius-3);
box-shadow: var(--shadow-2);
color: var(--tridactyl-bg);
opacity: 0.95;
}
#command-line-holder #tridactyl-colon {
padding-left: 0.75rem;
color: var(--foreground-1);
font-size: 1.25rem;
opacity: 0.5;
}
#tridactyl-input {
width: 100%;
box-sizing: border-box;
padding: 1rem;
padding-left: 0.25rem;
background: transparent;
color: var(--tridactyl-fg);
line-height: 1.5;
}
#completions {
--option-height: 1.4em;
display: inline-block;
overflow: hidden;
width: auto;
order: 2;
padding-bottom: 0.5rem;
border-top: unset;
background: var(--tridactyl-bg);
border-radius: 0;
border-bottom-left-radius: var(--border-radius-3);
border-bottom-right-radius: var(--border-radius-3);
box-shadow: var(--shadow-2);
color: var(--tridactyl-fg);
font-size: unset;
opacity: 0.95;
}
#completions > div {
min-height: auto;
max-height: calc(20 * var(--option-height));
}
#completions .sectionHeader {
padding: 0.5rem !important;
padding-bottom: 0.2rem;
padding-left: unset;
border-bottom: unset;
background: var(--background-1);
font-weight: var(--font-weight-mono-semibold);
}
#completions table.optionContainer {
padding-top: 0;
padding-bottom: 1rem;
border-spacing: 0;
table-layout: fixed;
}
#completions table.optionContainer td {
padding: 0.25rem 0.5rem;
}
#completions table.optionContainer td.content, #completions table.optionContainer td.documentation, #completions table.optionContainer td.title {
font-family: var(--font-family-sans);
font-weight: var(--font-weight-sans-normal);
}
#completions table.optionContainer td.title {
width: 50%;
font-weight: var(--font-weight-sans-semibold);
}
#completions table.optionContainer td.privatewindow, #completions table.optionContainer td.container {
display: none;
}
#completions table.optionContainer td.prefix {
color: var(--foreground-0);
font-weight: var(--font-weight-mono-bold);
}
#completions table.optionContainer td.icon {
position: relative;
}
#completions table.optionContainer td.icon img {
filter: sepia(100%);
}
#completions .focused {
background: var(--background-4);
color: var(--foreground-3);
}
#completions .focused .excmd {
color: var(--magenta);
}
#completions .focused .url {
background: var(--background-4);
color: var(--magenta);
}
#completions .BmarkCompletionSource {
min-height: unset;
max-height: unset;
}
#completions .BufferCompletionSource {
min-height: unset;
max-height: unset;
}
#completions .HistoryCompletionSource {
min-height: unset;
max-height: unset;
}
#completions .BufferCompletionSource tablecompletion-table {
width: unset;
border-spacing: unset;
font-size: unset;
table-layout: unset;
}
#completions .HistoryCompletionSource td.prefix {
display: none;
}
/*# sourceMappingURL=dark-soft.css.map */

View File

@@ -1,133 +0,0 @@
:root {
/* Generic */
--tridactyl-font-family: Monospace;
--tridactyl-font-size: 12pt;
--tridactyl-bg: #141414;
--tridactyl-highlight: #C25C3C;
--tridactyl-focused-bg: #2F2F2F;
--tridactyl-fg: #E0D3B3;
--tridactyl-url: #4988BF;
--tridactyl-hint-fg: #FF774D;
/* Hint character tags */
--tridactyl-hintspan-font-family: var(--tridactyl-font-family);
--tridactyl-hintspan-font-size: var(--tridactyl-font-size);
--tridactyl-hintspan-font-weight: bold;
--tridactyl-hintspan-fg: var(--tridactyl-hint-fg);
--tridactyl-hintspan-bg: rgba(0, 0, 0, 0.7);
--tridactyl-hintspan-border-color: black;
--tridactyl-hintspan-border-width: 1px;
--tridactyl-hintspan-border-style: solid;
--tridactyl-hintspan-js-background: hsla(0, 0%, 65%);
/* Element highlights */
--tridactyl-hint-active-fg: none;
--tridactyl-hint-active-bg: none;
--tridactyl-hint-active-outline: none;
--tridactyl-hint-bg: none;
--tridactyl-hint-outline: 0px solid black;
/* :viewsource */
--tridactyl-vs-bg: var(--tridactyl-bg);
--tridactyl-vs-fg: var(--tridactyl-fg);
--tridactyl-vs-font-family: var(--tridactyl-font-family);
/*commandline*/
--tridactyl-cmdl-bg: var(--tridactyl-bg);
--tridactyl-cmdl-fg: var(--tridactyl-fg);
--tridactyl-font-size-cmdl: 1.30rem;
--tridactyl-cmdl-line-height: 1.30em;
--tridactyl-cmdl-font-family: var(--tridactyl-font-family);
--tridactyl-cmdl-font-size: var(--tridactyl-font-size-cmdl);
--tridactyl-cmdl-font-weight: 800;
/*completions*/
--tridactyl-cmplt-option-height: 1.60em;
--tridactyl-cmplt-fg: var(--tridactyl-fg);
--tridactyl-cmplt-bg: var(--tridactyl-bg);
--tridactyl-cmplt-font-size: var(--tridactyl-font-size);
--tridactyl-cmplt-font-family: var(--tridactyl-font-family);
/*url style*/
--tridactyl-url-text-decoration: none;
--tridactyl-url-fg: var(--tridactyl-url);
--tridactyl-url-bg: var(--tridactyl-bg);
--tridactyl-url-cursor: pointer;
}
.TridactylOwnNamespace body {
max-height: 500px;
min-height: 500px;
}
:root #command-line-holder {
order: 2;
border-top: 1px solid black; /* cmdline top */
background: var(--tridactyl-focused-bg);
}
:root #tridactyl-input {
background: var(--tridactyl-focused-bg);
}
:root #completions {
max-height: 470px;
min-height: 470px;
font-weight: 200;
}
:root #completions .sectionHeader {
display: none;
}
:root #tridactyl-colon::before {
content: " :";
font-size: var(--tridactyl-font-size-cmdl);
}
:root #completions > div {
max-height: 500px;
min-height: 500px;
padding: 5px;
}
:root #completions table {
white-space: nowrap;
-webkit-mask-image: linear-gradient(to right, rgba(0,0,0,1) 97%, rgba(0,0,0,0));
}
:root #completions table tr td.prefix,
:root #completions table tr td.privatewindow,
:root #completions table tr td.container {
display: none;
}
:root #completions .focused,
:root #completions .focused .url {
background: var(--tridactyl-focused-bg);
color: var(--tridactyl-highlight);
text-decoration: none;
}
:root #completions .SessionCompletionOption .extraInfo {
color: var(--tridactyl-url);
}
:root #completions table tr .title {
padding-left: 5px !important;
}
:root #cmdline_iframe {
position: fixed !important;
bottom: unset;
/* opacity: 1; */
top: 30% !important;
left: 23% !important;
width: 60% !important;
z-index: 2147483647 !important;
border: 1px solid black !important; /* around window */
box-shadow: rgba(0, 0, 0, 0.8) 0px 0px 5px !important;
}
:root #cmdline_iframe.cleanslate.hidden {
display: none !important;
}

View File

@@ -1,115 +0,0 @@
""" Tridactyl config file | Jan Andrle | 2024-02-28
" General Settings 
set configversion 2.0
set theme dark
set modeindicatorshowkeys true
set modeindicatormodes.ignore false
set modeindicator true
set hintfiltermode simple
set hintchars fsahjklgyuiopqwertnmzxcvb
set smoothscroll true
unbind zI
unbind zM
unbind zO
unbind zR
unbind zi
unbind zm
unbind zo
unbind zr
unbind zz
bind zt hint -z
bind zz composite hint -z ; scrollpage -0.5
bind zb composite hint -z ; scrollpage -0.95
bind gm scrollto 42.5 x
bind gM scrollto 42.5 x
bind 0zo zoom 1
bind zo zoom 0.1 true
bind §zo zoom 0.5 true
bind zO zoom -0.1 true
bind §zO zoom -0.5 true
bind §§h scrollpx -1000
bind §h scrollpx -500
bind §l scrollpx 500
bind §§l scrollpx 1000
" /?*# … search collising with native ui + another problems
" https://gist.github.com/BurntSushi/393546a65db38d57cedcfd72c6d89bf3#file-tridactylrc-L18
unbind <c-f> " pgdown for scrolling
bind gi hint -Jc input,textarea,[contenteditable="true"]
unbindurl ^https://www.youtube.com/* >>
unbindurl ^https://www.youtube.com/* <<
" see https://gist.github.com/jaandrle/031198ab5130deb903065138532cc066
bindurl ^https://www.youtube.com/* ss fillcmdline open B: YT
bindurl ^https://chatgpt.com/* ss fillcmdline open B: OPENAI
bindurl ^https://chat.mistral.ai/chat* ss fillcmdline open B: OPENAI
bindurl ^https://rss.jaandrle.cz/* ss nmode ignore 1 mode normal
bindurl ^https://rss.jaandrle.cz/* sn hint -c div
command pauseVideos js Array.from(document.querySelectorAll("video")).forEach(el=> ( location.hostname!=="www.o2tv.cz" ? el.pause() : [ "Pauza" ].map(l=> document.querySelector(`[aria-label=${l}]`)).find(Boolean)?.dispatchEvent(new Event("click")) ))
tri.controller.acceptExCmd(`tabopen -c pracovní https://gist.github.com/jaandrle/ff1de72c500557f401e190b4ec05aa62#${document.title.replace(/["':|\.,\?\!_]/g, '').replace(/ /g, '-').toLowerCase()}`)
bind ůp js (v=> { if(!v) return; v.paused ? v.play() : tri.controller.acceptExCmd("pauseVideos"); })(document.querySelector("video"))
bind ůP js (v=> { if(!v) return; v.playbackRate ? (v.playbackRate= 0) : (v.playbackRate= 1); })(document.querySelector("video"))
bind ůl js (v=> { if(!v) return; v.currentTime+= 15 })(document.querySelector("video"))
bind ůh js (v=> { if(!v) return; v.currentTime-= 15 })(document.querySelector("video"))
bind ůL fillcmdline_notrail js document.querySelector("video").currentTime+= 15*30
bind ůůl fillcmdline_notrail js document.querySelector("video").currentTime+= 15*30
bind ůk js (v=> { if(!v) return; v.playbackRate+= 0.25 })(document.querySelector("video"))
bind ůj js (v=> { if(!v) return; v.playbackRate-= 0.25 })(document.querySelector("video"))
bind ů= js (v=> { if(!v) return; v.playbackRate= 1 })(document.querySelector("video"))
bind ůG js (v=> { if(!v) return; v.play(); v.currentTime= ( location.hostname!=="www.disneyplus.com" ? v.duration : (document.querySelector(".time-remaining-label").textContent.split(":").reduce((acc, curr, i)=> (!i ? 60 : 1)*curr+acc, 0)+v.currentTime) )-10; setTimeout(()=> tri.controller.acceptExCmd("pauseVideos"), 5000); })(document.querySelector("video"))
unbind --mode=normal d
bind dd tabclose
unbind --mode=normal s
bind st fillcmdline_notrail tab
bind \t fillcmdline_notrail tab
" h keyboardlayoutoverrides … https://gistpreview.github.io/?324119c773fac31651f6422087b36804
" set keyboardlayoutoverrides "Digit2: ;, Backquote: :"
set keytranslatemap {"ě":";",";":":"}
bindurl ^https://mail.centrum.cz/* ;; composite hint_focus ; js document.activeElement.dispatchEvent(new CustomEvent("mouseover"))
bind --mode=normal ;gt hint -c [tabindex]
bind š tab #
bind sš fillcmdline tab
" b→t→n to make more consistent with gn*
unbind --mode=normal b
unbind --mode=normal B
bind --mode=normal t fillcmdline tab
bind --mode=normal T fillcmdline taball
bind --mode=normal n fillcmdline tabopen
bind --mode=normal N current_url tabopen
bind -c fillcmdline recontain
bind \c fillcmdline_notrail container
bind --mode=visual \t composite js "https://libretranslate.com/?source=auto&target=cs&q="+encodeURI(document.getSelection().toString()) | tabopen
bind --mode=visual \T composite js "https://translate.google.com/?sl=auto&tl=cs&op=translate&text="+encodeURI(document.getSelection().toString()) | tabopen
bind --mode=normal \t composite js "http://translate.google.com/translate?js=n&tl=cs&u="+encodeURI(location.href) | tabopen
bind gnk tabopen -c osobní https://keep.google.com/u/0/#NOTE/1UXE_BEihe2EexHwZqEYA2oSdILLxF74SPcaLFMStfIpMkWPnStWJDQqH5C1TryJld_dC
bind gok open -c osobní https://keep.google.com/u/0/#NOTE/1UXE_BEihe2EexHwZqEYA2oSdILLxF74SPcaLFMStfIpMkWPnStWJDQqH5C1TryJld_dC
bind gwk winopen -c osobní https://keep.google.com/u/0/#NOTE/1UXE_BEihe2EexHwZqEYA2oSdILLxF74SPcaLFMStfIpMkWPnStWJDQqH5C1TryJld_dC
bind gnC tabopen -c osobní https://calendar.google.com
bind goC open -c osobní https://calendar.google.com
bind gwC winopen -c osobní https://calendar.google.com
alias hint_focus hint -;
quickmark c moz-extension://616498c0-3916-4f0b-b0a9-ce01ecf2298d/popup.html
command mastodonUncoverAll composite hint_focus .scrollable ; js (onclick=document.createEvent("Events"), onclick.initEvent("click", true, false), Array.from(document.activeElement.getElementsByClassName("status__content__spoiler-link")).forEach(el=> el.dispatchEvent(onclick)))
command mastodonRedirectHome js const canonicalHref = document.querySelector('link[rel=canonical]')?.href; const parts = (canonicalHref ? new URL(canonicalHref) : location).pathname.split('/'); if(parts.length===2) location.href= `https://fosstodon.org/${parts[1]}@${location.host}`; else location.href= `https://fosstodon.org/authorize_interaction?uri=${location.href}`;
bind sm fillcmdline_notrail mastodon
command data_delall composite hint_focus * ; js document.activeElement.querySelectorAll("input").forEach(el=> el.checked=false)
command scrollblur js tri.scrolling.setCurrentFocus(document.documentElement || document.body)
autocmd DocLoad https://user.centrum.cz/?url=http%3A%2F%2Fmail.centrum.cz open https://mail.centrum.cz/?fld=-666
" For syntax highlighting see https://github.com/tridactyl/vim-tridactyl
" vim: set filetype=tridactyl
" vim: set ft=vim :

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