mirror of
https://github.com/ItsDrike/dotfiles.git
synced 2024-11-10 02:39:40 +00:00
Remove everything and restart blank
This commit removes all files currently present in the repo, to prepare for a start from a nothing. This is done due to my recent migration from X11 to Wayland, which has rendered most of these config files no longer releveant. I've currently been tracking my dotfiles in a separate repository, in hopes to get it to a state where it would be mergable here, but that turned out to be much more difficult than I anticipated, and I think it will be much easier to simply move over the history from this temporary repository I've been using onto this one. That however requires a start from a clean point, which this commit creates.
This commit is contained in:
parent
eadb37961b
commit
b912871070
32
.gitignore
vendored
32
.gitignore
vendored
|
@ -1,32 +0,0 @@
|
|||
# Byte-compiled / optimized / DLL Files
|
||||
__pycache__/
|
||||
*.py[cod]
|
||||
*$py.class
|
||||
|
||||
# Virtual Envornments
|
||||
.venv
|
||||
venv/
|
||||
env/
|
||||
|
||||
# Editor project settings
|
||||
## VSCode
|
||||
.vscode/
|
||||
## PyCharm intellij
|
||||
.idea/
|
||||
## repl.it
|
||||
.replit
|
||||
## Spyder
|
||||
.spyproject/
|
||||
.spyderproject/
|
||||
|
||||
# Ignore ds store files
|
||||
.DS_STORE
|
||||
|
||||
# Personal TODO files
|
||||
TODO
|
||||
|
||||
# Ignore backups
|
||||
backup/
|
||||
|
||||
# Ignore git downloads
|
||||
download/
|
18
.gitmodules
vendored
18
.gitmodules
vendored
|
@ -1,18 +0,0 @@
|
|||
[submodule "root/usr/local/src/dmenu"]
|
||||
path = "root/usr/local/src/dmenu"
|
||||
url = "https://github.com/ItsDrike/dmenu"
|
||||
[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 "home/.config/nvim"]
|
||||
path = home/.config/nvim
|
||||
url = https://github.com/ItsDrike/Stellar-Nvim
|
674
LICENSE
674
LICENSE
|
@ -1,674 +0,0 @@
|
|||
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>.
|
100
README.md
100
README.md
|
@ -1,100 +0,0 @@
|
|||
# Dotfiles
|
||||
|
||||
These are my personal dotfiles. They're split into `home/` and `root/` folders where the home folder holds all files
|
||||
that should be put directly into your `$HOME` directory, while all of the files in the root folder can be put directly
|
||||
into `/`
|
||||
|
||||
You are highly advised to first go through these dotfiles yourself and adjust them to your liking.
|
||||
|
||||
## :warning: NOTICE :warning:
|
||||
|
||||
I'm currently in the process of migrating to Hyprland WM, running on wayland. This means that most of the config here
|
||||
will need to be reworked. However since I'm still in the process of setting everything up, I haven't yet done this, and
|
||||
so this repository still contains my older settings.
|
||||
|
||||
Until I settle on everything, since some people asked for my dotfiles, if you are interested in my wayland dotfiles,
|
||||
I've created a temporary repository with these already in: <https://github.com/ItsDrike/temp-dotfiles>
|
||||
|
||||
However know that this repo might often get force-pushes, and it's very much gonna be deleted within a few weeks once I
|
||||
get everything in order, at which point I'll migrate these settings here, and remove the outdated Xorg config.
|
||||
(Obviously, you'll still be able to find the older versions in the git history, and I might create a tag or even a
|
||||
branch pointing to this Xorg version).
|
||||
|
||||
## Sample images
|
||||
|
||||
- Custom prompt (defined [here](home/.config/shell/theme)).
|
||||
- Colorscheme showcase: ![image](https://user-images.githubusercontent.com/20902250/117699472-69ab5d80-b1b4-11eb-85a8-2b039bc1599a.png)
|
||||
- Command timing showcase: ![image](https://user-images.githubusercontent.com/20902250/129356038-f1373183-ee50-4cc9-a602-a1215b5d1e5f.png)
|
||||
- Neovim configuration written in lua: ![Screenshot_2021-12-06_14-31-37](https://user-images.githubusercontent.com/20902250/144854879-f35de259-cea1-4415-9a3b-b093fe008836.png)
|
||||
- Automatic unknown command package handler: ![image](https://user-images.githubusercontent.com/20902250/129359888-629a4f28-64bd-4c90-8e87-de75a9b8997d.png)
|
||||
- `lf` file manager previews with ueberzug: ![image](https://user-images.githubusercontent.com/20902250/129359042-b0594788-bc14-4294-bba2-8cba8e30cd94.png)
|
||||
|
||||
## Features
|
||||
|
||||
- Full fledged ZSH configuration without the need to rely on oh-my-zsh
|
||||
- oh-my-zsh configuration is also supported, but it is off by default, adjust [`.zshrc`](home/.config/zsh/.zshrc) to
|
||||
enable it
|
||||
- Even though enabling it is an option, it is not a necessary thing to do, oh-my-zsh has a lot of code that is mostly
|
||||
irrelevant and unused, these dotfiles give you the ability to completely avoid it, if you desire to do so
|
||||
- Custom [prompt](home/.config/shell/theme), both for oh-my-zsh configuration or for standalone usage
|
||||
- Custom [NVIM configuration](home/.config/nvim)
|
||||
- When you open nvim for the first time, it will automatically try to install Packer plugin manager
|
||||
- It is compatible with TTY usage, in which case the color support is downgraded and use of special fonts is
|
||||
disabled.
|
||||
- The configuration is split into multiple smaller files to keep everything clearn and avoid clutter in the main
|
||||
configuration file (`init.lua`). It also allows for us to quickly disable certain parts of the config.
|
||||
- The whole configuration is written in lua rather than vimscript. This allows us to do some nicer things, however
|
||||
it also means that this config will NOT work for regular vim, it's only meant to be used for neovim.
|
||||
- Many handy [aliases](home/.config/shell/aliases) and [functions](home/.config/shell/functions) (likely too many, you
|
||||
should adjust that to your needs)
|
||||
- [Many pre-defined environmental variables](home/.config/shell/environ), these include
|
||||
- XDG paths configuration to avoid too much cluttering in home directory
|
||||
- Colorful man pages using LESS_TERMCAP, or if `bat` is installed, using it as MANPAGER
|
||||
- [Automatic handlers](home/.config/shell/handlers) which override default command not found behavior to show the
|
||||
package to which given command belongs (requires pkgfile on Arch Linux)
|
||||
- List of useful packages that I often install on most of my systems. (These are the package names for arch linux, but
|
||||
you should be able to find these for any distro, perhaps with a bit different name) located in
|
||||
[`packages.yaml`](packages.yaml)
|
||||
- [Opensnitch firewall rules](root/etc/opensnitchd/rules), which block most unauthorized traffic and only allow needed
|
||||
things. This also blocks spotify ads.
|
||||
- Automatic logout for TTY sessions or for root logins after 10 minutes of inactivity
|
||||
- NetworkManager configuration which assigns new mac for each network
|
||||
- `lf` file manager configuration with support for ueberzug image previews within the terminal
|
||||
- Tons of handy scripts for automating common tasks
|
||||
- [`incremental-backup`](root/usr/local/bin/incremental-backup): Easy way to utilize rsync for all backups, without
|
||||
the need for external software
|
||||
- [`auto-chroot`](root/usr/local/bin/auto-chroot): Quick way to chroot into any other linux system, without typing
|
||||
the very repetitive mount and umount commands
|
||||
- [`tamper-check`](root/usr/local/bin/tamper-check): Script that uses checksums to verify that given files weren't
|
||||
adjusted in any way.
|
||||
- [`brightness`](home/.local/bin/scripts/brightness): Script to quickly change screen brightness, you may need to
|
||||
adjust the BRIGHTNESS_FILE, this can be different from machine to machine
|
||||
- [`setbg`](home/.local/bin/scripts/setbg): Quick way to set desktop background to specific image, or random image,
|
||||
or previously used image
|
||||
- Many smaller dmenu scripts to make life easier
|
||||
|
||||
|
||||
|
||||
## Installation
|
||||
Clone this repository anywhere you like
|
||||
`$ git clone https://github.com/ItsDrike/dotfiles`
|
||||
|
||||
If you don't want to install git (running straight from newly installed OS), you can use `curl`: <br>
|
||||
`$ curl -LJO https://github.com/ItsDrike/dotfiles/tarball/master` <br>
|
||||
And extract from `.tar.gz` archive:
|
||||
`$ tar xvf [archive name]`
|
||||
|
||||
## Attribution
|
||||
|
||||
The open-source community has an incredible amount of resources that people have offered to others free of charge and
|
||||
we all depend on many of these sources. This project is no different and there were many open-source projects that were
|
||||
utilized in some parts of this project. For that reason, I'd like to thank all of these projects and their
|
||||
contributors for keeping their content open and available to everyone. This is the list of projects that helped me
|
||||
build this repository to the stage it's in now. Many of the aliases, config files and other resources aren't my
|
||||
original creations, but rather just small improvements and adjustments to get everything set in the way I like. Below
|
||||
is the list of all projects which helped the existence of this repository:
|
||||
- [Lukesmith's dotfiles/voidrice](https://github.com/LukeSmithxyz/voidrice)
|
||||
- [BrodieRobertson's dotfiles](https://github.com/BrodieRobertson/dotfiles)
|
||||
- [BrodieRobertson's scripts](https://github.com/BrodieRobertson/scripts)
|
||||
- [Derek Taylor's dotfiles](https://gitlab.com/dwt1/dotfiles)
|
||||
|
|
@ -1,14 +0,0 @@
|
|||
user_pref("browser.shell.checkDefaultBrowser", false); // 0101 Enable default browser check
|
||||
user_pref("network.dns.disableIPv6", false); // 0701 Some VPNs leak IPv6, mine doesn't so don't disable it
|
||||
user_pref("keyword.enabled", true); // 0801 Enable searching from location bar (I trust my search engine)
|
||||
user_pref("network.http.referer.XOriginPolicy", 0); // 1601 Allow cross origin referrers, with Smart Referer (this breaks too much)
|
||||
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 Use 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)
|
|
@ -1 +0,0 @@
|
|||
|
|
@ -1,816 +0,0 @@
|
|||
# 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
|
|
@ -1,10 +0,0 @@
|
|||
[Desktop Entry]
|
||||
Name=Discord
|
||||
StartupWMClass=discord
|
||||
Comment=All-in-one voice and text chat for gamers that's free, secure, and works on both your desktop and phone.
|
||||
GenericName=Internet Messenger
|
||||
Exec=/opt/discord/Discord --start-minimized
|
||||
Icon=discord
|
||||
Type=Application
|
||||
Categories=Network;InstantMessaging;
|
||||
Path=/usr/bin
|
|
@ -1,10 +0,0 @@
|
|||
[Desktop Entry]
|
||||
Name=Element
|
||||
StartupWMClass=element
|
||||
Comment=Chat client for matrix protocl
|
||||
GenericName=Internet Messenger
|
||||
Exec=/usr/bin/element-desktop --hidden
|
||||
Icon=element
|
||||
Type=Application
|
||||
Categories=Network;InstantMessaging;
|
||||
Path=/usr/bin
|
|
@ -1,16 +0,0 @@
|
|||
[Desktop Entry]
|
||||
Type=Application
|
||||
Name=OpenSnitch
|
||||
Exec=/bin/sh -c 'pkill -15 opensnitch-ui; opensnitch-ui'
|
||||
Icon=opensnitch-ui
|
||||
GenericName=OpenSnitch Firewall
|
||||
GenericName[hu]=OpenSnitch-tűzfal
|
||||
Comment=Application firewall
|
||||
Comment[es]=Firewall de aplicaciones
|
||||
Comment[hu]=Alkalmazási tűzfal
|
||||
Terminal=false
|
||||
NoDisplay=false
|
||||
Categories=System;Filesystem;Network;
|
||||
Keywords=system;firewall;policies;security;polkit;policykit;
|
||||
X-GNOME-Autostart-Delay=3
|
||||
X-GNOME-Autostart-enabled=true
|
|
@ -1,112 +0,0 @@
|
|||
#? Config file for bpytop v. 1.0.56
|
||||
|
||||
#* Color theme, looks for a .theme file in "/usr/[local/]share/bpytop/themes" and "~/.config/bpytop/themes", "Default" for builtin default theme.
|
||||
#* Prefix name by a plus sign (+) for a theme located in user themes folder, i.e. color_theme="+monokai"
|
||||
color_theme="Default"
|
||||
|
||||
#* If the theme set background should be shown, set to False if you want terminal background transparency
|
||||
theme_background=True
|
||||
|
||||
#* Manually set which boxes to show. Available values are "cpu mem net proc", seperate values with whitespace.
|
||||
shown_boxes="cpu mem net proc"
|
||||
|
||||
#* Update time in milliseconds, increases automatically if set below internal loops processing time, recommended 2000 ms or above for better sample times for graphs.
|
||||
update_ms=400
|
||||
|
||||
#* Processes update multiplier, sets how often the process list is updated as a multiplier of "update_ms".
|
||||
#* Set to 2 or higher to greatly decrease bpytop cpu usage. (Only integers)
|
||||
proc_update_mult=2
|
||||
|
||||
#* Processes sorting, "pid" "program" "arguments" "threads" "user" "memory" "cpu lazy" "cpu responsive",
|
||||
#* "cpu lazy" updates top process over time, "cpu responsive" updates top process directly.
|
||||
proc_sorting="memory"
|
||||
|
||||
#* Reverse sorting order, True or False.
|
||||
proc_reversed=False
|
||||
|
||||
#* Show processes as a tree
|
||||
proc_tree=True
|
||||
|
||||
#* Which depth the tree view should auto collapse processes at
|
||||
tree_depth=3
|
||||
|
||||
#* Use the cpu graph colors in the process list.
|
||||
proc_colors=True
|
||||
|
||||
#* Use a darkening gradient in the process list.
|
||||
proc_gradient=True
|
||||
|
||||
#* If process cpu usage should be of the core it's running on or usage of the total available cpu power.
|
||||
proc_per_core=False
|
||||
|
||||
#* Show process memory as bytes instead of percent
|
||||
proc_mem_bytes=True
|
||||
|
||||
#* Check cpu temperature, needs "osx-cpu-temp" on MacOS X.
|
||||
check_temp=True
|
||||
|
||||
#* Which sensor to use for cpu temperature, use options menu to select from list of available sensors.
|
||||
cpu_sensor=Auto
|
||||
|
||||
#* Show temperatures for cpu cores also if check_temp is True and sensors has been found
|
||||
show_coretemp=True
|
||||
|
||||
#* Draw a clock at top of screen, formatting according to strftime, empty string to disable.
|
||||
draw_clock="%X"
|
||||
|
||||
#* Update main ui in background when menus are showing, set this to false if the menus is flickering too much for comfort.
|
||||
background_update=True
|
||||
|
||||
#* Custom cpu model name, empty string to disable.
|
||||
custom_cpu_name=""
|
||||
|
||||
#* Optional filter for shown disks, should be full path of a mountpoint, separate multiple values with a comma ",".
|
||||
#* Begin line with "exclude=" to change to exclude filter, oterwise defaults to "most include" filter. Example: disks_filter="exclude=/boot, /home/user"
|
||||
disks_filter=""
|
||||
|
||||
#* Show graphs instead of meters for memory values.
|
||||
mem_graphs=False
|
||||
|
||||
#* If swap memory should be shown in memory box.
|
||||
show_swap=True
|
||||
|
||||
#* Show swap as a disk, ignores show_swap value above, inserts itself after first disk.
|
||||
swap_disk=True
|
||||
|
||||
#* If mem box should be split to also show disks info.
|
||||
show_disks=True
|
||||
|
||||
#* Filter out non physical disks. Set this to False to include network disks, RAM disks and similar.
|
||||
only_physical=True
|
||||
|
||||
#* Read disks list from /etc/fstab. This also disables only_physical.
|
||||
use_fstab=False
|
||||
|
||||
#* Set fixed values for network graphs, default "10M" = 10 Mibibytes, possible units "K", "M", "G", append with "bit" for bits instead of bytes, i.e "100mbit"
|
||||
net_download="10M"
|
||||
net_upload="10M"
|
||||
|
||||
#* Start in network graphs auto rescaling mode, ignores any values set above and rescales down to 10 Kibibytes at the lowest.
|
||||
net_auto=True
|
||||
|
||||
#* Sync the scaling for download and upload to whichever currently has the highest scale
|
||||
net_sync=False
|
||||
|
||||
#* If the network graphs color gradient should scale to bandwith usage or auto scale, bandwith usage is based on "net_download" and "net_upload" values
|
||||
net_color_fixed=False
|
||||
|
||||
#* Starts with the Network Interface specified here.
|
||||
net_iface=
|
||||
|
||||
#* Show battery stats in top right if battery is present
|
||||
show_battery=True
|
||||
|
||||
#* Show init screen at startup, the init screen is purely cosmetical
|
||||
show_init=False
|
||||
|
||||
#* Enable check for new version from github.com/aristocratos/bpytop at start.
|
||||
update_check=True
|
||||
|
||||
#* Set loglevel for "~/.config/bpytop/error.log" levels are: "ERROR" "WARNING" "INFO" "DEBUG".
|
||||
#* The level set includes all lower levels, i.e. "DEBUG" will show all logging info.
|
||||
log_level=WARNING
|
|
@ -1,13 +0,0 @@
|
|||
{
|
||||
"BACKGROUND_COLOR": "#202225",
|
||||
"IS_MAXIMIZED": false,
|
||||
"IS_MINIMIZED": false,
|
||||
"WINDOW_BOUNDS": {
|
||||
"x": 912,
|
||||
"y": 42,
|
||||
"width": 990,
|
||||
"height": 1020
|
||||
},
|
||||
"DANGEROUS_ENABLE_DEVTOOLS_ONLY_ENABLE_IF_YOU_KNOW_WHAT_YOURE_DOING": true,
|
||||
"SKIP_HOST_UPDATE": true
|
||||
}
|
|
@ -1,443 +0,0 @@
|
|||
[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
|
|
@ -1,44 +0,0 @@
|
|||
[General]
|
||||
contrastOpacity=188
|
||||
disabledTrayIcon=true
|
||||
drawColor=#ad00ff
|
||||
drawThickness=1
|
||||
filenamePattern=Screenshot_%Y-%m-%d_%H-%M-%S
|
||||
savePath=/home/itsdrike/Pictures/Screenshots
|
||||
savePathFixed=false
|
||||
setSaveAsFileExtension=Portable Network Graphic file (PNG) (*.png)
|
||||
showStartupLaunchMessage=true
|
||||
startupLaunch=true
|
||||
|
||||
[Shortcuts]
|
||||
TYPE_ARROW=A
|
||||
TYPE_CIRCLE=C
|
||||
TYPE_CIRCLECOUNT=
|
||||
TYPE_COMMIT_CURRENT_TOOL=Ctrl+Return
|
||||
TYPE_COPY=Ctrl+C
|
||||
TYPE_DELETE_CURRENT_TOOL=Del
|
||||
TYPE_DRAWER=D
|
||||
TYPE_EXIT=Ctrl+Q
|
||||
TYPE_MARKER=M
|
||||
TYPE_MOVESELECTION=Ctrl+M
|
||||
TYPE_MOVE_DOWN=Down
|
||||
TYPE_MOVE_LEFT=Left
|
||||
TYPE_MOVE_RIGHT=Right
|
||||
TYPE_MOVE_UP=Up
|
||||
TYPE_OPEN_APP=Ctrl+O
|
||||
TYPE_PENCIL=P
|
||||
TYPE_PIN=
|
||||
TYPE_PIXELATE=B
|
||||
TYPE_RECTANGLE=R
|
||||
TYPE_REDO=Ctrl+Shift+Z
|
||||
TYPE_RESIZE_DOWN=Shift+Down
|
||||
TYPE_RESIZE_LEFT=Shift+Left
|
||||
TYPE_RESIZE_RIGHT=Shift+Right
|
||||
TYPE_RESIZE_UP=Shift+Up
|
||||
TYPE_SAVE=Ctrl+S
|
||||
TYPE_SELECTION=S
|
||||
TYPE_SELECTIONINDICATOR=
|
||||
TYPE_SELECT_ALL=Ctrl+A
|
||||
TYPE_TEXT=T
|
||||
TYPE_TOGGLE_PANEL=Space
|
||||
TYPE_UNDO=Ctrl+Z
|
|
@ -1,83 +0,0 @@
|
|||
[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"
|
||||
|
||||
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 = nvim
|
||||
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
|
|
@ -1,25 +0,0 @@
|
|||
# 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
|
|
@ -1,11 +0,0 @@
|
|||
[Filechooser Settings]
|
||||
LocationMode=path-bar
|
||||
ShowHidden=false
|
||||
ShowSizeColumn=true
|
||||
GeometryX=510
|
||||
GeometryY=260
|
||||
GeometryWidth=900
|
||||
GeometryHeight=584
|
||||
SortColumn=name
|
||||
SortOrder=ascending
|
||||
StartupMode=recent
|
|
@ -1,19 +0,0 @@
|
|||
# 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-Breeze-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="hintslight"
|
||||
gtk-modules="colorreload-gtk-module:window-decorations-gtk-module:appmenu-gtk-module"
|
|
@ -1,3 +0,0 @@
|
|||
file:///home/itsdrike/Pictures Pictures
|
||||
file:///home/itsdrike/Downloads Downloads
|
||||
file:///home/itsdrike/Personal Personal
|
|
@ -1,21 +0,0 @@
|
|||
[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-Breeze-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=hintslight
|
|
@ -1,6 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
readonly PREVIEW_ID="preview"
|
||||
|
||||
printf '{"action": "remove", "identifier": "%s"}\n' "$PREVIEW_ID" > "$FIFO_UEBERZUG"
|
||||
|
|
@ -1,21 +0,0 @@
|
|||
#!/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
|
|
@ -1,144 +0,0 @@
|
|||
# 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
|
||||
|
|
@ -1,162 +0,0 @@
|
|||
#!/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
|
|
@ -1,25 +0,0 @@
|
|||
# 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"
|
|
@ -1,180 +0,0 @@
|
|||
# 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 +0,0 @@
|
|||
loop=yes
|
|
@ -1,47 +0,0 @@
|
|||
unbind-key j
|
||||
unbind-key k
|
||||
unbind-key h
|
||||
unbind-key H
|
||||
unbind-key L
|
||||
unbind-key c
|
||||
unbind-key ,
|
||||
browser "xdg-open %u"
|
||||
|
||||
# Feed settings
|
||||
prepopulate-query-feeds yes
|
||||
refresh-on-startup yes
|
||||
|
||||
# Macros
|
||||
macro w set browser "mpv %u" ; open-in-browser ; set browser "xdg-open %u"
|
||||
macro r set browser "w3m %u" ; open-in-browser ; set browser "xdg-open %u"
|
||||
|
||||
# bind keys
|
||||
bind-key ; macro-prefix
|
||||
bind-key BACKSPACE quit
|
||||
bind-key h quit
|
||||
bind-key j down
|
||||
bind-key k up
|
||||
bind-key l open
|
||||
bind-key H prev-feed
|
||||
bind-key L next-feed
|
||||
bind-key c toggle-show-read-feeds
|
||||
|
||||
color background default default
|
||||
color listnormal default default
|
||||
color listnormal_unread default default
|
||||
color listfocus color16 cyan
|
||||
color listfocus_unread color16 cyan
|
||||
color info default black
|
||||
color article default default
|
||||
|
||||
highlight article "(^Feed:.*|^Title:.*|^Author:.*)" cyan default bold
|
||||
highlight article "(^Link:.*|^Date:.*)" default default
|
||||
highlight article "https?://[^ ]+" green default
|
||||
|
||||
highlight article "^(Title):.*$" blue default
|
||||
highlight article "\\[[0-9][0-9]*\\]" magenta default bold
|
||||
highlight article "\\[image\\ [0-9]+\\]" green default bold
|
||||
highlight article "\\[embedded flash: [0-9][0-9]*\\]" green default bold
|
||||
highlight article ":.*\\(link\\)$" cyan default
|
||||
highlight article ":.*\\(image\\)$" blue default
|
||||
highlight article ":.*\\(embedded flash\\)$" magenta default
|
|
@ -1,2 +0,0 @@
|
|||
https://itsdrike.com/posts/index.xml
|
||||
https://archlinux.org/feeds/news
|
|
@ -1,78 +0,0 @@
|
|||
[General]
|
||||
DkEditDock=2
|
||||
firstTime=false
|
||||
geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\x5\x89\0\0\0\x18\0\0\aG\0\0\x1\xdf\0\0\x5\x8d\0\0\0\x36\0\0\aC\0\0\x1\xdb\0\0\0\0\0\0\0\0\a\x80\0\0\x5\x8d\0\0\0\x36\0\0\aC\0\0\x1\xdb)
|
||||
geometryNomacs=@Rect(1421 54 439 422)
|
||||
windowState=@ByteArray(\0\0\0\xff\0\0\0\0\xfd\0\0\0\x2\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\x3\xb8\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\x3\xb8\0\0\0\0\0\0\0\0\0\0\x1\xb7\0\0\x1\x88\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\x1\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=false
|
||||
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
|
||||
|
||||
[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"
|
|
@ -1,4 +0,0 @@
|
|||
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
|
|
@ -1 +0,0 @@
|
|||
Subproject commit 5e10bd30328a890bc2f62d8687b3c346a8032b14
|
|
@ -1,29 +0,0 @@
|
|||
[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=1884
|
||||
win_height=1020
|
||||
splitter_pos=269
|
||||
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
|
|
@ -1,290 +0,0 @@
|
|||
# NOTE 1: This configuration when used as-is, requires --experimental-backends
|
||||
# command line option to be used, in order to enable the usage of the
|
||||
# dual-kawase blur method.
|
||||
|
||||
# NOTE 2: With the picom from standard repositories, currently using experimental
|
||||
# backends will disable the support for rounded corners. If you want to use both
|
||||
# the dual-kawase blur method and rounded corners, you will need to use a fork.
|
||||
# However it is not mandantory. If you will use the standard version, you will just
|
||||
# see a warning in picom's logs each time it's started, you can disable rounded
|
||||
# corners completely to prevent this. If you do want to use a fork, I recommend this:
|
||||
# <https://github.com/jonaburg/picom> (picom-jonaburg-git on AUR).
|
||||
|
||||
# NOTE 3: The shadows are currently disabled, the reason for this are the issues
|
||||
# that occur with combining rounded corners and shadows, for more info, check:
|
||||
# <https://github.com/jonaburg/picom/issues/62>
|
||||
|
||||
|
||||
# General settings
|
||||
###################
|
||||
|
||||
# Daemonize process. Fork to background after initialization.
|
||||
# Causes issues with certain (badly-written) drivers.
|
||||
daemon = false
|
||||
|
||||
# Specify the backend to use: `xrender`, `glx`, or `xr_glx_hybrid`.
|
||||
# `xrender` is the default one.
|
||||
# We use GLX since it's generally a lot faster than xrender.
|
||||
# There usually aren't anny issues with this, but if you do experience some
|
||||
# try falling back to xrender.
|
||||
backend = "glx";
|
||||
|
||||
# To properly use the GLX backend, we need to enable experimental backends
|
||||
experimental-backends = true;
|
||||
|
||||
# Enable/Disable VSync.
|
||||
vsync = true;
|
||||
|
||||
# Enable remote control via D-Bus.
|
||||
dbus = false;
|
||||
|
||||
# Try to detect WM windows (a non-override-redirect window with no
|
||||
# child that has 'WM_STATE') and mark them as active.
|
||||
mark-wmwin-focused = true;
|
||||
|
||||
# Mark override-redirect windows that doesn't have a child window
|
||||
# with 'WM_STATE' focused.
|
||||
mark-ovredir-focused = true;
|
||||
|
||||
# Try to detect windows with rounded corners and don't consider them
|
||||
# shaped windows. The accuracy is not very high, unfortunately.
|
||||
detect-rounded-corners = true;
|
||||
|
||||
# Detect '_NET_WM_OPACITY' on client windows, useful for window managers
|
||||
# not passing '_NET_WM_OPACITY' of client windows to frame windows.
|
||||
detect-client-opacity = true;
|
||||
|
||||
# Specify refresh rate of the screen. If not specified or 0, picom will
|
||||
# try detecting this with X RandR extension.
|
||||
refresh-rate = 0;
|
||||
|
||||
# GLX backend: Avoid using stencil buffer, useful if you don't have a stencil buffer.
|
||||
# Might cause incorrect opacity when rendering transparent content (but never
|
||||
# practically happened) and may not work with blur-background.
|
||||
# My tests show a 15% performance boost. Recommended.
|
||||
glx-no-stencil = true;
|
||||
|
||||
# GLX backend: Avoid rebinding pixmap on window damage.
|
||||
# Probably could improve performance on rapid window content changes,
|
||||
# but is known to break things on some drivers (LLVMpipe, xf86-video-intel, etc.).
|
||||
# Recommended if it works.
|
||||
glx-no-rebind-pixmap = true;
|
||||
|
||||
# Disable/Enable the use of damage information.
|
||||
# Disabling cause the whole screen to be redrawn everytime, instead of the part
|
||||
# of the screen has actually changed. Potentially degrades the performance,
|
||||
# but might fix some artifacts. It is recommended to keep this enabled.
|
||||
# The opposing option is no-use-damage
|
||||
use-damage = true
|
||||
|
||||
# Window type settings
|
||||
#
|
||||
# 'WINDOW_TYPE' is one of the 15 window types defined in EWMH standard:
|
||||
# "unknown", "desktop", "dock", "toolbar", "menu", "utility",
|
||||
# "splash", "dialog", "normal", "dropdown_menu", "popup_menu",
|
||||
# "tooltip", "notification", "combo", and "dnd".
|
||||
#
|
||||
# Following per window-type options are available: ::
|
||||
#
|
||||
# fade, shadow:::
|
||||
# Controls window-type-specific shadow and fade settings.
|
||||
#
|
||||
# opacity:::
|
||||
# Controls default opacity of the window type.
|
||||
#
|
||||
# focus:::
|
||||
# Controls whether the window of this type is to be always considered focused.
|
||||
# (By default, all window types except "normal" and "dialog" has this on.)
|
||||
#
|
||||
# full-shadow:::
|
||||
# Controls whether shadow is drawn under the parts of the window that you
|
||||
# normally won't be able to see. Useful when the window has parts of it
|
||||
# transparent, and you want shadows in those areas.
|
||||
#
|
||||
# redir-ignore:::
|
||||
# Controls whether this type of windows should cause screen to become
|
||||
# redirected again after been unredirected. If you have unredir-if-possible
|
||||
# set, and doesn't want certain window to cause unnecessary screen redirection,
|
||||
# you can set this to `true`.
|
||||
#
|
||||
wintypes:
|
||||
{
|
||||
normal = { full-shadow = true; blur-background = true; };
|
||||
splash = { blur-background = false; };
|
||||
menu = { full-shadow = true; };
|
||||
tooltip = { fade = true; shadow = false; focus = true;};
|
||||
dock = { shadow = false; };
|
||||
dnd = { shadow = false; };
|
||||
popup_menu = { full-shadow = true; };
|
||||
utility = { full-shadow = true; };
|
||||
toolbar = { full-shadow = true; };
|
||||
notification = { opacity = 1; }
|
||||
};
|
||||
|
||||
|
||||
# Transparency / Opacity
|
||||
#########################
|
||||
|
||||
# Specify a list of opacity rules.
|
||||
# format: "[Opacity level]:[xprop info name] = '[xprop value]'"
|
||||
# - class_g reffers to class in position #0,
|
||||
# - class_i reffers to class in position #1
|
||||
# Note we don't make any guarantee about possible conflicts with other
|
||||
# programs that set '_NET_WM_WINDOW_OPACITY' on frame or client windows.
|
||||
|
||||
# Apply blur to terminals
|
||||
opacity-rule = [
|
||||
"100:name = 'Dunst'",
|
||||
# Opacities with enabled shadows (shadows allow for higher alpha - lower number)
|
||||
#"70:class_g = 'Alacritty'",
|
||||
#"70:class_g = 'st-256color'",
|
||||
#"70:class_g = 'URxvt'",
|
||||
#"70:class_g = 'kitty'",
|
||||
#"82:class_g = 'Spotify'"
|
||||
# Opacities without shadows
|
||||
"80:class_g = 'Alacritty'",
|
||||
"80:class_g = 'st-256color'",
|
||||
"80:class_g = 'URxvt'",
|
||||
"80:class_g = 'kitty'",
|
||||
"92:class_g = 'Spotify'"
|
||||
];
|
||||
|
||||
# Default opacity for active windows. (0.0 - 1.0, defaults to 1.0)
|
||||
active-opacity = 1;
|
||||
# Opacity of inactive windows. (0.1 - 1.0, defaults to 1.0)
|
||||
inactive-opacity = 1;
|
||||
# Opacity of window titlebars and borders. (0.1 - 1.0, disabled by default)
|
||||
frame-opacity = 1.0;
|
||||
# Default opacity for dropdown menus and popup menus. (0.0 - 1.0, defaults to 1.0)
|
||||
opacity = 1.0
|
||||
# Let inactive opacity set by -i override the '_NET_WM_OPACITY' values of windows.
|
||||
inactive-opacity-override = false
|
||||
# Dim inactive windows. (0.0 - 1.0, defaults to 0.0)
|
||||
inactive-dim = 0.0
|
||||
# Use fixed inactive dim value, instead of adjusting according to window opacity.
|
||||
inactive-dim-fixed = 1.0
|
||||
# Specify a list of conditions of windows that should always be considered focused.
|
||||
focus-exclude = []
|
||||
|
||||
|
||||
# Background blurring
|
||||
########################
|
||||
|
||||
blur:
|
||||
{
|
||||
# dual_kawase blur method requires GLX as backend
|
||||
# If you can't get GLX to work, use 'kernel' blur instead.
|
||||
# dual_kawase allows for multi-threaded bluring that's
|
||||
# very fast.
|
||||
method = "dual_kawase";
|
||||
#method = "kernel";
|
||||
#kernel = "11x11gaussian";
|
||||
strength = 4;
|
||||
deviation = 1.0;
|
||||
# When true, blur background of semi-transparent / ARGB window.
|
||||
background = false;
|
||||
# When true, the background of windows when the window frame
|
||||
# is not opaque is blurred, implies background=true
|
||||
background-frame = false;
|
||||
# Whe true, use fixeed blur strength rather than adjusing
|
||||
# according to window opacity
|
||||
background-fixed = false;
|
||||
# Specify the blur convolution kernel
|
||||
kern = "3x3box"
|
||||
}
|
||||
|
||||
# Exclude conditions for background blur
|
||||
blur-background-exclude = [
|
||||
# Prevents picom from blurring the background
|
||||
# when taking selection screenshot with `maim`
|
||||
"class_g = 'slop'",
|
||||
"_GTK_FRAME_EXTENTS@:c"
|
||||
];
|
||||
|
||||
|
||||
# Shadows
|
||||
################
|
||||
|
||||
# Enabled client-side shadows on windows. Note desktop windows
|
||||
# (windows with '_NET_WM_WINDOW_TYPE_DESKTOP') never get shadow,
|
||||
# unless explicitly requested using the wintypes option.
|
||||
shadow = false;
|
||||
|
||||
# The blur radius for shadows, in pixels. (defaults to 12)
|
||||
shadow-radius = 12;
|
||||
# The opacity of shadows. (0.0 - 1.0, defaults to 0.75)
|
||||
shadow-opacity = 0.75;
|
||||
# The left offset for shadows, in pixels. (defaults to -15)
|
||||
shadow-offset-x = -15;
|
||||
# The top offset for shadows, in pixels. (defaults to -15)
|
||||
shadow-offset-y = -15;
|
||||
# Red color value of shadow (0.0 - 1.0, defaults to 0).
|
||||
shadow-red = 0
|
||||
# Green color value of shadow (0.0 - 1.0, defaults to 0).
|
||||
shadow-green = 0
|
||||
# Blue color value of shadow (0.0 - 1.0, defaults to 0).
|
||||
shadow-blue = 0
|
||||
# Crop shadow of a window fully on a particular Xinerama screen to the screen.
|
||||
xinerama-shadow-crop = false
|
||||
|
||||
# Specify a list of conditions of windows that should have no shadow.
|
||||
shadow-exclude = [
|
||||
"name = 'Notification'",
|
||||
"class_g = 'Conky'",
|
||||
"class_g ?= 'Notify-osd'",
|
||||
"class_g = 'Cairo-clock'",
|
||||
"class_g = 'slop'",
|
||||
"class_g = 'Polybar'",
|
||||
"_GTK_FRAME_EXTENTS@:c"
|
||||
];
|
||||
|
||||
|
||||
# Window Fading
|
||||
################
|
||||
|
||||
# Fade windows in/out when opening/closing and when opacity changes,
|
||||
# unless no-fading-openclose is used.
|
||||
fading = false;
|
||||
|
||||
# Opacity change between steps while fading in. (0.01 - 1.0, defaults to 0.028)
|
||||
fade-in-step = 0.07;
|
||||
# Opacity change between steps while fading out. (0.01 - 1.0, defaults to 0.03)
|
||||
fade-out-step = 0.1;
|
||||
# The time between steps in fade step, in milliseconds. (> 0, defaults to 10)
|
||||
fade-delta = 10
|
||||
# Do not fade on window open/close.
|
||||
no-fading-openclose = false
|
||||
# Do not fade destroyed ARGB windows with WM frame. Workaround of bugs in Openbox,
|
||||
# Fluxbox, etc.
|
||||
no-fading-destroyed-argb = false
|
||||
|
||||
# Specify a list of conditions of windows that should not be faded.
|
||||
# don't need this, we disable fading for all normal windows with wintypes: {}
|
||||
fade-exclude = [
|
||||
"class_g = 'slop'" # maim
|
||||
]
|
||||
|
||||
|
||||
# Corners
|
||||
################
|
||||
|
||||
# Sets the radius of rounded window corners. When > 0, the compositor will
|
||||
# round the corners of windows.
|
||||
corner-radius = 12;
|
||||
rounded-corners-exclude = [
|
||||
"class_g = 'Rofi'",
|
||||
"class_g = 'dmenu'",
|
||||
"class_g = 'Polybar'",
|
||||
"name = 'Notification area'",
|
||||
"name = 'Dunst'"
|
||||
]
|
||||
|
||||
# Rounded corners alone only changes the window, but the borders
|
||||
# around it still remain rectangular, round-borders option allows
|
||||
# the borders to also be round.
|
||||
round-borders = 1;
|
||||
# Specify a list of border width rules.
|
||||
# format: "[pixels]:[xprop info name] = '[xprop value]'"
|
||||
# Note this doesn't have any guarantee about not conflicting with the
|
||||
# border width set by the window manager.
|
||||
round-borders-rule = [];
|
|
@ -1,3 +0,0 @@
|
|||
[virtualenvs]
|
||||
in-project = true
|
||||
prefer-active-python = true
|
|
@ -1,294 +0,0 @@
|
|||
#!/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 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'
|
||||
|
||||
# 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
|
|
@ -1,78 +0,0 @@
|
|||
#!/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"
|
||||
# Less commonly used applications
|
||||
export _ZL_DATA="$XDG_DATA_HOME/zlua"
|
||||
export NPM_CONFIG_USERCONFIG="$XDG_CONFIG_HOME/npm/npmrc"
|
||||
export SQLITE_HISTORY="$XDG_DATA_HOME/sqlite_history"
|
||||
export WAKATIME_HOME="$XDG_CONFIG_HOME/wakatime"
|
||||
export GOPATH="$XDG_DATA_HOME/go"
|
||||
export IPYTHONDIR="$XDG_CONFIG_HOME/ipython"
|
||||
export PYENV_ROOT="$XDG_DATA_HOME/pyenv"
|
||||
export MYPY_CACHE_DIR="$XDG_CACHE_HOME/mypy"
|
||||
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 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
|
||||
|
|
@ -1,291 +0,0 @@
|
|||
#!/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"}
|
||||
}
|
||||
|
|
@ -1,40 +0,0 @@
|
|||
#!/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
|
|
@ -1,65 +0,0 @@
|
|||
#!/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
|
|
@ -1,19 +0,0 @@
|
|||
#!/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 startx > /dev/null; then
|
||||
! pidof -s Xorg > /dev/null 2>&1 && exec startx "$XINITRC"
|
||||
fi
|
||||
fi
|
||||
|
|
@ -1,187 +0,0 @@
|
|||
#!/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
|
||||
|
|
@ -1,196 +0,0 @@
|
|||
#!/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
|
|
@ -1 +0,0 @@
|
|||
/usr/lib/systemd/user/clipmenud.service
|
|
@ -1,98 +0,0 @@
|
|||
# Don't ask for confirmations
|
||||
#assume_yes = true
|
||||
|
||||
# Disable specific steps - same options as the command line flag
|
||||
#disable = ["system", "emacs"]
|
||||
|
||||
# Ignore failures for these steps
|
||||
#ignore_failures = ["powershell"]
|
||||
|
||||
# Run specific steps - same options as the command line flag
|
||||
only = ["system", "pip3", "flatpak", "node", "pipx", "rustup", "dotnet", "tldr", "vim"]
|
||||
|
||||
# Do not ask to retry failed steps (default: false)
|
||||
#no_retry = true
|
||||
|
||||
# Run inside tmux
|
||||
#run_in_tmux = true
|
||||
|
||||
# List of remote machines with Topgrade installed on them
|
||||
#remote_topgrades = ["toothless", "pi", "parnas"]
|
||||
|
||||
# Arguments to pass SSH when upgrading remote systems
|
||||
#ssh_arguments = "-o ConnectTimeout=2"
|
||||
|
||||
# Path to Topgrade executable on remote machines
|
||||
#remote_topgrade_path = ".cargo/bin/topgrade"
|
||||
|
||||
# Arguments to pass tmux when pulling Repositories
|
||||
#tmux_arguments = "-S /var/tmux.sock"
|
||||
|
||||
# Do not set the terminal title
|
||||
#set_title = false
|
||||
|
||||
# Cleanup temporary or old files
|
||||
#cleanup = true
|
||||
|
||||
[git]
|
||||
#max_concurrency = 5
|
||||
# Additional git repositories to pull
|
||||
#repos = [
|
||||
# "~/src/*/",
|
||||
# "~/.config/something"
|
||||
#]
|
||||
|
||||
# Don't pull the predefined git repos
|
||||
#predefined_repos = false
|
||||
|
||||
# Arguments to pass Git when pulling Repositories
|
||||
#arguments = "--rebase --autostash"
|
||||
|
||||
[composer]
|
||||
#self_update = true
|
||||
|
||||
# Commands to run before anything
|
||||
[pre_commands]
|
||||
#"Emacs Snapshot" = "rm -rf ~/.emacs.d/elpa.bak && cp -rl ~/.emacs.d/elpa ~/.emacs.d/elpa.bak"
|
||||
|
||||
# Custom commands
|
||||
[commands]
|
||||
#"Python Environment" = "~/dev/.env/bin/pip install -i https://pypi.python.org/simple -U --upgrade-strategy eager jupyter"
|
||||
|
||||
[brew]
|
||||
#greedy_cask = true
|
||||
|
||||
[linux]
|
||||
# Arch Package Manager to use. Allowed values: autodetect, trizen, paru, yay, pacman.
|
||||
#arch_package_manager = "pacman"
|
||||
# Arguments to pass yay (or paru) when updating packages
|
||||
#yay_arguments = "--nodevel"
|
||||
#show_arch_news = true
|
||||
#trizen_arguments = "--devel"
|
||||
#enable_tlmgr = true
|
||||
#emerge_sync_flags = "-q"
|
||||
#emerge_update_flags = "-uDNa --with-bdeps=y world"
|
||||
#redhat_distro_sync = false
|
||||
#rpm_ostree = false
|
||||
|
||||
[windows]
|
||||
# Manually select Windows updates
|
||||
#accept_all_updates = false
|
||||
#open_remotes_in_new_terminal = true
|
||||
|
||||
# Causes Topgrade to rename itself during the run to allow package managers
|
||||
# to upgrade it. Use this only if you installed Topgrade by using a package
|
||||
# manager such as Scoop to Cargo
|
||||
#self_rename = true
|
||||
|
||||
[npm]
|
||||
# Use sudo if the NPM directory isn't owned by the current user
|
||||
#use_sudo = true
|
||||
|
||||
[firmware]
|
||||
# Offer to update firmware; if false just check for and display available updates
|
||||
#upgrade = true
|
||||
|
||||
[flatpak]
|
||||
# Use sudo for updating the system-wide installation
|
||||
#use_sudo = true
|
|
@ -1,17 +0,0 @@
|
|||
# This file is written by xdg-user-dirs-update
|
||||
# If you want to change or add directories, just edit the line you're
|
||||
# interested in. All local changes will be retained on the next run.
|
||||
# Format is XDG_xxx_DIR="$HOME/yyy", where yyy is a shell-escaped
|
||||
# homedir-relative path, or XDG_xxx_DIR="/yyy", where /yyy is an
|
||||
# absolute path. No other format is supported.
|
||||
#
|
||||
#XDG_DESKTOP_DIR="$HOME/Desktop"
|
||||
XDG_DOWNLOAD_DIR="$HOME/Downloads"
|
||||
#XDG_TEMPLATES_DIR="$HOME/Templates"
|
||||
#XDG_PUBLICSHARE_DIR="$HOME/Public"
|
||||
#XDG_DOCUMENTS_DIR="$HOME/Documents"
|
||||
XDG_DOCUMENTS_DIR="$HOME/Personal"
|
||||
#XDG_MUSIC_DIR="$HOME/Music"
|
||||
XDG_MUSIC_DIR="$HOME/Audio"
|
||||
XDG_PICTURES_DIR="$HOME/Pictures"
|
||||
#XDG_VIDEOS_DIR="$HOME/Videos"
|
|
@ -1 +0,0 @@
|
|||
en_US
|
|
@ -1 +0,0 @@
|
|||
hsts-file=~/.cache/wget-hsts
|
|
@ -1,20 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
# xinitrc runs automatically when startx is ran
|
||||
|
||||
# There are some important commands that need to be executed when we start
|
||||
# the graphical environment. There is a link to this file in ~/.xprofile
|
||||
# because that file is ran automatically if someone uses a display manager
|
||||
# (login screen) and so they are needed there. To prevent doubling up commands
|
||||
# I source them here with the line below.
|
||||
|
||||
if [ -f "${XDG_CONFIG_HOME:-$HOME/config}/x11/xprofile" ]; then
|
||||
source "${XDG_CONFIG_HOME:-$HOME/.config}/x11/xprofile"
|
||||
else
|
||||
source "$HOME/.xprofile"
|
||||
fi
|
||||
|
||||
exec xmonad
|
||||
# Launch xmonad with dbus
|
||||
#exec dbus-launch --sh-syntax --exit-with-session xmonad
|
||||
|
|
@ -1,50 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
# This file runs when a DM logs you into a graphical session
|
||||
# if you use startx/xinit this file should also be soruced.
|
||||
|
||||
# Set monitor order
|
||||
xrandr --output HDMI-1 --auto --output eDP-1 --right-of HDMI-1 --auto &
|
||||
|
||||
# Start xsecurelock lockscreen with xss-lock
|
||||
~/.local/bin/scripts/lockscreen start &
|
||||
|
||||
# Set the background with a custom `setbg` script
|
||||
setbg &
|
||||
|
||||
# Use xresources file in ~/.config/x11
|
||||
xrdb -merge ${XDG_CONFIG_HOME:-$HOME/.config}/x11/xresources &
|
||||
|
||||
# Start compositor manager to allow transparency
|
||||
picom -b --experimental-backends &
|
||||
|
||||
# Dunst for notifications
|
||||
dunst &
|
||||
|
||||
# Run network manager applet to show connectivity
|
||||
nm-applet &
|
||||
|
||||
# Run trayer-srg for systemtray bar
|
||||
# if installed normally, command will be `trayer`, not `trayer-srg` command
|
||||
trayer --monitor 0 --edge top --align right --widthtype request --padding 0 --transparent true --tint 0x282c34 --alpha 0 --height 23 &
|
||||
|
||||
# Start flameshot in background
|
||||
flameshot &
|
||||
|
||||
# AppArmor notifications
|
||||
aa-notify -p &
|
||||
|
||||
# Enable numlock with numlockx
|
||||
numlockx &
|
||||
|
||||
# Udiskie for simple mounting and notifications, no automount for security reasons
|
||||
udiskie -A -s &
|
||||
|
||||
# Enable running applications from chroot
|
||||
xhost +local:
|
||||
|
||||
# Change x shaped default cursor (fonts are located in /usr/include/X11/cursorfont.h)
|
||||
xsetroot -cursor_name left_ptr
|
||||
|
||||
# import DISPLAY environment variable for systemd user services
|
||||
systemctl --user import-environment DISPLAY
|
|
@ -1,40 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
if [ $# -lt 1 ]; then
|
||||
echo "Invalid amount of arguments passed!"
|
||||
echo "Required parameter: amount of monitors"
|
||||
exit
|
||||
fi
|
||||
|
||||
MONITOR_AMOUT="$1"
|
||||
WIDTH=1920
|
||||
WORK_DIR="${XDG_CONFIG_HOME:-$HOME/.config}/xmobar"
|
||||
|
||||
make_position_line(){
|
||||
xpos=$(($1 * $WIDTH))
|
||||
line="position = Static { xpos = $xpos, ypos = 0, width = $WIDTH, height = 24 },"
|
||||
echo "$line"
|
||||
}
|
||||
|
||||
|
||||
# Remove all already existing specific xmobar configurations
|
||||
find $WORK_DIR -regex '\./xmobarrc[0-9]+' -exec rm {} +
|
||||
|
||||
xmobarhs_content="$(cat $WORK_DIR/xmobarrc.hs)"
|
||||
position_line_0="$(make_position_line 0)"
|
||||
|
||||
for ((n=0;n<MONITOR_AMOUT;n++)); do
|
||||
cur_file="$WORK_DIR/xmobarrc$n"
|
||||
|
||||
# Replace position line to accomodate for multiple monitors
|
||||
position_line="$(make_position_line $n)"
|
||||
contents="${xmobarhs_content/$position_line_0/$position_line}"
|
||||
|
||||
# Only use Trayer in the 1st xmobar (on single monitor)
|
||||
if [ $n -ne 0 ]; then
|
||||
contents="$(grep -v trayerpad <<< $contents)"
|
||||
fi
|
||||
|
||||
echo "$contents" > "$cur_file"
|
||||
echo "$cur_file created."
|
||||
done
|
|
@ -1,49 +0,0 @@
|
|||
#!/bin/sh
|
||||
# Copied from https://github.com/jaor/xmobar/issues/239#issuecomment-233206552
|
||||
# Detects the width of running trayer-srg window (xprop name 'panel')
|
||||
# and creates an XPM icon of that width, 1px height, and transparent.
|
||||
# Outputs an <icon>-tag for use in xmobar to display the generated
|
||||
# XPM icon.
|
||||
#
|
||||
# Run script from xmobar:
|
||||
# `Run Com "/where/ever/trayer-padding-icon.sh" [] "trayerpad" 10`
|
||||
# and use `%trayerpad%` in your template.
|
||||
|
||||
|
||||
# Function to create a transparent Wx1 px XPM icon
|
||||
create_xpm_icon () {
|
||||
timestamp=$(date)
|
||||
pixels=$(for i in `seq $1`; do echo -n "."; done)
|
||||
|
||||
cat << EOF > "$2"
|
||||
/* XPM *
|
||||
static char * trayer_pad_xpm[] = {
|
||||
/* This XPM icon is used for padding in xmobar to */
|
||||
/* leave room for trayer-srg. It is dynamically */
|
||||
/* updated by by trayer-padding-icon.sh which is run */
|
||||
/* by xmobar. */
|
||||
/* Created: ${timestamp} */
|
||||
/* <w/cols> <h/rows> <colors> <chars per pixel> */
|
||||
"$1 1 1 1",
|
||||
/* Colors (none: transparent) */
|
||||
". c none",
|
||||
/* Pixels */
|
||||
"$pixels"
|
||||
};
|
||||
EOF
|
||||
}
|
||||
|
||||
# Width of the trayer window
|
||||
width=$(xprop -name panel | grep 'program specified minimum size' | cut -d ' ' -f 5)
|
||||
|
||||
# Icon file name
|
||||
iconfile="/tmp/trayer-padding-${width}px.xpm"
|
||||
|
||||
# If the desired icon does not exist create it
|
||||
if [ ! -f $iconfile ]; then
|
||||
create_xpm_icon $width $iconfile
|
||||
fi
|
||||
|
||||
# Output the icon tag for xmobar
|
||||
echo "<icon=${iconfile}/>"
|
||||
|
|
@ -1,122 +0,0 @@
|
|||
-- xmobar main configuration file
|
||||
--
|
||||
-- This file serves as a shared template for the specific xmonad
|
||||
-- configuration files that are generated from this file to accomodate
|
||||
-- for multiple monitors.
|
||||
--
|
||||
-- For more details, run 'man xmobar', or visit the project website
|
||||
-- http://projects.haskell.org/xmobar/
|
||||
|
||||
Config {
|
||||
-- Set font for default dg/bg colors. xmobar height will
|
||||
-- be controlled by this font (it'll adjust itself to accomodate it)
|
||||
-- Additional fonts can be defined for emoji support
|
||||
font = "xft:Ubuntu:weight=bold:pixelsize=11:antialias=true:hinting=true",
|
||||
additionalFonts = [
|
||||
"xft:Font Awesome 6 Free Solid:pixelsize=12",
|
||||
"xft:Font Awesome 6 Brands:pixelsize=12"
|
||||
--"xft:Mononoki Nerd Font:pixelsize=11:antialias=true:hinting=true"
|
||||
],
|
||||
bgColor = "#282c34",
|
||||
fgColor = "#ff6c6b",
|
||||
|
||||
-- Define static position that will be adjusted by the deploy script
|
||||
-- which will tweak the starting positions for multiple monitors, this
|
||||
-- configuration will work fine for single monitor systems out of the box.
|
||||
position = Static { xpos = 0, ypos = 0, width = 1920, height = 24 },
|
||||
-- Define the place where all used XPM images will be stored in
|
||||
-- Apparently there's is no way to use env var or relpaths here.
|
||||
iconRoot = "/home/itsdrike/.config/xmobar/xpm",
|
||||
-- list of commands which gather information about the system
|
||||
-- which can then be referrenced in the final template string
|
||||
commands = [
|
||||
-- Gather and format CPU usage information
|
||||
-- if it's above 50%, we consider it high and make it red
|
||||
Run Cpu [
|
||||
"-t", "<fn=1>\xf2db</fn> <total>%",
|
||||
"-H","50",
|
||||
"--high","red"
|
||||
] 20,
|
||||
|
||||
-- Ram used number and percent
|
||||
Run Memory ["-t", "<fn=1>\xf538</fn> <used>M (<usedratio>%)"] 20,
|
||||
|
||||
-- Battery information. This is likely to require some customization
|
||||
-- based upon your specific hardware. Or, for a desktop you may want
|
||||
-- to just remove this section entirely.
|
||||
--Run Battery [
|
||||
--"-t", "<fn=1>\xf240</fn> <acstatus> <left>% - <timeleft>",
|
||||
--"--",
|
||||
--"-i", "<fc=#75c44c>AC</fc>",
|
||||
--"-O", "<fc=#75c44c>AC</fc>",
|
||||
--"-o", "<fc=#ff0000>AUX</fc>",
|
||||
--"-L", "12",
|
||||
--"-h", "green",
|
||||
--"-l", "red"
|
||||
--] 10,
|
||||
|
||||
-- Time and date
|
||||
Run Date "<fn=1>\xf017</fn> %H:%M %b %d %Y" "date" 50,
|
||||
|
||||
-- Network up and down
|
||||
--Run Network "wlp4s0" ["-t", "<fn=1>\xf0ab</fn> <rx>kb <fn=1>\xf0aa</fn> <tx>kb"] 20,
|
||||
--Run Network "enp3s0" ["-t", "<fn=1>\xf0ab</fn> <rx>kb <fn=1>\xf0aa</fn> <tx>kb"] 20,
|
||||
|
||||
-- Uptime
|
||||
Run Uptime ["-t", "<fn=1>\xf011</fn> <days>d <hours>h"] 360,
|
||||
|
||||
-- Show free disk space on /
|
||||
Run DiskU [("/", "<fn=1>\xf0c7</fn> <free>")] [] 60,
|
||||
|
||||
-- Get kernel version from uname -r
|
||||
Run Com "uname" ["-r"] "" 3600,
|
||||
|
||||
-- Volume info
|
||||
Run Volume "default" "Master" ["-t", "<fn=1>\xf028</fn> <volume>%"] 5,
|
||||
|
||||
-- Get bitcoin price from a custom script
|
||||
Run Com "/home/itsdrike/.local/bin/scripts/bitcoin" [] "bitcoin" 300,
|
||||
|
||||
-- Add dynamic invisible XPM icon that resizes to accomodate trayer
|
||||
-- this needs to be an absolute string path, env vars or relpaths aren't accepted
|
||||
-- this should only be on 1 monitor (single file), so ignore this comment on others
|
||||
Run Com "/home/itsdrike/.config/xmobar/trayer-padding-icon.sh" [] "trayerpad" 10,
|
||||
|
||||
-- This line tells xmobar to read input from stdin.
|
||||
-- That's how it gets information that xmonad is sending (such as
|
||||
-- workspaces) to be displayed. This will get placed onto xmobar
|
||||
-- template in the position where %UnsafeStdinReader%/%StdinReader% is
|
||||
-- By using UnsafeStdinReader, it will also allow for action strings
|
||||
-- to be used, which are activated upon clicking on the given element
|
||||
Run UnsafeStdinReader
|
||||
],
|
||||
|
||||
-- Separator character used to wrap variables in the xmobar template string
|
||||
sepChar = "%",
|
||||
-- Alignment eparator character used in the xmobar template string.
|
||||
-- Everything before this will be aligned left, everything after right.
|
||||
alignSep = "}{",
|
||||
|
||||
-- Template string defining the xmobar contents and overall layout.
|
||||
template = "\
|
||||
\<icon=haskell_20.xpm/> \
|
||||
\<fc=#666666>|</fc> %UnsafeStdinReader% }{ \
|
||||
\<fc=#666666>|</fc> <fc=#b3afc2><fn=2></fn> %uname% </fc> \
|
||||
\<fc=#666666>|</fc> <fc=#ff6c6b> %memory% </fc> \
|
||||
\<fc=#666666>|</fc> <fc=#51afef> %disku% </fc> \
|
||||
\<fc=#666666>|</fc> <fc=#78db32> %cpu% </fc> \
|
||||
\<fc=#666666>|</fc> <fc=#ecbe7b> %default:Master% </fc> \
|
||||
\<fc=#666666>|</fc> <fc=#98be65> %uptime% </fc> \
|
||||
\<fc=#666666>|</fc> <fc=#efcb10><fn=2></fn> %bitcoin% </fc> \
|
||||
\<fc=#666666>|</fc> <fc=#46d9ff> %date% </fc> \
|
||||
\<fc=#666666>|</fc> %trayerpad%\
|
||||
\ "
|
||||
}
|
||||
|
||||
-- Abandoned template strings
|
||||
-- Network Wifi:
|
||||
-- \<fc=#666666>|</fc> <fc=#98be65> %wlp4s0% </fc> \
|
||||
-- Network Ethernet:
|
||||
-- \<fc=#666666>|</fc> <fc=#98be65> %enp3s0% </fc> \
|
||||
-- Battery:
|
||||
-- \<fc=#666666>|</fc> <fc=#9ce996> %battery% </fc> \
|
|
@ -1,122 +0,0 @@
|
|||
-- xmobar main configuration file
|
||||
--
|
||||
-- This file serves as a shared template for the specific xmonad
|
||||
-- configuration files that are generated from this file to accomodate
|
||||
-- for multiple monitors.
|
||||
--
|
||||
-- For more details, run 'man xmobar', or visit the project website
|
||||
-- http://projects.haskell.org/xmobar/
|
||||
|
||||
Config {
|
||||
-- Set font for default dg/bg colors. xmobar height will
|
||||
-- be controlled by this font (it'll adjust itself to accomodate it)
|
||||
-- Additional fonts can be defined for emoji support
|
||||
font = "xft:Ubuntu:weight=bold:pixelsize=11:antialias=true:hinting=true",
|
||||
additionalFonts = [
|
||||
"xft:Font Awesome 6 Free Solid:pixelsize=12",
|
||||
"xft:Font Awesome 6 Brands:pixelsize=12"
|
||||
--"xft:Mononoki Nerd Font:pixelsize=11:antialias=true:hinting=true"
|
||||
],
|
||||
bgColor = "#282c34",
|
||||
fgColor = "#ff6c6b",
|
||||
|
||||
-- Define static position that will be adjusted by the deploy script
|
||||
-- which will tweak the starting positions for multiple monitors, this
|
||||
-- configuration will work fine for single monitor systems out of the box.
|
||||
position = Static { xpos = 0, ypos = 0, width = 1920, height = 24 },
|
||||
-- Define the place where all used XPM images will be stored in
|
||||
-- Apparently there's is no way to use env var or relpaths here.
|
||||
iconRoot = "/home/itsdrike/.config/xmobar/xpm",
|
||||
-- list of commands which gather information about the system
|
||||
-- which can then be referrenced in the final template string
|
||||
commands = [
|
||||
-- Gather and format CPU usage information
|
||||
-- if it's above 50%, we consider it high and make it red
|
||||
Run Cpu [
|
||||
"-t", "<fn=1>\xf2db</fn> <total>%",
|
||||
"-H","50",
|
||||
"--high","red"
|
||||
] 20,
|
||||
|
||||
-- Ram used number and percent
|
||||
Run Memory ["-t", "<fn=1>\xf538</fn> <used>M (<usedratio>%)"] 20,
|
||||
|
||||
-- Battery information. This is likely to require some customization
|
||||
-- based upon your specific hardware. Or, for a desktop you may want
|
||||
-- to just remove this section entirely.
|
||||
--Run Battery [
|
||||
--"-t", "<fn=1>\xf240</fn> <acstatus> <left>% - <timeleft>",
|
||||
--"--",
|
||||
--"-i", "<fc=#75c44c>AC</fc>",
|
||||
--"-O", "<fc=#75c44c>AC</fc>",
|
||||
--"-o", "<fc=#ff0000>AUX</fc>",
|
||||
--"-L", "12",
|
||||
--"-h", "green",
|
||||
--"-l", "red"
|
||||
--] 10,
|
||||
|
||||
-- Time and date
|
||||
Run Date "<fn=1>\xf017</fn> %H:%M %b %d %Y" "date" 50,
|
||||
|
||||
-- Network up and down
|
||||
--Run Network "wlp4s0" ["-t", "<fn=1>\xf0ab</fn> <rx>kb <fn=1>\xf0aa</fn> <tx>kb"] 20,
|
||||
--Run Network "enp3s0" ["-t", "<fn=1>\xf0ab</fn> <rx>kb <fn=1>\xf0aa</fn> <tx>kb"] 20,
|
||||
|
||||
-- Uptime
|
||||
Run Uptime ["-t", "<fn=1>\xf011</fn> <days>d <hours>h"] 360,
|
||||
|
||||
-- Show free disk space on /
|
||||
Run DiskU [("/", "<fn=1>\xf0c7</fn> <free>")] [] 60,
|
||||
|
||||
-- Get kernel version from uname -r
|
||||
Run Com "uname" ["-r"] "" 3600,
|
||||
|
||||
-- Volume info
|
||||
Run Volume "default" "Master" ["-t", "<fn=1>\xf028</fn> <volume>%"] 5,
|
||||
|
||||
-- Get bitcoin price from a custom script
|
||||
Run Com "/home/itsdrike/.local/bin/scripts/bitcoin" [] "bitcoin" 300,
|
||||
|
||||
-- Add dynamic invisible XPM icon that resizes to accomodate trayer
|
||||
-- this needs to be an absolute string path, env vars or relpaths aren't accepted
|
||||
-- this should only be on 1 monitor (single file), so ignore this comment on others
|
||||
Run Com "/home/itsdrike/.config/xmobar/trayer-padding-icon.sh" [] "trayerpad" 10,
|
||||
|
||||
-- This line tells xmobar to read input from stdin.
|
||||
-- That's how it gets information that xmonad is sending (such as
|
||||
-- workspaces) to be displayed. This will get placed onto xmobar
|
||||
-- template in the position where %UnsafeStdinReader%/%StdinReader% is
|
||||
-- By using UnsafeStdinReader, it will also allow for action strings
|
||||
-- to be used, which are activated upon clicking on the given element
|
||||
Run UnsafeStdinReader
|
||||
],
|
||||
|
||||
-- Separator character used to wrap variables in the xmobar template string
|
||||
sepChar = "%",
|
||||
-- Alignment eparator character used in the xmobar template string.
|
||||
-- Everything before this will be aligned left, everything after right.
|
||||
alignSep = "}{",
|
||||
|
||||
-- Template string defining the xmobar contents and overall layout.
|
||||
template = "\
|
||||
\<icon=haskell_20.xpm/> \
|
||||
\<fc=#666666>|</fc> %UnsafeStdinReader% }{ \
|
||||
\<fc=#666666>|</fc> <fc=#b3afc2><fn=2></fn> %uname% </fc> \
|
||||
\<fc=#666666>|</fc> <fc=#ff6c6b> %memory% </fc> \
|
||||
\<fc=#666666>|</fc> <fc=#51afef> %disku% </fc> \
|
||||
\<fc=#666666>|</fc> <fc=#78db32> %cpu% </fc> \
|
||||
\<fc=#666666>|</fc> <fc=#ecbe7b> %default:Master% </fc> \
|
||||
\<fc=#666666>|</fc> <fc=#98be65> %uptime% </fc> \
|
||||
\<fc=#666666>|</fc> <fc=#efcb10><fn=2></fn> %bitcoin% </fc> \
|
||||
\<fc=#666666>|</fc> <fc=#46d9ff> %date% </fc> \
|
||||
\<fc=#666666>|</fc> %trayerpad%\
|
||||
\ "
|
||||
}
|
||||
|
||||
-- Abandoned template strings
|
||||
-- Network Wifi:
|
||||
-- \<fc=#666666>|</fc> <fc=#98be65> %wlp4s0% </fc> \
|
||||
-- Network Ethernet:
|
||||
-- \<fc=#666666>|</fc> <fc=#98be65> %enp3s0% </fc> \
|
||||
-- Battery:
|
||||
-- \<fc=#666666>|</fc> <fc=#9ce996> %battery% </fc> \
|
|
@ -1,120 +0,0 @@
|
|||
-- xmobar main configuration file
|
||||
--
|
||||
-- This file serves as a shared template for the specific xmonad
|
||||
-- configuration files that are generated from this file to accomodate
|
||||
-- for multiple monitors.
|
||||
--
|
||||
-- For more details, run 'man xmobar', or visit the project website
|
||||
-- http://projects.haskell.org/xmobar/
|
||||
|
||||
Config {
|
||||
-- Set font for default dg/bg colors. xmobar height will
|
||||
-- be controlled by this font (it'll adjust itself to accomodate it)
|
||||
-- Additional fonts can be defined for emoji support
|
||||
font = "xft:Ubuntu:weight=bold:pixelsize=11:antialias=true:hinting=true",
|
||||
additionalFonts = [
|
||||
"xft:Font Awesome 6 Free Solid:pixelsize=12",
|
||||
"xft:Font Awesome 6 Brands:pixelsize=12"
|
||||
--"xft:Mononoki Nerd Font:pixelsize=11:antialias=true:hinting=true"
|
||||
],
|
||||
bgColor = "#282c34",
|
||||
fgColor = "#ff6c6b",
|
||||
|
||||
-- Define static position that will be adjusted by the deploy script
|
||||
-- which will tweak the starting positions for multiple monitors, this
|
||||
-- configuration will work fine for single monitor systems out of the box.
|
||||
position = Static { xpos = 1920, ypos = 0, width = 1920, height = 24 },
|
||||
-- Define the place where all used XPM images will be stored in
|
||||
-- Apparently there's is no way to use env var or relpaths here.
|
||||
iconRoot = "/home/itsdrike/.config/xmobar/xpm",
|
||||
-- list of commands which gather information about the system
|
||||
-- which can then be referrenced in the final template string
|
||||
commands = [
|
||||
-- Gather and format CPU usage information
|
||||
-- if it's above 50%, we consider it high and make it red
|
||||
Run Cpu [
|
||||
"-t", "<fn=1>\xf2db</fn> <total>%",
|
||||
"-H","50",
|
||||
"--high","red"
|
||||
] 20,
|
||||
|
||||
-- Ram used number and percent
|
||||
Run Memory ["-t", "<fn=1>\xf538</fn> <used>M (<usedratio>%)"] 20,
|
||||
|
||||
-- Battery information. This is likely to require some customization
|
||||
-- based upon your specific hardware. Or, for a desktop you may want
|
||||
-- to just remove this section entirely.
|
||||
--Run Battery [
|
||||
--"-t", "<fn=1>\xf240</fn> <acstatus> <left>% - <timeleft>",
|
||||
--"--",
|
||||
--"-i", "<fc=#75c44c>AC</fc>",
|
||||
--"-O", "<fc=#75c44c>AC</fc>",
|
||||
--"-o", "<fc=#ff0000>AUX</fc>",
|
||||
--"-L", "12",
|
||||
--"-h", "green",
|
||||
--"-l", "red"
|
||||
--] 10,
|
||||
|
||||
-- Time and date
|
||||
Run Date "<fn=1>\xf017</fn> %H:%M %b %d %Y" "date" 50,
|
||||
|
||||
-- Network up and down
|
||||
--Run Network "wlp4s0" ["-t", "<fn=1>\xf0ab</fn> <rx>kb <fn=1>\xf0aa</fn> <tx>kb"] 20,
|
||||
--Run Network "enp3s0" ["-t", "<fn=1>\xf0ab</fn> <rx>kb <fn=1>\xf0aa</fn> <tx>kb"] 20,
|
||||
|
||||
-- Uptime
|
||||
Run Uptime ["-t", "<fn=1>\xf011</fn> <days>d <hours>h"] 360,
|
||||
|
||||
-- Show free disk space on /
|
||||
Run DiskU [("/", "<fn=1>\xf0c7</fn> <free>")] [] 60,
|
||||
|
||||
-- Get kernel version from uname -r
|
||||
Run Com "uname" ["-r"] "" 3600,
|
||||
|
||||
-- Volume info
|
||||
Run Volume "default" "Master" ["-t", "<fn=1>\xf028</fn> <volume>%"] 5,
|
||||
|
||||
-- Get bitcoin price from a custom script
|
||||
Run Com "/home/itsdrike/.local/bin/scripts/bitcoin" [] "bitcoin" 300,
|
||||
|
||||
-- Add dynamic invisible XPM icon that resizes to accomodate trayer
|
||||
-- this needs to be an absolute string path, env vars or relpaths aren't accepted
|
||||
-- this should only be on 1 monitor (single file), so ignore this comment on others
|
||||
|
||||
-- This line tells xmobar to read input from stdin.
|
||||
-- That's how it gets information that xmonad is sending (such as
|
||||
-- workspaces) to be displayed. This will get placed onto xmobar
|
||||
-- template in the position where %UnsafeStdinReader%/%StdinReader% is
|
||||
-- By using UnsafeStdinReader, it will also allow for action strings
|
||||
-- to be used, which are activated upon clicking on the given element
|
||||
Run UnsafeStdinReader
|
||||
],
|
||||
|
||||
-- Separator character used to wrap variables in the xmobar template string
|
||||
sepChar = "%",
|
||||
-- Alignment eparator character used in the xmobar template string.
|
||||
-- Everything before this will be aligned left, everything after right.
|
||||
alignSep = "}{",
|
||||
|
||||
-- Template string defining the xmobar contents and overall layout.
|
||||
template = "\
|
||||
\<icon=haskell_20.xpm/> \
|
||||
\<fc=#666666>|</fc> %UnsafeStdinReader% }{ \
|
||||
\<fc=#666666>|</fc> <fc=#b3afc2><fn=2></fn> %uname% </fc> \
|
||||
\<fc=#666666>|</fc> <fc=#ff6c6b> %memory% </fc> \
|
||||
\<fc=#666666>|</fc> <fc=#51afef> %disku% </fc> \
|
||||
\<fc=#666666>|</fc> <fc=#78db32> %cpu% </fc> \
|
||||
\<fc=#666666>|</fc> <fc=#ecbe7b> %default:Master% </fc> \
|
||||
\<fc=#666666>|</fc> <fc=#98be65> %uptime% </fc> \
|
||||
\<fc=#666666>|</fc> <fc=#efcb10><fn=2></fn> %bitcoin% </fc> \
|
||||
\<fc=#666666>|</fc> <fc=#46d9ff> %date% </fc> \
|
||||
\ "
|
||||
}
|
||||
|
||||
-- Abandoned template strings
|
||||
-- Network Wifi:
|
||||
-- \<fc=#666666>|</fc> <fc=#98be65> %wlp4s0% </fc> \
|
||||
-- Network Ethernet:
|
||||
-- \<fc=#666666>|</fc> <fc=#98be65> %enp3s0% </fc> \
|
||||
-- Battery:
|
||||
-- \<fc=#666666>|</fc> <fc=#9ce996> %battery% </fc> \
|
|
@ -1,25 +0,0 @@
|
|||
/* XPM */
|
||||
static char * haskell_20_xpm[] = {
|
||||
"20 20 2 1",
|
||||
" c None",
|
||||
". c #FFFFFF",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
".... .... ",
|
||||
" .... ... ",
|
||||
" ... .... ",
|
||||
" .... .... ",
|
||||
" .... ... ........",
|
||||
" ... .... .......",
|
||||
" .... .... ",
|
||||
" .... .... ",
|
||||
" ... ...... .....",
|
||||
" .... ....... ....",
|
||||
" .... .... ... ",
|
||||
" ... .... .... ",
|
||||
" .... ... .... ",
|
||||
".... .... ... ",
|
||||
" ",
|
||||
" ",
|
||||
" "};
|
|
@ -1,7 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
# Automatically start the applications in $HOME/.config/autostart
|
||||
|
||||
AUTOSTART_DIR="${XDG_CONFIG_HOME:-$HOME/.config}/autostart"
|
||||
|
||||
find $AUTOSTART_DIR -name "*.desktop" | xargs -I {} sh -c "~/.local/bin/scripts/deskopen {} &"
|
|
@ -1,389 +0,0 @@
|
|||
-- Base
|
||||
import XMonad
|
||||
import System.Exit (exitSuccess)
|
||||
import System.IO (hPutStrLn, Handle)
|
||||
import qualified XMonad.StackSet as W
|
||||
|
||||
-- Actions
|
||||
import XMonad.Actions.CopyWindow (kill1)
|
||||
import XMonad.Actions.CycleWS (Direction1D(..), moveTo, shiftTo, WSType(..), nextScreen, prevScreen)
|
||||
import XMonad.Actions.MouseResize
|
||||
import XMonad.Actions.Promote
|
||||
import XMonad.Actions.RotSlaves (rotSlavesDown, rotAllDown)
|
||||
import XMonad.Actions.WithAll (sinkAll, killAll)
|
||||
|
||||
-- Data
|
||||
import Data.Maybe (isJust, fromJust)
|
||||
import Data.Monoid
|
||||
import qualified Data.Map as M
|
||||
|
||||
-- Hooks
|
||||
import XMonad.Hooks.DynamicLog (dynamicLogWithPP, wrap, xmobarPP, xmobarColor, shorten, PP(..))
|
||||
import XMonad.Hooks.ManageDocks (avoidStruts, docks, manageDocks, ToggleStruts(..))
|
||||
import XMonad.Hooks.EwmhDesktops
|
||||
import XMonad.Hooks.ManageHelpers (isFullscreen, doFullFloat)
|
||||
|
||||
-- Layouts
|
||||
import XMonad.Layout.GridVariants (Grid(Grid))
|
||||
import XMonad.Layout.SimplestFloat
|
||||
import XMonad.Layout.Spiral
|
||||
import XMonad.Layout.Tabbed
|
||||
import XMonad.Layout.ResizableTile
|
||||
|
||||
-- Layouts modifiers
|
||||
import XMonad.Layout.LayoutModifier
|
||||
import XMonad.Layout.LimitWindows (limitWindows, increaseLimit, decreaseLimit)
|
||||
import XMonad.Layout.MultiToggle (mkToggle, single, EOT(EOT), (??))
|
||||
import XMonad.Layout.MultiToggle.Instances (StdTransformers(NBFULL, MIRROR, NOBORDERS))
|
||||
import XMonad.Layout.NoBorders
|
||||
import XMonad.Layout.Renamed
|
||||
import XMonad.Layout.ShowWName
|
||||
import XMonad.Layout.Simplest
|
||||
import XMonad.Layout.Spacing
|
||||
import XMonad.Layout.SubLayouts
|
||||
import XMonad.Layout.WindowArranger (windowArrange)
|
||||
import XMonad.Layout.WindowNavigation
|
||||
import qualified XMonad.Layout.ToggleLayouts as T (toggleLayouts, ToggleLayout(Toggle))
|
||||
import qualified XMonad.Layout.MultiToggle as MT (Toggle(..))
|
||||
|
||||
-- Utilities
|
||||
import XMonad.Util.Dmenu
|
||||
import XMonad.Util.EZConfig (additionalKeysP)
|
||||
import XMonad.Util.Run (spawnPipe)
|
||||
import XMonad.Util.SpawnOnce
|
||||
|
||||
-----------------------------------------------------------------------------
|
||||
-- Basic settings:
|
||||
|
||||
-- Set the modkey
|
||||
-- mod1Mask: left alt, mod4Mask: super key.
|
||||
myModMask :: KeyMask
|
||||
myModMask = mod4Mask
|
||||
|
||||
-- Preferred programs
|
||||
myTerminal = "alacritty"
|
||||
myBrowser = "firefox"
|
||||
myFileManager = "pcmanfm"
|
||||
myCliFileManager = "lf"
|
||||
|
||||
-- Preferred font
|
||||
myFont :: String
|
||||
myFont = "xft:SauceCodePro Nerd Font Mono:regular:size=9:antialias=true:hinting=true"
|
||||
|
||||
-- Width of the window border in pixels
|
||||
myBorderWidth :: Dimension
|
||||
myBorderWidth = 2
|
||||
|
||||
-- Border color of normal windows
|
||||
myNormalBorderColor :: String
|
||||
myNormalBorderColor = "#3b4252"
|
||||
|
||||
-- Border color of focused windows
|
||||
myFocusedBorderColor :: String
|
||||
myFocusedBorderColor = "#bc96da"
|
||||
|
||||
-- Default workspaces. Number of workspaces is determined by the list length.
|
||||
myWorkspaces = [" dev ", " www ", " sys ", " chat ", " mus ", " vid ", " doc ", " virt ", " etc "]
|
||||
myWorkspaceIndices = M.fromList $ zipWith (,) myWorkspaces [1..] -- (,) == \x y -> (x,y)
|
||||
|
||||
-- Make the workspaces clickable
|
||||
clickable ws = "<action=xdotool key super+"++show i++">"++ws++"</action>"
|
||||
where i = fromJust $ M.lookup ws myWorkspaceIndices
|
||||
|
||||
-- Keep track of the number of windows in current workspace
|
||||
windowCount :: X (Maybe String)
|
||||
windowCount = gets $ Just . show . length . W.integrate' . W.stack . W.workspace . W.current . windowset
|
||||
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
-- Key bindings with EZConfig:
|
||||
-- C: Ctrl, S: Shift, M: Mod, M1: Alt
|
||||
|
||||
myKeys :: [(String, X ())]
|
||||
myKeys =
|
||||
-- XMonad
|
||||
[ ("M-S-r", spawn "xmonad --recompile; xmonad --restart") -- Recompiles xmonad
|
||||
, ("M-S-q", io exitSuccess) -- Quits xmonad
|
||||
|
||||
-- Programs
|
||||
, ("M-<Return>", spawn (myTerminal))
|
||||
, ("M-b", spawn (myBrowser))
|
||||
, ("M-x", spawn (myFileManager))
|
||||
, ("M-M1-v", spawn (myTerminal ++ " -e " ++ myCliFileManager))
|
||||
, ("M-M1-h", spawn (myTerminal ++ " -e htop"))
|
||||
, ("M-M1-b", spawn (myTerminal ++ " -e bpytop"))
|
||||
, ("M-M1-p", spawn (myTerminal ++ " -e ipython"))
|
||||
|
||||
-- Dmenu
|
||||
, ("M-S-<Return>", spawn "dmenu_run -i -p \"Run: \"") -- Launch dmenu to execute command
|
||||
, ("M-v", spawn "clipmenu") -- Clipboard manager with dmenu
|
||||
|
||||
-- Screenshots
|
||||
, ("<Print>", spawn "flameshot gui")
|
||||
, ("M-<Print>", spawn "flameshot screen -p ~/Pictures/Screenshots")
|
||||
, ("M-S-<Print>", spawn "flameshot screen -c")
|
||||
, ("C-<Print>", spawn "flameshot full -p ~/Pictures/Screenshots")
|
||||
, ("C-S-<Print>", spawn "flameshot full -c")
|
||||
, ("C-M-<Print>", spawn "flameshot launcher")
|
||||
|
||||
-- Script shortcuts
|
||||
, ("M-S-p", spawn "setbg ~/Pictures/Wallpapers/Active") -- Set random background
|
||||
, ("M-S-d", spawn "displayselect") -- Set display configurations
|
||||
, ("M-C-l", spawn "lockscreen lock") -- Lock the screen
|
||||
, ("M-C-S-l", spawn "lockscreen toggle") -- Toggle automatic locking
|
||||
, ("M-S-l", spawn "swap-kblayout") -- Swap keyboard layout
|
||||
|
||||
-- Kill windows
|
||||
, ("M-w", kill1) -- Kill the currently focused client
|
||||
, ("M-S-w", killAll) -- Kill all windows on current workspace
|
||||
|
||||
-- Compositor
|
||||
, ("M-C-x", spawn "picom -b --experimental-backends") -- Run picom compositor
|
||||
, ("M-S-x", spawn "killall picom") -- Kill picom compositor
|
||||
|
||||
-- Dunst notifications
|
||||
, ("C-,", spawn "dunstctl close") -- Close topmost notification
|
||||
, ("C-S-,", spawn "dunstctl close-all") -- Close all notifications
|
||||
, ("C-.", spawn "dunstctl history-pop") -- Show last notification
|
||||
, ("C-S-.", spawn "dunstctl context") -- Show context menu with multiple actions
|
||||
|
||||
-- Workspaces
|
||||
, ("M-.", nextScreen) -- Switch focus to next monitor
|
||||
, ("M-,", prevScreen) -- Switch focus to prev monitor
|
||||
, ("M-S-<KP_Add>", shiftTo Next nonNSP >> moveTo Next nonNSP) -- Shifts focused window to next ws
|
||||
, ("M-S-<KP_Subtract>", shiftTo Prev nonNSP >> moveTo Prev nonNSP) -- Shifts focused window to prev ws
|
||||
|
||||
-- Floating windows
|
||||
, ("M-f", withFocused $ float) -- Make window float
|
||||
, ("M-t", withFocused $ windows . W.sink) -- Push floating window back to tile
|
||||
, ("M-S-t", sinkAll) -- Push all floating windows to tile
|
||||
, ("M-S-f", sendMessage (T.Toggle "floats")) -- Toggles 'floats' layout
|
||||
|
||||
-- Increase/decrease spacing (gaps)
|
||||
, ("C-M1-j", decWindowSpacing 4) -- Decrease window spacing
|
||||
, ("C-M1-k", incWindowSpacing 4) -- Increase window spacing
|
||||
, ("C-M1-h", decScreenSpacing 4) -- Decrease screen spacing
|
||||
, ("C-M1-l", incScreenSpacing 4) -- Increase screen spacing
|
||||
|
||||
-- Windows navigation
|
||||
, ("M-m", windows W.focusMaster) -- Move focus to the master window
|
||||
, ("M-j", windows W.focusDown) -- Move focus to the next window
|
||||
, ("M-k", windows W.focusUp) -- Move focus to the prev window
|
||||
, ("M-S-m", windows W.swapMaster) -- Swap the focused window and the master window
|
||||
, ("M-S-j", windows W.swapDown) -- Swap focused window with next window
|
||||
, ("M-S-k", windows W.swapUp) -- Swap focused window with prev window
|
||||
, ("M-S-<Tab>", rotSlavesDown) -- Rotate all windows except master and keep focus in place
|
||||
, ("M-C-<Tab>", rotAllDown) -- Rotate all windows in the current stack
|
||||
, ("M-<Backspace>", promote) -- Moves focused window to master, others maintain order
|
||||
|
||||
-- Layouts
|
||||
, ("M-<Tab>", sendMessage NextLayout) -- Switch to next layout
|
||||
, ("M-<Space>", sendMessage (MT.Toggle NBFULL) >> sendMessage ToggleStruts) -- Toggles noborder/full
|
||||
|
||||
-- Increase/decrease windows in the master pane or the stack
|
||||
, ("M-S-<Up>", sendMessage (IncMasterN 1)) -- Increase # of clients master pane
|
||||
, ("M-S-<Down>", sendMessage (IncMasterN (-1))) -- Decrease # of clients master pane
|
||||
, ("M-C-<Up>", increaseLimit) -- Increase # of windows
|
||||
, ("M-C-<Down>", decreaseLimit) -- Decrease # of windows
|
||||
|
||||
-- Window resizing
|
||||
, ("M-h", sendMessage Shrink) -- Shrink horiz window width
|
||||
, ("M-l", sendMessage Expand) -- Expand horiz window width
|
||||
, ("M-M1-j", sendMessage MirrorShrink) -- Shrink vert window width
|
||||
, ("M-M1-k", sendMessage MirrorExpand) -- Expand vert window width
|
||||
|
||||
-- Multimedia keys
|
||||
, ("<XF86AudioMute>", spawn "pulsemixer --toggle-mute")
|
||||
, ("<XF86AudioLowerVolume>", spawn "pulsemixer --change-volume -5")
|
||||
, ("<XF86AudioRaiseVolume>", spawn "pulsemixer --change-volume +5")
|
||||
, ("<XF86MonBrightnessUp>", spawn "brightness -i 5% -n")
|
||||
, ("<XF86MonBrightnessDown>", spawn "brightness -d 5% -n")
|
||||
-- Map media keys to meta + arrows for keyboards without special keys
|
||||
, ("M-<Down>", spawn "pulsemixer --change-volume -5")
|
||||
, ("M-<Up>", spawn "pulsemixer --change-volume +5")
|
||||
, ("M-<Right>", spawn "brightness -i 5% -n")
|
||||
, ("M-<Left>", spawn "brightness -d 5% -n")
|
||||
]
|
||||
where nonNSP = WSIs (return (\ws -> W.tag ws /= "NSP"))
|
||||
nonEmptyNonNSP = WSIs (return (\ws -> isJust (W.stack ws) && W.tag ws /= "NSP"))
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
-- Layout vars:
|
||||
|
||||
--Makes setting the spacingRaw simpler to write.
|
||||
--The spacingRaw module adds a configurable amount of space around windows.
|
||||
mySpacing :: Integer -> l a -> XMonad.Layout.LayoutModifier.ModifiedLayout Spacing l a
|
||||
mySpacing i = spacingRaw False (Border i i i i) True (Border i i i i) True
|
||||
|
||||
-- Below is a variation of the above except no borders are applied
|
||||
-- if fewer than two windows. So a single window has no gaps.
|
||||
mySpacing' :: Integer -> l a -> XMonad.Layout.LayoutModifier.ModifiedLayout Spacing l a
|
||||
mySpacing' i = spacingRaw True (Border i i i i) True (Border i i i i) True
|
||||
|
||||
-- Colors for tabs layout and tabs sublayout.
|
||||
myTabTheme = def { fontName = myFont
|
||||
, activeColor = "#46d9ff"
|
||||
, inactiveColor = "#313846"
|
||||
, activeBorderColor = "#46d9ff"
|
||||
, inactiveBorderColor = "#282c34"
|
||||
, activeTextColor = "#282c34"
|
||||
, inactiveTextColor = "#d0d0d0"
|
||||
}
|
||||
|
||||
-- Theme for showWName which prints current workspace when you change workspaces.
|
||||
myShowWNameTheme :: SWNConfig
|
||||
myShowWNameTheme = def
|
||||
{ swn_font = "xft:Ubuntu:bold:size=60"
|
||||
, swn_fade = 1.0
|
||||
, swn_bgcolor = "#1c1f24"
|
||||
, swn_color = "#ffffff"
|
||||
}
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
-- Layouts:
|
||||
-- All of these layouts have to be defined in myLayoutHook, otherwise
|
||||
-- type errors will occur
|
||||
|
||||
tall = renamed [Replace "tall"]
|
||||
$ smartBorders
|
||||
$ windowNavigation
|
||||
$ addTabs shrinkText myTabTheme
|
||||
$ subLayout [] (smartBorders Simplest)
|
||||
$ limitWindows 12
|
||||
$ mySpacing 8
|
||||
$ ResizableTall 1 (3/100) (1/2) []
|
||||
floats = renamed [Replace "floats"]
|
||||
$ smartBorders
|
||||
$ limitWindows 20 simplestFloat
|
||||
grid = renamed [Replace "grid"]
|
||||
$ smartBorders
|
||||
$ windowNavigation
|
||||
$ addTabs shrinkText myTabTheme
|
||||
$ subLayout [] (smartBorders Simplest)
|
||||
$ limitWindows 12
|
||||
$ mySpacing 8
|
||||
$ mkToggle (single MIRROR)
|
||||
$ Grid (16/10)
|
||||
spirals = renamed [Replace "spirals"]
|
||||
$ smartBorders
|
||||
$ windowNavigation
|
||||
$ addTabs shrinkText myTabTheme
|
||||
$ subLayout [] (smartBorders Simplest)
|
||||
$ mySpacing' 8
|
||||
$ spiral (6/7)
|
||||
tabs = renamed [Replace "tabs"]
|
||||
-- I cannot add spacing to this layout because it will
|
||||
-- add spacing between window and tabs which looks bad.
|
||||
$ tabbed shrinkText myTabTheme
|
||||
|
||||
|
||||
myLayoutHook = avoidStruts $ mouseResize $ windowArrange $ T.toggleLayouts floats
|
||||
$ mkToggle (NBFULL ?? NOBORDERS ?? EOT) myDefaultLayout
|
||||
where
|
||||
myDefaultLayout = withBorder myBorderWidth tall
|
||||
||| floats
|
||||
||| grid
|
||||
||| spirals
|
||||
||| tabs
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
-- Window rules:
|
||||
|
||||
-- Execute arbitrary actions and WindowSet manipulations when managing
|
||||
-- a new window. You can use this to, for example, always float a
|
||||
-- particular program, or have a client always appear on a particular
|
||||
-- workspace.
|
||||
--
|
||||
-- To find the property name associated with a program, use
|
||||
-- > xprop | grep WM_CLASS
|
||||
-- and click on the client you're interested in.
|
||||
--
|
||||
-- To match on the WM_NAME, you can use 'title' in the same way that
|
||||
-- 'className' and 'resource' are used below.
|
||||
--
|
||||
-- `doFloat` forces a window to float, useful for dialog boxes and such.
|
||||
-- `doShift (myWorkspaces !! 7)` sends program to workspace 8
|
||||
|
||||
myManageHook :: XMonad.Query (Data.Monoid.Endo WindowSet)
|
||||
myManageHook = composeAll
|
||||
-- Make dialog boxes floating, don't tile them
|
||||
[ className =? "notification" --> doFloat
|
||||
, className =? "confirm" --> doFloat
|
||||
, className =? "dialog" --> doFloat
|
||||
, className =? "error" --> doFloat
|
||||
, className =? "download" --> doFloat
|
||||
, className =? "file_progress" --> doFloat
|
||||
, className =? "splash" --> doFloat
|
||||
, className =? "toolbar" --> doFloat
|
||||
, className =? "Qalculate-gtk" --> doFloat
|
||||
, className =? "udiskie" --> doFloat
|
||||
, isFullscreen --> doFullFloat
|
||||
-- auto-shift applications to their respecitve workspaces
|
||||
, className =? "discord" --> doShift ( myWorkspaces !! 3 )
|
||||
, className =? "Element" --> doShift ( myWorkspaces !! 3 )
|
||||
, className =? "Code" --> doShift ( myWorkspaces !! 0 )
|
||||
, className =? "Stremio" --> doShift ( myWorkspaces !! 5 )
|
||||
, title =? "Mozilla Firefox" --> doShift ( myWorkspaces !! 1 )
|
||||
]
|
||||
|
||||
------------------------------------------------------------------------
|
||||
-- Startup hook
|
||||
|
||||
-- Perform an arbitrary action each time xmonad starts or is restarted
|
||||
-- with mod-q. Used by, e.g., XMonad.Layout.PerWorkspace to initialize
|
||||
-- per-workspace layout choices.
|
||||
--
|
||||
-- I don't really use this because I define these applications
|
||||
-- in ~/.config/x11/xprofile instead, that way it will apply for
|
||||
-- all WMs, not just for XMonad
|
||||
|
||||
myStartupHook :: X ()
|
||||
myStartupHook = do
|
||||
-- Automatically run autostart.sh script which will start
|
||||
-- .desktop applications defined in ~/.config/autostart
|
||||
spawnOnce "$HOME/.config/xmonad/scripts/autostart.sh &"
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
-- Log hook: this sends info to xmobar process(es)
|
||||
|
||||
myLogHook :: Handle -> Handle -> X ()
|
||||
myLogHook xmproc0 xmproc1 = dynamicLogWithPP $ xmobarPP
|
||||
{ ppOutput = \x -> hPutStrLn xmproc0 x -- xmobar on monitor 1
|
||||
>> hPutStrLn xmproc1 x -- xmobar on monitor 2
|
||||
|
||||
, ppCurrent = xmobarColor "#98be65" "" -- Current workspace
|
||||
. wrap "<box type=Bottom width=2 mb=2 color=#98be65>" "</box>" . clickable
|
||||
, ppVisible = xmobarColor "#98be65" "" .clickable -- Visible but not current workspace
|
||||
, ppHidden = xmobarColor "#82aaff" "" . clickable -- Hidden workspaces
|
||||
, ppHiddenNoWindows = xmobarColor "#c792ea" "" . clickable -- Hidden workspaces (no windows)
|
||||
|
||||
, ppTitle = xmobarColor "#b3afc2" "" . shorten 60 -- Title of active window
|
||||
, ppSep = "<fc=#666666> | </fc>" -- Separator character
|
||||
, ppUrgent = xmobarColor "#c45500" "" . wrap "!" "!" -- Urgent workspace
|
||||
, ppExtras = [windowCount] -- # of windows current workspace
|
||||
, ppOrder = \(ws:l:t:ex) -> [ws,l]++ex++[t] -- order of things in xmobar
|
||||
}
|
||||
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
-- Run xmonad with all the defaults we set up.
|
||||
main :: IO ()
|
||||
main = do
|
||||
-- Launching 2 instances of xmobar on their respective monitors.
|
||||
xmproc0 <- spawnPipe "xmobar -x 0 $HOME/.config/xmobar/xmobarrc0"
|
||||
xmproc1 <- spawnPipe "xmobar -x 1 $HOME/.config/xmobar/xmobarrc1"
|
||||
-- Xmonad config definitions
|
||||
xmonad $ ewmh $ docks $ def
|
||||
{ modMask = myModMask
|
||||
, terminal = myTerminal
|
||||
, workspaces = myWorkspaces
|
||||
, startupHook = myStartupHook
|
||||
, manageHook = myManageHook <+> manageDocks
|
||||
--, layoutHook = showWName' myShowWNameTheme $ myLayoutHook
|
||||
, layoutHook = myLayoutHook
|
||||
, borderWidth = myBorderWidth
|
||||
, normalBorderColor = myNormalBorderColor
|
||||
, focusedBorderColor = myFocusedBorderColor
|
||||
, logHook = myLogHook xmproc0 xmproc1
|
||||
} `additionalKeysP` myKeys
|
||||
|
|
@ -1 +0,0 @@
|
|||
../shell/profile
|
|
@ -1 +0,0 @@
|
|||
../shell/environment
|
|
@ -1,75 +0,0 @@
|
|||
#!/usr/bin/zsh
|
||||
|
||||
# ZSH Options
|
||||
setopt auto_cd # cd by typing directory name if it's not a command
|
||||
setopt auto_list # automatically list choices on ambiguous completion
|
||||
setopt auto_menu # automatically use menu completion
|
||||
setopt always_to_end # move cursor to end if word had one match
|
||||
setopt interactivecomments # allow comments in interactive mode
|
||||
setopt magicequalsubst # enable filename expansion for arguments of form `x=expression`
|
||||
setopt notify # report the status of background jobs immediately
|
||||
setopt numericglobsort # sort filenames numerically when it makes sense
|
||||
setopt auto_pushd # Make cd act as pushd
|
||||
#setopt correct_all # autocorrect commands
|
||||
|
||||
# oh-my-zsh configuration (DISABLED by default, if you want oh-my-zsh, uncomment these)
|
||||
#export ZSH="/usr/share/oh-my-zsh"
|
||||
#ZSH_THEME="af-magic"
|
||||
#UPDATE_ZSH_DAYS=8
|
||||
#ENABLE_CORRECTION="false"
|
||||
#source $ZSH/oh-my-zsh.sh # Run oh-my-zsh
|
||||
|
||||
# ZSH files setup (don't clutter home)
|
||||
export ZSH_CACHE="$HOME/.cache/zsh"
|
||||
export HISTFILE="$ZSH_CACHE/history"
|
||||
export ZSH_COMPDUMP="$ZSH_CACHE/zcompdump-$ZSH_VERSION"
|
||||
mkdir -p "$ZSH_CACHE"
|
||||
|
||||
# Auto-remove home clutter
|
||||
[ -f ~/.zsh-update ] && mv ~/.zsh-update $ZSH_CACHE/.zsh-update
|
||||
[ -f ~/.sudo_as_admin_sucessful ] && rm ~/.sudo_as_admin_successful
|
||||
[ -f ~/.bash_history ] && rm ~/.bash_history
|
||||
|
||||
# History configuration
|
||||
export HISTSIZE=10000
|
||||
export SAVEHIST=10000
|
||||
setopt appendhistory # save history entries as soon as they are entered
|
||||
setopt hist_ignore_space # ignore commands that start with space
|
||||
setopt hist_verify # show commands with history expansion to user before running it
|
||||
setopt extended_history # record command start time
|
||||
#setopt hist_ignore_dups # ignore duplicated commands history list
|
||||
#setopt hist_expire_dups_first # delete duplicates first when HISTFILE size exceeds HISTFILE
|
||||
#setopt share_history # share command history data between terminals
|
||||
|
||||
# Completion features (tab)
|
||||
autoload -Uz compinit
|
||||
zmodload -i zsh/complist # load completion list
|
||||
compinit -d $ZSH_COMPDUMP # Specify compdump file
|
||||
comp_options+=(globdots) # Enable completion on hidden files.
|
||||
zstyle ':completion:*' menu select # select completions with arrow keys
|
||||
zstyle ':completion:*' group-name '' # group results by category
|
||||
zstyle ':completion:::::' completer _expand _complete _ignored _approximate #enable approximate matches for completion
|
||||
|
||||
# Color support
|
||||
#autoload -U colors && colors
|
||||
|
||||
# Setup aliases
|
||||
[ -f ~/.config/shell/aliases ] && source ~/.config/shell/aliases
|
||||
# Load handlers
|
||||
[ -f ~/.config/shell/handlers ] && source ~/.config/shell/handlers
|
||||
# Load key bindings
|
||||
[ -f ~/.config/shell/keybinds ] && source ~/.config/shell/keybinds
|
||||
# Load prompt
|
||||
[ -f ~/.config/shell/prompt ] && source ~/.config/shell/prompt
|
||||
|
||||
# Define TMOUT timeout for TTY and root
|
||||
[ -z "$DISPLAY" ] && export TMOUT=800
|
||||
[ $UID -eq 0 ] && export TMOUT=600
|
||||
|
||||
# Load extensions (should be last)
|
||||
. /usr/share/zsh/site-functions/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh 2>/dev/null
|
||||
. /usr/share/zsh/site-functions/zsh-autosuggestions/zsh-autosuggestions.zsh 2>/dev/null
|
||||
eval "$(lua /usr/local/src/z.lua/z.lua --init zsh enhanced)"
|
||||
if command -v pyenv >/dev/null 2>&1; then
|
||||
eval "$(pyenv init -)"
|
||||
fi
|
|
@ -1,12 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
BTC_DATA=$(curl https://api.coindesk.com/v1/bpi/currentprice.json 2>/dev/null || echo 'ERR')
|
||||
|
||||
if [ "$BTC_DATA" != "ERR" ]; then
|
||||
BTC_PRICE=$(echo $BTC_DATA | jq -r ".bpi.USD.rate_float")
|
||||
BTC_PRICE=$(printf "%.2f" "$BTC_PRICE")
|
||||
echo \$"$BTC_PRICE"
|
||||
else
|
||||
echo "N/A"
|
||||
fi
|
||||
|
|
@ -1,153 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
|
||||
# Parse arguments
|
||||
# ------------------------------------------------------------------------------------
|
||||
BRIGHTNESS_DIR="/sys/class/backlight/*"
|
||||
SEND_NOTIFICATION=0
|
||||
URGENCY="normal"
|
||||
INCREASE=0
|
||||
DECREASE=0
|
||||
SET=0
|
||||
BRIGHTNESS=0
|
||||
|
||||
while [ "$1" ]; do
|
||||
case "$1" in
|
||||
-h | --help)
|
||||
cat << EOF
|
||||
brightness is a cli tool that for displaying or modifying screen brightness.
|
||||
|
||||
Options:
|
||||
-h | --help: Display this message
|
||||
-n | --notification: Produce a desktop notification with brightness info
|
||||
-N | --no-notification: Don't produce a desktop notification with brightness info
|
||||
-u | --urgency [URGENCY]: Pass over notify-send urgency attribute (default: normal)
|
||||
-i | --increase [BRIGHTNESS]: Increase the brightness by given amount
|
||||
-d | --decrease [BRIGHTNESS]: Decrease the brightness by given amount
|
||||
-s | --set [BRIGHTNESS]: Set new brightness level
|
||||
-p | --path [DIR_PATH]: Path to brightness directory (default: /sys/class/backlight/*)
|
||||
|
||||
Valid values:
|
||||
URGENCY: low, normal, critical
|
||||
DIR_PATH: Valid path to a directory
|
||||
BRIGHTNESS:
|
||||
specific value - Example: 10
|
||||
percentage value - Example: 10%
|
||||
EOF
|
||||
exit 0
|
||||
;;
|
||||
-n | --notification)
|
||||
SEND_NOTIFICATION=1
|
||||
;;
|
||||
-N | --no-notification)
|
||||
SEND_NOTIFICATION=0
|
||||
;;
|
||||
-u | --urgency)
|
||||
URGENCY="$2"
|
||||
shift
|
||||
;;
|
||||
-i | --increase)
|
||||
INCREASE=1
|
||||
BRIGHTNESS="$2"
|
||||
shift
|
||||
;;
|
||||
-d | --decrease)
|
||||
DECREASE=1
|
||||
BRIGHTNESS="$2"
|
||||
shift
|
||||
;;
|
||||
-s | --set)
|
||||
SET=1
|
||||
BRIGHTNESS="$2"
|
||||
shift
|
||||
;;
|
||||
-p | --path)
|
||||
BRIGHTNESS_DIR="$2"
|
||||
shift
|
||||
;;
|
||||
* )
|
||||
echo "Unknown argument '$1', use -h or --help for help"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
# Define constants based on parsed arguments
|
||||
# ------------------------------------------------------------------------------------
|
||||
BRIGHTNESS_FILE="$BRIGHTNESS_DIR/brightness"
|
||||
BRIGHTNESS_MAX="$(cat $BRIGHTNESS_DIR/max_brightness)"
|
||||
|
||||
|
||||
# Helper functins
|
||||
# ------------------------------------------------------------------------------------
|
||||
|
||||
# Send brightness level desktop notification, showing the given brightness level
|
||||
# as progress bar, along with given message.
|
||||
# $1 - brightness level (number 0-100)
|
||||
# $2 - message (notification body)
|
||||
send_brightness_notify() {
|
||||
percent_brightness="$1"
|
||||
msg="$2"
|
||||
|
||||
notify-send \
|
||||
--app-name=brightness \
|
||||
--urgency="$URGENCY" \
|
||||
-h int:value:$percent_brightness \
|
||||
-h string:synchronous:brightness \
|
||||
"brightness" "$msg"
|
||||
}
|
||||
|
||||
|
||||
# Set brightness to given absolute value
|
||||
# $1 - brightness absolute value
|
||||
set_brightness() {
|
||||
# there should be sudo config allowing this command without password
|
||||
echo "$1" | sudo tee $BRIGHTNESS_FILE >/dev/null
|
||||
}
|
||||
|
||||
|
||||
# Main Logic
|
||||
# ------------------------------------------------------------------------------------
|
||||
|
||||
# Determine the absolute new brightness level
|
||||
if [ $INCREASE -eq 1 ] || [ $DECREASE -eq 1 ] || [ $SET -eq 1 ]; then
|
||||
# If we're dealing with percentages, change to absolutes
|
||||
if echo "$BRIGHTNESS" | grep -qE '%$'; then
|
||||
numeric=$(echo "$BRIGHTNESS" | sed 's/.$//')
|
||||
absolute=$(echo "($BRIGHTNESS_MAX / 100) * $numeric" | bc -l)
|
||||
BRIGHTNESS=$(printf "%.0f" $absolute)
|
||||
fi
|
||||
|
||||
# Get the new requested absolute brightness
|
||||
if [ $SET -eq 1 ]; then
|
||||
new_brightness=$BRIGHTNESS
|
||||
elif [ $DECREASE -eq 1 ]; then
|
||||
cur_brightness=$(cat $BRIGHTNESS_FILE)
|
||||
new_brightness=$(($cur_brightness - $BRIGHTNESS))
|
||||
else
|
||||
cur_brightness=$(cat $BRIGHTNESS_FILE)
|
||||
new_brightness=$(($cur_brightness + $BRIGHTNESS))
|
||||
fi
|
||||
|
||||
# Ensure we respect max/min boundaries
|
||||
if [ $new_brightness -lt 0 ]; then
|
||||
new_brightness=0
|
||||
elif [ $new_brightness -gt $BRIGHTNESS_MAX ]; then
|
||||
new_brightness=$BRIGHTNESS_MAX
|
||||
fi
|
||||
|
||||
# Update the brightness
|
||||
set_brightness $new_brightness
|
||||
fi
|
||||
|
||||
cur_brightness=$(cat $BRIGHTNESS_FILE)
|
||||
percent_brightness=$(echo "($cur_brightness / $BRIGHTNESS_MAX) * 100" | bc -l)
|
||||
percent_brightness_2f=$(printf "%.2f" $percent_brightness)
|
||||
percent_brightness_rounded=$(printf "%.0f" $percent_brightness)
|
||||
|
||||
if [ $SEND_NOTIFICATION -eq 1 ]; then
|
||||
send_brightness_notify "$percent_brightness_rounded" "Level: $percent_brightness_rounded"
|
||||
fi
|
||||
|
||||
echo "Brightness: ${percent_brightness_2f}% (absolute: $cur_brightness)"
|
|
@ -1,111 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
# rm_trailing_slashes(string)
|
||||
#
|
||||
# Prints a string without any trailing slashes.
|
||||
# This is used because cheat.sh doesn't play nicely with multiple slashes in
|
||||
# URLs.
|
||||
rm_trailing_slashes() {
|
||||
string="$1"
|
||||
last_char="$(printf "$string" | tail -c 1)"
|
||||
if [ "$last_char" = "/" ]; then
|
||||
echo "$(rm_trailing_slashes "${string%?}")"
|
||||
else
|
||||
echo "$string"
|
||||
fi
|
||||
}
|
||||
|
||||
# pick_category(must_match, query, argument, recurse)
|
||||
#
|
||||
# Pick cheat.sh category.
|
||||
# if must_match is 1, only allow listed options to be picked.
|
||||
# if query is specified, pick sub-category of it, else pick global categories.
|
||||
# if argument is specified, optionally perform must_match check and print it.
|
||||
# if recurse is 1, if the selected option ends with /, run the function again.
|
||||
#
|
||||
# Prints the chosen category
|
||||
pick_category() {
|
||||
must_match="$1"
|
||||
query="$(rm_trailing_slashes "$2")"
|
||||
argument="$3"
|
||||
recurse="$4"
|
||||
|
||||
# Query all possible options
|
||||
if [ -n "$query" ]; then
|
||||
url="cheat.sh/$query/:list"
|
||||
else
|
||||
url="cheat.sh/:list"
|
||||
fi
|
||||
selectable="$(curl -s "$url")"
|
||||
|
||||
# If argument is specified, print it, optionally perform must_match check.
|
||||
if [ -n "$argument" ]; then
|
||||
if [ "$must_match" -ne 1 ] || echo "$selectable" | grep -qe "\b$1\b"; then
|
||||
selected="$argument"
|
||||
else
|
||||
echo "Invalid selection: '$argument'"
|
||||
echo "For all selections, query $url"
|
||||
exit 1
|
||||
fi
|
||||
# Select the option with fzf, optionally allow other matches if must_match isn't set.
|
||||
else
|
||||
if [ "$must_match" -ne 1 ]; then
|
||||
if [ -z "$selectable" ]; then
|
||||
header="No selections found, you can use empty query to show category help, or type a custom query."
|
||||
else
|
||||
header="Use alt-enter to enter non-listed query. You can use empty queries to show category help."
|
||||
fi
|
||||
selected="$(printf "\n$selectable" | \
|
||||
fzf --bind=alt-enter:print-query \
|
||||
--print-query \
|
||||
--prompt="cheat.sh/$query query>" \
|
||||
--header="$header"\
|
||||
)"
|
||||
else
|
||||
selected=$(printf "$selectable" | fzf --prompt="cheat.sh/$query category>")
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "Invalid selection: '$selected'"
|
||||
echo "For all selections, query $url"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
selected=$(printf "$selected" | tail -1)
|
||||
fi
|
||||
|
||||
|
||||
# Replace spaces with '+' (cheat.sh resolves those as spaces)
|
||||
selected="$(echo "$selected" | tr ' ' '+')"
|
||||
|
||||
# Prepend the original query, if we have one
|
||||
# Print the selected category, or subcategory with the category
|
||||
if [ -n "$query" ]; then
|
||||
result="$query/$selected"
|
||||
else
|
||||
result="$selected"
|
||||
fi
|
||||
|
||||
# Recurse, if specified and the result ended with /
|
||||
if [ "$recurse" -eq 1 ]; then
|
||||
if [ "$(printf "$selected" | tail -c 1)" = "/" ]; then
|
||||
result="$(pick_category "$must_match" "$result" "$argument" 1)"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Print the result
|
||||
printf "$result"
|
||||
}
|
||||
|
||||
# Select the cheatsheat category (language/core-util/...)
|
||||
query=$(pick_category 1 "" "$1" 0)
|
||||
|
||||
# If the query isn't already complete, select a sub-category
|
||||
if ! echo "$query" | grep -qe ":"; then
|
||||
query="$(pick_category 0 "$query" "$2" 1)"
|
||||
fi
|
||||
|
||||
# Construct the URL from given query and print it
|
||||
url="cheat.sh/$query"
|
||||
echo "$url"
|
||||
|
||||
# Show the output of cheat.sh request
|
||||
curl -s "$url"
|
|
@ -1,102 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
# # Print out 256 colors, with each number printed in its corresponding colour
|
||||
#
|
||||
# This file is uploaded on <https://gist.githubusercontent.com/HaleTom/89ffe32783f89f403bba96bd7bcd1263/raw/>
|
||||
# It was originally intended to be used as an alias that curled this URL and piped it into bash, however
|
||||
# this is very unsafe as the owner can change the content of this gist at his convenience, meaning it was
|
||||
# a potential security vulnerability. This is a script version of this alias to avoid this issue.
|
||||
#
|
||||
# The copyright for this file belongs to the original author: Tom Hale, 2016
|
||||
# This file was released under MIT license
|
||||
|
||||
set -eu # Fail on errors or undeclared variables
|
||||
|
||||
printable_colours=256
|
||||
|
||||
# Return a colour that contrasts with the given colour
|
||||
# Bash only does integer division, so keep it integral
|
||||
function contrast_colour {
|
||||
local r g b luminance
|
||||
colour="$1"
|
||||
|
||||
if (( colour < 16 )); then # Initial 16 ANSI colours
|
||||
(( colour == 0 )) && printf "15" || printf "0"
|
||||
return
|
||||
fi
|
||||
|
||||
# Greyscale # rgb_R = rgb_G = rgb_B = (number - 232) * 10 + 8
|
||||
if (( colour > 231 )); then # Greyscale ramp
|
||||
(( colour < 244 )) && printf "15" || printf "0"
|
||||
return
|
||||
fi
|
||||
|
||||
# All other colours:
|
||||
# 6x6x6 colour cube = 16 + 36*R + 6*G + B # Where RGB are [0..5]
|
||||
# See http://stackoverflow.com/a/27165165/5353461
|
||||
|
||||
# r=$(( (colour-16) / 36 ))
|
||||
g=$(( ((colour-16) % 36) / 6 ))
|
||||
# b=$(( (colour-16) % 6 ))
|
||||
|
||||
# If luminance is bright, print number in black, white otherwise.
|
||||
# Green contributes 587/1000 to human perceived luminance - ITU R-REC-BT.601
|
||||
(( g > 2)) && printf "0" || printf "15"
|
||||
return
|
||||
|
||||
# Uncomment the below for more precise luminance calculations
|
||||
|
||||
# # Calculate percieved brightness
|
||||
# # See https://www.w3.org/TR/AERT#color-contrast
|
||||
# # and http://www.itu.int/rec/R-REC-BT.601
|
||||
# # Luminance is in range 0..5000 as each value is 0..5
|
||||
# luminance=$(( (r * 299) + (g * 587) + (b * 114) ))
|
||||
# (( $luminance > 2500 )) && printf "0" || printf "15"
|
||||
}
|
||||
|
||||
# Print a coloured block with the number of that colour
|
||||
function print_colour {
|
||||
local colour="$1" contrast
|
||||
contrast=$(contrast_colour "$1")
|
||||
printf "\e[48;5;%sm" "$colour" # Start block of colour
|
||||
printf "\e[38;5;%sm%3d" "$contrast" "$colour" # In contrast, print number
|
||||
printf "\e[0m " # Reset colour
|
||||
}
|
||||
|
||||
# Starting at $1, print a run of $2 colours
|
||||
function print_run {
|
||||
local i
|
||||
for (( i = "$1"; i < "$1" + "$2" && i < printable_colours; i++ )) do
|
||||
print_colour "$i"
|
||||
done
|
||||
printf " "
|
||||
}
|
||||
|
||||
# Print blocks of colours
|
||||
function print_blocks {
|
||||
local start="$1" i
|
||||
local end="$2" # inclusive
|
||||
local block_cols="$3"
|
||||
local block_rows="$4"
|
||||
local blocks_per_line="$5"
|
||||
local block_length=$((block_cols * block_rows))
|
||||
|
||||
# Print sets of blocks
|
||||
for (( i = start; i <= end; i += (blocks_per_line-1) * block_length )) do
|
||||
printf "\n" # Space before each set of blocks
|
||||
# For each block row
|
||||
for (( row = 0; row < block_rows; row++ )) do
|
||||
# Print block columns for all blocks on the line
|
||||
for (( block = 0; block < blocks_per_line; block++ )) do
|
||||
print_run $(( i + (block * block_length) )) "$block_cols"
|
||||
done
|
||||
(( i += block_cols )) # Prepare to print the next row
|
||||
printf "\n"
|
||||
done
|
||||
done
|
||||
}
|
||||
|
||||
print_run 0 16 # The first 16 colours are spread over the whole spectrum
|
||||
printf "\n"
|
||||
print_blocks 16 231 6 6 3 # 6x6x6 colour cube between 16 and 231 inclusive
|
||||
print_blocks 232 255 12 2 1 # Not 50, but 24 Shades of Grey
|
|
@ -1,13 +0,0 @@
|
|||
#!/bin/sh
|
||||
# Compile given file
|
||||
|
||||
file=$(readlink -f "$1")
|
||||
base="$(dirname "$file")/$(basename "$file" | sed 's/\..*//')"
|
||||
|
||||
case "$file" in
|
||||
*.md) pandoc --filter pandoc-crossref "$file" -o "$base".pdf ;;
|
||||
*.asm) nasm -f elf64 "$file" -o "$base".o && ld "$base".o -o "$base" ;;
|
||||
*.c) gcc "$file" -o "$base" ;;
|
||||
*.cpp) g++ "$file" -o "$base" ;;
|
||||
*) echo "Can't compile!" && exit 1 ;;
|
||||
esac
|
|
@ -1,11 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
# Find the line with exec, if there's multiple lines
|
||||
# use the last one
|
||||
exec_line=$(grep '^Exec' "$1" | tail -1)
|
||||
# Remove 'Exec' and arguments (%u, %f, ...)
|
||||
cmd=$(echo $exec_line | sed 's/^Exec=//' | sed 's/%.//')
|
||||
# Remove "" around command (if present)
|
||||
cmd=$(echo $cmd | sed 's/^"//g' | sed 's/" *$//g')
|
||||
# Run the exec line of the application using /bin/sh
|
||||
/bin/sh -c "$cmd"
|
|
@ -1,82 +0,0 @@
|
|||
|
||||
#!/bin/sh
|
||||
|
||||
# A UI for detecting and selecting all displays. Probes xrandr for connected
|
||||
# displays and lets user select one to use. User may also select "manual
|
||||
# selection" which opens arandr.
|
||||
|
||||
twoscreen() { # If multi-monitor is selected and there are two screens.
|
||||
|
||||
mirror=$(printf "no\\nyes" | dmenu -i -p "Mirror displays?")
|
||||
# Mirror displays using native resolution of external display and a scaled
|
||||
# version for the internal display
|
||||
if [ "$mirror" = "yes" ]; then
|
||||
external=$(echo "$screens" | dmenu -i -p "Optimize resolution for:")
|
||||
internal=$(echo "$screens" | grep -v "$external")
|
||||
|
||||
res_external=$(xrandr --query | sed -n "/^$external/,/\+/p" | \
|
||||
tail -n 1 | awk '{print $1}')
|
||||
res_internal=$(xrandr --query | sed -n "/^$internal/,/\+/p" | \
|
||||
tail -n 1 | awk '{print $1}')
|
||||
|
||||
res_ext_x=$(echo "$res_external" | sed 's/x.*//')
|
||||
res_ext_y=$(echo "$res_external" | sed 's/.*x//')
|
||||
res_int_x=$(echo "$res_internal" | sed 's/x.*//')
|
||||
res_int_y=$(echo "$res_internal" | sed 's/.*x//')
|
||||
|
||||
scale_x=$(echo "$res_ext_x / $res_int_x" | bc -l)
|
||||
scale_y=$(echo "$res_ext_y / $res_int_y" | bc -l)
|
||||
|
||||
xrandr --output "$external" --auto --scale 1.0x1.0 \
|
||||
--output "$internal" --auto --same-as "$external" \
|
||||
--scale "$scale_x"x"$scale_y"
|
||||
else
|
||||
|
||||
primary=$(echo "$screens" | dmenu -i -p "Select primary display:")
|
||||
secondary=$(echo "$screens" | grep -v "$primary")
|
||||
direction=$(printf "left\\nright" | dmenu -i -p "What side of $primary should $secondary be on?")
|
||||
xrandr --output "$primary" --auto --scale 1.0x1.0 --output "$secondary" --"$direction"-of "$primary" --auto --scale 1.0x1.0
|
||||
fi
|
||||
}
|
||||
|
||||
morescreen() { # If multi-monitor is selected and there are more than two screens.
|
||||
primary=$(echo "$screens" | dmenu -i -p "Select primary display:")
|
||||
secondary=$(echo "$screens" | grep -v "$primary" | dmenu -i -p "Select secondary display:")
|
||||
direction=$(printf "left\\nright" | dmenu -i -p "What side of $primary should $secondary be on?")
|
||||
tertiary=$(echo "$screens" | grep -v "$primary" | grep -v "$secondary" | dmenu -i -p "Select third display:")
|
||||
xrandr --output "$primary" --auto --output "$secondary" --"$direction"-of "$primary" --auto --output "$tertiary" --"$(printf "left\\nright" | grep -v "$direction")"-of "$primary" --auto
|
||||
}
|
||||
|
||||
multimon() { # Multi-monitor handler.
|
||||
case "$(echo "$screens" | wc -l)" in
|
||||
2) twoscreen ;;
|
||||
*) morescreen ;;
|
||||
esac ;}
|
||||
|
||||
onescreen() { # If only one output available or chosen.
|
||||
xrandr --output "$1" --auto --scale 1.0x1.0 $(echo "$allposs" | grep -v "\b$1" | awk '{print "--output", $1, "--off"}' | paste -sd ' ' -)
|
||||
}
|
||||
|
||||
postrun() { # Stuff to run to clean up.
|
||||
command -v setbg >/dev/null && setbg # Fix background if screen size/arangement has changed.
|
||||
}
|
||||
|
||||
# Get all possible displays
|
||||
allposs=$(xrandr -q | grep "connected")
|
||||
|
||||
# Get all connected screens.
|
||||
screens=$(echo "$allposs" | awk '/ connected/ {print $1}')
|
||||
|
||||
# If there's only one screen
|
||||
[ "$(echo "$screens" | wc -l)" -lt 2 ] &&
|
||||
{ onescreen "$screens"; postrun; notify-send "💻 Only one screen detected." "Using it in its optimal settings..."; exit ;}
|
||||
|
||||
# Get user choice including multi-monitor and manual selection:
|
||||
chosen=$(printf "%s\\nmulti-monitor\\nmanual selection" "$screens" | dmenu -i -p "Select display arangement:") &&
|
||||
case "$chosen" in
|
||||
"manual selection") arandr ; exit ;;
|
||||
"multi-monitor") multimon ;;
|
||||
*) onescreen "$chosen" ;;
|
||||
esac
|
||||
|
||||
postrun
|
|
@ -1,68 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
# Gives dmenu prompt to mount unmounted drives and Android phones.
|
||||
# If they're in /etc/fstab they'll be mounted automatically.
|
||||
# Otherwise, you'll be prompted to give a mountpoint from already
|
||||
# existing directories. If you input a novel directory, it will
|
||||
# prompt you to create that directory.
|
||||
|
||||
getmount() { \
|
||||
[ -z "$chosen" ] && exit 1
|
||||
# shellcheck disable=SC2086
|
||||
mp="$(find $1 2>/dev/null | dmenu -i -p "Type in mount point.")" || exit 1
|
||||
test -z "$mp" && exit 1
|
||||
if [ ! -d "$mp" ]; then
|
||||
mkdiryn=$(printf "No\\nYes" | dmenu -i -p "$mp does not exist. Create it?") || exit 1
|
||||
[ "$mkdiryn" = "Yes" ] && (mkdir -p "$mp" || sudo -A mkdir -p "$mp")
|
||||
fi
|
||||
}
|
||||
|
||||
mountusb() { \
|
||||
chosen="$(echo "$usbdrives" | dmenu -i -p "Mount which drive?")" || exit 1
|
||||
chosen="$(echo "$chosen" | awk '{print $1}')"
|
||||
sudo -A mount "$chosen" 2>/dev/null && notify-send "💻 USB mounting" "$chosen mounted." && exit 0
|
||||
alreadymounted=$(lsblk -nrpo "name,type,mountpoint" | awk '$3!~/\/boot|\/home$|SWAP/&&length($3)>1{printf "-not ( -path *%s -prune ) ",$3}')
|
||||
getmount "/mnt /media /mount /home -maxdepth 5 -type d $alreadymounted"
|
||||
partitiontype="$(lsblk -no "fstype" "$chosen")"
|
||||
case "$partitiontype" in
|
||||
"vfat") sudo -A mount -t vfat "$chosen" "$mp" -o rw,umask=0000;;
|
||||
"exfat") sudo -A mount "$chosen" "$mp" -o uid="$(id -u)",gid="$(id -g)";;
|
||||
*) sudo -A mount "$chosen" "$mp"; user="$(whoami)"; ug="$(groups | awk '{print $1}')"; sudo -A chown "$user":"$ug" "$mp";;
|
||||
esac
|
||||
notify-send "💻 USB mounting" "$chosen mounted to $mp."
|
||||
}
|
||||
|
||||
mountandroid() { \
|
||||
chosen="$(echo "$anddrives" | dmenu -i -p "Which Android device?")" || exit 1
|
||||
chosen="$(echo "$chosen" | cut -d : -f 1)"
|
||||
getmount "$HOME -maxdepth 3 -type d"
|
||||
simple-mtpfs --device "$chosen" "$mp"
|
||||
echo "OK" | dmenu -i -p "Tap Allow on your phone if it asks for permission and then press enter" || exit 1
|
||||
simple-mtpfs --device "$chosen" "$mp"
|
||||
notify-send "🤖 Android Mounting" "Android device mounted to $mp."
|
||||
}
|
||||
|
||||
asktype() { \
|
||||
choice="$(printf "USB\\nAndroid" | dmenu -i -p "Mount a USB drive or Android device?")" || exit 1
|
||||
case $choice in
|
||||
USB) mountusb ;;
|
||||
Android) mountandroid ;;
|
||||
esac
|
||||
}
|
||||
|
||||
anddrives=$(simple-mtpfs -l 2>/dev/null)
|
||||
usbdrives="$(lsblk -rpo "name,type,size,mountpoint" | grep 'part\|rom' | awk '$4==""{printf "%s (%s)\n",$1,$3}')"
|
||||
|
||||
if [ -z "$usbdrives" ]; then
|
||||
[ -z "$anddrives" ] && echo "No USB drive or Android device detected" && exit
|
||||
echo "Android device(s) detected."
|
||||
mountandroid
|
||||
else
|
||||
if [ -z "$anddrives" ]; then
|
||||
echo "USB drive(s) detected."
|
||||
mountusb
|
||||
else
|
||||
echo "Mountable USB drive(s) and Android device(s) detected."
|
||||
asktype
|
||||
fi
|
||||
fi
|
|
@ -1,6 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
# This script is the value for SUDO_ASKPASS variable,
|
||||
# meaning that it will be used as a password prompt if needed.
|
||||
|
||||
dmenu -P -p "$1"
|
|
@ -1,121 +0,0 @@
|
|||
|
||||
#!/bin/sh
|
||||
|
||||
# Usage:
|
||||
# `$0`: Ask for recording type via dmenu
|
||||
# `$0 screencast`: Record both audio and screen
|
||||
# `$0 video`: Record only screen
|
||||
# `$0 audio`: Record only audio
|
||||
# `$0 kill`: Kill existing recording
|
||||
#
|
||||
# If there is already a running instance, user will be prompted to end it.
|
||||
|
||||
screencast() {
|
||||
ffmpeg -y \
|
||||
-f x11grab \
|
||||
-framerate 60 \
|
||||
-s "$(xdpyinfo | grep dimensions | awk '{print $2;}')" \
|
||||
-i "$DISPLAY" \
|
||||
-f alsa -i default \
|
||||
-r 30 \
|
||||
-c:v h264 -crf 0 -preset ultrafast -c:a aac \
|
||||
"$HOME/screencast-$(date '+%y%m%d-%H%M-%S').mp4" &
|
||||
echo $! > /tmp/recordingpid
|
||||
}
|
||||
|
||||
video() {
|
||||
ffmpeg \
|
||||
-f x11grab \
|
||||
-s "$(xdpyinfo | grep dimensions | awk '{print $2;}')" \
|
||||
-i "$DISPLAY" \
|
||||
-c:v libx264 -qp 0 -r 30 \
|
||||
"$HOME/video-$(date '+%y%m%d-%H%M-%S').mkv" &
|
||||
echo $! > /tmp/recordingpid
|
||||
}
|
||||
|
||||
webcamhidef() {
|
||||
ffmpeg \
|
||||
-f v4l2 \
|
||||
-i /dev/video0 \
|
||||
-video_size 1920x1080 \
|
||||
"$HOME/webcam-$(date '+%y%m%d-%H%M-%S').mkv" &
|
||||
echo $! > /tmp/recordingpid
|
||||
}
|
||||
|
||||
webcam() {
|
||||
ffmpeg \
|
||||
-f v4l2 \
|
||||
-i /dev/video0 \
|
||||
-video_size 640x480 \
|
||||
"$HOME/webcam-$(date '+%y%m%d-%H%M-%S').mkv" &
|
||||
echo $! > /tmp/recordingpid
|
||||
}
|
||||
|
||||
|
||||
audio() {
|
||||
ffmpeg \
|
||||
-f alsa -i default \
|
||||
"$HOME/audio-$(date '+%y%m%d-%H%M-%S').mp3" &
|
||||
echo $! > /tmp/recordingpid
|
||||
}
|
||||
|
||||
asktoend() {
|
||||
response=$(printf "No\\nYes" | dmenu -i -p "Recording still active. End recording?") &&
|
||||
[ "$response" = "Yes" ] && killrecording
|
||||
}
|
||||
|
||||
videoselected()
|
||||
{
|
||||
slop -f "%x %y %w %h" > /tmp/slop
|
||||
read -r X Y W H < /tmp/slop
|
||||
rm /tmp/slop
|
||||
|
||||
ffmpeg \
|
||||
-f x11grab \
|
||||
-framerate 60 \
|
||||
-video_size "$W"x"$H" \
|
||||
-i :0.0+"$X,$Y" \
|
||||
-c:v libx264 -qp 0 -r 30 \
|
||||
"$HOME/box-$(date '+%y%m%d-%H%M-%S').mkv" &
|
||||
echo $! > /tmp/recordingpid
|
||||
}
|
||||
|
||||
killrecording() {
|
||||
recpid="$(cat /tmp/recordingpid)"
|
||||
# kill with SIGTERM, allowing finishing touches.
|
||||
kill -15 "$recpid" 2>/dev/null
|
||||
rm -f /tmp/recordingpid
|
||||
# even after SIGTERM, ffmpeg may still run, so SIGKILL it.
|
||||
sleep 3
|
||||
kill -9 "$recpid" 2>/dev/null
|
||||
exit
|
||||
}
|
||||
|
||||
askrecording() { \
|
||||
choice=$(printf "screencast\\nvideo\\nvideo selected\\naudio\\nwebcam\\nwebcam (hi-def)" | dmenu -i -p "Select recording style:")
|
||||
case "$choice" in
|
||||
screencast) screencast;;
|
||||
audio) audio;;
|
||||
video) video;;
|
||||
*selected) videoselected;;
|
||||
webcam) webcam;;
|
||||
"webcam (hi-def)") webcamhidef;;
|
||||
esac
|
||||
}
|
||||
|
||||
case "$1" in
|
||||
screencast) screencast;;
|
||||
audio) audio;;
|
||||
video) video;;
|
||||
*selected) videoselected;;
|
||||
kill) killrecording;;
|
||||
*)
|
||||
if [ -f /tmp/recordingpid ]; then
|
||||
recpid="$(cat /tmp/recordingpid)"
|
||||
if ps -p $recpid > /dev/null; then
|
||||
asktoend
|
||||
exit
|
||||
fi
|
||||
fi
|
||||
askrecording;;
|
||||
esac
|
|
@ -1,44 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
# A dmenu prompt to unmount drives.
|
||||
# Provides you with mounted partitions, select one to unmount.
|
||||
# Drives mounted at /, /boot and /home will not be options to unmount.
|
||||
|
||||
unmountusb() {
|
||||
[ -z "$drives" ] && exit
|
||||
chosen="$(echo "$drives" | dmenu -i -p "Unmount which drive?")" || exit 1
|
||||
chosen="$(echo "$chosen" | awk '{print $1}')"
|
||||
[ -z "$chosen" ] && exit
|
||||
sudo -A umount "$chosen" && notify-send "💻 USB unmounting" "$chosen unmounted."
|
||||
}
|
||||
|
||||
unmountandroid() { \
|
||||
chosen="$(awk '/simple-mtpfs/ {print $2}' /etc/mtab | dmenu -i -p "Unmount which device?")" || exit 1
|
||||
[ -z "$chosen" ] && exit
|
||||
sudo -A umount -l "$chosen" && notify-send "🤖 Android unmounting" "$chosen unmounted."
|
||||
}
|
||||
|
||||
asktype() { \
|
||||
choice="$(printf "USB\\nAndroid" | dmenu -i -p "Unmount a USB drive or Android device?")" || exit 1
|
||||
case "$choice" in
|
||||
USB) unmountusb ;;
|
||||
Android) unmountandroid ;;
|
||||
esac
|
||||
}
|
||||
|
||||
drives=$(lsblk -nrpo "name,type,size,mountpoint" | awk '$4!~/\/boot|\/home$|SWAP/&&length($4)>1{printf "%s (%s)\n",$4,$3}')
|
||||
|
||||
if ! grep simple-mtpfs /etc/mtab; then
|
||||
[ -z "$drives" ] && echo "No drives to unmount." && exit
|
||||
echo "Unmountable USB drive detected."
|
||||
unmountusb
|
||||
else
|
||||
if [ -z "$drives" ]
|
||||
then
|
||||
echo "Unmountable Android device detected."
|
||||
unmountandroid
|
||||
else
|
||||
echo "Unmountable USB drive(s) and Android device(s) detected."
|
||||
asktype
|
||||
fi
|
||||
fi
|
|
@ -1,36 +0,0 @@
|
|||
#!/bin/sh
|
||||
# This is inspired by dmenu's todo script made by suckless
|
||||
#
|
||||
# Manage TODO tasks in dmenu by writing them, remove by selecting
|
||||
# an existing entry
|
||||
#
|
||||
# Configurable variables
|
||||
# ---------------------------------------------------------------------
|
||||
|
||||
FILE="${XDG_DATA_HOME:-$HOME/.local/share}/todos"
|
||||
PROMPT="Add/delete a task: "
|
||||
|
||||
# Logic
|
||||
# ---------------------------------------------------------------------
|
||||
mkdir -p "$(dirname $FILE)"
|
||||
touch "$FILE"
|
||||
|
||||
height=$(wc -l "$FILE" | awk '{print $1}')
|
||||
|
||||
# Run dmenu and keep restarting it until it returns an empty output
|
||||
cmd=$(dmenu -l "$height" -p "$PROMPT" "$@" < "$FILE")
|
||||
while [ -n "$cmd" ]; do
|
||||
# If the output matched an existing TODO, remove it
|
||||
if grep -q "^$cmd\$" "$FILE"; then
|
||||
grep -v "^$cmd\$" "$FILE" > "$FILE.$$"
|
||||
mv "$FILE.$$" "$FILE"
|
||||
height=$(( height - 1 ))
|
||||
# If the output didn't match an existing TODO, it's a new one, add it
|
||||
else
|
||||
echo "$cmd" >> "$FILE"
|
||||
height=$(( height + 1 ))
|
||||
fi
|
||||
|
||||
# Keep restarting until empty output
|
||||
cmd=$(dmenu -l "$height" -p "$PROMPT" "$@" < "$FILE")
|
||||
done
|
|
@ -1,23 +0,0 @@
|
|||
#!/usr/bin/env python
|
||||
import feedparser
|
||||
import subprocess
|
||||
|
||||
|
||||
URL = "https://itsdrike.com/posts/index.xml"
|
||||
|
||||
|
||||
def main():
|
||||
feed = feedparser.parse(URL)
|
||||
titles = {entry['title']: entry['link'] for entry in feed['entries']}
|
||||
|
||||
selected_page = subprocess.check_output(
|
||||
["dmenu", "-i", "-p", "Post"],
|
||||
input="\n".join(titles.keys()), universal_newlines=True
|
||||
)
|
||||
link = titles[selected_page.strip()]
|
||||
|
||||
subprocess.check_output(["xsel", "-bi"], input=link, universal_newlines=True)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
|
@ -1,119 +0,0 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
import sys
|
||||
import subprocess
|
||||
from datetime import datetime
|
||||
from dataclasses import dataclass
|
||||
|
||||
|
||||
@dataclass
|
||||
class CompiledPackage:
|
||||
name: str
|
||||
date: datetime
|
||||
compile_time: int
|
||||
|
||||
def __repr__(self) -> str:
|
||||
name = self.name
|
||||
date = self.date.strftime("%a %b %d %H:%M:%S %Y")
|
||||
compile_time = get_readable_duration(self.compile_time)
|
||||
return f"CompiledPackage({name=}, {date=}, {compile_time=})"
|
||||
|
||||
|
||||
def parse_time(time_line: str) -> int:
|
||||
"""Parse a line that contains time info, return seconds"""
|
||||
time = 0
|
||||
words = time_line.split()
|
||||
|
||||
if "hour" in words[1]:
|
||||
time += int(words[0]) * 60 * 60
|
||||
elif "minute" in words[1]:
|
||||
time += int(words[0]) * 60
|
||||
elif "second" in words[1]:
|
||||
time += int(words[0])
|
||||
|
||||
try:
|
||||
if "second" in words[3]:
|
||||
time += int(words[2])
|
||||
elif "minute" in words[3]:
|
||||
time += int(words[2]) * 60
|
||||
except IndexError:
|
||||
pass
|
||||
|
||||
return time
|
||||
|
||||
|
||||
def get_readable_duration(total_seconds: int) -> str:
|
||||
"""Get readable time duration string from total seconds"""
|
||||
hours, rem = divmod(total_seconds, 3600)
|
||||
minutes, rem = divmod(rem, 60)
|
||||
seconds = rem
|
||||
|
||||
output = []
|
||||
if hours > 0:
|
||||
output.append(f"{hours} hour{'s' if hours > 1 else ''}")
|
||||
if minutes > 0:
|
||||
output.append(f"{minutes} minute{'s' if minutes > 1 else ''}")
|
||||
if seconds > 0:
|
||||
output.append(f"{seconds} second{'s' if seconds > 1 else ''}")
|
||||
|
||||
if len(output) > 1:
|
||||
output.insert(-1, "and")
|
||||
|
||||
return " ".join(output)
|
||||
|
||||
|
||||
def get_packages() -> list[CompiledPackage]:
|
||||
"""Obtain compilation times for every compiled package"""
|
||||
x = subprocess.run(
|
||||
"sudo genlop -nlt",
|
||||
stdout=subprocess.PIPE,
|
||||
shell=True
|
||||
)
|
||||
txt = x.stdout.decode("utf-8")
|
||||
|
||||
# Cleanup the output
|
||||
txt = txt.replace("* packages merged:\n\n", "")
|
||||
txt = txt.replace("merge time: ", "")
|
||||
txt = txt.replace("and ", "")
|
||||
txt = txt.replace(".", "")
|
||||
|
||||
# Remove indents
|
||||
clean_lines = [line.lstrip() for line in txt.split("\n")]
|
||||
txt = "\n".join(clean_lines)
|
||||
|
||||
# Store (package name, date, compile time) for each package
|
||||
packages = []
|
||||
for pkg_txt in txt.split("\n\n"):
|
||||
if len(pkg_txt) == 0:
|
||||
continue
|
||||
|
||||
pkg_lines = pkg_txt.split("\n")
|
||||
|
||||
date, name = pkg_lines[0].split(" >>> ")
|
||||
time = parse_time(pkg_lines[1])
|
||||
date = datetime.strptime(date, "%a %b %d %H:%M:%S %Y")
|
||||
|
||||
pkg = CompiledPackage(name, date, time)
|
||||
packages.append(pkg)
|
||||
|
||||
return packages
|
||||
|
||||
|
||||
def get_compile_time(package_amount: int) -> int:
|
||||
"""Get compilation time of last n specified packages (seconds)"""
|
||||
packages = get_packages()
|
||||
last_packages = packages[-package_amount:]
|
||||
return sum(package.compile_time for package in last_packages)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
try:
|
||||
package_amt = int(sys.argv[1])
|
||||
except IndexError:
|
||||
print("Missing required argument: package amount")
|
||||
except TypeError:
|
||||
print("Argument must be a number (package amount)")
|
||||
else:
|
||||
time = get_compile_time(package_amt)
|
||||
print(get_readable_duration(time))
|
||||
|
|
@ -1,299 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
# Parse arguments
|
||||
# ------------------------------------------------------------------------------------
|
||||
ALL=0
|
||||
VERBOSE=0
|
||||
VERY_VERBOSE=0
|
||||
VERY_VERY_VERBOSE=0
|
||||
TEMP_SHOW=0
|
||||
DRY_RUN=0
|
||||
NO_CACHE=0
|
||||
NO_DISPLAY=0
|
||||
URGENCY="normal"
|
||||
RESET=0
|
||||
while [ "$1" ]; do
|
||||
case "$1" in
|
||||
-h | --help)
|
||||
cat << EOF
|
||||
gh-notification is a tool that scrapes unread github notifications
|
||||
It uses github-cli with meiji163/gh-notify addon to obtain the unread notifications
|
||||
these are then parsed and sent as desktop notifications with notify-send
|
||||
|
||||
Options:
|
||||
-a | --all: Also process already read notifications
|
||||
-t | --temp-files: Show names of used temporary files for each notification
|
||||
-v | --verbose: Shows info about what's happening.
|
||||
-vv | --very-verbose: Implies --verbose, shows some more info about what's happening
|
||||
-vvv | --very-very-verbose: Implies --very-verbose and --temp-files, shows even more details, usually just for debugging
|
||||
-d | --dry-run: Run without sending any notificatinos, when ran with -r, this will also prevent any actual cache file removals
|
||||
-nc | --no-cache: Ignore the cache and send all found notifications, even if they were already sent before.
|
||||
-nd | --no-display: When the script is ran from headless mode (such as by crontab), this will still attempt to set the DISPLAY and send the desktop notification
|
||||
-r | --reset: Resets notification cache (storing which notifications were already sent), skips notification sending, WARNING: removes the whole cache, regardless of '--all')
|
||||
-u | --urgency [urgency-level]: pass over notify-send urgency attribute (low, normal, critical)
|
||||
EOF
|
||||
exit 0
|
||||
;;
|
||||
-a | --all)
|
||||
ALL=1
|
||||
;;
|
||||
-t | --temp-files)
|
||||
TEMP_SHOW=1
|
||||
;;
|
||||
-v | --verbose)
|
||||
VERBOSE=1
|
||||
;;
|
||||
-vv | --very-verbose)
|
||||
VERBOSE=1
|
||||
VERY_VERBOSE=1
|
||||
;;
|
||||
-vvv | --very-very-verbose)
|
||||
VERBOSE=1
|
||||
TEMP_SHOW=1
|
||||
VERY_VERBOSE=1
|
||||
VERY_VERY_VERBOSE=1
|
||||
;;
|
||||
-d | --dry-run)
|
||||
DRY_RUN=1
|
||||
;;
|
||||
-nc | --no-cache)
|
||||
NO_CACHE=1
|
||||
;;
|
||||
-nd | --no-display)
|
||||
NO_DISPLAY=1
|
||||
;;
|
||||
-u | --urgency)
|
||||
URGENCY="$2"
|
||||
shift
|
||||
;;
|
||||
-r | --reset)
|
||||
RESET=1
|
||||
;;
|
||||
* )
|
||||
echo "Unknown argument '$1', use -h or --help for help"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
|
||||
# Perform cache resetting, if requested
|
||||
# ------------------------------------------------------------------------------------
|
||||
if [ $RESET -eq 1 ]; then
|
||||
if [ $NO_CACHE -eq 1 ]; then
|
||||
echo "Can't ignore cache when resetting the cache..."
|
||||
exit 1
|
||||
fi
|
||||
out="$(find /tmp -maxdepth 1 -name 'gh-notification-*' 2>/dev/null)"
|
||||
total="$(printf "%s\n" "$out" | wc -l)"
|
||||
# Since we always end with a newline (to count the last entry as a line), we always get
|
||||
# at least 1 as a total here, even if $out is empty. If we didn't use the \n, we'd always
|
||||
# get 0, even if there was a single line, since it wasn't ended with a newline. To figure
|
||||
# out whether there really is a line or not when we get a total of 1, we run character
|
||||
# amount check as well
|
||||
[ "$total" -eq 1 ] && [ "$(printf "%s" "$out" | wc -c)" -eq 0 ] && total=0
|
||||
|
||||
if [ $total -gt 0 ]; then
|
||||
# Since the loop is running in a pipe, it can't modify variables, but we need to know
|
||||
# which files have failed to be removed, so to get that information, we store it in a
|
||||
# teporary file
|
||||
fail_files_file="$(mktemp)"
|
||||
|
||||
printf "%s\n" "$out" | while read -r file_name; do
|
||||
# If desired, let user know about the found notification cache file
|
||||
if [ $VERY_VERBOSE -eq 1 ] || [ $TEMP_SHOW -eq 1 ]; then
|
||||
contents="$(cat "$file_name")"
|
||||
title="$(printf "%s" "$contents" | awk -F '~@~' '{ print $1 }')"
|
||||
|
||||
echo "Found cache tempfile: '$file_name' - $title"
|
||||
if [ $VERY_VERY_VERBOSE -eq 1 ]; then
|
||||
description="$(printf "%s" "$contents" | awk -F '~@~' '{ print $2 }')"
|
||||
echo "Notification description: $description"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ $DRY_RUN -ne 1 ]; then
|
||||
# In case `rm` fails, keep track of which files it failed on
|
||||
if ! rm "$file_name" 2>/dev/null; then
|
||||
printf "%s\n" "$file_name" >> "$fail_files_file"
|
||||
fi
|
||||
else
|
||||
[ $VERY_VERY_VERBOSE -eq 1 ] && echo "Tempfile removal skipped (dry-run)"
|
||||
fi
|
||||
|
||||
# Add a new-line separator on very very verbose to group prints from each iteration
|
||||
[ $VERY_VERY_VERBOSE -eq 1 ] && echo ""
|
||||
done
|
||||
|
||||
# Recover failed files from the temporary file
|
||||
failed_files="$(cat "$fail_files_file")"
|
||||
failed="$(printf "%s" "$fail_files_file" | wc -l)"
|
||||
rm "$fail_files_file"
|
||||
|
||||
if [ $VERBOSE -eq 1 ]; then
|
||||
echo "Notification cache was reset."
|
||||
removed_count="$(("$total"-"$failed"))"
|
||||
if [ $DRY_RUN -eq 1 ]; then
|
||||
echo "Removed $removed_count files (dry-run: no files were actually removed)"
|
||||
else
|
||||
echo "Removed $removed_count files"
|
||||
fi
|
||||
fi
|
||||
|
||||
# If some cache files were'nt removed successfully, inform the user about it
|
||||
# regardless of verbosity, this shouldn't go silent, even though it may be fine
|
||||
if [ "$failed" -gt 0 ]; then
|
||||
echo "WARNING: Failed to remove $failed files."
|
||||
echo "You probably don't have permission to remove these."
|
||||
echo "Perhaps these were made by someone else? If so, you can ignore this warning."
|
||||
if [ $VERBOSE -eq 0 ]; then
|
||||
echo "Run with --verbose to show exactly which files weren't removed."
|
||||
else
|
||||
echo "These are:"
|
||||
echo "$failed_files"
|
||||
fi
|
||||
fi
|
||||
else
|
||||
[ $VERBOSE -eq 1 ] && echo "No cache files found, nothing to reset"
|
||||
fi
|
||||
exit 0
|
||||
fi
|
||||
|
||||
|
||||
# Helper functins
|
||||
# ------------------------------------------------------------------------------------
|
||||
# This runs notify-send, and if NO_DISPLAY is set and we're running in headless
|
||||
# mode, this will still try to send the notification by manually setting DISPLAY
|
||||
# This also has a special handle that checks if dunst is the notification daemon
|
||||
# in which case instead of using notify-send, we use dunstify to send the
|
||||
# notification, with which we can also specify some more values.
|
||||
send_notify() {
|
||||
if [ $NO_DISPLAY -eq 1 ]; then
|
||||
XDG_RUNTIME_DIR="/run/user/$(id -u)" \
|
||||
DISPLAY=:0 \
|
||||
notify-send --app-name=github-notification --urgency="$URGENCY" "$1" "$2"
|
||||
else
|
||||
notify-send --app-name=github-notification --urgency="$URGENCY" "$1" "$2"
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
# Obtain notifications and show them, if they weren't showed (aren't in cache) already
|
||||
# ------------------------------------------------------------------------------------
|
||||
# Request unread notifications with gh-notify extension for github-cli
|
||||
[ "$ALL" -eq 1 ] && out="$(gh notify -s -a)" || out="$(gh notify -s)"
|
||||
total="$(printf "%s\n" "$out" | wc -l)"
|
||||
# Since we always end with a newline (to count the last entry as a line), we always get
|
||||
# at least 1 as a total here, even if $out is empty. If we didn't use the \n, we'd always
|
||||
# get 0, even if there was a single line, since it wasn't ended with a newline. To figure
|
||||
# out whether there really is a line or not when we get a total of 1, we run character
|
||||
# amount check as well
|
||||
[ "$total" -eq 1 ] && [ "$(printf "%s" "$out" | wc -c)" -eq 0 ] && total=0
|
||||
|
||||
# Only run if we actually found some notifications
|
||||
if [ "$total" -gt 0 ]; then
|
||||
# Since the loop is running in a pipe, it can't modify variables, but we need to know
|
||||
# how many notifications were sent, so to ge that information, we store it in a
|
||||
# temporary file
|
||||
sent_count_file="$(mktemp)"
|
||||
printf "0" > "$sent_count_file"
|
||||
|
||||
# Go through each notification, one by one
|
||||
printf "%s\n" "$out" | while read -r line; do
|
||||
# Parse out the data from given output lines
|
||||
issue_type="$(echo "$line" | awk '{print $4}' | sed 's/\x1b\[[0-9;]*m//g')"
|
||||
repo_id="$(echo "$line" | awk '{print $3}' | sed 's/\x1b\[[0-9;]*m//g')"
|
||||
|
||||
|
||||
if [ "$issue_type" == "PullRequest" ]; then
|
||||
issue_id="$(echo "$line" | awk '{print $5}' | sed 's/\x1b\[[0-9;]*m//g' | cut -c2-)"
|
||||
description="$(echo "$line" | awk '{for (i=6; i<NF; i++) printf $i " "; print $NF}' | sed 's/\x1b\[[0-9;]*m//g')"
|
||||
name="$repo_id ($issue_type #$issue_id)"
|
||||
|
||||
url="https://github.com/$repo_id/pull/$issue_id"
|
||||
elif [ "$issue_type" == "Issue" ]; then
|
||||
issue_id="$(echo "$line" | awk '{print $5}' | sed 's/\x1b\[[0-9;]*m//g' | cut -c2-)"
|
||||
description="$(echo "$line" | awk '{for (i=6; i<NF; i++) printf $i " "; print $NF}' | sed 's/\x1b\[[0-9;]*m//g')"
|
||||
name="$repo_id ($issue_type #$issue_id)"
|
||||
|
||||
url="https://github.com/$repo_id/issues/$issue_id"
|
||||
elif [ "$issue_type" == "Release" ]; then
|
||||
# There's no issue ID with github releases, they just have a title
|
||||
# this means if the name is the same, they will be treated as the same release
|
||||
# and they could end up being ignored, this could be fixed by using github API and
|
||||
# searching for that release's commit, but that's too much work here for little benefit
|
||||
description="$(echo "$line" | awk '{for (i=5; i<NF; i++) printf $i " "; print $NF}' | sed 's/\x1b\[[0-9;]*m//g')"
|
||||
name="$repo_id ($issue_type)"
|
||||
|
||||
# Because we don't know the tag or commit ID, best we can do is use the page for all releases
|
||||
# the new release will be the first one there anyway
|
||||
url="https://github.com/$repo_id/releases"
|
||||
else
|
||||
echo "Unknown issue type: '$issue_type'!"
|
||||
echo "Can't construct URL, falling back to just repository URL."
|
||||
echo "Please report this issue to ItsDrike/dotfiles repository."
|
||||
url="https://github.com/$repo_id"
|
||||
fi
|
||||
|
||||
[ $VERY_VERBOSE -eq 1 ] && echo "Found notification $name"
|
||||
[ $VERY_VERY_VERBOSE -eq 1 ] && echo "Description: $description"
|
||||
[ $VERY_VERY_VERBOSE -eq 1 ] && echo "Constructed url: $url"
|
||||
|
||||
# Create hash from the name and description and use it to construct
|
||||
# a path to a temporary file
|
||||
# To keep this POSIX compliant, we can't use <<< to feed a string to the
|
||||
# sum function, so we're using another temporary file which is then removed
|
||||
temp_file="$(mktemp)"
|
||||
printf "$name$description" > "$temp_file"
|
||||
hashsum="$(sum < "$temp_file" | cut -f 1 -d ' ')"
|
||||
rm "$temp_file"
|
||||
|
||||
tmpname="/tmp/gh-notification-$hashsum"
|
||||
[ $TEMP_SHOW -eq 1 ] && echo "Tempfile: $tmpname"
|
||||
|
||||
# If the temporary file is already present, this notification was already
|
||||
# send and we don't want to re-send it
|
||||
|
||||
# Only sent the notification if it wasn't already cached (doesn't have temp file)
|
||||
# this avoids resending the same notifications
|
||||
if [ ! -e "$tmpname" ] || [ $NO_CACHE -eq 1 ]; then
|
||||
if [ $DRY_RUN -eq 1 ]; then
|
||||
[ $VERY_VERBOSE -eq 1 ] && echo "Sending notification (dry-run, no actual notification was sent)"
|
||||
else
|
||||
[ $VERY_VERBOSE -eq 1 ] && echo "Sending notification"
|
||||
send_notify "$name" "$description <$url>"
|
||||
# Create the tempfile so that in the next run, we won't resend this notification again
|
||||
# NOTE: We're storing the name and description into this file to make it easier
|
||||
# to figure out what notification the tempfile belongs to, with ~@~ separator
|
||||
printf "%s~@~%s" "$name" "$description" > "$tmpname"
|
||||
fi
|
||||
# Keep track of how many notifications were sent (didn't have a cache file)
|
||||
sent="$(cat "$sent_count_file")"
|
||||
sent="$(("$sent"+1))"
|
||||
printf "%s" "$sent" > "$sent_count_file"
|
||||
else
|
||||
[ $VERY_VERBOSE -eq 1 ] && echo "Skipping (cached) - notification already sent"
|
||||
fi
|
||||
|
||||
# Add a new-line separator on very verbose to group prints from each iteration
|
||||
[ $VERY_VERBOSE -eq 1 ] && echo ""
|
||||
done
|
||||
|
||||
# Recover amount of sent notifications from the temporary file
|
||||
sent="$(cat "$sent_count_file")"
|
||||
rm "$sent_count_file"
|
||||
|
||||
if [ $VERBOSE -eq 1 ]; then
|
||||
unsent="$(("$total"-"$sent"))"
|
||||
if [ "$sent" -eq "$total" ]; then
|
||||
echo "Found and sent $total new notifications"
|
||||
elif [ "$unsent" -eq "$total" ]; then
|
||||
echo "Found $total notifications, all of which were already sent (no new notifications to send)"
|
||||
else
|
||||
echo "Found $total notifications, of which $sent were new and sent ($unsent were skipped - cached/already sent)"
|
||||
fi
|
||||
fi
|
||||
else
|
||||
[ $VERBOSE -eq 1 ] && echo "No new notifications"
|
||||
fi
|
|
@ -1,24 +0,0 @@
|
|||
#!/bin/sh
|
||||
set -e
|
||||
|
||||
if [ -n "$DISPLAY" ]; then
|
||||
export FIFO_UEBERZUG="${TMPDIR:-/tmp}/lf-ueberzug-$$"
|
||||
|
||||
cleanup() {
|
||||
exec 3>&-
|
||||
rm "$FIFO_UEBERZUG"
|
||||
}
|
||||
|
||||
mkfifo "$FIFO_UEBERZUG"
|
||||
ueberzug layer -s <"$FIFO_UEBERZUG" &
|
||||
exec 3>"$FIFO_UEBERZUG"
|
||||
trap cleanup EXIT
|
||||
|
||||
if ! [ -d "$HOME/.cache/lf" ]; then
|
||||
mkdir -p "$HOME/.cache/lf"
|
||||
fi
|
||||
|
||||
lf "$@" 3>&-
|
||||
else
|
||||
exec lf "$@"
|
||||
fi
|
|
@ -1,44 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
if [ "$1" = "start" ]; then
|
||||
MODE="start"
|
||||
elif [ "$1" = "stop" ]; then
|
||||
MODE="stop"
|
||||
elif [ "$1" = "toggle" ]; then
|
||||
if pidof -s xss-lock > /dev/null 2>&1; then
|
||||
MODE="stop"
|
||||
else
|
||||
MODE="start"
|
||||
fi
|
||||
elif [ "$1" = "lock" ]; then
|
||||
MODE="lock"
|
||||
else
|
||||
echo "Invalid command usage, use: lockscreen [start/stop/toggle/lock]"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ "$MODE" = "start" ]; then
|
||||
echo "Starting xss-lock"
|
||||
# Set X11 lockscreen delays (DPMS)
|
||||
xset s on
|
||||
xset s 600 10 # Dim screen after 10 minutes, lock 10s later
|
||||
|
||||
# XSS lock with xsecurelock
|
||||
xss-lock -n /usr/lib/xsecurelock/dimmer -l -- xsecurelock &
|
||||
elif [ "$MODE" = "stop" ]; then
|
||||
echo "Stopping xss-lock"
|
||||
# Remove X11 lockscreen delays (DPMS)
|
||||
xset s off
|
||||
# Stop XSS lock
|
||||
killall xss-lock
|
||||
elif [ "$MODE" = "lock" ]; then
|
||||
# Send a DPMS trigger if xss-lock is running to inform it
|
||||
# about the lockstate, if it's not running, run xsecurelock directly
|
||||
if pidof -s xss-lock > /dev/null 2>&1; then
|
||||
echo "Locking screen - using DPMS (xss-lock active)"
|
||||
xset s activate
|
||||
else
|
||||
echo "Locking screen - running xsecurelock directly (xss-lock isn't running)"
|
||||
xsecurelock
|
||||
fi
|
||||
fi
|
|
@ -1,30 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
# This script does the following:
|
||||
# Run by itself, set the wallpaper
|
||||
# If given a file, set that as the new wallpaper
|
||||
# If given a directory, recursively choose a random file in it.
|
||||
|
||||
# Location of the symlink to wallpaper image
|
||||
bgloc="${XDG_DATA_HOME:-$HOME/.local/share}/background"
|
||||
|
||||
trueloc="$(readlink -f "$1")" &&
|
||||
case "$(file --mime-type -b "$trueloc")" in
|
||||
image/* )
|
||||
ln -sf "$(readlink -f "$1")" "$bgloc"
|
||||
notify-send -i "$bgloc" "Changing wallpaper..."
|
||||
;;
|
||||
inode/directory )
|
||||
randimg="$(find -L $trueloc -iregex '.*.\(jpg\|jpeg\|png\|gif\)' -type f | shuf -n 1)"
|
||||
echo $randimg
|
||||
ln -sf "$randimg" "$bgloc"
|
||||
notify-send -i "$bgloc" "Random Wallpaper chosen."
|
||||
;;
|
||||
*)
|
||||
notify-send "Error" "Not a valid image."
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
# Use xwallpaper to set the background
|
||||
xwallpaper --zoom "$bgloc"
|
|
@ -1,26 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
#original artwork by http://www.sanderfocus.nl/#/portfolio/tech-heroes
|
||||
#converted to shell by #nixers @ irc.unix.chat
|
||||
|
||||
cat << 'eof'
|
||||
[38;5;255m,_ ,_==▄▂[0m
|
||||
[38;5;255m, ▂▃▄▄▅▅[48;5;240m▅[48;5;20m▂[48;5;240m▅¾[0m. [38;5;199m/ [38;5;20m/[0m
|
||||
[38;5;255m[48;5;20m▄[0m[38;5;255m[48;5;199m▆[38;5;16m[48;5;255m<´ [38;5;32m"[38;5;34m»[38;5;255m▓▓[48;5;32m▓[48;5;240m%[0m\ [38;5;199m/ [38;5;20m/ [38;5;45m/ [38;5;118m/[0m
|
||||
[38;5;255m,[38;5;255m[48;5;240m▅[38;5;16m[48;5;255m7" [38;5;160m´[38;5;34m>[38;5;255m[48;5;39m▓▓[38;5;199m[48;5;255m▓[0m[38;5;255m% [38;5;20m/ [38;5;118m/ [38;5;199m> [38;5;118m/ [38;5;199m>[38;5;255m/[38;5;45m%[0m
|
||||
[38;5;255m▐[48;5;240m[38;5;255m¶[48;5;240m[38;5;255m▓[48;5;255m [38;5;196m,[38;5;34m»[48;5;201m[38;5;255m▓▓[0m[38;5;255m¾´[0m [38;5;199m/[38;5;255m> %[38;5;199m/[38;5;118m%[38;5;255m/[38;5;199m/ [38;5;45m/ [38;5;199m/[0m
|
||||
[38;5;255m[48;5;240m▓[48;5;255m[38;5;16m▃[48;5;16m[38;5;255m▅▅[38;5;16m[48;5;255m▅▃,,[38;5;32m▄[38;5;16m▅[38;5;255m[48;5;16m▅▅[38;5;255m[48;5;20mÆ[0m[38;5;255m\[0m[38;5;20m/[38;5;118m/[38;5;255m /[38;5;118m/[38;5;199m/[38;5;255m>[38;5;45m// [38;5;255m/[38;5;118m>[38;5;199m/ [38;5;20m/[0m
|
||||
[48;5;20m[38;5;255mV[48;5;255m[38;5;16m║[48;5;20m[38;5;255m«[0m[38;5;255m¼.;[48;5;240m[38;5;255m→[48;5;255m[38;5;16m ║[0m[38;5;255m<«.,[48;5;25m[38;5;255m`[48;5;240m=[0m[38;5;20m/[38;5;199m/ [38;5;255m/>[38;5;45m/[38;5;118m/[38;5;255m%/[38;5;199m% / [38;5;20m/[0m
|
||||
[38;5;20m//[48;5;255m[38;5;16m╠<´ -²,)[48;5;16m[38;5;255m(▓[48;5;255m[38;5;16m~"-[38;5;199m╝/[0m[38;5;255m¾[0m[38;5;199m/ [38;5;118m%[38;5;255m/[38;5;118m>[38;5;45m/ [38;5;118m/[38;5;199m>[0m
|
||||
[38;5;20m/ / [38;5;118m/ [48;5;20m[38;5;255m▐[48;5;240m[38;5;16m%[48;5;255m -./▄▃▄[48;5;16m[38;5;255m▅[48;5;255m[38;5;16m▐[48;5;255m[38;5;16m, [38;5;199m/[48;5;199m[38;5;255m7[0m[38;5;20m/[38;5;199m/[38;5;255m;/[38;5;199m/[38;5;118m% [38;5;20m/ /[0m
|
||||
[38;5;20m/ [38;5;199m/[38;5;255m/[38;5;45m/[38;5;118m/[38;5;255m[48;5;240m`[48;5;20m[38;5;255m▌[48;5;20m[38;5;255m▐[48;5;255m[38;5;16m %z[0m[38;5;255mWv xX[48;5;20m[38;5;255m▓[48;5;34m[38;5;255m▇[48;5;199m[38;255m▌[0m[38;5;20m/[38;5;199m/[38;5;255m&;[38;5;20m% [38;5;199m/ [38;5;20m/[0m
|
||||
[38;5;20m/ / [38;5;255m/ [38;5;118m%[38;5;199m/[38;5;255m/%/[48;5;240m[38;5;255m¾[48;5;255m[38;5;16m½´[38;5;255m[48;5;16m▌[0m[38;5;246m▃▄[38;5;255m▄▄[38;5;246m▄▃▃[0m[48;5;16m[38;5;255m▐[38;5;255m[48;5;199m¶[48;5;20m[38;5;255m\[0m[38;5;20m/[0m[48;5;255m[38;5;240m&[0m [38;5;20m/[0m
|
||||
[38;5;199m<[38;5;118m/ [38;5;45m/[38;5;255m</[38;5;118m%[38;5;255m/[38;5;45m/[38;5;255m`[48;5;16m▓[48;5;255m[38;5;16m![48;5;240m[38;5;255m%[48;5;16m[38;5;255m▓[0m[38;5;255m%[48;5;240m[38;5;255m╣[48;5;240m[38;5;255;╣[0m[38;5;255mW[0m[38;5;250mY<Y)[48;5;255m[38;5;16my&[0m[38;5;255m/`[48;5;240m\[0m
|
||||
[38;5;20m/ [38;5;199m/ [38;5;199m%[38;5;255m/%[38;5;118m/[38;5;45m/[38;5;255m<[38;5;118m/[38;5;199m%[38;5;45m/[38;5;20m/[48;5;240m[38;5;255m\[38;5;16m[48;5;255mi7; ╠N[0m[38;5;246m>[38;5;255m)VY>[48;5;240m[38;5;255m7[0m[38;5;255m; [38;5;255m[48;5;240m\[0m[38;5;255m_[0m [38;5;255mUNIX IS VERY SIMPLE [38;5;45mIT JUST NEEDS A[0m
|
||||
[38;5;20m/ [38;5;255m/[38;5;118m<[38;5;255m/ [38;5;45m/[38;5;255m/<[38;5;199m/[38;5;20m/[38;5;199m/[38;5;20m<[38;5;255m_/%\[38;5;255m[48;5;16m▓[48;5;255m[38;5;16m V[0m[38;5;255m%[48;5;255m[38;5;16mW[0m[38;5;255m%£)XY[0m [38;5;240m_/%[38;5;255m‾\_,[0m [38;5;45mGENIUS TO UNDERSTAND ITS SIMPLICITY[38;5;255m[0m
|
||||
[38;5;199m/ [38;5;255m/ [38;5;199m/[38;5;255m/[38;5;118m%[38;5;199m/[48;5;240m[38;5;255m_,=-[48;5;20m-^[0m[38;5;255m/%/%%[48;5;255m[38;5;16m\¾%[0m[38;5;255m¶[0m[48;5;255m[38;5;16m%[0m[38;5;255m%}[0m [38;5;240m/%%%[38;5;20m%%[38;5;240m%;\,[0m
|
||||
[38;5;45m%[38;5;20m/[38;5;199m< [38;5;20m/[48;5;20m[38;5;255m_/[48;5;240m [0m[38;5;255m%%%[38;5;240m%%[38;5;20m;[38;5;255mX[38;5;240m%[38;5;20m%[38;5;255m\%[38;5;240m%;, _/%%%;[38;5;20m,[38;5;240m \[0m
|
||||
[38;5;118m/ [38;5;20m/ [38;5;240m%[38;5;20m%%%%[38;5;240m%;, [38;5;255m\[38;5;240m%[38;5;20m%[38;5;255ml[38;5;240m%%;// _/[38;5;20m%;,[0m [38;5;234mdmr[0m
|
||||
[38;5;20m/ [38;5;240m%[38;5;20m%%;,[0m [38;5;255m<[38;5;20m;[38;5;240m\-=-/ /[0m
|
||||
[38;5;20m;,[0m [38;5;240ml[0m
|
||||
eof
|
|
@ -1,54 +0,0 @@
|
|||
#!/bin/sh
|
||||
set -e
|
||||
if [[ $(id -u) -ne 0 ]] ; then echo "Please run as root" ; exit 1 ; fi
|
||||
|
||||
echo "Setting up Noto Emoji font..."
|
||||
# Install noto-fonts-emoji repository as the basic emoji font
|
||||
pacman -S noto-fonts-emoji --needed
|
||||
# Install powerline-fonts for powerline statusline
|
||||
pacman -S powerline-fonts --needed
|
||||
echo "Font packages installed, setting up font-config"
|
||||
# Make sure noto emojis are preferred font /etc/fonts/local.conf
|
||||
# another way to do this would be to manually figure out the number and use /etc/fonts/conf.d/01-notosans.conf
|
||||
# note that the `01` might be too agressive and override other fonts, it is therefore easier to just use `local.conf`
|
||||
# if you still want to use the manual numbered representation, make sure to store the file into /etc/fonts/conf.avail/XX-notosans.conf
|
||||
# from which you will then make a symlink pointing to /etc/fonts/conf.d (same name)
|
||||
echo '<?xml version="1.0"?>
|
||||
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
|
||||
<fontconfig>
|
||||
<alias>
|
||||
<family>sans-serif</family>
|
||||
<prefer>
|
||||
<family>Noto Sans</family>
|
||||
<family>Noto Color Emoji</family>
|
||||
<family>Noto Emoji</family>
|
||||
<family>DejaVu Sans</family>
|
||||
</prefer>
|
||||
</alias>
|
||||
|
||||
<alias>
|
||||
<family>serif</family>
|
||||
<prefer>
|
||||
<family>Noto Serif</family>
|
||||
<family>Noto Color Emoji</family>
|
||||
<family>Noto Emoji</family>
|
||||
<family>DejaVu Serif</family>
|
||||
</prefer>
|
||||
</alias>
|
||||
|
||||
<alias>
|
||||
<family>monospace</family>
|
||||
<prefer>
|
||||
<family>Noto Mono</family>
|
||||
<family>Noto Color Emoji</family>
|
||||
<family>Noto Emoji</family>
|
||||
<family>DejaVu Sans Mono</family>
|
||||
</prefer>
|
||||
</alias>
|
||||
</fontconfig>
|
||||
|
||||
' > /etc/fonts/local.conf
|
||||
# Update font cache
|
||||
fc-cache -f
|
||||
echo "Noto Emoji Font installed! You will need to restart application to see changes."
|
||||
|
|
@ -1,7 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
# Fix camera autofocus and exposure
|
||||
v4l2-ctl -d /dev/video0 --set-ctrl=focus_auto=0
|
||||
v4l2-ctl -d /dev/video0 --set-ctrl=exposure_auto=3
|
||||
v4l2-ctl -d /dev/video0 --set-ctrl=sharpness=150
|
||||
v4l2-ctl -d /dev/video0 --set-ctrl=exposure_auto_priority=0
|
|
@ -1,21 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
# This script will create a virtual microphone for PulseAudio to use and set it as the default device.
|
||||
|
||||
# Load the "module-pipe-source" module to read audio data from a FIFO special file.
|
||||
echo "Creating virtual microphone."
|
||||
pactl load-module module-pipe-source source_name=virtmic file=$HOME/.config/pulse/audioFiles/virtmic format=s16le rate=16000 channels=1
|
||||
|
||||
# Set the virtmic as the default source device.
|
||||
echo "Set the virtual microphone as the default device."
|
||||
pactl set-default-source virtmic
|
||||
|
||||
# Create a file that will set the default source device to virtmic for all
|
||||
PulseAudio client applications.
|
||||
echo "default-source = virtmic" > $HOME/.config/pulse/client.conf
|
||||
|
||||
# Write the audio file to the named pipe virtmic. This will block until the named pipe is read.
|
||||
echo "Writing audio file to virtual microphone."
|
||||
while true; do
|
||||
ffmpeg -re -i input.wav -f s16le -ar 16000 -ac 1 - > $HOME/.config/pulse/audioFiles/virtmic
|
||||
done
|
|
@ -1,7 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
# Uninstall the virtual microphone.
|
||||
|
||||
pactl unload-module module-pipe-source
|
||||
rm $HOME/.config/pulse/client.conf
|
||||
|
Binary file not shown.
|
@ -1,40 +0,0 @@
|
|||
/* usbreset -- send a USB port reset to a USB device */
|
||||
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
#include <fcntl.h>
|
||||
#include <errno.h>
|
||||
#include <sys/ioctl.h>
|
||||
|
||||
#include <linux/usbdevice_fs.h>
|
||||
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
const char *filename;
|
||||
int fd;
|
||||
int rc;
|
||||
|
||||
if (argc != 2) {
|
||||
fprintf(stderr, "Usage: usbreset device-filename\n");
|
||||
return 1;
|
||||
}
|
||||
filename = argv[1];
|
||||
|
||||
fd = open(filename, O_WRONLY);
|
||||
if (fd < 0) {
|
||||
perror("Error opening output file");
|
||||
return 1;
|
||||
}
|
||||
|
||||
printf("Resetting USB device %s\n", filename);
|
||||
rc = ioctl(fd, USBDEVFS_RESET, 0);
|
||||
if (rc < 0) {
|
||||
perror("Error in ioctl");
|
||||
return 1;
|
||||
}
|
||||
printf("Reset successful\n");
|
||||
|
||||
close(fd);
|
||||
return 0;
|
||||
}
|
|
@ -1,6 +0,0 @@
|
|||
# Enter passsword via terminal, instead of using a graphical window
|
||||
pinentry-mode loopback
|
||||
# Specify my default key that will be used for signing
|
||||
default-key 7583ABA897FC6728DCAF823FB014E761034AF742
|
||||
# Specify my preferred default keyserver
|
||||
keyserver keys.openpgp.org
|
|
@ -1 +0,0 @@
|
|||
.config/mozilla
|
|
@ -1 +0,0 @@
|
|||
.config/x11/xprofile
|
|
@ -1 +0,0 @@
|
|||
.config/zsh/.zshenv
|
187
packages.yaml
187
packages.yaml
|
@ -1,187 +0,0 @@
|
|||
pacman:
|
||||
# Common
|
||||
- base-devel # A set of tools needed for building pkgs
|
||||
- git # Version control system
|
||||
- neovim # Text editor (modern version of VIM)
|
||||
- sudo # Execute commands as root from unprivilledged user
|
||||
- networkmanager # Easy way to manage network connections, especially for WiFi
|
||||
- man-db # A utility for reading manpages
|
||||
- rsync # Fast tool for copying/syncing files
|
||||
- cronie # Run programs at specified time
|
||||
- zsh # Modern system shell
|
||||
|
||||
# System
|
||||
#- kexec-tools # Kexec allows directly booting into a new kernel
|
||||
|
||||
# CLI
|
||||
- exa # Colored LS
|
||||
- bat # Colored cat with tons of cool options
|
||||
- dust # User readable du to find biggest dirs/files
|
||||
- tldr # Shorter help pages, if man is too long
|
||||
- hyperfine # Command benchmark (times command executions)
|
||||
- abduco # Terminal session manager
|
||||
- mlocate # System indexing and quick file searching
|
||||
- pkgfile # Pacman metadata explorer
|
||||
- pacman-contrib # Includes multiple additional tools related to pacman
|
||||
- reflector # Tool to manage pacman mirror list
|
||||
- lshw # List hardware components and their attributes
|
||||
- lsof # List open files for running Unix process
|
||||
- trash-cli # Trash interraction (rather than permanent removal)
|
||||
#- libfaketime # Simulate different time for single command
|
||||
#- figlet # generate ascii text banners in terminal
|
||||
#- neofetch # Show information about system in a terminal
|
||||
#- onefetch # Show information about git repo in a terminal
|
||||
#- asciinema # Record terminal with copy-able playback
|
||||
|
||||
# TUI
|
||||
- ncdu # Find largest folders (size)
|
||||
- calcurse # Terminal calendar with todo
|
||||
- bpytop # Modern system resource monitor
|
||||
- w3m # Terminal text-only web browser
|
||||
- newsboat # Terminal RSS feed reader
|
||||
|
||||
# Networking/Internet
|
||||
- httpie # Obtaining http info from webpages
|
||||
- dnsutils # Tools for managing DNS
|
||||
- net-tools # Configuration tools for linux networking
|
||||
- whois # CLI for the WHOIS directory service (RFC 3912) protocol
|
||||
#- sshuttle # Transparent proxy server that forwards all TCP packets over SSH
|
||||
#- vnstat # Tool for monitoring network traffic (speed and total data transfered)
|
||||
|
||||
# Media
|
||||
- imagemagick # Terminal image manipulation
|
||||
- mediainfo # Show info about media files (videos/photos)
|
||||
- youtube-dl # Tool for easy downloading of youtube videos
|
||||
- ffmpegthumbs # FFmpeg based thumbnail creator for videos
|
||||
- ffmpegthumbnailer # Ffmpeg based thumbnail creator for file mgrs
|
||||
|
||||
# Security
|
||||
- arch-audit # Find installed packgaes with vulnerabilities (Similar to pkg-audit)
|
||||
- firejail # Sandboxing isolation tool
|
||||
- lynis # Security and System auditing tool
|
||||
- rkhunter # Check for the presence of rootkits and other unwanted tools.
|
||||
- apparmor # Mandantoy Access Control using Linux Security Module
|
||||
- audit # Collect system info about given events (requires audit=1 boot param)
|
||||
#- ufw # Uncomplicated firewall (I prefer application level FW like opensnitch)
|
||||
#- clamav # Anti-virus for Linux (usually only needed for servers)
|
||||
|
||||
# WM/Xorg
|
||||
- xorg-server # Xorg server implementation
|
||||
- xorg-xinit # Simple way to start X
|
||||
- xorg-xrandr # Manage multiple monitors in X
|
||||
- xorg-xsetroot # Customize appearance of X root
|
||||
- xorg-xev # Debug tool for printing contents of X events
|
||||
- xmonad # Window Manager written in haskell
|
||||
- xmonad-contrib # Additional tools for xmonad
|
||||
- xmobar # Panel built for xmonad
|
||||
- xdotool # X11 automation tool
|
||||
- trayer # System tray standalone panel
|
||||
- xsel # X11 clipboard manager (alternatively there's xclip)
|
||||
- clipmenu # A simple clipboard manager using dmenu and xsel
|
||||
- xsecurelock # Secure lockscreen
|
||||
- xss-lock # Using external locker as X screensaver
|
||||
- xwallpaper # Setting wallpaper in X
|
||||
- numlockx # Enabling numlock from terminal (used in xprofile)
|
||||
- dunst # Notification daemon
|
||||
- papirus-icon-theme # Breeze inspired icon theme
|
||||
- gnome-themes-extra # Gnome GTK themes (mainly Adwaita)
|
||||
#- redshift # Adjust the color temperature of your system based on location
|
||||
|
||||
# Audio
|
||||
- alsa-lib # Implementation of Linux sound support
|
||||
- alsa-utils # Utilities for alsa audio
|
||||
- pulseaudio # General purpose sound server
|
||||
- pulseaudio-alsa # ALSA configuration for PulseAudio
|
||||
- pulsemixer # CLI and curses mixer for PulseAudio
|
||||
|
||||
# GUI
|
||||
- alacritty # Terminal Emulator
|
||||
- mpv # Video player
|
||||
- nomacs # Photo viewer
|
||||
- pcmanfm # File manager
|
||||
- firefox # Browser
|
||||
- flameshot # Screenshot taking tool
|
||||
- obs-studio # Advanced video recording tool
|
||||
- lxappearance # GTK configuration
|
||||
- file-roller # Archive manipulator (allows opening .zip/.rar/.tar/... easily)
|
||||
- ueberzug # Embed images within a terminal
|
||||
- krita # Image editor (gimp alternative)
|
||||
- discord # Popular chat app
|
||||
- network-manager-applet # NetworkManager trayer icon
|
||||
|
||||
# Device mounting
|
||||
- udisks2 # Allows users to mount devices without root
|
||||
- udiskie # Auto-mounter using udisks2
|
||||
- gvfs # Allows using sftp:// in file managers like PcManFM
|
||||
|
||||
# Fonts
|
||||
- libxft
|
||||
- ttf-hack
|
||||
- ttf-joypixels
|
||||
- noto-fonts
|
||||
- noto-fonts-cjk
|
||||
- noto-fonts-emoji
|
||||
- ttf-font-awesome
|
||||
- ttf-jetbrains-mono
|
||||
|
||||
# Printer
|
||||
- cups # Daemon for printing
|
||||
- hplip # Tool to set-up HP printers
|
||||
- xsane # Scanning
|
||||
|
||||
# Bluetooth
|
||||
- bluez # Daemon for bluetooth protocol
|
||||
- bluz-utils # CLI utility for managing bluetooth connections
|
||||
- blueman # Graphical utility for managing bluetooth connections
|
||||
- pulseaudio-bluetooth # Bluetooth speaker/headphone support for PulseAudio
|
||||
|
||||
# Development
|
||||
- git-delta # Neat tool for showing git diffs and resolving merges
|
||||
- codespell # Spell checker for code files
|
||||
- github-cli # Manage multiple GitHub features from terminal
|
||||
- pyenv # Tool for easily managing python environments
|
||||
#- code # Open sourced version of vscode (doesn't have good extensions support)
|
||||
|
||||
aur:
|
||||
# System
|
||||
- mkinitcpio-numlock # Enable numlock in initramfs (before asking for encryption key)
|
||||
- topgrade # A tool to update entire system (pacman, yay, pip, npm, git, neovim, ...)
|
||||
|
||||
# CLI
|
||||
- pixterm # Convert images to ANSI colored blocks
|
||||
|
||||
# TUI
|
||||
- lf # Terminal file manager (ranger-like)
|
||||
|
||||
# Networking/Internet
|
||||
- ngrok # Forward your localhost without ip recovery
|
||||
- ipinfo-cli # Official cli tool for ipinfo (provides geolocation and other info about given IP)
|
||||
|
||||
# Security
|
||||
- opensnitch # Application level firewall with traffic monitoring (Alternatively, there's portmaster)
|
||||
|
||||
# WM/Xorg
|
||||
#- picom-git # Git version of picom compositor
|
||||
- picom-ibhagwan-git # Forked picom version with support for both rounded corner and dual_kawase blur
|
||||
- devour # WM agnostic window swallowing for terminals
|
||||
- xcursor-simp1e-breeze-snow # Breeze cursor theme
|
||||
|
||||
# GUI
|
||||
- spotify # Online music player
|
||||
- exodus # Software cryptocurrency wallet
|
||||
- qalculate-gtk-nognome # Calculator with thousands of features, there's also less powerful kde default's kcalc
|
||||
#- mailspring-libre # Beautiful and fast mail client without tracking
|
||||
|
||||
# Misc
|
||||
#- scrcpy # A way of seeing and controlling phone through a pc
|
||||
|
||||
# Fonts
|
||||
- nerd-fonts-complete
|
||||
|
||||
# Development
|
||||
- visual-studio-code-bin # Official vVsual Studio Code text editor for programmers
|
||||
#- code-marketplace # Enable the offical MS vscode marketplace for 'code' (code-oss)
|
||||
git:
|
||||
- https://aur.archlinux.org/yay-git.git # Pacman wrapper and AUR helper
|
||||
github-cli:
|
||||
- meiji163/gh-notify
|
|
@ -1,22 +0,0 @@
|
|||
# Filter file for rsync based backups
|
||||
# rsync needs to be ran with --filter 'dir-merge /.rsync-filter'
|
||||
# argument to look through this filter file
|
||||
- /dev/*
|
||||
- /proc/*
|
||||
- /sys/*
|
||||
- /media/*
|
||||
- /mnt/*
|
||||
- /tmp/*
|
||||
- /run/*
|
||||
- /var/run/*
|
||||
- /var/lock/*
|
||||
- /var/lib/docker/*
|
||||
- /var/lib/schroot/*
|
||||
- /lost+found
|
||||
- /data/*
|
||||
- /DATA/*
|
||||
- /cdrom/*
|
||||
- /sdcard/*
|
||||
- /swapfile
|
||||
- /swap/*
|
||||
- /home/*/.cache/*
|
|
@ -1,16 +0,0 @@
|
|||
[device-mac-randomization]
|
||||
# "yes" is already the default for scanning
|
||||
wifi.scan-rand-mac-address=yes
|
||||
|
||||
[connection-mac-randomization]
|
||||
# Randomize MAC for every ethernet connection
|
||||
ethernet.cloned-mac-address=random
|
||||
# Generate a random MAC for each WiFi and associate the two permanently
|
||||
wifi.cloned-mac-address=stable
|
||||
|
||||
# Opions:
|
||||
# permanent: Use HardWare address
|
||||
# preserve: Don’t change the MAC address of the device upon activation
|
||||
# stable: Randomize once and associate it permanently with that network
|
||||
# random: Randomize MAC for every connection
|
||||
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue