mirror of
https://github.com/ItsDrike/dotfiles.git
synced 2024-12-23 19:54:34 +00:00
Initial commit
This commit is contained in:
parent
b912871070
commit
a3e01caebf
18
.gitmodules
vendored
Normal file
18
.gitmodules
vendored
Normal file
|
@ -0,0 +1,18 @@
|
|||
[submodule "root/usr/share/zsh/site-functions/zsh-autosuggestions"]
|
||||
path = root/usr/share/zsh/site-functions/zsh-autosuggestions
|
||||
url = https://github.com/zsh-users/zsh-autosuggestions
|
||||
[submodule "root/usr/share/zsh/site-functions/zsh-syntax-highlighting"]
|
||||
path = root/usr/share/zsh/site-functions/zsh-syntax-highlighting
|
||||
url = https://github.com/zsh-users/zsh-syntax-highlighting
|
||||
; [submodule "root/usr/share/zsh/site-functions/zsh-you-should-use"]
|
||||
; path = root/usr/share/zsh/site-functions/zsh-you-should-use
|
||||
; url = https://github.com/MichaelAquilina/zsh-you-should-use
|
||||
[submodule "root/usr/local/src/z.lua"]
|
||||
path = root/usr/local/src/z.lua
|
||||
url = https://github.com/skywind3000/z.lua
|
||||
[submodule "root/usr/local/src/Hyprland"]
|
||||
path = root/usr/local/src/Hyprland
|
||||
url = https://github.com/hyprwm/Hyprland
|
||||
[submodule "root/usr/local/src/eww"]
|
||||
path = root/usr/local/src/eww
|
||||
url = https://github.com/elkowar/eww
|
674
LICENSE
Normal file
674
LICENSE
Normal file
|
@ -0,0 +1,674 @@
|
|||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 3, 29 June 2007
|
||||
|
||||
Copyright (C) 2007 Free Software Foundation, Inc. <https://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 <https://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
|
||||
<https://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
|
||||
<https://www.gnu.org/licenses/why-not-lgpl.html>.
|
6
firefox/chrome/userChrome.css
Normal file
6
firefox/chrome/userChrome.css
Normal file
|
@ -0,0 +1,6 @@
|
|||
@namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"); /* only needed once */
|
||||
|
||||
/* full screen toolbars */
|
||||
#navigator-toolbox[inFullscreen] toolbar:not([collapsed="true"]) {
|
||||
visibility:visible!important;
|
||||
}
|
51
firefox/ublock-My_filters.txt
Normal file
51
firefox/ublock-My_filters.txt
Normal file
|
@ -0,0 +1,51 @@
|
|||
! Replace third-party frames with a click2load banner
|
||||
*$3p,frame,redirect=click2load.html
|
||||
|
||||
! click2load exceptions
|
||||
@@||viewscreen.githubusercontent.com^$3p,frame,domain=github.com
|
||||
@@||www.redditmedia.com^$3p,frame,domain=www.reddit.com
|
||||
@@||cdn.embedly.com^$3p,frame
|
||||
@@||imgur.com^$3p,frame
|
||||
|
||||
! Bad TLDs (from https://github.com/DandelionSprout/adfilt/blob/master/Dandelion%20Sprout's%20Anti-Malware%20List.txt)
|
||||
||agency^
|
||||
||bid^
|
||||
||cf^
|
||||
||ga^
|
||||
||gdn^
|
||||
||gq^
|
||||
||ooo^
|
||||
||loan^
|
||||
||ml^,domain=~lingva.ml
|
||||
||pw^
|
||||
||tk^
|
||||
||top^
|
||||
|
||||
! Hide GDPR consent banners
|
||||
sat1.de##cmp-banner
|
||||
!meteoblue.com##.gdpr_message
|
||||
askubuntu.com##.js-consent-banner
|
||||
stackexchange.com##.js-consent-banner
|
||||
stackoverflow.com##.js-consent-banner
|
||||
gitbook.io##.r-1yzf0co.r-ymttw5.r-18u37iz.r-1quu1zo.r-1i7sdiz.r-rs99b7.r-156hn8l.r-1habvwh.css-1dbjc4n
|
||||
www.morgenpost.de##.footer .no-js
|
||||
www.morgenpost.de##+js(remove-class, no-js, html)
|
||||
|
||||
! Hide/Block annoying elements
|
||||
stackoverflow.com###saves-launch-popover
|
||||
|
||||
! Hide/Block ad banners
|
||||
|
||||
! Privacy
|
||||
||collector.github.com^
|
||||
||api.github.com/_private/browser/errors
|
||||
||cmp.zdf.de^
|
||||
||discord.com/api/v*/science
|
||||
|
||||
! XSS hardening on codebergs login page
|
||||
||codeberg.org/user/login^$script
|
||||
||codeberg.org/user/login^$inline-script
|
||||
||codeberg.org/user/login^$third-party
|
||||
|
||||
! Badfilters
|
||||
meteoblue.com#@#.social-wrapper
|
158
firefox/ublock-My_rules.txt
Normal file
158
firefox/ublock-My_rules.txt
Normal file
|
@ -0,0 +1,158 @@
|
|||
!! This is not a comment, this is a invalid line which gets silently dropped
|
||||
!! by uB if you paste into your dynamic filter rules
|
||||
|
||||
!! Blocking mode: hard mode with click2load 3p-frames
|
||||
* * * noop
|
||||
* * 1p-script noop
|
||||
* * 3p block
|
||||
* * 3p-frame noop
|
||||
* * 3p-script block
|
||||
* * image noop
|
||||
* * inline-script noop
|
||||
behind-the-scene * * block
|
||||
|
||||
!! Global CDN noops for common CDNs (mostly via CNAME)
|
||||
* akamai.net * noop
|
||||
* akamaiedge.net * noop
|
||||
* akamaihd.net * noop
|
||||
* akamaized.net * noop
|
||||
* b-cdn.net * noop
|
||||
* cdn.cloudflare.net * noop
|
||||
* cloudfront.net * noop
|
||||
* discourse-cdn.com * noop
|
||||
* edgecastcdn.net * noop
|
||||
* global.fastly.net * noop
|
||||
* hwcdn.net * noop
|
||||
* kxcdn.com * noop
|
||||
* bootstrapcdn.com * noop
|
||||
* map.fastly.net * noop
|
||||
* netdna-ssl.com * noop
|
||||
* wp.com * noop
|
||||
* ajax.googleapis.com * noop
|
||||
* jsdelivr.net * noop
|
||||
* unsplash.com * noop
|
||||
* cdn.embedly.com * noop
|
||||
* wixmp.com * noop
|
||||
|
||||
!! Website building/caching tools
|
||||
* cloudflare.com * noop
|
||||
* prismic.io * noop
|
||||
* googlehosted.com * noop
|
||||
|
||||
!! Website 3rd party utilities (trusted or simply necessary things)
|
||||
* maps.googleapis.com * noop
|
||||
* recaptcha.net * noop
|
||||
* imgur.com * noop
|
||||
* shields.io * noop
|
||||
* gravatar.com * noop
|
||||
|
||||
!! Explicit blocks (even though we block all 3rd parties, explicitly block these to signify that they're evil)
|
||||
* fonts.googleapis.com * block
|
||||
* doubleclick.net * block
|
||||
* sentry.io * block
|
||||
* servedby-buysellads.com * block
|
||||
* facebook.com * block
|
||||
* facebook.net * block
|
||||
|
||||
!! Per-site (mostly noop) settings
|
||||
|
||||
! GitHub
|
||||
github.com avatars.githubusercontent.com * noop
|
||||
github.com githubassets.com * noop
|
||||
|
||||
! Google
|
||||
accounts.google.com googleusercontent.com * noop
|
||||
accounts.google.com gstatic.com * noop
|
||||
accounts.google.com signaler-pa.googleapis.com * noop
|
||||
accounts.google.com youtube.com * noop
|
||||
|
||||
developers.google.com gstatic.com * noop
|
||||
developers.google.com googleusercontent.com * noop
|
||||
|
||||
drive.google.com googleusercontent.com * noop
|
||||
drive.google.com gstatic.com * noop
|
||||
|
||||
docs.google.com googleusercontent.com * noop
|
||||
docs.google.com gstatic.com * noop
|
||||
|
||||
mail.google.com googleusercontent.com * noop
|
||||
mail.google.com gstatic.com * noop
|
||||
|
||||
translate.google.com googleusercontent.com * noop
|
||||
translate.google.com gstatic.com * noop
|
||||
|
||||
www.youtube.com ggpht.com * noop
|
||||
www.youtube.com google.com * noop
|
||||
www.youtube.com googleusercontent.com * noop
|
||||
www.youtube.com googlevideo.com * noop
|
||||
www.youtube.com gstatic.com * noop
|
||||
www.youtube.com jnn-pa.googleapis.com * noop
|
||||
www.youtube.com ytimg.com * noop
|
||||
|
||||
! Microsoft crap
|
||||
login.live.com * 3p noop
|
||||
login.live.com * 3p-frame noop
|
||||
login.live.com * 3p-script noop
|
||||
|
||||
login.microsoftonline.com * 3p noop
|
||||
login.microsoftonline.com * 3p-frame noop
|
||||
login.microsoftonline.com * 3p-script noop
|
||||
|
||||
outlook.live.com * 3p noop
|
||||
outlook.live.com * 3p-frame noop
|
||||
outlook.live.com * 3p-script noop
|
||||
|
||||
outlook.office365.com * 3p noop
|
||||
outlook.office365.com * 3p-frame noop
|
||||
outlook.office365.com * 3p-script noop
|
||||
|
||||
! Protonmail
|
||||
mail.proton.me * 3p noop
|
||||
mail.proton.me * 3p-frame noop
|
||||
mail.proton.me * 3p-script noop
|
||||
|
||||
! Reddit
|
||||
www.reddit.com redditmedia.com * noop
|
||||
www.reddit.com redditstatic.com * noop
|
||||
www.reddit.com redd.it * noop
|
||||
|
||||
! StackExchange
|
||||
stackexchange.com sstatic.net * noop
|
||||
stackexchange.com stackoverflow.com * noop
|
||||
|
||||
stackoverflow.com sstatic.net * noop
|
||||
stackoverflow.com stackexchange.com * noop
|
||||
|
||||
askubuntu.com sstatic.net * noop
|
||||
askubuntu.com stackexchange.com * noop
|
||||
askubuntu.com stackoverflow.com * noop
|
||||
|
||||
superuser.com sstatic.net * noop
|
||||
superuser.com stackexchange.com * noop
|
||||
superuser.com stackoverflow.com * noop
|
||||
|
||||
serverfault.com sstatic.net * noop
|
||||
serverfault.com stackexchange.com * noop
|
||||
serverfault.com stackoverflow.com * noop
|
||||
|
||||
! Simplelogin
|
||||
app.simplelogin.io simplelogin.co * noop
|
||||
|
||||
! Privacyguides
|
||||
www.privacyguides.org github.com * noop
|
||||
www.privacyguides.org privacyguides.github.io * noop
|
||||
www.privacyguides.org privacyguides.net * noop
|
||||
|
||||
! Fontawesome
|
||||
fontawesome.com algolia.net * noop
|
||||
fontawesome.com algolianet.com * noop
|
||||
fontawesome.com fortawesome.com * noop
|
||||
|
||||
! IMDb
|
||||
www.imdb.com media-amazon.com * noop
|
||||
www.imdb.com media-imdb.com * noop
|
||||
|
||||
! Others
|
||||
docs.gtk.org gnome.org * noop
|
||||
letsgetrusty.com kartra.com * noop
|
||||
* readthedocs.io * noop
|
76
firefox/user-overrides.js
Normal file
76
firefox/user-overrides.js
Normal file
|
@ -0,0 +1,76 @@
|
|||
/* --------------- PERSONAL ARKENFOX OVERRIDES --------------- ***/
|
||||
user_pref("_overrides.parrot", "Custom: Arkenfox overrides");
|
||||
|
||||
/* Re-enabled single perf features ***/
|
||||
user_pref("keyword.enabled", true); // 0801 Enable searching from location bar (I trust my search engine)
|
||||
// user_pref("browser.search.suggest.enabled", true); // 0804 Enable search suggestions
|
||||
// user_pref("browser.urlbar.suggest.searches", true); // 0804 Enables search suggestions in the url-bar
|
||||
user_pref("network.http.referer.XOriginPolicy", 0); // 1601 Allow cross origin referrers (disabling breaks too much), I use Smart Referer extension instead
|
||||
user_pref("privacy.clearOnShutdown.sessions", true); // 2811 Retain HTTP Basic Auth on shutdown
|
||||
user_pref("signon.rememberSignons", false); // 5003 Disable saving passwords to FF, there's Bitwarden
|
||||
user_pref("security.nocertdb", true); // 5005 Don't cache certificates (stores them session-only)
|
||||
user_pref("browser.download.folderList", 1); // 5016 Always use default downloads folder, not previous folder for download location
|
||||
|
||||
/* override recipe: enable session restore ***/
|
||||
user_pref("browser.startup.page", 3); // 0102 Enable session restore
|
||||
user_pref("privacy.clearOnShutdown.history", false); // 2811 Don't clear history on exit
|
||||
user_pref("privacy.cpd.history", false); // 2812 To match when you use Ctrl-Shift-Del
|
||||
user_pref("places.history.enabled", false); // 5013 Disable browsing and download history (allows no history with session restore)
|
||||
|
||||
/* --------------- PERSONAL PRIVACY RULES --------------- ***/
|
||||
user_pref("_overrides.parrot", "Custom: Privacy rules");
|
||||
|
||||
/* Deny some permission requests by default (prevent ask popups) ***/
|
||||
user_pref("permissions.default.microphone", 2); // Microphone
|
||||
user_pref("permissions.default.desktop-notification", 2); // Notifications
|
||||
user_pref("permissions.default.geo", 2); // Location
|
||||
|
||||
/* Disable safebrowsing (sends data to google) ***/
|
||||
user_pref("browser.safebrowsing.downloads.remote.enabled", false);
|
||||
user_pref("browser.safebrowsing.phishing.enabled", false);
|
||||
user_pref("browser.safebrowsing.malware.enabled", false);
|
||||
|
||||
/* Javascript hardening (might cause slowdowns/breakage) ***/
|
||||
// user_pref("javascript.options.ion", false); // Might cause slowdowns/breakage
|
||||
// user_pref("javascript.options.asmjs", false); // Might cause slowdowns/breakage
|
||||
// user_pref("javascript.options.wasm", false); // Completely disables WASM, for the security gain and speed benefit
|
||||
// user_pref("javascript.options.baselinejit", false); // Disable JIT compilation - usually breaks sites with a lot of javascript but is a huge security gain
|
||||
|
||||
/* Mark Quad9 as trusted recursive resolver (TRR) for DNS over HTTPS (DoH) ***/
|
||||
user_pref("network.trr.mode", 2); // Use TRR first, and only if the secure resolution fails use the operating system resolver.
|
||||
user_pref("network.trr.uri", "https://dns.quad9.net:5053/dns-query"); // Resolver we want to use
|
||||
user_pref("network.trr.bootstrapAddress", "9.9.9.9"); // Address to lookup the quad9 DoH address (only used once for this lookup)
|
||||
|
||||
/* Other Privacy hardenings ***/
|
||||
user_pref("geo.enabled", false); // Fully disable location access
|
||||
user_pref("media.hardwaremediakeys.enabled", false); // Disable control via media keys (some websites might be stealing these)
|
||||
user_pref("dom.webaudio.enabled",false); // Old, mostly unused API, likely utilized for fingerprinting, hasn't broken anything FOR ME
|
||||
|
||||
/* --------------- PERSONAL NON-PRIVACY RULES --------------- ***/
|
||||
user_pref("_overrides.parrot", "Custom: Non-privacy rules");
|
||||
|
||||
/* Annoyances ***/
|
||||
user_pref("browser.tabs.firefox-view", false); // Don't show firefox view tab
|
||||
user_pref("extensions.pocket.enabled", false); // Disable pocket
|
||||
user_pref("extensions.abuseReport.enabled", false); // Disable report extension to mozilla
|
||||
user_pref("identity.fxaccounts.enabled", false); // Disable sync entirely
|
||||
|
||||
/* Urlbar suggestions ***/
|
||||
user_pref("browser.urlbar.suggest.openpage", false); // Disable suggestions of open pages
|
||||
user_pref("browser.urlbar.suggest.engines", false); // Disable suggestions of search engines
|
||||
user_pref("browser.urlbar.suggest.topsites", false); // Disable suggestions of top sites
|
||||
|
||||
/* Styling changes ***/
|
||||
user_pref("browser.fullscreen.autohide", false); // Don't auto-hide tabs when firefox is in fullscreen
|
||||
user_pref("browser.toolbars.bookmarks.visibility", "always"); // Always show bookmarks toolbar
|
||||
user_pref("toolkit.legacyUserProfileCustomizations.stylesheets", true); // Enable profile customization with userChrome.css and userContent.css
|
||||
user_pref("ui.systemUsesDarkTheme", 1); // Enables `prefers-color-scheme` CSS media feature
|
||||
|
||||
/* Other changes ***/
|
||||
user_pref("browser.preferences.experimental", true); // Show experimental options in about:preferences
|
||||
user_pref("browser.urlbar.suggest.calculator", true); // Calculator in urlbar
|
||||
user_pref("layout.spellcheckDefault", 2); // Enable spellcheck by default for all inputs
|
||||
user_pref("browser.quitShortcut.disabled", true); // Disable Ctrl+Q browser quit shortcut
|
||||
|
||||
/* --------------- END --------------- ***/
|
||||
user_pref("_overrides.parrot", "Custom: success");
|
0
home/.cache/nv/.keep
Normal file
0
home/.cache/nv/.keep
Normal file
0
home/.cache/python_history
Normal file
0
home/.cache/python_history
Normal file
0
home/.cache/zsh/history
Normal file
0
home/.cache/zsh/history
Normal file
816
home/.config/alacritty/alacritty.yml
Normal file
816
home/.config/alacritty/alacritty.yml
Normal file
|
@ -0,0 +1,816 @@
|
|||
# Configuration for Alacritty, the GPU enhanced terminal emulator.
|
||||
|
||||
# Import additional configuration files
|
||||
#
|
||||
# Imports are loaded in order, skipping all missing files, with the importing
|
||||
# file being loaded last. If a field is already present in a previous import, it
|
||||
# will be replaced.
|
||||
#
|
||||
# All imports must either be absolute paths starting with `/`, or paths relative
|
||||
# to the user's home directory starting with `~/`.
|
||||
#import:
|
||||
# - /path/to/alacritty.yml
|
||||
|
||||
# Any items in the `env` entry below will be added as
|
||||
# environment variables. Some entries may override variables
|
||||
# set by alacritty itself.
|
||||
#env:
|
||||
# TERM variable
|
||||
#
|
||||
# This value is used to set the `$TERM` environment variable for
|
||||
# each instance of Alacritty. If it is not present, alacritty will
|
||||
# check the local terminfo database and use `alacritty` if it is
|
||||
# available, otherwise `xterm-256color` is used.
|
||||
#TERM: alacritty
|
||||
|
||||
window:
|
||||
# Window dimensions (changes require restart)
|
||||
#
|
||||
# Number of lines/columns (not pixels) in the terminal. The number of columns
|
||||
# must be at least `2`, while using a value of `0` for columns and lines will
|
||||
# fall back to the window manager's recommended size.
|
||||
#dimensions:
|
||||
# columns: 0
|
||||
# lines: 0
|
||||
|
||||
# Window position (changes require restart)
|
||||
#
|
||||
# Specified in number of pixels.
|
||||
# If the position is not set, the window manager will handle the placement.
|
||||
#position:
|
||||
# x: 0
|
||||
# y: 0
|
||||
|
||||
# Window padding (changes require restart)
|
||||
#
|
||||
# Blank space added around the window in pixels. This padding is scaled
|
||||
# by DPI and the specified value is always added at both opposing sides.
|
||||
padding:
|
||||
x: 6
|
||||
y: 6
|
||||
|
||||
# Background opacity
|
||||
#
|
||||
# Window opacity as a floating point number from `0.0` to `1.0`.
|
||||
# The value `0.0` is completely transparent and `1.0` is opaque.
|
||||
opacity: 0.9
|
||||
|
||||
# Spread additional padding evenly around the terminal content.
|
||||
#dynamic_padding: false
|
||||
|
||||
# Window decorations
|
||||
#
|
||||
# Values for `decorations`:
|
||||
# - full: Borders and title bar
|
||||
# - none: Neither borders nor title bar
|
||||
#
|
||||
# Values for `decorations` (macOS only):
|
||||
# - transparent: Title bar, transparent background and title bar buttons
|
||||
# - buttonless: Title bar, transparent background and no title bar buttons
|
||||
#decorations: full
|
||||
|
||||
# Startup Mode (changes require restart)
|
||||
#
|
||||
# Values for `startup_mode`:
|
||||
# - Windowed
|
||||
# - Maximized
|
||||
# - Fullscreen
|
||||
#
|
||||
# Values for `startup_mode` (macOS only):
|
||||
# - SimpleFullscreen
|
||||
#startup_mode: Windowed
|
||||
|
||||
# Window title
|
||||
#title: Alacritty
|
||||
|
||||
# Allow terminal applications to change Alacritty's window title.
|
||||
#dynamic_title: true
|
||||
|
||||
# Window class (Linux/BSD only):
|
||||
#class:
|
||||
# Application instance name
|
||||
#instance: Alacritty
|
||||
# General application class
|
||||
#general: Alacritty
|
||||
|
||||
# GTK theme variant (Linux/BSD only)
|
||||
#
|
||||
# Override the variant of the GTK theme. Commonly supported values are `dark`
|
||||
# and `light`. Set this to `None` to use the default theme variant.
|
||||
#gtk_theme_variant: None
|
||||
|
||||
scrolling:
|
||||
# Maximum number of lines in the scrollback buffer.
|
||||
# Specifying '0' will disable scrolling.
|
||||
history: 10000
|
||||
|
||||
# Scrolling distance multiplier.
|
||||
#multiplier: 3
|
||||
|
||||
# Font configuration
|
||||
font:
|
||||
# Normal (roman) font face
|
||||
normal:
|
||||
# Font family
|
||||
#
|
||||
# Default:
|
||||
# - (macOS) Menlo
|
||||
# - (Linux/BSD) monospace
|
||||
# - (Windows) Consolas
|
||||
family: JetBrains Mono
|
||||
#family: Comic Mono
|
||||
#family: Source Code Pro
|
||||
|
||||
# The `style` can be specified to pick a specific face.
|
||||
style: Medium
|
||||
|
||||
# Bold font face
|
||||
#bold:
|
||||
# Font family
|
||||
#
|
||||
# If the bold family is not specified, it will fall back to the
|
||||
# value specified for the normal font.
|
||||
#family: monospace
|
||||
#family: Source Code Pro
|
||||
|
||||
# The `style` can be specified to pick a specific face.
|
||||
#style: Bold
|
||||
|
||||
# Italic font face
|
||||
#italic:
|
||||
# Font family
|
||||
#
|
||||
# If the italic family is not specified, it will fall back to the
|
||||
# value specified for the normal font.
|
||||
#family: monospace
|
||||
#family: Source Code Pro
|
||||
|
||||
# The `style` can be specified to pick a specific face.
|
||||
#style: Italic
|
||||
|
||||
# Bold italic font face
|
||||
#bold_italic:
|
||||
# Font family
|
||||
#
|
||||
# If the bold italic family is not specified, it will fall back to the
|
||||
# value specified for the normal font.
|
||||
#family: monospace
|
||||
|
||||
# The `style` can be specified to pick a specific face.
|
||||
#style: Bold Italic
|
||||
|
||||
# Point size
|
||||
size: 11.0
|
||||
|
||||
# Offset is the extra space around each character. `offset.y` can be thought
|
||||
# of as modifying the line spacing, and `offset.x` as modifying the letter
|
||||
# spacing.
|
||||
#offset:
|
||||
# x: 0
|
||||
# y: 0
|
||||
|
||||
# Glyph offset determines the locations of the glyphs within their cells with
|
||||
# the default being at the bottom. Increasing `x` moves the glyph to the
|
||||
# right, increasing `y` moves the glyph upward.
|
||||
#glyph_offset:
|
||||
# x: 0
|
||||
# y: 0
|
||||
|
||||
# Thin stroke font rendering (macOS only)
|
||||
#
|
||||
# Thin strokes are suitable for retina displays, but for non-retina screens
|
||||
# it is recommended to set `use_thin_strokes` to `false`.
|
||||
#use_thin_strokes: true
|
||||
|
||||
# If `true`, bold text is drawn using the bright color variants.
|
||||
draw_bold_text_with_bright_colors: false
|
||||
|
||||
# Colors (Tomorrow Night)
|
||||
colors:
|
||||
# Default colors
|
||||
primary:
|
||||
background: '#191919'
|
||||
foreground: '#d8dee9'
|
||||
#background: '#1d1f21'
|
||||
#foreground: '#c5c8c6'
|
||||
|
||||
# Bright and dim foreground colors
|
||||
#
|
||||
# The dimmed foreground color is calculated automatically if it is not
|
||||
# present. If the bright foreground color is not set, or
|
||||
# `draw_bold_text_with_bright_colors` is `false`, the normal foreground
|
||||
# color will be used.
|
||||
#dim_foreground: '#828482'
|
||||
#bright_foreground: '#eaeaea'
|
||||
|
||||
# Cursor colors
|
||||
#
|
||||
# Colors which should be used to draw the terminal cursor.
|
||||
#
|
||||
# Allowed values are CellForeground and CellBackground, which reference the
|
||||
# affected cell, or hexadecimal colors like #ff00ff.
|
||||
#cursor:
|
||||
# text: CellBackground
|
||||
# cursor: CellForeground
|
||||
|
||||
# Vi mode cursor colors
|
||||
#
|
||||
# Colors for the cursor when the vi mode is active.
|
||||
#
|
||||
# Allowed values are CellForeground and CellBackground, which reference the
|
||||
# affected cell, or hexadecimal colors like #ff00ff.
|
||||
#vi_mode_cursor:
|
||||
# text: CellBackground
|
||||
# cursor: CellForeground
|
||||
|
||||
# Search colors
|
||||
#
|
||||
# Colors used for the search bar and match highlighting.
|
||||
#search:
|
||||
# Allowed values are CellForeground and CellBackground, which reference the
|
||||
# affected cell, or hexadecimal colors like #ff00ff.
|
||||
#matches:
|
||||
# foreground: '#000000'
|
||||
# background: '#ffffff'
|
||||
#focused_match:
|
||||
# foreground: CellBackground
|
||||
# background: CellForeground
|
||||
|
||||
#bar:
|
||||
# background: '#c5c8c6'
|
||||
# foreground: '#1d1f21'
|
||||
|
||||
# Line indicator
|
||||
#
|
||||
# Color used for the indicator displaying the position in history during
|
||||
# search and vi mode.
|
||||
#
|
||||
# By default, these will use the opposing primary color.
|
||||
#line_indicator:
|
||||
# foreground: None
|
||||
# background: None
|
||||
|
||||
# Selection colors
|
||||
#
|
||||
# Colors which should be used to draw the selection area.
|
||||
#
|
||||
# Allowed values are CellForeground and CellBackground, which reference the
|
||||
# affected cell, or hexadecimal colors like #ff00ff.
|
||||
#selection:
|
||||
# text: CellBackground
|
||||
# background: CellForeground
|
||||
|
||||
# Normal colors
|
||||
normal:
|
||||
#black: '#191919'
|
||||
black: '#46494d'
|
||||
red: '#b02626'
|
||||
green: '#40a62f'
|
||||
yellow: '#f2e635'
|
||||
blue: '#314ad0'
|
||||
magenta: '#b30ad0'
|
||||
cyan: '#32d0fc'
|
||||
white: '#acadb1'
|
||||
|
||||
# Bright colors
|
||||
bright:
|
||||
black: '#666666'
|
||||
red: '#ce2727'
|
||||
green: '#47c930'
|
||||
yellow: '#fff138'
|
||||
blue: '#2e4bea'
|
||||
magenta: '#cc15ed'
|
||||
cyan: '#54d9ff'
|
||||
white: '#dbdbdb'
|
||||
|
||||
# Dim colors
|
||||
dim:
|
||||
black: '#676f78'
|
||||
red: '#b55454'
|
||||
green: '#78a670'
|
||||
yellow: '#faf380'
|
||||
blue: '#707fd0'
|
||||
magenta: '#c583d0'
|
||||
cyan: '#8adaf1'
|
||||
white: '#e0e3e7'
|
||||
|
||||
# Indexed Colors
|
||||
#
|
||||
# The indexed colors include all colors from 16 to 256.
|
||||
# When these are not set, they're filled with sensible defaults.
|
||||
#
|
||||
# Example:
|
||||
# `- { index: 16, color: '#ff00ff' }`
|
||||
#
|
||||
#indexed_colors: []
|
||||
|
||||
# Bell
|
||||
#
|
||||
# The bell is rung every time the BEL control character is received.
|
||||
#bell:
|
||||
# Visual Bell Animation
|
||||
#
|
||||
# Animation effect for flashing the screen when the visual bell is rung.
|
||||
#
|
||||
# Values for `animation`:
|
||||
# - Ease
|
||||
# - EaseOut
|
||||
# - EaseOutSine
|
||||
# - EaseOutQuad
|
||||
# - EaseOutCubic
|
||||
# - EaseOutQuart
|
||||
# - EaseOutQuint
|
||||
# - EaseOutExpo
|
||||
# - EaseOutCirc
|
||||
# - Linear
|
||||
#animation: EaseOutExpo
|
||||
|
||||
# Duration of the visual bell flash in milliseconds. A `duration` of `0` will
|
||||
# disable the visual bell animation.
|
||||
#duration: 0
|
||||
|
||||
# Visual bell animation color.
|
||||
#color: '#ffffff'
|
||||
|
||||
# Bell Command
|
||||
#
|
||||
# This program is executed whenever the bell is rung.
|
||||
#
|
||||
# When set to `command: None`, no command will be executed.
|
||||
#
|
||||
# Example:
|
||||
# command:
|
||||
# program: notify-send
|
||||
# args: ["Hello, World!"]
|
||||
#
|
||||
#command: None
|
||||
|
||||
#selection:
|
||||
# This string contains all characters that are used as separators for
|
||||
# "semantic words" in Alacritty.
|
||||
#semantic_escape_chars: ",│`|:\"' ()[]{}<>\t"
|
||||
|
||||
# When set to `true`, selected text will be copied to the primary clipboard.
|
||||
#save_to_clipboard: false
|
||||
|
||||
#cursor:
|
||||
# Cursor style
|
||||
#style:
|
||||
# Cursor shape
|
||||
#
|
||||
# Values for `shape`:
|
||||
# - ▇ Block
|
||||
# - _ Underline
|
||||
# - | Beam
|
||||
#shape: Block
|
||||
|
||||
# Cursor blinking state
|
||||
#
|
||||
# Values for `blinking`:
|
||||
# - Never: Prevent the cursor from ever blinking
|
||||
# - Off: Disable blinking by default
|
||||
# - On: Enable blinking by default
|
||||
# - Always: Force the cursor to always blink
|
||||
#blinking: Off
|
||||
|
||||
# Vi mode cursor style
|
||||
#
|
||||
# If the vi mode cursor style is `None` or not specified, it will fall back to
|
||||
# the style of the active value of the normal cursor.
|
||||
#
|
||||
# See `cursor.style` for available options.
|
||||
#vi_mode_style: None
|
||||
|
||||
# Cursor blinking interval in milliseconds.
|
||||
#blink_interval: 750
|
||||
|
||||
# If this is `true`, the cursor will be rendered as a hollow box when the
|
||||
# window is not focused.
|
||||
#unfocused_hollow: true
|
||||
|
||||
# Thickness of the cursor relative to the cell width as floating point number
|
||||
# from `0.0` to `1.0`.
|
||||
#thickness: 0.15
|
||||
|
||||
# Live config reload (changes require restart)
|
||||
#live_config_reload: true
|
||||
|
||||
# Shell
|
||||
#
|
||||
# You can set `shell.program` to the path of your favorite shell, e.g.
|
||||
# `/bin/fish`. Entries in `shell.args` are passed unmodified as arguments to the
|
||||
# shell.
|
||||
#
|
||||
# Default:
|
||||
# - (macOS) /bin/bash --login
|
||||
# - (Linux/BSD) user login shell
|
||||
# - (Windows) powershell
|
||||
#shell:
|
||||
# program: /bin/bash
|
||||
# args:
|
||||
# - --login
|
||||
|
||||
# Startup directory
|
||||
#
|
||||
# Directory the shell is started in. If this is unset, or `None`, the working
|
||||
# directory of the parent process will be used.
|
||||
#working_directory: None
|
||||
|
||||
# Send ESC (\x1b) before characters when alt is pressed.
|
||||
#alt_send_esc: true
|
||||
|
||||
#mouse:
|
||||
# Click settings
|
||||
#
|
||||
# The `double_click` and `triple_click` settings control the time
|
||||
# alacritty should wait for accepting multiple clicks as one double
|
||||
# or triple click.
|
||||
#double_click: { threshold: 300 }
|
||||
#triple_click: { threshold: 300 }
|
||||
|
||||
# If this is `true`, the cursor is temporarily hidden when typing.
|
||||
#hide_when_typing: false
|
||||
|
||||
#url:
|
||||
# URL launcher
|
||||
#
|
||||
# This program is executed when clicking on a text which is recognized as a
|
||||
# URL. The URL is always added to the command as the last parameter.
|
||||
#
|
||||
# When set to `launcher: None`, URL launching will be disabled completely.
|
||||
#
|
||||
# Default:
|
||||
# - (macOS) open
|
||||
# - (Linux/BSD) xdg-open
|
||||
# - (Windows) explorer
|
||||
#launcher:
|
||||
# program: xdg-open
|
||||
# args: []
|
||||
|
||||
# URL modifiers
|
||||
#
|
||||
# These are the modifiers that need to be held down for opening URLs when
|
||||
# clicking on them. The available modifiers are documented in the key
|
||||
# binding section.
|
||||
#modifiers: None
|
||||
|
||||
# Mouse bindings
|
||||
#
|
||||
# Mouse bindings are specified as a list of objects, much like the key
|
||||
# bindings further below.
|
||||
#
|
||||
# To trigger mouse bindings when an application running within Alacritty
|
||||
# captures the mouse, the `Shift` modifier is automatically added as a
|
||||
# requirement.
|
||||
#
|
||||
# Each mouse binding will specify a:
|
||||
#
|
||||
# - `mouse`:
|
||||
#
|
||||
# - Middle
|
||||
# - Left
|
||||
# - Right
|
||||
# - Numeric identifier such as `5`
|
||||
#
|
||||
# - `action` (see key bindings)
|
||||
#
|
||||
# And optionally:
|
||||
#
|
||||
# - `mods` (see key bindings)
|
||||
#mouse_bindings:
|
||||
# - { mouse: Middle, action: PasteSelection }
|
||||
|
||||
# Key bindings
|
||||
#
|
||||
# Key bindings are specified as a list of objects. For example, this is the
|
||||
# default paste binding:
|
||||
#
|
||||
# `- { key: V, mods: Control|Shift, action: Paste }`
|
||||
#
|
||||
# Each key binding will specify a:
|
||||
#
|
||||
# - `key`: Identifier of the key pressed
|
||||
#
|
||||
# - A-Z
|
||||
# - F1-F24
|
||||
# - Key0-Key9
|
||||
#
|
||||
# A full list with available key codes can be found here:
|
||||
# https://docs.rs/glutin/*/glutin/event/enum.VirtualKeyCode.html#variants
|
||||
#
|
||||
# Instead of using the name of the keys, the `key` field also supports using
|
||||
# the scancode of the desired key. Scancodes have to be specified as a
|
||||
# decimal number. This command will allow you to display the hex scancodes
|
||||
# for certain keys:
|
||||
#
|
||||
# `showkey --scancodes`.
|
||||
#
|
||||
# Then exactly one of:
|
||||
#
|
||||
# - `chars`: Send a byte sequence to the running application
|
||||
#
|
||||
# The `chars` field writes the specified string to the terminal. This makes
|
||||
# it possible to pass escape sequences. To find escape codes for bindings
|
||||
# like `PageUp` (`"\x1b[5~"`), you can run the command `showkey -a` outside
|
||||
# of tmux. Note that applications use terminfo to map escape sequences back
|
||||
# to keys. It is therefore required to update the terminfo when changing an
|
||||
# escape sequence.
|
||||
#
|
||||
# - `action`: Execute a predefined action
|
||||
#
|
||||
# - ToggleViMode
|
||||
# - SearchForward
|
||||
# Start searching toward the right of the search origin.
|
||||
# - SearchBackward
|
||||
# Start searching toward the left of the search origin.
|
||||
# - Copy
|
||||
# - Paste
|
||||
# - IncreaseFontSize
|
||||
# - DecreaseFontSize
|
||||
# - ResetFontSize
|
||||
# - ScrollPageUp
|
||||
# - ScrollPageDown
|
||||
# - ScrollHalfPageUp
|
||||
# - ScrollHalfPageDown
|
||||
# - ScrollLineUp
|
||||
# - ScrollLineDown
|
||||
# - ScrollToTop
|
||||
# - ScrollToBottom
|
||||
# - ClearHistory
|
||||
# Remove the terminal's scrollback history.
|
||||
# - Hide
|
||||
# Hide the Alacritty window.
|
||||
# - Minimize
|
||||
# Minimize the Alacritty window.
|
||||
# - Quit
|
||||
# Quit Alacritty.
|
||||
# - ToggleFullscreen
|
||||
# - SpawnNewInstance
|
||||
# Spawn a new instance of Alacritty.
|
||||
# - ClearLogNotice
|
||||
# Clear Alacritty's UI warning and error notice.
|
||||
# - ClearSelection
|
||||
# Remove the active selection.
|
||||
# - ReceiveChar
|
||||
# - None
|
||||
#
|
||||
# - Vi mode exclusive actions:
|
||||
#
|
||||
# - Open
|
||||
# Open URLs at the cursor location with the launcher configured in
|
||||
# `url.launcher`.
|
||||
# - ToggleNormalSelection
|
||||
# - ToggleLineSelection
|
||||
# - ToggleBlockSelection
|
||||
# - ToggleSemanticSelection
|
||||
# Toggle semantic selection based on `selection.semantic_escape_chars`.
|
||||
#
|
||||
# - Vi mode exclusive cursor motion actions:
|
||||
#
|
||||
# - Up
|
||||
# One line up.
|
||||
# - Down
|
||||
# One line down.
|
||||
# - Left
|
||||
# One character left.
|
||||
# - Right
|
||||
# One character right.
|
||||
# - First
|
||||
# First column, or beginning of the line when already at the first column.
|
||||
# - Last
|
||||
# Last column, or beginning of the line when already at the last column.
|
||||
# - FirstOccupied
|
||||
# First non-empty cell in this terminal row, or first non-empty cell of
|
||||
# the line when already at the first cell of the row.
|
||||
# - High
|
||||
# Top of the screen.
|
||||
# - Middle
|
||||
# Center of the screen.
|
||||
# - Low
|
||||
# Bottom of the screen.
|
||||
# - SemanticLeft
|
||||
# Start of the previous semantically separated word.
|
||||
# - SemanticRight
|
||||
# Start of the next semantically separated word.
|
||||
# - SemanticLeftEnd
|
||||
# End of the previous semantically separated word.
|
||||
# - SemanticRightEnd
|
||||
# End of the next semantically separated word.
|
||||
# - WordLeft
|
||||
# Start of the previous whitespace separated word.
|
||||
# - WordRight
|
||||
# Start of the next whitespace separated word.
|
||||
# - WordLeftEnd
|
||||
# End of the previous whitespace separated word.
|
||||
# - WordRightEnd
|
||||
# End of the next whitespace separated word.
|
||||
# - Bracket
|
||||
# Character matching the bracket at the cursor's location.
|
||||
# - SearchNext
|
||||
# Beginning of the next match.
|
||||
# - SearchPrevious
|
||||
# Beginning of the previous match.
|
||||
# - SearchStart
|
||||
# Start of the match to the left of the vi mode cursor.
|
||||
# - SearchEnd
|
||||
# End of the match to the right of the vi mode cursor.
|
||||
#
|
||||
# - Search mode exclusive actions:
|
||||
# - SearchFocusNext
|
||||
# Move the focus to the next search match.
|
||||
# - SearchFocusPrevious
|
||||
# Move the focus to the previous search match.
|
||||
# - SearchConfirm
|
||||
# - SearchCancel
|
||||
# - SearchClear
|
||||
# Reset the search regex.
|
||||
# - SearchDeleteWord
|
||||
# Delete the last word in the search regex.
|
||||
# - SearchHistoryPrevious
|
||||
# Go to the previous regex in the search history.
|
||||
# - SearchHistoryNext
|
||||
# Go to the next regex in the search history.
|
||||
#
|
||||
# - macOS exclusive actions:
|
||||
# - ToggleSimpleFullscreen
|
||||
# Enter fullscreen without occupying another space.
|
||||
#
|
||||
# - Linux/BSD exclusive actions:
|
||||
#
|
||||
# - CopySelection
|
||||
# Copy from the selection buffer.
|
||||
# - PasteSelection
|
||||
# Paste from the selection buffer.
|
||||
#
|
||||
# - `command`: Fork and execute a specified command plus arguments
|
||||
#
|
||||
# The `command` field must be a map containing a `program` string and an
|
||||
# `args` array of command line parameter strings. For example:
|
||||
# `{ program: "alacritty", args: ["-e", "vttest"] }`
|
||||
#
|
||||
# And optionally:
|
||||
#
|
||||
# - `mods`: Key modifiers to filter binding actions
|
||||
#
|
||||
# - Command
|
||||
# - Control
|
||||
# - Option
|
||||
# - Super
|
||||
# - Shift
|
||||
# - Alt
|
||||
#
|
||||
# Multiple `mods` can be combined using `|` like this:
|
||||
# `mods: Control|Shift`.
|
||||
# Whitespace and capitalization are relevant and must match the example.
|
||||
#
|
||||
# - `mode`: Indicate a binding for only specific terminal reported modes
|
||||
#
|
||||
# This is mainly used to send applications the correct escape sequences
|
||||
# when in different modes.
|
||||
#
|
||||
# - AppCursor
|
||||
# - AppKeypad
|
||||
# - Search
|
||||
# - Alt
|
||||
# - Vi
|
||||
#
|
||||
# A `~` operator can be used before a mode to apply the binding whenever
|
||||
# the mode is *not* active, e.g. `~Alt`.
|
||||
#
|
||||
# Bindings are always filled by default, but will be replaced when a new
|
||||
# binding with the same triggers is defined. To unset a default binding, it can
|
||||
# be mapped to the `ReceiveChar` action. Alternatively, you can use `None` for
|
||||
# a no-op if you do not wish to receive input characters for that binding.
|
||||
#
|
||||
# If the same trigger is assigned to multiple actions, all of them are executed
|
||||
# in the order they were defined in.
|
||||
#key_bindings:
|
||||
#- { key: Paste, action: Paste }
|
||||
#- { key: Copy, action: Copy }
|
||||
#- { key: L, mods: Control, action: ClearLogNotice }
|
||||
#- { key: L, mods: Control, mode: ~Vi|~Search, chars: "\x0c" }
|
||||
#- { key: PageUp, mods: Shift, mode: ~Alt, action: ScrollPageUp, }
|
||||
#- { key: PageDown, mods: Shift, mode: ~Alt, action: ScrollPageDown }
|
||||
#- { key: Home, mods: Shift, mode: ~Alt, action: ScrollToTop, }
|
||||
#- { key: End, mods: Shift, mode: ~Alt, action: ScrollToBottom }
|
||||
|
||||
# Vi Mode
|
||||
#- { key: Space, mods: Shift|Control, mode: Vi|~Search, action: ScrollToBottom }
|
||||
#- { key: Space, mods: Shift|Control, mode: ~Search, action: ToggleViMode }
|
||||
#- { key: Escape, mode: Vi|~Search, action: ClearSelection }
|
||||
#- { key: I, mode: Vi|~Search, action: ScrollToBottom }
|
||||
#- { key: I, mode: Vi|~Search, action: ToggleViMode }
|
||||
#- { key: C, mods: Control, mode: Vi|~Search, action: ToggleViMode }
|
||||
#- { key: Y, mods: Control, mode: Vi|~Search, action: ScrollLineUp }
|
||||
#- { key: E, mods: Control, mode: Vi|~Search, action: ScrollLineDown }
|
||||
#- { key: G, mode: Vi|~Search, action: ScrollToTop }
|
||||
#- { key: G, mods: Shift, mode: Vi|~Search, action: ScrollToBottom }
|
||||
#- { key: B, mods: Control, mode: Vi|~Search, action: ScrollPageUp }
|
||||
#- { key: F, mods: Control, mode: Vi|~Search, action: ScrollPageDown }
|
||||
#- { key: U, mods: Control, mode: Vi|~Search, action: ScrollHalfPageUp }
|
||||
#- { key: D, mods: Control, mode: Vi|~Search, action: ScrollHalfPageDown }
|
||||
#- { key: Y, mode: Vi|~Search, action: Copy }
|
||||
#- { key: Y, mode: Vi|~Search, action: ClearSelection }
|
||||
#- { key: Copy, mode: Vi|~Search, action: ClearSelection }
|
||||
#- { key: V, mode: Vi|~Search, action: ToggleNormalSelection }
|
||||
#- { key: V, mods: Shift, mode: Vi|~Search, action: ToggleLineSelection }
|
||||
#- { key: V, mods: Control, mode: Vi|~Search, action: ToggleBlockSelection }
|
||||
#- { key: V, mods: Alt, mode: Vi|~Search, action: ToggleSemanticSelection }
|
||||
#- { key: Return, mode: Vi|~Search, action: Open }
|
||||
#- { key: K, mode: Vi|~Search, action: Up }
|
||||
#- { key: J, mode: Vi|~Search, action: Down }
|
||||
#- { key: H, mode: Vi|~Search, action: Left }
|
||||
#- { key: L, mode: Vi|~Search, action: Right }
|
||||
#- { key: Up, mode: Vi|~Search, action: Up }
|
||||
#- { key: Down, mode: Vi|~Search, action: Down }
|
||||
#- { key: Left, mode: Vi|~Search, action: Left }
|
||||
#- { key: Right, mode: Vi|~Search, action: Right }
|
||||
#- { key: Key0, mode: Vi|~Search, action: First }
|
||||
#- { key: Key4, mods: Shift, mode: Vi|~Search, action: Last }
|
||||
#- { key: Key6, mods: Shift, mode: Vi|~Search, action: FirstOccupied }
|
||||
#- { key: H, mods: Shift, mode: Vi|~Search, action: High }
|
||||
#- { key: M, mods: Shift, mode: Vi|~Search, action: Middle }
|
||||
#- { key: L, mods: Shift, mode: Vi|~Search, action: Low }
|
||||
#- { key: B, mode: Vi|~Search, action: SemanticLeft }
|
||||
#- { key: W, mode: Vi|~Search, action: SemanticRight }
|
||||
#- { key: E, mode: Vi|~Search, action: SemanticRightEnd }
|
||||
#- { key: B, mods: Shift, mode: Vi|~Search, action: WordLeft }
|
||||
#- { key: W, mods: Shift, mode: Vi|~Search, action: WordRight }
|
||||
#- { key: E, mods: Shift, mode: Vi|~Search, action: WordRightEnd }
|
||||
#- { key: Key5, mods: Shift, mode: Vi|~Search, action: Bracket }
|
||||
#- { key: Slash, mode: Vi|~Search, action: SearchForward }
|
||||
#- { key: Slash, mods: Shift, mode: Vi|~Search, action: SearchBackward }
|
||||
#- { key: N, mode: Vi|~Search, action: SearchNext }
|
||||
#- { key: N, mods: Shift, mode: Vi|~Search, action: SearchPrevious }
|
||||
|
||||
# Search Mode
|
||||
#- { key: Return, mode: Search|Vi, action: SearchConfirm }
|
||||
#- { key: Escape, mode: Search, action: SearchCancel }
|
||||
#- { key: C, mods: Control, mode: Search, action: SearchCancel }
|
||||
#- { key: U, mods: Control, mode: Search, action: SearchClear }
|
||||
#- { key: W, mods: Control, mode: Search, action: SearchDeleteWord }
|
||||
#- { key: P, mods: Control, mode: Search, action: SearchHistoryPrevious }
|
||||
#- { key: N, mods: Control, mode: Search, action: SearchHistoryNext }
|
||||
#- { key: Up, mode: Search, action: SearchHistoryPrevious }
|
||||
#- { key: Down, mode: Search, action: SearchHistoryNext }
|
||||
#- { key: Return, mode: Search|~Vi, action: SearchFocusNext }
|
||||
#- { key: Return, mods: Shift, mode: Search|~Vi, action: SearchFocusPrevious }
|
||||
|
||||
# (Windows, Linux, and BSD only)
|
||||
#- { key: V, mods: Control|Shift, mode: ~Vi, action: Paste }
|
||||
#- { key: C, mods: Control|Shift, action: Copy }
|
||||
#- { key: F, mods: Control|Shift, mode: ~Search, action: SearchForward }
|
||||
#- { key: B, mods: Control|Shift, mode: ~Search, action: SearchBackward }
|
||||
#- { key: C, mods: Control|Shift, mode: Vi|~Search, action: ClearSelection }
|
||||
#- { key: Insert, mods: Shift, action: PasteSelection }
|
||||
#- { key: Key0, mods: Control, action: ResetFontSize }
|
||||
#- { key: Equals, mods: Control, action: IncreaseFontSize }
|
||||
#- { key: Plus, mods: Control, action: IncreaseFontSize }
|
||||
#- { key: NumpadAdd, mods: Control, action: IncreaseFontSize }
|
||||
#- { key: Minus, mods: Control, action: DecreaseFontSize }
|
||||
#- { key: NumpadSubtract, mods: Control, action: DecreaseFontSize }
|
||||
|
||||
# (Windows only)
|
||||
#- { key: Return, mods: Alt, action: ToggleFullscreen }
|
||||
|
||||
# (macOS only)
|
||||
#- { key: K, mods: Command, mode: ~Vi|~Search, chars: "\x0c" }
|
||||
#- { key: K, mods: Command, mode: ~Vi|~Search, action: ClearHistory }
|
||||
#- { key: Key0, mods: Command, action: ResetFontSize }
|
||||
#- { key: Equals, mods: Command, action: IncreaseFontSize }
|
||||
#- { key: Plus, mods: Command, action: IncreaseFontSize }
|
||||
#- { key: NumpadAdd, mods: Command, action: IncreaseFontSize }
|
||||
#- { key: Minus, mods: Command, action: DecreaseFontSize }
|
||||
#- { key: NumpadSubtract, mods: Command, action: DecreaseFontSize }
|
||||
#- { key: V, mods: Command, action: Paste }
|
||||
#- { key: C, mods: Command, action: Copy }
|
||||
#- { key: C, mods: Command, mode: Vi|~Search, action: ClearSelection }
|
||||
#- { key: H, mods: Command, action: Hide }
|
||||
#- { key: M, mods: Command, action: Minimize }
|
||||
#- { key: Q, mods: Command, action: Quit }
|
||||
#- { key: W, mods: Command, action: Quit }
|
||||
#- { key: N, mods: Command, action: SpawnNewInstance }
|
||||
#- { key: F, mods: Command|Control, action: ToggleFullscreen }
|
||||
#- { key: F, mods: Command, mode: ~Search, action: SearchForward }
|
||||
#- { key: B, mods: Command, mode: ~Search, action: SearchBackward }
|
||||
|
||||
#debug:
|
||||
# Display the time it takes to redraw each frame.
|
||||
#render_timer: false
|
||||
|
||||
# Keep the log file after quitting Alacritty.
|
||||
#persistent_logging: false
|
||||
|
||||
# Log level
|
||||
#
|
||||
# Values for `log_level`:
|
||||
# - Off
|
||||
# - Error
|
||||
# - Warn
|
||||
# - Info
|
||||
# - Debug
|
||||
# - Trace
|
||||
#log_level: Warn
|
||||
|
||||
# Print all received window events.
|
||||
#print_events: false
|
443
home/.config/dunst/dunstrc
Normal file
443
home/.config/dunst/dunstrc
Normal file
|
@ -0,0 +1,443 @@
|
|||
[global]
|
||||
|
||||
### Display ###
|
||||
|
||||
# Which monitor should the notifications be shown on
|
||||
monitor = 0
|
||||
|
||||
# Display notifications on focused monitor. Possible modes:
|
||||
# mouse: follow mouse pointer
|
||||
# keyboard: follow window with keyboard focus
|
||||
# none: don't follow anything
|
||||
#
|
||||
# keyboard needs a window manager that exports
|
||||
# _NET_ACTIVE_WINDOW propery! This should be the case for almost
|
||||
# all modern window managers.
|
||||
#
|
||||
# If this option isn't none, monitor option will be ignored.
|
||||
follow = mouse
|
||||
|
||||
### Geometry ###
|
||||
|
||||
# Dynamic width from 0 to 300
|
||||
# width = (0, 300)
|
||||
# constant width of 300
|
||||
# width = 300
|
||||
width = 270
|
||||
|
||||
# The maximum height of a single notification, excluding the frame.
|
||||
height = 300
|
||||
|
||||
# Position the notification in the top right corner
|
||||
origin = top-right
|
||||
|
||||
# Offset from the origin
|
||||
offset = 30x30
|
||||
|
||||
# Scale factor. It is auto-detected if value is 0.
|
||||
scale = 0
|
||||
|
||||
# Maximum number of notifications (0 means no limit)
|
||||
notification_limit = 0
|
||||
|
||||
### Progress bar ###
|
||||
|
||||
# Turn on the progress bar. It appears when a progress hint is passed
|
||||
# with for example dunstify -h int:value:12
|
||||
progress_bar = true
|
||||
|
||||
# Set the progress bar height. This includes the frame, so make sure
|
||||
# it's at least twice as big as the frame width.
|
||||
progress_bar_height = 30
|
||||
|
||||
# Set the frame width of the progress bar
|
||||
progress_bar_frame_width = 1
|
||||
|
||||
# Set the minimum width for the progress bar
|
||||
progress_bar_min_width = 150
|
||||
|
||||
# Set the maximum width for the progress bar
|
||||
progress_bar_max_width = 300
|
||||
|
||||
# Show how many messages are currently hidden (because of
|
||||
# notification_limit).
|
||||
indicate_hidden = yes
|
||||
|
||||
# The transparency of the window. Range: [0; 100].
|
||||
# This option will only work if a compositing window manager is
|
||||
# present (e.g. xcompmgr, compiz, picom, etc.). (X11 only)
|
||||
transparency = 20
|
||||
|
||||
# Draw a line of "separator_height" pixel height between two
|
||||
# notifications. Set to 0 to disable.
|
||||
separator_height = 2
|
||||
|
||||
# Padding between text and separator.
|
||||
padding = 10
|
||||
|
||||
# Horizontal padding
|
||||
horizontal_padding = 10
|
||||
|
||||
# Padding between text and icon.
|
||||
text_icon_padding = 0
|
||||
|
||||
# Defines width in pixels of fram around the notification window.
|
||||
# Set to 0 to disable.
|
||||
frame_width = 3
|
||||
|
||||
# Defines color of the frame around the notification window
|
||||
frame_color = "#aaaaaa"
|
||||
|
||||
# Define a color for the separator.
|
||||
# possible values are:
|
||||
# * auto: dunst tries to find a color fitting to the background;
|
||||
# * foreground: use the same color as the foreground;
|
||||
# * frame: use the same color as the frame;
|
||||
# * anything else will be interpreted as a X color.
|
||||
separator_color = frame
|
||||
|
||||
# Sort messages by urgency.
|
||||
sort = yes
|
||||
|
||||
# Don't remove messages if the user is idle (no mouse/keyboard input)
|
||||
# for longer than idle_threshold seconds (0 to disable)
|
||||
# A client can set the 'transient' hint to bypass this. See the rules
|
||||
# section for how to disable this if necessary
|
||||
idle_threshold = 120
|
||||
|
||||
### Text ###
|
||||
font = JetBrains Mono 11
|
||||
|
||||
# The spacing between the lines. If the height is smaller than the
|
||||
# font height, it will get raised to the font height.
|
||||
line_height = 0
|
||||
|
||||
# Possible values are:
|
||||
# full: Allow a small subset of html markup in notifications:
|
||||
# <b>bold</b>
|
||||
# <i>italic</i>
|
||||
# <s>strikethrough</s>
|
||||
# <u>underline</u>
|
||||
#
|
||||
# For a complete reference see
|
||||
# <http://developer.gnome.org/pango/stable/PangoMarkupFormat.html>.
|
||||
#
|
||||
# strip: This setting is provided for compatibility with some broken
|
||||
# clients that send markup even though it's not enabled on the
|
||||
# server. Dunst will try to strip the markup but the parsing is
|
||||
# simplistic so using this option outside of matching rules for
|
||||
# specific applications *IS GREATLY DISCOURAGED*.
|
||||
#
|
||||
# no: Disable markup parsing, incoming notifications will be treated as
|
||||
# plain text. Dunst will not advertise that it has the body-markup
|
||||
# capability if this is set as a global setting.
|
||||
#
|
||||
# It's important to note that markup inside the format option will be parsed
|
||||
# regardless of what this is set to.
|
||||
markup = full
|
||||
|
||||
# The format of the message. Possible variables are:
|
||||
# %a appname
|
||||
# %s summary
|
||||
# %b body
|
||||
# %i iconname (including its path)
|
||||
# %I iconname (without its path)
|
||||
# %p progress value if set ([ 0%] to [100%]) or nothing
|
||||
# %n progress value if set without any extra characters
|
||||
# %% Literal %
|
||||
# Markup is allowed
|
||||
format = "<b>%a - %s</b>\n%b"
|
||||
|
||||
# Alignment of the message text.
|
||||
# Possible values are "left", "center" and "right".
|
||||
alignment = left
|
||||
|
||||
# Vertical alignment of message text and icon.
|
||||
# Possible values are "top", "center" and "bottom".
|
||||
vertical_alignment = center
|
||||
|
||||
# Wrap longer sentences which don't fit into the horizonal size
|
||||
# of the noticication. If set to no, longer sententences will be truncated
|
||||
word_wrap = yes
|
||||
|
||||
# Specify where to make an ellipsis in the long lines.
|
||||
# Possible values are "start", "middle", "end".
|
||||
ellipsize = middle
|
||||
|
||||
# Ignore newlines '\n' in notifications.
|
||||
ignore_newline = no
|
||||
|
||||
# Show age of message if message is older than show_age_threshold seconds
|
||||
# Set to -1 to disable, 0 to always show.
|
||||
show_age_threshold = 60
|
||||
|
||||
# Merge multiple notifications with the same content
|
||||
stack_duplicates = true
|
||||
|
||||
# Hide the count of merged notifications with the same content
|
||||
hide_duplicate_count = false
|
||||
|
||||
# Display indicators for URLs (U) and actions (A)
|
||||
show_indicators = yes
|
||||
|
||||
### Icons ###
|
||||
|
||||
# Align icons left/right/off
|
||||
icon_position = left
|
||||
|
||||
# Scale small icons up to this size, set to 0 to disable. Helpful
|
||||
# for e.g. small files or high-dpi screens. In case of conflict,
|
||||
# max_icon_size takes precedence over this.
|
||||
min_icon_size = 0
|
||||
|
||||
# Scale larger icons down to this size, set to 0 to disable
|
||||
max_icon_size = 32
|
||||
|
||||
# Paths to default icons
|
||||
icon_path = /usr/share/icons/hicolor/16x16/status/:/usr/share/icons/hicolor/16x16/devices/:/usr/share/icons/hicolor/16x16/apps/
|
||||
|
||||
### History ###
|
||||
|
||||
# Should a notification popped up from history be sticky or timeout
|
||||
# as if it would normally do.
|
||||
sticky_history = yes
|
||||
|
||||
# Maximum amount of notifications kept in history
|
||||
history_length = 20
|
||||
|
||||
### Misc/Advanced ###
|
||||
|
||||
# dmenu path
|
||||
dmenu = /usr/local/bin/dmenu -p dunst:
|
||||
|
||||
# Browser for opening urls in content menu
|
||||
browser = /usr/bin/xdg-open
|
||||
|
||||
# Always run rule-defined scripts, even if the notification is suppressed
|
||||
always_run_script = true
|
||||
|
||||
# Define the title of the windows spawned by dunst
|
||||
title = Dunst
|
||||
|
||||
# Define the class of the windows spawned by dunst
|
||||
class = Dunst
|
||||
|
||||
# Define the corner radius of the notification window
|
||||
# in pixel size. If the radius is 0, you have no rounded
|
||||
# corners.
|
||||
# The radius will be automatically lowered if it exceeds half of the
|
||||
# notification height to avoid clipping text and/or icons.
|
||||
corner_radius = 0
|
||||
|
||||
# Ignore the dbus closeNotification message.
|
||||
# Useful to enforce the timeout set by dunst configuration. Without this
|
||||
# parameter, an application may close the notification sent before the
|
||||
# user defined timeout.
|
||||
ignore_dbusclose = false
|
||||
|
||||
### Wayland ###
|
||||
# These settings are Wayland-specific. They have no effect when using X11
|
||||
|
||||
# Uncomment this if you want to let notications appear under fullscreen
|
||||
# applications (default: overlay)
|
||||
# layer = top
|
||||
|
||||
# Set this to true to use X11 output on Wayland.
|
||||
force_xwayland = false
|
||||
|
||||
### Legacy ###
|
||||
|
||||
# Use the Xinerama extension instead of RandR for multi-monitor support.
|
||||
# This setting is provided for compatibility with older nVidia drivers that
|
||||
# do not support RandR and using it on systems that support RandR is highly
|
||||
# discouraged.
|
||||
#
|
||||
# By enabling this setting dunst will not be able to detect when a monitor
|
||||
# is connected or disconnected which might break follow mode if the screen
|
||||
# layout changes.
|
||||
force_xinerama = false
|
||||
|
||||
### Mouse ###
|
||||
|
||||
# Defines list of actions for each mouse event
|
||||
# Possible values are:
|
||||
# * none: Don't do anything.
|
||||
# * do_action: Invoke the action determined by the action_name rule. If there is no
|
||||
# such action, open the context menu.
|
||||
# * open_url: If the notification has exactly one url, open it. If there are multiple
|
||||
# ones, open the context menu.
|
||||
# * close_current: Close current notification.
|
||||
# * close_all: Close all notifications.
|
||||
# * context: Open context menu for the notification.
|
||||
# * context_all: Open context menu for all notifications.
|
||||
# These values can be strung together for each mouse event, and
|
||||
# will be executed in sequence.
|
||||
mouse_left_click = do_action, open_url, close_current
|
||||
mouse_middle_click = context
|
||||
mouse_right_click = close_current
|
||||
|
||||
# Experimental features that may or may not work correctly. Do not expect them
|
||||
# to have a consistent behaviour across releases.
|
||||
[experimental]
|
||||
# Calculate the dpi to use on a per-monitor basis.
|
||||
# If this setting is enabled the Xft.dpi value will be ignored and instead
|
||||
# dunst will attempt to calculate an appropriate dpi value for each monitor
|
||||
# using the resolution and physical size. This might be useful in setups
|
||||
# where there are multiple screens with very different dpi values.
|
||||
per_monitor_dpi = false
|
||||
|
||||
[urgency_low]
|
||||
highlight = "#fe6c5a"
|
||||
background = "#1e2137fa"
|
||||
frame_color = "#27292c"
|
||||
foreground = "#ffffff"
|
||||
|
||||
timeout = 5
|
||||
# Icon for notifications with low urgency, uncomment to enable
|
||||
#icon = /path/to/icon
|
||||
|
||||
[urgency_normal]
|
||||
highlight = "#fe6c5a"
|
||||
background = "#141c21fa"
|
||||
frame_color = "#27292c"
|
||||
foreground = "#ffffffff"
|
||||
|
||||
timeout = 10
|
||||
# Icon for notifications with normal urgency, uncomment to enable
|
||||
#icon = /path/to/icon
|
||||
|
||||
[urgency_critical]
|
||||
highlight = "#fe6c5a"
|
||||
background = "#dd130ddd"
|
||||
frame_color = "#27292c"
|
||||
foreground = "#ffffffff"
|
||||
|
||||
timeout = 0
|
||||
icon = arbt
|
||||
# Icon for notifications with critical urgency, uncomment to enable
|
||||
#icon = /path/to/icon
|
||||
|
||||
|
||||
# Every section that isn't one of the above is interpreted as a rules to
|
||||
# override settings for certain messages.
|
||||
#
|
||||
# Messages can be matched by
|
||||
# appname (discouraged, see desktop_entry)
|
||||
# body
|
||||
# category
|
||||
# desktop_entry
|
||||
# icon
|
||||
# match_transient
|
||||
# msg_urgency
|
||||
# stack_tag
|
||||
# summary
|
||||
#
|
||||
# and you can override the
|
||||
# background
|
||||
# foreground
|
||||
# format
|
||||
# frame_color
|
||||
# fullscreen
|
||||
# new_icon
|
||||
# set_stack_tag
|
||||
# set_transient
|
||||
# set_category
|
||||
# timeout
|
||||
# urgency
|
||||
# icon_position
|
||||
# skip_display
|
||||
# history_ignore
|
||||
# action_name
|
||||
# word_wrap
|
||||
# ellipsize
|
||||
# alignment
|
||||
# hide_text
|
||||
#
|
||||
# Shell-like globbing will get expanded.
|
||||
#
|
||||
# Instead of the appname filter, it's recommended to use the desktop_entry filter.
|
||||
# GLib based applications export their desktop-entry name. In comparison to the appname,
|
||||
# the desktop-entry won't get localized.
|
||||
#
|
||||
# SCRIPTING
|
||||
# You can specify a script that gets run when the rule matches by
|
||||
# setting the "script" option.
|
||||
# The script will be called as follows:
|
||||
# script appname summary body icon urgency
|
||||
# where urgency can be "LOW", "NORMAL" or "CRITICAL".
|
||||
#
|
||||
# NOTE: It might be helpful to run dunst -print in a terminal in order
|
||||
# to find fitting options for rules.
|
||||
|
||||
# Disable the transient hint so that idle_threshold cannot be bypassed from the
|
||||
# client
|
||||
#[transient_disable]
|
||||
# match_transient = yes
|
||||
# set_transient = no
|
||||
#
|
||||
# Make the handling of transient notifications more strict by making them not
|
||||
# be placed in history.
|
||||
#[transient_history_ignore]
|
||||
# match_transient = yes
|
||||
# history_ignore = yes
|
||||
|
||||
# fullscreen values
|
||||
# show: show the notifications, regardless if there is a fullscreen window opened
|
||||
# delay: displays the new notification, if there is no fullscreen window active
|
||||
# If the notification is already drawn, it won't get undrawn.
|
||||
# pushback: same as delay, but when switching into fullscreen, the notification will get
|
||||
# withdrawn from screen again and will get delayed like a new notification
|
||||
#[fullscreen_delay_everything]
|
||||
# fullscreen = delay
|
||||
#[fullscreen_show_critical]
|
||||
# msg_urgency = critical
|
||||
# fullscreen = show
|
||||
|
||||
#[espeak]
|
||||
# summary = "*"
|
||||
# script = dunst_espeak.sh
|
||||
|
||||
#[script-test]
|
||||
# summary = "*script*"
|
||||
# script = dunst_test.sh
|
||||
|
||||
#[ignore]
|
||||
# # This notification will not be displayed
|
||||
# summary = "foobar"
|
||||
# skip_display = true
|
||||
|
||||
#[history-ignore]
|
||||
# # This notification will not be saved in history
|
||||
# summary = "foobar"
|
||||
# history_ignore = yes
|
||||
|
||||
#[skip-display]
|
||||
# # This notification will not be displayed, but will be included in the history
|
||||
# summary = "foobar"
|
||||
# skip_display = yes
|
||||
|
||||
#[signed_on]
|
||||
# appname = Pidgin
|
||||
# summary = "*signed on*"
|
||||
# urgency = low
|
||||
#
|
||||
#[signed_off]
|
||||
# appname = Pidgin
|
||||
# summary = *signed off*
|
||||
# urgency = low
|
||||
#
|
||||
#[says]
|
||||
# appname = Pidgin
|
||||
# summary = *says*
|
||||
# urgency = critical
|
||||
#
|
||||
#[twitter]
|
||||
# appname = Pidgin
|
||||
# summary = *twitter.com*
|
||||
# urgency = normal
|
||||
#
|
||||
#[stack-volumes]
|
||||
# appname = "some_volume_notifiers"
|
||||
# set_stack_tag = "volume"
|
||||
#
|
||||
# vim: ft=cfg
|
43
home/.config/eww/css/_colors.scss
Normal file
43
home/.config/eww/css/_colors.scss
Normal file
|
@ -0,0 +1,43 @@
|
|||
$rosewater: #f5e0dc;
|
||||
$flamingo: #f2cdcd;
|
||||
$pink: #f5c2e7;
|
||||
$mauve: #cba6f7;
|
||||
$red: #f38ba8;
|
||||
$maroon: #eba0ac;
|
||||
$peach: #fab387;
|
||||
$yellow: #f9e2af;
|
||||
$gold: #efcb10;
|
||||
$green: #a6e3a1;
|
||||
$lime: #78db32;
|
||||
$teal: #94e2d5;
|
||||
$sky: #89dceb;
|
||||
$sapphire: #74c7ec;
|
||||
$blue: #89b4fa;
|
||||
$lavender: #b4befe;
|
||||
$orange: #ffa500;
|
||||
|
||||
$text: #cdd6f4;
|
||||
$subtext1: #bac2de;
|
||||
$subtext0: #a6adc8;
|
||||
$overlay2: #9399b2;
|
||||
$overlay1: #7f849c;
|
||||
$overlay0: #6c7086;
|
||||
|
||||
$surface2: #585b70;
|
||||
$surface1: #45475a;
|
||||
$surface0: #313244;
|
||||
|
||||
$base-a: rgba(30, 30, 40, 0.65);
|
||||
$base: rgba(30, 30, 40, 1);
|
||||
$base1-a: rgba(49, 50, 68, 0.85);
|
||||
$base1: rgba(49, 50, 68, 1);
|
||||
$mantle: #181825;
|
||||
$crust: #11111b;
|
||||
|
||||
$fg: $text;
|
||||
$bg-a: $base-a;
|
||||
$bg: $base;
|
||||
$bg1: $base1;
|
||||
$bg1-a: $base1-a;
|
||||
$border: #28283d;
|
||||
$shadow: $crust;
|
46
home/.config/eww/css/modules/_battery.scss
Normal file
46
home/.config/eww/css/modules/_battery.scss
Normal file
|
@ -0,0 +1,46 @@
|
|||
@keyframes blink {
|
||||
0%{
|
||||
opacity: 0;
|
||||
}
|
||||
50%{
|
||||
opacity: 0.7;
|
||||
}
|
||||
100%{
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
|
||||
// .unplugged.low {
|
||||
// color: #0000ff;
|
||||
// }
|
||||
|
||||
.battery {
|
||||
.critical {
|
||||
.unplugged {
|
||||
color: #f00;
|
||||
.extra { animation: blink 1.2s linear infinite; }
|
||||
}
|
||||
|
||||
.plugged {
|
||||
.icon { color: $orange }
|
||||
.extra { color: $green; }
|
||||
}
|
||||
}
|
||||
|
||||
.normal {
|
||||
.unplugged {
|
||||
.icon { color: $orange }
|
||||
}
|
||||
.plugged {
|
||||
.icon { color: $green; }
|
||||
}
|
||||
}
|
||||
|
||||
.full {
|
||||
.icon { color: $green; }
|
||||
.extra { color: $lime; }
|
||||
}
|
||||
|
||||
.extra { margin-right: 5px; }
|
||||
.icon { margin-right: 5px; }
|
||||
}
|
3
home/.config/eww/css/modules/_bitcoin.scss
Normal file
3
home/.config/eww/css/modules/_bitcoin.scss
Normal file
|
@ -0,0 +1,3 @@
|
|||
.bitcoin {
|
||||
.icon { margin-right: 6px; color: $gold; }
|
||||
}
|
4
home/.config/eww/css/modules/_clock.scss
Normal file
4
home/.config/eww/css/modules/_clock.scss
Normal file
|
@ -0,0 +1,4 @@
|
|||
.clock {
|
||||
// color: $sapphire;
|
||||
.icon { margin-right: 6px; color: $sapphire; }
|
||||
}
|
3
home/.config/eww/css/modules/_cpu.scss
Normal file
3
home/.config/eww/css/modules/_cpu.scss
Normal file
|
@ -0,0 +1,3 @@
|
|||
.cpu {
|
||||
.icon { color: $lime; }
|
||||
}
|
3
home/.config/eww/css/modules/_kernel.scss
Normal file
3
home/.config/eww/css/modules/_kernel.scss
Normal file
|
@ -0,0 +1,3 @@
|
|||
.kernel {
|
||||
.icon { color: $lavender; }
|
||||
}
|
3
home/.config/eww/css/modules/_memory.scss
Normal file
3
home/.config/eww/css/modules/_memory.scss
Normal file
|
@ -0,0 +1,3 @@
|
|||
.memory {
|
||||
.icon { color: $maroon; }
|
||||
}
|
3
home/.config/eww/css/modules/_uptime.scss
Normal file
3
home/.config/eww/css/modules/_uptime.scss
Normal file
|
@ -0,0 +1,3 @@
|
|||
.uptime {
|
||||
.icon { color: $green; }
|
||||
}
|
9
home/.config/eww/css/modules/_volume.scss
Normal file
9
home/.config/eww/css/modules/_volume.scss
Normal file
|
@ -0,0 +1,9 @@
|
|||
.volume {
|
||||
.icon { color: $peach; }
|
||||
.speaker {
|
||||
.icon {
|
||||
margin-left: 8px;
|
||||
margin-right: 5px;
|
||||
}
|
||||
}
|
||||
}
|
26
home/.config/eww/css/modules/_workspaces.scss
Normal file
26
home/.config/eww/css/modules/_workspaces.scss
Normal file
|
@ -0,0 +1,26 @@
|
|||
.workspaces {
|
||||
background-color: $bg1-a;
|
||||
border-radius: 25px;
|
||||
|
||||
.value {
|
||||
margin-left: 10px;
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
.focused {
|
||||
// text-decoration: underline;
|
||||
// text-decoration-color: red;
|
||||
// text-decoration-style: double;
|
||||
font-weight: 900;
|
||||
// color: $sapphire;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.active {
|
||||
color: #bbb;
|
||||
}
|
||||
|
||||
.inactive {
|
||||
color: #555;
|
||||
}
|
||||
}
|
32
home/.config/eww/css/windows/_calendar.scss
Normal file
32
home/.config/eww/css/windows/_calendar.scss
Normal file
|
@ -0,0 +1,32 @@
|
|||
.calendar-win {
|
||||
@include window;
|
||||
background-color: $bg;
|
||||
border: 1px solid $border;
|
||||
color: $fg;
|
||||
padding: .2em;
|
||||
}
|
||||
|
||||
calendar {
|
||||
padding: 5px;
|
||||
|
||||
:selected {
|
||||
color: $mauve;
|
||||
}
|
||||
|
||||
.header {
|
||||
color: $subtext1;
|
||||
}
|
||||
|
||||
.highlight {
|
||||
color: $maroon;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.button {
|
||||
color: $sapphire;
|
||||
}
|
||||
|
||||
:indeterminate {
|
||||
color: $overlay0;
|
||||
}
|
||||
}
|
71
home/.config/eww/eww.scss
Normal file
71
home/.config/eww/eww.scss
Normal file
|
@ -0,0 +1,71 @@
|
|||
@import 'css/colors';
|
||||
|
||||
@mixin rounding {
|
||||
border-radius: 16px;
|
||||
}
|
||||
|
||||
@mixin window {
|
||||
border: 1px solid $border;
|
||||
box-shadow: 0 2px 3px $shadow;
|
||||
margin: 5px 5px 10px;
|
||||
@include rounding;
|
||||
}
|
||||
|
||||
* {
|
||||
all: unset;
|
||||
transition: 200ms ease;
|
||||
}
|
||||
|
||||
@import "css/windows/calendar";
|
||||
@import "css/modules/clock";
|
||||
@import "css/modules/volume";
|
||||
@import "css/modules/bitcoin";
|
||||
@import "css/modules/cpu";
|
||||
@import "css/modules/memory";
|
||||
@import "css/modules/uptime";
|
||||
@import "css/modules/kernel";
|
||||
@import "css/modules/battery";
|
||||
@import "css/modules/workspaces";
|
||||
|
||||
.bar {
|
||||
background-color: $bg-a;
|
||||
color: $fg;
|
||||
|
||||
font-family: "JetBrains Mono", "Font Awesome 6 Free";
|
||||
// margin-right: 10px;
|
||||
|
||||
label {
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
// TODO: Use ercentages (for some reason it fails now)
|
||||
min-width: 1920px;
|
||||
padding-right: 20px;
|
||||
padding-left: 20px;
|
||||
}
|
||||
|
||||
tooltip {
|
||||
background: $bg;
|
||||
border: 1px solid $border;
|
||||
border-radius: 8px;
|
||||
|
||||
label {
|
||||
font-size: 1rem;
|
||||
}
|
||||
}
|
||||
|
||||
.module { margin: 0 5px; }
|
||||
|
||||
.separ {
|
||||
color: $surface0;
|
||||
font-size: 1.5rem;
|
||||
padding-bottom: 2px;
|
||||
}
|
||||
|
||||
scale trough {
|
||||
background-color: $bg1-a;
|
||||
border-radius: 24px;
|
||||
margin: 0 1rem;
|
||||
min-height: 10px;
|
||||
min-width: 70px;
|
||||
}
|
73
home/.config/eww/eww.yuck
Normal file
73
home/.config/eww/eww.yuck
Normal file
|
@ -0,0 +1,73 @@
|
|||
(defvar terminal "alacritty -e")
|
||||
|
||||
(include "./modules/clock.yuck")
|
||||
(include "./modules/volume.yuck")
|
||||
(include "./modules/bitcoin.yuck")
|
||||
(include "./modules/cpu.yuck")
|
||||
(include "./modules/memory.yuck")
|
||||
(include "./modules/uptime.yuck")
|
||||
; (include "./modules/kernel.yuck")
|
||||
(include "./modules/battery.yuck")
|
||||
(include "./modules/window_name.yuck")
|
||||
(include "./modules/workspaces.yuck")
|
||||
|
||||
(include "./windows/calendar.yuck")
|
||||
|
||||
(defwidget sep []
|
||||
(label :class "separ module" :text "|"))
|
||||
|
||||
(defwidget left []
|
||||
(box
|
||||
:space-evenly false
|
||||
:halign "start"
|
||||
(window_name_module)
|
||||
))
|
||||
|
||||
(defwidget right []
|
||||
(box
|
||||
:space-evenly false
|
||||
:halign "end"
|
||||
; (kernel_module)
|
||||
; (sep)
|
||||
(volume_module)
|
||||
(sep)
|
||||
(battery_module)
|
||||
(sep)
|
||||
(bitcoin_module)
|
||||
(sep)
|
||||
(cpu_module)
|
||||
(sep)
|
||||
(memory_module)
|
||||
(sep)
|
||||
(uptime_module)
|
||||
(sep)
|
||||
(clock_module)
|
||||
(sep)
|
||||
(system-tray)
|
||||
))
|
||||
|
||||
(defwidget center []
|
||||
(box
|
||||
:space-evenly false
|
||||
:halign "center"
|
||||
(workspaces_module)
|
||||
))
|
||||
|
||||
(defwidget bar []
|
||||
(centerbox
|
||||
:class "bar"
|
||||
:orientation "horizontal"
|
||||
(left)
|
||||
(center)
|
||||
(right)))
|
||||
|
||||
(defwindow bar
|
||||
:monitor 0
|
||||
:geometry (geometry :x "0%"
|
||||
:y "0%"
|
||||
:width: "100%"
|
||||
:height "32px"
|
||||
:anchor "top center")
|
||||
:stacking "fg"
|
||||
:exclusive true
|
||||
(bar))
|
29
home/.config/eww/modules/battery.yuck
Normal file
29
home/.config/eww/modules/battery.yuck
Normal file
|
@ -0,0 +1,29 @@
|
|||
(defpoll battery
|
||||
:interval "2s"
|
||||
:initial '{"percent":"0","plugged":"false","status":"N/A","capacity_icon":"","extra_icon":"","manufacturer":"N/A","model_name":"N/A","technology":"N/A","energy_now":"0","enerfy_full":"0","enerfy_full_design":"0","cycle_count":"0","critical":"false","full":"false"}'
|
||||
`scripts/battery`)
|
||||
|
||||
(defwidget battery_module []
|
||||
(eventbox
|
||||
:class "module battery"
|
||||
|
||||
(box
|
||||
:class {battery.critical ? "critical" : battery.full ? "full" : "normal"}
|
||||
(box
|
||||
:space-evenly false
|
||||
:class {battery.plugged ? "plugged" : "unplugged" }
|
||||
|
||||
(box
|
||||
:class "icon"
|
||||
:space-evenly false
|
||||
|
||||
(label
|
||||
:class "extra"
|
||||
:text {battery.extra_icon})
|
||||
(label
|
||||
:text {battery.capacity_icon}))
|
||||
(label
|
||||
:class "value"
|
||||
:text "${battery.percent}%"
|
||||
)
|
||||
))))
|
19
home/.config/eww/modules/bitcoin.yuck
Normal file
19
home/.config/eww/modules/bitcoin.yuck
Normal file
|
@ -0,0 +1,19 @@
|
|||
(defpoll bitcoin
|
||||
:interval "5m"
|
||||
:initial "$N/A"
|
||||
`~/.local/bin/scripts/cli/bitcoin`)
|
||||
|
||||
(defwidget bitcoin_module []
|
||||
(eventbox
|
||||
:onclick "~/.local/bin/scripts/cli/bitcoin | xargs -I_ ${EWW_CMD} update bitcoin=_"
|
||||
:class "module bitcoin"
|
||||
|
||||
(box
|
||||
:space-evenly false
|
||||
|
||||
(label
|
||||
:class "icon"
|
||||
:text "ﴑ")
|
||||
(label :text {bitcoin}))
|
||||
)
|
||||
)
|
22
home/.config/eww/modules/clock.yuck
Normal file
22
home/.config/eww/modules/clock.yuck
Normal file
|
@ -0,0 +1,22 @@
|
|||
(defpoll time
|
||||
:interval "5s"
|
||||
:initial '{"date": "01 Jan", "hour": "00", "minute": "00", "day": "Monday"}'
|
||||
`date +'{"date": "%d %b", "hour": "%H", "minute": "%M", "day": "%A"}'`)
|
||||
|
||||
(defwidget clock_module []
|
||||
|
||||
(eventbox
|
||||
:onclick "${EWW_CMD} open --toggle calendar"
|
||||
:tooltip {time.day}
|
||||
:class "module clock"
|
||||
|
||||
(box
|
||||
:space-evenly false
|
||||
|
||||
(label
|
||||
:class "icon"
|
||||
:text "")
|
||||
(label
|
||||
:class "value"
|
||||
:text "${time.date} ${time.hour}:${time.minute}"))
|
||||
))
|
15
home/.config/eww/modules/cpu.yuck
Normal file
15
home/.config/eww/modules/cpu.yuck
Normal file
|
@ -0,0 +1,15 @@
|
|||
(defwidget cpu_module []
|
||||
(eventbox
|
||||
:class "module cpu"
|
||||
|
||||
(box
|
||||
:space-evenly false
|
||||
|
||||
(label
|
||||
:class "icon"
|
||||
:text " ")
|
||||
(label
|
||||
:class "value"
|
||||
:text "${round(EWW_CPU.avg,2)}%"
|
||||
)
|
||||
)))
|
23
home/.config/eww/modules/kernel.yuck
Normal file
23
home/.config/eww/modules/kernel.yuck
Normal file
|
@ -0,0 +1,23 @@
|
|||
; TODO: Figure out how to store this one-time
|
||||
|
||||
(defpoll kernel
|
||||
:interval "10000h"
|
||||
:initial 'N/A'
|
||||
; `uname -r | sed -r 's/(.+)-arch(.+)/\\1/'`
|
||||
`uname -r`)
|
||||
|
||||
(defwidget kernel_module []
|
||||
(eventbox
|
||||
:class "module kernel"
|
||||
|
||||
(box
|
||||
:space-evenly false
|
||||
|
||||
(label
|
||||
:class "icon"
|
||||
:text " ")
|
||||
(label
|
||||
:class "value"
|
||||
:text {kernel}
|
||||
)
|
||||
)))
|
15
home/.config/eww/modules/memory.yuck
Normal file
15
home/.config/eww/modules/memory.yuck
Normal file
|
@ -0,0 +1,15 @@
|
|||
(defwidget memory_module []
|
||||
(eventbox
|
||||
:class "module memory"
|
||||
|
||||
(box
|
||||
:space-evenly false
|
||||
|
||||
(label
|
||||
:class "icon"
|
||||
:text " ")
|
||||
(label
|
||||
:class "value"
|
||||
:text "${round(EWW_RAM.used_mem / 1000000,1)}G: ${round(EWW_RAM.used_mem_perc,0)}%"
|
||||
)
|
||||
)))
|
3
home/.config/eww/modules/nightlight.yuck
Normal file
3
home/.config/eww/modules/nightlight.yuck
Normal file
|
@ -0,0 +1,3 @@
|
|||
(deflisten nightlight
|
||||
:initial `{"running": false,"temperature": 0}`
|
||||
`scripts/nightlight --state`)
|
29
home/.config/eww/modules/uptime.yuck
Normal file
29
home/.config/eww/modules/uptime.yuck
Normal file
|
@ -0,0 +1,29 @@
|
|||
(defpoll uptime
|
||||
:interval "1m"
|
||||
:initial 'N/A'
|
||||
`uptime -p | sed \\
|
||||
-e 's/^up //' \\
|
||||
-e 's/ years\\?,\\?/y/' \\
|
||||
-e 's/ months\\?,\\?/m/' \\
|
||||
-e 's/ weeks\\?,\\?/w/' \\
|
||||
-e 's/ days\\?,\\?/d/' \\
|
||||
-e 's/ hours\\?,\\?/h/' \\
|
||||
-e 's/ minutes\\?,\\?/m/' \\
|
||||
-e 's/ seconds\\?,\\?/s/' \\
|
||||
| cut -d' ' -f-2`)
|
||||
|
||||
(defwidget uptime_module []
|
||||
(eventbox
|
||||
:class "module uptime"
|
||||
|
||||
(box
|
||||
:space-evenly false
|
||||
|
||||
(label
|
||||
:class "icon"
|
||||
:text " ")
|
||||
(label
|
||||
:class "value"
|
||||
:text {uptime}
|
||||
)
|
||||
)))
|
44
home/.config/eww/modules/volume.yuck
Normal file
44
home/.config/eww/modules/volume.yuck
Normal file
|
@ -0,0 +1,44 @@
|
|||
(defvar mic_rev false)
|
||||
|
||||
(deflisten volume
|
||||
:initial '{ "speaker_vol": "100", "speaker_mute": false, "speaker_icon": "", "microphone_mute": false, "microphone_vol": "100", "microphone_icon": "" }'
|
||||
`scripts/volume loop`)
|
||||
|
||||
(defwidget volume_module []
|
||||
(box
|
||||
:class "module volume"
|
||||
:space-evenly false
|
||||
|
||||
(eventbox
|
||||
:onscroll "scripts/volume setvol SOURCE 0.5 {}"
|
||||
:onclick "scripts/volume togglemute SOURCE"
|
||||
:onrightclick "${terminal} pulsemixer &"
|
||||
:onhover "${EWW_CMD} update mic_rev=true"
|
||||
:onhoverlost "${EWW_CMD} update mic_rev=false"
|
||||
:class "microphone"
|
||||
(box
|
||||
(label
|
||||
:class "icon"
|
||||
:text {volume.microphone_icon})
|
||||
(label
|
||||
:visible {mic_rev && !volume.microphone_mute}
|
||||
:class "value"
|
||||
:text "${volume.microphone_vol}%")
|
||||
))
|
||||
|
||||
(eventbox
|
||||
:onscroll "scripts/volume setvol SINK 0.5 {}"
|
||||
:onclick "scripts/volume togglemute SINK"
|
||||
:onrightclick "${terminal} pulsemixer &"
|
||||
:class "speaker"
|
||||
(box
|
||||
(label
|
||||
:class "icon"
|
||||
:text {volume.speaker_icon})
|
||||
(label
|
||||
:visible {!volume.speaker_mute}
|
||||
:class "value"
|
||||
:text "${volume.speaker_vol}%")
|
||||
))
|
||||
|
||||
))
|
15
home/.config/eww/modules/window_name.yuck
Normal file
15
home/.config/eww/modules/window_name.yuck
Normal file
|
@ -0,0 +1,15 @@
|
|||
(deflisten window_name
|
||||
:initial `{"class":"","name":"","formatted_name":""}`
|
||||
`scripts/window_name`)
|
||||
|
||||
; Consider making the window name clickable, opening up a full window that's showing
|
||||
; the selected window details (class, unformatted name, and perhaps even more, like
|
||||
; xwayland status, ...)
|
||||
(defwidget window_name_module []
|
||||
(box
|
||||
:class "module window_name"
|
||||
|
||||
(label
|
||||
:class "value"
|
||||
:text "${window_name.formatted_name}")
|
||||
))
|
26
home/.config/eww/modules/workspaces.yuck
Normal file
26
home/.config/eww/modules/workspaces.yuck
Normal file
|
@ -0,0 +1,26 @@
|
|||
(deflisten workspaces
|
||||
:initial `[{"id": 1,"name": "N/A","monitor": "N/A","windows": 1,"hasfullscreen": false,"lastwindow": "N/A","lastwindowtitle": "N/A","format_name": "N/A","active": true}]`
|
||||
`scripts/workspaces --loop`)
|
||||
|
||||
|
||||
; (defwidget sep []
|
||||
; (label :class "separ module" :text "|"))
|
||||
|
||||
|
||||
; Consider making the window name clickable, opening up a full window that's showing
|
||||
; the selected window details (class, unformatted name, and perhaps even more, like
|
||||
; xwayland status, ...)
|
||||
(defwidget workspaces_module []
|
||||
(box
|
||||
:class "module workspaces"
|
||||
|
||||
(for workspace in workspaces
|
||||
(eventbox
|
||||
:class {workspace.active ? 'focused' : workspace.windows > 0 ? 'active' : 'inactive'}
|
||||
:onclick `scripts/workspaces --switch ${workspace.id}`
|
||||
|
||||
(label
|
||||
:class "value"
|
||||
:text {workspace.format_name}))
|
||||
)
|
||||
))
|
11
home/.config/eww/scripts/.flake8
Normal file
11
home/.config/eww/scripts/.flake8
Normal file
|
@ -0,0 +1,11 @@
|
|||
[flake8]
|
||||
max-line-length=119
|
||||
extend-ignore=E203
|
||||
extend-select=B902,B904
|
||||
exclude=.venv,.git,.cache
|
||||
ignore=
|
||||
ANN002, # *args annotation
|
||||
ANN003, # **kwargs annotation
|
||||
ANN101, # self param annotation
|
||||
ANN102, # cls param annotation
|
||||
ANN204, # return type annotation for special methods
|
79
home/.config/eww/scripts/battery
Executable file
79
home/.config/eww/scripts/battery
Executable file
|
@ -0,0 +1,79 @@
|
|||
#!/bin/bash
|
||||
|
||||
# shellcheck source=include
|
||||
source "./scripts/include"
|
||||
|
||||
# $BATTERY and $ADAPTER env vars can be set manually, being the names of the
|
||||
# devices (in /sys/class/power_supply/) i.e. BATTERY=BAT0 ADAPTER=ADP0
|
||||
# or, if left unset, they will be automatically picked.
|
||||
|
||||
CAPACITY_ICONS=("" "" "" "" "")
|
||||
CHARGING_ICON=""
|
||||
DISCHARGING_ICON=""
|
||||
FULL_ICON="" # Plugged in, but no longer charging (fully charged)
|
||||
CRITICAL_ICON=""
|
||||
CRITICAL_PERCENTAGE=15
|
||||
|
||||
|
||||
if [ -z "$BATTERY" ]; then
|
||||
# shellcheck disable=SC2010
|
||||
BATTERY="$(ls -t /sys/class/power_supply | grep "BAT" | head -n 1)"
|
||||
fi
|
||||
|
||||
if [ -z "$ADAPTER" ]; then
|
||||
# shellcheck disable=SC2010
|
||||
ADAPTER="$(ls -t /sys/class/power_supply | grep "ADP" | head -n 1)"
|
||||
fi
|
||||
|
||||
get_bat_info() {
|
||||
cat /sys/class/power_supply/"$BATTERY"/"$1"
|
||||
}
|
||||
|
||||
get_adp_info() {
|
||||
cat /sys/class/power_supply/"$ADAPTER"/"$1"
|
||||
}
|
||||
|
||||
manufacturer="$(get_bat_info manufacturer)"
|
||||
model_name="$(get_bat_info model_name)"
|
||||
technology="$(get_bat_info technology)"
|
||||
energy_now="$(get_bat_info energy_now)"
|
||||
energy_full="$(get_bat_info energy_full)"
|
||||
energy_full_design="$(get_bat_info energy_full_design)"
|
||||
cycle_count="$(get_bat_info cycle_count)"
|
||||
|
||||
capacity="$(get_bat_info capacity)"
|
||||
status="$(get_bat_info status)"
|
||||
[ "$(get_adp_info online)" -eq 1 ] && adp_connected="true" || adp_connected="false"
|
||||
|
||||
full="false"
|
||||
capacity_icon="$(pick_icon "$capacity" 0 100 "${CAPACITY_ICONS[@]}")"
|
||||
|
||||
if [ "$status" = "Not charging" ] || [ "$status" = "Full" ] && [ "$adp_connected" = "true" ]; then
|
||||
extra_icon="$FULL_ICON"
|
||||
full="true"
|
||||
elif [ "$status" = "Discharging" ] && [ "$capacity" -le "$CRITICAL_PERCENTAGE" ]; then
|
||||
extra_icon="$CRITICAL_ICON"
|
||||
elif [ "$status" = "Discharging" ]; then
|
||||
extra_icon="$DISCHARGING_ICON"
|
||||
elif [ "$status" = "Charging" ]; then
|
||||
extra_icon="$CHARGING_ICON"
|
||||
fi
|
||||
|
||||
[ "$capacity" -le "$CRITICAL_PERCENTAGE" ] && critical="true" || critical="false"
|
||||
|
||||
jq -n -c --monochrome-output \
|
||||
--arg percent "$capacity" \
|
||||
--arg plugged "$adp_connected" \
|
||||
--arg status "$status" \
|
||||
--arg capacity_icon "$capacity_icon" \
|
||||
--arg extra_icon "$extra_icon" \
|
||||
--arg manufacturer "$manufacturer" \
|
||||
--arg model_name "$model_name" \
|
||||
--arg technology "$technology" \
|
||||
--arg energy_now "$energy_now" \
|
||||
--arg energy_full "$energy_full" \
|
||||
--arg energy_full_design "$energy_full_design" \
|
||||
--arg cycle_count "$cycle_count" \
|
||||
--arg critical "$critical" \
|
||||
--arg full "$full" \
|
||||
'$ARGS.named'
|
49
home/.config/eww/scripts/include
Executable file
49
home/.config/eww/scripts/include
Executable file
|
@ -0,0 +1,49 @@
|
|||
#!/bin/bash
|
||||
|
||||
# $1: Current number
|
||||
# $2: Range minimum
|
||||
# $3: Range maximum
|
||||
# $4-: Icons as individual arguments
|
||||
pick_icon() {
|
||||
cur="$1"
|
||||
min="$2"
|
||||
max="$3"
|
||||
shift 3
|
||||
icons=( "$@" )
|
||||
|
||||
index="$(echo "($cur-$min)/(($max-$min)/${#icons[@]})" | bc)"
|
||||
|
||||
# Print the picked icon, handling overflows/underflows, i.e. if our index is <0 or >len(icons)
|
||||
if [ "$index" -ge "${#icons[@]}" ]; then
|
||||
index=-1
|
||||
elif [ "$index" -lt 0 ]; then
|
||||
index=0
|
||||
fi
|
||||
|
||||
echo "${icons[index]}"
|
||||
}
|
||||
|
||||
# Will block and listen to the hyprland socket messages and output them
|
||||
# Generally used like: hyprland_ipc | while read line; do handle $line; done
|
||||
# Read <https://wiki.hyprland.org/IPC/> for output format and available events
|
||||
# Note: requires openbsd version of netcat.
|
||||
# $1 - Optional event to listen for (no event filtering will be done if not provided)
|
||||
hyprland_ipc() {
|
||||
if [ -z "$HYPRLAND_INSTANCE_SIGNATURE" ]; then
|
||||
>&2 echo "Hyprland is not running, IPC not available"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
SOCKET_PATH="/tmp/hypr/$HYPRLAND_INSTANCE_SIGNATURE/.socket2.sock"
|
||||
|
||||
if [ -z "$1" ]; then
|
||||
nc -U "$SOCKET_PATH" | while read -r test; do
|
||||
echo "$test"
|
||||
done
|
||||
else
|
||||
nc -U "$SOCKET_PATH" | while read -r test; do
|
||||
# shellcheck disable=SC2016
|
||||
echo "$test" | grep --line-buffered -E "^$1>>" | stdbuf -oL awk -F '>>' '{print $2}'
|
||||
done
|
||||
fi
|
||||
}
|
13
home/.config/eww/scripts/nightlight
Normal file
13
home/.config/eww/scripts/nightlight
Normal file
|
@ -0,0 +1,13 @@
|
|||
#!/bin/bash
|
||||
|
||||
# shellcheck source=include
|
||||
source "./scripts/include"
|
||||
|
||||
# Consider usning a file as a flag for whether nightlight is on or off
|
||||
# as we might be in transition state and just killing the program might
|
||||
# not be enough.
|
||||
|
||||
|
||||
if [ "$1" = "toggle" ]; then
|
||||
gammastep -x
|
||||
fi
|
12
home/.config/eww/scripts/pyproject.toml
Normal file
12
home/.config/eww/scripts/pyproject.toml
Normal file
|
@ -0,0 +1,12 @@
|
|||
[tool.black]
|
||||
line-length = 119
|
||||
extend-exclude = "^/.cache"
|
||||
|
||||
[tool.isort]
|
||||
profile = "black"
|
||||
line_length = 119
|
||||
atomic = true
|
||||
order_by_type = false
|
||||
case_sensitive = true
|
||||
combine_as_imports = true
|
||||
skip = [".venv", ".git", ".cache"]
|
35
home/.config/eww/scripts/storage
Executable file
35
home/.config/eww/scripts/storage
Executable file
|
@ -0,0 +1,35 @@
|
|||
#!/bin/bash
|
||||
|
||||
MOUNTPOINTS=("/" "/mnt/ext")
|
||||
|
||||
data="$(df -H)"
|
||||
|
||||
as_json() {
|
||||
mountpoint="$1"
|
||||
res="$2"
|
||||
arr_res=($res)
|
||||
|
||||
jq -n -c --monochrome-output \
|
||||
--arg mountpoint "$mountpoint" \
|
||||
--arg size "${arr_res[0]}" \
|
||||
--arg used "${arr_res[1]}" \
|
||||
--arg avail "${arr_res[2]}" \
|
||||
--arg percent "${arr_res[3]}" \
|
||||
'$ARGS.named'
|
||||
}
|
||||
|
||||
output_json="[]"
|
||||
for mountpoint in "${MOUNTPOINTS[@]}"; do
|
||||
res="$(echo "$data" | awk -v m="$mountpoint" '$6 == m {print $2 " " $3 " " $4 " " $5}')"
|
||||
out="$(as_json "$mountpoint" "$res")"
|
||||
|
||||
# echo "$output_json $out" | jq -c -s
|
||||
|
||||
jq --argjson arr1 "$output_json" --argjson arr2 "[$out]" -n \
|
||||
'$arr1 + $arr2'
|
||||
|
||||
# mount_data+=("$mountpoint" $res)
|
||||
# echo "${mount_data[@]}"
|
||||
done
|
||||
|
||||
# echo "${mount_data[@]}"
|
6
home/.config/eww/scripts/temp
Executable file
6
home/.config/eww/scripts/temp
Executable file
|
@ -0,0 +1,6 @@
|
|||
#!/bin/bash
|
||||
|
||||
# shellcheck source=include
|
||||
source "./scripts/include"
|
||||
|
||||
hyprland_ipc "workspace|createworkspace|destroyworkspace"
|
114
home/.config/eww/scripts/volume
Executable file
114
home/.config/eww/scripts/volume
Executable file
|
@ -0,0 +1,114 @@
|
|||
#!/bin/bash
|
||||
|
||||
# Define some icons
|
||||
SPEAKER_ICONS=("" "" "")
|
||||
SPEAKER_MUTED_ICON=""
|
||||
MIC_ICON=""
|
||||
MIC_MUTED_ICON=""
|
||||
|
||||
# Define some helper functions for getting/setting audio data using wireplumber (wpctl)
|
||||
|
||||
# $1 can either be "SINK" (speaker) or "SOURCE" (microphone)
|
||||
get_vol() {
|
||||
wpctl get-volume "@DEFAULT_AUDIO_${1}@" | awk '{print int($2*100)}'
|
||||
}
|
||||
|
||||
# $1 can either be "SINK" (speaker) or "SOURCE" (microphone)
|
||||
# #2 is the voulme (as percentage) to set the volume to
|
||||
# $3 is optional, if set, it can be '+' or '-', which then adds/decreases volume, instead of setting
|
||||
set_vol() {
|
||||
wpctl set-volume "@DEFAULT_AUDIO_${1}@" "$(awk -v n="$2" 'BEGIN{print (n / 100)}')$3"
|
||||
}
|
||||
|
||||
# $1 can either be "SINK" (speaker) or "SOURCE" (microphone)
|
||||
check_mute() {
|
||||
wpctl get-volume "@DEFAULT_AUDIO_${1}@" | grep -i muted >/dev/null
|
||||
echo $?
|
||||
}
|
||||
|
||||
# $1 can either be "SINK" (speaker) or "SOURCE" (microphone)
|
||||
toggle_mute() {
|
||||
wpctl set-mute "@DEFAULT_AUDIO_${1}@" toggle
|
||||
}
|
||||
|
||||
get_report() {
|
||||
spkr_vol="$(get_vol "SINK")"
|
||||
mic_vol="$(get_vol "SOURCE")"
|
||||
|
||||
if [ "$(check_mute "SINK")" == "0" ]; then
|
||||
spkr_mute="true"
|
||||
spkr_icon="$SPEAKER_MUTED_ICON"
|
||||
else
|
||||
spkr_mute="false"
|
||||
index="$(awk -v n="$spkr_vol" -v m="${#SPEAKER_ICONS[@]}" 'BEGIN{print int(n/(100/m))}')"
|
||||
|
||||
# We might end up with an higher than the length of icons, if the volume is over 100%
|
||||
# in this case, set the index to last icon
|
||||
if [ "$index" -ge "${#SPEAKER_ICONS[@]}" ]; then
|
||||
spkr_icon="${SPEAKER_ICONS[-1]}"
|
||||
else
|
||||
spkr_icon="${SPEAKER_ICONS[$index]}"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ "$(check_mute "SOURCE")" = "0" ]; then
|
||||
mic_mute="true"
|
||||
mic_icon="$MIC_MUTED_ICON"
|
||||
else
|
||||
mic_mute="false"
|
||||
mic_icon="$MIC_ICON"
|
||||
fi
|
||||
|
||||
echo "{ \"speaker_vol\": \"$spkr_vol\", \"speaker_mute\": $spkr_mute, \"speaker_icon\": \"$spkr_icon\", \"microphone_mute\": $mic_mute, \"microphone_vol\": \"$mic_vol\", \"microphone_icon\": \"$mic_icon\" }"
|
||||
}
|
||||
|
||||
# Continually run and report every volume change (into stdout)
|
||||
loop() {
|
||||
pactl subscribe | grep --line-buffered "change" | while read -r _; do
|
||||
get_report
|
||||
done
|
||||
}
|
||||
|
||||
case "$1" in
|
||||
"loop")
|
||||
get_report
|
||||
loop
|
||||
;;
|
||||
|
||||
"once") get_report ;;
|
||||
|
||||
"togglemute")
|
||||
if [ "$2" != "SOURCE" ] && [ "$2" != "SINK" ]; then
|
||||
>&2 echo "Invalid usage, expected second argument to be 'SINK' or 'SOURCE', got '$2'"
|
||||
exit 1
|
||||
fi
|
||||
toggle_mute "$2"
|
||||
;;
|
||||
|
||||
"setvol")
|
||||
if [ "$2" != "SOURCE" ] && [ "$2" != "SINK" ]; then
|
||||
>&2 echo "Invalid usage, expected second argument to be 'SINK' or 'SOURCE', got '$2'"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ "$3" =~ ^[+-]?[0-9]*\.?[0-9]+$ ]]; then
|
||||
case "$4" in
|
||||
"") set_vol "$2" "$3" ;;
|
||||
up|+) set_vol "$2" "$3" "+" ;;
|
||||
down|-) set_vol "$2" "$3" "-" ;;
|
||||
*)
|
||||
>&2 echo "Invalid usage, expected fourth argument to be up/down or +/-, got '$4'"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
else
|
||||
>&2 echo "Invalid usage, exepcted third argument to be a number, got '$3'"
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
|
||||
*)
|
||||
>&2 echo "Invalid usage, argument '$1' not recognized."
|
||||
exit 1
|
||||
;;
|
||||
esac
|
6
home/.config/eww/scripts/window_name
Executable file
6
home/.config/eww/scripts/window_name
Executable file
|
@ -0,0 +1,6 @@
|
|||
#!/bin/bash
|
||||
|
||||
# shellcheck source=include
|
||||
source "./scripts/include"
|
||||
|
||||
hyprland_ipc "activewindow" | ./scripts/window_name.py
|
90
home/.config/eww/scripts/window_name.py
Executable file
90
home/.config/eww/scripts/window_name.py
Executable file
|
@ -0,0 +1,90 @@
|
|||
#!/usr/bin/env python3
|
||||
"""This is a utility script for regex remaps on window names.
|
||||
|
||||
This is done in python, because of the complex regex logic, which would be pretty hard to
|
||||
recreate in bash. This python script is expected to be called from the bash script controlling
|
||||
the window names. Window name and class are obtained from piped stdin, to prevent having to
|
||||
needlessly keep restarting this program, which takes a while due to the interpreter starting
|
||||
overhead.
|
||||
"""
|
||||
import re
|
||||
import json
|
||||
import sys
|
||||
from typing import Iterator, Optional
|
||||
|
||||
|
||||
class RemapRule:
|
||||
__slots__ = ("name_pattern", "output_pattern", "class_pattern")
|
||||
|
||||
def __init__(self, name_pattern: str, output_pattern: str, class_pattern: Optional[str] = None):
|
||||
self.name_pattern = re.compile(name_pattern)
|
||||
self.output_pattern = output_pattern
|
||||
self.class_pattern = re.compile(class_pattern) if class_pattern else None
|
||||
|
||||
def apply(self, window_name: str, window_class: str) -> str:
|
||||
"""Returns new name after this remap rule was applied."""
|
||||
if self.class_pattern is not None:
|
||||
if not self.class_pattern.fullmatch(window_class):
|
||||
# Rule doesn't apply, class mismatch, return original name
|
||||
return window_name
|
||||
|
||||
res = self.name_pattern.fullmatch(window_name)
|
||||
if not res:
|
||||
# Rule doesn't apply, name mismatch, return original name
|
||||
return window_name
|
||||
|
||||
# NOTE: This is potentially unsafe, since output_pattern might be say {0.__class__}, etc.
|
||||
# meaning this allows arbitrary attribute access, however it doesn't allow running functions
|
||||
# here. That said, code could still end up being run if there's some descriptor defined,
|
||||
# and generally I wouldn't trust this in production. However, this code is for my personal
|
||||
# use here, and all of the output patterns are hard-coded in this file, so in this case, it's
|
||||
# fine. But if you see this code and you'd like to use it in your production code, maybe don't
|
||||
return self.output_pattern.format(*res.groups())
|
||||
|
||||
|
||||
# Rules will be applied in specified order
|
||||
REMAP_RULES: list[RemapRule] = [
|
||||
RemapRule(r"", "", ""),
|
||||
RemapRule(r"(.*) — Mozilla Firefox", " {}", "firefox"),
|
||||
RemapRule(r"Mozilla Firefox", " Mozilla Firefox", "firefox"),
|
||||
RemapRule(r"Alacritty", " Alacritty", "Alacritty"),
|
||||
RemapRule(r"zsh;#toggleterm#1 - \(term:\/\/(.+)\/\/(\d+):(.+)\) - N?VIM", " Terminal: {0}"),
|
||||
RemapRule(r"(.+) \+ \((.+)\) - N?VIM", " {0} ({1}) [MODIFIED]"),
|
||||
RemapRule(r"(.+) \((.+)\) - N?VIM", " {0} ({1})"),
|
||||
RemapRule(r"(?:\[\d+\] )?\*?WebCord - (.+)", " {}", "WebCord"),
|
||||
RemapRule(r"(.+) - mpv", " {}", "mpv"),
|
||||
RemapRule(r"Stremio - (.+)", " Stremio - {}", "com.stremio.stremio"),
|
||||
RemapRule(r"Spotify", " Spotify", "Spotify"),
|
||||
RemapRule(r"pulsemixer", " Pulsemixer"),
|
||||
RemapRule(r"(.*)", " {}", "Pcmanfm"),
|
||||
]
|
||||
|
||||
MAX_LENGTH = 65
|
||||
|
||||
|
||||
def iter_window() -> Iterator[tuple[str, str]]:
|
||||
"""Listen for the window parameters from stdin/pipe, yields (window_name, window_class)."""
|
||||
for line in sys.stdin:
|
||||
line = line.removesuffix("\n")
|
||||
els = line.split(",", maxsplit=1)
|
||||
if len(els) != 2:
|
||||
raise ValueError(f"Expected 2 arguments from stdin line (name, class), but got {len(els)}")
|
||||
yield els[1], els[0]
|
||||
|
||||
|
||||
def main() -> None:
|
||||
for window_name, window_class in iter_window():
|
||||
formatted_name = window_name
|
||||
for remap_rule in REMAP_RULES:
|
||||
formatted_name = remap_rule.apply(formatted_name, window_class)
|
||||
|
||||
if len(formatted_name) > MAX_LENGTH:
|
||||
formatted_name = formatted_name[:MAX_LENGTH - 3] + "..."
|
||||
|
||||
ret = json.dumps({"name": window_name, "class": window_class, "formatted_name": formatted_name})
|
||||
print(ret)
|
||||
sys.stdout.flush()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
12
home/.config/eww/scripts/workspaces
Executable file
12
home/.config/eww/scripts/workspaces
Executable file
|
@ -0,0 +1,12 @@
|
|||
#!/bin/bash
|
||||
|
||||
# shellcheck source=include
|
||||
source "./scripts/include"
|
||||
|
||||
if [ "$1" = "--switch" ]; then
|
||||
hyprctl dispatch workspace "$2" >/dev/null
|
||||
elif [ "$1" = "--loop" ]; then
|
||||
hyprland_ipc "workspace|createworkspace|destroyworkspace" | ./scripts/workspaces.py "$@"
|
||||
else
|
||||
./scripts/workspaces.py "$@"
|
||||
fi
|
171
home/.config/eww/scripts/workspaces.py
Executable file
171
home/.config/eww/scripts/workspaces.py
Executable file
|
@ -0,0 +1,171 @@
|
|||
#!/usr/bin/env python3
|
||||
import argparse
|
||||
import json
|
||||
import subprocess
|
||||
import sys
|
||||
from typing import TypedDict, TYPE_CHECKING
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from _typeshed import SupportsRichComparison
|
||||
|
||||
|
||||
class WorkspaceInfo(TypedDict):
|
||||
id: int
|
||||
name: str
|
||||
monitor: str
|
||||
windows: int
|
||||
hasfullscreen: bool
|
||||
lastwindow: str
|
||||
lastwindowtitle: str
|
||||
|
||||
|
||||
class ActiveWorkspaceInfo(TypedDict):
|
||||
id: int
|
||||
name: str
|
||||
|
||||
|
||||
class MonitorInfo(TypedDict):
|
||||
id: int
|
||||
name: str
|
||||
description: str
|
||||
width: int
|
||||
height: int
|
||||
refreshRate: float
|
||||
x: int
|
||||
y: int
|
||||
activeWorkspace: ActiveWorkspaceInfo
|
||||
reserved: list[int]
|
||||
scale: float
|
||||
transform: int
|
||||
focused: bool
|
||||
dpmsStatus: bool
|
||||
|
||||
|
||||
class OutputWorkspaceInfo(WorkspaceInfo):
|
||||
format_name: str
|
||||
active: bool
|
||||
|
||||
|
||||
# workspace id -> remapped name
|
||||
REMAPS = {
|
||||
1: "",
|
||||
2: "",
|
||||
3: "",
|
||||
4: "",
|
||||
5: "",
|
||||
6: "",
|
||||
7: "7",
|
||||
8: "8",
|
||||
9: "9",
|
||||
}
|
||||
|
||||
# Skip the special (scratchpad) workspace
|
||||
SKIP = {-99}
|
||||
|
||||
|
||||
def workspace_sort(obj: OutputWorkspaceInfo) -> "SupportsRichComparison":
|
||||
"""Returns a key to sort by, given the current element."""
|
||||
return obj["id"]
|
||||
|
||||
|
||||
def fill_blank_workspaces(open: list[OutputWorkspaceInfo]) -> list[OutputWorkspaceInfo]:
|
||||
"""Add in the rest of the workspaces which don't have any open windows on them.
|
||||
|
||||
This is needed because hyprland deletes workspaces with nothing in them.
|
||||
Note that this assumes all available workspaces were listed in REMAPS, and will
|
||||
only fill those. These blank workspaces will have most string values set to "N/A",
|
||||
and most int values set to 0.
|
||||
"""
|
||||
# Work on a copy, we don't want to alter the original list
|
||||
lst = open.copy()
|
||||
|
||||
for remap_id, format_name in REMAPS.items():
|
||||
# Skip for already present workspaces
|
||||
if any(ws_info["id"] == remap_id for ws_info in lst):
|
||||
continue
|
||||
|
||||
blank_ws: OutputWorkspaceInfo = {
|
||||
"id": remap_id,
|
||||
"name": str(remap_id),
|
||||
"monitor": "N/A",
|
||||
"windows": 0,
|
||||
"hasfullscreen": False,
|
||||
"lastwindow": "N/A",
|
||||
"lastwindowtitle": "N/A",
|
||||
"active": False,
|
||||
"format_name": format_name,
|
||||
}
|
||||
lst.append(blank_ws)
|
||||
|
||||
return lst
|
||||
|
||||
|
||||
def get_workspaces() -> list[OutputWorkspaceInfo]:
|
||||
"""Obtain workspaces from hyprctl, sort them and add format_name arg."""
|
||||
proc = subprocess.run(["hyprctl", "workspaces", "-j"], stdout=subprocess.PIPE)
|
||||
proc.check_returncode()
|
||||
workspaces: list[WorkspaceInfo] = json.loads(proc.stdout)
|
||||
|
||||
proc = subprocess.run(["hyprctl", "monitors", "-j"], stdout=subprocess.PIPE)
|
||||
proc.check_returncode()
|
||||
monitors: list[MonitorInfo] = json.loads(proc.stdout)
|
||||
|
||||
active_workspaces = {monitor["activeWorkspace"]["id"] for monitor in monitors}
|
||||
|
||||
out: list[OutputWorkspaceInfo] = []
|
||||
for workspace in workspaces:
|
||||
if workspace["id"] in SKIP:
|
||||
continue
|
||||
format_name = REMAPS.get(workspace["id"], workspace["name"])
|
||||
active = workspace["id"] in active_workspaces
|
||||
out.append({**workspace, "format_name": format_name, "active": active})
|
||||
|
||||
out = fill_blank_workspaces(out)
|
||||
out.sort(key=workspace_sort)
|
||||
return out
|
||||
|
||||
|
||||
def print_workspaces() -> None:
|
||||
wks = get_workspaces()
|
||||
ret = json.dumps(wks)
|
||||
print(ret)
|
||||
sys.stdout.flush()
|
||||
|
||||
|
||||
def main() -> None:
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument(
|
||||
"--oneshot",
|
||||
action="store_true",
|
||||
help="Don't listen to stdout for updates, only run once and quit",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--loop",
|
||||
action="store_true",
|
||||
help="Listen to stdout input, once something is received, re-print workspaces"
|
||||
)
|
||||
args = parser.parse_args()
|
||||
|
||||
if args.loop and args.oneshot:
|
||||
print("Can't use both --oneshot and --loop", file=sys.stdout)
|
||||
sys.exit(1)
|
||||
|
||||
if args.loop is None and args.oneshot is None:
|
||||
print("No option specified!", file=sys.stdout)
|
||||
sys.exit(1)
|
||||
|
||||
# Print workspaces here immediately, we don't want to have to wait for the first
|
||||
# update from stdin as we only receive those on actual workspace change.
|
||||
print_workspaces()
|
||||
|
||||
if args.oneshot:
|
||||
# We've already printed the workspaces once, we can exit now
|
||||
return
|
||||
|
||||
# Reprint workspaces on each stdin update (flush)
|
||||
for _ in sys.stdin:
|
||||
print_workspaces()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
14
home/.config/eww/windows/calendar.yuck
Normal file
14
home/.config/eww/windows/calendar.yuck
Normal file
|
@ -0,0 +1,14 @@
|
|||
(defwidget calendar-win []
|
||||
(box
|
||||
:class "calendar-win"
|
||||
(calendar)))
|
||||
|
||||
(defwindow calendar
|
||||
:monitor 0
|
||||
:geometry (geometry
|
||||
:x "0%"
|
||||
:y "0%"
|
||||
:anchor "top right"
|
||||
:width "0px"
|
||||
:height "0px")
|
||||
(calendar-win))
|
87
home/.config/git/config
Normal file
87
home/.config/git/config
Normal file
|
@ -0,0 +1,87 @@
|
|||
[user]
|
||||
name = ItsDrike
|
||||
email = itsdrike@protonmail.com
|
||||
signingkey = B014E761034AF742
|
||||
[alias]
|
||||
quickclone = "clone --single-branch --depth=1"
|
||||
bareclone = "!sh -c 'git clone --bare \"$0\" \"$1\"/.bare; echo \"gitdir: ./.bare\" > \"$1/.git\"'"
|
||||
bareinit = "!sh -c 'git init --bare \"$0\"/.bare; echo \"gitdir: ./.bare\" > \"$0/.git\"'"
|
||||
cleanup = "!default_branch=$(git remote show origin | awk '/HEAD branch/ {print $NF}'); git remote prune origin && git checkout -q $default_branch && git for-each-ref refs/heads/ '--format=%(refname:short)' | while read branch; do mergeBase=$(git merge-base $default_branch $branch) && [[ $(git cherry $default_branch $(git commit-tree $(git rev-parse $branch^{tree}) -p $mergeBase -m _)) == '-'* ]] && git branch -D $branch; done"
|
||||
|
||||
m = "merge"
|
||||
p = "push"
|
||||
pl = "pull"
|
||||
f = "fetch"
|
||||
|
||||
s = "status --short --branch"
|
||||
ss = "status"
|
||||
|
||||
ch = "checkout"
|
||||
chb = "checkout -b"
|
||||
|
||||
undo = "reset --soft HEAD~"
|
||||
redo = "reset HEAD@{1}"
|
||||
unstage = "restore --staged"
|
||||
|
||||
c = "commit"
|
||||
ca = "commit --ammend"
|
||||
ci = "commit --interactive"
|
||||
cm = "commit --message"
|
||||
cv = "commit --verbose"
|
||||
|
||||
a = "add"
|
||||
aa = "add --all"
|
||||
ap = "add --patch"
|
||||
au = "add --update"
|
||||
|
||||
d = "diff"
|
||||
dc = "diff --cached"
|
||||
ds = "diff --staged"
|
||||
dw = "diff --word-diff"
|
||||
dcm = "!sh -c 'git diff $0~ $0'"
|
||||
|
||||
b = "branch"
|
||||
ba = "branch --all"
|
||||
bd = "branch --delete"
|
||||
bD = "branch --delete --force"
|
||||
bm = "branch --move"
|
||||
bM = "branch --move --force"
|
||||
|
||||
r = "rebase"
|
||||
ri = "rebase -i"
|
||||
rc = "rebase --continue"
|
||||
|
||||
l = "log --oneline --decorate --all --graph"
|
||||
lp = "log --patch"
|
||||
lo = "log --pretty=oneline --abbrev-commit --graph"
|
||||
lg = "log --all --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --"
|
||||
|
||||
set-upstream = "!git branch --set-upstream-to=origin/`git symbolic-ref --short HEAD`"
|
||||
|
||||
stash-staged = "!sh -c 'git stash --keep-index; git stash push -m \"staged\" --keep-index; git stash pop stash@{1}'"
|
||||
|
||||
find-merge = "!sh -c 'commit=$0 && branch=${1:-HEAD} && (git rev-list $commit..$branch --ancestry-path | cat -n; git rev-list $commit..$branch --first-parent | cat -n) | sort -k2 -s | uniq -f1 -d | sort -n | tail -1 | cut -f2'"
|
||||
show-merge = "!sh -c 'merge=$(git find-merge $0 $1) && [ -n \"$merge\" ] && git show $merge'"
|
||||
|
||||
comitter-lines = "!git log --author=\"$1\" --pretty=tformat: --numstat | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf \"added lines: %s, removed lines: %s, total lines: %s\\n\", add, subs, loc }' #"
|
||||
total-lines = "!git ls-files | xargs cat | wc -l"
|
||||
[credential]
|
||||
helper = store --file ~/.config/git/git-credentials
|
||||
[core]
|
||||
excludefile = ~/.config/git/global_gitignore
|
||||
editor = lvim
|
||||
pager = delta
|
||||
[interactive]
|
||||
diffFilter = delta --color-only
|
||||
[delta]
|
||||
line-numbers = true
|
||||
[merge]
|
||||
conflictstyle = diff3
|
||||
[diff]
|
||||
tool = vimdiff
|
||||
[fetch]
|
||||
prune = true
|
||||
[commit]
|
||||
gpgsign = true
|
||||
[init]
|
||||
defaultBranch = main
|
25
home/.config/git/global_gitignore
Normal file
25
home/.config/git/global_gitignore
Normal file
|
@ -0,0 +1,25 @@
|
|||
# vim: filetype=conf
|
||||
# Byte-compiled / optimized / DLL Files
|
||||
__pycache__/
|
||||
*.py[cod]
|
||||
*$py.class
|
||||
|
||||
# Virtual Environments
|
||||
.venv/
|
||||
|
||||
# Editor project settings
|
||||
## VSCode
|
||||
.vscode/
|
||||
## PyCharm intellij
|
||||
.idea/
|
||||
## repl.it
|
||||
.replit
|
||||
## spyder
|
||||
.spyproject/
|
||||
.spyderproject/
|
||||
|
||||
# Custom attributes for folders on Mac OS
|
||||
.DS_Store
|
||||
|
||||
# Personal TODO files
|
||||
TODO
|
11
home/.config/gtk-2.0/gtkfilechooser.ini
Normal file
11
home/.config/gtk-2.0/gtkfilechooser.ini
Normal file
|
@ -0,0 +1,11 @@
|
|||
[Filechooser Settings]
|
||||
LocationMode=path-bar
|
||||
ShowHidden=false
|
||||
ShowSizeColumn=true
|
||||
GeometryX=510
|
||||
GeometryY=260
|
||||
GeometryWidth=900
|
||||
GeometryHeight=584
|
||||
SortColumn=name
|
||||
SortOrder=ascending
|
||||
StartupMode=recent
|
19
home/.config/gtk-2.0/gtkrc
Normal file
19
home/.config/gtk-2.0/gtkrc
Normal file
|
@ -0,0 +1,19 @@
|
|||
# DO NOT EDIT! This file will be overwritten by LXAppearance.
|
||||
# Any customization should be done in ~/.gtkrc-2.0.mine instead.
|
||||
|
||||
include "/home/itsdrike/.gtkrc-2.0.mine"
|
||||
gtk-theme-name="Adwaita-dark"
|
||||
gtk-icon-theme-name="Papirus-Dark"
|
||||
gtk-font-name="Noto Sans, 10"
|
||||
gtk-cursor-theme-name="BreezeX-Light"
|
||||
gtk-cursor-theme-size=24
|
||||
gtk-toolbar-style=GTK_TOOLBAR_BOTH_HORIZ
|
||||
gtk-toolbar-icon-size=GTK_ICON_SIZE_LARGE_TOOLBAR
|
||||
gtk-button-images=1
|
||||
gtk-menu-images=1
|
||||
gtk-enable-event-sounds=1
|
||||
gtk-enable-input-feedback-sounds=1
|
||||
gtk-xft-antialias=1
|
||||
gtk-xft-hinting=1
|
||||
gtk-xft-hintstyle="hintfull"
|
||||
gtk-modules="colorreload-gtk-module:window-decorations-gtk-module:appmenu-gtk-module"
|
3
home/.config/gtk-3.0/bookmarks
Normal file
3
home/.config/gtk-3.0/bookmarks
Normal file
|
@ -0,0 +1,3 @@
|
|||
file:///home/itsdrike/Pictures Pictures
|
||||
file:///home/itsdrike/Downloads Downloads
|
||||
file:///home/itsdrike/Personal Personal
|
21
home/.config/gtk-3.0/settings.ini
Normal file
21
home/.config/gtk-3.0/settings.ini
Normal file
|
@ -0,0 +1,21 @@
|
|||
[Settings]
|
||||
gtk-application-prefer-dark-theme=true
|
||||
gtk-button-images=1
|
||||
gtk-cursor-theme-name=BreezeX-Light
|
||||
gtk-cursor-theme-size=24
|
||||
gtk-decoration-layout=icon:minimize,maximize,close
|
||||
gtk-enable-animations=true
|
||||
gtk-font-name=Noto Sans, 10
|
||||
gtk-icon-theme-name=Papirus-Dark
|
||||
gtk-menu-images=1
|
||||
gtk-modules=colorreload-gtk-module:window-decorations-gtk-module:appmenu-gtk-module
|
||||
gtk-primary-button-warps-slider=false
|
||||
gtk-shell-shows-menubar=1
|
||||
gtk-theme-name=Adwaita-dark
|
||||
gtk-toolbar-style=GTK_TOOLBAR_BOTH_HORIZ
|
||||
gtk-toolbar-icon-size=GTK_ICON_SIZE_LARGE_TOOLBAR
|
||||
gtk-enable-event-sounds=1
|
||||
gtk-enable-input-feedback-sounds=1
|
||||
gtk-xft-antialias=1
|
||||
gtk-xft-hinting=1
|
||||
gtk-xft-hintstyle=hintfull
|
204
home/.config/hypr/hyprland.conf
Normal file
204
home/.config/hypr/hyprland.conf
Normal file
|
@ -0,0 +1,204 @@
|
|||
# Should be configured per-profile
|
||||
monitor = eDP-1, preferred, auto, 1
|
||||
workspace = eDP-1, 1
|
||||
|
||||
# Autostart
|
||||
exec-once = dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP
|
||||
exec-once = systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP
|
||||
exec-once = hypr-restart-portals
|
||||
|
||||
exec-once = setbg
|
||||
# exec-once = waybar --config ~/.config/waybar/config-hypr >~/.waybar.txt 2>&1
|
||||
exec-once = dunst>
|
||||
exec-once = swayidle
|
||||
|
||||
exec-once = nm-applet
|
||||
exec-once = aa-notify -p
|
||||
exec-once = udiskie -A -T
|
||||
|
||||
exec-once = webcord --start-minimized
|
||||
|
||||
|
||||
input {
|
||||
kb_layout = us, sk
|
||||
kb_variant = ,qwerty
|
||||
kb_options = grp:alt_shift_toggle
|
||||
numlock_by_default=true
|
||||
|
||||
follow_mouse = 1
|
||||
|
||||
touchpad {
|
||||
natural_scroll = no
|
||||
}
|
||||
}
|
||||
|
||||
general {
|
||||
gaps_in = 5
|
||||
gaps_out = 8
|
||||
border_size = 2
|
||||
#col.active_border = 0xFF327BD1 # blue
|
||||
col.active_border = 0xFFFFA500 # orange
|
||||
col.inactive_border = 0xFF000000 # black
|
||||
layout = dwindle
|
||||
}
|
||||
|
||||
decoration {
|
||||
rounding = 8
|
||||
blur = 1
|
||||
blur_size = 3
|
||||
blur_passes = 2
|
||||
blur_new_optimizations = 1
|
||||
|
||||
drop_shadow = 1
|
||||
shadow_ignore_window = 1
|
||||
shadow_offset = 2 2
|
||||
shadow_range = 4
|
||||
shadow_render_power = 1
|
||||
col.shadow = 0x55000000
|
||||
}
|
||||
|
||||
animations {
|
||||
enabled = 1
|
||||
animation = windows, 1, 3, default, popin 50%
|
||||
animation = border, 1, 4, default
|
||||
animation = fade, 1, 4, default
|
||||
animation = workspaces, 1, 3, default
|
||||
}
|
||||
|
||||
dwindle {
|
||||
pseudotile = 1
|
||||
preserve_split = 1
|
||||
no_gaps_when_only = 0
|
||||
}
|
||||
|
||||
# Automatically move windows to their workspace
|
||||
windowrulev2 = workspace 2, class:^(firefox)$
|
||||
windowrulev2 = workspace 4, class:^(discord)$
|
||||
windowrulev2 = workspace 4, class:^(WebCord)$
|
||||
windowrulev2 = workspace 6, class:^(Stremio)$
|
||||
|
||||
# Give apps proper size
|
||||
windowrulev2 = float, class:^(qalculate-gtk)$
|
||||
windowrulev2 = size 800 550, class:^(qalculate-gtk)$
|
||||
|
||||
|
||||
# Mouse window resizing
|
||||
bindm = SUPER, mouse:272, movewindow
|
||||
bindm = SUPER, mouse:273, resizewindow
|
||||
|
||||
# Compositor commands
|
||||
bind = SUPER, Space, fullscreen,
|
||||
bind = SUPER, W, killactive,
|
||||
bind = SUPER, F, togglefloating,
|
||||
bind = SUPER, S, togglesplit,
|
||||
bind = SUPER, G, togglegroup,
|
||||
bind = SUPER_SHIFT, N, changegroupactive, f
|
||||
bind = SUPER_SHIFT, P, changegroupactive, b
|
||||
bind = SUPER, P, pseudo,
|
||||
bind = SUPER_SHIFT, Q, exit, # TODO: Use pkill and prompt for confirm
|
||||
|
||||
# Utilities
|
||||
bind = SUPER_CTRL, L, exec, swaylock -fF
|
||||
bind = SUPER_SHIFT, L, exec, wlogout -p layer-shell
|
||||
|
||||
# Programs
|
||||
bind = SUPER, Return, exec, alacritty
|
||||
bind = SUPER, X, exec, pcmanfm
|
||||
bind = SUPER, B, exec, firefox
|
||||
bind = SUPER, R, exec, wofi --show drun
|
||||
bind = SUPER_SHIFT, Return, exec, wofi --show run
|
||||
|
||||
# Notifications
|
||||
bind = CTRL, grave, exec, dunstctl close
|
||||
bind = CTRL_SHIFT, grave, exec, dunstctl close-all
|
||||
bind = CTRL, period, exec, dunstctl history-pop
|
||||
bind = CTRL_SHIFT, period, exec, dunstctl context
|
||||
|
||||
# Volume comtrol
|
||||
binde = SUPER, Down, exec, pulsemixer --change-volume -5
|
||||
binde = SUPER, Up, exec,pulsemixer --change-volume +5
|
||||
binde = , XF86AudioLowerVolume, exec, pulsemixer --change-volume -5
|
||||
binde = , XF86AudioRaiseVolume, exec, pulsemixer --change-volume +5
|
||||
bind = , XF86AudioMute, exec, pulsemixer --toggle-mute
|
||||
|
||||
# Brightness control
|
||||
binde = SUPER, Right, exec, brightness -i 5% -n
|
||||
binde = SUPER, Left, exec, brightness -d 5% -n
|
||||
binde = , XF86MonBrightnessUp, exec, brightness -i 5% -n
|
||||
binde = , XF86MonBrightnessDown, exec, brightness -d 5% -n
|
||||
|
||||
# Screenshots
|
||||
bind = ,Print, exec, grim -g "$(slurp)" - | wl-copy && notify-send "Screenshot" "Screenshot saved to clipboard"
|
||||
bind = SUPER, Print, exec, grim -g "$(slurp)" - | swappy -f - -o - | wl-copy
|
||||
bind = CTRL, Print, exec, echo "" | wofi --prompt "Set delay (ms)" --show dmenu | xargs -I _ sleep _e-3 && grim -g "$(slurp)" - | wl-copy
|
||||
bind = SUPER_CTRL, Print, exec, echo "" | wofi --prompt "Set delay (ms)" --show dmenu | xargs -I _ sleep _e-3 && grim -g "$(slurp)" - | swappy -f - -o - | wl-copy
|
||||
bind = SHIFT, Print, exec, wl-copy "$(hyprpicker)" && notify-send 'Picked color' "$(wl-paste) (saved to clipboard)"
|
||||
|
||||
# Move between windows
|
||||
bind = SUPER, h, movefocus, l
|
||||
bind = SUPER, l, movefocus, r
|
||||
bind = SUPER, k, movefocus, u
|
||||
bind = SUPER, j, movefocus, d
|
||||
|
||||
# Window resizing
|
||||
bind = SUPER, Q, submap, resize
|
||||
submap = resize
|
||||
binde = , right, resizeactive, 10 0
|
||||
binde = , left, resizeactive, -10 0
|
||||
binde = , up, resizeactive, 0 -10
|
||||
binde = , down, resizeactive, 0 10
|
||||
binde = , L, resizeactive, 10 0
|
||||
binde = , H, resizeactive, -10 0
|
||||
binde = , K, resizeactive, 0 -10
|
||||
binde = , J, resizeactive, 0 10
|
||||
bind = , escape, submap, reset
|
||||
bind = SUPER, Q, submap, reset
|
||||
submap = reset
|
||||
|
||||
# Move between workspaces
|
||||
bind = SUPER, 1, workspace, 1
|
||||
bind = SUPER, 2, workspace, 2
|
||||
bind = SUPER, 3, workspace, 3
|
||||
bind = SUPER, 4, workspace, 4
|
||||
bind = SUPER, 5, workspace, 5
|
||||
bind = SUPER, 6, workspace, 6
|
||||
bind = SUPER, 7, workspace, 7
|
||||
bind = SUPER, 8, workspace, 8
|
||||
bind = SUPER, 9, workspace, 9
|
||||
|
||||
# Move windows to workspaces
|
||||
bind = SUPER_SHIFT, 1, movetoworkspacesilent, 1
|
||||
bind = SUPER_SHIFT, 2, movetoworkspacesilent, 2
|
||||
bind = SUPER_SHIFT, 3, movetoworkspacesilent, 3
|
||||
bind = SUPER_SHIFT, 4, movetoworkspacesilent, 4
|
||||
bind = SUPER_SHIFT, 5, movetoworkspacesilent, 5
|
||||
bind = SUPER_SHIFT, 6, movetoworkspacesilent, 6
|
||||
bind = SUPER_SHIFT, 7, movetoworkspacesilent, 7
|
||||
bind = SUPER_SHIFT, 8, movetoworkspacesilent, 8
|
||||
bind = SUPER_SHIFT, 9, movetoworkspacesilent, 9
|
||||
|
||||
|
||||
# Move windows to workspaces and focus it there
|
||||
bind = ALT, 1, movetoworkspace, 1
|
||||
bind = ALT, 2, movetoworkspace, 2
|
||||
bind = ALT, 3, movetoworkspace, 3
|
||||
bind = ALT, 4, movetoworkspace, 4
|
||||
bind = ALT, 5, movetoworkspace, 5
|
||||
bind = ALT, 6, movetoworkspace, 6
|
||||
bind = ALT, 7, movetoworkspace, 7
|
||||
bind = ALT, 8, movetoworkspace, 8
|
||||
bind = ALT, 9, movetoworkspace, 9
|
||||
|
||||
# Cycle workspaces
|
||||
bind = SUPER, mouse_down, workspace, m+1
|
||||
bind = SUPER, mouse_up, workspace, m-1
|
||||
bind = SUPER, bracketleft, workspace, m-1
|
||||
bind = SUPER, bracketright, workspace, m+1
|
||||
|
||||
# Cycle monitors
|
||||
bind = SUPER_SHIFT, braceleft, focusmonitor, l
|
||||
bind = SUPER_SHIFT, braceright, focusmonitor, r
|
||||
|
||||
# Special workspace
|
||||
bind = ALT, grave, movetoworkspace, special
|
||||
bind = SUPER, grave, togglespecialworkspace,
|
0
home/.config/java/.keep
Normal file
0
home/.config/java/.keep
Normal file
6
home/.config/lf/clear_img.sh
Executable file
6
home/.config/lf/clear_img.sh
Executable file
|
@ -0,0 +1,6 @@
|
|||
#!/bin/sh
|
||||
|
||||
readonly PREVIEW_ID="preview"
|
||||
|
||||
printf '{"action": "remove", "identifier": "%s"}\n' "$PREVIEW_ID" > "$FIFO_UEBERZUG"
|
||||
|
21
home/.config/lf/draw_img.sh
Executable file
21
home/.config/lf/draw_img.sh
Executable file
|
@ -0,0 +1,21 @@
|
|||
#!/bin/sh
|
||||
|
||||
path="$1"
|
||||
x="$2"
|
||||
y="$3"
|
||||
width="$4"
|
||||
height="$5"
|
||||
PREVIEW_ID="preview"
|
||||
|
||||
if [ -n "$FIFO_UEBERZUG" ]; then
|
||||
printf '{"action": "add", "identifier": "%s", "x": %d, "y": %d, "width": %d, "height": %d, "scaler": "contain", "scaling_position_x": 0.5, "scaling_position_y": 0.5, "path": "%s"}\n' \
|
||||
"$PREVIEW_ID" "$x" "$y" "$width" "$height" "$path" > "$FIFO_UEBERZUG"
|
||||
else
|
||||
# Ueberzug isn't avialable, try to use pixterm
|
||||
if command -v pixterm > /dev/null; then
|
||||
pixterm -s 2 -tr "$x" -tc "$width" "$path"
|
||||
else
|
||||
>&2 echo "ueberzug not running, pixterm fallback not found!"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
144
home/.config/lf/lfrc
Normal file
144
home/.config/lf/lfrc
Normal file
|
@ -0,0 +1,144 @@
|
|||
# Basic settings
|
||||
set previewer ~/.config/lf/previewer.sh
|
||||
set cleaner ~/.config/lf/clear_img.sh
|
||||
set preview true
|
||||
set hidden true
|
||||
set drawbox true
|
||||
set icons true
|
||||
set ignorecase true
|
||||
set scrolloff 5
|
||||
|
||||
# Use $EDITOR for text
|
||||
cmd open ${{
|
||||
case $(file --mime-type "$f" -bL) in
|
||||
text/*|application/json) $EDITOR "$f";;
|
||||
*) devour xdg-open "$f" ;;
|
||||
esac
|
||||
}}
|
||||
|
||||
# File/Directory control functions
|
||||
cmd mkdir %{{
|
||||
printf "Directory Name: "
|
||||
read ans
|
||||
mkdir $ans
|
||||
}}
|
||||
|
||||
cmd mkfile %{{
|
||||
printf "File Name: "
|
||||
read ans
|
||||
touch $ans
|
||||
}}
|
||||
|
||||
cmd chmod %{{
|
||||
printf "Mode Bits: "
|
||||
read ans
|
||||
|
||||
for file in "$fx"; do
|
||||
chmod $ans $file
|
||||
done
|
||||
|
||||
lf -remote 'send reload'
|
||||
}}
|
||||
|
||||
# Add z.lua functionality for easy autojumps
|
||||
cmd zlua %{{
|
||||
printf "z.lua input: "
|
||||
read ans
|
||||
|
||||
/usr/local/src/z.lua/z.lua $ans
|
||||
}}
|
||||
|
||||
|
||||
# Archive bindings
|
||||
cmd unarchive ${{
|
||||
case "$f" in
|
||||
*.zip) unzip "$f" ;;
|
||||
*.tar.gz) tar -xzvf "$f" ;;
|
||||
*.tar.bz2) tar -xjvf "$f" ;;
|
||||
*.tar) tar -xvf "$f" ;;
|
||||
*) echo "Unsuported format" ;;
|
||||
esac
|
||||
}}
|
||||
|
||||
cmd zip %zip -r "$f" "$f"
|
||||
cmd tar %tar cvf "$f.tar" "$f"
|
||||
cmd targz %tar cvzf "%f.tar.gz" "$f"
|
||||
cmd tarbz2 %tar cjvf "$f.tar.bz2" "$f"
|
||||
|
||||
# Trash-cli bindings
|
||||
cmd trash ${{
|
||||
files=$(printf "$fx" | tr '\n' ':')
|
||||
while [ "$files" ]; do
|
||||
# extract the substring from start of string up to delimeter.
|
||||
# this is the first "element" of the string
|
||||
file=${files%%:*}
|
||||
|
||||
trash-put "$(basename "$file")"
|
||||
# if there's only one element left, set `files` to an empty string.
|
||||
# this causes us to exit this `while` loop.
|
||||
# else, we delete the first "element" of the string from files, and
|
||||
# move onto the next.
|
||||
if [ "$files" = "$file" ]; then
|
||||
files=''
|
||||
else
|
||||
files="${files#*;}"
|
||||
fi
|
||||
done
|
||||
}}
|
||||
|
||||
cmd clear_trash %trash-empty
|
||||
|
||||
cmd restore_trash ${{
|
||||
trash-restore
|
||||
}}
|
||||
|
||||
# Bindings
|
||||
# Remove some defaults
|
||||
map m
|
||||
map n
|
||||
map "'"
|
||||
map '"'
|
||||
map d
|
||||
map c
|
||||
|
||||
# Archive mappings
|
||||
map az zip
|
||||
map at tar
|
||||
map ag targz
|
||||
map au unarchive
|
||||
|
||||
# Trash mappings
|
||||
map dd trash
|
||||
map tc clear_trash
|
||||
map tr restore_trash
|
||||
|
||||
# Basic functions
|
||||
map . set hidden!
|
||||
map DD delete
|
||||
map p paste
|
||||
map x cut
|
||||
map y copy
|
||||
map <enter> open
|
||||
map md mkdir
|
||||
map mf mkfile
|
||||
map ch chmod
|
||||
map r rename
|
||||
map H top
|
||||
map L bottom
|
||||
map R reload
|
||||
map C clear
|
||||
map z zlua
|
||||
|
||||
# Movement
|
||||
map gh cd ~
|
||||
map gc cd ~/.config
|
||||
map gl cd ~/.local
|
||||
map gs cd ~/.local/bin/scripts
|
||||
map gtr cd ~/.local/share/Trash/files
|
||||
map gE. cd /etc
|
||||
map gEp cd /etc/portage
|
||||
map gU. cd /usr
|
||||
map gUs cd /usr/share
|
||||
map gUl cd /usr/local
|
||||
map gM cd /mnt
|
||||
|
162
home/.config/lf/previewer.sh
Executable file
162
home/.config/lf/previewer.sh
Executable file
|
@ -0,0 +1,162 @@
|
|||
#!/bin/sh
|
||||
# This script handles showing file-previews within lf.
|
||||
|
||||
# It can also show image previews using ueberzug, however
|
||||
# that requires lf to be started with a script that also starts
|
||||
# ueberzug alongside of it.
|
||||
# (In my dotfiles, this script is in '~/.local/bin/scripts/lfu')
|
||||
# Alternatively, we could also handle ANSI previews with pixterms
|
||||
# this will be in a pretty low quiality, but it will work without
|
||||
# ueberzug. To enable this, change PIXTERM_ENABLED to 1.
|
||||
# if both ueberzug and pixterm are enabled, ueberzug takes precedence.
|
||||
PIXTERM_ENABLED=1
|
||||
|
||||
run_cmd() {
|
||||
# Try to run given command, if it is installed.
|
||||
# If it isn't try to fallback to text_handle,
|
||||
# otherwise fail completely.
|
||||
cmd="$1"
|
||||
shift
|
||||
|
||||
if command -v "$cmd" > /dev/null; then
|
||||
$cmd $@
|
||||
else
|
||||
# If we didn't found the requested command, check if
|
||||
# the file is text-like and try to use the text_handle
|
||||
# to show the preview, this may not be ideal for given
|
||||
# file-format, but at least we won't fail.
|
||||
case $(file --mime-type "$1" -bL) in
|
||||
# TODO: Consider checking for UTF-8 formatting instead,
|
||||
# or show previews for any file-type
|
||||
text/*|application/json)
|
||||
echo "@@PREVIEW FALLBACK: Using text handle, $cmd command not found!"
|
||||
text_handle "$1"
|
||||
;;
|
||||
*)
|
||||
echo "@@PREVIEW ERROR: Preview failed, $cmd command not found!"
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
}
|
||||
|
||||
draw_image() {
|
||||
# Draw passed image with use of given draw_script.
|
||||
# If the image contains EXIF (metadata) orientation info,
|
||||
# handle it and draw the rotated image.
|
||||
draw_script="$1"
|
||||
file="$2"
|
||||
shift
|
||||
shift
|
||||
|
||||
# Calculate where the image should be placed on the screen.
|
||||
num=$(printf "%0.f\n" "`echo "$(tput cols) / 2" | bc`")
|
||||
numb=$(printf "%0.f\n" "`echo "$(tput cols) - $num - 1" | bc`")
|
||||
numc=$(printf "%0.f\n" "`echo "$(tput lines) - 2" | bc`")
|
||||
|
||||
# Handle EXIF (metadata) orientation.
|
||||
exif_orientation="$(identify -format '%[EXIF:Orientation]\n' -- "$file")"
|
||||
if [ -n "$exif_orientation" ] && [ "$exif_orientation" != 1 ]; then
|
||||
# In case `convert` command isn't aviable, ignore EXIF rotation
|
||||
if command -v convert > /dev/null; then
|
||||
cache=$(mktemp /tmp/thumbcache.XXXXX)
|
||||
convert -- "$file" -auto-orient "$cache"
|
||||
$draw_script "$cache" $num 1 $numb $numc
|
||||
else
|
||||
$draw_script "$file" $num 1 $numb $numc
|
||||
fi
|
||||
else
|
||||
$draw_script "$file" $num 1 $numb $numc
|
||||
fi
|
||||
|
||||
# Exit with status code 1 to signal lf that the function
|
||||
# should be re-ran next time instead of caching the result.
|
||||
exit 1
|
||||
}
|
||||
|
||||
media_handle() {
|
||||
# Handle media type files (videos, photos). These types of
|
||||
# files are usually not stored in any form of textually readable
|
||||
# format and they require a special way of displaying them.
|
||||
# This mostly uses ueberzug (if available) for this.
|
||||
|
||||
draw_script="${XDG_CONFIG_HOME:-$HOME/.config}/lf/draw_img.sh"
|
||||
file="$1"
|
||||
shift
|
||||
|
||||
# Set ENABLED=1 if ueberzug or pixterm is enabled
|
||||
command -v pixterm > /dev/null && [ "$PIXTERM_ENABLED" = 1 ] && ENABLED=1
|
||||
[ -n "$FIFO_UEBERZUG" ] && [ -f "$draw_script" ] && ENABLED=1
|
||||
|
||||
case "$file" in
|
||||
*.bmp|*.jpg|*.jpeg|*.png|*.xpm)
|
||||
if [ -n "$ENABLED" ]; then
|
||||
draw_image $draw_script "$file"
|
||||
else
|
||||
echo "@@PREVIEW FALLBACK: Using mediainfo, ueberzug isn't available."
|
||||
run_cmd mediainfo "$file"
|
||||
fi
|
||||
;;
|
||||
*.avi|*.mp4|*.wmv|*.dat|*.3gp|*.ogv|*.mkv|*.mpg|*.mpeg|*.vob|*.fl[icv]|*.m2v|\
|
||||
*.mov|*.webm|*.ts|*.mts|*.m4v|*.r[am]|*.qt|*.divx)
|
||||
if [ -n "$ENABLED" ]; then
|
||||
cache="$(mktemp /tmp/thumbcache.XXXXX)"
|
||||
ffmpegthumbnailer -i "$file" -o "$cache" -s 0
|
||||
draw_image $draw_script "$cache"
|
||||
else
|
||||
echo "@@PREVIEW FALLBACK: Using exiftool, ueberzug isn't aviable."
|
||||
run_cmd exiftool "$file"
|
||||
fi
|
||||
;;
|
||||
*.wav|*.mp3|*.flac|*.m4a|*.wma|*.ape|*.ac3|*.og[agx]|*.spx|*.opus|*.as[fx]|*.flac)
|
||||
# These types can't make use of ueberzug easily, so simply use eixftool
|
||||
run_cmd exiftool "$file"
|
||||
;;
|
||||
*)
|
||||
echo "@@PREVIEW FALLBACK: Unrecognized media file, falling back to text handle."
|
||||
text_handle "$file"
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
text_handle() {
|
||||
# Handle all other formats as text and cat them
|
||||
# if highlighting tools are aviable, try to use them
|
||||
if command -v bat > /dev/null; then
|
||||
num=$(printf "%0.f\n" "`echo "$(tput cols) / 2" | bc`")
|
||||
numb=$(printf "%d\n" "`echo "$(tput cols) - $num - 3" | bc`")
|
||||
bat -pp --color=always --wrap=character --terminal-width="$numb" "$1"
|
||||
elif command -v highlight > /dev/null; then
|
||||
highlight "$1" --out-format ansi --force
|
||||
else
|
||||
cat "$1"
|
||||
fi
|
||||
}
|
||||
|
||||
# Capture all directories at first, since they could
|
||||
# potentionally match one of the file case statements
|
||||
if [ -d "$1" ]; then
|
||||
tree "$1" -La 1
|
||||
elif [ -f "$1" ]; then
|
||||
case "$1" in
|
||||
*.tgz|*.tar.gz) run_cmd tar tzf "$1";;
|
||||
*.tar.bz2|*.tbz2) run_cmd tar tjf "$1";;
|
||||
*.tar.txz|*.txz) run_cmd xz --list "$1";;
|
||||
*.tar) run_cmd tar tf "$1";;
|
||||
*.zip|*.jar|*.war|*.ear|*.oxt) run_cmd unzip -l "$1";;
|
||||
*.rar) run_cmd unrar l "$1";;
|
||||
*.7z) run_cmd 7z l "$1";;
|
||||
*.iso) run_cmd iso-info --no-header -l "$1";;
|
||||
*.o) run_cmd nm "$1" | less ;;
|
||||
*.csv) cat "$1" | sed s/,/\\n/g ;;
|
||||
*odt,*.ods,*.odp,*.sxw) run_cmd odt2txt "$1";;
|
||||
*.doc) run_cmd catdoc "$1" ;;
|
||||
*.docx) run_cmd docx2txt "$1" - ;;
|
||||
*.torrent) run_cmd transmission-show "$1";;
|
||||
*.pdf) run_cmd pdftotext "$1";;
|
||||
*.wav|*.mp3|*.flac|*.m4a|*.wma|*.ape|*.ac3|*.og[agx]|*.spx|*.opus|*.as[fx]|*.flac|\
|
||||
*.avi|*.mp4|*.wmv|*.dat|*.3gp|*.ogv|*.mkv|*.mpg|*.mpeg|*.vob|*.fl[icv]|*.m2v|*.mov|\
|
||||
*.webm|*.ts|*.mts|*.m4v|*.r[am]|*.qt|*.divx|\
|
||||
*.bmp|*.jpg|*.jpeg|*.png|*.xpm) media_handle "$1" ;;
|
||||
*) text_handle "$1" ;;
|
||||
esac
|
||||
fi
|
43
home/.config/lvim/.luacheckrc
Normal file
43
home/.config/lvim/.luacheckrc
Normal file
|
@ -0,0 +1,43 @@
|
|||
-- vim: ft=lua tw=80
|
||||
|
||||
stds.nvim = {
|
||||
globals = {
|
||||
"lvim",
|
||||
vim = { fields = { "g" } },
|
||||
"TERMINAL",
|
||||
"USER",
|
||||
"C",
|
||||
"Config",
|
||||
"WORKSPACE_PATH",
|
||||
"JAVA_LS_EXECUTABLE",
|
||||
"MUtils",
|
||||
"USER_CONFIG_PATH",
|
||||
os = { fields = { "capture" } },
|
||||
},
|
||||
read_globals = {
|
||||
"jit",
|
||||
"os",
|
||||
"vim",
|
||||
"join_paths",
|
||||
"get_runtime_dir",
|
||||
"get_config_dir",
|
||||
"get_cache_dir",
|
||||
"get_lvim_base_dir",
|
||||
"require_clean",
|
||||
},
|
||||
}
|
||||
|
||||
std = "lua51+nvim"
|
||||
|
||||
files["tests/*_spec.lua"].std = "lua51+nvim+busted"
|
||||
|
||||
-- Don't report unused self arguments of methods.
|
||||
self = false
|
||||
|
||||
-- Rerun tests only if their modification time changed.
|
||||
cache = true
|
||||
|
||||
ignore = {
|
||||
"631", -- max_line_length
|
||||
"212/_.*", -- unused argument, for vars with "_" prefix
|
||||
}
|
6
home/.config/lvim/.stylua.toml
Normal file
6
home/.config/lvim/.stylua.toml
Normal file
|
@ -0,0 +1,6 @@
|
|||
column_width = 120
|
||||
line_endings = "Unix"
|
||||
indent_type = "Spaces"
|
||||
indent_width = 2
|
||||
quote_style = "AutoPreferDouble"
|
||||
no_call_parentheses = true
|
2
home/.config/lvim/after/ftplugin/python.lua
Normal file
2
home/.config/lvim/after/ftplugin/python.lua
Normal file
|
@ -0,0 +1,2 @@
|
|||
local dap_install = require "dap-install"
|
||||
dap_install.config("python", {})
|
43
home/.config/lvim/config.lua
Normal file
43
home/.config/lvim/config.lua
Normal file
|
@ -0,0 +1,43 @@
|
|||
require "user.keys"
|
||||
require "user.abbreviations"
|
||||
require "user.lsp"
|
||||
require "user.autocmds"
|
||||
require "user.plugins"
|
||||
require "user.options"
|
||||
require "user.lualine"
|
||||
require "user.treesitter"
|
||||
|
||||
-- TEMPORARY; Learn vim, the hard way
|
||||
-- vim.opt.mouse = {}
|
||||
-- lvim.keys.normal_mode["<Up>"] = ""
|
||||
-- lvim.keys.normal_mode["<Down>"] = ""
|
||||
-- lvim.keys.normal_mode["<Left>"] = ""
|
||||
-- lvim.keys.normal_mode["<Right>"] = ""
|
||||
-- lvim.keys.visual_mode["<Up>"] = ""
|
||||
-- lvim.keys.visual_mode["<Down>"] = ""
|
||||
-- lvim.keys.visual_mode["<Left>"] = ""
|
||||
-- lvim.keys.visual_mode["<Right>"] = ""
|
||||
-- lvim.keys.insert_mode["<Up>"] = ""
|
||||
-- lvim.keys.insert_mode["<Down>"] = ""
|
||||
-- lvim.keys.insert_mode["<Left>"] = ""
|
||||
-- lvim.keys.insert_mode["<Right>"] = ""
|
||||
|
||||
|
||||
-- general
|
||||
lvim.log.level = "warn"
|
||||
lvim.format_on_save = false
|
||||
lvim.colorscheme = "onedarker"
|
||||
-- to disable icons and use a minimalist setup, uncomment the following
|
||||
-- lvim.use_icons = false
|
||||
|
||||
-- TODO: User Config for predefined plugins
|
||||
-- After changing plugin config exit and reopen LunarVim, Run :PackerInstall :PackerCompile
|
||||
lvim.builtin.dap.active = true
|
||||
lvim.builtin.notify.active = true
|
||||
lvim.builtin.terminal.active = true
|
||||
lvim.builtin.alpha.active = true
|
||||
lvim.builtin.alpha.mode = "dashboard"
|
||||
lvim.builtin.nvimtree.setup.view.side = "left"
|
||||
lvim.builtin.project.patterns = { ".git", ".svn" }
|
||||
lvim.builtin.bufferline.options.always_show_bufferline = true
|
||||
-- lvim.builtin.nvimtree.setup.renderer.icons.show.git = false
|
11
home/.config/lvim/ftdetect/apparmor.lua
Normal file
11
home/.config/lvim/ftdetect/apparmor.lua
Normal file
|
@ -0,0 +1,11 @@
|
|||
local autocmd = vim.api.nvim_create_autocmd
|
||||
|
||||
autocmd({ "BufNewFile", "BufRead" }, {
|
||||
pattern = { "/etc/apparmor.d/*" },
|
||||
command = "setfiletype apparmor"
|
||||
})
|
||||
|
||||
autocmd({ "BufNewFile", "BufRead" }, {
|
||||
pattern = { "/usr/share/apparmor/extra-profiles/*" },
|
||||
command = "setfiletype apparmor"
|
||||
})
|
6
home/.config/lvim/ftdetect/axaml.lua
Normal file
6
home/.config/lvim/ftdetect/axaml.lua
Normal file
|
@ -0,0 +1,6 @@
|
|||
local autocmd = vim.api.nvim_create_autocmd
|
||||
|
||||
autocmd({ "BufNewFile", "BufRead" }, {
|
||||
pattern = { "*.axaml" },
|
||||
command = "setfiletype xml"
|
||||
})
|
30
home/.config/lvim/lua/user/abbreviations.lua
Normal file
30
home/.config/lvim/lua/user/abbreviations.lua
Normal file
|
@ -0,0 +1,30 @@
|
|||
-- Define an abbreviation
|
||||
local function abbrev(mode, input, result, reabbrev)
|
||||
reabbrev = reabbrev or false
|
||||
local command
|
||||
if reabbrev then
|
||||
command = mode .. "abbrev"
|
||||
else
|
||||
command = mode .. "noreabbrev"
|
||||
end
|
||||
vim.cmd(command .. " " .. input .. " " .. result)
|
||||
end
|
||||
|
||||
-- In case I have caps on (don't judge me for using caps)
|
||||
abbrev("c", "Wq", "wq")
|
||||
abbrev("c", "wQ", "wq")
|
||||
abbrev("c", "WQ", "wq")
|
||||
abbrev("c", "WQ!", "wq")
|
||||
abbrev("c", "wQ!", "wq")
|
||||
abbrev("c", "Wq!", "wq")
|
||||
abbrev("c", "W", "w")
|
||||
abbrev("c", "W!", "w!")
|
||||
abbrev("c", "Q", "q!")
|
||||
abbrev("c", "Q!", "q!")
|
||||
abbrev("c", "Qall", "qall")
|
||||
abbrev("c", "Qall!", "qall")
|
||||
abbrev("c", "QALL", "qall")
|
||||
abbrev("c", "QALL!", "qall")
|
||||
|
||||
-- Save file with sudo
|
||||
abbrev("c", "w!!", "w !sudo tee > /dev/null %")
|
19
home/.config/lvim/lua/user/autocmds.lua
Normal file
19
home/.config/lvim/lua/user/autocmds.lua
Normal file
|
@ -0,0 +1,19 @@
|
|||
-- Autocommands (https://neovim.io/doc/user/autocmd.html)
|
||||
|
||||
-- Delete all trailing whitespace on saving
|
||||
vim.api.nvim_create_autocmd("BufWritePre", { pattern = "*.py", command = [[%s/\s\+$//e]] })
|
||||
-- Set text wrap to 119 characters
|
||||
vim.api.nvim_create_autocmd("BufWinEnter", { pattern = "*.md", command = "setlocal tw=119" })
|
||||
-- Jump to last position when opening a file
|
||||
vim.api.nvim_create_autocmd("BufReadPost", {
|
||||
pattern = "*",
|
||||
command = [[if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif]],
|
||||
})
|
||||
-- Highlight current line number
|
||||
vim.api.nvim_create_autocmd("ColorScheme", { pattern = "*", command = "highlight CursorLine guibg=#2b2b2b" })
|
||||
vim.api.nvim_create_autocmd("ColorScheme", {
|
||||
pattern = "*",
|
||||
command = "highlight CursorLineNr guifg=#1f85de ctermfg=LightBlue",
|
||||
})
|
||||
-- Custom syntax definitions based on file extensions
|
||||
vim.api.nvim_create_autocmd("BufRead", { pattern = "*.axml", command = "set ft=xml" })
|
118
home/.config/lvim/lua/user/keys.lua
Normal file
118
home/.config/lvim/lua/user/keys.lua
Normal file
|
@ -0,0 +1,118 @@
|
|||
-- keymappings [view all the defaults by pressing <leader>Lk]
|
||||
lvim.leader = "space"
|
||||
|
||||
-- Common shortcuts
|
||||
lvim.keys.normal_mode["<C-s>"] = ":w<CR>"
|
||||
lvim.keys.insert_mode["<C-s>"] = "<Esc>:w<CR>i"
|
||||
lvim.keys.normal_mode["<C-z>"] = ":undo<CR>"
|
||||
lvim.keys.normal_mode["<C-y>"] = ":redo<CR>"
|
||||
|
||||
-- Moevements
|
||||
lvim.keys.normal_mode["H"] = "^"
|
||||
lvim.keys.normal_mode["L"] = "$"
|
||||
|
||||
-- Moving through buffers
|
||||
lvim.keys.normal_mode["<A-l>"] = ":BufferLineCycleNext<CR>"
|
||||
lvim.keys.normal_mode["<A-h>"] = ":BufferLineCyclePrev<CR>"
|
||||
lvim.keys.normal_mode["<A-L>"] = ":BufferLineMoveNext<CR>"
|
||||
lvim.keys.normal_mode["<A-H>"] = ":BufferLineMovePrev<CR>"
|
||||
|
||||
-- Opening various menus
|
||||
lvim.keys.normal_mode["<C-n>"] = ":NvimTreeFindFileToggle<CR>"
|
||||
lvim.keys.normal_mode["<C-f>"] = ":Lf<CR>"
|
||||
lvim.keys.normal_mode["<A-m>"] = ":MinimapToggle<CR>"
|
||||
lvim.keys.normal_mode["<A-s>"] = ":SymbolsOutline<CR>"
|
||||
|
||||
-- Delete to void register
|
||||
lvim.keys.visual_mode["<A-d>"] = '"_d'
|
||||
lvim.keys.normal_mode["<A-d>"] = '"_d'
|
||||
lvim.keys.visual_mode["<A-p>"] = '"_dP'
|
||||
lvim.keys.visual_mode["p"] = '"_dP'
|
||||
|
||||
-- Remove highlight
|
||||
lvim.keys.normal_mode["<esc><esc>"] = ":nohlsearch<cr>"
|
||||
|
||||
-- Debugger
|
||||
lvim.keys.normal_mode["<F9>"] = ":DapToggleBreakpoint<CR>"
|
||||
lvim.keys.normal_mode["<F5>"] = ":DapContinue<CR>"
|
||||
lvim.keys.normal_mode["<F6>"] = ":DapToggleRepl<CR>"
|
||||
lvim.keys.normal_mode["<S-F5>"] = ":DapTerminate<CR>"
|
||||
lvim.keys.normal_mode["<F10>"] = ":DapStepOver<CR>"
|
||||
lvim.keys.normal_mode["<F11>"] = ":DapStepInto<CR>"
|
||||
lvim.keys.normal_mode["<S-F11>"] = ":DapStepOut<CR>"
|
||||
|
||||
lvim.builtin.which_key.mappings["h"] = {
|
||||
name = "+Hop",
|
||||
w = { "<cmd>HopWord<CR>", "Word" },
|
||||
p = { "<cmd>HopPattern<CR>", "Pattern" },
|
||||
a = { "<cmd>HopAnywhere<CR>", "Anywhere" },
|
||||
v = { "<cmd>HopVertical<CR>", "Vertical" },
|
||||
}
|
||||
|
||||
-- Quick word replacing (use . for next word)
|
||||
lvim.keys.normal_mode["cn"] = "*``cgn"
|
||||
lvim.keys.normal_mode["cN"] = "*``cgN"
|
||||
|
||||
-- Quick replace all
|
||||
vim.api.nvim_set_keymap("n", "<A-r>", "", {
|
||||
noremap = true,
|
||||
callback = function()
|
||||
vim.fn.inputsave()
|
||||
local query = vim.fn.input "To replace: "
|
||||
|
||||
vim.fn.inputsave()
|
||||
local answer = vim.fn.input("Replace text: ", query)
|
||||
vim.api.nvim_command("%s/\\V" .. query:gsub("/", "\\/") .. "/" .. answer:gsub("/", "\\/") .. "/")
|
||||
vim.fn.inputrestore()
|
||||
vim.api.nvim_feedkeys("v", "n", false)
|
||||
end,
|
||||
})
|
||||
vim.api.nvim_set_keymap("v", "<A-r>", "", {
|
||||
noremap = true,
|
||||
callback = function()
|
||||
local getselection = function()
|
||||
return vim.fn.strcharpart(vim.fn.getline(vim.fn.line "."), vim.fn.min {
|
||||
vim.fn.charcol ".",
|
||||
vim.fn.charcol "v",
|
||||
} - 1, vim.fn.abs(vim.fn.charcol "." - vim.fn.charcol "v") + 1)
|
||||
end
|
||||
|
||||
local query = getselection()
|
||||
|
||||
vim.fn.inputsave()
|
||||
local answer = vim.fn.input("Replace text: ", query)
|
||||
vim.api.nvim_command("%s/\\V" .. query:gsub("/", "\\/") .. "/" .. answer:gsub("/", "\\/") .. "/")
|
||||
vim.fn.inputrestore()
|
||||
vim.api.nvim_feedkeys("v", "n", false)
|
||||
end,
|
||||
})
|
||||
|
||||
-- Change Telescope navigation to use j and k for navigation and n and p for history in both input and normal mode.
|
||||
-- we use protected-mode (pcall) just in case the plugin wasn't loaded yet.
|
||||
-- local _, actions = pcall(require, "telescope.actions")
|
||||
-- lvim.builtin.telescope.defaults.mappings = {
|
||||
-- -- for input mode
|
||||
-- i = {
|
||||
-- ["<C-j>"] = actions.move_selection_next,
|
||||
-- ["<C-k>"] = actions.move_selection_previous,
|
||||
-- ["<C-n>"] = actions.cycle_history_next,
|
||||
-- ["<C-p>"] = actions.cycle_history_prev,
|
||||
-- },
|
||||
-- -- for normal mode
|
||||
-- n = {
|
||||
-- ["<C-j>"] = actions.move_selection_next,
|
||||
-- ["<C-k>"] = actions.move_selection_previous,
|
||||
-- },
|
||||
-- }
|
||||
|
||||
-- Use which-key to add extra bindings with the leader-key prefix
|
||||
-- lvim.builtin.which_key.mappings["P"] = { "<cmd>Telescope projects<CR>", "Projects" }
|
||||
-- lvim.builtin.which_key.mappings["t"] = {
|
||||
-- name = "+Trouble",
|
||||
-- r = { "<cmd>Trouble lsp_references<cr>", "References" },
|
||||
-- f = { "<cmd>Trouble lsp_definitions<cr>", "Definitions" },
|
||||
-- d = { "<cmd>Trouble document_diagnostics<cr>", "Diagnostics" },
|
||||
-- q = { "<cmd>Trouble quickfix<cr>", "QuickFix" },
|
||||
-- l = { "<cmd>Trouble loclist<cr>", "LocationList" },
|
||||
-- w = { "<cmd>Trouble workspace_diagnostics<cr>", "Workspace Diagnostics" },
|
||||
-- }
|
68
home/.config/lvim/lua/user/lsp.lua
Normal file
68
home/.config/lvim/lua/user/lsp.lua
Normal file
|
@ -0,0 +1,68 @@
|
|||
-- generic LSP settings
|
||||
|
||||
-- -- make sure server will always be installed even if the server is in skipped_servers list
|
||||
-- lvim.lsp.installer.setup.ensure_installed = {
|
||||
-- "sumeko_lua",
|
||||
-- "jsonls",
|
||||
-- }
|
||||
-- -- change UI setting of `LspInstallInfo`
|
||||
-- -- see <https://github.com/williamboman/nvim-lsp-installer#default-configuration>
|
||||
-- lvim.lsp.installer.setup.ui.check_outdated_servers_on_open = false
|
||||
-- lvim.lsp.installer.setup.ui.border = "rounded"
|
||||
-- lvim.lsp.installer.setup.ui.keymaps = {
|
||||
-- uninstall_server = "d",
|
||||
-- toggle_server_expand = "o",
|
||||
-- }
|
||||
|
||||
-- ---@usage disable automatic installation of servers
|
||||
lvim.lsp.installer.setup.automatic_installation = false
|
||||
|
||||
-- ---configure a server manually. !!Requires `:LvimCacheReset` to take effect!!
|
||||
-- ---see the full default list `:lua print(vim.inspect(lvim.lsp.automatic_configuration.skipped_servers))`
|
||||
-- vim.list_extend(lvim.lsp.automatic_configuration.skipped_servers, { "pyright" })
|
||||
-- local opts = {} -- check the lspconfig documentation for a list of all possible options
|
||||
-- require("lvim.lsp.manager").setup("pyright", opts)
|
||||
|
||||
-- ---remove a server from the skipped list, e.g. eslint, or emmet_ls. !!Requires `:LvimCacheReset` to take effect!!
|
||||
-- ---`:LvimInfo` lists which server(s) are skipped for the current filetype
|
||||
-- lvim.lsp.automatic_configuration.skipped_servers = vim.tbl_filter(function(server)
|
||||
-- return server ~= "emmet_ls"
|
||||
-- end, lvim.lsp.automatic_configuration.skipped_servers)
|
||||
|
||||
-- -- you can set a custom on_attach function that will be used for all the language servers
|
||||
-- -- See <https://github.com/neovim/nvim-lspconfig#keybindings-and-completion>
|
||||
-- lvim.lsp.on_attach_callback = function(client, bufnr)
|
||||
-- local function buf_set_option(...)
|
||||
-- vim.api.nvim_buf_set_option(bufnr, ...)
|
||||
-- end
|
||||
-- --Enable completion triggered by <c-x><c-o>
|
||||
-- buf_set_option("omnifunc", "v:lua.vim.lsp.omnifunc")
|
||||
-- end
|
||||
|
||||
-- set a formatter, this will override the language server formatting capabilities (if it exists)
|
||||
lvim.format_on_save = false
|
||||
local formatters = require "lvim.lsp.null-ls.formatters"
|
||||
formatters.setup {
|
||||
-- each formatter accepts a list of options identical to
|
||||
-- https://github.com/jose-elias-alvarez/null-ls.nvim/blob/main/doc/BUILTINS.md#Configuration
|
||||
{ command = "black", filetypes = { "python" } },
|
||||
{ command = "isort", filetypes = { "python" } },
|
||||
{
|
||||
command = "prettier",
|
||||
extra_args = { "--print-width", "100" },
|
||||
filetypes = { "typescript", "typescriptreact" },
|
||||
},
|
||||
{ command = "stylua", filetypes = { "lua" } },
|
||||
-- { command = "rustfmt", filetypes = { "rust" } },
|
||||
}
|
||||
|
||||
-- set additional linters
|
||||
local linters = require "lvim.lsp.null-ls.linters"
|
||||
linters.setup {
|
||||
-- Each linter accepts a list of options identical to
|
||||
-- https://github.com/jose-elias-alvarez/null-ls.nvim/blob/main/doc/BUILTINS.md#Configuration
|
||||
{ command = "flake8", filetypes = { "python" } },
|
||||
{ command = "shellcheck", extra_args = { "--severity", "warning" } },
|
||||
{ command = "codespell", filetypes = { "javascript", "python" } },
|
||||
{ command = "luacheck", filetypes = { "lua" } },
|
||||
}
|
3
home/.config/lvim/lua/user/lualine.lua
Normal file
3
home/.config/lvim/lua/user/lualine.lua
Normal file
|
@ -0,0 +1,3 @@
|
|||
-- Add location (row:col) to lualine
|
||||
local components = require "lvim.core.lualine.components"
|
||||
lvim.builtin.lualine.sections.lualine_z = { components.location }
|
24
home/.config/lvim/lua/user/options.lua
Normal file
24
home/.config/lvim/lua/user/options.lua
Normal file
|
@ -0,0 +1,24 @@
|
|||
-- Show whitespaces
|
||||
vim.opt.list = true -- Enable showing characters like <Tab>, <EOL>
|
||||
vim.opt.listchars = { tab = " ", trail = "·" } -- Specify which characters to show
|
||||
|
||||
-- Theme options
|
||||
vim.opt.cursorline = true -- Highlight cursor line
|
||||
vim.opt.laststatus = 2 -- Always show status line
|
||||
vim.opt.relativenumber = true -- Use relative line numbers
|
||||
vim.opt.wrap = true -- Allow line wrapping
|
||||
|
||||
-- Tab/Indent settings
|
||||
-- vim.opt.autoindent = true -- Enable automatic indenting
|
||||
-- vim.opt.expandtab = true -- Expand tabs into spaces
|
||||
-- vim.opt.tabstop = 2 -- Number of spaces a tab in file accounts for
|
||||
-- vim.opt.shiftwidth = 4 -- Indentation size for Tab
|
||||
-- vim.opt.softtabstop = 4 -- Tabs/Spaces interlop
|
||||
-- vim.opt.tabpagemax = 50 -- More tabs
|
||||
-- vim.opt.shiftround = true -- Always round indent to multiple of shiftwidth
|
||||
|
||||
-- Enable syntax highlighting in fenced markdown code-blocks
|
||||
vim.g.markdown_fenced_languages = {"html", "javascript", "typescript", "css", "scss", "lua", "vim", "python"}
|
||||
|
||||
-- Other
|
||||
vim.opt.shell = "/bin/sh"
|
101
home/.config/lvim/lua/user/plugins.lua
Normal file
101
home/.config/lvim/lua/user/plugins.lua
Normal file
|
@ -0,0 +1,101 @@
|
|||
-- Additional Plugins
|
||||
lvim.plugins = {
|
||||
{ "wakatime/vim-wakatime" },
|
||||
|
||||
-- LSP
|
||||
{
|
||||
-- Tree-like view for symbols in current file using LSP
|
||||
"simrat39/symbols-outline.nvim",
|
||||
config = function()
|
||||
require("symbols-outline").setup {
|
||||
width = 18,
|
||||
autofold_depth = 1,
|
||||
}
|
||||
end,
|
||||
},
|
||||
{
|
||||
-- Show function signature while typing
|
||||
"ray-x/lsp_signature.nvim",
|
||||
config = function()
|
||||
require("lsp_signature").on_attach()
|
||||
end,
|
||||
event = "BufRead",
|
||||
},
|
||||
|
||||
-- User interface
|
||||
{
|
||||
-- Code minimap for easy orientation in a longer file
|
||||
"wfxr/minimap.vim",
|
||||
run = "cargo install --locked code-minimap",
|
||||
config = function()
|
||||
vim.cmd "let g:minimap_width = 10"
|
||||
end,
|
||||
},
|
||||
{
|
||||
-- Integrated lf file manager
|
||||
"ptzz/lf.vim",
|
||||
config = function()
|
||||
vim.g.lf_map_keys = 0
|
||||
end,
|
||||
requires = "voldikss/vim-floaterm",
|
||||
},
|
||||
|
||||
-- Github copilot for code completion
|
||||
{
|
||||
"zbirenbaum/copilot.lua",
|
||||
event = { "VimEnter" },
|
||||
config = function()
|
||||
vim.defer_fn(function()
|
||||
require("copilot").setup()
|
||||
end, 100)
|
||||
end,
|
||||
},
|
||||
{ "zbirenbaum/copilot-cmp", after = { "copilot.lua", "nvim-cmp" } },
|
||||
|
||||
--
|
||||
{ "jasonccox/vim-wayland-clipboard" },
|
||||
|
||||
-- Yuck.vim (eww configuration language support)
|
||||
{ "elkowar/yuck.vim" },
|
||||
|
||||
-- Treesitter
|
||||
-- {
|
||||
-- -- Colorize matching parenthesis using treesitter
|
||||
-- "p00f/nvim-ts-rainbow",
|
||||
-- },
|
||||
{
|
||||
-- Treesitter information shown directly in neovim
|
||||
"nvim-treesitter/playground",
|
||||
},
|
||||
{
|
||||
-- Alwats show class/function name we're in
|
||||
"romgrk/nvim-treesitter-context",
|
||||
config = function()
|
||||
require("treesitter-context").setup {
|
||||
enable = true, -- Enable this plugin (Can be enabled/disabled later via commands)
|
||||
throttle = true, -- Throttles plugin updates (may improve performance)
|
||||
max_lines = 0, -- How many lines the window should span. Values <= 0 mean no limit.
|
||||
patterns = { -- Match patterns for TS nodes. These get wrapped to match at word boundaries.
|
||||
-- For all filetypes
|
||||
-- Note that setting an entry here replaces all other patterns for this entry.
|
||||
-- By setting the 'default' entry below, you can control which nodes you want to
|
||||
-- appear in the context window.
|
||||
default = {
|
||||
"class",
|
||||
"function",
|
||||
"method",
|
||||
"while",
|
||||
"for",
|
||||
"if",
|
||||
"switch",
|
||||
"case",
|
||||
},
|
||||
},
|
||||
}
|
||||
end,
|
||||
},
|
||||
}
|
||||
|
||||
-- Register copilot as cmp source
|
||||
lvim.builtin.cmp.formatting.source_names["copilot"] = "(Copilot)"
|
||||
table.insert(lvim.builtin.cmp.sources, 1, { name = "copilot" })
|
42
home/.config/lvim/lua/user/treesitter.lua
Normal file
42
home/.config/lvim/lua/user/treesitter.lua
Normal file
|
@ -0,0 +1,42 @@
|
|||
-- if you don't want all the parsers change this to a table of the ones you want
|
||||
lvim.builtin.treesitter.ensure_installed = {
|
||||
"bash",
|
||||
"c",
|
||||
"javascript",
|
||||
"json",
|
||||
"lua",
|
||||
"python",
|
||||
"typescript",
|
||||
"tsx",
|
||||
"css",
|
||||
"rust",
|
||||
"java",
|
||||
"yaml",
|
||||
}
|
||||
|
||||
lvim.builtin.treesitter.ignore_install = {}
|
||||
lvim.builtin.treesitter.highlight.enabled = true
|
||||
-- lvim.builtin.treesitter.rainbow.enable = true
|
||||
|
||||
local parser_config = require "nvim-treesitter.parsers".get_parser_configs()
|
||||
parser_config.apparmor = {
|
||||
install_info = {
|
||||
url = "~/Personal/Programming/GitHub/Other/tree-sitter-apparmor", -- local path or git repo
|
||||
files = {"src/parser.c"},
|
||||
-- optional entries:
|
||||
branch = "main", -- default branch in case of git repo if different from master
|
||||
generate_requires_npm = false, -- if stand-alone parser without npm dependencies
|
||||
requires_generate_from_grammar = false, -- if folder contains pre-generated src/parser.c
|
||||
},
|
||||
filetype = "apparmor", -- if filetype does not match the parser name
|
||||
}
|
||||
|
||||
local ft_to_parser = require"nvim-treesitter.parsers".filetype_to_parsername
|
||||
ft_to_parser.apparmor = "apparmor"
|
||||
|
||||
-- Temporary treesitter
|
||||
lvim.keys.normal_mode["gu"] = ":TSUpdate apparmor<CR>"
|
||||
lvim.keys.normal_mode["gU"] = ":TSToggle apparmor<CR>"
|
||||
lvim.keys.normal_mode["gt"] = ":TSPlaygroundToggle<CR>"
|
||||
lvim.keys.normal_mode["gh"] = ":TSNodeUnderCursor<CR>"
|
||||
lvim.keys.normal_mode["gH"] = ":TSHighlightCapturesUnderCursor<CR>"
|
499
home/.config/lvim/plugin/packer_compiled.lua
Normal file
499
home/.config/lvim/plugin/packer_compiled.lua
Normal file
|
@ -0,0 +1,499 @@
|
|||
-- Automatically generated packer.nvim plugin loader code
|
||||
|
||||
if vim.api.nvim_call_function('has', {'nvim-0.5'}) ~= 1 then
|
||||
vim.api.nvim_command('echohl WarningMsg | echom "Invalid Neovim version for packer.nvim! | echohl None"')
|
||||
return
|
||||
end
|
||||
|
||||
vim.api.nvim_command('packadd packer.nvim')
|
||||
|
||||
local no_errors, error_msg = pcall(function()
|
||||
|
||||
_G._packer = _G._packer or {}
|
||||
_G._packer.inside_compile = true
|
||||
|
||||
local time
|
||||
local profile_info
|
||||
local should_profile = false
|
||||
if should_profile then
|
||||
local hrtime = vim.loop.hrtime
|
||||
profile_info = {}
|
||||
time = function(chunk, start)
|
||||
if start then
|
||||
profile_info[chunk] = hrtime()
|
||||
else
|
||||
profile_info[chunk] = (hrtime() - profile_info[chunk]) / 1e6
|
||||
end
|
||||
end
|
||||
else
|
||||
time = function(chunk, start) end
|
||||
end
|
||||
|
||||
local function save_profiles(threshold)
|
||||
local sorted_times = {}
|
||||
for chunk_name, time_taken in pairs(profile_info) do
|
||||
sorted_times[#sorted_times + 1] = {chunk_name, time_taken}
|
||||
end
|
||||
table.sort(sorted_times, function(a, b) return a[2] > b[2] end)
|
||||
local results = {}
|
||||
for i, elem in ipairs(sorted_times) do
|
||||
if not threshold or threshold and elem[2] > threshold then
|
||||
results[i] = elem[1] .. ' took ' .. elem[2] .. 'ms'
|
||||
end
|
||||
end
|
||||
if threshold then
|
||||
table.insert(results, '(Only showing plugins that took longer than ' .. threshold .. ' ms ' .. 'to load)')
|
||||
end
|
||||
|
||||
_G._packer.profile_output = results
|
||||
end
|
||||
|
||||
time([[Luarocks path setup]], true)
|
||||
local package_path_str = "/home/itsdrike/.cache/lvim/packer_hererocks/2.1.0-beta3/share/lua/5.1/?.lua;/home/itsdrike/.cache/lvim/packer_hererocks/2.1.0-beta3/share/lua/5.1/?/init.lua;/home/itsdrike/.cache/lvim/packer_hererocks/2.1.0-beta3/lib/luarocks/rocks-5.1/?.lua;/home/itsdrike/.cache/lvim/packer_hererocks/2.1.0-beta3/lib/luarocks/rocks-5.1/?/init.lua"
|
||||
local install_cpath_pattern = "/home/itsdrike/.cache/lvim/packer_hererocks/2.1.0-beta3/lib/lua/5.1/?.so"
|
||||
if not string.find(package.path, package_path_str, 1, true) then
|
||||
package.path = package.path .. ';' .. package_path_str
|
||||
end
|
||||
|
||||
if not string.find(package.cpath, install_cpath_pattern, 1, true) then
|
||||
package.cpath = package.cpath .. ';' .. install_cpath_pattern
|
||||
end
|
||||
|
||||
time([[Luarocks path setup]], false)
|
||||
time([[try_loadstring definition]], true)
|
||||
local function try_loadstring(s, component, name)
|
||||
local success, result = pcall(loadstring(s), name, _G.packer_plugins[name])
|
||||
if not success then
|
||||
vim.schedule(function()
|
||||
vim.api.nvim_notify('packer.nvim: Error running ' .. component .. ' for ' .. name .. ': ' .. result, vim.log.levels.ERROR, {})
|
||||
end)
|
||||
end
|
||||
return result
|
||||
end
|
||||
|
||||
time([[try_loadstring definition]], false)
|
||||
time([[Defining packer_plugins]], true)
|
||||
_G.packer_plugins = {
|
||||
["Comment.nvim"] = {
|
||||
config = { "\27LJ\2\n?\0\0\3\0\3\0\0066\0\0\0'\2\1\0B\0\2\0029\0\2\0B\0\1\1K\0\1\0\nsetup\22lvim.core.comment\frequire\0" },
|
||||
loaded = false,
|
||||
needs_bufread = false,
|
||||
only_cond = false,
|
||||
path = "/home/itsdrike/.local/share/lunarvim/site/pack/packer/opt/Comment.nvim",
|
||||
url = "https://github.com/numToStr/Comment.nvim"
|
||||
},
|
||||
["FixCursorHold.nvim"] = {
|
||||
loaded = true,
|
||||
path = "/home/itsdrike/.local/share/lunarvim/site/pack/packer/start/FixCursorHold.nvim",
|
||||
url = "https://github.com/antoinemadec/FixCursorHold.nvim"
|
||||
},
|
||||
LuaSnip = {
|
||||
config = { "\27LJ\2\nñ\3\0\0\v\0\23\00166\0\0\0'\2\1\0B\0\2\0024\1\0\0006\2\2\0009\2\3\0029\2\4\0029\2\5\0029\2\6\2\15\0\2\0X\3\f€\21\2\1\0\22\2\0\0029\3\a\0006\5\b\0B\5\1\2'\6\t\0'\a\n\0'\b\v\0'\t\f\0'\n\r\0B\3\a\2<\3\2\0019\2\a\0006\4\14\0B\4\1\2'\5\15\0B\2\3\0029\3\16\0\18\5\2\0B\3\2\2\15\0\3\0X\4\3€\21\3\1\0\22\3\0\3<\2\3\0016\3\0\0'\5\17\0B\3\2\0029\3\18\3B\3\1\0016\3\0\0'\5\19\0B\3\2\0029\3\18\0035\5\20\0=\1\21\5B\3\2\0016\3\0\0'\5\22\0B\3\2\0029\3\18\3B\3\1\1K\0\1\0\"luasnip.loaders.from_snipmate\npaths\1\0\0 luasnip.loaders.from_vscode\14lazy_load\29luasnip.loaders.from_lua\17is_directory\rsnippets\19get_config_dir\22friendly-snippets\nstart\vpacker\tpack\tsite\20get_runtime_dir\15join_paths\22friendly_snippets\fsources\fluasnip\fbuiltin\tlvim\15lvim.utils\frequire\2\0" },
|
||||
loaded = true,
|
||||
path = "/home/itsdrike/.local/share/lunarvim/site/pack/packer/start/LuaSnip",
|
||||
url = "https://github.com/L3MON4D3/LuaSnip"
|
||||
},
|
||||
["alpha-nvim"] = {
|
||||
config = { "\27LJ\2\n=\0\0\3\0\3\0\0066\0\0\0'\2\1\0B\0\2\0029\0\2\0B\0\1\1K\0\1\0\nsetup\20lvim.core.alpha\frequire\0" },
|
||||
loaded = true,
|
||||
path = "/home/itsdrike/.local/share/lunarvim/site/pack/packer/start/alpha-nvim",
|
||||
url = "https://github.com/goolord/alpha-nvim"
|
||||
},
|
||||
["bufferline.nvim"] = {
|
||||
config = { "\27LJ\2\nB\0\0\3\0\3\0\0066\0\0\0'\2\1\0B\0\2\0029\0\2\0B\0\1\1K\0\1\0\nsetup\25lvim.core.bufferline\frequire\0" },
|
||||
loaded = false,
|
||||
needs_bufread = false,
|
||||
only_cond = false,
|
||||
path = "/home/itsdrike/.local/share/lunarvim/site/pack/packer/opt/bufferline.nvim",
|
||||
url = "https://github.com/akinsho/bufferline.nvim"
|
||||
},
|
||||
["cmp-buffer"] = {
|
||||
loaded = true,
|
||||
path = "/home/itsdrike/.local/share/lunarvim/site/pack/packer/start/cmp-buffer",
|
||||
url = "https://github.com/hrsh7th/cmp-buffer"
|
||||
},
|
||||
["cmp-nvim-lsp"] = {
|
||||
loaded = true,
|
||||
path = "/home/itsdrike/.local/share/lunarvim/site/pack/packer/start/cmp-nvim-lsp",
|
||||
url = "https://github.com/hrsh7th/cmp-nvim-lsp"
|
||||
},
|
||||
["cmp-path"] = {
|
||||
loaded = true,
|
||||
path = "/home/itsdrike/.local/share/lunarvim/site/pack/packer/start/cmp-path",
|
||||
url = "https://github.com/hrsh7th/cmp-path"
|
||||
},
|
||||
cmp_luasnip = {
|
||||
loaded = true,
|
||||
path = "/home/itsdrike/.local/share/lunarvim/site/pack/packer/start/cmp_luasnip",
|
||||
url = "https://github.com/saadparwaiz1/cmp_luasnip"
|
||||
},
|
||||
["copilot-cmp"] = {
|
||||
load_after = {
|
||||
["copilot.lua"] = true
|
||||
},
|
||||
loaded = false,
|
||||
needs_bufread = false,
|
||||
path = "/home/itsdrike/.local/share/lunarvim/site/pack/packer/opt/copilot-cmp",
|
||||
url = "https://github.com/zbirenbaum/copilot-cmp"
|
||||
},
|
||||
["copilot.lua"] = {
|
||||
after = { "copilot-cmp" },
|
||||
config = { "\27LJ\2\n5\0\0\3\0\3\0\0066\0\0\0'\2\1\0B\0\2\0029\0\2\0B\0\1\1K\0\1\0\nsetup\fcopilot\frequire-\1\0\4\0\3\0\0066\0\0\0009\0\1\0003\2\2\0)\3d\0B\0\3\1K\0\1\0\0\rdefer_fn\bvim\0" },
|
||||
loaded = false,
|
||||
needs_bufread = false,
|
||||
only_cond = false,
|
||||
path = "/home/itsdrike/.local/share/lunarvim/site/pack/packer/opt/copilot.lua",
|
||||
url = "https://github.com/zbirenbaum/copilot.lua"
|
||||
},
|
||||
["dap-buddy.nvim"] = {
|
||||
loaded = true,
|
||||
path = "/home/itsdrike/.local/share/lunarvim/site/pack/packer/start/dap-buddy.nvim",
|
||||
url = "https://github.com/Pocco81/dap-buddy.nvim"
|
||||
},
|
||||
["friendly-snippets"] = {
|
||||
loaded = true,
|
||||
path = "/home/itsdrike/.local/share/lunarvim/site/pack/packer/start/friendly-snippets",
|
||||
url = "https://github.com/rafamadriz/friendly-snippets"
|
||||
},
|
||||
["gitsigns.nvim"] = {
|
||||
config = { "\27LJ\2\n@\0\0\3\0\3\0\0066\0\0\0'\2\1\0B\0\2\0029\0\2\0B\0\1\1K\0\1\0\nsetup\23lvim.core.gitsigns\frequire\0" },
|
||||
loaded = false,
|
||||
needs_bufread = false,
|
||||
only_cond = false,
|
||||
path = "/home/itsdrike/.local/share/lunarvim/site/pack/packer/opt/gitsigns.nvim",
|
||||
url = "https://github.com/lewis6991/gitsigns.nvim"
|
||||
},
|
||||
["lf.vim"] = {
|
||||
config = { "\27LJ\2\n-\0\0\2\0\3\0\0056\0\0\0009\0\1\0)\1\0\0=\1\2\0K\0\1\0\16lf_map_keys\6g\bvim\0" },
|
||||
loaded = true,
|
||||
path = "/home/itsdrike/.local/share/lunarvim/site/pack/packer/start/lf.vim",
|
||||
url = "https://github.com/ptzz/lf.vim"
|
||||
},
|
||||
["lsp_signature.nvim"] = {
|
||||
config = { "\27LJ\2\n?\0\0\3\0\3\0\0066\0\0\0'\2\1\0B\0\2\0029\0\2\0B\0\1\1K\0\1\0\14on_attach\18lsp_signature\frequire\0" },
|
||||
loaded = false,
|
||||
needs_bufread = false,
|
||||
only_cond = false,
|
||||
path = "/home/itsdrike/.local/share/lunarvim/site/pack/packer/opt/lsp_signature.nvim",
|
||||
url = "https://github.com/ray-x/lsp_signature.nvim"
|
||||
},
|
||||
["lua-dev.nvim"] = {
|
||||
loaded = false,
|
||||
needs_bufread = false,
|
||||
only_cond = false,
|
||||
path = "/home/itsdrike/.local/share/lunarvim/site/pack/packer/opt/lua-dev.nvim",
|
||||
url = "https://github.com/folke/lua-dev.nvim"
|
||||
},
|
||||
["lualine.nvim"] = {
|
||||
config = { "\27LJ\2\n?\0\0\3\0\3\0\0066\0\0\0'\2\1\0B\0\2\0029\0\2\0B\0\1\1K\0\1\0\nsetup\22lvim.core.lualine\frequire\0" },
|
||||
loaded = true,
|
||||
path = "/home/itsdrike/.local/share/lunarvim/site/pack/packer/start/lualine.nvim",
|
||||
url = "https://github.com/nvim-lualine/lualine.nvim"
|
||||
},
|
||||
["mason-lspconfig.nvim"] = {
|
||||
loaded = true,
|
||||
path = "/home/itsdrike/.local/share/lunarvim/site/pack/packer/start/mason-lspconfig.nvim",
|
||||
url = "https://github.com/williamboman/mason-lspconfig.nvim"
|
||||
},
|
||||
["mason.nvim"] = {
|
||||
config = { "\27LJ\2\n=\0\0\3\0\3\0\0066\0\0\0'\2\1\0B\0\2\0029\0\2\0B\0\1\1K\0\1\0\nsetup\20lvim.core.mason\frequire\0" },
|
||||
loaded = true,
|
||||
path = "/home/itsdrike/.local/share/lunarvim/site/pack/packer/start/mason.nvim",
|
||||
url = "https://github.com/williamboman/mason.nvim"
|
||||
},
|
||||
["minimap.vim"] = {
|
||||
config = { "\27LJ\2\n<\0\0\3\0\3\0\0056\0\0\0009\0\1\0'\2\2\0B\0\2\1K\0\1\0\29let g:minimap_width = 10\bcmd\bvim\0" },
|
||||
loaded = true,
|
||||
path = "/home/itsdrike/.local/share/lunarvim/site/pack/packer/start/minimap.vim",
|
||||
url = "https://github.com/wfxr/minimap.vim"
|
||||
},
|
||||
["nlsp-settings.nvim"] = {
|
||||
loaded = true,
|
||||
path = "/home/itsdrike/.local/share/lunarvim/site/pack/packer/start/nlsp-settings.nvim",
|
||||
url = "https://github.com/tamago324/nlsp-settings.nvim"
|
||||
},
|
||||
["null-ls.nvim"] = {
|
||||
loaded = true,
|
||||
path = "/home/itsdrike/.local/share/lunarvim/site/pack/packer/start/null-ls.nvim",
|
||||
url = "https://github.com/jose-elias-alvarez/null-ls.nvim"
|
||||
},
|
||||
["nvim-autopairs"] = {
|
||||
config = { "\27LJ\2\nA\0\0\3\0\3\0\0066\0\0\0'\2\1\0B\0\2\0029\0\2\0B\0\1\1K\0\1\0\nsetup\24lvim.core.autopairs\frequire\0" },
|
||||
loaded = true,
|
||||
path = "/home/itsdrike/.local/share/lunarvim/site/pack/packer/start/nvim-autopairs",
|
||||
url = "https://github.com/windwp/nvim-autopairs"
|
||||
},
|
||||
["nvim-cmp"] = {
|
||||
after = { "copilot-cmp" },
|
||||
config = { "\27LJ\2\n`\0\0\3\0\6\0\v6\0\0\0009\0\1\0009\0\2\0\15\0\0\0X\1\5€6\0\3\0'\2\4\0B\0\2\0029\0\5\0B\0\1\1K\0\1\0\nsetup\18lvim.core.cmp\frequire\bcmp\fbuiltin\tlvim\0" },
|
||||
loaded = true,
|
||||
only_config = true,
|
||||
path = "/home/itsdrike/.local/share/lunarvim/site/pack/packer/start/nvim-cmp",
|
||||
url = "https://github.com/hrsh7th/nvim-cmp"
|
||||
},
|
||||
["nvim-dap"] = {
|
||||
config = { "\27LJ\2\n;\0\0\3\0\3\0\0066\0\0\0'\2\1\0B\0\2\0029\0\2\0B\0\1\1K\0\1\0\nsetup\18lvim.core.dap\frequire\0" },
|
||||
loaded = true,
|
||||
path = "/home/itsdrike/.local/share/lunarvim/site/pack/packer/start/nvim-dap",
|
||||
url = "https://github.com/mfussenegger/nvim-dap"
|
||||
},
|
||||
["nvim-lspconfig"] = {
|
||||
loaded = true,
|
||||
path = "/home/itsdrike/.local/share/lunarvim/site/pack/packer/start/nvim-lspconfig",
|
||||
url = "https://github.com/neovim/nvim-lspconfig"
|
||||
},
|
||||
["nvim-notify"] = {
|
||||
config = { "\27LJ\2\n>\0\0\3\0\3\0\0066\0\0\0'\2\1\0B\0\2\0029\0\2\0B\0\1\1K\0\1\0\nsetup\21lvim.core.notify\frequire\0" },
|
||||
loaded = true,
|
||||
path = "/home/itsdrike/.local/share/lunarvim/site/pack/packer/start/nvim-notify",
|
||||
url = "https://github.com/rcarriga/nvim-notify"
|
||||
},
|
||||
["nvim-tree.lua"] = {
|
||||
config = { "\27LJ\2\n@\0\0\3\0\3\0\0066\0\0\0'\2\1\0B\0\2\0029\0\2\0B\0\1\1K\0\1\0\nsetup\23lvim.core.nvimtree\frequire\0" },
|
||||
loaded = true,
|
||||
path = "/home/itsdrike/.local/share/lunarvim/site/pack/packer/start/nvim-tree.lua",
|
||||
url = "https://github.com/kyazdani42/nvim-tree.lua"
|
||||
},
|
||||
["nvim-treesitter"] = {
|
||||
config = { "\27LJ\2\nB\0\0\3\0\3\0\0066\0\0\0'\2\1\0B\0\2\0029\0\2\0B\0\1\1K\0\1\0\nsetup\25lvim.core.treesitter\frequire\0" },
|
||||
loaded = true,
|
||||
path = "/home/itsdrike/.local/share/lunarvim/site/pack/packer/start/nvim-treesitter",
|
||||
url = "https://github.com/nvim-treesitter/nvim-treesitter"
|
||||
},
|
||||
["nvim-treesitter-context"] = {
|
||||
config = { "\27LJ\2\n¼\1\0\0\5\0\b\0\v6\0\0\0'\2\1\0B\0\2\0029\0\2\0005\2\3\0005\3\5\0005\4\4\0=\4\6\3=\3\a\2B\0\2\1K\0\1\0\rpatterns\fdefault\1\0\0\1\t\0\0\nclass\rfunction\vmethod\nwhile\bfor\aif\vswitch\tcase\1\0\3\rthrottle\2\venable\2\14max_lines\3\0\nsetup\23treesitter-context\frequire\0" },
|
||||
loaded = true,
|
||||
path = "/home/itsdrike/.local/share/lunarvim/site/pack/packer/start/nvim-treesitter-context",
|
||||
url = "https://github.com/romgrk/nvim-treesitter-context"
|
||||
},
|
||||
["nvim-ts-context-commentstring"] = {
|
||||
loaded = false,
|
||||
needs_bufread = false,
|
||||
only_cond = false,
|
||||
path = "/home/itsdrike/.local/share/lunarvim/site/pack/packer/opt/nvim-ts-context-commentstring",
|
||||
url = "https://github.com/JoosepAlviste/nvim-ts-context-commentstring"
|
||||
},
|
||||
["nvim-web-devicons"] = {
|
||||
loaded = true,
|
||||
path = "/home/itsdrike/.local/share/lunarvim/site/pack/packer/start/nvim-web-devicons",
|
||||
url = "https://github.com/kyazdani42/nvim-web-devicons"
|
||||
},
|
||||
["onedarker.nvim"] = {
|
||||
config = { "\27LJ\2\nš\1\0\0\3\0\t\0\0196\0\0\0\15\0\0\0X\1\15€6\0\0\0009\0\1\0\a\0\2\0X\0\v€6\0\3\0'\2\2\0B\0\2\0029\0\4\0B\0\1\0016\0\0\0009\0\5\0009\0\6\0009\0\a\0'\1\2\0=\1\b\0K\0\1\0\ntheme\foptions\flualine\fbuiltin\nsetup\frequire\14onedarker\16colorscheme\tlvim\30\1\0\3\0\2\0\0046\0\0\0003\2\1\0B\0\2\1K\0\1\0\0\npcall\0" },
|
||||
loaded = true,
|
||||
path = "/home/itsdrike/.local/share/lunarvim/site/pack/packer/start/onedarker.nvim",
|
||||
url = "https://github.com/lunarvim/onedarker.nvim"
|
||||
},
|
||||
["packer.nvim"] = {
|
||||
loaded = true,
|
||||
path = "/home/itsdrike/.local/share/lunarvim/site/pack/packer/start/packer.nvim",
|
||||
url = "https://github.com/wbthomason/packer.nvim"
|
||||
},
|
||||
playground = {
|
||||
loaded = true,
|
||||
path = "/home/itsdrike/.local/share/lunarvim/site/pack/packer/start/playground",
|
||||
url = "https://github.com/nvim-treesitter/playground"
|
||||
},
|
||||
["plenary.nvim"] = {
|
||||
loaded = true,
|
||||
path = "/home/itsdrike/.local/share/lunarvim/site/pack/packer/start/plenary.nvim",
|
||||
url = "https://github.com/nvim-lua/plenary.nvim"
|
||||
},
|
||||
["popup.nvim"] = {
|
||||
loaded = true,
|
||||
path = "/home/itsdrike/.local/share/lunarvim/site/pack/packer/start/popup.nvim",
|
||||
url = "https://github.com/nvim-lua/popup.nvim"
|
||||
},
|
||||
["project.nvim"] = {
|
||||
config = { "\27LJ\2\n?\0\0\3\0\3\0\0066\0\0\0'\2\1\0B\0\2\0029\0\2\0B\0\1\1K\0\1\0\nsetup\22lvim.core.project\frequire\0" },
|
||||
loaded = true,
|
||||
path = "/home/itsdrike/.local/share/lunarvim/site/pack/packer/start/project.nvim",
|
||||
url = "https://github.com/ahmedkhalf/project.nvim"
|
||||
},
|
||||
["schemastore.nvim"] = {
|
||||
loaded = true,
|
||||
path = "/home/itsdrike/.local/share/lunarvim/site/pack/packer/start/schemastore.nvim",
|
||||
url = "https://github.com/b0o/schemastore.nvim"
|
||||
},
|
||||
["structlog.nvim"] = {
|
||||
loaded = true,
|
||||
path = "/home/itsdrike/.local/share/lunarvim/site/pack/packer/start/structlog.nvim",
|
||||
url = "https://github.com/Tastyep/structlog.nvim"
|
||||
},
|
||||
["symbols-outline.nvim"] = {
|
||||
config = { "\27LJ\2\n]\0\0\3\0\4\0\a6\0\0\0'\2\1\0B\0\2\0029\0\2\0005\2\3\0B\0\2\1K\0\1\0\1\0\2\nwidth\3\18\19autofold_depth\3\1\nsetup\20symbols-outline\frequire\0" },
|
||||
loaded = true,
|
||||
path = "/home/itsdrike/.local/share/lunarvim/site/pack/packer/start/symbols-outline.nvim",
|
||||
url = "https://github.com/simrat39/symbols-outline.nvim"
|
||||
},
|
||||
["telescope-fzf-native.nvim"] = {
|
||||
loaded = true,
|
||||
path = "/home/itsdrike/.local/share/lunarvim/site/pack/packer/start/telescope-fzf-native.nvim",
|
||||
url = "https://github.com/nvim-telescope/telescope-fzf-native.nvim"
|
||||
},
|
||||
["telescope.nvim"] = {
|
||||
config = { "\27LJ\2\nA\0\0\3\0\3\0\0066\0\0\0'\2\1\0B\0\2\0029\0\2\0B\0\1\1K\0\1\0\nsetup\24lvim.core.telescope\frequire\0" },
|
||||
loaded = true,
|
||||
path = "/home/itsdrike/.local/share/lunarvim/site/pack/packer/start/telescope.nvim",
|
||||
url = "https://github.com/nvim-telescope/telescope.nvim"
|
||||
},
|
||||
["toggleterm.nvim"] = {
|
||||
config = { "\27LJ\2\n@\0\0\3\0\3\0\0066\0\0\0'\2\1\0B\0\2\0029\0\2\0B\0\1\1K\0\1\0\nsetup\23lvim.core.terminal\frequire\0" },
|
||||
loaded = false,
|
||||
needs_bufread = false,
|
||||
only_cond = false,
|
||||
path = "/home/itsdrike/.local/share/lunarvim/site/pack/packer/opt/toggleterm.nvim",
|
||||
url = "https://github.com/akinsho/toggleterm.nvim"
|
||||
},
|
||||
["vim-floaterm"] = {
|
||||
loaded = true,
|
||||
path = "/home/itsdrike/.local/share/lunarvim/site/pack/packer/start/vim-floaterm",
|
||||
url = "https://github.com/voldikss/vim-floaterm"
|
||||
},
|
||||
["vim-wakatime"] = {
|
||||
loaded = true,
|
||||
path = "/home/itsdrike/.local/share/lunarvim/site/pack/packer/start/vim-wakatime",
|
||||
url = "https://github.com/wakatime/vim-wakatime"
|
||||
},
|
||||
["vim-wayland-clipboard"] = {
|
||||
loaded = true,
|
||||
path = "/home/itsdrike/.local/share/lunarvim/site/pack/packer/start/vim-wayland-clipboard",
|
||||
url = "https://github.com/jasonccox/vim-wayland-clipboard"
|
||||
},
|
||||
["which-key.nvim"] = {
|
||||
config = { "\27LJ\2\nA\0\0\3\0\3\0\0066\0\0\0'\2\1\0B\0\2\0029\0\2\0B\0\1\1K\0\1\0\nsetup\24lvim.core.which-key\frequire\0" },
|
||||
loaded = false,
|
||||
needs_bufread = false,
|
||||
only_cond = false,
|
||||
path = "/home/itsdrike/.local/share/lunarvim/site/pack/packer/opt/which-key.nvim",
|
||||
url = "https://github.com/folke/which-key.nvim"
|
||||
},
|
||||
["yuck.vim"] = {
|
||||
loaded = true,
|
||||
path = "/home/itsdrike/.local/share/lunarvim/site/pack/packer/start/yuck.vim",
|
||||
url = "https://github.com/elkowar/yuck.vim"
|
||||
}
|
||||
}
|
||||
|
||||
time([[Defining packer_plugins]], false)
|
||||
local module_lazy_loads = {
|
||||
["^lua%-dev"] = "lua-dev.nvim"
|
||||
}
|
||||
local lazy_load_called = {['packer.load'] = true}
|
||||
local function lazy_load_module(module_name)
|
||||
local to_load = {}
|
||||
if lazy_load_called[module_name] then return nil end
|
||||
lazy_load_called[module_name] = true
|
||||
for module_pat, plugin_name in pairs(module_lazy_loads) do
|
||||
if not _G.packer_plugins[plugin_name].loaded and string.match(module_name, module_pat) then
|
||||
to_load[#to_load + 1] = plugin_name
|
||||
end
|
||||
end
|
||||
|
||||
if #to_load > 0 then
|
||||
require('packer.load')(to_load, {module = module_name}, _G.packer_plugins)
|
||||
local loaded_mod = package.loaded[module_name]
|
||||
if loaded_mod then
|
||||
return function(modname) return loaded_mod end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if not vim.g.packer_custom_loader_enabled then
|
||||
table.insert(package.loaders, 1, lazy_load_module)
|
||||
vim.g.packer_custom_loader_enabled = true
|
||||
end
|
||||
|
||||
-- Config for: telescope.nvim
|
||||
time([[Config for telescope.nvim]], true)
|
||||
try_loadstring("\27LJ\2\nA\0\0\3\0\3\0\0066\0\0\0'\2\1\0B\0\2\0029\0\2\0B\0\1\1K\0\1\0\nsetup\24lvim.core.telescope\frequire\0", "config", "telescope.nvim")
|
||||
time([[Config for telescope.nvim]], false)
|
||||
-- Config for: nvim-cmp
|
||||
time([[Config for nvim-cmp]], true)
|
||||
try_loadstring("\27LJ\2\n`\0\0\3\0\6\0\v6\0\0\0009\0\1\0009\0\2\0\15\0\0\0X\1\5€6\0\3\0'\2\4\0B\0\2\0029\0\5\0B\0\1\1K\0\1\0\nsetup\18lvim.core.cmp\frequire\bcmp\fbuiltin\tlvim\0", "config", "nvim-cmp")
|
||||
time([[Config for nvim-cmp]], false)
|
||||
-- Config for: minimap.vim
|
||||
time([[Config for minimap.vim]], true)
|
||||
try_loadstring("\27LJ\2\n<\0\0\3\0\3\0\0056\0\0\0009\0\1\0'\2\2\0B\0\2\1K\0\1\0\29let g:minimap_width = 10\bcmd\bvim\0", "config", "minimap.vim")
|
||||
time([[Config for minimap.vim]], false)
|
||||
-- Config for: onedarker.nvim
|
||||
time([[Config for onedarker.nvim]], true)
|
||||
try_loadstring("\27LJ\2\nš\1\0\0\3\0\t\0\0196\0\0\0\15\0\0\0X\1\15€6\0\0\0009\0\1\0\a\0\2\0X\0\v€6\0\3\0'\2\2\0B\0\2\0029\0\4\0B\0\1\0016\0\0\0009\0\5\0009\0\6\0009\0\a\0'\1\2\0=\1\b\0K\0\1\0\ntheme\foptions\flualine\fbuiltin\nsetup\frequire\14onedarker\16colorscheme\tlvim\30\1\0\3\0\2\0\0046\0\0\0003\2\1\0B\0\2\1K\0\1\0\0\npcall\0", "config", "onedarker.nvim")
|
||||
time([[Config for onedarker.nvim]], false)
|
||||
-- Config for: nvim-dap
|
||||
time([[Config for nvim-dap]], true)
|
||||
try_loadstring("\27LJ\2\n;\0\0\3\0\3\0\0066\0\0\0'\2\1\0B\0\2\0029\0\2\0B\0\1\1K\0\1\0\nsetup\18lvim.core.dap\frequire\0", "config", "nvim-dap")
|
||||
time([[Config for nvim-dap]], false)
|
||||
-- Config for: nvim-treesitter
|
||||
time([[Config for nvim-treesitter]], true)
|
||||
try_loadstring("\27LJ\2\nB\0\0\3\0\3\0\0066\0\0\0'\2\1\0B\0\2\0029\0\2\0B\0\1\1K\0\1\0\nsetup\25lvim.core.treesitter\frequire\0", "config", "nvim-treesitter")
|
||||
time([[Config for nvim-treesitter]], false)
|
||||
-- Config for: nvim-treesitter-context
|
||||
time([[Config for nvim-treesitter-context]], true)
|
||||
try_loadstring("\27LJ\2\n¼\1\0\0\5\0\b\0\v6\0\0\0'\2\1\0B\0\2\0029\0\2\0005\2\3\0005\3\5\0005\4\4\0=\4\6\3=\3\a\2B\0\2\1K\0\1\0\rpatterns\fdefault\1\0\0\1\t\0\0\nclass\rfunction\vmethod\nwhile\bfor\aif\vswitch\tcase\1\0\3\rthrottle\2\venable\2\14max_lines\3\0\nsetup\23treesitter-context\frequire\0", "config", "nvim-treesitter-context")
|
||||
time([[Config for nvim-treesitter-context]], false)
|
||||
-- Config for: lf.vim
|
||||
time([[Config for lf.vim]], true)
|
||||
try_loadstring("\27LJ\2\n-\0\0\2\0\3\0\0056\0\0\0009\0\1\0)\1\0\0=\1\2\0K\0\1\0\16lf_map_keys\6g\bvim\0", "config", "lf.vim")
|
||||
time([[Config for lf.vim]], false)
|
||||
-- Config for: alpha-nvim
|
||||
time([[Config for alpha-nvim]], true)
|
||||
try_loadstring("\27LJ\2\n=\0\0\3\0\3\0\0066\0\0\0'\2\1\0B\0\2\0029\0\2\0B\0\1\1K\0\1\0\nsetup\20lvim.core.alpha\frequire\0", "config", "alpha-nvim")
|
||||
time([[Config for alpha-nvim]], false)
|
||||
-- Config for: nvim-notify
|
||||
time([[Config for nvim-notify]], true)
|
||||
try_loadstring("\27LJ\2\n>\0\0\3\0\3\0\0066\0\0\0'\2\1\0B\0\2\0029\0\2\0B\0\1\1K\0\1\0\nsetup\21lvim.core.notify\frequire\0", "config", "nvim-notify")
|
||||
time([[Config for nvim-notify]], false)
|
||||
-- Config for: lualine.nvim
|
||||
time([[Config for lualine.nvim]], true)
|
||||
try_loadstring("\27LJ\2\n?\0\0\3\0\3\0\0066\0\0\0'\2\1\0B\0\2\0029\0\2\0B\0\1\1K\0\1\0\nsetup\22lvim.core.lualine\frequire\0", "config", "lualine.nvim")
|
||||
time([[Config for lualine.nvim]], false)
|
||||
-- Config for: project.nvim
|
||||
time([[Config for project.nvim]], true)
|
||||
try_loadstring("\27LJ\2\n?\0\0\3\0\3\0\0066\0\0\0'\2\1\0B\0\2\0029\0\2\0B\0\1\1K\0\1\0\nsetup\22lvim.core.project\frequire\0", "config", "project.nvim")
|
||||
time([[Config for project.nvim]], false)
|
||||
-- Config for: nvim-tree.lua
|
||||
time([[Config for nvim-tree.lua]], true)
|
||||
try_loadstring("\27LJ\2\n@\0\0\3\0\3\0\0066\0\0\0'\2\1\0B\0\2\0029\0\2\0B\0\1\1K\0\1\0\nsetup\23lvim.core.nvimtree\frequire\0", "config", "nvim-tree.lua")
|
||||
time([[Config for nvim-tree.lua]], false)
|
||||
-- Config for: LuaSnip
|
||||
time([[Config for LuaSnip]], true)
|
||||
try_loadstring("\27LJ\2\nñ\3\0\0\v\0\23\00166\0\0\0'\2\1\0B\0\2\0024\1\0\0006\2\2\0009\2\3\0029\2\4\0029\2\5\0029\2\6\2\15\0\2\0X\3\f€\21\2\1\0\22\2\0\0029\3\a\0006\5\b\0B\5\1\2'\6\t\0'\a\n\0'\b\v\0'\t\f\0'\n\r\0B\3\a\2<\3\2\0019\2\a\0006\4\14\0B\4\1\2'\5\15\0B\2\3\0029\3\16\0\18\5\2\0B\3\2\2\15\0\3\0X\4\3€\21\3\1\0\22\3\0\3<\2\3\0016\3\0\0'\5\17\0B\3\2\0029\3\18\3B\3\1\0016\3\0\0'\5\19\0B\3\2\0029\3\18\0035\5\20\0=\1\21\5B\3\2\0016\3\0\0'\5\22\0B\3\2\0029\3\18\3B\3\1\1K\0\1\0\"luasnip.loaders.from_snipmate\npaths\1\0\0 luasnip.loaders.from_vscode\14lazy_load\29luasnip.loaders.from_lua\17is_directory\rsnippets\19get_config_dir\22friendly-snippets\nstart\vpacker\tpack\tsite\20get_runtime_dir\15join_paths\22friendly_snippets\fsources\fluasnip\fbuiltin\tlvim\15lvim.utils\frequire\2\0", "config", "LuaSnip")
|
||||
time([[Config for LuaSnip]], false)
|
||||
-- Config for: mason.nvim
|
||||
time([[Config for mason.nvim]], true)
|
||||
try_loadstring("\27LJ\2\n=\0\0\3\0\3\0\0066\0\0\0'\2\1\0B\0\2\0029\0\2\0B\0\1\1K\0\1\0\nsetup\20lvim.core.mason\frequire\0", "config", "mason.nvim")
|
||||
time([[Config for mason.nvim]], false)
|
||||
-- Config for: nvim-autopairs
|
||||
time([[Config for nvim-autopairs]], true)
|
||||
try_loadstring("\27LJ\2\nA\0\0\3\0\3\0\0066\0\0\0'\2\1\0B\0\2\0029\0\2\0B\0\1\1K\0\1\0\nsetup\24lvim.core.autopairs\frequire\0", "config", "nvim-autopairs")
|
||||
time([[Config for nvim-autopairs]], false)
|
||||
-- Config for: symbols-outline.nvim
|
||||
time([[Config for symbols-outline.nvim]], true)
|
||||
try_loadstring("\27LJ\2\n]\0\0\3\0\4\0\a6\0\0\0'\2\1\0B\0\2\0029\0\2\0005\2\3\0B\0\2\1K\0\1\0\1\0\2\nwidth\3\18\19autofold_depth\3\1\nsetup\20symbols-outline\frequire\0", "config", "symbols-outline.nvim")
|
||||
time([[Config for symbols-outline.nvim]], false)
|
||||
vim.cmd [[augroup packer_load_aucmds]]
|
||||
vim.cmd [[au!]]
|
||||
-- Event lazy-loads
|
||||
time([[Defining lazy-load event autocommands]], true)
|
||||
vim.cmd [[au VimEnter * ++once lua require("packer.load")({'copilot.lua'}, { event = "VimEnter *" }, _G.packer_plugins)]]
|
||||
vim.cmd [[au BufWinEnter * ++once lua require("packer.load")({'which-key.nvim', 'bufferline.nvim', 'toggleterm.nvim'}, { event = "BufWinEnter *" }, _G.packer_plugins)]]
|
||||
vim.cmd [[au BufReadPost * ++once lua require("packer.load")({'nvim-ts-context-commentstring'}, { event = "BufReadPost *" }, _G.packer_plugins)]]
|
||||
vim.cmd [[au BufRead * ++once lua require("packer.load")({'gitsigns.nvim', 'lsp_signature.nvim', 'Comment.nvim'}, { event = "BufRead *" }, _G.packer_plugins)]]
|
||||
time([[Defining lazy-load event autocommands]], false)
|
||||
vim.cmd("augroup END")
|
||||
|
||||
_G._packer.inside_compile = false
|
||||
if _G._packer.needs_bufread == true then
|
||||
vim.cmd("doautocmd BufRead")
|
||||
end
|
||||
_G._packer.needs_bufread = false
|
||||
|
||||
if should_profile then save_profiles() end
|
||||
|
||||
end)
|
||||
|
||||
if not no_errors then
|
||||
error_msg = error_msg:gsub('"', '\\"')
|
||||
vim.api.nvim_command('echohl ErrorMsg | echom "Error in packer_compiled: '..error_msg..'" | echom "Please check your config for correctness" | echohl None')
|
||||
end
|
15
home/.config/lvim/snippets/package.json
Normal file
15
home/.config/lvim/snippets/package.json
Normal file
|
@ -0,0 +1,15 @@
|
|||
{
|
||||
"name": "nvim-snippets",
|
||||
"author": "ItsDrike",
|
||||
"engines": {
|
||||
"vscode": "^1.11.0"
|
||||
},
|
||||
"contributes": {
|
||||
"snippets": [
|
||||
{
|
||||
"language": "python",
|
||||
"path": "./python.json"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
21
home/.config/lvim/snippets/python.json
Normal file
21
home/.config/lvim/snippets/python.json
Normal file
|
@ -0,0 +1,21 @@
|
|||
{
|
||||
"future.__annotations__": {
|
||||
"prefix": "futann",
|
||||
"body": "from __future__ import annotations\n",
|
||||
"description": "Add __future__.annoations import."
|
||||
},
|
||||
"script": {
|
||||
"prefix": "script",
|
||||
"body": [
|
||||
"#!/usr/bin/env python3",
|
||||
"",
|
||||
"def main() -> None:",
|
||||
"\t${1:...}",
|
||||
"",
|
||||
"",
|
||||
"if __name__ == \"__main__\":",
|
||||
"\tmain()"
|
||||
],
|
||||
"description": "print Hello, World!"
|
||||
}
|
||||
}
|
24
home/.config/lvim/spell/en.utf-8.add
Normal file
24
home/.config/lvim/spell/en.utf-8.add
Normal file
|
@ -0,0 +1,24 @@
|
|||
Flake8
|
||||
Isort
|
||||
linter
|
||||
flake8
|
||||
isort
|
||||
TOML
|
||||
YAML
|
||||
linters
|
||||
MyPy
|
||||
Pyright
|
||||
pyright
|
||||
VSCode
|
||||
Pylance
|
||||
Docstrings
|
||||
Docstring
|
||||
docstrings
|
||||
docstring
|
||||
BSPWM
|
||||
Xmonad
|
||||
deserialized
|
||||
serializable
|
||||
ItsDrike
|
||||
itsdrike
|
||||
protonmail
|
BIN
home/.config/lvim/spell/en.utf-8.add.spl
Normal file
BIN
home/.config/lvim/spell/en.utf-8.add.spl
Normal file
Binary file not shown.
283
home/.config/lvim/syntax/apparmor.vim
Normal file
283
home/.config/lvim/syntax/apparmor.vim
Normal file
|
@ -0,0 +1,283 @@
|
|||
" generated from apparmor.vim.in by create-apparmor.vim.py
|
||||
" do not edit this file - edit apparmor.vim.in or create-apparmor.vim.py instead
|
||||
|
||||
" ----------------------------------------------------------------------
|
||||
" Copyright (c) 2005 Novell, Inc. All Rights Reserved.
|
||||
" Copyright (c) 2006-2012 Christian Boltz. All Rights Reserved.
|
||||
"
|
||||
" This program is free software; you can redistribute it and/or
|
||||
" modify it under the terms of version 2 of the GNU General Public
|
||||
" License as published by the Free Software Foundation.
|
||||
"
|
||||
" 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, contact Novell, Inc.
|
||||
"
|
||||
" To contact Novell about this file by physical or electronic mail,
|
||||
" you may find current contact information at www.novell.com.
|
||||
"
|
||||
" To contact Christian Boltz about this file by physical or electronic
|
||||
" mail, you may find current contact information at www.cboltz.de/en/kontakt.
|
||||
"
|
||||
" If you want to report a bug via bugzilla.novell.com, please assign it
|
||||
" to suse-beta[AT]cboltz.de (replace [AT] with @).
|
||||
" ----------------------------------------------------------------------
|
||||
"
|
||||
" stick this file into ~/.vim/syntax/ and add these commands into your .vimrc
|
||||
" to have vim automagically use this syntax file for these directories:
|
||||
"
|
||||
" autocmd BufNewFile,BufRead /etc/apparmor.d/* set syntax=apparmor
|
||||
" autocmd BufNewFile,BufRead /usr/share/apparmor/extra-profiles/* set syntax=apparmor
|
||||
|
||||
" profiles are case sensitive
|
||||
syntax case match
|
||||
|
||||
" color setup...
|
||||
|
||||
" adjust colors according to the background
|
||||
|
||||
" switching colors depending on the background color doesn't work
|
||||
" unfortunately, so we use colors that work with light and dark background.
|
||||
" Patches welcome ;-)
|
||||
|
||||
"if &background == "light"
|
||||
" light background
|
||||
hi sdProfileName ctermfg=lightblue
|
||||
hi sdHatName ctermfg=darkblue
|
||||
hi sdExtHat ctermfg=darkblue
|
||||
" hi sdComment2 ctermfg=darkblue
|
||||
hi sdGlob ctermfg=darkmagenta
|
||||
hi sdAlias ctermfg=darkmagenta
|
||||
hi sdEntryWriteExec ctermfg=black ctermbg=yellow
|
||||
hi sdEntryUX ctermfg=darkred cterm=underline
|
||||
hi sdEntryUXe ctermfg=darkred
|
||||
hi sdEntryIX ctermfg=darkcyan
|
||||
hi sdEntryM ctermfg=darkcyan
|
||||
hi sdEntryPX ctermfg=darkgreen cterm=underline
|
||||
hi sdEntryPXe ctermfg=darkgreen
|
||||
hi sdEntryW ctermfg=darkyellow
|
||||
hi sdCap ctermfg=lightblue
|
||||
hi sdSetCap ctermfg=black ctermbg=yellow
|
||||
hi sdNetwork ctermfg=lightblue
|
||||
hi sdNetworkDanger ctermfg=darkred
|
||||
hi sdCapKey cterm=underline ctermfg=lightblue
|
||||
hi sdCapDanger ctermfg=darkred
|
||||
hi sdRLimit ctermfg=lightblue
|
||||
hi def link sdEntryR Normal
|
||||
hi def link sdEntryK Normal
|
||||
hi def link sdFlags Normal
|
||||
hi sdEntryChangeProfile ctermfg=darkgreen cterm=underline
|
||||
"else
|
||||
" dark background
|
||||
" hi sdProfileName ctermfg=white
|
||||
" hi sdHatName ctermfg=white
|
||||
" hi sdGlob ctermfg=magenta
|
||||
" hi sdEntryWriteExec ctermfg=black ctermbg=yellow
|
||||
" hi sdEntryUX ctermfg=red cterm=underline
|
||||
" hi sdEntryUXe ctermfg=red
|
||||
" hi sdEntryIX ctermfg=cyan
|
||||
" hi sdEntryM ctermfg=cyan
|
||||
" hi sdEntryPX ctermfg=green cterm=underline
|
||||
" hi sdEntryPXe ctermfg=green
|
||||
" hi sdEntryW ctermfg=yellow
|
||||
" hi sdCap ctermfg=lightblue
|
||||
" hi sdCapKey cterm=underline ctermfg=lightblue
|
||||
" hi def link sdEntryR Normal
|
||||
" hi def link sdFlags Normal
|
||||
" hi sdCapDanger ctermfg=red
|
||||
"endif
|
||||
|
||||
hi def link sdInclude Include
|
||||
high def link sdComment Comment
|
||||
"high def link sdComment2 Comment
|
||||
high def link sdFlagKey TODO
|
||||
high def link sdError ErrorMsg
|
||||
|
||||
|
||||
" always sync from the start. should be relatively quick since we don't have
|
||||
" that many rules and profiles shouldn't be _extremely_ large...
|
||||
syn sync fromstart
|
||||
|
||||
syn keyword sdFlagKey complain debug
|
||||
|
||||
" highlight invalid syntax
|
||||
syn match sdError /{/ contained
|
||||
syn match sdError /}/
|
||||
syn match sdError /^.*$/ contains=sdComment "highlight all non-valid lines as error
|
||||
" TODO: do not mark lines containing only whitespace as error
|
||||
|
||||
" TODO: the sdGlob pattern is not anchored with ^ and $, so it matches all lines matching ^@{...}.*
|
||||
" This allows incorrect lines also and should be checked better.
|
||||
" This also (accidently ;-) includes variable definitions (@{FOO}=/bar)
|
||||
" TODO: make a separate pattern for variable definitions, then mark sdGlob as contained
|
||||
syn match sdGlob /\v\?|\*|\{.*,.*\}|[[^\]]\+\]|\@\{[a-zA-Z][a-zA-Z0-9_]*\}/
|
||||
|
||||
syn match sdAlias /\v^alias\s+(\/|\@\{\S*\})\S*\s+-\>\s+(\/|\@\{\S*\})\S*\s*,(\s*$|(\s*#.*$)\@=)/ contains=sdGlob
|
||||
|
||||
" syn match sdComment /#.*/
|
||||
|
||||
syn cluster sdEntry contains=sdEntryWriteExec,sdEntryR,sdEntryW,sdEntryIX,sdEntryPX,sdEntryPXe,sdEntryUX,sdEntryUXe,sdEntryM,sdCap,sdSetCap,sdExtHat,sdRLimit,sdNetwork,sdNetworkDanger,sdEntryChangeProfile
|
||||
|
||||
|
||||
" TODO: support audit and deny keywords for all rules (not only for files)
|
||||
" TODO: higlight audit and deny keywords everywhere
|
||||
|
||||
" Capability line
|
||||
|
||||
" normal capabilities - really keep this list? syn match sdCap should be enough... (difference: sdCapKey words would loose underlining)
|
||||
syn keyword sdCapKey audit_read block_suspend chown dac_override dac_read_search fowner fsetid ipc_lock ipc_owner kill lease linux_immutable mknod net_admin net_bind_service net_broadcast net_raw setfcap setgid setpcap setuid syslog sys_boot sys_chroot sys_nice sys_pacct sys_ptrace sys_resource sys_time sys_tty_config wake_alarm
|
||||
|
||||
" dangerous capabilities - highlighted separately
|
||||
syn keyword sdCapDanger audit_control audit_write mac_override mac_admin set_fcap sys_admin sys_module sys_rawio
|
||||
|
||||
" full line. Keywords are from sdCapKey + sdCapDanger
|
||||
syn match sdCap /\v^\s*(audit\s+)?(deny\s+|allow\s+)?capability\s+((audit_control|audit_read|audit_write|block_suspend|chown|dac_override|dac_read_search|fowner|fsetid|ipc_lock|ipc_owner|kill|lease|linux_immutable|mac_admin|mac_override|mknod|net_admin|net_bind_service|net_broadcast|net_raw|setfcap|setgid|setpcap|setuid|syslog|sys_admin|sys_boot|sys_chroot|sys_module|sys_nice|sys_pacct|sys_ptrace|sys_rawio|sys_resource|sys_time|sys_tty_config|wake_alarm)\s+)*(audit_control|audit_read|audit_write|block_suspend|chown|dac_override|dac_read_search|fowner|fsetid|ipc_lock|ipc_owner|kill|lease|linux_immutable|mac_admin|mac_override|mknod|net_admin|net_bind_service|net_broadcast|net_raw|setfcap|setgid|setpcap|setuid|syslog|sys_admin|sys_boot|sys_chroot|sys_module|sys_nice|sys_pacct|sys_ptrace|sys_rawio|sys_resource|sys_time|sys_tty_config|wake_alarm)\s*,(\s*$|(\s*#.*$)\@=)/ contains=sdCapKey,sdCapDanger,sdComment nextgroup=@sdEntry,sdComment,sdError,sdInclude
|
||||
" all capabilities ('capability' without any keyword)
|
||||
syn match sdCapDanger /\v^\s*(audit\s+)?(deny\s+|allow\s+)?capability\s*,(\s*$|(\s*#.*$)\@=)/ contains=sdComment nextgroup=@sdEntry,sdComment,sdError,sdInclude
|
||||
|
||||
" Network line
|
||||
" Syntax: network domain (inet, ...) type (stream, ...) protocol (tcp, ...)
|
||||
" TODO: 'owner' isn't supported, but will be (JJ, 2011-01-11)
|
||||
syn match sdNetwork /\v^\s*(audit\s+)?(deny\s+|allow\s+)?network(\s+(unix|inet|ax25|ipx|appletalk|netrom|bridge|atmpvc|x25|inet6|rose|netbeui|security|key|netlink|packet|ash|econet|atmsvc|rds|sna|irda|pppox|wanpipe|llc|can|tipc|bluetooth|iucv|rxrpc|isdn|phonet|ieee802154|caif|alg|nfc|vsock))?(\s+(stream|dgram|seqpacket|rdm|packet))?(\s+tcp|\s+udp|\s+icmp)?\s*,(\s*$|(\s*#.*$)\@=)/ contains=sdComment nextgroup=@sdEntry,sdComment,sdError,sdInclude
|
||||
" network rules containing 'raw'
|
||||
syn match sdNetworkDanger /\v^\s*(audit\s+)?(deny\s+|allow\s+)?network(\s+(unix|inet|ax25|ipx|appletalk|netrom|bridge|atmpvc|x25|inet6|rose|netbeui|security|key|netlink|packet|ash|econet|atmsvc|rds|sna|irda|pppox|wanpipe|llc|can|tipc|bluetooth|iucv|rxrpc|isdn|phonet|ieee802154|caif|alg|nfc|vsock))?(\s+(raw))(\s+tcp|\s+udp|\s+icmp)?\s*,(\s*$|(\s*#.*$)\@=)/ contains=sdComment nextgroup=@sdEntry,sdComment,sdError,sdInclude
|
||||
" 'all networking' includes raw -> mark as dangerous
|
||||
syn match sdNetworkDanger /\v^\s*(audit\s+)?(deny\s+|allow\s+)?network\s*,(\s*$|(\s*#.*$)\@=)/ contains=sdComment nextgroup=@sdEntry,sdComment,sdError,sdInclude
|
||||
|
||||
|
||||
" Change Profile
|
||||
" TODO: audit and deny support will be added (JJ, 2011-01-11)
|
||||
syn match sdEntryChangeProfile /\v^\s*change_profile\s+-\>\s+\S+\s*,(\s*$|(\s*#.*$)\@=)/ contains=sdGlob,sdComment nextgroup=@sdEntry,sdComment,sdError,sdInclude
|
||||
|
||||
|
||||
" rlimit
|
||||
" TODO: audit and deny support will be added (JJ, 2011-01-11)
|
||||
"
|
||||
"syn match sdRLimit /\v^\s*rlimit\s+()\s*,(\s*$|(\s*#.*$)\@=)/ contains=sdComment
|
||||
syn match sdRLimit /\v^\s*set\s+rlimit\s+(nofile|ofile|nproc|rtprio)\s+\<\=\s+[0-9]+\s*,(\s*$|(\s*#.*$)\@=)/ contains=sdComment
|
||||
syn match sdRLimit /\v^\s*set\s+rlimit\s+(locks|sigpending)\s+\<\=\s+[0-9]+\s*,(\s*$|(\s*#.*$)\@=)/ contains=sdComment
|
||||
syn match sdRLimit /\v^\s*set\s+rlimit\s+(fsize|data|stack|core|rss|as|memlock|msgqueue)\s+\<\=\s+[0-9]+([KMG]B)?\s*,(\s*$|(\s*#.*$)\@=)/ contains=sdComment
|
||||
syn match sdRLimit /\v^\s*set\s+rlimit\s+nice\s+\<\=\s+(-1?[0-9]|-20|1?[0-9])\s*,(\s*$|(\s*#.*$)\@=)/ contains=sdComment
|
||||
syn match sdRLimit /\v^\s*set\s+rlimit\s+cpu\s+\<\=\s+[0-9]+(seconds|minutes|hours|days)?\s*,(\s*$|(\s*#.*$)\@=)/ contains=sdComment
|
||||
syn match sdRLimit /\v^\s*set\s+rlimit\s+rttime\s+\<\=\s+[0-9]+(ms|seconds|minutes)?\s*,(\s*$|(\s*#.*$)\@=)/ contains=sdComment
|
||||
syn match sdRLimit /\v^\s*set\s+rlimit\s+(cpu|rttime|nofile|nproc|rtprio|locks|sigpending|fsize|data|stack|core|rss|as|memlock|msgqueue|nice)\s+\<\=\s+infinity\s*,(\s*$|(\s*#.*$)\@=)/ contains=sdComment
|
||||
|
||||
" link rules
|
||||
syn match sdEntryW /\v^\s+(audit\s+)?(deny\s+|allow\s+)?(owner\s+|other\s+)?link\s+(subset\s+)?(\/|\@\{\S*\})\S*\s+-\>\s+(\/|\@\{\S*\})\S*\s*,(\s*$|(\s*#.*$)\@=)/ contains=sdGlob
|
||||
|
||||
|
||||
syn match sdExtHat /\v^\s+(\^|profile\s+)\S+\s*,(\s*$|(\s*#.*$)\@=)/ contains=sdComment " hat without {...}
|
||||
|
||||
|
||||
|
||||
|
||||
syn match sdProfileName /\v^((profile\s+)?\/\S+|profile\s+([a-zA-Z0-9]\S*\s)?\S+)\s+((flags\s*\=\s*)?\(\s*(complain|audit|attach_disconnected|no_attach_disconnected|chroot_attach|chroot_no_attach|chroot_relative|namespace_relative|mediate_deleted|delegate_deleted)(\s*,\s*(complain|audit|attach_disconnected|no_attach_disconnected|chroot_attach|chroot_no_attach|chroot_relative|namespace_relative|mediate_deleted|delegate_deleted))*\s*\)\s+)=\{/ contains=sdProfileStart,sdHatName,sdFlags,sdComment,sdGlob
|
||||
syn match sdProfileStart /{/ contained
|
||||
syn match sdProfileEnd /^}\s*(#.*)?$/ contained " TODO: syn region does not (yet?) allow usage of comment in end=
|
||||
" TODO: Removing the $ mark from end= will allow non-comments also :-(
|
||||
syn match sdHatName /\v^\s+(\^|profile\s+)\S+\s+((flags\s*\=\s*)?\(\s*(complain|audit|attach_disconnected|no_attach_disconnected|chroot_attach|chroot_no_attach|chroot_relative|namespace_relative|mediate_deleted|delegate_deleted)(\s*,\s*(complain|audit|attach_disconnected|no_attach_disconnected|chroot_attach|chroot_no_attach|chroot_relative|namespace_relative|mediate_deleted|delegate_deleted))*\s*\)\s+)=\{/ contains=sdProfileStart,sdFlags,sdComment
|
||||
syn match sdHatStart /{/ contained
|
||||
syn match sdHatEnd /}/ contained " TODO: allow comments + [same as for syn match sdProfileEnd]
|
||||
syn match sdFlags /\v((flags\s*\=\s*)?\(\s*(complain|audit|attach_disconnected|no_attach_disconnected|chroot_attach|chroot_no_attach|chroot_relative|namespace_relative|mediate_deleted|delegate_deleted)(\s*,\s*(complain|audit|attach_disconnected|no_attach_disconnected|chroot_attach|chroot_no_attach|chroot_relative|namespace_relative|mediate_deleted|delegate_deleted))*\s*\)\s+)/ contained contains=sdFlagKey
|
||||
|
||||
syn match sdComment /\s*#.*$/
|
||||
" NOTE: contains=sdComment changes #include highlighting to comment color.
|
||||
" NOTE: Comment highlighting still works without contains=sdComment.
|
||||
syn match sdInclude /\s*#include\s<\S*>/ " TODO: doesn't check until $
|
||||
syn match sdInclude /\s*include\s<\S*>/ " TODO: doesn't check until $
|
||||
|
||||
" basic profile block...
|
||||
" \s+ does not work in end=, therefore using \s\s*
|
||||
syn region Normal start=/\v^(profile\s+)?\S+\s+((flags\s*\=\s*)?\(\s*(complain|audit|attach_disconnected|no_attach_disconnected|chroot_attach|chroot_no_attach|chroot_relative|namespace_relative|mediate_deleted|delegate_deleted)(\s*,\s*(complain|audit|attach_disconnected|no_attach_disconnected|chroot_attach|chroot_no_attach|chroot_relative|namespace_relative|mediate_deleted|delegate_deleted))*\s*\)\s+)=\{/ matchgroup=sdProfileEnd end=/^}\s*$/ contains=sdProfileName,Hat,@sdEntry,sdComment,sdError,sdInclude
|
||||
syn region Hat start=/\v^\s+(\^|profile\s+)\S+\s+((flags\s*\=\s*)?\(\s*(complain|audit|attach_disconnected|no_attach_disconnected|chroot_attach|chroot_no_attach|chroot_relative|namespace_relative|mediate_deleted|delegate_deleted)(\s*,\s*(complain|audit|attach_disconnected|no_attach_disconnected|chroot_attach|chroot_no_attach|chroot_relative|namespace_relative|mediate_deleted|delegate_deleted))*\s*\)\s+)=\{/ matchgroup=sdHatEnd end=/^\s\s*}\s*$/ contains=sdHatName,@sdEntry,sdComment,sdError,sdInclude
|
||||
|
||||
" file permissions
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
" file rules added with create_file_rule()
|
||||
|
||||
" write + exec/mmap - danger! (known bug: accepts aw to keep things simple)
|
||||
syn match sdEntryWriteExec /\v^\s*(audit\s+)?(deny\s+|allow\s+)?(owner\s+|other\s+)?(\/|\@\{\S*\})\S*\s+(l|r|w|a|m|k|[iuUpPcC]x)+(\s+-\>\s+\S+)?\s*,(\s*$|(\s*#.*$)\@=)/ contains=sdGlob,sdComment nextgroup=@sdEntry,sdComment,sdError,sdInclude
|
||||
syn match sdEntryWriteExec /\v^\s*(audit\s+)?(deny\s+|allow\s+)?(owner\s+|other\s+)?"(\/|\@\{\S*\})\S*"\s+(l|r|w|a|m|k|[iuUpPcC]x)+(\s+-\>\s+\S+)?\s*,(\s*$|(\s*#.*$)\@=)/ contains=sdGlob,sdComment nextgroup=@sdEntry,sdComment,sdError,sdInclude
|
||||
syn match sdEntryWriteExec /\v^\s*(audit\s+)?(deny\s+|allow\s+)?(owner\s+|other\s+)?(l|r|w|a|m|k|[iuUpPcC]x)+(\s+-\>\s+\S+)?\s+(\/|\@\{\S*\})\S*\s*,(\s*$|(\s*#.*$)\@=)/ contains=sdGlob,sdComment nextgroup=@sdEntry,sdComment,sdError,sdInclude
|
||||
syn match sdEntryWriteExec /\v^\s*(audit\s+)?(deny\s+|allow\s+)?(owner\s+|other\s+)?(l|r|w|a|m|k|[iuUpPcC]x)+(\s+-\>\s+\S+)?\s+"(\/|\@\{\S*\})\S*"+\s*,(\s*$|(\s*#.*$)\@=)/ contains=sdGlob,sdComment nextgroup=@sdEntry,sdComment,sdError,sdInclude
|
||||
|
||||
" ux(mr) - unconstrained entry, flag the line red. also includes pux which is unconstrained if no profile exists
|
||||
syn match sdEntryUX /\v^\s*(audit\s+)?(deny\s+|allow\s+)?(owner\s+|other\s+)?(\/|\@\{\S*\})\S*\s+(r|m|k|ux|pux)+(\s+-\>\s+\S+)?\s*,(\s*$|(\s*#.*$)\@=)/ contains=sdGlob,sdComment nextgroup=@sdEntry,sdComment,sdError,sdInclude
|
||||
syn match sdEntryUX /\v^\s*(audit\s+)?(deny\s+|allow\s+)?(owner\s+|other\s+)?"(\/|\@\{\S*\})\S*"\s+(r|m|k|ux|pux)+(\s+-\>\s+\S+)?\s*,(\s*$|(\s*#.*$)\@=)/ contains=sdGlob,sdComment nextgroup=@sdEntry,sdComment,sdError,sdInclude
|
||||
syn match sdEntryUX /\v^\s*(audit\s+)?(deny\s+|allow\s+)?(owner\s+|other\s+)?(r|m|k|ux|pux)+(\s+-\>\s+\S+)?\s+(\/|\@\{\S*\})\S*\s*,(\s*$|(\s*#.*$)\@=)/ contains=sdGlob,sdComment nextgroup=@sdEntry,sdComment,sdError,sdInclude
|
||||
syn match sdEntryUX /\v^\s*(audit\s+)?(deny\s+|allow\s+)?(owner\s+|other\s+)?(r|m|k|ux|pux)+(\s+-\>\s+\S+)?\s+"(\/|\@\{\S*\})\S*"+\s*,(\s*$|(\s*#.*$)\@=)/ contains=sdGlob,sdComment nextgroup=@sdEntry,sdComment,sdError,sdInclude
|
||||
|
||||
" Ux(mr) and PUx(mr) - like ux + clean environment
|
||||
syn match sdEntryUXe /\v^\s*(audit\s+)?(deny\s+|allow\s+)?(owner\s+|other\s+)?(\/|\@\{\S*\})\S*\s+(r|m|k|Ux|PUx)+(\s+-\>\s+\S+)?\s*,(\s*$|(\s*#.*$)\@=)/ contains=sdGlob,sdComment nextgroup=@sdEntry,sdComment,sdError,sdInclude
|
||||
syn match sdEntryUXe /\v^\s*(audit\s+)?(deny\s+|allow\s+)?(owner\s+|other\s+)?"(\/|\@\{\S*\})\S*"\s+(r|m|k|Ux|PUx)+(\s+-\>\s+\S+)?\s*,(\s*$|(\s*#.*$)\@=)/ contains=sdGlob,sdComment nextgroup=@sdEntry,sdComment,sdError,sdInclude
|
||||
syn match sdEntryUXe /\v^\s*(audit\s+)?(deny\s+|allow\s+)?(owner\s+|other\s+)?(r|m|k|Ux|PUx)+(\s+-\>\s+\S+)?\s+(\/|\@\{\S*\})\S*\s*,(\s*$|(\s*#.*$)\@=)/ contains=sdGlob,sdComment nextgroup=@sdEntry,sdComment,sdError,sdInclude
|
||||
syn match sdEntryUXe /\v^\s*(audit\s+)?(deny\s+|allow\s+)?(owner\s+|other\s+)?(r|m|k|Ux|PUx)+(\s+-\>\s+\S+)?\s+"(\/|\@\{\S*\})\S*"+\s*,(\s*$|(\s*#.*$)\@=)/ contains=sdGlob,sdComment nextgroup=@sdEntry,sdComment,sdError,sdInclude
|
||||
|
||||
" px/cx/pix/cix(mrk) - standard exec entry, flag the line blue
|
||||
syn match sdEntryPX /\v^\s*(audit\s+)?(deny\s+|allow\s+)?(owner\s+|other\s+)?(\/|\@\{\S*\})\S*\s+(r|m|k|px|cx|pix|cix)+(\s+-\>\s+\S+)?\s*,(\s*$|(\s*#.*$)\@=)/ contains=sdGlob,sdComment nextgroup=@sdEntry,sdComment,sdError,sdInclude
|
||||
syn match sdEntryPX /\v^\s*(audit\s+)?(deny\s+|allow\s+)?(owner\s+|other\s+)?"(\/|\@\{\S*\})\S*"\s+(r|m|k|px|cx|pix|cix)+(\s+-\>\s+\S+)?\s*,(\s*$|(\s*#.*$)\@=)/ contains=sdGlob,sdComment nextgroup=@sdEntry,sdComment,sdError,sdInclude
|
||||
syn match sdEntryPX /\v^\s*(audit\s+)?(deny\s+|allow\s+)?(owner\s+|other\s+)?(r|m|k|px|cx|pix|cix)+(\s+-\>\s+\S+)?\s+(\/|\@\{\S*\})\S*\s*,(\s*$|(\s*#.*$)\@=)/ contains=sdGlob,sdComment nextgroup=@sdEntry,sdComment,sdError,sdInclude
|
||||
syn match sdEntryPX /\v^\s*(audit\s+)?(deny\s+|allow\s+)?(owner\s+|other\s+)?(r|m|k|px|cx|pix|cix)+(\s+-\>\s+\S+)?\s+"(\/|\@\{\S*\})\S*"+\s*,(\s*$|(\s*#.*$)\@=)/ contains=sdGlob,sdComment nextgroup=@sdEntry,sdComment,sdError,sdInclude
|
||||
|
||||
" Px/Cx/Pix/Cix(mrk) - like px/cx + clean environment
|
||||
syn match sdEntryPXe /\v^\s*(audit\s+)?(deny\s+|allow\s+)?(owner\s+|other\s+)?(\/|\@\{\S*\})\S*\s+(r|m|k|Px|Cx|Pix|Cix)+(\s+-\>\s+\S+)?\s*,(\s*$|(\s*#.*$)\@=)/ contains=sdGlob,sdComment nextgroup=@sdEntry,sdComment,sdError,sdInclude
|
||||
syn match sdEntryPXe /\v^\s*(audit\s+)?(deny\s+|allow\s+)?(owner\s+|other\s+)?"(\/|\@\{\S*\})\S*"\s+(r|m|k|Px|Cx|Pix|Cix)+(\s+-\>\s+\S+)?\s*,(\s*$|(\s*#.*$)\@=)/ contains=sdGlob,sdComment nextgroup=@sdEntry,sdComment,sdError,sdInclude
|
||||
syn match sdEntryPXe /\v^\s*(audit\s+)?(deny\s+|allow\s+)?(owner\s+|other\s+)?(r|m|k|Px|Cx|Pix|Cix)+(\s+-\>\s+\S+)?\s+(\/|\@\{\S*\})\S*\s*,(\s*$|(\s*#.*$)\@=)/ contains=sdGlob,sdComment nextgroup=@sdEntry,sdComment,sdError,sdInclude
|
||||
syn match sdEntryPXe /\v^\s*(audit\s+)?(deny\s+|allow\s+)?(owner\s+|other\s+)?(r|m|k|Px|Cx|Pix|Cix)+(\s+-\>\s+\S+)?\s+"(\/|\@\{\S*\})\S*"+\s*,(\s*$|(\s*#.*$)\@=)/ contains=sdGlob,sdComment nextgroup=@sdEntry,sdComment,sdError,sdInclude
|
||||
|
||||
" ix(mr) - standard exec entry, flag the line green
|
||||
syn match sdEntryIX /\v^\s*(audit\s+)?(deny\s+|allow\s+)?(owner\s+|other\s+)?(\/|\@\{\S*\})\S*\s+(r|m|k|ix)+\s*,(\s*$|(\s*#.*$)\@=)/ contains=sdGlob,sdComment nextgroup=@sdEntry,sdComment,sdError,sdInclude
|
||||
syn match sdEntryIX /\v^\s*(audit\s+)?(deny\s+|allow\s+)?(owner\s+|other\s+)?"(\/|\@\{\S*\})\S*"\s+(r|m|k|ix)+\s*,(\s*$|(\s*#.*$)\@=)/ contains=sdGlob,sdComment nextgroup=@sdEntry,sdComment,sdError,sdInclude
|
||||
syn match sdEntryIX /\v^\s*(audit\s+)?(deny\s+|allow\s+)?(owner\s+|other\s+)?(r|m|k|ix)+\s+(\/|\@\{\S*\})\S*\s*,(\s*$|(\s*#.*$)\@=)/ contains=sdGlob,sdComment nextgroup=@sdEntry,sdComment,sdError,sdInclude
|
||||
syn match sdEntryIX /\v^\s*(audit\s+)?(deny\s+|allow\s+)?(owner\s+|other\s+)?(r|m|k|ix)+\s+"(\/|\@\{\S*\})\S*"+\s*,(\s*$|(\s*#.*$)\@=)/ contains=sdGlob,sdComment nextgroup=@sdEntry,sdComment,sdError,sdInclude
|
||||
|
||||
" mr - mmap with PROT_EXEC
|
||||
syn match sdEntryM /\v^\s*(audit\s+)?(deny\s+|allow\s+)?(owner\s+|other\s+)?(\/|\@\{\S*\})\S*\s+(r|m|k)+\s*,(\s*$|(\s*#.*$)\@=)/ contains=sdGlob,sdComment nextgroup=@sdEntry,sdComment,sdError,sdInclude
|
||||
syn match sdEntryM /\v^\s*(audit\s+)?(deny\s+|allow\s+)?(owner\s+|other\s+)?"(\/|\@\{\S*\})\S*"\s+(r|m|k)+\s*,(\s*$|(\s*#.*$)\@=)/ contains=sdGlob,sdComment nextgroup=@sdEntry,sdComment,sdError,sdInclude
|
||||
syn match sdEntryM /\v^\s*(audit\s+)?(deny\s+|allow\s+)?(owner\s+|other\s+)?(r|m|k)+\s+(\/|\@\{\S*\})\S*\s*,(\s*$|(\s*#.*$)\@=)/ contains=sdGlob,sdComment nextgroup=@sdEntry,sdComment,sdError,sdInclude
|
||||
syn match sdEntryM /\v^\s*(audit\s+)?(deny\s+|allow\s+)?(owner\s+|other\s+)?(r|m|k)+\s+"(\/|\@\{\S*\})\S*"+\s*,(\s*$|(\s*#.*$)\@=)/ contains=sdGlob,sdComment nextgroup=@sdEntry,sdComment,sdError,sdInclude
|
||||
|
||||
" special case: deny x is allowed (does not need to be ix, px, ux or cx)
|
||||
syn match sdEntryM /\v^\s*(audit\s+)?deny\s+(owner\s+|other\s+)?(\/|\@\{\S*\})\S*\s+(r|m|k|x)+\s*,(\s*$|(\s*#.*$)\@=)/ contains=sdGlob,sdComment nextgroup=@sdEntry,sdComment,sdError,sdInclude
|
||||
syn match sdEntryM /\v^\s*(audit\s+)?deny\s+(owner\s+|other\s+)?"(\/|\@\{\S*\})\S*"\s+(r|m|k|x)+\s*,(\s*$|(\s*#.*$)\@=)/ contains=sdGlob,sdComment nextgroup=@sdEntry,sdComment,sdError,sdInclude
|
||||
syn match sdEntryM /\v^\s*(audit\s+)?deny\s+(owner\s+|other\s+)?(r|m|k|x)+\s+(\/|\@\{\S*\})\S*\s*,(\s*$|(\s*#.*$)\@=)/ contains=sdGlob,sdComment nextgroup=@sdEntry,sdComment,sdError,sdInclude
|
||||
syn match sdEntryM /\v^\s*(audit\s+)?deny\s+(owner\s+|other\s+)?(r|m|k|x)+\s+"(\/|\@\{\S*\})\S*"+\s*,(\s*$|(\s*#.*$)\@=)/ contains=sdGlob,sdComment nextgroup=@sdEntry,sdComment,sdError,sdInclude
|
||||
|
||||
" write + append is an error
|
||||
syn match sdError /\v^\s*(audit\s+)?(deny\s+|allow\s+)?(owner\s+|other\s+)?(\/|\@\{\S*\})\S*\s+\S*(w\S*a|a\S*w)\S*\s*,(\s*$|(\s*#.*$)\@=)/ contains=sdGlob,sdComment nextgroup=@sdEntry,sdComment,sdError,sdInclude
|
||||
syn match sdError /\v^\s*(audit\s+)?(deny\s+|allow\s+)?(owner\s+|other\s+)?"(\/|\@\{\S*\})\S*"\s+\S*(w\S*a|a\S*w)\S*\s*,(\s*$|(\s*#.*$)\@=)/ contains=sdGlob,sdComment nextgroup=@sdEntry,sdComment,sdError,sdInclude
|
||||
syn match sdError /\v^\s*(audit\s+)?(deny\s+|allow\s+)?(owner\s+|other\s+)?\S*(w\S*a|a\S*w)\S*\s+(\/|\@\{\S*\})\S*\s*,(\s*$|(\s*#.*$)\@=)/ contains=sdGlob,sdComment nextgroup=@sdEntry,sdComment,sdError,sdInclude
|
||||
syn match sdError /\v^\s*(audit\s+)?(deny\s+|allow\s+)?(owner\s+|other\s+)?\S*(w\S*a|a\S*w)\S*\s+"(\/|\@\{\S*\})\S*"+\s*,(\s*$|(\s*#.*$)\@=)/ contains=sdGlob,sdComment nextgroup=@sdEntry,sdComment,sdError,sdInclude
|
||||
|
||||
" write entry, flag the line yellow
|
||||
syn match sdEntryW /\v^\s*(audit\s+)?(deny\s+|allow\s+)?(owner\s+|other\s+)?(\/|\@\{\S*\})\S*\s+(l|r|w|k)+\s*,(\s*$|(\s*#.*$)\@=)/ contains=sdGlob,sdComment nextgroup=@sdEntry,sdComment,sdError,sdInclude
|
||||
syn match sdEntryW /\v^\s*(audit\s+)?(deny\s+|allow\s+)?(owner\s+|other\s+)?"(\/|\@\{\S*\})\S*"\s+(l|r|w|k)+\s*,(\s*$|(\s*#.*$)\@=)/ contains=sdGlob,sdComment nextgroup=@sdEntry,sdComment,sdError,sdInclude
|
||||
syn match sdEntryW /\v^\s*(audit\s+)?(deny\s+|allow\s+)?(owner\s+|other\s+)?(l|r|w|k)+\s+(\/|\@\{\S*\})\S*\s*,(\s*$|(\s*#.*$)\@=)/ contains=sdGlob,sdComment nextgroup=@sdEntry,sdComment,sdError,sdInclude
|
||||
syn match sdEntryW /\v^\s*(audit\s+)?(deny\s+|allow\s+)?(owner\s+|other\s+)?(l|r|w|k)+\s+"(\/|\@\{\S*\})\S*"+\s*,(\s*$|(\s*#.*$)\@=)/ contains=sdGlob,sdComment nextgroup=@sdEntry,sdComment,sdError,sdInclude
|
||||
|
||||
" append entry, flag the line yellow
|
||||
syn match sdEntryW /\v^\s*(audit\s+)?(deny\s+|allow\s+)?(owner\s+|other\s+)?(\/|\@\{\S*\})\S*\s+(l|r|a|k)+\s*,(\s*$|(\s*#.*$)\@=)/ contains=sdGlob,sdComment nextgroup=@sdEntry,sdComment,sdError,sdInclude
|
||||
syn match sdEntryW /\v^\s*(audit\s+)?(deny\s+|allow\s+)?(owner\s+|other\s+)?"(\/|\@\{\S*\})\S*"\s+(l|r|a|k)+\s*,(\s*$|(\s*#.*$)\@=)/ contains=sdGlob,sdComment nextgroup=@sdEntry,sdComment,sdError,sdInclude
|
||||
syn match sdEntryW /\v^\s*(audit\s+)?(deny\s+|allow\s+)?(owner\s+|other\s+)?(l|r|a|k)+\s+(\/|\@\{\S*\})\S*\s*,(\s*$|(\s*#.*$)\@=)/ contains=sdGlob,sdComment nextgroup=@sdEntry,sdComment,sdError,sdInclude
|
||||
syn match sdEntryW /\v^\s*(audit\s+)?(deny\s+|allow\s+)?(owner\s+|other\s+)?(l|r|a|k)+\s+"(\/|\@\{\S*\})\S*"+\s*,(\s*$|(\s*#.*$)\@=)/ contains=sdGlob,sdComment nextgroup=@sdEntry,sdComment,sdError,sdInclude
|
||||
|
||||
" read entry + locking, currently no highlighting
|
||||
syn match sdEntryK /\v^\s*(audit\s+)?(deny\s+|allow\s+)?(owner\s+|other\s+)?(\/|\@\{\S*\})\S*\s+[rlk]+\s*,(\s*$|(\s*#.*$)\@=)/ contains=sdGlob,sdComment nextgroup=@sdEntry,sdComment,sdError,sdInclude
|
||||
syn match sdEntryK /\v^\s*(audit\s+)?(deny\s+|allow\s+)?(owner\s+|other\s+)?"(\/|\@\{\S*\})\S*"\s+[rlk]+\s*,(\s*$|(\s*#.*$)\@=)/ contains=sdGlob,sdComment nextgroup=@sdEntry,sdComment,sdError,sdInclude
|
||||
syn match sdEntryK /\v^\s*(audit\s+)?(deny\s+|allow\s+)?(owner\s+|other\s+)?[rlk]+\s+(\/|\@\{\S*\})\S*\s*,(\s*$|(\s*#.*$)\@=)/ contains=sdGlob,sdComment nextgroup=@sdEntry,sdComment,sdError,sdInclude
|
||||
syn match sdEntryK /\v^\s*(audit\s+)?(deny\s+|allow\s+)?(owner\s+|other\s+)?[rlk]+\s+"(\/|\@\{\S*\})\S*"+\s*,(\s*$|(\s*#.*$)\@=)/ contains=sdGlob,sdComment nextgroup=@sdEntry,sdComment,sdError,sdInclude
|
||||
|
||||
" read entry, no highlighting
|
||||
syn match sdEntryR /\v^\s*(audit\s+)?(deny\s+|allow\s+)?(owner\s+|other\s+)?(\/|\@\{\S*\})\S*\s+[rl]+\s*,(\s*$|(\s*#.*$)\@=)/ contains=sdGlob,sdComment nextgroup=@sdEntry,sdComment,sdError,sdInclude
|
||||
syn match sdEntryR /\v^\s*(audit\s+)?(deny\s+|allow\s+)?(owner\s+|other\s+)?"(\/|\@\{\S*\})\S*"\s+[rl]+\s*,(\s*$|(\s*#.*$)\@=)/ contains=sdGlob,sdComment nextgroup=@sdEntry,sdComment,sdError,sdInclude
|
||||
syn match sdEntryR /\v^\s*(audit\s+)?(deny\s+|allow\s+)?(owner\s+|other\s+)?[rl]+\s+(\/|\@\{\S*\})\S*\s*,(\s*$|(\s*#.*$)\@=)/ contains=sdGlob,sdComment nextgroup=@sdEntry,sdComment,sdError,sdInclude
|
||||
syn match sdEntryR /\v^\s*(audit\s+)?(deny\s+|allow\s+)?(owner\s+|other\s+)?[rl]+\s+"(\/|\@\{\S*\})\S*"+\s*,(\s*$|(\s*#.*$)\@=)/ contains=sdGlob,sdComment nextgroup=@sdEntry,sdComment,sdError,sdInclude
|
||||
|
1
home/.config/lvim/syntax/apparmor.vim.bak
Symbolic link
1
home/.config/lvim/syntax/apparmor.vim.bak
Symbolic link
|
@ -0,0 +1 @@
|
|||
/usr/share/vim/vimfiles/syntax/apparmor.vim
|
14
home/.config/mimeapps.list
Normal file
14
home/.config/mimeapps.list
Normal file
|
@ -0,0 +1,14 @@
|
|||
|
||||
[Default Applications]
|
||||
inode/directory=pcmanfm.desktop
|
||||
image/jpeg=org.nomacs.ImageLounge.desktop
|
||||
image/png=org.nomacs.ImageLounge.desktop
|
||||
image/gif=org.nomacs.ImageLounge.desktop
|
||||
application/pdf=firefox.desktop
|
||||
text/html=firefox.desktop
|
||||
x-scheme-handler/http=firefox.desktop
|
||||
x-scheme-handler/https=firefox.desktop
|
||||
x-scheme-handler/about=firefox.desktop
|
||||
x-scheme-handler-unknown=firefox.desktop
|
||||
application/json=nvim.desktop
|
||||
video/mp4=mpv.desktop
|
0
home/.config/mozilla/.keep
Normal file
0
home/.config/mozilla/.keep
Normal file
25
home/.config/mpv/input.conf
Normal file
25
home/.config/mpv/input.conf
Normal file
|
@ -0,0 +1,25 @@
|
|||
# Vim keys seeking
|
||||
l seek 5
|
||||
h seek -5
|
||||
j seek -60
|
||||
k seek 60
|
||||
|
||||
# Set A-B Loop key to g, since l was rebound
|
||||
g ab-loop
|
||||
|
||||
# Swap i and I, use lowercase for toggle
|
||||
i script-binding stats/display-stats-toggle
|
||||
I script-binding stats/display-stats
|
||||
|
||||
# Zooming
|
||||
- add video-zoom -.25
|
||||
+ add video-zoom .25
|
||||
# Moving/panning video
|
||||
kp8 add video-pan-y .05
|
||||
kp6 add video-pan-x -.05
|
||||
kp2 add video-pan-y -.05
|
||||
kp4 add video-pan-x .05
|
||||
kp5 set video-pan-x 0; set video-pan-y 0; set video-zoom 0
|
||||
|
||||
# Rotation
|
||||
ctrl+r cycle_values video-rotate "90" "180" "270" "0"
|
180
home/.config/mpv/input.conf.default
Normal file
180
home/.config/mpv/input.conf.default
Normal file
|
@ -0,0 +1,180 @@
|
|||
# mpv keybindings
|
||||
#
|
||||
# Location of user-defined bindings: ~/.config/mpv/input.conf
|
||||
#
|
||||
# Lines starting with # are comments. Use SHARP to assign the # key.
|
||||
# Copy this file and uncomment and edit the bindings you want to change.
|
||||
#
|
||||
# List of commands and further details: DOCS/man/input.rst
|
||||
# List of special keys: --input-keylist
|
||||
# Keybindings testing mode: mpv --input-test --force-window --idle
|
||||
#
|
||||
# Use 'ignore' to unbind a key fully (e.g. 'ctrl+a ignore').
|
||||
#
|
||||
# Strings need to be quoted and escaped:
|
||||
# KEY show-text "This is a single backslash: \\ and a quote: \" !"
|
||||
#
|
||||
# You can use modifier-key combinations like Shift+Left or Ctrl+Alt+x with
|
||||
# the modifiers Shift, Ctrl, Alt and Meta (may not work on the terminal).
|
||||
#
|
||||
# The default keybindings are hardcoded into the mpv binary.
|
||||
# You can disable them completely with: --no-input-default-bindings
|
||||
|
||||
# Developer note:
|
||||
# On compilation, this file is baked into the mpv binary, and all lines are
|
||||
# uncommented (unless '#' is followed by a space) - thus this file defines the
|
||||
# default key bindings.
|
||||
|
||||
# If this is enabled, treat all the following bindings as default.
|
||||
#default-bindings start
|
||||
|
||||
#MBTN_LEFT ignore # don't do anything
|
||||
#MBTN_LEFT_DBL cycle fullscreen # toggle fullscreen
|
||||
#MBTN_RIGHT cycle pause # toggle pause/playback mode
|
||||
#MBTN_BACK playlist-prev # skip to the previous file
|
||||
#MBTN_FORWARD playlist-next # skip to the next file
|
||||
|
||||
# Mouse wheels, touchpad or other input devices that have axes
|
||||
# if the input devices supports precise scrolling it will also scale the
|
||||
# numeric value accordingly
|
||||
#WHEEL_UP seek 10 # seek 10 seconds forward
|
||||
#WHEEL_DOWN seek -10 # seek 10 seconds backward
|
||||
#WHEEL_LEFT add volume -2 # lower the volume
|
||||
#WHEEL_RIGHT add volume 2 # raise the volume
|
||||
|
||||
## Seek units are in seconds, but note that these are limited by keyframes
|
||||
#RIGHT seek 5 # seek 5 seconds forward
|
||||
#LEFT seek -5 # seek 5 seconds backward
|
||||
#UP seek 60 # seek 1 minute forward
|
||||
#DOWN seek -60 # seek 1 minute backward
|
||||
# Do smaller, always exact (non-keyframe-limited), seeks with shift.
|
||||
# Don't show them on the OSD (no-osd).
|
||||
#Shift+RIGHT no-osd seek 1 exact # seek exactly 1 second forward
|
||||
#Shift+LEFT no-osd seek -1 exact # seek exactly 1 second backward
|
||||
#Shift+UP no-osd seek 5 exact # seek exactly 5 seconds forward
|
||||
#Shift+DOWN no-osd seek -5 exact # seek exactly 5 seconds backward
|
||||
#Ctrl+LEFT no-osd sub-seek -1 # seek to the previous subtitle
|
||||
#Ctrl+RIGHT no-osd sub-seek 1 # seek to the next subtitle
|
||||
#Ctrl+Shift+LEFT sub-step -1 # change subtitle timing such that the previous subtitle is displayed
|
||||
#Ctrl+Shift+RIGHT sub-step 1 # change subtitle timing such that the next subtitle is displayed
|
||||
#Alt+left add video-pan-x 0.1 # move the video right
|
||||
#Alt+right add video-pan-x -0.1 # move the video left
|
||||
#Alt+up add video-pan-y 0.1 # move the video down
|
||||
#Alt+down add video-pan-y -0.1 # move the video up
|
||||
#Alt++ add video-zoom 0.1 # zoom in
|
||||
#Alt+- add video-zoom -0.1 # zoom out
|
||||
#Alt+BS set video-zoom 0 ; set video-pan-x 0 ; set video-pan-y 0 # reset zoom and pan settings
|
||||
#PGUP add chapter 1 # seek to the next chapter
|
||||
#PGDWN add chapter -1 # seek to the previous chapter
|
||||
#Shift+PGUP seek 600 # seek 10 minutes forward
|
||||
#Shift+PGDWN seek -600 # seek 10 minutes backward
|
||||
#[ multiply speed 1/1.1 # decrease the playback speed
|
||||
#] multiply speed 1.1 # increase the playback speed
|
||||
#{ multiply speed 0.5 # halve the playback speed
|
||||
#} multiply speed 2.0 # double the playback speed
|
||||
#BS set speed 1.0 # reset the speed to normal
|
||||
#Shift+BS revert-seek # undo the previous (or marked) seek
|
||||
#Shift+Ctrl+BS revert-seek mark # mark the position for revert-seek
|
||||
#q quit # exit
|
||||
#Q quit-watch-later # exit and remember the playback position
|
||||
#q {encode} quit 4 # exit
|
||||
#ESC set fullscreen no # leave fullscreen
|
||||
#ESC {encode} quit 4 # exit
|
||||
#p cycle pause # toggle pause/playback mode
|
||||
#. frame-step # advance one frame and pause
|
||||
#, frame-back-step # go back by one frame and pause
|
||||
#SPACE cycle pause # toggle pause/playback mode
|
||||
#> playlist-next # skip to the next file
|
||||
#ENTER playlist-next # skip to the next file
|
||||
#< playlist-prev # skip to the previous file
|
||||
#O no-osd cycle-values osd-level 3 1 # toggle displaying the OSD on user interaction or always
|
||||
#o show-progress # show playback progress
|
||||
#P show-progress # show playback progress
|
||||
#i script-binding stats/display-stats # display information and statistics
|
||||
#I script-binding stats/display-stats-toggle # toggle displaying information and statistics
|
||||
#` script-binding console/enable # open the console
|
||||
#z add sub-delay -0.1 # shift subtitles 100 ms earlier
|
||||
#Z add sub-delay +0.1 # delay subtitles by 100 ms
|
||||
#x add sub-delay +0.1 # delay subtitles by 100 ms
|
||||
#ctrl++ add audio-delay 0.100 # change audio/video sync by delaying the audio
|
||||
#ctrl+- add audio-delay -0.100 # change audio/video sync by shifting the audio earlier
|
||||
#Shift+g add sub-scale +0.1 # increase the subtitle font size
|
||||
#Shift+f add sub-scale -0.1 # decrease the subtitle font size
|
||||
#9 add volume -2 # lower the volume
|
||||
#/ add volume -2 # lower the volume
|
||||
#0 add volume 2 # raise the volume
|
||||
#* add volume 2 # raise the volume
|
||||
#m cycle mute # toggle mute
|
||||
#1 add contrast -1 # decrease the contrast
|
||||
#2 add contrast 1 # increase the contrast
|
||||
#3 add brightness -1 # decrease the brightness
|
||||
#4 add brightness 1 # increase the brightness
|
||||
#5 add gamma -1 # decrease the gamma
|
||||
#6 add gamma 1 # increase the gamma
|
||||
#7 add saturation -1 # decrease the saturation
|
||||
#8 add saturation 1 # increase the saturation
|
||||
#Alt+0 set current-window-scale 0.5 # halve the window size
|
||||
#Alt+1 set current-window-scale 1.0 # reset the window size
|
||||
#Alt+2 set current-window-scale 2.0 # double the window size
|
||||
#d cycle deinterlace # toggle the deinterlacing filter
|
||||
#r add sub-pos -1 # move subtitles up
|
||||
#R add sub-pos +1 # move subtitles down
|
||||
#t add sub-pos +1 # move subtitles down
|
||||
#v cycle sub-visibility # hide or show the subtitles
|
||||
#Alt+v cycle secondary-sub-visibility # hide or show the secondary subtitles
|
||||
#V cycle sub-ass-vsfilter-aspect-compat # toggle stretching SSA/ASS subtitles with anamorphic videos to match the historical renderer
|
||||
#u cycle-values sub-ass-override "force" "no" # toggle overriding SSA/ASS subtitle styles with the normal styles
|
||||
#j cycle sub # switch subtitle track
|
||||
#J cycle sub down # switch subtitle track backwards
|
||||
#SHARP cycle audio # switch audio track
|
||||
#_ cycle video # switch video track
|
||||
#T cycle ontop # toggle placing the video on top of other windows
|
||||
#f cycle fullscreen # toggle fullscreen
|
||||
#s screenshot # take a screenshot of the video in its original resolution with subtitles
|
||||
#S screenshot video # take a screenshot of the video in its original resolution without subtitles
|
||||
#Ctrl+s screenshot window # take a screenshot of the window with OSD and subtitles
|
||||
#Alt+s screenshot each-frame # automatically screenshot every frame; issue this command again to stop taking screenshots
|
||||
#w add panscan -0.1 # decrease panscan
|
||||
#W add panscan +0.1 # shrink black bars by cropping the video
|
||||
#e add panscan +0.1 # shrink black bars by cropping the video
|
||||
#A cycle-values video-aspect-override "16:9" "4:3" "2.35:1" "-1" # cycle the video aspect ratio ("-1" is the container aspect)
|
||||
#POWER quit # exit
|
||||
#PLAY cycle pause # toggle pause/playback mode
|
||||
#PAUSE cycle pause # toggle pause/playback mode
|
||||
#PLAYPAUSE cycle pause # toggle pause/playback mode
|
||||
#PLAYONLY set pause no # unpause
|
||||
#PAUSEONLY set pause yes # pause
|
||||
#STOP quit # exit
|
||||
#FORWARD seek 60 # seek 1 minute forward
|
||||
#REWIND seek -60 # seek 1 minute backward
|
||||
#NEXT playlist-next # skip to the next file
|
||||
#PREV playlist-prev # skip to the previous file
|
||||
#VOLUME_UP add volume 2 # raise the volume
|
||||
#VOLUME_DOWN add volume -2 # lower the volume
|
||||
#MUTE cycle mute # toggle mute
|
||||
#CLOSE_WIN quit # exit
|
||||
#CLOSE_WIN {encode} quit 4 # exit
|
||||
#ctrl+w quit # exit
|
||||
#E cycle edition # switch edition
|
||||
#l ab-loop # set/clear A-B loop points
|
||||
#L cycle-values loop-file "inf" "no" # toggle infinite looping
|
||||
#ctrl+c quit 4 # exit
|
||||
#DEL script-binding osc/visibility # cycle OSC visibility between never, auto (mouse-move) and always
|
||||
#ctrl+h cycle-values hwdec "auto" "no" # toggle hardware decoding
|
||||
#F8 show-text ${playlist} # show the playlist
|
||||
#F9 show-text ${track-list} # show the list of video, audio and sub tracks
|
||||
|
||||
#
|
||||
# Legacy bindings (may or may not be removed in the future)
|
||||
#
|
||||
#! add chapter -1 # seek to the previous chapter
|
||||
#@ add chapter 1 # seek to the next chapter
|
||||
|
||||
#
|
||||
# Not assigned by default
|
||||
# (not an exhaustive list of unbound commands)
|
||||
#
|
||||
|
||||
# ? cycle sub-forced-only # toggle DVD forced subs
|
||||
# ? stop # stop playback (quit or enter idle mode)
|
||||
|
1
home/.config/mpv/mpv.conf
Normal file
1
home/.config/mpv/mpv.conf
Normal file
|
@ -0,0 +1 @@
|
|||
loop=yes
|
92
home/.config/nomacs/Image Lounge.conf
Normal file
92
home/.config/nomacs/Image Lounge.conf
Normal file
|
@ -0,0 +1,92 @@
|
|||
[General]
|
||||
DkEditDock=2
|
||||
DkExplorer=1
|
||||
firstTime=false
|
||||
geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\x3\xc7\0\0\x2\x38\0\0\au\0\0\x4\x32\0\0\x3\xc7\0\0\x2\x38\0\0\au\0\0\x4-\0\0\0\0\x2\0\0\0\a\x80\0\0\x3\xc7\0\0\x2\x38\0\0\au\0\0\x4\x32)
|
||||
geometryNomacs=@Rect(967 568 943 507)
|
||||
windowState=@ByteArray(\0\0\0\xff\0\0\0\0\xfd\0\0\0\x3\0\0\0\0\0\0\x1\0\0\0\x4\x4\xfc\x2\0\0\0\x1\xfb\0\0\0\x14\0\x44\0k\0\x45\0x\0p\0l\0o\0r\0\x65\0r\0\0\0\0\x34\0\0\x4\x4\0\0\0\0\0\0\0\0\0\0\0\x1\0\0\0\xdd\0\0\x3\xc4\xfc\x2\0\0\0\x1\xfb\0\0\0\x14\0\x44\0k\0\x45\0\x64\0i\0t\0\x44\0o\0\x63\0k\0\0\0\0\x1e\0\0\x3\xc4\0\0\0\0\0\0\0\0\0\0\0\x3\0\0\a\x80\0\0\0>\xfc\x1\0\0\0\x1\xfb\0\0\0\x10\0\x63\0r\0o\0p\0\x44\0o\0\x63\0k\0\0\0\0\0\0\0\a\x80\0\0\0\0\0\0\0\0\0\0\x3\xaf\0\0\x1\xe4\0\0\0\x4\0\0\0\x4\0\0\0\b\0\0\0\b\xfc\0\0\0\x1\0\0\0\x2\0\0\0\x1\0\0\0\x16\0\x45\0\x64\0i\0t\0T\0o\0o\0l\0\x42\0\x61\0r\0\0\0\0\0\xff\xff\xff\xff\0\0\0\0\0\0\0\0)
|
||||
|
||||
[AppSettings]
|
||||
appMode=0
|
||||
currentAppMode=0
|
||||
defaultJpgQuality=97
|
||||
firstTime.nomacs.3=false
|
||||
hideAllPanels=true
|
||||
showPlayer=@Variant(\0\0\0\r\0\0\0\x6\0)
|
||||
|
||||
[CustomPluginShortcuts]
|
||||
Composite%20Image=Composite Image
|
||||
Crop%20to%20Metadata=Crop to Metadata
|
||||
Crop%20to%20Page=Crop to Page
|
||||
Draw%20to%20Page=Draw to Page
|
||||
Fake%20Miniatures=Fake Miniatures
|
||||
Image%20Transform=Image Transform
|
||||
Paint%20on%20Image=Paint on Image
|
||||
|
||||
[DisplaySettings]
|
||||
bgColorNoMacsRGBA=4281545523
|
||||
bgColorWidgetRGBA=2852126720
|
||||
fadeSec=@Variant(\0\0\0\x87\0\0\0\0)
|
||||
fontColorRGBA=4292730333
|
||||
highlightColorRGBA=4278233855
|
||||
iconColorRGBA=4292730333
|
||||
iconSize=18
|
||||
showCrop=true
|
||||
themeName312=Dark-Theme.css
|
||||
transition=0
|
||||
zoomToFit=true
|
||||
|
||||
[DkAppManager]
|
||||
Apps\size=0
|
||||
|
||||
[DkCompressionDialog]
|
||||
CompressionCombo0=0
|
||||
bgCompressionColor0=4294967295
|
||||
|
||||
[DkDialog]
|
||||
deleteFileDialog=false
|
||||
deleteFileDialog-answer=16384
|
||||
overwriteDialog=false
|
||||
overwriteDialog-answer=16384
|
||||
saveEditDialog=false
|
||||
saveEditDialog-answer=16384
|
||||
saveTabsDialog=false
|
||||
saveTabsDialog-answer=65536
|
||||
|
||||
[DkExplorer]
|
||||
Date%20ModifiedHidden=true
|
||||
Date%20ModifiedSize=0
|
||||
LoadSelected=false
|
||||
NameHidden=false
|
||||
NameSize=254
|
||||
ReadOnly=true
|
||||
RootPath=/home/itsdrike
|
||||
SizeHidden=true
|
||||
SizeSize=0
|
||||
TypeHidden=true
|
||||
TypeSize=0
|
||||
|
||||
[DkFilePreview]
|
||||
windowPosition=1
|
||||
|
||||
[DkMetaDataHUD]
|
||||
keyValues=File.Filename, File.Path, File.Size, Exif.Image.Make, Exif.Image.Model, Exif.Image.DateTime, Exif.Image.ImageDescription, Exif.Photo.ISO, Exif.Photo.FocalLength, Exif.Photo.ExposureTime, Exif.Photo.Flash, Exif.Photo.FNumber
|
||||
numColumns=-1
|
||||
windowPosition=3
|
||||
|
||||
[MetaDataSettings]
|
||||
saveExifOrientation=false
|
||||
|
||||
[Page%20Extraction%20Plugin]
|
||||
Method=0
|
||||
|
||||
[SlideShowSettings]
|
||||
time=@Variant(\0\0\0\x87@\xa0\0\0)
|
||||
|
||||
[SynchronizeSettings]
|
||||
checkForUpdates=true
|
||||
disableUpdateInteraction=false
|
||||
|
||||
[zooming]
|
||||
useLevels=false
|
||||
zoomLevels="0.0001,0.001,0.01,0.05,0.1,0.125,0.166,0.25,0.333,0.5,0.66,1,1.5,2,3,4,5,6,7,8,12,16,32,64,128"
|
4
home/.config/npm/npmrc
Normal file
4
home/.config/npm/npmrc
Normal file
|
@ -0,0 +1,4 @@
|
|||
prefix=${XDG_DATA_HOME}/npm
|
||||
cache=${XDG_CACHE_HOME}/npm
|
||||
tmp=${XDG_RUNTIME_DIR}/npm
|
||||
init-module=${XDG_CONFIG_HOME}/npm/config/npm-init.js
|
29
home/.config/pcmanfm/default/pcmanfm.conf
Normal file
29
home/.config/pcmanfm/default/pcmanfm.conf
Normal file
|
@ -0,0 +1,29 @@
|
|||
[config]
|
||||
bm_open_method=0
|
||||
|
||||
[volume]
|
||||
mount_on_startup=1
|
||||
mount_removable=1
|
||||
autorun=1
|
||||
|
||||
[autorun]
|
||||
x-content/bootable-media=pcmanfm
|
||||
|
||||
[ui]
|
||||
always_show_tabs=0
|
||||
max_tab_chars=32
|
||||
win_width=943
|
||||
win_height=502
|
||||
splitter_pos=217
|
||||
media_in_new_tab=0
|
||||
desktop_folder_new_win=0
|
||||
change_tab_on_drop=1
|
||||
close_on_unmount=1
|
||||
focus_previous=0
|
||||
side_pane_mode=places
|
||||
view_mode=icon
|
||||
show_hidden=0
|
||||
sort=desc;ascending;
|
||||
toolbar=newtab;navigation;home;
|
||||
show_statusbar=1
|
||||
pathbar_mode_buttons=1
|
0
home/.config/pki/.keep
Normal file
0
home/.config/pki/.keep
Normal file
3
home/.config/pypoetry/config.toml
Normal file
3
home/.config/pypoetry/config.toml
Normal file
|
@ -0,0 +1,3 @@
|
|||
[virtualenvs]
|
||||
in-project = true
|
||||
prefer-active-python = true
|
298
home/.config/shell/aliases
Executable file
298
home/.config/shell/aliases
Executable file
|
@ -0,0 +1,298 @@
|
|||
#!/bin/sh
|
||||
|
||||
# I'm not the greatest typist
|
||||
alias sl='ls'
|
||||
alias mdkir='mkdir'
|
||||
alias soruce='source'
|
||||
alias souce='source'
|
||||
alias suod='sudo '
|
||||
alias sduo='sudo '
|
||||
|
||||
# Replacements (adding flags)
|
||||
alias cp='cp -iv' # Ask before overwriting, verbose
|
||||
alias mv='mv -iv' # Ask before overwriting, verbose
|
||||
alias rm='trash-put' # Use trash-cli instead of true removal
|
||||
alias rmr='\rm -v' # True rm, verbose (asking here is too annoying)
|
||||
alias wget='wget -c' # Resume wget by default
|
||||
alias df='df -H' # Show sizes as powers of 1000
|
||||
|
||||
# Directory changing
|
||||
alias ..='cd ..'
|
||||
alias ...='cd ../../'
|
||||
alias ....='cd ../../../'
|
||||
alias .....='cd ../../../../'
|
||||
alias .2='cd ../../'
|
||||
alias .3='cd ../../../'
|
||||
alias .4='cd ../../../../'
|
||||
alias .5='cd ../../../../../'
|
||||
|
||||
# Files/Directories utilities
|
||||
alias mkdir='mkdir -p'
|
||||
alias md='mkdir'
|
||||
alias fhere='find . -name'
|
||||
alias rr='rmr -r'
|
||||
alias rf='rmr -f'
|
||||
alias rrf='rmr -rf'
|
||||
alias vimdiff='nvim -d'
|
||||
|
||||
# Directory listing aliases, defaults to exa, if aviable
|
||||
if command -v exa > /dev/null; then
|
||||
alias ls='exa'
|
||||
alias l='exa -glah --classify'
|
||||
alias ll='exa -glah --classify -s=size --group-directories-first -r'
|
||||
alias ldir='exa -glahD'
|
||||
alias tree='exa -Tlagh'
|
||||
alias dotall='exa -hulad .[a-z]*' # Show both dotdirs and dotfiles
|
||||
alias dotfiles='dotall | grep -v ^d' # Show all dotfiles
|
||||
alias dotdirs='dotall | grep --color=never ^d' # Show all dotdirs
|
||||
else
|
||||
alias ls='ls --color=auto'
|
||||
alias l='ls -lahX --classify'
|
||||
alias ll='ls -lahX --classify --group-directories-first'
|
||||
alias ldir='ls -lahX --classify | grep --color=never ^d'
|
||||
alias dotall='ls -lahXd .[a-z]*'
|
||||
alias dotfiles='dotall | grep -v ^d'
|
||||
alias dotdirs='dotall | grep --color=never ^d'
|
||||
fi
|
||||
|
||||
# Config access shortcuts
|
||||
alias cfzsh='vim ~/.config/zsh/.zshrc'
|
||||
alias cfalias='vim ~/.config/shell/aliases'
|
||||
alias cffunctions='vim ~/.config/shell/functions'
|
||||
alias cfprofile='vim ~/.config/shell/profile'
|
||||
alias cfenvironment='vim ~/.config/shell/environment'
|
||||
alias cfenv='cfenvironment'
|
||||
alias cfhandlers='vim ~/.config/shell/handlers'
|
||||
alias cfprompt='vim ~/.config/shell/prompt'
|
||||
alias cfkeybinds='vim ~/.config/shell/keybinds'
|
||||
alias cfxprofile='vim ~/.config/x11/xprofile'
|
||||
alias cfsxhkd='vim ~/.config/sxhkd/sxhkdrc'
|
||||
alias cfkbd='cfsxhkd'
|
||||
alias cfbspwm='vim ~/.config/bspwm/bspwmrc'
|
||||
alias cfxmonad='vim ~/.config/xmonad/xmonad.hs && xmonad --recompile && xmonad --restart'
|
||||
alias cfxmobar='vim ~/.config/xmobar/xmobarrc.hs && ~/.config/xmobar/multi_mon.sh 2'
|
||||
alias cftodo='vim ~/Personal/vimwiki/todo.md'
|
||||
alias cfnvim='vim ~/.config/nvim'
|
||||
alias cfvim='cfnvim'
|
||||
|
||||
# z.lua shortcuts
|
||||
alias j='z' # for the sake of autojump old habits
|
||||
alias zz='z -c' # restrict matches to subdirs of $PWD
|
||||
alias zb='z -b' # restrict matches to parent directories
|
||||
alias zi='z -I' # cd with interactive fzf selection
|
||||
alias zbi='z -b -I' # pick parent directory to cd into with fzf
|
||||
|
||||
# Fallbacks
|
||||
command -v hd > /dev/null || alias hd='hexdump -C' # Cannonical hex dump; some systems have this symlinked
|
||||
command -v md5sum > /dev/null || alias md5sum='md5' # Fallback from `md5sum` to `md5`
|
||||
command -v sha1sum > /dev/null || alias sha1sum='shasum' # Fallback from `sha1sum` to `shasum`
|
||||
command -v vim > /dev/null && alias vi='vim' # Let vim take precedence over vi
|
||||
command -v nvim > /dev/null && alias vi='nvim' && alias vim='nvim' # Let nvim take precedence over vi/vim
|
||||
command -v vimtutor > /dev/null || alias vimtutor='nvim -c Tutor' # Let vimtutor fallback to nvim's tutor
|
||||
|
||||
# X11 clipboard (either using xclip or xsel, xsel takes precedence if both)
|
||||
command -v xclip > /dev/null && alias pbcopy='xclip -selection clipboard'
|
||||
command -v xclip > /dev/null && alias pbpaste='xclip -selection clipboard -o'
|
||||
command -v xsel > /dev/null && alias pbcopy='xsel --clipboard --input'
|
||||
command -v xsel > /dev/null && alias pbpaste='xsel --clipboard --output'
|
||||
|
||||
# File validation and manipulation
|
||||
alias yamlcheck='python -c "import sys, yaml as y; y.safe_load(open(sys.argv[1]))"' # Validate YAML
|
||||
alias jsoncheck='jq "." >/dev/null <' # Validate JSON
|
||||
alias urlencode='python2 -c "import sys, urllib as ul; print ul.quote_plus(sys.argv[1]);"' # Encode strings as URLs (space->%20, etc.)
|
||||
alias mergepdf='gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=_merged.pdf' # Usage: `mergepdf input{1,2,3}.pdf``
|
||||
alias encrypt='gpg -c --no-symkey-cache --cipher-algo AES256' # Encrypt file with AES256 symetric encryption
|
||||
alias decrypt='gpg' # For the sake of completeness, include decrypt command to the above, though it's only just gpg alias
|
||||
|
||||
# Terminal window swallowing for blocking programs (devour)
|
||||
alias xdg-open='devour xdg-open'
|
||||
alias mpv='devour mpv'
|
||||
alias nomacs='devour nomacs'
|
||||
alias pcmanfm='devour pcmanfm'
|
||||
alias spotify='devour spotify'
|
||||
|
||||
# Regular expressions
|
||||
alias reg_email='echo "[a-Z0-9._%-]+@[a-Z0-9.-]+\.[a-Z]{2,10}"'
|
||||
alias reg_mac='echo "([[:xdigit:]]{2}:){5}[[:xdigit:]]{2}"'
|
||||
alias reg_ipv4='echo "([0-9]{1,3}\.){3}[0-9]{1,3}"'
|
||||
alias reg_ipv6='echo "\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?\s*"' # Also catches loopbacks (::1), (for valid matching, it needs to be this long...)
|
||||
alias reg_ip='echo "(`reg_ipv4`|`reg_ipv6`)"' # Match both IPv4 and IPv6
|
||||
|
||||
# Grep aliases
|
||||
alias grep_email='grep -E `reg_email`'
|
||||
alias grep_ip='grep -E `reg_ip`'
|
||||
alias grep_mac='grep -E `reg_mac`'
|
||||
alias massgrep='grep -RHIni'
|
||||
|
||||
# Network
|
||||
alias ip-show='curl https://ifconfig.co' # Get global IP address
|
||||
alias ips="ifconfig -a | grep -oE \"inet6? (addr:)?s?\`reg_ip\`\" | awk '{ sub(/inet6? (addr:)? ?/, \"\"); print }'"
|
||||
alias lan-device-scan='nmap -T5 -sP 192.168.0.0-255'
|
||||
alias lan-vuln-scan='nmap -sT -O --script vuln 192.168.0.0-255'
|
||||
alias ports='netstat -tulanp'
|
||||
alias listening-ports='netstat -vtlnp --listening'
|
||||
alias ssh-list='ss | grep ssh' # List all SSH connections
|
||||
alias serve='python -m http.server' # Serve current directorty as HTTP
|
||||
alias reverse-dns='host' # It might be easier to just use `host` though
|
||||
alias torify='source torsocks on' # Pass every command via torsocks
|
||||
alias untorify='source torsocks off' # Stop passing commands via torsocks
|
||||
|
||||
# Firewall aliases (IPTables/UFW)
|
||||
alias ipt='iptables' # Shortcut
|
||||
alias iptlist='iptables -L -n -v --line-numbers' # All rules
|
||||
alias iptlistin='iptables -L INPUT -n -v --line-numbers' # IN rules
|
||||
alias iptlistout='iptables -L OUTPUT -n -v --line-numbers' # OUT rules
|
||||
alias iptlistfw='iptables -L FORWARD -n -v --line-numbers' # FORWARD rules
|
||||
alias ufw-log='journalctl -f -n 100 -g ufw' # Show UFW log entries in system journal
|
||||
|
||||
# Kernel actions
|
||||
alias kernel-recompile='cd /usr/src/linux && make -j7 && make -j7 modules_install && make install'
|
||||
alias kernel-oldconfig='cd /usr/src/linux && make oldconfig'
|
||||
alias kernel-configure='cd /usr/src/linux && make menuconfig'
|
||||
|
||||
# System actions
|
||||
alias sv='systemctl'
|
||||
alias pacnew="find / -name '*.pacnew' 2>/dev/null" # Search for all new configurations after pacman update
|
||||
alias backup="rsync -avHAXS --delete --filter='dir-merge /.rsync-filter'" # Make full rsync backup, respecting .rsync-filter files for exclusions
|
||||
alias upload='curl -F "f:1=<-" ix.io'
|
||||
alias upload-journal='sudo journalctl -b -1 | upload' # Upload journalctl from last boot to ix.io
|
||||
alias auth-log='journalctl SYSLOG_FACILITY=10 -r'
|
||||
alias cpu-stress='for i in $(seq $(getconf _NPROCESSORS_ONLN)); do yes > /dev/null & done' # Run `yes > /dev/null` on all cores as stress test
|
||||
alias nvidia='__NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia' # Run app with nvidia (on hybrid mode with optimus)
|
||||
alias swapout='sudo swapoff -a; sudo swapon -a' # Reset swap (move everything to RAM)
|
||||
alias mount-ram='mount -t tmpfs tmpfs' # Mount RAM disk for fast filesystem
|
||||
alias screenlock='xset s activate' # Use DPMS to trigger xss-lock and handle screen locking
|
||||
|
||||
# System info
|
||||
alias meminfo='free -m -l -t'
|
||||
alias cpuinfo='lscpu'
|
||||
alias batinfo='sudo watch -d -n 2 tlp-stat -b'
|
||||
alias battery='cat /sys/class/power_supply/BAT0/capacity'
|
||||
alias gpumeminfo='frep -i --color memory /var/log/Xorg.0.log'
|
||||
alias journalerr='sudo journalctl -p 3 -xb'
|
||||
alias distro='cat /etc/*-release'
|
||||
alias diskspace_report="df -P -kHl"
|
||||
alias kernel='uname -r'
|
||||
|
||||
# System processes
|
||||
alias psmem='ps auxf | sort -nr -k 4' # Top memory eaters
|
||||
alias psmem10='psmem | head -10' # Top 10 memory eaters
|
||||
alias pscpu='ps auxf | sort -nr -k 3' # Top cpu eaters
|
||||
alias pscpu10='pscpu | head -10' # Top 10 cpu eaters
|
||||
alias psg='ps aux | grep -v grep | grep -i -e VSZ -e' # Get searchable process with nice output
|
||||
|
||||
# Time info
|
||||
alias now='date +"%T"'
|
||||
alias nowtime='now'
|
||||
alias nowdate='date +"%d-%m-%Y"'
|
||||
alias week='date +%V'
|
||||
|
||||
# Cleanup
|
||||
alias clean-trash='rm -rf ~/.local/share/Trash/* || echo "Trash already empty"'
|
||||
alias clean-downloads='rm -rf ~/Downloads/* || echo "Downloads directory is already empty"'
|
||||
alias clean-journal='journalctl --vacuum-size=200M || echo "You have to be root to clean journal"'
|
||||
alias clean-pacman='pacman -Sc || echo "You have to be root to clean pacman cache"'
|
||||
alias cleanup='clean-trash && clean-down && clean-journal && clean-pacman'
|
||||
|
||||
# Git aliases
|
||||
alias g='git'
|
||||
alias gp='git push'
|
||||
alias gpl='git pull'
|
||||
alias gf='git fetch'
|
||||
alias gs='git status --short --branch'
|
||||
alias gss='git status'
|
||||
alias ga='git add'
|
||||
alias gap='git add --patch'
|
||||
alias gc='git commit'
|
||||
alias gcm='git commit --message'
|
||||
alias gb='git branch'
|
||||
alias gch='git checkout'
|
||||
alias gchb='git checkout -b'
|
||||
alias gd='git diff'
|
||||
alias gdc='git diff --cached'
|
||||
alias gundo='git reset --soft HEAD~'
|
||||
alias gredo="git reset 'HEAD@{1}'"
|
||||
|
||||
# Youtube-dl aliases
|
||||
alias ytv-best='youtube-dl -f bestvideo+bestaudio'
|
||||
alias yta-best='youtube-dl --extract-audio --audio-format best'
|
||||
alias yta-mp3='youtube-dl --extract-audio --audio-format mp3'
|
||||
alias yta-wav='youtube-dl --extract-audio --audio-format wav'
|
||||
|
||||
# Terminal vim-like exits, in case I think the terminal is vim
|
||||
alias :q='exit'
|
||||
alias :q!='exit'
|
||||
alias :wq='exit'
|
||||
alias :wq!='exit'
|
||||
|
||||
# Shell aliases
|
||||
alias reload="exec \$SHELL" # Reload the shell (i.e. invoke as a login shell)
|
||||
alias path='echo -e ${PATH//:/\\n}' # Print each PATH entry on a separate line
|
||||
alias unsudo='sudo -k' # Reset sudo timeout (sudo will require password)
|
||||
alias vimwiki='vim -c VimwikiIndex' # Open vimwiki index
|
||||
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$//'\'')"'
|
||||
alias tty-clock='tty-clock -Ssc' # Terminal clock screensaver
|
||||
alias rick='curl -s -L https://raw.githubusercontent.com/ItsDrike/rickrollrc/master/roll.sh| bash' # Terminal rickroll
|
||||
alias hist='fc -lt "$HISTTIMEFORMAT" 1'
|
||||
alias sudovim='sudoedit'
|
||||
|
||||
# If user is not root, pass all commands via sudo/doas
|
||||
if [ "$(id -u)" -ne 0 ]; then
|
||||
# Enable aliases to be sudoed/doased
|
||||
# with doas having precedence over sudo if found
|
||||
|
||||
## Uncomment if you are using autocompletion (is ZSH)
|
||||
#command -v /usr/bin/sudo > /dev/null && alias doas='nocorrect sudo ' && alias sudo='nocorrect sudo '
|
||||
#command -v /usr/bin/doas > /dev/null && alias doas='nocorrect doas ' && alias sudo='nocorrect doas '
|
||||
|
||||
## if the above is uncommented, comment this
|
||||
command -v /usr/bin/sudo > /dev/null && alias doas='sudo ' && alias sudo='sudo '
|
||||
command -v /usr/bin/doas > /dev/null && alias doas='doas ' && alias sudo='doas '
|
||||
fi
|
||||
|
||||
# enable color support
|
||||
if [ -x /usr/bin/dircolors ]; then
|
||||
(test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)") || eval "$(dircolors -b)"
|
||||
alias dir='dir --color=auto'
|
||||
alias vdir='vdir --color=auto'
|
||||
|
||||
alias grep='grep --color=auto'
|
||||
alias cgrep='grep --color=always'
|
||||
alias fgrep='fgrep --color=auto'
|
||||
alias egrep='egrep --color=auto'
|
||||
|
||||
alias diff='diff --color=auto'
|
||||
alias ip='ip --color=auto'
|
||||
|
||||
# Take advantage of $LS_COLORS for completion as well
|
||||
zstyle ':completion:*' list-colors "${(s.:.)LS_COLORS}"
|
||||
fi
|
||||
|
||||
# Normalize `open` across Linux, macOS, and Windows.
|
||||
# This is needed to make `open` function (see below) cross-platform
|
||||
if [ ! "$(uname -s)" = 'Darwin' ]; then
|
||||
if grep -q Microsoft /proc/version; then
|
||||
# Ubuntu on Windows using the Linux subsystem
|
||||
alias open='explorer.exe'
|
||||
else
|
||||
alias open='xdg-open'
|
||||
fi
|
||||
fi
|
||||
|
||||
# Autogenerate python aliases
|
||||
if [ -f ~/.config/shell/py-alias ]; then
|
||||
# shellcheck source=/home/itsdrike/.config/shell/py-alias
|
||||
. "$HOME/.config/shell/py-alias"
|
||||
fi
|
||||
|
||||
# Functions
|
||||
if [ -f ~/.config/shell/functions ]; then
|
||||
# shellcheck source=/home/itsdrike/.config/shell/functions
|
||||
. "$HOME/.config/shell/functions"
|
||||
fi
|
||||
|
||||
# Extra
|
||||
if [ -f ~/.config/shell/extra ]; then
|
||||
# shellcheck source=/home/itsdrike/.config/shell/extra
|
||||
. "$HOME/.config/shell/extra"
|
||||
fi
|
78
home/.config/shell/environment
Executable file
78
home/.config/shell/environment
Executable file
|
@ -0,0 +1,78 @@
|
|||
#!/bin/sh
|
||||
|
||||
# Environmental variable definitions.
|
||||
# This file is only sourced once after login, unlike .zshrc/.bashrc
|
||||
#
|
||||
# NOTE: This file shouldn't be defined for root account. Sudo
|
||||
# will not source it (and neither will it source .zshrc/.zprofile),
|
||||
# which means the XDG definitions will be ignored anyway, and
|
||||
# defining them may break programs when root is actually logged in.
|
||||
|
||||
# Define some variables for POSIX compatibility
|
||||
uid="$(id -u)"
|
||||
|
||||
# Default programs
|
||||
export EDITOR="nvim"
|
||||
export BROWSER="firefox"
|
||||
export TERMINAL="alacritty"
|
||||
export DIFFPROG="nvim -d"
|
||||
export FILEMANAGER="pcmanfm"
|
||||
|
||||
# XDG Standard paths
|
||||
export XDG_CONFIG_HOME="$HOME/.config"
|
||||
export XDG_CACHE_HOME="$HOME/.cache"
|
||||
export XDG_DATA_HOME="$HOME/.local/share"
|
||||
export XDG_RUNTIME_DIR="/run/user/$uid"
|
||||
|
||||
# Per-Application XDG settings
|
||||
export ZDOTDIR="$XDG_CONFIG_HOME/zsh"
|
||||
export XINITRC="$XDG_CONFIG_HOME/x11/xinitrc"
|
||||
#export XAUTHORITY="$XDG_RUNTIME_DIR/Xauthority" # This line will break some DMs.
|
||||
export LESSHISTFILE="-"
|
||||
export GTK2_RC_FILES="$XDG_CONFIG_HOME/gtk-2.0/gtkrc"
|
||||
export WGETRC="$XDG_CONFIG_HOME/wget/wgetrc"
|
||||
export GNUPGHOME="$XDG_DATA_HOME/gnupg"
|
||||
export GOPATH="$XDG_DATA_HOME/go"
|
||||
export CARGO_HOME="$XDG_DATA_HOME/cargo"
|
||||
export RUSTUP_HOME="$XDG_DATA_HOME/rustup"
|
||||
export GRADLE_USER_HOME="$XDG_DATA_HOME/gradle"
|
||||
export _JAVA_OPTIONS="-Djava.util.prefs.userRoot=$XDG_CONFIG_HOME/java"
|
||||
export NPM_CONFIG_USERCONFIG="$XDG_CONFIG_HOME/npm/npmrc"
|
||||
export NUGET_PACKAGES="$XDG_CACHE_HOME/NuGetPackages"
|
||||
# Less commonly used applications
|
||||
export _ZL_DATA="$XDG_DATA_HOME/zlua"
|
||||
export SQLITE_HISTORY="$XDG_DATA_HOME/sqlite_history"
|
||||
export WAKATIME_HOME="$XDG_CONFIG_HOME/wakatime"
|
||||
export IPYTHONDIR="$XDG_CONFIG_HOME/ipython"
|
||||
export PYENV_ROOT="$XDG_DATA_HOME/pyenv"
|
||||
export MYPY_CACHE_DIR="$XDG_CACHE_HOME/mypy"
|
||||
#export PYLINTHOME="$XDG_CACHE_HOME/pylint"
|
||||
#export DOCKER_CONFIG="$XDG_CONFIG_HOME/docker"
|
||||
#export CUDA_CACHE_PATH="$XDG_CACHE_HOME/nv"
|
||||
|
||||
# Colorful man pages
|
||||
# If bat is installed, use it as manpager
|
||||
# shellcheck disable=SC2155
|
||||
if command -v bat > /dev/null; then
|
||||
export MANPAGER="sh -c 'col -bx | bat -l man -p'"
|
||||
else
|
||||
export LESS_TERMCAP_mb="$(printf '%b' '[1;31m')"
|
||||
export LESS_TERMCAP_md="$(printf '%b' '[1;36m')"
|
||||
export LESS_TERMCAP_me="$(printf '%b' '[0m')"
|
||||
export LESS_TERMCAP_so="$(printf '%b' '[01;44;33m')"
|
||||
export LESS_TERMCAP_se="$(printf '%b' '[0m')"
|
||||
export LESS_TERMCAP_us="$(printf '%b' '[1;32m')"
|
||||
export LESS_TERMCAP_ue="$(printf '%b' '[0m')"
|
||||
fi
|
||||
|
||||
# Other program settings
|
||||
export HISTTIMEFORMAT="%Y-%m-%d %T "
|
||||
export SUDO_ASKPASS="$HOME/.local/bin/scripts/dmenu/dmenupass"
|
||||
export PIPENV_VENV_IN_PROJECT=1 # Force pipenv to create new environments within projects ./.venv
|
||||
export XSECURELOCK_SHOW_HOSTNAME=0 # Don't show hostname in xsecurelock
|
||||
export XSECURELOCK_SHOW_DATETIME=1 # Show current date and time in xsecurelock
|
||||
export QT_QPA_PLATFORMTHEME="qt5ct" # Have QT use theme from qt5ct.
|
||||
#export QT_STYLE_OVERRIDE="gtk2" # Have QT use the gtk2 theme (needs aur/qt5-styleplugins)
|
||||
|
||||
# Remove irrelevant variables added for posix compatibility
|
||||
unset posix
|
245
home/.config/shell/extra
Executable file
245
home/.config/shell/extra
Executable file
|
@ -0,0 +1,245 @@
|
|||
#!/usr/bin/env zsh
|
||||
|
||||
# ----------------------------------------------------------------
|
||||
# Additional aliases
|
||||
alias cfextra='vim ~/.config/shell/extra'
|
||||
alias cflvim='lvim ~/.config/lvim/config.lua'
|
||||
alias cfgit='vim ~/.config/git/config'
|
||||
alias cfhypr="vim ~/.config/hypr/hyprland.conf"
|
||||
alias cfwaybar='vim ~/.config/waybar/config-hypr'
|
||||
alias dotsync='git checkout arch && git push && git checkout gentoo && git merge --ff arch && git push && git checkout arch'
|
||||
alias kbsk='setxkbmap sk qwerty'
|
||||
alias kbus='setxkbmap us'
|
||||
alias update-webpage='ssh webpage "cd /var/www/itsdrike.com; git pull; ./scripts/build.sh"'
|
||||
alias octave='octave --quiet'
|
||||
alias savekern='cp /proc/vmcore /root/crash.dump'
|
||||
alias discord-bump='sleep $((2*60*60)) && notify-send "Bump" "Bump time expired"'
|
||||
alias svim='nvim'
|
||||
alias vim='lvim'
|
||||
alias vpn-home='sudo systemctl stop wg-quick@wgivpn && sudo systemctl start wg-quick@wg0'
|
||||
alias vpn-ivpn='sudo systemctl stop wg-quick@wg0 && sudo systemctl start wg-quick@wgivpn'
|
||||
alias vpn-wg0='vpn-home'
|
||||
alias vpn-wgivpn='vpn-ivpn'
|
||||
alias vpn-off='sudo systemctl stop wg-quick@wg0 && sudo systemctl stop wg-quick@wgivpn'
|
||||
alias spotify-adblock='env LD_PRELOAD=/usr/lib/spotify-adblock.so spotify'
|
||||
alias mono-on='pacmd load-module module-remap-sink sink_name=mono master=2 channels=1'
|
||||
alias mono-off='pacmd unload-module module-remap-sink'
|
||||
|
||||
# ----------------------------------------------------------------
|
||||
# Additional functions
|
||||
|
||||
git-uni() {
|
||||
git config --local commit.gpgsign false
|
||||
git config --local user.email "p_vacho@utb.cz"
|
||||
git config --local user.name "Peter Vacho"
|
||||
}
|
||||
|
||||
dot-sync() {
|
||||
target="$(realpath -s "$1")"
|
||||
if [[ "$target" == "$HOME/"* ]]; then
|
||||
rel_path="$(realpath --relative-to="$HOME" "$target")"
|
||||
dot_target="$dothome/$rel_path"
|
||||
else
|
||||
rel_path="$(realpath --relative-to="/" "$target")"
|
||||
dot_target="$dotroot/$rel_path"
|
||||
fi
|
||||
|
||||
>&2 echo "Would copy $target -> $dot_target"
|
||||
if [[ -d "$target" ]]; then
|
||||
rsync -av --delete "${@:2}" "$target/" "$dot_target"
|
||||
else
|
||||
rsync -av "${@:2}" "$target" "$dot_target"
|
||||
fi
|
||||
}
|
||||
|
||||
pytemp() {
|
||||
dir="$(mktemp --tmpdir=/tmp -d "tmp.pytemp.XXXXXX")"
|
||||
pushd "$dir" >/dev/null
|
||||
yes "" | poetry init
|
||||
cp ~/Personal/Programming/Python/Templates/GitHub/.flake8 .
|
||||
sed -i 's/project_name/src/' ./.flake8
|
||||
poetry add --dev flake8 black isort pyright # also performs install
|
||||
mkdir ./src
|
||||
touch ./src/__init__.py
|
||||
echo "def main():\n ...\n\n" > ./src/__main__.py
|
||||
echo "if __name__ == \"__main__\":\n main()" >> ./src/__main__.py
|
||||
poetry run lvim +2 -c 'execute "normal $ciw" | startinsert!' ./src/__main__.py
|
||||
popd
|
||||
rm -rf "$dir"
|
||||
}
|
||||
|
||||
|
||||
setuppy(){
|
||||
cp -r "/home/itsdrike/Personal/Programming/Python/Templates/GitHub" "$1"
|
||||
cd "$1"
|
||||
git init
|
||||
poetry update
|
||||
poetry install
|
||||
echo "TODO" >> .gitignore_local
|
||||
poetry shell
|
||||
# Show all places where we used "project_name", these are expected to be renamed
|
||||
grep -RHIni --exclude-dir=.venv project_name
|
||||
}
|
||||
|
||||
webpage-put(){
|
||||
scp $@ webpage:/var/www/itsdrike.com/etc
|
||||
}
|
||||
|
||||
webpage-remove(){
|
||||
sftp webpage:/var/www/itsdrike.com/etc <<< "rm $@"
|
||||
}
|
||||
|
||||
vidtrim(){
|
||||
if [ $# -ne 3 ]; then
|
||||
echo "Invalid number of parameters passed!"
|
||||
echo "Usage: vidtrim [file name] [start time] [end time]"
|
||||
return 1
|
||||
fi
|
||||
no_ext_name=$1:r
|
||||
ext=$1:e
|
||||
i=1
|
||||
while true; do
|
||||
new_name="${no_ext_name}-trimmed-${i}.${ext}"
|
||||
if [ -e "$new_name" ]; then
|
||||
i=$((i + 1))
|
||||
else
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
ffmpeg -ss "$2" -i "$1" -to "$3" -c copy -copyts "$new_name"
|
||||
}
|
||||
|
||||
vidmerge(){
|
||||
if [ $# -lt 3 ]; then
|
||||
echo "Invalid number of parameters passed!"
|
||||
echo "Usage: vidmerge [input path 1] [input path 2] [optionally more inputs ...] [output name]"
|
||||
echo "Example: vidmerge . REC-2020-05-.*.mp4 output.mp4"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Parse the input
|
||||
first_file="$1"
|
||||
files="$2"
|
||||
out="$3"
|
||||
shift; shift; shift
|
||||
# Process extra filenames, in case there's more than 2 to merge
|
||||
while [ $# -gt 0 ]; do
|
||||
files="$files\n$out"
|
||||
out="$1"
|
||||
shift
|
||||
done
|
||||
|
||||
# Prefer MP4Box over ffmpeg if installed
|
||||
# this is benefitial because merging with ffmpeg results in files with
|
||||
# messed up timeline (the file will be a merge product of all given files,
|
||||
# but the timeline will suddenly skip i.e. from 10s to 50s seemlessly, resulting
|
||||
# in proper merge, but with weird timeline info)
|
||||
if ! command -v MP4Box >/dev/null 2>&1; then
|
||||
files="$first_file\n$files"
|
||||
# Create file with all of the file paths to concat for ffmpeg
|
||||
substring="'"
|
||||
if test "${files#*$substring}" != "$files"; then
|
||||
echo "Can't handle files with $substring in their names!"
|
||||
return 1
|
||||
fi
|
||||
loc="files.txt"
|
||||
echo "$files" | while IFS= read -r line; do
|
||||
printf "file '%s'\n" "$line" >> "$loc"
|
||||
done
|
||||
|
||||
|
||||
if ffmpeg -f concat -safe 0 -i "$loc" -c copy "$out"; then
|
||||
rm "$loc"
|
||||
else
|
||||
echo "Ffmpeg failed, check '$loc' file, containing the files passed to ffmpeg"
|
||||
fi
|
||||
else
|
||||
cat_list="$(echo "$files" | xargs -d '\n' printf -- '-cat "%s" ')"
|
||||
cmd="MP4Box -add \"$first_file\" $cat_list \"$out\""
|
||||
echo "$cmd"
|
||||
if eval "$cmd"; then
|
||||
echo "Video merge complete, generated output: $out"
|
||||
else
|
||||
echo "MP4Box failed, used cmd: $cmd"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
vidrot(){
|
||||
if [ $# -ne 2 ]; then
|
||||
echo "Invalid number of parameters passed!"
|
||||
echo "Usage: vidrot [video file] [rotation (0/1/2/3)]"
|
||||
echo "0: cclock_flip (90° counterclockwise and vertical flip)"
|
||||
echo "1: clock (90° clockwise)"
|
||||
echo "2: cclock (90° counterclockwise)"
|
||||
echo "3: clock_flip (90° clockwise and vertical flip)"
|
||||
return 1
|
||||
fi
|
||||
name="$1"
|
||||
rotation="$2"
|
||||
no_ext_name=$name:r
|
||||
ext=$name:e
|
||||
editname="${no_ext_name}-rot.${ext}"
|
||||
ffmpeg -i "$name" -vf "transpose=$rotation" "$editname"
|
||||
}
|
||||
|
||||
# ----------------------------------------------------------------
|
||||
# Additional exports
|
||||
export dothome="$HOME/Personal/dotfiles/home"
|
||||
export dotroot="$HOME/Personal/dotfiles/root"
|
||||
export dotvim="$dothome/.config/nvim"
|
||||
|
||||
|
||||
# ----------------------------------------------------------------
|
||||
# Pacman/Emerge
|
||||
if command -v pacman > /dev/null; then
|
||||
alias pkg-info='pacman -Si' # Info about a package in sync index
|
||||
alias pkg-info-local='pacman -Qi' # Same as above, but for locally installed pkgs
|
||||
alias pkg-file-owner='pacman -F' # Show package that owns given file in sync index
|
||||
alias pkg-file-owner-regex='pacman -Fx' # Same as above, but works with partial names/regex
|
||||
alias pkg-file-owner-local='pacman -Qo' # Same as above, but for locally installed pkgs
|
||||
alias pkg-owned-files='pacman -Fl' # Show all files owned by given package in sync index
|
||||
alias pkg-owned-files-local='pacman -Ql' # Same as above 2, but for locally installed pkgs
|
||||
alias pkg-group-list='pacman -Sg' # List all pkgs that will be installed with a group
|
||||
alias pkg-group-list-local='pacman -Qg' # Same as above, but from locally installed pkgs
|
||||
alias pkg-orphans='pacman -Qtdq'
|
||||
|
||||
alias pkg-get-upgrades='pacman -Syyuw' # Download new pkgs, but don't upgrade them
|
||||
alias pkg-extract='pacman -Syw --cachedir .' # Download given pkg to current directory
|
||||
alias pkg-clean-cache='pacman -Sc' # Remove old packages in pacman cache
|
||||
|
||||
alias pkg-vuln-upgrade="pacman -Sy \"\$(arch-audit --upgradable --quiet | awk '{sub(/>=.+/, \"\"); print}' | paste -s -d ' ')\"" # Upgrade all vulnerable packages, with released fixes
|
||||
alias vuln='arch-audit' # Show vulnerable packages that can be upgraded (Arch Linux)
|
||||
|
||||
# Get fastest mirrors (using reflector)
|
||||
alias mirror="sudo reflector -f 30 -l 30 --number 10 --verbose --save /etc/pacman.d/mirrorlist"
|
||||
alias mirrord="sudo reflector --latest 50 --number 20 --sort delay --save /etc/pacman.d/mirrorlist"
|
||||
alias mirrors="sudo reflector --latest 50 --number 20 --sort score --save /etc/pacman.d/mirrorlist"
|
||||
alias mirrora="sudo reflector --latest 50 --number 20 --sort age --save /etc/pacman.d/mirrorlist"
|
||||
fi
|
||||
|
||||
if command -v emerge > /dev/null; then
|
||||
if command -v eix > /dev/null; then
|
||||
alias pkg-sync='eix-sync'
|
||||
alias pkg-search='eix'
|
||||
else
|
||||
alias pkg-sync='emerge --sync --quiet=n'
|
||||
alias pkg-search='emerge -s'
|
||||
fi
|
||||
alias pkg-update='emerge --update --deep @world'
|
||||
alias pkg-upgrade='pkg-sync && pkg-update'
|
||||
alias pkg-changed-use='pkg-update --changed-use'
|
||||
alias pkg-recompile-all='emerge -e @world'
|
||||
|
||||
alias pkg-which='equery which'
|
||||
alias pkg-size='equery size'
|
||||
alias pkg-depgraph='equery depgraph'
|
||||
alias pkg-depends='equery depends'
|
||||
alias pkg-check='equery check'
|
||||
alias pkg-uses='equery uses'
|
||||
alias pkg-keywords='equery keywords'
|
||||
|
||||
alias update-conf='dispatch-conf'
|
||||
fi
|
||||
|
291
home/.config/shell/functions
Executable file
291
home/.config/shell/functions
Executable file
|
@ -0,0 +1,291 @@
|
|||
#!/bin/sh
|
||||
# TODO: Currently, this file isn't entirely POSIX compatible,
|
||||
# it will run fine with bash or zsh, however some functions may cause
|
||||
# issues with pure POSIX. The fill will however run fine, the errors
|
||||
# would only occur if the incompatible functions would be started.
|
||||
|
||||
# Show application listening on given port
|
||||
port() {
|
||||
sudo netstat -pln | grep "$1" | awk '{print $NF}'
|
||||
}
|
||||
|
||||
# Create a new directory and enter it
|
||||
mkd() {
|
||||
# shellcheck disable=SC2164
|
||||
mkdir -p "$1" && cd "$1";
|
||||
}
|
||||
|
||||
# `o` with no arguments opens the current directory, otherwise opens the given
|
||||
# location
|
||||
o() {
|
||||
if [ $# -eq 0 ]; then
|
||||
open .;
|
||||
else
|
||||
open "$@";
|
||||
fi;
|
||||
}
|
||||
|
||||
# Use bat for nicer git diffs
|
||||
batdiff() {
|
||||
git diff --name-only --diff-filter=d | xargs bat --diff
|
||||
}
|
||||
|
||||
# Determine size of a file or total size of a directory
|
||||
dirsize() {
|
||||
if du -b /dev/null > /dev/null 2>&1; then
|
||||
arg=-sbh;
|
||||
else
|
||||
arg=-sh;
|
||||
fi
|
||||
if [[ -n "$*" ]]; then
|
||||
\du $arg -- "$@";
|
||||
else
|
||||
\du $arg .[^.]* ./*;
|
||||
fi;
|
||||
}
|
||||
|
||||
randmac() {
|
||||
sudo ip link set dev "$1" down
|
||||
sudo macchanger -A "$1"
|
||||
sudo ip link set dev "$1" up
|
||||
}
|
||||
|
||||
# Go to the root of a git tree
|
||||
cdgit () {
|
||||
if [ "$(git rev-parse --is-inside-work-tree > /dev/null 2>&1)" -eq 0 ]; then
|
||||
while ! [ -d .git ]; do
|
||||
cd ..
|
||||
done
|
||||
return 0
|
||||
else
|
||||
echo "Not a git directory"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Create a data URL from a file
|
||||
dataurl() {
|
||||
mimeType="$(file -b --mime-type "$1")"
|
||||
if echo "$mimeType" | grep -e "^text/.*$" >/dev/null; then
|
||||
mimeType="${mimeType};charset=utf-8"
|
||||
fi
|
||||
echo "data:${mimeType};base64,$(openssl base64 -in "$1" | tr -d '\n')";
|
||||
}
|
||||
|
||||
# `tre` is a shorthand for `tree` with hidden files and color enabled, ignoring
|
||||
# the `.git` directory, listing directories first. The output gets piped into
|
||||
# `less` with options to preserve color and line numbers, unless the output is
|
||||
# small enough for one screen.
|
||||
tre() {
|
||||
tree -I '.git|node_modules|bower_components' --group-directories-first "$@" | less -FRNX;
|
||||
}
|
||||
|
||||
|
||||
|
||||
# Show all the names (CNs and SANs) listed in the SSL certificate
|
||||
# for a given domain
|
||||
getcertnames() {
|
||||
if [ -z "${1}" ]; then
|
||||
echo "ERROR: No domain specified.";
|
||||
return 1;
|
||||
fi;
|
||||
|
||||
domain="${1}";
|
||||
echo "Testing ${domain}…";
|
||||
echo ""; # newline
|
||||
|
||||
tmp=$(echo -e "GET / HTTP/1.0\nEOT" \
|
||||
| openssl s_client -connect "${domain}:443" -servername "${domain}" 2>&1);
|
||||
|
||||
if [[ "${tmp}" = *"-----BEGIN CERTIFICATE-----"* ]]; then
|
||||
certText=$(echo "${tmp}" \
|
||||
| openssl x509 -text -certopt "no_aux, no_header, no_issuer, no_pubkey, \
|
||||
no_serial, no_sigdump, no_signame, no_validity, no_version");
|
||||
echo "Common Name:";
|
||||
echo ""; # newline
|
||||
echo "${certText}" | grep "Subject:" | sed -e "s/^.*CN=//" | sed -e "s/\/emailAddress=.*//";
|
||||
echo ""; # newline
|
||||
echo "Subject Alternative Name(s):";
|
||||
echo ""; # newline
|
||||
echo "${certText}" | grep -A 1 "Subject Alternative Name:" \
|
||||
| sed -e "2s/DNS://g" -e "s/ //g" | tr "," "\n" | tail -n +2;
|
||||
return 0;
|
||||
else
|
||||
echo "ERROR: Certificate not found.";
|
||||
return 1;
|
||||
fi;
|
||||
}
|
||||
|
||||
# Compare original and gzipped file size
|
||||
gz_compare() {
|
||||
origsize=$(wc -c < "$1");
|
||||
gzipsize=$(gzip -c "$1" | wc -c);
|
||||
ratio=$(echo "$gzipsize * 100 / $origsize" | bc -l);
|
||||
printf "orig: %d bytes\n" "$origsize";
|
||||
printf "gzip: %d bytes (%2.2f%%)\n" "$gzipsize" "$ratio";
|
||||
}
|
||||
|
||||
# Extract almost any archive
|
||||
extract() {
|
||||
if [ -z "$1" ]; then
|
||||
# display usage if no parameters given
|
||||
echo "Usage: extract <path/file_name>.<zip|rar|bz2|gz|tar|tbz2|tgz|Z|7z|xz|ex|tar.bz2|tar.gz|tar.xz>"
|
||||
echo " extract <path/file_name_1.ext> [path/file_name_2.ext] [path/file_name_3.ext]"
|
||||
return 1
|
||||
else
|
||||
for n in "$@"
|
||||
do
|
||||
if [ -f "$n" ] ; then
|
||||
case "${n%,}" in
|
||||
*.tar.bz2|*.tar.gz|*.tar.xz|*.tbz2|*.tgz|*.txz|*.tar)
|
||||
tar xvf "$n" ;;
|
||||
*.lzma) unlzma ./"$n" ;;
|
||||
*.bz2) bunzip2 ./"$n" ;;
|
||||
*.rar) unrar x -ad ./"$n" ;;
|
||||
*.gz) gunzip ./"$n" ;;
|
||||
*.zip) unzip ./"$n" ;;
|
||||
*.z) uncompress ./"$n" ;;
|
||||
*.7z|*.arj|*.cab|*.chm|*.deb|*.dmg|*.iso|*.lzh|*.msi|*.rpm|*.udf|*.wim|*.xar)
|
||||
7z x ./"$n" ;;
|
||||
*.xz) unxz ./"$n" ;;
|
||||
*.exe) cabextract ./"$n" ;;
|
||||
*)
|
||||
echo "extract: '$n' - unknown archive method"
|
||||
return 1
|
||||
;;
|
||||
esac
|
||||
else
|
||||
echo "'$n' - file does not exist"
|
||||
return 1
|
||||
fi
|
||||
done
|
||||
fi
|
||||
}
|
||||
|
||||
# Create a .tar.gz archive, using `zopfli`, `pigz` or `gzip` for compression
|
||||
targz() {
|
||||
# Combine given names spearated with spaces as the filename
|
||||
tmpFile="${*%/}.tar"
|
||||
|
||||
tar -cvf "${tmpFile}" "${@}" || return 1
|
||||
|
||||
size=$(
|
||||
stat -f"%z" "${tmpFile}" 2> /dev/null; # macOS `stat`
|
||||
stat -c"%s" "${tmpFile}" 2> /dev/null; # GNU `stat`
|
||||
);
|
||||
|
||||
cmd="";
|
||||
if (( size < 52428800 )) && hash zopfli 2> /dev/null; then
|
||||
# the .tar file is smaller than 50 MB and Zopfli is available; use it
|
||||
cmd="zopfli";
|
||||
else
|
||||
if hash pigz 2> /dev/null; then
|
||||
cmd="pigz";
|
||||
else
|
||||
cmd="gzip";
|
||||
fi;
|
||||
fi;
|
||||
|
||||
echo "Compressing .tar ($((size / 1000)) kB) using \`${cmd}\`…";
|
||||
"${cmd}" -v "${tmpFile}" || return 1;
|
||||
[ -f "${tmpFile}" ] && rm "${tmpFile}";
|
||||
|
||||
zippedSize=$(
|
||||
stat -f"%z" "${tmpFile}.gz" 2> /dev/null; # macOS `stat`
|
||||
stat -c"%s" "${tmpFile}.gz" 2> /dev/null; # GNU `stat`
|
||||
);
|
||||
|
||||
echo "${tmpFile}.gz ($((zippedSize / 1000)) kB) created successfully.";
|
||||
}
|
||||
|
||||
anonymize() {
|
||||
# Reset the prompt on initial run to allow this script
|
||||
# to be ran multiple times without user having to reload
|
||||
# PS1 manually
|
||||
# shellcheck source=/home/itsdrike/.config/shell/prompt
|
||||
. "${XDG_CONFIG_DIR:-$HOME/.config}/shell/prompt"
|
||||
|
||||
# Regular expression to match 0-255 numbers (color)
|
||||
color_int_re='^(0+)?([0-9]{1,2}|1[0-9]{2}|2[0-4][0-9]|25[0-5])$'
|
||||
|
||||
# Defaults
|
||||
NAME="%n"
|
||||
MACHINE=""
|
||||
#NAME_COLOR="%F{047}"
|
||||
NAME_COLOR="%F{172}"
|
||||
#DIR_COLOR="%F{027}"
|
||||
DIR_COLOR="%F{158}"
|
||||
AT_COLOR="%F{004}"
|
||||
MACHINE_COLOR="%F{070}"
|
||||
|
||||
while [ $# -gt 0 ]; do
|
||||
key=$1
|
||||
|
||||
case $key in
|
||||
-n|--name)
|
||||
NAME=$2
|
||||
shift
|
||||
shift
|
||||
;;
|
||||
-m|--machine)
|
||||
MACHINE=$2
|
||||
shift
|
||||
shift
|
||||
;;
|
||||
-nc|--name-color)
|
||||
if [[ $2 =~ $color_int_re ]]; then
|
||||
NAME_COLOR="%F{$2}"
|
||||
else
|
||||
NAME_COLOR=$2
|
||||
fi
|
||||
shift
|
||||
shift
|
||||
;;
|
||||
-dc|--dir-color)
|
||||
if [[ $2 =~ $color_int_re ]]; then
|
||||
DIR_COLOR="%F{$2}"
|
||||
else
|
||||
DIR_COLOR=$2
|
||||
fi
|
||||
shift
|
||||
shift
|
||||
;;
|
||||
-mc|--machine-color)
|
||||
if [[ $2 =~ $color_int_re ]]; then
|
||||
MACHINE_COLOR="%F{$2}"
|
||||
else
|
||||
MACHINE_COLOR=$2
|
||||
fi
|
||||
shift
|
||||
shift
|
||||
;;
|
||||
-ac|--at-color)
|
||||
if [[ $2 =~ $color_int_re ]]; then
|
||||
AT_COLOR="%F{$2}"
|
||||
else
|
||||
AT_COLOR=$2
|
||||
fi
|
||||
shift
|
||||
shift
|
||||
;;
|
||||
*)
|
||||
echo "Unrecognized argument: $key"
|
||||
echo "Arguments: -n|--name, -m|--machine, -nc|--name-color, -dc|--dir-color, -mc|--machine-color, -ac|--at-color"
|
||||
return 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
|
||||
OLD_LINE="%F{047}%n%f %F{027}"
|
||||
|
||||
[ -n "$NAME" ] && NEW_LINE="${NAME_COLOR}${NAME}"
|
||||
[ -n "$NAME" ] && [ -n "$MACHINE" ] && NEW_LINE="${NEW_LINE}${AT_COLOR}@"
|
||||
[ -n "$MACHINE" ] && NEW_LINE="${NEW_LINE}${MACHINE_COLOR}${MACHINE}"
|
||||
[ -n "$NAME" ] || [ -n "$MACHINE" ] && NEW_LINE="${NEW_LINE}%f "
|
||||
NEW_LINE="${NEW_LINE}${DIR_COLOR}"
|
||||
|
||||
# Use new anonymized name, machine and colors in PS1
|
||||
PS1=${PS1/"$OLD_LINE"/"$NEW_LINE"}
|
||||
}
|
||||
|
40
home/.config/shell/handlers
Executable file
40
home/.config/shell/handlers
Executable file
|
@ -0,0 +1,40 @@
|
|||
#!/bin/sh
|
||||
|
||||
if command -v pkgfile > /dev/null; then
|
||||
# Command not found hook that uses `pkgfile` package
|
||||
# to search through the package index in order to find
|
||||
# a package which includes given command, which was resolved
|
||||
# and not found, if there are no such packages, only print
|
||||
# command not found message
|
||||
command_not_found_handler() {
|
||||
cmd="$1"
|
||||
printf 'zsh: command not found: %s' "$cmd" # print command not found asap, then search for packages
|
||||
repos="$(pkgfile "$cmd")"
|
||||
if [ -n "$repos" ]; then
|
||||
printf '\r%s may be found in the following packages:\n' "$cmd"
|
||||
echo "$repos" | while read -r pkg; do
|
||||
printf ' %s\n' "$pkg"
|
||||
done
|
||||
else
|
||||
printf '\n'
|
||||
fi
|
||||
return 127
|
||||
}
|
||||
elif [ -x /usr/lib/command-not-found ] || [ -x /usr/share/command-not-found/command-not-found ]; then
|
||||
# Ubuntu handle for bash default command-not-found
|
||||
# it works similarely to the above arch alternative,
|
||||
# this is based on the original bash implementation
|
||||
command_not_found_handler() {
|
||||
# check because cmd not found could've been removed in the meantime
|
||||
if [ -x /usr/lib/command-not-found ]; then
|
||||
/usr/lib/command-not-found -- "$1"
|
||||
return $?
|
||||
elif [ -x /usr/share/command-not-found/command-not-found ]; then
|
||||
/usr/share/command-not-found/command-not-found -- "$1"
|
||||
return $?
|
||||
else
|
||||
printf "%s: command not found\n" "$1" >&2
|
||||
return 127
|
||||
fi
|
||||
}
|
||||
fi
|
65
home/.config/shell/keybinds
Executable file
65
home/.config/shell/keybinds
Executable file
|
@ -0,0 +1,65 @@
|
|||
#!/usr/bin/env zsh
|
||||
# shellcheck disable=SC2030,SC2031,SC2015
|
||||
# Set default keybindings (mostly from oh-my-zsh)
|
||||
|
||||
# Make sure that the terminal is in application mode when zle is active, since
|
||||
# only then values from $terminfo are valid
|
||||
if (( ${+terminfo[smkx]} )) && (( ${+terminfo[rmkx]} )); then
|
||||
function zle-line-init() {
|
||||
echoti smkx
|
||||
}
|
||||
function zle-line-finish() {
|
||||
echoti rmkx
|
||||
}
|
||||
zle -N zle-line-init
|
||||
zle -N zle-line-finish
|
||||
fi
|
||||
|
||||
# Use emacs keybindings
|
||||
bindkey -e
|
||||
|
||||
# Start typing + [Up-Arrow] - fuzzy find history forward
|
||||
if [ -n "${terminfo[kcuu1]}" ]; then
|
||||
autoload -U up-line-or-beginning-search
|
||||
zle -N up-line-or-beginning-search
|
||||
bindkey "${terminfo[kcuu1]}" up-line-or-beginning-search
|
||||
fi
|
||||
# Start typing + [Down-Arrow] - fuzzy find history backward
|
||||
if [ -n "${terminfo[kcud1]}" ]; then
|
||||
autoload -U down-line-or-beginning-search
|
||||
zle -N down-line-or-beginning-search
|
||||
bindkey "${terminfo[kcud1]}" down-line-or-beginning-search
|
||||
fi
|
||||
|
||||
# [Home] - Go to beginning of line
|
||||
[ -n "${terminfo[khome]}" ] && bindkey "${terminfo[khome]}" beginning-of-line || bindkey "^[[H" beginning-of-line
|
||||
# [End] - Go to end of line
|
||||
[ -n "${terminfo[kend]}" ] && bindkey "${terminfo[kend]}" end-of-line || bindkey "^[[F" end-of-line
|
||||
|
||||
# [Shift-Tab] - move through the completion menu backwards
|
||||
[ -n "${terminfo[kcbt]}" ] && bindkey "${terminfo[kcbt]}" reverse-menu-complete
|
||||
|
||||
# [Backspace] - delete backward
|
||||
bindkey '^?' backward-delete-char
|
||||
# [Delete] - delete forward
|
||||
[ -n "${terminfo[kdch1]}" ] && bindkey "${terminfo[kdch1]}" delete-char || bindkey "^[[3~" delete-char
|
||||
# [Ctrl-Delete] - delete whole forward-word
|
||||
bindkey '^[[3;5~' kill-word
|
||||
|
||||
# [Ctrl-RightArrow] - move forward one word
|
||||
bindkey '^[[1;5C' forward-word
|
||||
# [Ctrl-LeftArrow] - move backward one word
|
||||
bindkey '^[[1;5D' backward-word
|
||||
|
||||
# [Ctrl-r] - Search backward incrementally for a specified string. The string may begin with ^ to anchor the search to the beginning of the line.
|
||||
bindkey '^r' history-incremental-search-backward
|
||||
# [PageUp] - Up a line of history
|
||||
[ -n "${terminfo[kpp]}" ] && bindkey "${terminfo[kpp]}" up-line-or-history
|
||||
# [PageDown] - Down a line of history
|
||||
[ -n "${terminfo[knp]}" ] && bindkey "${terminfo[knp]}" down-line-or-history
|
||||
|
||||
# [Space] - do history expansion on space
|
||||
bindkey ' ' magic-space
|
||||
|
||||
# [ctrl+space] Accept suggestion from zsh-autosuggestions plugin
|
||||
bindkey '^ ' autosuggest-accept
|
19
home/.config/shell/profile
Executable file
19
home/.config/shell/profile
Executable file
|
@ -0,0 +1,19 @@
|
|||
#!/bin/sh
|
||||
|
||||
# User .profile definition.
|
||||
# This file is only sourced once, after login, Unlike
|
||||
# .zshrc/.bashrc, which will run whenever a new terminal
|
||||
# is opened.
|
||||
|
||||
# Add all folders in ~/.local/bin into PATH
|
||||
# Some window managers require this line to be in profile
|
||||
# not in .zshenv
|
||||
PATH+=":${$(find ~/.local/bin -type d | tr '\n' ':')%%:}"
|
||||
|
||||
# Start graphical session automatically on tty1 if startx is aviable
|
||||
if [ "$(tty)" = "/dev/tty1" ] && [ "$UID" != 0 ]; then
|
||||
if command -v Hyprland >/dev/null; then
|
||||
! pidof -s Hyprland >/dev/null 2>&1 && launch-hypr
|
||||
fi
|
||||
fi
|
||||
|
187
home/.config/shell/prompt
Executable file
187
home/.config/shell/prompt
Executable file
|
@ -0,0 +1,187 @@
|
|||
#!/usr/bin/env zsh
|
||||
# shellcheck disable=SC2155
|
||||
|
||||
# Configuration variables:
|
||||
|
||||
# Once we are too deep in the filestructure, we can usually afford to shorten
|
||||
# the whole working directory and only print something like ~/.../dir3/dir4/dir5
|
||||
# instead of ~/dir1/dir2/dir3/dir4/dir5. If this isn't desired, set this to 0
|
||||
USE_SHORTENED_WORKDIR=1
|
||||
|
||||
# Show how much time it took to run a command
|
||||
CMD_TIME_SHOW=1
|
||||
# Minimum units to show the time precision, if
|
||||
# we use "s" (seconds), and the output took 0s,
|
||||
# we don't print the output at all to avoid clutter.
|
||||
# Same goes for any other units, however with "ms"
|
||||
# (miliseconds), this is very unlikely
|
||||
# Valid options: ms/s/m/h/d
|
||||
CMD_TIME_PRECISION="s"
|
||||
# Minimum time in miliseconds, to print the time took,
|
||||
# if the command takes less than this amount of miliseconds,
|
||||
# don't bother printing the time took, this is nice if you
|
||||
# don't need to see how long commands like 'echo' took
|
||||
# Setting this to 0 will always print the time taken
|
||||
CMD_TIME_MINIMUM=100
|
||||
|
||||
# hide EOL sign ('%')
|
||||
export PROMPT_EOL_MARK=""
|
||||
|
||||
# TTY (pure linux) terminal only has 8-bit color support
|
||||
# (unless you change it in kernel), respect this and downgrade
|
||||
# the color scheme accordingly (it won't look best, but it's
|
||||
# still better than no colors)
|
||||
if [ "$TERM" = "linux" ]; then
|
||||
GREEN="%F{002}"
|
||||
RED="%F{001}"
|
||||
ORANGE="%F{003}"
|
||||
BLUE="%F{004}"
|
||||
LBLUE="%F{006}"
|
||||
PURPLE="%F{005}"
|
||||
else
|
||||
GREEN="%F{047}"
|
||||
RED="%F{196}"
|
||||
ORANGE="%F{214}"
|
||||
BLUE="%F{027}"
|
||||
LBLUE="%F{075}"
|
||||
PURPLE="%F{105}"
|
||||
fi
|
||||
RESET="%f"
|
||||
|
||||
# Signals git status of CWD repository (if any)
|
||||
git_prompt() {
|
||||
ref=$(command git symbolic-ref HEAD 2> /dev/null) || ref=$(command git rev-parse --short HEAD 2> /dev/null) || return 0
|
||||
echo -n " $ORANGE${ref#refs/heads/}"
|
||||
|
||||
if [ -n "$(git status --short 2>/dev/null)" ]; then
|
||||
echo "$RED+"
|
||||
fi
|
||||
}
|
||||
|
||||
# Adds @chroot or @ssh
|
||||
foreign_prompt() {
|
||||
if [ "$(awk '$5=="/" {print $1}' </proc/1/mountinfo)" != "$(awk '$5=="/" {print $1}' </proc/$$/mountinfo)" ]; then
|
||||
echo -n "@${ORANGE}chroot"
|
||||
elif [ -n "$SSH_CLIENT" ] || [ -n "$SSH_TTY" ]; then
|
||||
echo -n "@${ORANGE}ssh"
|
||||
fi
|
||||
}
|
||||
|
||||
#nd Prints appropriate working directory
|
||||
working_directory() {
|
||||
# By default up to 5 directories will be tolerated before shortening
|
||||
# After we surpass that, first directory (or ~) will be printed together with last 3
|
||||
# This feature uses special symbol '…', but this isn't aviable when in TTY. Because
|
||||
# of this, when we are in TTY, we fall back to longer '...'
|
||||
|
||||
if [ $USE_SHORTENED_WORKDIR != 1 ]; then
|
||||
echo -n " $BLUE$~"
|
||||
elif [ "$TERM" = "linux" ]; then
|
||||
echo -n " $BLUE%(5~|%-1~/.../%3~|%4~)"
|
||||
else
|
||||
echo -n " $BLUE%(5~|%-1~/…/%3~|%4~)"
|
||||
fi
|
||||
}
|
||||
|
||||
# Execution time tracking hooks, this is unique to zsh, as it can add
|
||||
# preexec and precmd hooks. We can utilize this to keep track of the
|
||||
# amount of time it took to run certain command. We store the start time
|
||||
# within a variable: PROMPT_EXEC_TIME_START, which we then compare and
|
||||
# unset after the command was finished. In here, we simply set the
|
||||
# PROMPT_EXEC_TIME_DURATION, which is then used in the actual prompt
|
||||
# This will only be enabled if SHOW_CMD_TIME is 1.
|
||||
exec_time_preexec_hook() {
|
||||
[[ $SHOW_CMD_TIME == 0 ]] && return
|
||||
PROMPT_EXEC_TIME_START=$(date +%s.%N)
|
||||
}
|
||||
exec_time_precmd_hook() {
|
||||
[[ $SHOW_CMD_TIME == 0 ]] && return
|
||||
[[ -z $PROMPT_EXEC_TIME_START ]] && return
|
||||
local PROMPT_EXEC_TIME_STOP="$(date +%s.%N)"
|
||||
PROMPT_EXEC_TIME_DURATION=$(echo "($PROMPT_EXEC_TIME_STOP - $PROMPT_EXEC_TIME_START) * 1000" | bc -l)
|
||||
unset PROMPT_EXEC_TIME_START
|
||||
}
|
||||
format_time() {
|
||||
# Do some formatting to get nice time (e.g. 2m 12s) from miliseconds
|
||||
# $1 is the milisecond amount (int or float)
|
||||
# $2 is the precision (ms/s/m/h/d)
|
||||
local T="$1"
|
||||
local D="$(echo "scale=0;$T/1000/60/60/24" | bc -l)"
|
||||
local H="$(echo "scale=0;$T/1000/60/60%24" | bc -l)"
|
||||
local M="$(echo "scale=0;$T/1000/60%60" | bc -l)"
|
||||
local S="$(echo "scale=0;$T/1000%60" | bc -l)"
|
||||
local MS="$(echo "scale=0;$T%1000" | bc -l)"
|
||||
|
||||
local precision=$2
|
||||
local out=""
|
||||
case "$precision" in
|
||||
"ms") [[ "$MS" -gt 0 ]] && out="$(printf "%dms" "$MS") ${out}"; precision="s" ;&
|
||||
"s") [[ "$S" -gt 0 ]] && out="$(printf "%ds" "$S") ${out}"; precision="m" ;&
|
||||
"m") [[ "$M" -gt 0 ]] && out="$(printf "%dm" "$M") ${out}"; precision="h" ;&
|
||||
"h") [[ "$H" -gt 0 ]] && out="$(printf "%dh" "$H") ${out}"; precision="d" ;&
|
||||
"d") [[ "$D" -gt 0 ]] && out="$(printf "%dd" "$D") ${out}" ;;
|
||||
*) out="$T" ;; # Return $1 ($T) if precision wasn't specified/valid
|
||||
esac
|
||||
printf "%s" "$out"
|
||||
}
|
||||
display_cmd_time() {
|
||||
[[ $CMD_TIME_SHOW == 0 ]] && return
|
||||
[[ -z $PROMPT_EXEC_TIME_DURATION ]] && return
|
||||
# If the time duration is less than minimum time,
|
||||
# don't print the time taken
|
||||
[[ $PROMPT_EXEC_TIME_DURATION -lt $CMD_TIME_MINIMUM ]] && return
|
||||
local time_took="$(format_time "$PROMPT_EXEC_TIME_DURATION" "$CMD_TIME_PRECISION")"
|
||||
# Don't display if the time didn't give us output
|
||||
# this happens when all fields (seconds/minutes/...) are 0,
|
||||
# if we use milisecond precision, this will likely never happen
|
||||
# but with other precisions, it could
|
||||
[ ${#time_took} -eq 0 ] && return
|
||||
echo -n " ${LBLUE}took ${time_took}"
|
||||
}
|
||||
|
||||
setopt promptsubst # enable command substitution in prompt
|
||||
|
||||
# Setup ZSH hooks to display the running time of commands
|
||||
autoload -Uz add-zsh-hook
|
||||
add-zsh-hook preexec exec_time_preexec_hook
|
||||
add-zsh-hook precmd exec_time_precmd_hook
|
||||
|
||||
# Primary Prompt
|
||||
[ "$EUID" -eq 0 ] && PS1="$RED%n$RESET" || PS1="$GREEN%n$RESET" # user
|
||||
PS1+="$(foreign_prompt)"
|
||||
PS1+="$(working_directory)"
|
||||
PS1+="\$(git_prompt)"
|
||||
PS1+="\$(display_cmd_time)"
|
||||
PS1+=" $PURPLE%(!.#.$)$RESET " # Final symbol (# or $)
|
||||
|
||||
# Next line prompt
|
||||
PS2="$RED\ $RESET"
|
||||
|
||||
# Right side prompt
|
||||
RPS1=""
|
||||
if [ "$TERM" = "linux" ]; then
|
||||
# Displaying cmd time here works, but often causes issues when we
|
||||
# resize the terminal, since right prompts can be annoying to deal
|
||||
# with when resizing. This would run relatively often so it makes
|
||||
# more sense to only use it in PS1 (left prompt), but if desired,
|
||||
# this can be uncommented
|
||||
#RPS1+="\$(display_cmd_time)"
|
||||
|
||||
# If we find a non-zero return code, print it in the right prompt,
|
||||
# use X here, to avoid issues with TTY not having support for
|
||||
# a nicer unicode character that we use otherwise ("↵")
|
||||
RPS1+="%(?..${RED}%? X$RESET)"
|
||||
else
|
||||
# Read comments for the section above.
|
||||
#RPS1+="\$(display_cmd_time)"
|
||||
|
||||
# NOTE: "↵" symbol could cause issues with on some terminals/machines that
|
||||
# don't handle unicode well, this issue could be very confusing to debug,
|
||||
# and it would not be apparent what's wrong since the symbol itself will
|
||||
# be drawn, however when it is drawn, it will also move the cursor line
|
||||
# 2 places back since this symbol is made up of 3 bytes (in unicode) and
|
||||
# regular ASCII characters only take up 1 byte, this means that whenever
|
||||
# the right-side prompt appears (on error), the prompt would have this issue.
|
||||
RPS1="%(?..${RED}%? ↵$RESET)"
|
||||
fi
|
||||
|
196
home/.config/shell/py-alias
Executable file
196
home/.config/shell/py-alias
Executable file
|
@ -0,0 +1,196 @@
|
|||
#!/usr/bin/env zsh
|
||||
# Simple script which automatically defines certain aliases for python,
|
||||
# which will automatically use certain python version
|
||||
# Versions are automatically obtained from $PYENV_ROOT/versions directories
|
||||
# NOTE: This assumes that all folders in this directory are valid python versions
|
||||
#
|
||||
# Assume we have these installed pyenv python versions 3.6.5, 3.6.12 and 3.10.1:
|
||||
# - Set full-version aliases: py3.6.5, py3.6.12 and py3.10.1
|
||||
# - Set py3 to 3.10.1 (latest with major version 3)
|
||||
# - Set py3.6 to 3.6.12 (latest with major version 3 and minor version 6)
|
||||
# - Set py3.10 to 3.10.1 (latest, and only python with major version 3 and minor version 10)
|
||||
|
||||
|
||||
# Define all wanted aliases for a given python version
|
||||
# $1 - full valid pyenv python version (for example '3.6.12', `3.11-dev`, or `pypy3.6-7.2.0-src`)
|
||||
# $2 - version used in the alias (for example '3.6', '3', or even '', but also `pypy3.7`, ...)
|
||||
define_aliases() {
|
||||
version="$1"
|
||||
alias_version="$2"
|
||||
cmd_prefix="PYENV_VERSION=$version"
|
||||
|
||||
alias "py$alias_version=$cmd_prefix python"
|
||||
alias "ipy$alias_version=$cmd_prefix ipython"
|
||||
alias "bpy$alias_version=$cmd_prefix bpython"
|
||||
alias "pydoc$alias_version=$cmd_prefix pydoc"
|
||||
alias "pytest$alias_version=$cmd_prefix pytest"
|
||||
alias -g "PY$alias_version=$cmd_prefix"
|
||||
}
|
||||
|
||||
# Handle splitting full version into prefix, version number and suffix
|
||||
# Because of the huge variaty of python implemenations and their different namings,
|
||||
# this function will only be able to handle the default CPython version names,
|
||||
# which follow the regex pattern of: '\d+\.\d+\.\d+', the rest will print 'full_version;;'
|
||||
# In the future, this may also include support for some other naming schemes.
|
||||
# $1 - full valid pyenv python version (for example '3.6.12', `3.11-dev`, or `pypy3.6-7.2.0-src`)
|
||||
parse_python_version() {
|
||||
full_version="$1"
|
||||
if echo "$full_version" | grep -E "[0-9]+\.[0-9]+\.[0-9]+" >/dev/null; then
|
||||
echo ";$full_version;"
|
||||
else
|
||||
echo ';;'
|
||||
fi
|
||||
}
|
||||
|
||||
# Prints version number extracted from alias for given version
|
||||
# $1 - version used in the alias (for example '3.6', '3', or even '', but also 'pypy3.6', ...)
|
||||
get_alias_version() {
|
||||
alias_version="$1"
|
||||
definition="$(alias "py$alias_version")"
|
||||
full_version="$(echo "$definition" | cut -d= -f3 | cut -d' ' -f1)"
|
||||
|
||||
version_info="$(parse_python_version "$full_version")"
|
||||
version="$(echo "$version_info" | cut -d';' -f2)"
|
||||
echo "$version"
|
||||
}
|
||||
|
||||
# Compares 2 python versions in major, minor and micro parts
|
||||
# $1 - version #1
|
||||
# $2 - version #2
|
||||
# Returns:
|
||||
# 0 - version #1 is newer
|
||||
# 1 - version #2 is newer
|
||||
# 2 - versions are equal
|
||||
version_compare() {
|
||||
version_1="$1"
|
||||
version_2="$2"
|
||||
# ZSH Only:
|
||||
version_1=("${(@s:.:)version_1}")
|
||||
version_2=("${(@s:.:)version_2}")
|
||||
major_1=$version_1[1]
|
||||
major_2=$version_2[1]
|
||||
minor_1=$version_1[2]
|
||||
minor_2=$version_2[2]
|
||||
micro_1=$version_1[3]
|
||||
micro_2=$version_2[3]
|
||||
# POSIX, but slow:
|
||||
# major_1="$(echo "$version_1" | cut -d. -f1)"
|
||||
# major_2="$(echo "$version_2" | cut -d. -f1)"
|
||||
# minor_1="$(echo "$version_1" | cut -d. -f2)"
|
||||
# minor_2="$(echo "$version_2" | cut -d. -f2)"
|
||||
# micro_1="$(echo "$version_1" | cut -d. -f3)"
|
||||
# micro_2="$(echo "$version_2" | cut -d. -f3)"
|
||||
|
||||
# Compare majors
|
||||
if [ $major_1 -gt $major_2 ]; then
|
||||
# version 1's major is bigger, version 1 is newer
|
||||
return 0
|
||||
elif [ $major_1 -lt $major_2 ]; then
|
||||
# version 1's major is smaller, version 2 is newer
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Majors equal, compare minors
|
||||
if [ $minor_1 -gt $minor_2 ]; then
|
||||
# version 1's minor is bigger, version 1 is newer
|
||||
return 0
|
||||
elif [ $minor_1 -lt $minor_2 ]; then
|
||||
# version 1's major is smaller, version 2 is newer
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Minors equal, compare micros
|
||||
if [ $micro_1 -gt $micro_2 ]; then
|
||||
# version 1's micro is bigger, version 1 is newer
|
||||
return 0
|
||||
elif [ $micro_1 -lt $micro_2 ]; then
|
||||
# version 1's micro is smaller, version 2 is newer
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Micros equal, versions equal
|
||||
return 2
|
||||
}
|
||||
|
||||
# Define new aliases if they don't already exsist, in which case override
|
||||
# if the current version is newer than the version in the alias
|
||||
# $1 - full valid pyenv python version (for example '3.6.12', `3.11-dev`, or `pypy3.6-7.2.0-src`)
|
||||
# $2 - version used in the alias (for example '3.6', '3', or even '', but also `pypy3.7`, ...)
|
||||
try_define_aliases() {
|
||||
version="$1"
|
||||
alias_version="$2"
|
||||
|
||||
# Check if alias already exists
|
||||
if alias "py$alias_version" >/dev/null; then
|
||||
# Compare version from the existing alias with current version,
|
||||
# if current is newer, override the existing alias(es)
|
||||
defined_version="$(get_alias_version "$alias_version")"
|
||||
if version_compare "$version" "$defined_version"; then
|
||||
define_aliases "$version" "$alias_version"
|
||||
# echo "Overwrote '$alias_version' aliases to point to '$version'"
|
||||
return 0
|
||||
else
|
||||
return 1
|
||||
fi
|
||||
fi
|
||||
|
||||
# The aliases aren't already defined, it's safe to create them
|
||||
define_aliases "$version" "$alias_version"
|
||||
# echo "Made '$alias_version' aliases pointing to '$version'"
|
||||
return 0
|
||||
}
|
||||
|
||||
define_version_aliases() {
|
||||
prefix="$1"
|
||||
version="$2"
|
||||
suffix="$3"
|
||||
|
||||
|
||||
# ZSH only:
|
||||
version_data=("${(@s:.:)version}")
|
||||
major_version=$version_data[1]
|
||||
minor_version=$version_data[2]
|
||||
# POSIX, but slow:
|
||||
# major_version="$(echo "$version" | cut -d. -f1)"
|
||||
# minor_version="$(echo "$version" | cut -d. -f2)"
|
||||
|
||||
# Define the major.minor.micro (full) alias
|
||||
try_define_aliases "$version" "$prefix$version$suffix"
|
||||
# Define the major.minor alias
|
||||
try_define_aliases "$version" "$prefix$major_version.$minor_version$suffix"
|
||||
# Define the major alias
|
||||
try_define_aliases "$version" "$prefix$major_version$suffix"
|
||||
# Define top level alias
|
||||
try_define_aliases "$version" "$prefix$suffix"
|
||||
}
|
||||
|
||||
for python_dir in "$PYENV_ROOT"/versions/*/ ; do
|
||||
full_version="$(basename $python_dir)"
|
||||
|
||||
version_info="$(parse_python_version "$full_version")"
|
||||
if [ $version_info = ';;' ]; then
|
||||
# Version info wasn't obtained successfully, skip this version
|
||||
echo "Skipped $full_version"
|
||||
continue
|
||||
fi
|
||||
|
||||
# ZSH only:
|
||||
version_data=("${(@s:;:)version_info}")
|
||||
prefix=$version_data[1]
|
||||
version=$version_data[2]
|
||||
suffix=$version_data[3]
|
||||
# POSIX, but slow:
|
||||
# prefix="$(echo "$version_info" | cut -d';' -f1)"
|
||||
# version="$(echo "$version_info" | cut -d';' -f2)"
|
||||
# suffix="$(echo "$version_info" | cut -d';' -f3)"
|
||||
|
||||
# startTime=$(date +%N)
|
||||
define_version_aliases "$prefix" "$version" "$suffix"
|
||||
# endTime=$(date +%N)
|
||||
# nanos="$(expr $endTime - $startTime)"
|
||||
# echo "took $(expr $nanos / 1000000) miliseconds"
|
||||
done
|
||||
|
||||
if command -v poetry >/dev/null 2>&1; then
|
||||
alias poetry-pyenv='poetry env use "$(pyenv which python)" && poetry install'
|
||||
fi
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue