Compare commits

...

No commits in common. "suckless" and "hyprland" have entirely different histories.

1164 changed files with 13793 additions and 44120 deletions

55
.gitignore vendored
View file

@ -1,55 +0,0 @@
# Prerequisites
*.d
# Object files
*.o
*.ko
*.obj
*.elf
# Linker output
*.ilk
*.map
*.exp
# Precompiled Headers
*.gch
*.pch
# Libraries
*.lib
*.a
*.la
*.lo
# Shared objects (inc. Windows DLLs)
*.dll
*.so
*.so.*
*.dylib
# Executables
*.exe
*.out
*.app
*.i*86
*.x86_64
*.hex
# Debug files
*.dSYM/
*.su
*.idb
*.pdb
# Kernel Module Compile Results
*.mod*
*.cmd
.tmp_versions/
modules.order
Module.symvers
Mkfile.old
dkms.conf
# lockscreen image
source/slock/lockscreen.*

704
LICENSE
View file

@ -1,38 +1,674 @@
MIT/X Consortium License GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
© 2006-2019 Anselm R Garbe <anselm@garbe.ca> Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
© 2006-2009 Jukka Salmi <jukka at salmi dot ch> Everyone is permitted to copy and distribute verbatim copies
© 2006-2007 Sander van Dijk <a dot h dot vandijk at gmail dot com> of this license document, but changing it is not allowed.
© 2007-2011 Peter Hartlich <sgkkr at hartlich dot com>
© 2007-2009 Szabolcs Nagy <nszabolcs at gmail dot com>
© 2007-2009 Christof Musik <christof at sendfax dot de>
© 2007-2009 Premysl Hruby <dfenze at gmail dot com>
© 2007-2008 Enno Gottox Boland <gottox at s01 dot de>
© 2008 Martin Hurton <martin dot hurton at gmail dot com>
© 2008 Neale Pickett <neale dot woozle dot org>
© 2009 Mate Nagy <mnagy at port70 dot net>
© 2010-2016 Hiltjo Posthuma <hiltjo@codemadness.org>
© 2010-2012 Connor Lane Smith <cls@lubutu.com>
© 2011 Christoph Lohmann <20h@r-36.net>
© 2015-2016 Quentin Rameau <quinq@fifth.space>
© 2015-2016 Eric Pruitt <eric.pruitt@gmail.com>
© 2016-2017 Markus Teich <markus.teich@stusta.mhn.de>
© 2020-2022 Chris Down <chris@chrisdown.name>
Permission is hereby granted, free of charge, to any person obtaining a Preamble
copy of this software and associated documentation files (the "Software"),
to deal in the Software without restriction, including without limitation
the rights to use, copy, modify, merge, publish, distribute, sublicense,
and/or sell copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in The GNU General Public License is a free, copyleft license for
all copies or substantial portions of the Software. software and other kinds of works.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR The licenses for most software and other practical works are designed
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, to take away your freedom to share and change the works. By contrast,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL the GNU General Public License is intended to guarantee your freedom to
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER share and change all versions of a program--to make sure it remains free
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING software for all its users. We, the Free Software Foundation, use the
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER GNU General Public License for most of our software; it applies also to
DEALINGS IN THE SOFTWARE. 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>.

255
README.md
View file

@ -1,243 +1,20 @@
<div align="center"> # Drake's Dotfiles
<picture>
<source srcset="./assets/logo-dark.png" media="(prefers-color-scheme: dark)">
<source srcset="./assets/logo-light.png" media="(prefers-color-scheme: light)">
<img src="assets/logo-dark.png" alt="neodotfiles" width="415">
</picture>
<h4>My custom suckless based desktop focused on absolute productivity and workflow control.</h4>
</div>
![screenshot](./assets/screenshot.png) This is just a personal repository where i store all my dotfiles, you're free
clone them and edit them as you wish. Part of this work was based on other
people's dotfiles (Distrotube for example), and it may contain scripts or
binaries that they made or modify.
## Key Features ![screenshot](./screenshot.png)
### dwm features
* **A bunch of extra layouts**
- *Default ones:*
- master & stack.
- floating.
- monocle
- *Added ones:*
- dwindle.
- spiral.
- centered master (also known as three column).
- centered floating master (master window floating at the center of the screen, stack on the back).
- grid.
* **Keychord based keybindings:** Just like emacs, you can have chained keybindings, which exponentially extends the amount of keybindings you can have.
* **Scratchpad support:** Convenient scratchpad functionality for storing and retrieving frequently used applications.
* **Tag based workflow**
- Each tag (also called workspaces) is meant to have it's purpose, this is achieved with an extensive set of window rules:
- *Tag 1:* Coding
- *Tag 2:* Testing
- *Tag 3:* Web browsing
- *Tag 4:* Chatting
- *Tag 5:* Audio tools
- *Tag 6:* Video tools
- *Tag 7:* Graphic tools
- *Tag 8:* Office & Document tools
- *Tag 9:* Gaming
### Other suckless utilities included
* *dmenu:* the best run launcher. This build includes some very useful scripts for things like wifi, bluetooth and wallpaper configuration, drive mounting, etc.
* *st:* the fastest terminal emulator ever, [siduck's build](https://github.com/siduck/st).
* *slock:* simple and efficient lock screen with fingerprint reader support.
* *dwbmlocks:* what enables you to customize dwm's status area in the bar. This build includes some cool & customizable status scripts.
### Config files
Other configuration files included in this project are available at the config folder. These are:
* `.bash_profile & .bashrc`: Bash configuration files, the profile is neccesary to start up dwm on tty login.
* `.config/btop`: [btop](https://github.com/aristocratos/btop) is a system monitoring utility, cooler than htop. Accesible from dwm via a scratchpad.
* `.config/gtk-2.0` & `.config/gtk-3.0`: GTK theeming files, I use the Cantarell font, the [Gruvbox-Dark-BL](https://github.com/Fausto-Korpsvart/Gruvbox-GTK-Theme) theme and the [Simp1e-Gruvbox-Dark](https://gitlab.com/cursors/simp1e) cursor theme.
* `.config/Kvantum`: Qt theeming via Kvantum, Gruvbox theme is included here too.
* `.config/lvim`: [Lunarvim](https://www.lunarvim.org/) configuration files, this is a neovim distribution and my text editor of choice.
* `.config/mpv`: Mpv config files, mainly just for vim-like keybindings.
* `.config/newsboat`: [Newsboat](https://github.com/newsboat/newsboat) is an awesome RSS/Atom feeds reader for the terminal. Also accesible from dwm via a scratchpad. The config file is for vim-like keybindings and also my collection of RSS & YouTube subscriptions feeds (you can open any video in mpv hitting first comma and then v).
* `.config/picom`: The only X compositor that actually works, responsible of transparency and some animations.
* `.config/dunst`: A cool, minimal and fast notification daemon. Best one out there.
* `.config/qutebrowser`: Sometimes I like using a minimal browser, and qutebrowser is the best one.
* `.config/X11`: This is where I put the xinitrc file, responsible of starting up dwm properly.
* `.config/vifm`: [vifm](https://vifm.info/) is the best terminal file manager with everything you will and may need, with vim-like keybindings and image previews (with ueberzug).
* `.config/zathura`: [zathura](https://git.pwmt.org/pwmt/zathura) is my document viewer of choice, also with vim-like keybindings.
## Dependencies
Make sure to have these dependencies installed in your system, in this case package names are from Void Linux, you'll have to look for the package names in your distribution:
* **Build dependencies**
```
libX11-devel
libXft-devel
libXrender-devel
libXinerama-devel
libXrandr-devel
libXext-devel
imlib2-devel
harfbuzz-devel
fontconfig-devel
gd-devel
pam-devel
libnotify
xinit
setxkbmap
brightnessctl
make
gcc
vala
```
* **Runtime dependencies** (required for dmenu scripts & dwm)
```
fd-find
feh
xdpyinfo
xdotool
xclip
ffmpeg
maim
slop
udisks2
bluez
j4-dmenu-desktop
NetworkManager
power-profiles-daemon
polkit-gnome
unclutter-xfixes
gnome-keyring
picom
ueberzug
```
* **Other dependencies** (scratchpads)
- `bitwarden`: launched with flatpak by default
- `btop`
- `pulsemixer`
- `alsa-utils`
- `newsboat`
- `arandr`
- `mpv`
- `zathura`
- `nsxiv`
- `cmus`
- `cmus-flac`
- `qalculate-gtk`: launched with flatpak by default
- `ytfzf`: [download here](https://github.com/pystardust/ytfzf)
- `ani-cli`: [download here](https://github.com/pystardust/ani-cli)
- `flix-cli`: [download here](https://github.com/d4r1us-drk/flix-cli)
### System stuff (just here to keep track on stuff I need to rebuild the system)
* **System dependencies** (stuff required for the main installation)
```
NetworkManager
dhcpcd
wpa_supplicant
grub-x86_64-efi
efibootmgr
lvm2
cryptsetup
vim
elogind
polkit
dbus
xorg-server
xf86-input-libinput
xss-lock
pipewire
wireplumber
alsa-pipewire
gstreamer1
gstreamermm
gstreamer-vaapi
gst-plugins-bad1
gst-plugins-good1
gst-plugins-base1
gst-plugins-ugly1
bluez
bluez-alsa
libspa-alsa
libspa-bluetooth
mesa
mesa-vaapi
```
* **Intel stuff** (I mainly use intel devices)
```
xf86-video-intel
mesa-intel-dri
mesa-vulkan-intel
intel-media-driver
libva-intel-driver
```
## Installation & How To Modify
After installing them with your package manager of choice, you can do the following to get the source code and start to modify it to your liking.
```bash
# Clone this repository
$ git clone https://github.com/d4r1us-drk/neodotfiles.git
# Go into the repository
$ cd neodotfiles
# Select which project to compile & install (dwm in this case)
$ cd source/dwm
# To install
$ sudo make install && make clean
```
This repository is not a tutorial on how to modify or configure dwm or any of the included suckless tools, you obviusly don't need to learn C to do this, with this build you can start with an usable base and you wont even need to patch anything. If you want to add a patch though, you will need to do this manually, because most patching utilities like `patch` and `git apply` will fail due to how much of the code base I modified myself.
To configure my build, the only file you really need to modify is the `config.h` file in each tool, which has everything commented and explained. Of course this being *my* build, it is already configured for my needs.
## dwm patch list
These are the patches I applied to this dwm build (some of them I modified):
- adjacenttag
- alpha
- alwayscenter
- attachbottom
- autostart
- barpadding
- centeredmaster
- clientindicators
- combo
- cyclelayouts
- fibonacci
- focusmaster-return
- fullscreen
- gridmode
- keychord
- movestack
- pertag
- restartsig
- rmaster
- scratchpads
- statuspadding
- sticky
- stickyindicator
- tag-preview
- tapresize
- truecenteredtitle
- warp
- winicon
## Credits
- dwm and the suckless tools available here are made by the suckless guys at [https://suckless.org](https://suckless.org).
- dwmblocks is made by torrinfail and available [here](https://github.com/torrinfail/dwmblocks)
## License
This project is licenced under the MIT License
# Dependencies (some of them)
- hyprland
- hyprpaper
- hyprpicker
- hypridle
- hyprlock
- waybar
- rofi
- dunst
- vimiv

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2 KiB

View file

@ -1,56 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="415"
height="40"
viewBox="0 0 415 40"
version="1.1"
id="svg1"
inkscape:export-filename="logo.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96"
inkscape:version="1.3.2 (091e20ef0f, 2023-11-25)"
sodipodi:docname="drawing.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="px"
inkscape:zoom="2.728764"
inkscape:cx="202.65585"
inkscape:cy="65.96393"
inkscape:window-width="1918"
inkscape:window-height="1057"
inkscape:window-x="0"
inkscape:window-y="21"
inkscape:window-maximized="1"
inkscape:current-layer="layer1" />
<defs
id="defs1" />
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<text
xml:space="preserve"
style="font-size:33.0501px;font-family:'sucklessfont_v1.1';-inkscape-font-specification:'sucklessfont_v1.1, Normal';fill:#ffffff;stroke:#000000;stroke-width:0.1;stroke-dasharray:none;stroke-opacity:1"
x="2.1633663"
y="31.79669"
id="text1"><tspan
sodipodi:role="line"
id="tspan1"
x="2.1633663"
y="31.79669"
style="stroke:#000000;stroke-width:0.1;stroke-dasharray:none;stroke-opacity:1">NEODOTFILES</tspan></text>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

View file

@ -1,56 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="415"
height="40"
viewBox="0 0 415 40"
version="1.1"
id="svg1"
inkscape:export-filename="logo.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96"
inkscape:version="1.3.2 (091e20ef0f, 2023-11-25)"
sodipodi:docname="logo-light.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="px"
inkscape:zoom="2.728764"
inkscape:cx="202.65585"
inkscape:cy="65.963931"
inkscape:window-width="1918"
inkscape:window-height="1057"
inkscape:window-x="0"
inkscape:window-y="21"
inkscape:window-maximized="1"
inkscape:current-layer="layer1" />
<defs
id="defs1" />
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<text
xml:space="preserve"
style="font-size:33.0501px;font-family:'sucklessfont_v1.1';-inkscape-font-specification:'sucklessfont_v1.1, Normal';fill:#1a1a1a;stroke:#000000;stroke-width:0.1;stroke-dasharray:none;stroke-opacity:1"
x="2.1633663"
y="31.79669"
id="text1"><tspan
sodipodi:role="line"
id="tspan1"
x="2.1633663"
y="31.79669"
style="stroke:#000000;stroke-width:0.1;stroke-dasharray:none;stroke-opacity:1;fill:#1a1a1a">NEODOTFILES</tspan></text>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 348 KiB

View file

@ -1,584 +0,0 @@
[%General]
author=ShelockH0, based on Graphite Dark by Vince Liuice and Gruvbox GTK by Fausto Korpsvart
comment=An uncomplicated, warm and aesthetic gruvbox theme inspired by Gruvbox GTK Theme by Fausto Korpsvart
x11drag=menubar_and_primary_toolbar
alt_mnemonic=true
left_tabs=true
attach_active_tab=false
mirror_doc_tabs=true
group_toolbar_buttons=false
toolbar_item_spacing=0
toolbar_interior_spacing=2
spread_progressbar=true
composite=true
menu_shadow_depth=6
spread_menuitems=false
tooltip_shadow_depth=2
splitter_width=1
scroll_width=14
scroll_arrows=false
scroll_min_extent=60
slider_width=2
slider_handle_width=23
slider_handle_length=22
tickless_slider_handle_size=22
center_toolbar_handle=true
check_size=16
textless_progressbar=false
progressbar_thickness=2
menubar_mouse_tracking=true
toolbutton_style=1
double_click=false
translucent_windows=false
blurring=false
popup_blurring=false
vertical_spin_indicators=false
spin_button_width=24
fill_rubberband=false
merge_menubar_with_toolbar=true
small_icon_size=16
large_icon_size=32
button_icon_size=16
toolbar_icon_size=16
combo_as_lineedit=true
animate_states=true
button_contents_shift=false
combo_menu=true
hide_combo_checkboxes=true
combo_focus_rect=false
groupbox_top_label=true
inline_spin_indicators=true
joined_inactive_tabs=false
layout_spacing=6
layout_margin=9
scrollbar_in_view=true
transient_scrollbar=true
transient_groove=false
submenu_overlap=0
tooltip_delay=0
tree_branch_line=true
no_window_pattern=false
opaque=kaffeine,kmplayer,subtitlecomposer,kdenlive,vlc,smplayer,smplayer2,avidemux,avidemux2_qt4,avidemux3_qt4,avidemux3_qt5,kamoso,QtCreator,VirtualBox,trojita,dragon,digikam
reduce_window_opacity=0
respect_DE=true
scrollable_menu=true
submenu_delay=150
no_inactiveness=false
reduce_menu_opacity=0
click_behavior=0
contrast=1.00
dialog_button_layout=0
intensity=1.00
saturation=1.00
shadowless_popup=false
drag_from_buttons=false
menu_blur_radius=0
tooltip_blur_radius=0
[GeneralColors]
window.color=#1D2021
base.color=#1D2021
alt.base.color=#282828
button.color=#1D2021
light.color=#504945
mid.light.color=#3C3836
dark.color=#141617
mid.color=#282828
highlight.color=#89B482
inactive.highlight.color=#32361A
text.color=#ddc7a1
window.text.color=#ddc7a1
button.text.color=#ddc7a1
disabled.text.color=#ddc7a17F
tooltip.text.color=#D4BE98
highlight.text.color=#000000C3
link.color=#7daea3
link.visited.color=#d3869b
progress.indicator.text.color=#ddc7a1
[Hacks]
transparent_ktitle_label=true
transparent_dolphin_view=true
transparent_pcmanfm_sidepane=true
blur_translucent=true
transparent_menutitle=true
respect_darkness=true
kcapacitybar_as_progressbar=true
force_size_grip=true
iconless_pushbutton=true
iconless_menu=false
disabled_icon_opacity=100
lxqtmainmenu_iconsize=16
normal_default_pushbutton=true
single_top_toolbar=true
tint_on_mouseover=0
transparent_pcmanfm_view=true
no_selection_tint=true
transparent_arrow_button=true
middle_click_scroll=false
opaque_colors=false
kinetic_scrolling=false
scroll_jump_workaround=false
centered_forms=false
noninteger_translucency=false
style_vertical_toolbars=false
blur_only_active_window=true
[BaseWidget]
interior=true
indicator.size=12
frame=true
frame.top=0
frame.bottom=0
frame.left=0
frame.right=0
frame.expansion=0
text.margin=true
text.margin.top=0
text.margin.bottom=0
text.margin.left=0
text.margin.right=0
text.bold=false
text.shadow=0
[PanelButtonCommand]
frame=true
frame.element=button
frame.top=6
frame.bottom=6
frame.left=6
frame.right=6
interior=true
interior.element=button
indicator.size=8
text.normal.color=#ddc7a1
text.focus.color=#ddc7a1
text.press.color=#ddc7a1
text.toggle.color=#3C3836
text.shadow=0
text.margin=4
text.iconspacing=4
indicator.element=arrow
frame.expansion=0
[PanelButtonTool]
inherits=PanelButtonCommand
text.normal.color=#ddc7a1
text.focus.color=#ddc7a1
text.press.color=#ddc7a1
text.toggle.color=#3C3836
text.bold=false
indicator.element=arrow
indicator.size=0
frame.expansion=0
[ToolbarButton]
frame=true
frame.element=tbutton
interior.element=tbutton
frame.top=16
frame.bottom=16
frame.left=16
frame.right=16
indicator.element=tarrow
text.normal.color=#ddc7a1
text.focus.color=#ddc7a1
text.press.color=#ddc7a1
text.toggle.color=#ddc7a1
text.bold=false
frame.expansion=32
[Dock]
inherits=PanelButtonCommand
interior.element=dock
frame.element=dock
frame.top=1
frame.bottom=1
frame.left=1
frame.right=1
text.normal.color=#ddc7a1
[DockTitle]
inherits=PanelButtonCommand
frame=false
interior=false
text.normal.color=#ddc7a1
text.focus.color=#ddc7a1
text.bold=false
[IndicatorSpinBox]
inherits=PanelButtonCommand
frame=true
interior=true
frame.top=2
frame.bottom=2
frame.left=2
frame.right=2
indicator.element=spin
indicator.size=8
text.normal.color=#ddc7a1
text.margin.top=2
text.margin.bottom=2
text.margin.left=2
text.margin.right=2
[RadioButton]
inherits=PanelButtonCommand
frame=false
interior.element=radio
text.normal.color=#ddc7a1
text.focus.color=#ddc7a1
min_width=+0.3font
min_height=+0.3font
[CheckBox]
inherits=PanelButtonCommand
frame=false
interior.element=checkbox
text.normal.color=#ddc7a1
text.focus.color=#ddc7a1
min_width=+0.3font
min_height=+0.3font
[Focus]
inherits=PanelButtonCommand
frame=true
frame.element=focus
frame.top=2
frame.bottom=2
frame.left=2
frame.right=2
frame.patternsize=14
[GenericFrame]
inherits=PanelButtonCommand
frame=true
interior=false
frame.element=common
interior.element=common
frame.top=1
frame.bottom=1
frame.left=1
frame.right=1
[LineEdit]
inherits=PanelButtonCommand
frame.element=lineedit
interior.element=lineedit
frame.top=6
frame.bottom=6
frame.left=6
frame.right=6
text.margin.top=2
text.margin.bottom=2
text.margin.left=2
text.margin.right=2
[ToolbarLineEdit]
frame.element=lineedit
interior.element=lineedit
[DropDownButton]
inherits=PanelButtonCommand
indicator.element=arrow-down
[IndicatorArrow]
indicator.element=arrow
indicator.size=8
[ToolboxTab]
inherits=PanelButtonCommand
text.normal.color=#ddc7a1
text.press.color=#ddc7a1
text.focus.color=#ddc7a1
[Tab]
inherits=PanelButtonCommand
interior.element=tab
text.margin.left=8
text.margin.right=8
text.margin.top=0
text.margin.bottom=0
frame.element=tab
indicator.element=tab
indicator.size=22
frame.top=8
frame.bottom=8
frame.left=8
frame.right=8
text.normal.color=#ddc7a1
text.focus.color=#ddc7a1
text.press.color=#ddc7a1
text.toggle.color=#ddc7a1
frame.expansion=0
text.bold=false
[TabFrame]
inherits=PanelButtonCommand
frame.element=tabframe
interior.element=tabframe
frame.top=6
frame.bottom=6
frame.left=6
frame.right=6
[TreeExpander]
inherits=PanelButtonCommand
indicator.size=8
indicator.element=tree
[HeaderSection]
inherits=PanelButtonCommand
interior.element=header
frame.element=header
frame.top=0
frame.bottom=1
frame.left=1
frame.right=1
text.normal.color=#ddc7a1
text.focus.color=#ddc7a1
text.press.color=#ddc7a1
text.toggle.color=#ddc7a1
frame.expansion=0
[SizeGrip]
indicator.element=resize-grip
[Toolbar]
inherits=PanelButtonCommand
indicator.element=toolbar
indicator.size=5
text.margin=0
interior.element=toolbar
frame.element=toolbar
text.normal.color=#ddc7a1
text.focus.color=#ddc7a1
text.press.color=#ddc7a1
text.toggle.color=#ddc7a1
frame.left=3
frame.right=3
frame.top=3
frame.bottom=3
frame.expansion=0
[Slider]
inherits=PanelButtonCommand
frame.element=slider
focusFrame=true
interior.element=slider
frame.top=3
frame.bottom=3
frame.left=3
frame.right=3
[SliderCursor]
inherits=PanelButtonCommand
frame=false
interior.element=slidercursor
[Progressbar]
inherits=PanelButtonCommand
frame.element=progress
interior.element=progress
text.margin=0
text.normal.color=#ddc7a1
text.focus.color=#ddc7a1
text.press.color=#ddc7a1
text.toggle.color=#ddc7a1
text.bold=false
frame.expansion=8
[ProgressbarContents]
inherits=PanelButtonCommand
frame=true
frame.element=progress-pattern
interior.element=progress-pattern
[ItemView]
inherits=PanelButtonCommand
text.margin=0
frame.element=itemview
interior.element=itemview
frame.top=4
frame.bottom=4
frame.left=4
frame.right=4
text.margin.top=0
text.margin.bottom=0
text.margin.left=8
text.margin.right=8
text.normal.color=#ddc7a1
text.focus.color=#ddc7a1
text.press.color=#3C3836
text.toggle.color=#ffffff
min_width=+0.3font
min_height=+0.3font
frame.expansion=0
[Splitter]
indicator.size=48
[Scrollbar]
inherits=BaseWidget
[ScrollbarGroove]
inherits=BaseWidget
interior=false
frame.element=scrollbargroove
frame.left=7
frame.right=7
frame.top=7
frame.bottom=7
[ScrollbarSlider]
inherits=PanelButtonCommand
frame.element=scrollbarslider
interior=false
frame.left=7
frame.right=7
frame.top=7
frame.bottom=7
[Menu]
inherits=PanelButtonCommand
frame.top=10
frame.bottom=10
frame.left=10
frame.right=10
frame.element=menu
interior.element=menu
text.normal.color=#ddc7a1
text.shadow=false
frame.expansion=0
text.bold=false
[MenuItem]
inherits=PanelButtonCommand
frame=true
frame.element=menuitem
interior.element=menuitem
indicator.element=menuitem
text.normal.color=#ddc7a1
text.focus.color=#3C3836
text.margin.top=0
text.margin.bottom=0
text.margin.left=6
text.margin.right=6
frame.top=4
frame.bottom=4
frame.left=4
frame.right=4
text.bold=false
frame.expansion=0
[MenuBar]
inherits=PanelButtonCommand
frame.element=menubar
interior.element=menubar
frame.bottom=0
text.normal.color=#ddc7a1
text.focus.color=#ddc7a1
text.press.color=#ddc7a1
text.toggle.color=#ddc7a1
frame.expansion=0
text.bold=false
[MenuBarItem]
inherits=PanelButtonCommand
interior=true
interior.element=menubaritem
frame.element=menubaritem
frame.top=2
frame.bottom=2
frame.left=2
frame.right=2
text.margin.left=4
text.margin.right=4
text.margin.top=0
text.margin.bottom=0
text.normal.color=#ddc7a1
text.focus.color=#ddc7a1
text.press.color=#ddc7a1
text.toggle.color=#ddc7a1
text.bold=false
min_width=+0.3font
min_height=+0.3font
frame.expansion=0
[TitleBar]
inherits=PanelButtonCommand
frame=false
text.margin.top=2
text.margin.bottom=2
text.margin.left=2
text.margin.right=2
interior.element=titlebar
indicator.size=16
indicator.element=mdi
text.normal.color=#D4BE98
text.focus.color=#ddc7a1
text.bold=false
text.italic=true
frame.expansion=0
[ComboBox]
inherits=PanelButtonCommand
frame.element=combo
interior.element=combo
frame.top=6
frame.bottom=6
frame.left=6
frame.right=6
text.margin.top=2
text.margin.bottom=2
text.margin.left=2
text.margin.right=2
text.focus.color=#ddc7a1
text.press.color=#ddc7a1
text.toggle.color=#ddc7a1
[GroupBox]
inherits=GenericFrame
frame=false
text.shadow=0
text.margin=0
text.normal.color=#ddc7a1
text.focus.color=#ddc7a1
text.bold=false
frame.expansion=0
[TabBarFrame]
inherits=GenericFrame
frame=false
frame.element=tabBarFrame
interior=false
frame.top=0
frame.bottom=0
frame.left=0
frame.right=0
[ToolTip]
inherits=GenericFrame
frame.top=6
frame.bottom=6
frame.left=6
frame.right=6
interior=true
text.shadow=0
text.margin=0
interior.element=tooltip
frame.element=tooltip
frame.expansion=6
[StatusBar]
inherits=GenericFrame
frame=false
interior=false
[Window]
interior=true
interior.element=window
frame=true
frame.element=window
frame.bottom=10
frame.top=10

File diff suppressed because it is too large Load diff

Before

Width:  |  Height:  |  Size: 180 KiB

View file

@ -0,0 +1,464 @@
[%General]
author=elkrien based on Arc Dark style
comment=Catppuccin-Mocha-Flamingo
spread_menuitems=true
left_tabs=true
mirror_doc_tabs=true
scroll_width=8
attach_active_tab=true
composite=true
menu_shadow_depth=7
tooltip_shadow_depth=0
splitter_width=7
check_size=16
slider_width=4
slider_handle_width=18
slider_handle_length=18
textless_progressbar=false
menubar_mouse_tracking=true
slim_toolbars=false
toolbutton_style=1
x11drag=menubar_and_primary_toolbar
double_click=false
translucent_windows=false
blurring=false
popup_blurring=true
opaque=kaffeine,kmplayer,subtitlecomposer,kdenlive,vlc,smplayer,smplayer2,avidemux,avidemux2_qt4,avidemux3_qt4,avidemux3_qt5,kamoso,QtCreator,VirtualBox,trojita,dragon,digikam,qmplay2
group_toolbar_buttons=false
vertical_spin_indicators=false
fill_rubberband=false
spread_progressbar=true
merge_menubar_with_toolbar=true
small_icon_size=16
large_icon_size=32
button_icon_size=16
scroll_arrows=false
iconless_pushbutton=true
toolbar_icon_size=16
combo_as_lineedit=true
button_contents_shift=false
groupbox_top_label=true
inline_spin_indicators=true
joined_inactive_tabs=false
layout_spacing=2
submenu_overlap=0
tooltip_delay=-1
animate_states=false
transient_scrollbar=true
alt_mnemonic=true
combo_menu=true
layout_margin=4
no_window_pattern=false
respect_DE=true
scroll_min_extent=36
scrollable_menu=false
scrollbar_in_view=false
spin_button_width=16
submenu_delay=250
tree_branch_line=true
progressbar_thickness=8
click_behavior=0
contrast=1.00
dialog_button_layout=0
drag_from_buttons=false
hide_combo_checkboxes=false
intensity=1.00
no_inactiveness=false
reduce_menu_opacity=0
reduce_window_opacity=10
saturation=1.00
shadowless_popup=false
transient_groove=false
[GeneralColors]
window.color=#1E1E2E
base.color=#181825
alt.base.color=#181825
button.color=#313244
light.color=#45475A
mid.light.color=#45475A
dark.color=#181825
mid.color=#181825
highlight.color=#F2CDCD
inactive.highlight.color=#F2CDCD
text.color=#CDD6F4
window.text.color=#CDD6F4
button.text.color=#CDD6F4
disabled.text.color=#585B70
tooltip.text.color=#CDD6F4
highlight.text.color=#181825
link.color=#F5E0DC
link.visited.color=#89B4FA
[ItemView]
inherits=PanelButtonCommand
frame.element=itemview
interior.element=itemview
frame=true
interior=true
text.iconspacing=3
text.toggle.color=#181825
[RadioButton]
inherits=PanelButtonCommand
frame=false
interior.element=radio
[CheckBox]
inherits=PanelButtonCommand
frame=false
interior.element=checkbox
[TreeExpander]
indicator.element=tree
indicator.size=8
[ToolTip]
frame.top=4
frame.right=4
frame.bottom=4
frame.left=4
frame=true
[PanelButtonCommand]
inherits=PanelButtonCommand
interior.element=button
frame.element=button
text.normal.color=#CDD6F4
text.focus.color=#CDD6F4
text.press.color=#181825
text.toggle.color=#181825
[PanelButtonTool]
inherits=PanelButtonCommand
[DockTitle]
inherits=PanelButtonCommand
interior=false
frame=false
text.margin.top=5
text.margin.bottom=5
text.margin.left=5
text.margin.right=5
indicator.size=0
[Dock]
interior.element=toolbar
frame.element=toolbar
frame=true
interior=true
[GroupBox]
inherits=PanelButtonCommand
interior.element=tabframe
interior=true
frame=false
[Focus]
inherits=PanelButtonCommand
frame=true
frame.element=focus
frame.top=1
frame.bottom=1
frame.left=1
frame.right=1
frame.patternsize=20
[GenericFrame]
inherits=PanelButtonCommand
frame.element=common
frame.top=1
frame.bottom=1
frame.left=1
frame.right=1
[Slider]
inherits=PanelButtonCommand
interior=true
frame.element=slider
interior.element=slider
frame.top=3
frame.bottom=3
frame.left=3
frame.right=3
focusFrame=true
[SliderCursor]
inherits=PanelButtonCommand
interior=true
interior.element=slidercursor
frame=false
[LineEdit]
inherits=PanelButtonCommand
frame.element=lineedit
interior.element=lineedit
[IndicatorSpinBox]
inherits=LineEdit
frame.element=lineedit
interior.element=lineedit
frame.top=0
frame.bottom=2
frame.left=2
frame.right=2
indicator.size=8
[DropDownButton]
inherits=PanelButtonCommand
frame.top=2
frame.bottom=2
frame.left=0
frame.right=1
indicator.size=8
[ToolboxTab]
inherits=PanelButtonCommand
frame.element=tabframe
frame.top=1
frame.bottom=1
frame.left=1
frame.right=1
[Tab]
inherits=PanelButtonCommand
interior.element=tab
frame.element=tab
frame.top=2
frame.bottom=3
frame.left=3
frame.right=3
indicator.size=10
text.normal.color=#585B70
text.focus.color=#CDD6F4
text.press.color=#CDD6F4
text.toggle.color=#CDD6F4
focusFrame=true
[TabBarFrame]
inherits=GenericFrame
frame=true
frame.element=tabBarFrame
interior=false
frame.top=4
frame.bottom=4
frame.left=4
frame.right=4
[TabFrame]
inherits=PanelButtonCommand
frame.element=tabframe
interior.element=tabframe
[Dialog]
inherits=TabBarFrame
frame.element=tabframe
interior=false
frame=false
frame.top=1
frame.bottom=1
frame.left=1
frame.right=1
[HeaderSection]
inherits=PanelButtonCommand
interior.element=header
frame.element=header
frame.top=0
frame.bottom=1
frame.left=1
frame.right=1
frame.expansion=0
text.normal.color=#CDD6F4
text.focus.color=#F2CDCD
text.press.color=#CDD6F4
text.toggle.color=#CDD6F4
indicator.element=harrow
[SizeGrip]
inherits=PanelButtonCommand
frame=false
interior=false
indicator.element=resize-grip
indicator.size=0
[Toolbar]
inherits=PanelButtonCommand
interior.element=menubar
frame.element=menubar
frame=true
frame.bottom=4
frame.left=4
frame.right=4
text.normal.color=#CDD6F4
text.focus.color=#CDD6F4
text.press.color=#F2CDCD
text.toggle.color=#F2CDCD
text.bold=false
[MenuBar]
inherits=PanelButtonCommand
frame.element=menubar
interior.element=menubar
frame.bottom=0
text.normal.color=#CDD6F4
frame.expansion=0
text.bold=false
[ToolbarButton]
frame.element=tbutton
interior.element=tbutton
indicator.element=arrow
text.normal.color=#CDD6F4
text.focus.color=#CDD6F4
text.press.color=#181825
text.toggle.color=#181825
text.bold=false
[Scrollbar]
inherits=PanelButtonCommand
indicator.size=0
interior=false
frame=false
[ScrollbarGroove]
inherits=PanelButtonCommand
interior=false
frame=false
[ScrollbarSlider]
inherits=PanelButtonCommand
interior=false
frame.element=scrollbarslider
frame.top=4
frame.bottom=4
frame.left=4
frame.right=4
[ProgressbarContents]
inherits=PanelButtonCommand
frame=true
frame.element=progress-pattern
interior.element=progress-pattern
frame.top=2
frame.bottom=2
frame.left=2
frame.right=2
[Progressbar]
inherits=PanelButtonCommand
frame.element=progress
interior.element=progress
frame.top=2
frame.bottom=2
frame.left=2
frame.right=2
text.margin=0
text.normal.color=#CDD6F4
text.focus.color=#CDD6F4
text.press.color=#181825
text.toggle.color=#181825
text.bold=false
frame.expansion=18
[RadioButton]
inherits=PanelButtonCommand
[Menu]
frame.element=menu
interior.element=menu
inherits=PanelButtonCommand
text.press.color=#181825
text.toggle.color=#181825
text.bold=false
frame.top=3
frame.bottom=3
frame.left=3
frame.right=3
[MenuItem]
inherits=PanelButtonCommand
interior.element=menuitem
indicator.size=8
text.focus.color=#CDD6F4
text.press.color=#CDD6F4
[MenuBarItem]
inherits=PanelButtonCommand
interior.element=menubaritem
frame=false
text.margin.top=3
text.margin.bottom=3
text.margin.left=5
text.margin.right=5
[StatusBar]
inherits=Toolbar
frame.element=toolbar
font.bold=true
text.normal.color=#CDD6F4
frame=true
frame.top=0
frame.bottom=0
[TitleBar]
inherits=PanelButtonCommand
frame=false
interior=false
text.margin.top=2
text.margin.bottom=2
text.margin.left=3
text.margin.right=3
[ComboBox]
inherits=PanelButtonCommand
indicator.size=8
frame.top=3
frame.bottom=3
frame.left=3
frame.right=3
text.margin.top=1
text.margin.bottom=1
text.margin.left=3
text.margin.right=3
text.toggle.color=#CDD6F4
[ToolboxTab]
inherits=PanelButtonCommand
text.normal.color=#CDD6F4
text.press.color=#CDD6F4
text.focus.color=#CDD6F4
[Hacks]
transparent_dolphin_view=false
blur_konsole=true
transparent_ktitle_label=true
transparent_menutitle=true
respect_darkness=true
kcapacitybar_as_progressbar=true
force_size_grip=false
iconless_pushbutton=true
iconless_menu=false
disabled_icon_opacity=100
lxqtmainmenu_iconsize=0
normal_default_pushbutton=true
single_top_toolbar=false
tint_on_mouseover=0
transparent_pcmanfm_sidepane=true
transparent_pcmanfm_view=false
blur_translucent=true
centered_forms=false
kinetic_scrolling=false
middle_click_scroll=false
no_selection_tint=false
noninteger_translucency=false
style_vertical_toolbars=false
blur_only_active_window=false
[Window]
interior=true
interior.element=window
frame.top=0
frame.bottom=0
frame.left=0
frame.right=0

File diff suppressed because it is too large Load diff

After

Width:  |  Height:  |  Size: 146 KiB

View file

@ -1,2 +1,2 @@
[General] [General]
theme=GruvboxMaterial theme=catppuccin-mocha-flamingo

View file

@ -1,43 +0,0 @@
#!/bin/sh
## ____ __
## / __ \_________ _/ /_____
## / / / / ___/ __ `/ //_/ _ \
## / /_/ / / / /_/ / ,< / __/ Clay Gomera (Drake)
## /_____/_/ \__,_/_/|_|\___/ My custom xinitrc
##
userresources=$HOME/.Xresources
usermodmap=$HOME/.Xmodmap
sysresources=/etc/X11/xinit/.Xresources
sysmodmap=/etc/X11/xinit/.Xmodmap
# merge in defaults and keymaps
if [ -f $sysresources ]; then
xrdb -merge $sysresources
fi
if [ -f $sysmodmap ]; then
xmodmap $sysmodmap
fi
if [ -f "$userresources" ]; then
xrdb -merge "$userresources"
fi
if [ -f "$usermodmap" ]; then
xmodmap "$usermodmap"
fi
# X11 Stuff
export MOZ_USE_XINPUT2=1
export QT_STYLE_OVERRIDE=kvantum
export XDG_SESSION_TYPE=X11
# GTK & cursor stuff
export XCURSOR_PATH="$XDG_DATA_HOME/icons/"
export XCURSOR_THEME="Simp1e-Gruvbox-Dark"
export GTK_THEME="Gruvbox-Dark"
export GTK_ICON_THEME="Papirus-Dark"
# initialize dwm
dbus-launch dwm

View file

@ -2,7 +2,7 @@
#* Name of a btop++/bpytop/bashtop formatted ".theme" file, "Default" and "TTY" for builtin themes. #* Name of a btop++/bpytop/bashtop formatted ".theme" file, "Default" and "TTY" for builtin themes.
#* Themes should be placed in "../share/btop/themes" relative to binary or "$HOME/.config/btop/themes" #* Themes should be placed in "../share/btop/themes" relative to binary or "$HOME/.config/btop/themes"
color_theme = "/usr/share/btop/themes/gruvbox_dark_v2.theme" color_theme = "/home/drk/.config/btop/themes/catppuccin_mocha.theme"
#* If the theme set background should be shown, set to False if you want terminal background transparency. #* If the theme set background should be shown, set to False if you want terminal background transparency.
theme_background = False theme_background = False
@ -57,13 +57,13 @@ update_ms = 500
#* Processes sorting, "pid" "program" "arguments" "threads" "user" "memory" "cpu lazy" "cpu direct", #* Processes sorting, "pid" "program" "arguments" "threads" "user" "memory" "cpu lazy" "cpu direct",
#* "cpu lazy" sorts top process over time (easier to follow), "cpu direct" updates top process directly. #* "cpu lazy" sorts top process over time (easier to follow), "cpu direct" updates top process directly.
proc_sorting = "cpu direct" proc_sorting = "pid"
#* Reverse sorting order, True or False. #* Reverse sorting order, True or False.
proc_reversed = False proc_reversed = False
#* Show processes as a tree. #* Show processes as a tree.
proc_tree = False proc_tree = True
#* Use the cpu graph colors in the process list. #* Use the cpu graph colors in the process list.
proc_colors = True proc_colors = True
@ -72,7 +72,7 @@ proc_colors = True
proc_gradient = True proc_gradient = True
#* If process cpu usage should be of the core it's running on or usage of the total available cpu power. #* If process cpu usage should be of the core it's running on or usage of the total available cpu power.
proc_per_core = True proc_per_core = False
#* Show process memory as bytes instead of percent. #* Show process memory as bytes instead of percent.
proc_mem_bytes = True proc_mem_bytes = True

View file

@ -0,0 +1,83 @@
# Main background, empty for terminal default, need to be empty if you want transparent background
theme[main_bg]="#1e1e2e"
# Main text color
theme[main_fg]="#cdd6f4"
# Title color for boxes
theme[title]="#cdd6f4"
# Highlight color for keyboard shortcuts
theme[hi_fg]="#89b4fa"
# Background color of selected item in processes box
theme[selected_bg]="#45475a"
# Foreground color of selected item in processes box
theme[selected_fg]="#89b4fa"
# Color of inactive/disabled text
theme[inactive_fg]="#7f849c"
# Color of text appearing on top of graphs, i.e uptime and current network graph scaling
theme[graph_text]="#f5e0dc"
# Background color of the percentage meters
theme[meter_bg]="#45475a"
# Misc colors for processes box including mini cpu graphs, details memory graph and details status text
theme[proc_misc]="#f5e0dc"
# CPU, Memory, Network, Proc box outline colors
theme[cpu_box]="#cba6f7" #Mauve
theme[mem_box]="#a6e3a1" #Green
theme[net_box]="#eba0ac" #Maroon
theme[proc_box]="#89b4fa" #Blue
# Box divider line and small boxes line color
theme[div_line]="#6c7086"
# Temperature graph color (Green -> Yellow -> Red)
theme[temp_start]="#a6e3a1"
theme[temp_mid]="#f9e2af"
theme[temp_end]="#f38ba8"
# CPU graph colors (Teal -> Lavender)
theme[cpu_start]="#94e2d5"
theme[cpu_mid]="#74c7ec"
theme[cpu_end]="#b4befe"
# Mem/Disk free meter (Mauve -> Lavender -> Blue)
theme[free_start]="#cba6f7"
theme[free_mid]="#b4befe"
theme[free_end]="#89b4fa"
# Mem/Disk cached meter (Sapphire -> Lavender)
theme[cached_start]="#74c7ec"
theme[cached_mid]="#89b4fa"
theme[cached_end]="#b4befe"
# Mem/Disk available meter (Peach -> Red)
theme[available_start]="#fab387"
theme[available_mid]="#eba0ac"
theme[available_end]="#f38ba8"
# Mem/Disk used meter (Green -> Sky)
theme[used_start]="#a6e3a1"
theme[used_mid]="#94e2d5"
theme[used_end]="#89dceb"
# Download graph colors (Peach -> Red)
theme[download_start]="#fab387"
theme[download_mid]="#eba0ac"
theme[download_end]="#f38ba8"
# Upload graph colors (Green -> Sky)
theme[upload_start]="#a6e3a1"
theme[upload_mid]="#94e2d5"
theme[upload_end]="#89dceb"
# Process box color gradient for threads, mem and cpu usage (Sapphire -> Mauve)
theme[process_start]="#74c7ec"
theme[process_mid]="#b4befe"
theme[process_end]="#cba6f7"

View file

@ -1,341 +0,0 @@
(beacon-mode 1)
(map! :leader
(:prefix ("b". "buffer")
:desc "List bookmarks" "L" #'list-bookmarks
:desc "Save current bookmarks to bookmark file" "w" #'bookmark-save))
(global-auto-revert-mode 1)
(setq global-auto-revert-non-file-buffers t)
(evil-define-key 'normal ibuffer-mode-map
(kbd "f c") 'ibuffer-filter-by-content
(kbd "f d") 'ibuffer-filter-by-directory
(kbd "f f") 'ibuffer-filter-by-filename
(kbd "f m") 'ibuffer-filter-by-mode
(kbd "f n") 'ibuffer-filter-by-name
(kbd "f x") 'ibuffer-filter-disable
(kbd "g h") 'ibuffer-do-kill-lines
(kbd "g H") 'ibuffer-update)
;; https://stackoverflow.com/questions/9547912/emacs-calendar-show-more-than-3-months
(defun drk/year-calendar (&optional year)
(interactive)
(require 'calendar)
(let* (
(current-year (number-to-string (nth 5 (decode-time (current-time)))))
(month 0)
(year (if year year (string-to-number (format-time-string "%Y" (current-time))))))
(switch-to-buffer (get-buffer-create calendar-buffer))
(when (not (eq major-mode 'calendar-mode))
(calendar-mode))
(setq displayed-month month)
(setq displayed-year year)
(setq buffer-read-only nil)
(erase-buffer)
;; horizontal rows
(dotimes (j 4)
;; vertical columns
(dotimes (i 3)
(calendar-generate-month
(setq month (+ month 1))
year
;; indentation / spacing between months
(+ 5 (* 25 i))))
(goto-char (point-max))
(insert (make-string (- 10 (count-lines (point-min) (point-max))) ?\n))
(widen)
(goto-char (point-max))
(narrow-to-region (point-max) (point-max)))
(widen)
(goto-char (point-min))
(setq buffer-read-only t)))
(defun drk/scroll-year-calendar-forward (&optional arg event)
"Scroll the yearly calendar by year in a forward direction."
(interactive (list (prefix-numeric-value current-prefix-arg)
last-nonmenu-event))
(unless arg (setq arg 0))
(save-selected-window
(if (setq event (event-start event)) (select-window (posn-window event)))
(unless (zerop arg)
(let* (
(year (+ displayed-year arg)))
(drk/year-calendar year)))
(goto-char (point-min))
(run-hooks 'calendar-move-hook)))
(defun drk/scroll-year-calendar-backward (&optional arg event)
"Scroll the yearly calendar by year in a backward direction."
(interactive (list (prefix-numeric-value current-prefix-arg)
last-nonmenu-event))
(drk/scroll-year-calendar-forward (- (or arg 1)) event))
(map! :leader
:desc "Scroll year calendar backward" "<left>" #'drk/scroll-year-calendar-backward
:desc "Scroll year calendar forward" "<right>" #'drk/scroll-year-calendar-forward)
(defalias 'year-calendar 'drk/year-calendar)
(map! :leader
(:prefix ("c h" . "Help info from Clippy")
:desc "Clippy describes function under point" "f" #'clippy-describe-function
:desc "Clippy describes variable under point" "v" #'clippy-describe-variable))
(require 'dap-netcore)
(require 'dap-dlv-go)
(map! :leader
(:prefix ("d" . "dap-mode")
:desc "Toggle breakpoint" "t" #'dap-breakpoint-toggle
:desc "Continue execution" "c" #'dap-continue
:desc "Step in" "n" #'dap-step-in
:desc "Step out" "N" #'dap-step-out
:desc "See all breakpoints" "b" #'dap-ui-breakpoints-toggle
:desc "Change variable value" "s" #'dap-ui-set-variable-value
:desc "Evaluate expression at point" "e" #'dap-eval-thing-at-point
:desc "Evaluate expression" "E" #'dap-eval
:desc "Run debugger" "r" #'dap-debug
:desc "Restart debugger" "R" #'dap-debug-restart
:desc "Stop debugger" "d" #'dap-disconnect))
(use-package dap-mode
:init
(dap-auto-configure-mode)
:custom
(dap-netcore-download-url "https://github.com/Samsung/netcoredbg/releases/download/3.1.0-1031/netcoredbg-linux-amd64.tar.gz"))
;; With dired-open plugin, you can launch external programs for certain
;; extensions For example, I set all .png files to open in 'vimiv' and all .mp4
;; files to open in 'mpv'
(setq dired-open-extensions '(("gif" . "vimiv")
("jpg" . "vimiv")
("png" . "vimiv")
("mkv" . "mpv")
("mp3" . "mpv")
("mp4" . "mpv")))
(evil-define-key 'normal peep-dired-mode-map
(kbd "j") 'peep-dired-next-file
(kbd "k") 'peep-dired-prev-file)
(add-hook 'peep-dired-hook 'evil-normalize-keymaps)
(setq delete-by-moving-to-trash t
trash-directory "~/.local/share/Trash/files/")
(setq doom-theme 'doom-gruvbox)
(map! :leader
:desc "Load new theme" "h t" #'load-theme)
(use-package emojify
:hook (after-init . global-emojify-mode))
(setq doom-font (font-spec :family "Mononoki Nerd Font" :size 18)
doom-variable-pitch-font (font-spec :family "Mononoki Nerd Font" :size 18)
doom-big-font (font-spec :family "Mononoki Nerd Font" :size 24))
(after! doom-themes
(setq doom-themes-enable-bold t
doom-themes-enable-italic t))
(custom-set-faces!
'(font-lock-comment-face :slant italic)
'(font-lock-keyword-face :slant italic))
(defun drk/insert-todays-date (prefix)
(interactive "P")
(let ((format (cond
((not prefix) "%A, %B %d, %Y")
((equal prefix '(4)) "%m-%d-%Y")
((equal prefix '(16)) "%Y-%m-%d"))))
(insert (format-time-string format))))
(require 'calendar)
(defun drk/insert-any-date (date)
"Insert DATE using the current locale."
(interactive (list (calendar-read-date)))
(insert (calendar-date-string date)))
(map! :leader
(:prefix ("i d" . "Insert date")
:desc "Insert any date" "a" #'drk/insert-any-date
:desc "Insert todays date" "t" #'drk/insert-todays-date))
(setq ivy-posframe-display-functions-alist
'((swiper . ivy-posframe-display-at-point)
(complete-symbol . ivy-posframe-display-at-point)
(counsel-M-x . ivy-display-function-fallback)
(counsel-esh-history . ivy-posframe-display-at-window-center)
(counsel-describe-function . ivy-display-function-fallback)
(counsel-describe-variable . ivy-display-function-fallback)
(counsel-find-file . ivy-display-function-fallback)
(counsel-recentf . ivy-display-function-fallback)
(counsel-register . ivy-posframe-display-at-frame-bottom-window-center)
(dmenu . ivy-posframe-display-at-frame-top-center)
(nil . ivy-posframe-display))
ivy-posframe-height-alist
'((swiper . 20)
(dmenu . 20)
(t . 10)))
(ivy-posframe-mode 1) ; 1 enables posframe-mode, 0 disables it.
(map! :leader
(:prefix ("v" . "Ivy")
:desc "Ivy push view" "v p" #'ivy-push-view
:desc "Ivy switch view" "v s" #'ivy-switch-view))
(setq display-line-numbers-type t)
(map! :leader
:desc "Comment or uncomment lines" "TAB TAB" #'comment-line
(:prefix ("t" . "toggle")
:desc "Toggle line numbers" "l" #'doom/toggle-line-numbers
:desc "Toggle line highlight in frame" "h" #'hl-line-mode
:desc "Toggle line highlight globally" "H" #'global-hl-line-mode
:desc "Toggle truncate lines" "t" #'toggle-truncate-lines))
(add-hook 'csharp-mode-hook #'lsp-deferred)
(add-hook 'go-mode-hook #'lsp-deferred)
(add-hook 'rust-mode-hook #'lsp-deferred)
(custom-set-faces
'(markdown-header-face ((t (:inherit font-lock-function-name-face :weight bold :family "Mononoki Nerd Font"))))
'(markdown-header-face-1 ((t (:inherit markdown-header-face :height 1.7))))
'(markdown-header-face-2 ((t (:inherit markdown-header-face :height 1.6))))
'(markdown-header-face-3 ((t (:inherit markdown-header-face :height 1.5))))
'(markdown-header-face-4 ((t (:inherit markdown-header-face :height 1.4))))
'(markdown-header-face-5 ((t (:inherit markdown-header-face :height 1.3))))
'(markdown-header-face-6 ((t (:inherit markdown-header-face :height 1.2)))))
(set-face-attribute 'mode-line nil :font "Mononoki Nerd Font-14")
(setq doom-modeline-height 30 ;; sets modeline height
doom-modeline-bar-width 5 ;; sets right bar width
doom-modeline-persp-name t ;; adds perspective name to modeline
doom-modeline-persp-icon t) ;; adds folder icon next to persp name
(xterm-mouse-mode 1)
(map! :leader
:desc "Toggle neotree" "e" #'neotree-toggle)
(setq neo-theme 'nerd)
(setq neo-smart-open t)
(setq projectile-switch-project-action 'neotree-projectile-action)
(map! :leader
(:prefix ("=" . "open file")
:desc "Edit agenda file" "a" #'(lambda () (interactive) (find-file "~/org/agenda.org"))
:desc "Edit doom config.org" "c" #'(lambda () (interactive) (find-file "~/.config/doom/config.org"))
:desc "Edit doom init.el" "i" #'(lambda () (interactive) (find-file "~/.config/doom/init.el"))
:desc "Edit doom packages.el" "p" #'(lambda () (interactive) (find-file "~/.config/doom/packages.el"))))
(map! :leader
:desc "Org babel tangle" "m B" #'org-babel-tangle)
(after! org
(setq org-directory "~/org/"
org-agenda-files '("~/org/agenda.org")
org-default-notes-file (expand-file-name "notes.org" org-directory)
org-ellipsis ""
org-superstar-headline-bullets-list '("" "" "" "" "" "" "")
org-superstar-item-bullet-alist '((?+ . ?➤) (?- . ?✦)) ; changes +/- symbols in item lists
org-log-done 'time
org-hide-emphasis-markers t
;; ex. of org-link-abbrev-alist in action
;; [[arch-wiki:Name_of_Page][Description]]
org-link-abbrev-alist ; This overwrites the default Doom org-link-abbrev-list
'(("google" . "http://www.google.com/search?q=")
("arch-wiki" . "https://wiki.archlinux.org/index.php/")
("ddg" . "https://duckduckgo.com/?q=")
("wiki" . "https://en.wikipedia.org/wiki/"))
org-todo-keywords ; This overwrites the default Doom org-todo-keywords
'((sequence
"TODO(t)" ; A task that is ready to be tackled
"BLOG(b)" ; Blog writing assignments
"GYM(g)" ; Things to accomplish at the gym
"GAME(j)" ; Things to accomplish at the gym
"PROJ(p)" ; A project that contains other tasks
"VIDEO(v)" ; Video assignments
"WAIT(w)" ; Something is holding up this task
"|" ; The pipe necessary to separate "active" states and "inactive" states
"DONE(d)" ; Task has been completed
"CANCELLED(c)" )))) ; Task has been cancelled
(setq org-agenda-custom-commands
'(("p" "Priority view"
((tags "PRIORITY=\"A\""
((org-agenda-skip-function '(org-agenda-skip-entry-if 'todo 'done))
(org-agenda-overriding-header "High priority unfinished tasks:")))
(tags "PRIORITY=\"B\""
((org-agenda-skip-function '(org-agenda-skip-entry-if 'todo 'done))
(org-agenda-overriding-header "Medium priority unfinished tasks:")))
(tags "PRIORITY=\"C\""
((org-agenda-skip-function '(org-agenda-skip-entry-if 'todo 'done))
(org-agenda-overriding-header "Low priority unfinished tasks:")))))
("i" "INTEC view"
((tags "homeworks"
((org-agenda-skip-function '(org-agenda-skip-entry-if 'todo 'done))
(org-agenda-overriding-header "Pending homeworks:")))
(tags "studies"
((org-agenda-skip-function '(org-agenda-skip-entry-if 'todo 'done))
(org-agenda-overriding-header "Pending studies:")))
(tags "exam"
((org-agenda-skip-function '(org-agenda-skip-entry-if 'todo 'done))
(org-agenda-overriding-header "Pending exams:")))))
))
(setq
org-agenda-block-separator 985827
org-fancy-priorities-list '("󰈼" "󰈻" "󰈽")
org-priority-faces
'((?A :foreground "#fb4934" :weight bold)
(?B :foreground "#fabd2f" :weight bold)
(?C :foreground "#83a598" :weight bold)))
(setq org-publish-use-timestamps-flag nil)
(setq org-export-with-broken-links t)
(use-package! org-auto-tangle
:defer t
:hook (org-mode . org-auto-tangle-mode)
:config
(setq org-auto-tangle-default t))
(define-globalized-minor-mode global-rainbow-mode rainbow-mode
(lambda () (rainbow-mode 1)))
(global-rainbow-mode 1 )
(map! :leader
(:prefix ("r" . "registers")
:desc "Copy to register" "c" #'copy-to-register
:desc "Frameset to register" "f" #'frameset-to-register
:desc "Insert contents of register" "i" #'insert-register
:desc "Jump to register" "j" #'jump-to-register
:desc "List registers" "l" #'list-registers
:desc "Number to register" "n" #'number-to-register
:desc "Interactively choose a register" "r" #'counsel-register
:desc "View a register" "v" #'view-register
:desc "Window configuration to register" "w" #'window-configuration-to-register
:desc "Increment register" "+" #'increment-register
:desc "Point to register" "SPC" #'point-to-register))
(setq shell-file-name "/bin/bash"
vterm-max-scrollback 5000)
(map! :leader
:desc "Vterm popup toggle" "v t" #'+vterm/toggle)
(defun prefer-horizontal-split ()
(set-variable 'split-height-threshold nil t)
(set-variable 'split-width-threshold 40 t)) ; make this as low as needed
(add-hook 'markdown-mode-hook 'prefer-horizontal-split)
(map! :leader
:desc "Clone indirect buffer other window" "b c" #'clone-indirect-buffer-other-window)
(map! :leader
(:prefix ("w" . "window")
:desc "Winner redo" "<right>" #'winner-redo
:desc "Winner undo" "<left>" #'winner-undo))
(map! :leader
:desc "Zap to char" "z" #'zap-to-char
:desc "Zap up to char" "Z" #'zap-up-to-char)
(set-frame-parameter nil 'alpha-background 95) ; For current frame
(add-to-list 'default-frame-alist '(alpha-background . 95)) ; For all new frames henceforth
(when (daemonp)
(exec-path-from-shell-initialize))

View file

@ -1,759 +0,0 @@
#+TITLE: DRK's Doom Emacs Config
#+AUTHOR: Clay Gomera (Drake)
#+DESCRIPTION: DRK's personal Doom Emacs config.
#+STARTUP: showeverything
#+PROPERTY: header-args :tangle config.el
* TABLE OF CONTENTS :toc:
- [[#about-this-config][ABOUT THIS CONFIG]]
- [[#beacon][BEACON]]
- [[#bookmarks-and-buffers][BOOKMARKS AND BUFFERS]]
- [[#bookmarks][Bookmarks]]
- [[#buffers][Buffers]]
- [[#global-auto-revert][Global Auto Revert]]
- [[#keybindings-within-ibuffer-mode][Keybindings within ibuffer mode]]
- [[#calendar][CALENDAR]]
- [[#clippy][CLIPPY]]
- [[#dap-mode][DAP MODE]]
- [[#dired][DIRED]]
- [[#keybindings-within-dired-with-peep-dired-mode-enabled][Keybindings Within Dired With Peep-Dired-Mode Enabled]]
- [[#making-deleted-files-go-to-trash-can][Making deleted files go to trash can]]
- [[#doom-theme][DOOM THEME]]
- [[#emojis][EMOJIS]]
- [[#fonts][FONTS]]
- [[#insert-date][INSERT DATE]]
- [[#ivy][IVY]]
- [[#ivy-posframe][IVY-POSFRAME]]
- [[#ivy-keybindings][IVY KEYBINDINGS]]
- [[#line-settings][LINE SETTINGS]]
- [[#lsp][LSP]]
- [[#markdown][MARKDOWN]]
- [[#modeline][MODELINE]]
- [[#mouse-support][MOUSE SUPPORT]]
- [[#neotree][NEOTREE]]
- [[#open-specific-files][OPEN SPECIFIC FILES]]
- [[#org-mode][ORG MODE]]
- [[#org-publish][Org-publish]]
- [[#org-auto-tangle][Org-auto-tangle]]
- [[#rainbow-mode][RAINBOW MODE]]
- [[#registers][REGISTERS]]
- [[#shells][SHELLS]]
- [[#splits][SPLITS]]
- [[#winner-mode][WINNER MODE]]
- [[#zap-to-char][ZAP TO CHAR]]
- [[#transparent][TRANSPARENT]]
* ABOUT THIS CONFIG
This is my personal Doom Emacs config. Doom Emacs is a distribution of Emacs
that uses the "evil" keybindings (Vim keybindings) and includes a number of nice
extensions and a bit of configuration out of the box. I am maintaining this
config not just for myself, but also for those that want to explore some of what
is possible with Emacs. I will add a lot of examples of plugins and settings,
some of them I may not even use personally. I do this because many people
following me on YouTube look at my configs as "documentation". This config is
based on DistroTube's config.
* BEACON
Never lose your cursor. When you scroll, your cursor will shine! This is a
global minor-mode. Turn it on everywhere with:
#+begin_src emacs-lisp
(beacon-mode 1)
#+end_src
* BOOKMARKS AND BUFFERS
Doom Emacs uses 'SPC b' for keybindings related to bookmarks and buffers.
** Bookmarks
Bookmarks are somewhat like registers in that they record positions you can jump
to. Unlike registers, they have long names, and they persist automatically from
one Emacs session to the next. The prototypical use of bookmarks is to record
where you were reading in various files.
#+BEGIN_SRC emacs-lisp
(map! :leader
(:prefix ("b". "buffer")
:desc "List bookmarks" "L" #'list-bookmarks
:desc "Save current bookmarks to bookmark file" "w" #'bookmark-save))
#+END_SRC
** Buffers
Regarding /buffers/, the text you are editing in Emacs resides in an object called
a /buffer/. Each time you visit a file, a buffer is used to hold the files text.
Each time you invoke Dired, a buffer is used to hold the directory listing.
/Ibuffer/ is a program that lists all of your Emacs /buffers/, allowing you to
navigate between them and filter them.
| COMMAND | DESCRIPTION | KEYBINDING |
|-----------------+----------------------+------------|
| ibuffer | Launch ibuffer | SPC b i |
| kill-buffer | Kill current buffer | SPC b k |
| next-buffer | Goto next buffer | SPC b n |
| previous-buffer | Goto previous buffer | SPC b p |
| save-buffer | Save current buffer | SPC b s |
** Global Auto Revert
A buffer can get out of sync with respect to its visited file on disk if that
file is changed by another program. To keep it up to date, you can enable Auto
Revert mode by typing M-x auto-revert-mode, or you can set it to be turned on
globally with 'global-auto-revert-mode'. I have also turned on Global Auto
Revert on non-file buffers, which is especially useful for 'dired' buffers.
#+begin_src emacs-lisp
(global-auto-revert-mode 1)
(setq global-auto-revert-non-file-buffers t)
#+end_src
** Keybindings within ibuffer mode
| COMMAND | DESCRIPTION | KEYBINDING |
|-----------------------------------+----------------------------------------+------------|
| ibuffer-mark-forward | Mark the buffer | m |
| ibuffer-unmark-forward | Unmark the buffer | u |
| ibuffer-do-kill-on-deletion-marks | Kill the marked buffers | x |
| ibuffer-filter-by-content | Ibuffer filter by content | f c |
| ibuffer-filter-by-directory | Ibuffer filter by directory | f d |
| ibuffer-filter-by-filename | Ibuffer filter by filename (full path) | f f |
| ibuffer-filter-by-mode | Ibuffer filter by mode | f m |
| ibuffer-filter-by-name | Ibuffer filter by name | f n |
| ibuffer-filter-disable | Disable ibuffer filter | f x |
| ibuffer-do-kill-lines | Hide marked buffers | g h |
| ibuffer-update | Restore hidden buffers | g H |
#+begin_src emacs-lisp
(evil-define-key 'normal ibuffer-mode-map
(kbd "f c") 'ibuffer-filter-by-content
(kbd "f d") 'ibuffer-filter-by-directory
(kbd "f f") 'ibuffer-filter-by-filename
(kbd "f m") 'ibuffer-filter-by-mode
(kbd "f n") 'ibuffer-filter-by-name
(kbd "f x") 'ibuffer-filter-disable
(kbd "g h") 'ibuffer-do-kill-lines
(kbd "g H") 'ibuffer-update)
#+end_src
* CALENDAR
Let's make a 12-month calendar available so we can have a calendar app that,
when we click on time/date in xmobar, we get a nice 12-month calendar to view.
#+begin_src emacs-lisp
;; https://stackoverflow.com/questions/9547912/emacs-calendar-show-more-than-3-months
(defun drk/year-calendar (&optional year)
(interactive)
(require 'calendar)
(let* (
(current-year (number-to-string (nth 5 (decode-time (current-time)))))
(month 0)
(year (if year year (string-to-number (format-time-string "%Y" (current-time))))))
(switch-to-buffer (get-buffer-create calendar-buffer))
(when (not (eq major-mode 'calendar-mode))
(calendar-mode))
(setq displayed-month month)
(setq displayed-year year)
(setq buffer-read-only nil)
(erase-buffer)
;; horizontal rows
(dotimes (j 4)
;; vertical columns
(dotimes (i 3)
(calendar-generate-month
(setq month (+ month 1))
year
;; indentation / spacing between months
(+ 5 (* 25 i))))
(goto-char (point-max))
(insert (make-string (- 10 (count-lines (point-min) (point-max))) ?\n))
(widen)
(goto-char (point-max))
(narrow-to-region (point-max) (point-max)))
(widen)
(goto-char (point-min))
(setq buffer-read-only t)))
(defun drk/scroll-year-calendar-forward (&optional arg event)
"Scroll the yearly calendar by year in a forward direction."
(interactive (list (prefix-numeric-value current-prefix-arg)
last-nonmenu-event))
(unless arg (setq arg 0))
(save-selected-window
(if (setq event (event-start event)) (select-window (posn-window event)))
(unless (zerop arg)
(let* (
(year (+ displayed-year arg)))
(drk/year-calendar year)))
(goto-char (point-min))
(run-hooks 'calendar-move-hook)))
(defun drk/scroll-year-calendar-backward (&optional arg event)
"Scroll the yearly calendar by year in a backward direction."
(interactive (list (prefix-numeric-value current-prefix-arg)
last-nonmenu-event))
(drk/scroll-year-calendar-forward (- (or arg 1)) event))
(map! :leader
:desc "Scroll year calendar backward" "<left>" #'drk/scroll-year-calendar-backward
:desc "Scroll year calendar forward" "<right>" #'drk/scroll-year-calendar-forward)
(defalias 'year-calendar 'drk/year-calendar)
#+end_src
* CLIPPY
Gives us a popup box with "Clippy, the paper clip". You can make him say various
things by calling 'clippy-say' function. But the more useful functions of
clippy are the two describe functions provided: 'clippy-describe-function' and
'clippy-describe-variable'. Hit the appropriate keybinding while the point is
over a function/variable to call it. A popup with helpful clippy will appear,
telling you about the function/variable (using describe-function and
describe-variable respectively).
| COMMAND | DESCRIPTION | KEYBINDING |
|--------------------------+---------------------------------------+------------|
| clippy-describe-function | /Clippy describes function under point/ | SPC c h f |
| clippy-describe-variable | /Clippy describes variable under point/ | SPC c h v |
#+begin_src emacs-lisp
(map! :leader
(:prefix ("c h" . "Help info from Clippy")
:desc "Clippy describes function under point" "f" #'clippy-describe-function
:desc "Clippy describes variable under point" "v" #'clippy-describe-variable))
#+end_src
* DAP MODE
dap-mode is a debugger manager for emacs that supports multiple languages.
#+begin_src emacs-lisp
(require 'dap-netcore)
(require 'dap-dlv-go)
(map! :leader
(:prefix ("d" . "dap-mode")
:desc "Toggle breakpoint" "t" #'dap-breakpoint-toggle
:desc "Continue execution" "c" #'dap-continue
:desc "Step in" "n" #'dap-step-in
:desc "Step out" "N" #'dap-step-out
:desc "See all breakpoints" "b" #'dap-ui-breakpoints-toggle
:desc "Change variable value" "s" #'dap-ui-set-variable-value
:desc "Evaluate expression at point" "e" #'dap-eval-thing-at-point
:desc "Evaluate expression" "E" #'dap-eval
:desc "Run debugger" "r" #'dap-debug
:desc "Restart debugger" "R" #'dap-debug-restart
:desc "Stop debugger" "d" #'dap-disconnect))
(use-package dap-mode
:init
(dap-auto-configure-mode)
:custom
(dap-netcore-download-url "https://github.com/Samsung/netcoredbg/releases/download/3.1.0-1031/netcoredbg-linux-amd64.tar.gz"))
#+end_src
* DIRED
Dired is the file manager within Emacs.
#+begin_src emacs-lisp
;; With dired-open plugin, you can launch external programs for certain
;; extensions For example, I set all .png files to open in 'vimiv' and all .mp4
;; files to open in 'mpv'
(setq dired-open-extensions '(("gif" . "vimiv")
("jpg" . "vimiv")
("png" . "vimiv")
("mkv" . "mpv")
("mp3" . "mpv")
("mp4" . "mpv")))
#+end_src
** Keybindings Within Dired With Peep-Dired-Mode Enabled
If peep-dired is enabled, you will get image previews as you go up/down with 'j'
and 'k'
| COMMAND | DESCRIPTION | KEYBINDING |
|----------------------+------------------------------------------+------------|
| peep-dired | /Toggle previews within dired/ | SPC d p |
| peep-dired-next-file | /Move to next file in peep-dired-mode/ | j |
| peep-dired-prev-file | /Move to previous file in peep-dired-mode/ | k |
#+BEGIN_SRC emacs-lisp
(evil-define-key 'normal peep-dired-mode-map
(kbd "j") 'peep-dired-next-file
(kbd "k") 'peep-dired-prev-file)
(add-hook 'peep-dired-hook 'evil-normalize-keymaps)
#+END_SRC
** Making deleted files go to trash can
#+begin_src emacs-lisp
(setq delete-by-moving-to-trash t
trash-directory "~/.local/share/Trash/files/")
#+end_src
* DOOM THEME
Setting the theme to doom-one. To try out new themes, I set a keybinding for
counsel-load-theme with 'SPC h t'.
#+BEGIN_SRC emacs-lisp
(setq doom-theme 'doom-gruvbox)
(map! :leader
:desc "Load new theme" "h t" #'load-theme)
#+END_SRC
* EMOJIS
Emojify is an Emacs extension to display emojis. It can display github style
emojis like :smile: or plain ascii ones like :).
#+begin_src emacs-lisp
(use-package emojify
:hook (after-init . global-emojify-mode))
#+end_src
* FONTS
Settings related to fonts within Doom Emacs:
+ 'doom-font' -- standard monospace font that is used for most things in Emacs.
+ 'doom-variable-pitch-font' -- variable font which is useful in some Emacs plugins.
+ 'doom-big-font' -- used in doom-big-font-mode; useful for presentations.
+ 'font-lock-comment-face' -- for comments.
+ 'font-lock-keyword-face' -- for keywords with special significanclike 'setq' in elisp.
#+BEGIN_SRC emacs-lisp
(setq doom-font (font-spec :family "Mononoki Nerd Font" :size 18)
doom-variable-pitch-font (font-spec :family "Mononoki Nerd Font" :size 18)
doom-big-font (font-spec :family "Mononoki Nerd Font" :size 24))
(after! doom-themes
(setq doom-themes-enable-bold t
doom-themes-enable-italic t))
(custom-set-faces!
'(font-lock-comment-face :slant italic)
'(font-lock-keyword-face :slant italic))
#+END_SRC
* INSERT DATE
Some custom functions to insert the date. The function 'insert-todays-date' can
be used one of three different ways: (1) just the keybinding without the
universal argument prefix, (2) with one universal argument prefix, or (3) with
two universal argument prefixes. The universal argument prefix is 'SPC-u' in
Doom Emacs (C-u in standard GNU Emacs). The function 'insert-any-date' only
outputs to one format, which is the same format as 'insert-todays-date' without
a prefix.
| COMMAND | EXAMPLE OUTPUT | KEYBINDING |
|------------------------+---------------------------+-----------------------|
| drk/insert-todays-date | Friday, November 19, 2021 | SPC i d t |
| drk/insert-todays-date | 11-19-2021 | SPC u SPC i d t |
| drk/insert-todays-date | 2021-11-19 | SPC u SPC u SPC i d t |
| drk/insert-any-date | Friday, November 19, 2021 | SPC i d a |
#+begin_src emacs-lisp
(defun drk/insert-todays-date (prefix)
(interactive "P")
(let ((format (cond
((not prefix) "%A, %B %d, %Y")
((equal prefix '(4)) "%m-%d-%Y")
((equal prefix '(16)) "%Y-%m-%d"))))
(insert (format-time-string format))))
(require 'calendar)
(defun drk/insert-any-date (date)
"Insert DATE using the current locale."
(interactive (list (calendar-read-date)))
(insert (calendar-date-string date)))
(map! :leader
(:prefix ("i d" . "Insert date")
:desc "Insert any date" "a" #'drk/insert-any-date
:desc "Insert todays date" "t" #'drk/insert-todays-date))
#+end_src
* IVY
Ivy is a generic completion mechanism for Emacs.
** IVY-POSFRAME
Ivy-posframe is an ivy extension, which lets ivy use posframe to show its
candidate menu. Some of the settings below involve:
+ ivy-posframe-display-functions-alist -- sets the display position for specific
programs
+ ivy-posframe-height-alist -- sets the height of the list displayed for
specific programs
Available functions (positions) for 'ivy-posframe-display-functions-alist'
+ ivy-posframe-display-at-frame-center
+ ivy-posframe-display-at-window-center
+ ivy-posframe-display-at-frame-bottom-left
+ ivy-posframe-display-at-window-bottom-left
+ ivy-posframe-display-at-frame-bottom-window-center
+ ivy-posframe-display-at-point
+ ivy-posframe-display-at-frame-top-center
=NOTE:= If the setting for 'ivy-posframe-display' is set to 'nil' (false),
anything that is set to 'ivy-display-function-fallback' will just default to
their normal position in Doom Emacs (usually a bottom split). However, if this
is set to 't' (true), then the fallback position will be centered in the window.
#+BEGIN_SRC emacs-lisp
(setq ivy-posframe-display-functions-alist
'((swiper . ivy-posframe-display-at-point)
(complete-symbol . ivy-posframe-display-at-point)
(counsel-M-x . ivy-display-function-fallback)
(counsel-esh-history . ivy-posframe-display-at-window-center)
(counsel-describe-function . ivy-display-function-fallback)
(counsel-describe-variable . ivy-display-function-fallback)
(counsel-find-file . ivy-display-function-fallback)
(counsel-recentf . ivy-display-function-fallback)
(counsel-register . ivy-posframe-display-at-frame-bottom-window-center)
(dmenu . ivy-posframe-display-at-frame-top-center)
(nil . ivy-posframe-display))
ivy-posframe-height-alist
'((swiper . 20)
(dmenu . 20)
(t . 10)))
(ivy-posframe-mode 1) ; 1 enables posframe-mode, 0 disables it.
#+END_SRC
** IVY KEYBINDINGS
By default, Doom Emacs does not use 'SPC v', so the format I use for these
bindings is 'SPC v' plus 'key'.
#+BEGIN_SRC emacs-lisp
(map! :leader
(:prefix ("v" . "Ivy")
:desc "Ivy push view" "v p" #'ivy-push-view
:desc "Ivy switch view" "v s" #'ivy-switch-view))
#+END_SRC
* LINE SETTINGS
I set comment-line to 'SPC TAB TAB' which is a rather comfortable keybinding for
me on my ZSA Moonlander keyboard. The standard Emacs keybinding for
comment-line is 'C-x C-;'. The other keybindings are for commands that toggle
on/off various line-related settings. Doom Emacs uses 'SPC t' for "toggle"
commands, so I choose 'SPC t' plus 'key' for those bindings.
| COMMAND | DESCRIPTION | KEYBINDING |
|--------------------------+-------------------------------------------+-------------|
| comment-line | /Comment or uncomment lines/ | SPC TAB TAB |
| hl-line-mode | /Toggle line highlighting in current frame/ | SPC t h |
| global-hl-line-mode | /Toggle line highlighting globally/ | SPC t H |
| doom/toggle-line-numbers | /Toggle line numbers/ | SPC t l |
| toggle-truncate-lines | /Toggle truncate lines/ | SPC t t |
#+BEGIN_SRC emacs-lisp
(setq display-line-numbers-type t)
(map! :leader
:desc "Comment or uncomment lines" "TAB TAB" #'comment-line
(:prefix ("t" . "toggle")
:desc "Toggle line numbers" "l" #'doom/toggle-line-numbers
:desc "Toggle line highlight in frame" "h" #'hl-line-mode
:desc "Toggle line highlight globally" "H" #'global-hl-line-mode
:desc "Toggle truncate lines" "t" #'toggle-truncate-lines))
#+END_SRC
* LSP
Autostart lsp for programming languages
- C#:
#+begin_src emacs-lisp
(add-hook 'csharp-mode-hook #'lsp-deferred)
#+end_src
- Go:
#+begin_src emacs-lisp
(add-hook 'go-mode-hook #'lsp-deferred)
#+end_src
- Rust:
#+begin_src emacs-lisp
(add-hook 'rust-mode-hook #'lsp-deferred)
#+end_src
* MARKDOWN
#+begin_src emacs-lisp
(custom-set-faces
'(markdown-header-face ((t (:inherit font-lock-function-name-face :weight bold :family "Mononoki Nerd Font"))))
'(markdown-header-face-1 ((t (:inherit markdown-header-face :height 1.7))))
'(markdown-header-face-2 ((t (:inherit markdown-header-face :height 1.6))))
'(markdown-header-face-3 ((t (:inherit markdown-header-face :height 1.5))))
'(markdown-header-face-4 ((t (:inherit markdown-header-face :height 1.4))))
'(markdown-header-face-5 ((t (:inherit markdown-header-face :height 1.3))))
'(markdown-header-face-6 ((t (:inherit markdown-header-face :height 1.2)))))
#+end_src
* MODELINE
The modeline is the bottom status bar that appears in Emacs windows. For more
information on what is available to configure in the Doom modeline, check out:
https://github.com/seagle0128/doom-modeline
#+begin_src emacs-lisp
(set-face-attribute 'mode-line nil :font "Mononoki Nerd Font-14")
(setq doom-modeline-height 30 ;; sets modeline height
doom-modeline-bar-width 5 ;; sets right bar width
doom-modeline-persp-name t ;; adds perspective name to modeline
doom-modeline-persp-icon t) ;; adds folder icon next to persp name
#+end_src
* MOUSE SUPPORT
Adding mouse support in the terminal version of Emacs.
#+begin_src emacs-lisp
(xterm-mouse-mode 1)
#+end_src
* NEOTREE
1. SPC + e to toggle neotree
2. Make neotree prettier
3. Every time when the neotree window is opened, let it find current file and jump to node.
4. When running projectile-switch-project (SPC p p), neotree will change root automatically.
#+begin_src emacs-lisp
(map! :leader
:desc "Toggle neotree" "e" #'neotree-toggle)
(setq neo-theme 'nerd)
(setq neo-smart-open t)
(setq projectile-switch-project-action 'neotree-projectile-action)
#+end_src
* OPEN SPECIFIC FILES
Keybindings to open files that I work with all the time using the find-file
command, which is the interactive file search that opens with 'C-x C-f' in GNU
Emacs or 'SPC f f' in Doom Emacs. These keybindings use find-file
non-interactively since we specify exactly what file to open. The format I use
for these bindings is 'SPC =' plus 'key' since Doom Emacs does not use 'SPC ='.
| PATH TO FILE | DESCRIPTION | KEYBINDING |
|--------------------------------+-----------------------+------------|
| ~/org/agenda.org | /Edit agenda file/ | SPC = a |
| ~/.config/doom/config.org" | /Edit doom config.org/ | SPC = c |
| ~/.config/doom/init.el" | /Edit doom init.el/ | SPC = i |
| ~/.config/doom/packages.el" | /Edit doom packages.el/ | SPC = p |
#+BEGIN_SRC emacs-lisp
(map! :leader
(:prefix ("=" . "open file")
:desc "Edit agenda file" "a" #'(lambda () (interactive) (find-file "~/org/agenda.org"))
:desc "Edit doom config.org" "c" #'(lambda () (interactive) (find-file "~/.config/doom/config.org"))
:desc "Edit doom init.el" "i" #'(lambda () (interactive) (find-file "~/.config/doom/init.el"))
:desc "Edit doom packages.el" "p" #'(lambda () (interactive) (find-file "~/.config/doom/packages.el"))))
#+END_SRC
* ORG MODE
I wrapped most of this block in (after! org). Without this, my settings might
be evaluated too early, which will result in my settings being overwritten by
Doom's defaults. I have also enabled org-journal, org-superstar and org-roam by
adding (+journal +pretty +roam2) to the org section of my Doom Emacs init.el.
#+BEGIN_SRC emacs-lisp
(map! :leader
:desc "Org babel tangle" "m B" #'org-babel-tangle)
(after! org
(setq org-directory "~/org/"
org-agenda-files '("~/org/agenda.org")
org-default-notes-file (expand-file-name "notes.org" org-directory)
org-ellipsis " ▼ "
org-superstar-headline-bullets-list '("◉" "●" "○" "◆" "●" "○" "◆")
org-superstar-item-bullet-alist '((?+ . ?➤) (?- . ?✦)) ; changes +/- symbols in item lists
org-log-done 'time
org-hide-emphasis-markers t
;; ex. of org-link-abbrev-alist in action
;; [[arch-wiki:Name_of_Page][Description]]
org-link-abbrev-alist ; This overwrites the default Doom org-link-abbrev-list
'(("google" . "http://www.google.com/search?q=")
("arch-wiki" . "https://wiki.archlinux.org/index.php/")
("ddg" . "https://duckduckgo.com/?q=")
("wiki" . "https://en.wikipedia.org/wiki/"))
org-todo-keywords ; This overwrites the default Doom org-todo-keywords
'((sequence
"TODO(t)" ; A task that is ready to be tackled
"BLOG(b)" ; Blog writing assignments
"GYM(g)" ; Things to accomplish at the gym
"GAME(j)" ; Things to accomplish at the gym
"PROJ(p)" ; A project that contains other tasks
"VIDEO(v)" ; Video assignments
"WAIT(w)" ; Something is holding up this task
"|" ; The pipe necessary to separate "active" states and "inactive" states
"DONE(d)" ; Task has been completed
"CANCELLED(c)" )))) ; Task has been cancelled
(setq org-agenda-custom-commands
'(("p" "Priority view"
((tags "PRIORITY=\"A\""
((org-agenda-skip-function '(org-agenda-skip-entry-if 'todo 'done))
(org-agenda-overriding-header "High priority unfinished tasks:")))
(tags "PRIORITY=\"B\""
((org-agenda-skip-function '(org-agenda-skip-entry-if 'todo 'done))
(org-agenda-overriding-header "Medium priority unfinished tasks:")))
(tags "PRIORITY=\"C\""
((org-agenda-skip-function '(org-agenda-skip-entry-if 'todo 'done))
(org-agenda-overriding-header "Low priority unfinished tasks:")))))
("i" "INTEC view"
((tags "homeworks"
((org-agenda-skip-function '(org-agenda-skip-entry-if 'todo 'done))
(org-agenda-overriding-header "Pending homeworks:")))
(tags "studies"
((org-agenda-skip-function '(org-agenda-skip-entry-if 'todo 'done))
(org-agenda-overriding-header "Pending studies:")))
(tags "exam"
((org-agenda-skip-function '(org-agenda-skip-entry-if 'todo 'done))
(org-agenda-overriding-header "Pending exams:")))))
))
(setq
org-agenda-block-separator 985827
org-fancy-priorities-list '("󰈼" "󰈻" "󰈽")
org-priority-faces
'((?A :foreground "#fb4934" :weight bold)
(?B :foreground "#fabd2f" :weight bold)
(?C :foreground "#83a598" :weight bold)))
#+END_SRC
** Org-publish
#+begin_src emacs-lisp
(setq org-publish-use-timestamps-flag nil)
(setq org-export-with-broken-links t)
#+end_src
** Org-auto-tangle
=org-auto-tangle= allows you to add the option =#+auto_tangle: t= in your Org file
so that it automatically tangles when you save the document.
#+begin_src emacs-lisp
(use-package! org-auto-tangle
:defer t
:hook (org-mode . org-auto-tangle-mode)
:config
(setq org-auto-tangle-default t))
#+end_src
* RAINBOW MODE
Rainbox mode displays the actual color for any hex value color. It's such a
nice feature that I wanted it turned on all the time, regardless of what mode I
am in. The following creates a global minor mode for rainbow-mode and enables
it.
#+begin_src emacs-lisp
(define-globalized-minor-mode global-rainbow-mode rainbow-mode
(lambda () (rainbow-mode 1)))
(global-rainbow-mode 1 )
#+end_src
* REGISTERS
Emacs registers are compartments where you can save text, rectangles and
positions for later use. Once you save text or a rectangle in a register, you
can copy it into the buffer once or many times; once you save a position in a
register, you can jump back to that position once or many times. The default
GNU Emacs keybindings for these commands (with the exception of
counsel-register) involves 'C-x r' followed by one or more other keys. I wanted
to make this a little more user friendly, and since I am using Doom Emacs, I
choose to replace the 'C-x r' part of the key chords with 'SPC r'.
| COMMAND | DESCRIPTION | KEYBINDING |
|----------------------------------+----------------------------------+------------|
| copy-to-register | /Copy to register/ | SPC r c |
| frameset-to-register | /Frameset to register/ | SPC r f |
| insert-register | /Insert contents of register/ | SPC r i |
| jump-to-register | /Jump to register/ | SPC r j |
| list-registers | /List registers/ | SPC r l |
| number-to-register | /Number to register/ | SPC r n |
| counsel-register | /Interactively choose a register/ | SPC r r |
| view-register | /View a register/ | SPC r v |
| window-configuration-to-register | /Window configuration to register/ | SPC r w |
| increment-register | /Increment register/ | SPC r + |
| point-to-register | /Point to register/ | SPC r SPC |
#+BEGIN_SRC emacs-lisp
(map! :leader
(:prefix ("r" . "registers")
:desc "Copy to register" "c" #'copy-to-register
:desc "Frameset to register" "f" #'frameset-to-register
:desc "Insert contents of register" "i" #'insert-register
:desc "Jump to register" "j" #'jump-to-register
:desc "List registers" "l" #'list-registers
:desc "Number to register" "n" #'number-to-register
:desc "Interactively choose a register" "r" #'counsel-register
:desc "View a register" "v" #'view-register
:desc "Window configuration to register" "w" #'window-configuration-to-register
:desc "Increment register" "+" #'increment-register
:desc "Point to register" "SPC" #'point-to-register))
#+END_SRC
* SHELLS
Settings for the various shells and terminal emulators within Emacs.
+ 'shell-file-name' -- sets the shell to be used in M-x shell, M-x term, M-x
ansi-term and M-x vterm.
#+BEGIN_SRC emacs-lisp
(setq shell-file-name "/bin/bash"
vterm-max-scrollback 5000)
(map! :leader
:desc "Vterm popup toggle" "v t" #'+vterm/toggle)
#+END_SRC
* SPLITS
I set splits to default to opening on the right using 'prefer-horizontal-split'.
I set a keybinding for 'clone-indirect-buffer-other-window' for when I want to
have the same document in two splits. The text of the indirect buffer is always
identical to the text of its base buffer; changes made by editing either one are
visible immediately in the other. But in all other respects, the indirect
buffer and its base buffer are completely separate. For example, I can fold one
split but other will be unfolded.
#+BEGIN_SRC emacs-lisp
(defun prefer-horizontal-split ()
(set-variable 'split-height-threshold nil t)
(set-variable 'split-width-threshold 40 t)) ; make this as low as needed
(add-hook 'markdown-mode-hook 'prefer-horizontal-split)
(map! :leader
:desc "Clone indirect buffer other window" "b c" #'clone-indirect-buffer-other-window)
#+END_SRC
* WINNER MODE
Winner mode has been included with GNU Emacs since version 20. This is a global
minor mode and, when activated, it allows you to “undo” (and “redo”) changes in
the window configuration with the key commands 'SCP w <left>' and 'SPC w
<right>'.
#+BEGIN_SRC emacs-lisp
(map! :leader
(:prefix ("w" . "window")
:desc "Winner redo" "<right>" #'winner-redo
:desc "Winner undo" "<left>" #'winner-undo))
#+END_SRC
* ZAP TO CHAR
Emacs provides a 'zap-to-char' command that kills from the current point to a
character. It is bound to 'M-z' in standard GNU Emacs but since Doom Emacs uses
'SPC' as its leader key and does not have 'SPC z' binded to anything, it just
makes since to use it for 'zap-to-char'. Note that 'zap-to-char' can be used
with the universal argument 'SPC u' to modify its behavior. Examples of
'zap-to-char' usage are listed in the table below:
| KEYBINDING | WHAT IS DOES |
|---------------------------+------------------------------------------------------------|
| SPC z e | deletes all chars to the next occurrence of 'e' |
| SPC u 2 SPC z e | deletes all chars to the second occurrence of 'e' |
| SPC u - SPC z e | deletes all chars to the previous occurrence of 'e' |
| SPC u -2 SPC z e | deletes all chars to the fourth previous occurrence of 'e' |
| SPC u 1 0 0 SPC u SPC z e | deletes all chars to the 100th occurrence of 'e' |
=TIP:= The universal argument (SPC u) can only take a single integer by default.
If you need to use a multi-digit number (like 100 in the last example in the
table above), then you must terminate the universal argument with another 'SPC
u' after typing the number.
'zap-up-to-char' is an alternative command that does not zap the char specified.
It is binded to 'SPC Z'. It can also be used in conjunction with the universal
argument 'SPC u' in similar fashion to the the 'zap-to-char' examples above.
=NOTE:= Vim (evil mode) has similar functionality builtin. You can delete to the
next occurrence of 'e' by using 'dte' in normal. To delete to the next
occurrence of 'e' including the 'e', then you would use 'dfe'. And you can
modify 'dt' and 'df' by prefixing them with numbers, so '2dte' would delete to
the second occurrence of 'e'.
#+BEGIN_SRC emacs-lisp
(map! :leader
:desc "Zap to char" "z" #'zap-to-char
:desc "Zap up to char" "Z" #'zap-up-to-char)
#+END_SRC
* TRANSPARENT
Transparent window
#+BEGIN_SRC emacs-lisp
(set-frame-parameter nil 'alpha-background 95) ; For current frame
(add-to-list 'default-frame-alist '(alpha-background . 95)) ; For all new frames henceforth
(when (daemonp)
(exec-path-from-shell-initialize))
#+END_SRC

View file

@ -1,195 +0,0 @@
;;; init.el -*- lexical-binding: t; -*-
;; This file controls what Doom modules are enabled and what order they load
;; in. Remember to run 'doom sync' after modifying it!
;; NOTE Press 'SPC h d h' (or 'C-h d h' for non-vim users) to access Doom's
;; documentation. There you'll find a link to Doom's Module Index where all
;; of our modules are listed, including what flags they support.
;; NOTE Move your cursor over a module's name (or its flags) and press 'K' (or
;; 'C-c c k' for non-vim users) to view its documentation. This works on
;; flags as well (those symbols that start with a plus).
;;
;; Alternatively, press 'gd' (or 'C-c c d') on a module to browse its
;; directory (for easy access to its source code).
(doom! :input
;;bidi ; (tfel ot) thgir etirw uoy gnipleh
;;chinese
;;japanese
;;layout ; auie,ctsrnm is the superior home row
:completion
company ; the ultimate code completion backend
;;(corfu +orderless) ; complete with cap(f), cape and a flying feather!
;;helm ; the *other* search engine for love and life
;;ido ; the other *other* search engine...
;;ivy ; a search engine for love and life
vertico ; the search engine of the future
:ui
;;deft ; notational velocity for Emacs
doom ; what makes DOOM look the way it does
doom-dashboard ; a nifty splash screen for Emacs
doom-quit ; DOOM quit-message prompts when you quit Emacs
(emoji +unicode) ; 🙂
hl-todo ; highlight TODO/FIXME/NOTE/DEPRECATED/HACK/REVIEW
;;hydra
indent-guides ; highlighted indent columns
ligatures ; ligatures and symbols to make your code pretty again
;;minimap ; show a map of the code on the side
modeline ; snazzy, Atom-inspired modeline, plus API
;;nav-flash ; blink cursor line after big motions
neotree ; a project drawer, like NERDTree for vim
ophints ; highlight the region an operation acts on
(popup +defaults) ; tame sudden yet inevitable temporary windows
;;tabs ; a tab bar for Emacs
;;treemacs ; a project drawer, like neotree but cooler
unicode ; extended unicode support for various languages
(vc-gutter +pretty) ; vcs diff in the fringe
vi-tilde-fringe ; fringe tildes to mark beyond EOB
;;window-select ; visually switch windows
workspaces ; tab emulation, persistence & separate workspaces
;;zen ; distraction-free coding or writing
:editor
(evil +everywhere) ; come to the dark side, we have cookies
file-templates ; auto-snippets for empty files
fold ; (nigh) universal code folding
;;(format +onsave) ; automated prettiness
;;god ; run Emacs commands without modifier keys
;;lispy ; vim for lisp, for people who don't like vim
;;multiple-cursors ; editing in many places at once
;;objed ; text object editing for the innocent
;;parinfer ; turn lisp into python, sort of
;;rotate-text ; cycle region at point between text candidates
snippets ; my elves. They type so I don't have to
word-wrap ; soft wrapping with language-aware indent
:emacs
dired ; making dired pretty [functional]
electric ; smarter, keyword-based electric-indent
ibuffer ; interactive buffer management
undo ; persistent, smarter undo for your inevitable mistakes
vc ; version-control and Emacs, sitting in a tree
:term
;;eshell ; the elisp shell that works everywhere
;;shell ; simple shell REPL for Emacs
;;term ; basic terminal emulator for Emacs
vterm ; the best terminal emulation in Emacs
:checkers
syntax ; tasing you for every semicolon you forget
;;(spell +flyspell) ; tasing you for misspelling mispelling
;;grammar ; tasing grammar mistake every you make
:tools
;;ansible
biblio ; Writes a PhD for you (citation needed)
;;collab ; buffers with friends
debugger ; FIXME stepping through code, to help you add bugs
;;direnv
docker
;;editorconfig ; let someone else argue about tabs vs spaces
;;ein ; tame Jupyter notebooks with emacs
(eval +overlay) ; run code, run (also, repls)
lookup ; navigate your code and its documentation
lsp ; M-x vscode
magit ; a git porcelain for Emacs
;;make ; run make tasks from Emacs
;;pass ; password manager for nerds
pdf ; pdf enhancements
;;prodigy ; FIXME managing external services & code builders
;;rgb ; creating color strings
;;taskrunner ; taskrunner for all your projects
;;terraform ; infrastructure as code
;;tmux ; an API for interacting with tmux
tree-sitter ; syntax and parsing, sitting in a tree...
;;upload ; map local to remote projects via ssh/ftp
:os
(:if (featurep :system 'macos) macos) ; improve compatibility with macOS
tty ; improve the terminal Emacs experience
:lang
;;agda ; types of types of types of types...
;;beancount ; mind the GAAP
(cc +lsp) ; C > C++ == 1
;;clojure ; java with a lisp
;;common-lisp ; if you've seen one lisp, you've seen them all
;;coq ; proofs-as-programs
;;crystal ; ruby at the speed of c
csharp ; unity, .NET, and mono shenanigans
data ; config/data formats
(dart +flutter) ; paint ui and not much else
;;dhall
;;elixir ; erlang done right
;;elm ; care for a cup of TEA?
emacs-lisp ; drown in parentheses
;;erlang ; an elegant language for a more civilized age
;;ess ; emacs speaks statistics
;;factor
;;faust ; dsp, but you get to keep your soul
;;fortran ; in FORTRAN, GOD is REAL (unless declared INTEGER)
;;fsharp ; ML stands for Microsoft's Language
;;fstar ; (dependent) types and (monadic) effects and Z3
gdscript ; the language you waited for
(go +lsp) ; the hipster dialect
;;(graphql +lsp) ; Give queries a REST
;;(haskell +lsp) ; a language that's lazier than I am
;;hy ; readability of scheme w/ speed of python
;;idris ; a language you can depend on
json ; At least it ain't XML
;;(java +lsp) ; the poster child for carpal tunnel syndrome
javascript ; all(hope(abandon(ye(who(enter(here))))))
;;julia ; a better, faster MATLAB
;;kotlin ; a better, slicker Java(Script)
latex ; writing papers in Emacs has never been so fun
;;lean ; for folks with too much to prove
;;ledger ; be audit you can be
lua ; one-based indices? one-based indices
markdown ; writing docs for people to ignore
;;nim ; python + lisp at the speed of c
;;nix ; I hereby declare "nix geht mehr!"
;;ocaml ; an objective camel
org ; organize your plain life in plain text
;;php ; perl's insecure younger brother
;;plantuml ; diagrams for confusing people more
;;purescript ; javascript, but functional
python ; beautiful is better than ugly
;;qt ; the 'cutest' gui framework ever
;;racket ; a DSL for DSLs
;;raku ; the artist formerly known as perl6
rest ; Emacs as a REST client
;;rst ; ReST in peace
;;(ruby +rails) ; 1.step {|i| p "Ruby is #{i.even? ? 'love' : 'life'}"}
(rust +lsp) ; Fe2O3.unwrap().unwrap().unwrap().unwrap()
;;scala ; java, but good
;;(scheme +guile) ; a fully conniving family of lisps
sh ; she sells {ba,z,fi}sh shells on the C xor
;;sml
;;solidity ; do you need a blockchain? No.
;;swift ; who asked for emoji variables?
;;terra ; Earth and Moon in alignment for performance.
web ; the tubes
yaml ; JSON, but readable
zig ; C, but simpler
:email
;;(mu4e +org +gmail)
;;notmuch
;;(wanderlust +gmail)
:app
calendar
;;emms
;;everywhere ; *leave* Emacs!? You must be joking
;;irc ; how neckbeards socialize
(rss +org) ; emacs as an RSS reader
;;twitter ; twitter client https://twitter.com/vnought
:config
literate
(default +bindings +smartparens))

View file

@ -1,83 +0,0 @@
;; -*- no-byte-compile: t; -*-
;;; $DOOMDIR/packages.el
;; To install a package with Doom you must declare them here and run 'doom sync'
;; on the command line, then restart Emacs for the changes to take effect -- or
;; use 'M-x doom/reload'.
;; To install SOME-PACKAGE from MELPA, ELPA or emacsmirror:
;; (package! some-package)
;; To install a package directly from a remote git repo, you must specify a
;; `:recipe'. You'll find documentation on what `:recipe' accepts here:
;; https://github.com/radian-software/straight.el#the-recipe-format
;; (package! another-package
;; :recipe (:host github :repo "username/repo"))
;; If the package you are trying to install does not contain a PACKAGENAME.el
;; file, or is located in a subdirectory of the repo, you'll need to specify
;; `:files' in the `:recipe':
;; (package! this-package
;; :recipe (:host github :repo "username/repo"
;; :files ("some-file.el" "src/lisp/*.el")))
;; If you'd like to disable a package included with Doom, you can do so here
;; with the `:disable' property:
;; (package! builtin-package :disable t)
;; You can override the recipe of a built in package without having to specify
;; all the properties for `:recipe'. These will inherit the rest of its recipe
;; from Doom or MELPA/ELPA/Emacsmirror:
;; (package! builtin-package :recipe (:nonrecursive t))
;; (package! builtin-package-2 :recipe (:repo "myfork/package"))
;; Specify a `:branch' to install a package from a particular branch or tag.
;; This is required for some packages whose default branch isn't 'master' (which
;; our package manager can't deal with; see radian-software/straight.el#279)
;; (package! builtin-package :recipe (:branch "develop"))
;; Use `:pin' to specify a particular commit to install.
;; (package! builtin-package :pin "1a2b3c4d5e")
;; Doom's packages are pinned to a specific commit and updated from release to
;; release. The `unpin!' macro allows you to unpin single packages...
;; (unpin! pinned-package)
;; ...or multiple packages
;; (unpin! pinned-package another-pinned-package)
;; ...Or *all* packages (NOT RECOMMENDED; will likely break things)
;; (unpin! t)
(package! gitconfig-mode
:recipe (:host github :repo "magit/git-modes"
:files ("gitconfig-mode.el")))
(package! gitignore-mode
:recipe (:host github :repo "magit/git-modes"
:files ("gitignore-mode.el")))
(package! flycheck-aspell)
(package! async)
(package! dired-open)
(package! dired-subtree)
(package! esxml)
(package! evil-tutor)
(package! imenu-list)
(package! ivy-posframe)
(package! mw-thesaurus)
(package! org-board)
(package! org-web-tools)
(package! org-auto-tangle)
(package! peep-dired)
(package! rainbow-mode)
(package! request)
(package! resize-window)
(package! s)
(package! tldr)
(package! wc-mode)
(package! beacon)
(package! olivetti)
(package! sharper)
(package! csproj-mode)
(package! dap-mode)
(package! vimrc-mode)
(package! exec-path-from-shell)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

View file

@ -1,358 +0,0 @@
[global]
### Display ###
# Which monitor should the notifications be displayed on.
monitor = 0
# Display notification on focused monitor. Possible modes are:
# mouse: follow mouse pointer
# keyboard: follow window with keyboard focus
# none: don't follow anything
#
# "keyboard" needs a window manager that exports the
# _NET_ACTIVE_WINDOW property.
# This should be the case for almost all modern window managers.
#
# If this option is set to mouse or keyboard, the monitor option
# will be ignored.
follow = mouse
# Show how many messages are currently hidden (because of geometry).
indicate_hidden = yes
# Shrink window if it's smaller than the width. Will be ignored if
# width is 0.
shrink = no
# The transparency of the window. Range: [0; 100].
# This option will only work if a compositing window manager is
# present (e.g. xcompmgr, compiz, etc.).
transparency = 5
# 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 = 8
# Horizontal padding.
horizontal_padding = 8
# Defines width in pixels of frame around the notification window.
# Set to 0 to disable.
frame_width = 2
# Defines color of the frame around the notification window.
frame_color = "#cc241d"
# 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 = auto
# Sort messages by urgency.
sort = yes
# Don't remove messages, if the user is idle (no mouse or keyboard input)
# for longer than idle_threshold seconds.
# Set to 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 = mononoki Nerd Font 10
# The spacing between 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>%s</b>\n%b"
# Alignment of message text.
# Possible values are "left", "center" and "right".
alignment = center
# Show age of message if message is older than show_age_threshold
# seconds.
# Set to -1 to disable.
show_age_threshold = 60
# Split notifications into multiple lines if they don't fit into
# geometry.
word_wrap = yes
# When word_wrap is set to no, specify where to make an ellipsis in long lines.
# Possible values are "start", "middle" and "end".
ellipsize = middle
# Ignore newlines '\n' in notifications.
ignore_newline = no
# Stack together notifications with the same content
stack_duplicates = true
# Hide the count of stacked 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 larger icons down to this size, set to 0 to disable
max_icon_size = 32
# Paths to default icons.
icon_path = /usr/share/icons/Papirus-Dark/96x96/devices:/usr/share/icons/Papirus-Dark/48x48/status:/usr/share/icons/Papirus-Dark/96x96/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/bin/dmenu -p dunst:
# Browser for opening urls in context menu.
browser = /usr/bin/qutebrowser
# 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
### 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 action of mouse event
# Possible values are:
# * none: Don't do anything.
# * do_action: If the notification has exactly one action, or one is marked as default,
# invoke it. If there are multiple and no default, open the context menu.
# * close_current: Close current notification.
# * close_all: Close all notifications.
mouse_left_click = do_action
mouse_middle_click = close_all
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]
# IMPORTANT: colors have to be defined in quotation marks.
# Otherwise the "#" and following would be interpreted as a comment.
background = "#282828"
foreground = "#ebdbd2"
timeout = 5
# Icon for notifications with low urgency, uncomment to enable
icon = /home/drk/.config/dunst/normal.png
[urgency_normal]
background = "#282828"
foreground = "#ebdbd2"
timeout = 5
# Icon for notifications with normal urgency, uncomment to enable
icon = /home/drk/.config/dunst/normal.png
[urgency_critical]
background = "#900000"
foreground = "#ebdbd2"
frame_color = "#ff0000"
timeout = 5
# Icon for notifications with critical urgency, uncomment to enable
icon = /home/drk/.config/dunst/critical.png
# 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
# timeout
# urgency
#
# 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: if you don't want a notification to be displayed, set the format
# to "".
# 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"
# format = ""
#[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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.8 KiB

244
config/fish/config.fish Normal file
View file

@ -0,0 +1,244 @@
## ____ __
## / __ \_________ _/ /_____
## / / / / ___/ __ `/ //_/ _ \
## / /_/ / / / /_/ / ,< / __/ Clay Gomera (Drake)
## /_____/_/ \__,_/_/|_|\___/ My custom fish config
##
### ADDING TO THE PATH
# First line removes the path; second line sets it. Without the first line,
# your path gets massive and fish becomes very slow.
set -e fish_user_paths
set -U fish_user_paths $HOME/.bin $HOME/.local/bin $HOME/.go/bin $HOME/.cargo/bin $HOME/.local/lib/flutter/bin $HOME/.local/lib/android/emulator $HOME/.local/share/JetBrains/Toolbox/scripts /var/lib/flatpak/exports/bin/ $fish_user_paths
### EXPORT ###
set fish_greeting # Supresses fish's intro message
set TERM "xterm-256color" # Sets the terminal type
### SET BAT AS MANPAGER
set -x MANPAGER "sh -c 'sed -u -e \"s/\\x1B\[[0-9;]*m//g; s/.\\x08//g\" | bat -p -lman'"
### SET EITHER DEFAULT EMACS MODE OR VI MODE ###
function fish_user_key_bindings
# fish_default_key_bindings
fish_vi_key_bindings
end
### END OF VI MODE ###
### AUTOCOMPLETE AND HIGHLIGHT COLORS ###
set fish_color_normal brcyan
set fish_color_autosuggestion '#504945'
set fish_color_command brcyan
set fish_color_error '#fb4934'
set fish_color_param brcyan
### FUNCTIONS ###
# Functions needed for !! and !$
function __history_previous_command
switch (commandline -t)
case "!"
commandline -t $history[1]; commandline -f repaint
case "*"
commandline -i !
end
end
function __history_previous_command_arguments
switch (commandline -t)
case "!"
commandline -t ""
commandline -f history-token-search-backward
case "*"
commandline -i '$'
end
end
# The bindings for !! and !$
if [ "$fish_key_bindings" = "fish_vi_key_bindings" ];
bind -Minsert ! __history_previous_command
bind -Minsert '$' __history_previous_command_arguments
else
bind ! __history_previous_command
bind '$' __history_previous_command_arguments
end
# Function for creating a backup file
# ex: backup file.txt
# result: copies file as file.txt.bak
function backup --argument filename
cp $filename $filename.bak
end
# Function for copying files and directories, even recursively.
# ex: copy DIRNAME LOCATIONS
# result: copies the directory and all of its contents.
function copy
set count (count $argv | tr -d \n)
if test "$count" = 2; and test -d "$argv[1]"
set from (echo $argv[1] | trim-right /)
set to (echo $argv[2])
command cp -r $from $to
else
command cp $argv
end
end
# Function for printing a column (splits input on whitespace)
# ex: echo 1 2 3 | coln 3
# output: 3
function coln
while read -l input
echo $input | awk '{print $'$argv[1]'}'
end
end
# Function for printing a row
# ex: seq 3 | rown 3
# output: 3
function rown --argument index
sed -n "$index p"
end
# Function for ignoring the first 'n' lines
# ex: seq 10 | skip 5
# results: prints everything but the first 5 lines
function skip --argument n
tail +(math 1 + $n)
end
# Function for taking the first 'n' lines
# ex: seq 10 | take 5
# results: prints only the first 5 lines
function take --argument number
head -$number
end
# unlock ssh keys
function unlock
ssh-add "$HOME/.ssh/$argv[1]"
end
### END OF FUNCTIONS ###
### ALIASES ###
# navigation
alias ..='cd ..'
alias ...='cd ../..'
alias .3='cd ../../..'
alias .4='cd ../../../..'
alias .5='cd ../../../../..'
# use lunarvim or neovim for vim if present.
if test -x "$HOME/.local/bin/lvim"
alias vim "$HOME/.local/bin/lvim"
else if test -x (command -v nvim)
alias vim "nvim"
end
# bat as cat
if test -x (command -v bat)
alias cat "bat"
end
# Changing "ls" to "eza"
alias ls='eza -al --color=always --group-directories-first' # my preferred listing
alias la='eza -a --color=always --group-directories-first' # all files and dirs
alias ll='eza -l --color=always --group-directories-first' # long format
alias lt='eza -aT --color=always --group-directories-first' # tree listing
alias l.='eza -a | egrep "^\."'
# package management
alias pkg-update="sudo dnf update"
alias pkg-install="sudo dnf install"
alias pkg-remove="sudo dnf remove"
alias pkg-search="sudo dnf search"
alias pkg-clean="sudo dnf autoremove"
# Colorize grep output (good for log files)
alias grep='grep --color=auto'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
# file management
alias fm="yazi"
alias flm="yazi"
alias cp='cp -iv'
alias mv='mv -iv'
alias rm='rm -vI'
alias mkd='mkdir -pv'
alias mkdir='mkdir -pv'
# audio
alias mx='pulsemixer'
alias amx='alsamixer'
alias mk='musikcube'
alias ms='musikcube'
alias music='musikcube'
# multimedia scripts
alias fli='flix-cli'
alias ani='ani-cli'
alias aniq='ani-cli -q'
# adding flags
alias df='df -h'
alias free='free -m'
# ps
alias psa="ps auxf"
alias psgrep="ps aux | grep -v grep | grep -i -e VSZ -e"
alias psmem='ps auxf | sort -nr -k 4'
alias pscpu='ps auxf | sort -nr -k 3'
# git
alias git-adu='git add -u'
alias git-adl='git add .'
alias git-brn='git branch'
alias git-chk='git checkout'
alias git-cln='git clone'
alias git-cmt='git commit -m'
alias git-fth='git fetch'
alias git-pll='git pull origin'
alias git-psh='git push origin'
alias git-sts='git status'
alias git-tag='git tag'
alias git-ntg='git tag -a'
# power management
alias po='systemctl poweroff'
alias sp='systemctl suspend'
alias rb='systemctl reboot'
# youtube-
alias yta-aac="yt-dlp --extract-audio --audio-format aac "
alias yta-best="yt-dlp --extract-audio --audio-format best "
alias yta-flac="yt-dlp --extract-audio --audio-format flac "
alias yta-m4a="yt-dlp --extract-audio --audio-format m4a "
alias yta-mp3="yt-dlp --extract-audio --audio-format mp3 "
alias yta-opus="yt-dlp --extract-audio --audio-format opus "
alias yta-vorbis="yt-dlp --extract-audio --audio-format vorbis "
alias yta-wav="yt-dlp --extract-audio --audio-format wav "
alias ytv-best="yt-dlp -f bestvideo+bestaudio "
alias yt='ytfzf -ftslT chafa'
alias youtube='ytfzf -ftslT chafa'
alias ytm='ytfzf -mtslT chafa'
alias youtube-music='ytfzf -mtslT chafa'
# network and bluetooth
alias netstats='nmcli dev'
alias wfi='nmtui-connect'
alias wfi-scan='nmcli dev wifi rescan && nmcli dev wifi list'
alias wfi-edit='nmtui-edit'
alias wfi-on='nmcli radio wifi on'
alias wfi-off='nmcli radio wifi off'
alias blt='bluetoothctl'
# android emulator
alias avd='QT_QPA_PLATFORM=xcb emulator -avd Pixel_7_Pro_API_35'
alias avds='emulator -list-avds'
alias avde='QT_QPA_PLATFORM=xcb emulator -avd'
### SETTING THE STARSHIP PROMPT ###
starship init fish | source
zoxide init fish | source
clido completion fish | source

View file

@ -2,3 +2,5 @@
mail = maverick.xero@proton.me mail = maverick.xero@proton.me
name = Lian Drake name = Lian Drake
email = maverick.xero@proton.me email = maverick.xero@proton.me
[safe]
directory = /usr/share/flutter

View file

@ -1,7 +1,7 @@
gtk-theme-name="Gruvbox-Dark" gtk-theme-name="Catppuccin-Dark"
gtk-icon-theme-name="Papirus-Dark" gtk-icon-theme-name="Papirus-Dark"
gtk-font-name="Inter 10" gtk-font-name="Inter 10"
gtk-cursor-theme-name="Simp1e-Gruvbox-Dark" gtk-cursor-theme-name="Simp1e-Catppuccin-Mocha"
gtk-cursor-theme-size=0 gtk-cursor-theme-size=0
gtk-toolbar-style=GTK_TOOLBAR_BOTH gtk-toolbar-style=GTK_TOOLBAR_BOTH
gtk-toolbar-icon-size=GTK_ICON_SIZE_LARGE_TOOLBAR gtk-toolbar-icon-size=GTK_ICON_SIZE_LARGE_TOOLBAR

View file

@ -1,8 +1,8 @@
[Settings] [Settings]
gtk-theme-name=Gruvbox-Dark gtk-theme-name=Catppuccin-Dark
gtk-icon-theme-name=Papirus-Dark gtk-icon-theme-name=Papirus-Dark
gtk-font-name=Inter 10 gtk-font-name=Inter 10
gtk-cursor-theme-name=Simp1e-Gruvbox-Dark gtk-cursor-theme-name=Simp1e-Catppuccin-Mocha
gtk-cursor-theme-size=0 gtk-cursor-theme-size=0
gtk-toolbar-style=GTK_TOOLBAR_BOTH gtk-toolbar-style=GTK_TOOLBAR_BOTH
gtk-toolbar-icon-size=GTK_ICON_SIZE_LARGE_TOOLBAR gtk-toolbar-icon-size=GTK_ICON_SIZE_LARGE_TOOLBAR

View file

@ -0,0 +1,20 @@
# ┏━┓┏┓╻╻┏┳┓┏━┓╺┳╸╻┏━┓┏┓╻
# ┣━┫┃┗┫┃┃┃┃┣━┫ ┃ ┃┃ ┃┃┗┫
# ╹ ╹╹ ╹╹╹ ╹╹ ╹ ╹ ╹┗━┛╹ ╹
animations {
enabled = yes
bezier = wind, 0.05, 0.9, 0.1, 1.05
bezier = winIn, 0.76, 0.42, 0.74, 0.87
bezier = winOut, 0.76, 0.42, 0.74, 0.87
bezier = workIn, 0.72, -0.07, 0.41, 0.98
bezier = linear, 0, 0, 1, 1
animation = windows, 1, 6, wind, popin
animation = windowsIn, 1, 1, workIn, popin
animation = windowsOut, 1, 5, workIn, popin
animation = windowsMove, 1, 5, wind, slide
animation = fadeIn, 1, 2, winIn
animation = fadeOut, 1, 5, winOut
animation = workspaces, 1, 3, workIn, slide
animation = specialWorkspace, 1, 5, workIn, slide
}

33
config/hypr/hypridle.conf Normal file
View file

@ -0,0 +1,33 @@
# ┳ ┳┓ ┓ ┏┓
# ┃ ┃┃ ┃ ┣
# ┻ ┻┛ ┗┛┗┛
general {
lock_cmd = pidof hyprlock || hyprlock # avoid starting multiple hyprlock instances.
before_sleep_cmd = playerctl pause; hyprlock # lock before suspend.
after_sleep_cmd = hyprctl dispatch dpms on # to avoid having to press a key twice to turn on the display.
}
listener {
timeout = 150 # 2.5min.
on-timeout = brightnessctl -s set 10 # set monitor backlight to minimum, avoid 0 on OLED monitor.
on-resume = brightnessctl -r # monitor backlight restor.
}
# turn off keyboard backlight, uncomment this section if have keyboard backlight.
listener {
timeout = 150 # 2.5min.
on-timeout = brightnessctl -sd rgb:kbd_backlight set 0 # turn off keyboard backlight.
on-resume = brightnessctl -rd rgb:kbd_backlight # turn on keyboard backlight.
}
listener {
timeout = 300 # 5min
on-timeout = loginctl lock-session # lock screen when timeout has passed
}
listener {
timeout = 380 # 5.5min
on-timeout = hyprctl dispatch dpms off # screen off when timeout has passed
on-resume = hyprctl dispatch dpms on # screen on when activity is detected after timeout has fired.
}

106
config/hypr/hyprland.conf Normal file
View file

@ -0,0 +1,106 @@
# autolaunch
exec-once = dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP
exec-once = dbus-update-activation-environment --systemd --all
exec-once = systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP
exec-once = /usr/libexec/polkit-gnome-authentication-agent-1
exec-once = /usr/libexec/xdg-desktop-portal-hyprland
exec-once = waybar
exec-once = mako
exec-once = wl-paste --type text --watch cliphist store
exec-once = wl-paste --type image --watch cliphist store
exec-once = swww-daemon
exec-once = hypridle
# environment variables
env = SSH_AUTH_SOCK,$XDG_RUNTIME_DIR/ssh-agent.socket
env = XDG_CURRENT_DESKTOP,Hyprland
env = XDG_SESSION_DESKTOP,Hyprland
env = XDG_SESSION_TYPE,wayland
env = CLUTTER_BACKEND,wayland
env = QT_QPA_PLATFORM,wayland;xcb
env = QT_STYLE_OVERRIDE,kvantum
env = QT_WAYLAND_DISABLE_WINDOWDECORATION,1
env = QT_AUTO_SCREEN_SCALE_FACTOR,1
env = GDK_BACKEND,wayland,x11
env = SDL_VIDEODRIVER,wayland
env = MOZ_ENABLE_WAYLAND,1
env = WLR_NO_HARDWARE_CURSORS,1
env = HYPRLAND_NO_SD_NOTIFY=0
env = XKB_DEFAULT_LAYOUT,us
env = ELECTRON_OZONE_PLATFORM_HINT,auto
env = TERMINAL,kitty
env = BROWSER,flatpak run com.brave.Browser
env = VIEWER,zathura
env = RUNNER,rofi -dmenu
env = RUNNER_EX,rofi -show drun
# monitor settings
monitor = eDP-1, preferred, 3200x0, 1
monitor = DP-1, highrr, 0x0, 1
monitor = HDMI-A-2, highrr, 1280x0, 1
#monitor = eDP-1, preferred, 0x0, 1
#monitor = HDMI-A-2, preferred, auto, 1, mirror, eDP-1
bindl = , switch:off:Lid Switch, exec, hyprctl keyword monitor "eDP-1, preferred, auto, 1"
bindl = , switch:on:Lid Switch, exec, hyprctl keyword monitor "eDP-1, disable"
# input settings
input {
kb_layout = us,es
kb_options = grp:shift_caps_toggle
follow_mouse = 1
scroll_method = 2fg
touchpad {
natural_scroll = yes
disable_while_typing = false
tap-to-click = true
}
sensitivity = -0.2
}
gestures {
workspace_swipe = true
workspace_swipe_touch = true
}
# cursor
cursor {
hide_on_touch = true
hide_on_key_press = true
inactive_timeout = 30
}
# layouts
dwindle {
pseudotile = yes
preserve_split = yes
}
master {
no_gaps_when_only = true
new_status = slave
drop_at_cursor = false
orientation = left
mfact = 0.50
}
# misc
misc {
allow_session_lock_restore = true
disable_hyprland_logo = true
disable_splash_rendering = true
mouse_move_enables_dpms = true
enable_swallow = true
swallow_regex = ^(alacritty)$
mouse_move_focuses_monitor = true
}
binds {
workspace_center_on = 1
allow_workspace_cycles = true
}
# source
source = ~/.config/hypr/animations.conf
source = ~/.config/hypr/keybindings.conf
source = ~/.config/hypr/rules.conf
source = ~/.config/hypr/theme.conf

62
config/hypr/hyprlock.conf Normal file
View file

@ -0,0 +1,62 @@
# _ _ _
# | |__ _ _ _ __ _ __| | ___ ___| | __
# | '_ \| | | | '_ \| '__| |/ _ \ / __| |/ /
# | | | | |_| | |_) | | | | (_) | (__| <
# |_| |_|\__, | .__/|_| |_|\___/ \___|_|\_\
# |___/|_|
general {
grace = 1
}
background {
monitor =
path = $HOME/.config/hypr/wall/lock.png # only png supported for now
blur_passes = 3 # 0 disables blurring
blur_size = 3
noise = 0.0117
contrast = 0.8916
brightness = 0.8172
vibrancy = 0.1696
vibrancy_darkness = 0.0
}
input-field {
monitor =
size = 300, 50
outline_thickness = 2
dots_size = 0.33 # Scale of input-field height, 0.2 - 0.8
dots_spacing = 0.15 # Scale of dots' absolute size, 0.0 - 1.0
dots_center = true
dots_rounding = -1 # -1 default circle, -2 follow input-field rounding
outer_color = rgb(203, 166, 247)
inner_color = rgb(30, 30, 46)
font_color = rgb(205, 214, 244)
fade_on_empty = false
fade_timeout = 1000 # Milliseconds before fade_on_empty is triggered.
placeholder_text = <span foreground="##cdd6f4" font_family="Inter">Input password...</span> # Text rendered in the input box when it's empty.
hide_input = false
rounding = -1 # -1 means complete rounding (circle/oval)
check_color = rgb(249, 226, 175)
fail_color = rgb(243, 139, 168) # if authentication failed, changes outer_color and fail message color
fail_text = <i>$FAIL <b>($ATTEMPTS)</b></i> # can be set to empty
fail_transition = 300 # transition time in ms between normal outer_color and fail_color
capslock_color = rgb(166, 227, 161)
numlock_color = -1
bothlock_color = -1 # when both locks are active. -1 means don't change outer color (same for above)
invert_numlock = false # change color if numlock is off
position = 0, -50
halign = center
valign = center
}
label {
monitor =
text = cmd[update:1000] echo "$TIME"
color = rgb(205, 214, 244)
font_size = 92
font_family = Inter Bold
position = 0, 80
halign = center
valign = center
}

View file

@ -0,0 +1,5 @@
preload = $HOME/.config/hypr/wall/wall.png
wallpaper = eDP-1,$HOME/.config/hypr/wall/wall.png
wallpaper = HDMI-A-2,$HOME/.config/hypr/wall/wall.png
wallpaper = DP-1,$HOME/.config/hypr/wall/wall.png
splash = false

View file

@ -0,0 +1,258 @@
# ╻┏ ┏━╸╻ ╻┏┓ ╻┏┓╻╺┳┓╻┏┓╻┏━╸┏━┓
# ┣┻┓┣╸ ┗┳┛┣┻┓┃┃┗┫ ┃┃┃┃┗┫┃╺┓┗━┓
# ╹ ╹┗━╸ ╹ ┗━┛╹╹ ╹╺┻┛╹╹ ╹┗━┛┗━┛
$supMod = SUPER # super key
$altMod = ALT # alt key
$conMod = CONTROL # control key
# Apps
$term = kitty
$chat = flatpak run org.signal.Signal
$office = flatpak run org.onlyoffice.desktopeditors
$notes = joplin-desktop
$browser = flatpak run com.brave.Browser
$file = kitty --class file_manager yazi
$editor = zed
$music = kitty --class musikcube musikcube
$rss = kitty --class newsboat newsboat
$password = flatpak run com.bitwarden.desktop
$ani-cli = kitty --class ani-cli ani-cli
$ytfzf = kitty --class ytfzf ytfzf -flstT chafa
$ytfzf-music = kitty --class ytfzf-music ytfzf -mlstT chafa
$flix-cli = kitty --class flix-cli flix-cli
$audiomixer = kitty --class pulsemixer pulsemixer
$monitor = foot -T monitor -a btop btop
$hmonitor = kitty --class htop htop
# run launchers
$run = pkill rofi || rofi -show run
$drun = pkill rofi || $RUNNER_EX
$rs_wifi = pkill rofi || $HOME/.config/rofi/scripts/rs_wifi
$rs_wall = pkill rofi || $HOME/.config/rofi/scripts/rs_wall
$rs_emoji = pkill rofi || $HOME/.config/rofi/scripts/rs_emoji
$rs_clip = pkill rofi || $HOME/.config/rofi/scripts/rs_clip
$rs_scrot = pkill rofi || $HOME/.config/rofi/scripts/rs_scrot
$rs_power = pkill rofi || $HOME/.config/rofi/scripts/rs_power
$rs_blue = pkill rofi || $HOME/.config/rofi/scripts/rs_blue
# main binds
bind = $supMod, RETURN, exec, kitty # launch a terminal
bind = $supMod, q, killactive # kill active window
bind = $supMod_$conMod_SHIFT, q, exit # exit the compositor
bind = $supMod, b, exec, pkill waybar || waybar # hide/show bar
bind = $supMod, f, togglefloating # toggle floating mode
bind = $supMod_SHIFT, f, fullscreen # toggle fullscreen mode
# focus binds
bind = $supMod, k, layoutmsg, cyclenext # focus next window
bind = $supMod, j, layoutmsg, cycleprev # focus previous window
bind = $supMod_SHIFT, RETURN, layoutmsg, focusmaster # focus master window
bind = $supMod, h, focusmonitor, -1 # focus monitor to right
bind = $supMod, l, focusmonitor, +1 # focus monitor to left
# layout binds
bind = $supMod_SHIFT, j, layoutmsg, swapnext # swap window with next
bind = $supMod_SHIFT, k, layoutmsg, swapprev # swap window with previous
bind = $supMod_SHIFT, l, layoutmsg, orientationnext # shift to next stack orientation
bind = $supMod_SHIFT, h, layoutmsg, orientationprev # shift to previous stack orientation
bind = $supMod, i, layoutmsg, addmaster # add window to master area
bind = $supMod, d, layoutmsg, removemaster # remove window to master area
bind = $supMod_$conMod, RETURN, layoutmsg, swapwithmaster # swap window with master
bindm = $supMod, mouse:272, movewindow # window movement with mouse
bindm = $supMod, mouse:273, resizewindow # window resizing with mouse
# group binds
bind = $supMod, g, togglegroup
bind = $supMod_$altMod, g, moveoutofgroup, active
bind = $supMod_$conMod, g, lockactivegroup
bind = $supMod_$conMod, h, movegroupwindow, b
bind = $supMod_$conMod, l, movegroupwindow
bind = $supMod_$conMod, k, changegroupactive, b
bind = $supMod_$conMod, j, changegroupactive, f
bind = $supMod_$altMod, l, moveintogroup, r
bind = $supMod_$altMod, h, moveintogroup, l
bind = $supMod_$altMod, k, moveintogroup, u
bind = $supMod_$altMod, j, moveintogroup, d
# resize submap
bind = $supMod, r, submap, resize
submap = resize # will start a submap called "resize"
## sets repeatable binds for resizing the active window
binde = , right, resizeactive, 30 0
binde = , left, resizeactive, -30 0
binde = , up, resizeactive, 0 -30
binde = , down, resizeactive, 0 30
binde = , l, resizeactive, 30 0
binde = , h, resizeactive, -30 0
binde = , k, resizeactive, 0 -30
binde = , j, resizeactive, 0 30
## use reset to go back to the global submap
bind = , escape, submap, reset
## will reset the submap, which will return to the global submap
submap = reset
# workspaces binds
bind = $supMod, 1, focusworkspaceoncurrentmonitor, 1 # switch to workspace 1
bind = $supMod, 2, focusworkspaceoncurrentmonitor, 2 # switch to workspace 2
bind = $supMod, 3, focusworkspaceoncurrentmonitor, 3 # switch to workspace 3
bind = $supMod, 4, focusworkspaceoncurrentmonitor, 4 # switch to workspace 4
bind = $supMod, 5, focusworkspaceoncurrentmonitor, 5 # switch to workspace 5
bind = $supMod, 6, focusworkspaceoncurrentmonitor, 6 # switch to workspace 6
bind = $supMod, 7, focusworkspaceoncurrentmonitor, 7 # switch to workspace 7
bind = $supMod, 8, focusworkspaceoncurrentmonitor, 8 # switch to workspace 8
bind = $supMod, 9, focusworkspaceoncurrentmonitor, 9 # switch to workspace 9
bind = $supMod, 0, focusworkspaceoncurrentmonitor, 10 # switch to workspace 10
bind = $supMod_SHIFT, 1, movetoworkspace, 1 # move active window to workspace 1
bind = $supMod_SHIFT, 2, movetoworkspace, 2 # move active window to workspace 2
bind = $supMod_SHIFT, 3, movetoworkspace, 3 # move active window to workspace 3
bind = $supMod_SHIFT, 4, movetoworkspace, 4 # move active window to workspace 4
bind = $supMod_SHIFT, 5, movetoworkspace, 5 # move active window to workspace 5
bind = $supMod_SHIFT, 6, movetoworkspace, 6 # move active window to workspace 6
bind = $supMod_SHIFT, 7, movetoworkspace, 7 # move active window to workspace 7
bind = $supMod_SHIFT, 8, movetoworkspace, 8 # move active window to workspace 8
bind = $supMod_SHIFT, 9, movetoworkspace, 9 # move active window to workspace 9
bind = $supMod_SHIFT, 0, movetoworkspace, 10 # move active window to workspace 10
bind = $supMod, mouse_down, workspace, e+1 # move to next workspace with mouse wheel
bind = $supMod, mouse_up, workspace, e-1 # move to previous workspace with mouse wheel
bind = $supMod, Right, workspace, e+1 # move to next workspace with right cursor key
bind = $supMod, Left, workspace, e-1 # move to previous workspace with left cursor key
bind = $supMod_SHIFT, Right, movetoworkspace, e+1 # move active window to next workspace with right cursor key
bind = $supMod_SHIFT, Left, movetoworkspace, e-1 # move active window to previous workspace with left cursor key
# scratchpads binds, this looks fkng horrible but it works
# stupidly I need to memorize where I left my windows...
bind = $supMod_$conMod, 1, togglespecialworkspace, magic1
bind = $supMod_$conMod, 1, movetoworkspace, +0
bind = $supMod_$conMod, 1, togglespecialworkspace, magic1
bind = $supMod_$conMod, 1, movetoworkspace, special:magic1
bind = $supMod_$conMod, 1, togglespecialworkspace, magic1
bind = $supMod_$conMod, 2, togglespecialworkspace, magic2
bind = $supMod_$conMod, 2, movetoworkspace, +0
bind = $supMod_$conMod, 2, togglespecialworkspace, magic2
bind = $supMod_$conMod, 2, movetoworkspace, special:magic2
bind = $supMod_$conMod, 2, togglespecialworkspace, magic2
bind = $supMod_$conMod, 3, togglespecialworkspace, magic3
bind = $supMod_$conMod, 3, movetoworkspace, +0
bind = $supMod_$conMod, 3, togglespecialworkspace, magic3
bind = $supMod_$conMod, 3, movetoworkspace, special:magic3
bind = $supMod_$conMod, 3, togglespecialworkspace, magic3
bind = $supMod_$conMod, 4, togglespecialworkspace, magic4
bind = $supMod_$conMod, 4, movetoworkspace, +0
bind = $supMod_$conMod, 4, togglespecialworkspace, magic4
bind = $supMod_$conMod, 4, movetoworkspace, special:magic4
bind = $supMod_$conMod, 4, togglespecialworkspace, magic4
bind = $supMod_$conMod, 5, togglespecialworkspace, magic5
bind = $supMod_$conMod, 5, movetoworkspace, +0
bind = $supMod_$conMod, 5, togglespecialworkspace, magic5
bind = $supMod_$conMod, 5, movetoworkspace, special:magic5
bind = $supMod_$conMod, 5, togglespecialworkspace, magic5
bind = $supMod_$conMod, 6, togglespecialworkspace, magic6
bind = $supMod_$conMod, 6, movetoworkspace, +0
bind = $supMod_$conMod, 6, togglespecialworkspace, magic6
bind = $supMod_$conMod, 6, movetoworkspace, special:magic6
bind = $supMod_$conMod, 6, togglespecialworkspace, magic6
bind = $supMod_$conMod, 7, togglespecialworkspace, magic7
bind = $supMod_$conMod, 7, movetoworkspace, +0
bind = $supMod_$conMod, 7, togglespecialworkspace, magic7
bind = $supMod_$conMod, 7, movetoworkspace, special:magic7
bind = $supMod_$conMod, 7, togglespecialworkspace, magic7
bind = $supMod_$conMod, 8, togglespecialworkspace, magic8
bind = $supMod_$conMod, 8, movetoworkspace, +0
bind = $supMod_$conMod, 8, togglespecialworkspace, magic8
bind = $supMod_$conMod, 8, movetoworkspace, special:magic8
bind = $supMod_$conMod, 8, togglespecialworkspace, magic8
bind = $supMod_$conMod, 9, togglespecialworkspace, magic9
bind = $supMod_$conMod, 9, movetoworkspace, +0
bind = $supMod_$conMod, 9, togglespecialworkspace, magic9
bind = $supMod_$conMod, 9, movetoworkspace, special:magic9
bind = $supMod_$conMod, 9, togglespecialworkspace, magic9
bind = $supMod_$conMod, 0, togglespecialworkspace, magic10
bind = $supMod_$conMod, 0, movetoworkspace, +0
bind = $supMod_$conMod, 0, togglespecialworkspace, magic10
bind = $supMod_$conMod, 0, movetoworkspace, special:magic10
bind = $supMod_$conMod, 0, togglespecialworkspace, magic10
# common binds
bindl=, XF86AudioRaiseVolume, exec, pamixer -i 5 # increase volume by 5%
bindl=, XF86AudioLowerVolume, exec, pamixer -d 5 # decrease volumy by 5%
bindl=, XF86AudioMute, exec, pamixer -t # toggle mute
bindl=, XF86AudioMicMute, exec, pamixer --default-source -t # toggle mic mute
bindl=, XF86AudioPause, exec, playerctl play-pause # play-pause toggle
bindl=, XF86AudioPlay, exec, playerctl play-pause # play-pause toggle
bindl=, XF86AudioNext, exec, playerctl next # switch to next media
bindl=, XF86AudioPrev, exec, playerctl previous # switch to previous media
bindl=, XF86AudioStop, exec, playerctl stop # stop media playback
bindl=, XF86News, exec, kitty --class newsboat newsboat # launch news feed reader
bindl=, XF86MonBrightnessUp, exec, brightnessctl s 5%+ # increase brightness by 5%
bindl=, XF86MonBrightnessDown, exec, brightnessctl s 5%- # decrease brightness by 5%
bindl=, XF86Display, exec, wdisplays # launch display configuration utility
binde = $supMod_$conMod_SHIFT, p, exec, hyprpicker -n -a # launch color picker
# run launcher submap
bind = $supMod, p, submap, launcher
submap = launcher # will start a submap called "launcher"
## run launcher binds
binde = , r, exec, $run # launch desktop run launcher
binde = , r, submap, reset
binde = , d, exec, $drun # launch desktop run launcher
binde = , d, submap, reset
binde = , i, exec, $rs_wifi # launch wifi configuration utility
binde = , i, submap, reset
binde = , w, exec, $rs_wall # launch wallpaper configur
binde = , w, submap, reset
binde = , e, exec, $rs_emoji # launch emoji picker
binde = , e, submap, reset
binde = , c, exec, $rs_clip # launch clipboard manager
binde = , c, submap, reset
binde = , s, exec, $rs_scrot # launch screenshot utility
binde = , s, submap, reset
binde = , q, exec, $rs_power # launch logout/power menu
binde = , q, submap, reset
binde = , b, exec, $rs_blue # launch bluetooth configuration utility
binde = , b, submap, reset
## use reset to go back to the global submap
bind = , escape, submap, reset
## will reset the submap, which will return to the global submap
submap = reset
# app submap
bind = $supMod, a, submap, apps
submap = apps # will start a submap called "apps"
## app binds
binde = SHIFT, y, exec, $ytfzf # launch youtube player
binde = SHIFT, y, submap, reset
binde = SHIFT, m, exec, $ytfzf-music # launch youtube music player
binde = SHIFT, m, submap, reset
binde = SHIFT, f, exec, $flix-cli # launch torrent movie player
binde = SHIFT, f, submap, reset
binde = SHIFT, a, exec, $ani-cli # launch anime player
binde = SHIFT, a, submap, reset
binde = SHIFT, b, exec, $monitor # launch resource monitor
binde = SHIFT, b, submap, reset
binde = SHIFT, h, exec, $hmonitor # launch resource monitor
binde = SHIFT, h, submap, reset
binde = SHIFT, p, exec, $audiomixer # launch audio mixer
binde = SHIFT, p, submap, reset
binde = , f, exec, $file # launch file manager
binde = , f, submap, reset
binde = , e, exec, $editor # launch text editor
binde = , e, submap, reset
binde = , m, exec, $music # launch music player
binde = , m, submap, reset
binde = , r, exec, $rss # launch rss feed reader
binde = , r, submap, reset
binde = , w, exec, $browser # launch web browser
binde = , w, submap, reset
binde = , c, exec, $chat # launch chat app
binde = , c, submap, reset
binde = , p, exec, $password # launch password manager
binde = , p, submap, reset
binde = , n, exec, $notes # launch note taking app
binde = , n, submap, reset
binde = , o, exec, $office # launch office suite
binde = , o, submap, reset
## use reset to go back to the global submap
bind = , escape, submap, reset
## will reset the submap, which will return to the global submap
submap = reset

156
config/hypr/rules.conf Normal file
View file

@ -0,0 +1,156 @@
# ╻ ╻╻┏┓╻╺┳┓┏━┓╻ ╻ ┏━┓╻ ╻╻ ┏━╸┏━┓
# ┃╻┃┃┃┗┫ ┃┃┃ ┃┃╻┃ ┣┳┛┃ ┃┃ ┣╸ ┗━┓
# ┗┻┛╹╹ ╹╺┻┛┗━┛┗┻┛ ╹┗╸┗━┛┗━╸┗━╸┗━┛
windowrulev2 = float,class:^(net.davidotek.pupgui2)$ #ProtonUp-Qt
windowrulev2 = float,class:^(yad)$ #Protontricks-Gtk
windowrulev2 = float,class:^(qt5ct)$
windowrulev2 = float,class:^(nwg-look)$
windowrulev2 = float,class:^(org.kde.ark)$
windowrulev2 = float,class:^(pavucontrol)$
windowrulev2 = float,class:^(blueman-manager)$
windowrulev2 = float,class:^(nm-applet)$
windowrulev2 = float,class:^(nm-connection-editor)$
windowrulev2 = float,class:^(org.kde.polkit-kde-authentication-agent-1)$
windowrulev2 = float,class:^(com.obsproject.Studio)$,title:^(Controls)$
windowrulev2 = float,class:^(qalculate-gtk)$
windowrulev2 = float,class:^(xdg-desktop-portal-gtk)$
windowrulev2 = float,class:^(xfce-polkit)$
windowrulev2 = float,class:^(com.saivert.pwvucontrol)$
#windowrulev2 = float,class:^(brave-nngceckbapebfimnlniiiahkandclblb-Default)$
# ╻ ╻┏━┓┏━┓╻┏ ┏━┓┏━┓┏━┓┏━╸┏━╸ ┏━┓╻ ╻╻ ┏━╸┏━┓
# ┃╻┃┃ ┃┣┳┛┣┻┓┗━┓┣━┛┣━┫┃ ┣╸ ┣┳┛┃ ┃┃ ┣╸ ┗━┓
# ┗┻┛┗━┛╹┗╸╹ ╹┗━┛╹ ╹ ╹┗━╸┗━╸ ╹┗╸┗━┛┗━╸┗━╸┗━┛
# workspace 1 - development
windowrule = workspace 1, ^(neovim)$
windowrule = workspace 1, ^(nvim)$
windowrule = workspace 1, ^(editor)$
windowrule = workspace 1, ^(goneovim)$
windowrule = workspace 1, ^(Code)$
windowrule = workspace 1, ^(emacs)$
windowrule = workspace 1, ^(neovide)$
windowrule = workspace 1, ^(jetbrains-rider)$
windowrule = workspace 1, ^(jetbrains-datagrip)$
windowrule = workspace 1, ^(dev.zed.Zed)$
# workspace 2 - toolbox
windowrule = workspace 2, ^(gnome-boxes)$
windowrule = workspace 2, ^(virt-manager)$
windowrule = workspace 2, ^(org.keepassxc.KeePassXC)$
windowrule = workspace 2, ^(Bitwarden)$
windowrule = workspace 2, ^(pulsemixer)$
windowrule = workspace 2, ^(alsamixer)$
windowrule = workspace 2, ^(wdisplays)$
windowrule = workspace 2, ^(font-manager)$
windowrule = workspace 2, ^(org.qbittorrent.qBittorrent)$
windowrule = workspace 2, ^(btop)$
windowrule = workspace 2, ^(htop)$
windowrule = workspace 2, ^(file-roller)$
# workspace 3 - file management
windowrule = workspace 3, ^(file_manager)$
windowrule = workspace 3, ^(pcmanfm)$
windowrule = workspace 3, ^(org.gnome.Nautilus)$
# workspace 4 - web browsing
windowrule = workspace 4, ^(org.qutebrowser.qutebrowser)$
windowrule = workspace 4, ^(org.mozilla.firefox)$
windowrule = workspace 4, ^(LibreWolf)$
windowrule = workspace 4, ^(Chromium)$
windowrule = workspace 4, ^(brave-browser)$
windowrule = workspace 4, ^(newsboat)$
windowrule = workspace 4, ^(org.kde.akregator)$
windowrule = workspace 4, ^(io.gitlab.news_flash.NewsFlash)$
windowrule = workspace 4, ^(liferea)$
windowrule = workspace 4, ^(io.github.martinrotter.rssguard)$
# workspace 5 - chatting
windowrule = workspace 5, ^(gomuks)$
windowrule = workspace 5, ^(signal)$
windowrule = workspace 5, ^(revolt-desktop)$
windowrule = workspace 5, ^(Element)$
# workspace 6 - music & audio
windowrule = workspace 6, ^(lollypop)$
windowrule = workspace 6, ^(musikcube)$
windowrule = workspace 6, ^(ytfzf-music)$
windowrule = workspace 6, ^(Audacity)$
windowrule = workspace 6, ^(Ardour)$
windowrule = workspace 6, ^(carla)$
windowrule = workspace 6, ^(carla-control)$
windowrule = workspace 6, ^(hydrogen)$
windowrule = workspace 6, ^(guitarix)$
windowrule = workspace 6, ^(lsp-plugins)$
windowrule = workspace 6, ^(QjackCtl)$
windowrule = workspace 6, ^(org.rncbc.qpwgraph)$
windowrule = workspace 6, ^(soundconverter)$
windowrule = workspace 6, ^(kid3-qt)$
windowrule = workspace 6, ^(com.github.wwmm.easyeffects)$
windowrule = workspace 6, ^(de.haeckerfelix.Shortwave)$
windowrule = workspace 6, ^(com.github.Bleuzen.FFaudioConverter)$
windowrule = workspace 6, ^(flacon)$
windowrule = workspace 6, ^(org.gnome.Podcasts)$
windowrule = workspace 6, ^(org.kde.kid3)$
# workspace 7 - video
windowrule = workspace 7, ^(pitivi)$
windowrule = workspace 7, ^(org.kde.kdenlive)$
windowrule = workspace 7, ^(mpv)$
windowrule = workspace 7, ^(vlc)$
windowrule = workspace 7, ^(ytfzf)$
windowrule = workspace 7, ^(flix-cli)$
windowrule = workspace 7, ^(ani-cli)$
windowrule = workspace 7, ^(com.obsproject.Studio)$
windowrule = workspace 7, ^(fr.handbrake.ghb)$
# workspace 8 - graphics
windowrule = workspace 8, ^(org.inkscape.Inkscape)$
windowrule = workspace 8, ^(Gimp-2.10)$
windowrule = workspace 8, ^(krita)$
windowrule = workspace 8, ^(darktable)$
windowrule = workspace 8, ^(org.kde.digikam)$
windowrule = workspace 8, ^(blender)$
# workspace 9 - office
windowrule = workspace 9, ^(libreoffice-writer)$
windowrule = workspace 9, ^(libreoffice-calc)$
windowrule = workspace 9, ^(libreoffice-impress)$
windowrule = workspace 9, ^(libreoffice-base)$
windowrule = workspace 9, ^(libreoffice-draw)$
windowrule = workspace 9, ^(libreoffice-math)$
windowrule = workspace 9, ^(soffice)$
windowrule = workspace 9, ^(GeoGebra)$
windowrule = workspace 9, ^(Notesnook)$
windowrule = workspace 9, ^(org.pwmt.zathura)$
windowrule = workspace 9, ^(com.github.xournalpp.xournalpp)$
windowrule = workspace 9, ^(com.github.flxzt.rnote)$
windowrule = workspace 9, ^(Joplin)$
windowrule = workspace 9, ^(com.github.johnfactotum.Foliate)$
windowrule = workspace 9, ^(evince)$
windowrule = workspace 9, ^(@joplin/app-desktop)$
windowrule = workspace 9, ^(ONLYOFFICE Desktop Editors)$
# workspace 10 - games
windowrule = workspace 10, ^(org.libretro.RetroArch)$
windowrule = workspace 10, ^(com.github.tkashkin.gamehub)$
windowrule = workspace 10, ^(xonotic-linux64-sdl)$
windowrule = workspace 10, ^(pyrogenesis)$
windowrule = workspace 10, ^(wesnoth)$
windowrule = workspace 10, ^(steam)$
windowrule = workspace 10, ^(Minetest)$
windowrule = workspace 10, ^(org.prismlauncher.PrismLauncher)$
windowrule = workspace 10, ^(lutris)$
windowrule = workspace 10, ^(es-de)$
windowrule = workspace 10, ^(xemu)$
windowrule = workspace 10, ^(duckstation-qt)$
windowrule = workspace 10, ^(pcsx2-qt)$
windowrule = workspace 10, ^(info.cemu.Cemu)$
windowrule = workspace 10, ^(org.ppsspp.PPSSPP)$
windowrulev2 = fullscreen,class:^steam_app\d+$
windowrulev2 = workspace 10,class:^steam_app_\d+$
windowrulev2 = fullscreen,class:^lutris\d+$
windowrulev2 = workspace 10,class:^lutris\d+$
workspace = 10, border:false, rounding:false

View file

@ -0,0 +1,10 @@
#!/bin/bash
hyprctl \
--batch "$(
hyprctl devices -j |
jq -r '.keyboards[] | .name' |
while IFS= read -r keyboard; do
printf '%s %s %s;' 'switchxkblayout' "${keyboard}" 'next'
done
)"

59
config/hypr/theme.conf Normal file
View file

@ -0,0 +1,59 @@
# ╺┳╸╻ ╻┏━╸┏┳┓┏━╸
# ┃ ┣━┫┣╸ ┃┃┃┣╸
# ╹ ╹ ╹┗━╸╹ ╹┗━╸
env = XCURSOR_THEME,Simp1e-Catppuccin-Mocha
env = XCURSOR_SIZE,16
env = GTK_THEME,Catppuccin-Dark
exec = hyprctl setcursor Simp1e-Catppuccin-Mocha 16
exec = gsettings set org.gnome.desktop.interface cursor-theme 'Simp1e-Catppuccin-Mocha'
exec = gsettings set org.gnome.desktop.interface cursor-size 16
exec = gsettings set org.gnome.desktop.interface icon-theme 'Papirus-Dark'
exec = gsettings set org.gnome.desktop.interface gtk-theme 'Catppuccin-Dark'
exec = gsettings set org.gnome.desktop.interface color-scheme 'prefer-dark'
general {
gaps_in = 2
gaps_out = 4
border_size = 3
resize_on_border = true
col.active_border = rgb(89b4fa)
col.inactive_border = rgb(313244)
layout = master
no_focus_fallback = true
}
decoration {
blur {
enabled = false
size = 4
passes = 2
new_optimizations = true
noise = 0.2
brightness = 0.8
}
rounding = 10
drop_shadow = yes
shadow_range = 5
shadow_render_power = 3
col.shadow = rgba(1a1a1aee)
}
decoration {
dim_special = 0.5
blur {
special = true
}
}
# ┏━╸┏━┓┏┓╻╺┳╸
# ┣╸ ┃ ┃┃┗┫ ┃
# ╹ ┗━┛╹ ╹ ╹
exec = gsettings set org.gnome.desktop.interface font-name 'Inter 10'
exec = gsettings set org.gnome.desktop.interface document-font-name 'Liberation Sans 10'
exec = gsettings set org.gnome.desktop.interface monospace-font-name 'Mononoki Nerd Font 10'
exec = gsettings set org.gnome.desktop.interface font-antialiasing 'rgba'
exec = gsettings set org.gnome.desktop.interface font-hinting 'full'

BIN
config/hypr/wall/lock.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 MiB

BIN
config/hypr/wall/wall.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 MiB

83
config/kitty/kitty.conf Normal file
View file

@ -0,0 +1,83 @@
cursor_shape underline
cursor_underline_thickness 3.0
font_family Mononoki Nerd Font
bold_font auto
italic_font auto
bold_italic_font auto
font_size 12.0
shell fish
confirm_os_window_close 0
background_opacity 0.95
window_margin_width 5
# Catppuccin Mocha
# The basic colors
foreground #cdd6f4
background #1e1e2e
selection_foreground #1e1e2e
selection_background #f5e0dc
# Cursor colors
cursor #f5e0dc
cursor_text_color #1e1e2e
# URL underline color when hovering with mouse
url_color #f5e0dc
# Kitty window border colors
active_border_color #b4befe
inactive_border_color #6c7086
bell_border_color #f9e2af
# OS Window titlebar colors
wayland_titlebar_color system
macos_titlebar_color system
# Tab bar colors
active_tab_foreground #11111b
active_tab_background #cba6f7
inactive_tab_foreground #cdd6f4
inactive_tab_background #181825
tab_bar_background #11111b
# Colors for marks (marked text in the terminal)
mark1_foreground #1e1e2e
mark1_background #b4befe
mark2_foreground #1e1e2e
mark2_background #cba6f7
mark3_foreground #1e1e2e
mark3_background #74c7ec
# The 16 terminal colors
# black
color0 #45475a
color8 #585b70
# red
color1 #f38ba8
color9 #f38ba8
# green
color2 #a6e3a1
color10 #a6e3a1
# yellow
color3 #f9e2af
color11 #f9e2af
# blue
color4 #89b4fa
color12 #89b4fa
# magenta
color5 #f5c2e7
color13 #f5c2e7
# cyan
color6 #94e2d5
color14 #94e2d5
# white
color7 #bac2de
color15 #a6adc8

View file

@ -39,7 +39,7 @@ lvim.use_icons = true
lvim.log.level = "info" lvim.log.level = "info"
-- change theme settings -- change theme settings
lvim.colorscheme = "gruvbox" lvim.colorscheme = "catppuccin-mocha"
lvim.transparent_window = false lvim.transparent_window = false
lvim.builtin.alpha.active = true lvim.builtin.alpha.active = true
lvim.builtin.alpha.mode = "dashboard" lvim.builtin.alpha.mode = "dashboard"
@ -71,33 +71,7 @@ lvim.builtin.treesitter.ensure_installed = {
lvim.plugins = { lvim.plugins = {
-- Colorschemes -- Colorschemes
{ "lunarvim/colorschemes" }, { "lunarvim/colorschemes" },
{ "ellisonleao/gruvbox.nvim", { "catppuccin/nvim" },
config = function()
require("gruvbox").setup({
undercurl = true,
underline = true,
bold = false,
italic = {
strings = true,
comments = true,
operators = false,
folds = true,
},
strikethrough = true,
invert_selection = false,
invert_signs = false,
invert_tabline = false,
invert_intend_guides = false,
inverse = true, -- invert background for search, diffs, statuslines and errors
contrast = "hard", -- can be "hard", "soft" or empty string
palette_overrides = {},
overrides = {},
dim_inactive = false,
transparent_mode = true,
})
end
},
-- Database UI (vim-dadbod) -- Database UI (vim-dadbod)
{ "kristijanhusak/vim-dadbod-ui", { "kristijanhusak/vim-dadbod-ui",

51
config/mako/config Normal file
View file

@ -0,0 +1,51 @@
# Global configuration options
max-history=5
sort=+time
# Binding options
on-button-left=dismiss
on-button-right=dismiss-all
# Style options
font=Mononoki Nerd Font 12
width=450
height=130
margin=10
padding=15
border-size=3
border-radius=10
icons=1
max-icon-size=32
icon-location=left
markup=1
actions=1
history=1
text-alignment=left
default-timeout=15000
layer=top
anchor=top-right
# Colors
background-color=#1e1e2e
text-color=#cdd6f4
border-color=#b4befe
progress-color=over #313244
[urgency=high]
border-color=#fab387
[category=CHANGE_LAYOUT]
font=Mononoki Nerd Font 26
background-color=#1e1e2e
text-color=#cdd6f4
border-color=#b4befe
width=300
height=100
margin=300
padding=15
border-size=3
history=0
text-alignment=center
layer=top
default-timeout=400
anchor=top-center

View file

@ -1,8 +1,8 @@
[Added Associations] [Added Associations]
image/=nsxiv.desktop image/=imv.desktop
image/jpeg=nsxiv.desktop image/jpeg=imv.desktop
image/png=nsxiv.desktop image/png=imv.desktop
image/gif=nsxiv.desktop image/gif=imv.desktop
image/svg+xml=org.inkscape.Inkscape.desktop image/svg+xml=org.inkscape.Inkscape.desktop
application/vnd.comicbook+zip=org.pwmt.zathura-cb.desktop application/vnd.comicbook+zip=org.pwmt.zathura-cb.desktop
application/pdf=org.pwmt.zathura-pdf-poppler.desktop application/pdf=org.pwmt.zathura-pdf-poppler.desktop
@ -39,14 +39,14 @@ video/x-ogm=mpv.desktop;
video/x-ogm+ogg=mpv.desktop; video/x-ogm+ogg=mpv.desktop;
video/x-theora=mpv.desktop; video/x-theora=mpv.desktop;
video/x-theora+ogg=mpv.desktop; video/x-theora+ogg=mpv.desktop;
x-scheme-handler/http=org.mozilla.firefox.desktop; x-scheme-handler/http=com.brave.Browser.desktop;
x-scheme-handler/https=org.mozilla.firefox.desktop; x-scheme-handler/https=com.brave.Browser.desktop;
[Default Applications] [Default Applications]
image/=nsxiv.desktop image/=imv.desktop
image/jpeg=nsxiv.desktop image/jpeg=imv.desktop
image/png=nsxiv.desktop image/png=imv.desktop
image/gif=nsxiv.desktop image/gif=imv.desktop
image/svg+xml=org.inkscape.Inkscape.desktop image/svg+xml=org.inkscape.Inkscape.desktop
application/vnd.comicbook+zip=org.pwmt.zathura-cb.desktop application/vnd.comicbook+zip=org.pwmt.zathura-cb.desktop
application/pdf=org.pwmt.zathura-pdf-poppler.desktop application/pdf=org.pwmt.zathura-pdf-poppler.desktop
@ -83,6 +83,6 @@ video/x-ogm=mpv.desktop;
video/x-ogm+ogg=mpv.desktop; video/x-ogm+ogg=mpv.desktop;
video/x-theora=mpv.desktop; video/x-theora=mpv.desktop;
video/x-theora+ogg=mpv.desktop; video/x-theora+ogg=mpv.desktop;
x-scheme-handler/http=org.mozilla.firefox.desktop; x-scheme-handler/http=com.brave.Browser.desktop;
x-scheme-handler/https=org.mozilla.firefox.desktop; x-scheme-handler/https=com.brave.Browser.desktop;
x-scheme-handler/jetbrains=jetbrains-toolbox.desktop x-scheme-handler/jetbrains=jetbrains-toolbox.desktop

View file

@ -0,0 +1,68 @@
{
"browse_category_filter": "^F",
"browse_playlists_delete": "KEY_DC",
"browse_playlists_new": "M-n",
"browse_playlists_rename": "M-r",
"browse_playlists_save": "M-s",
"context_menu": "M-enter",
"hotkeys_backup": "M-b",
"hotkeys_reset_to_default": "M-r",
"key_down": "j",
"key_end": "KEY_END",
"key_home": "KEY_HOME",
"key_left": "h",
"key_page_down": "KEY_NPAGE",
"key_page_up": "KEY_PPAGE",
"key_right": "l",
"key_up": "k",
"lyrics_retry": "r",
"metadata_rescan": "^R",
"navigate_console": "`",
"navigate_hotkeys": "?",
"navigate_jump_to_playing": "x",
"navigate_library": "a",
"navigate_library_album_artists": "4",
"navigate_library_browse": "b",
"navigate_library_browse_albums": "2",
"navigate_library_browse_artists": "1",
"navigate_library_browse_directories": "d",
"navigate_library_browse_genres": "3",
"navigate_library_choose_category": "6",
"navigate_library_filter": "f",
"navigate_library_play_queue": "n",
"navigate_library_playlists": "5",
"navigate_library_tracks": "t",
"navigate_lyrics": "^L",
"navigate_settings": "s",
"play_queue_clear": "X",
"play_queue_delete": "KEY_DC",
"play_queue_hot_swap": "M-a",
"play_queue_move_down": "M-down",
"play_queue_move_up": "M-up",
"play_queue_playlist_delete": "M-x",
"play_queue_playlist_load": "M-l",
"play_queue_playlist_rename": "M-r",
"play_queue_playlist_save": "M-s",
"playback_next": "M-l",
"playback_previous": "M-j",
"playback_seek_back": "u",
"playback_seek_back_proportional": "y",
"playback_seek_forward": "o",
"playback_seek_forward_proportional": "p",
"playback_stop": "^X",
"playback_toggle_mute": "m",
"playback_toggle_pause": "^P",
"playback_toggle_repeat": ".",
"playback_toggle_shuffle": ",",
"playback_volume_down": "M-k",
"playback_volume_up": "M-i",
"search_input_toggle_match_type": "M-m",
"show_equalizer": "^E",
"toggle_visualizer": "v",
"track_list_change_sort_order": "M-s",
"track_list_next_group": "]",
"track_list_play_from_top": "M-P",
"track_list_previous_group": "[",
"track_list_rate_track": "r",
"view_refresh": "KEY_F(5)"
}

View file

@ -12,6 +12,7 @@ https://blog.thunderbird.net/feed/ "~The Thunderbird Blog"
https://thelinuxexp.com/feed.xml "~The Linux Experiment" https://thelinuxexp.com/feed.xml "~The Linux Experiment"
https://techhut.tv/feed/ "~TechHut Media" https://techhut.tv/feed/ "~TechHut Media"
https://itsfoss.com/rss/ "~Its FOSS!" https://itsfoss.com/rss/ "~Its FOSS!"
https://feeds.fireside.fm/thelinuxcast/rss "~The Linux Cast"
https://9to5linux.com/feed/atom "~9to5Linux" https://9to5linux.com/feed/atom "~9to5Linux"
https://blog.elementary.io/feed.xml "~elementary OS Blog" https://blog.elementary.io/feed.xml "~elementary OS Blog"
https://blog.zorin.com/index.xml "~Zorin OS Blog" https://blog.zorin.com/index.xml "~Zorin OS Blog"
@ -34,25 +35,18 @@ https://www.eff.org/rss/updates.xml "~EFF - Updates"
https://victorhckinthefreeworld.com/feed/ "~Victorhck in the free world" https://victorhckinthefreeworld.com/feed/ "~Victorhck in the free world"
https://theprivacydad.com/feed/ "~Welcome to The Privacy Dad's Blog!" https://theprivacydad.com/feed/ "~Welcome to The Privacy Dad's Blog!"
https://proton.me/blog/feed "~Proton Blog" https://proton.me/blog/feed "~Proton Blog"
https://www.youtube.com/feeds/videos.xml?channel_id=UC-9b7aDP6ZN0coj9-xFnrtw "~YT - Astrum"
https://www.youtube.com/feeds/videos.xml?channel_id=UC-ErgHYY0_Yjhjz2MN1E1lg "~YT - RETRO Hardware" https://www.youtube.com/feeds/videos.xml?channel_id=UC-ErgHYY0_Yjhjz2MN1E1lg "~YT - RETRO Hardware"
https://www.youtube.com/feeds/videos.xml?channel_id=UC-shHw-IWdyL7Y6JUz_mUMQ "~YT - SORRYLAG" https://www.youtube.com/feeds/videos.xml?channel_id=UC-shHw-IWdyL7Y6JUz_mUMQ "~YT - SORRYLAG"
https://www.youtube.com/feeds/videos.xml?channel_id=UC05XpvbHZUQOfA6xk4dlmcw "~YT - DJ Ware"
https://www.youtube.com/feeds/videos.xml?channel_id=UC0SyhPy7VsMQCIYDszFaplQ "~YT - Austin Eruption"
https://www.youtube.com/feeds/videos.xml?channel_id=UC0W_BIuwk8D0Bv4THbVZZOQ "~YT - Surveillance Report" https://www.youtube.com/feeds/videos.xml?channel_id=UC0W_BIuwk8D0Bv4THbVZZOQ "~YT - Surveillance Report"
https://www.youtube.com/feeds/videos.xml?channel_id=UC0woBco6Dgcxt0h8SwyyOmw "~YT - Megaprojects" https://www.youtube.com/feeds/videos.xml?channel_id=UC0woBco6Dgcxt0h8SwyyOmw "~YT - Megaprojects"
https://www.youtube.com/feeds/videos.xml?channel_id=UC1D3yD4wlPMico0dss264XA "~YT - NileBlue" https://www.youtube.com/feeds/videos.xml?channel_id=UC1D3yD4wlPMico0dss264XA "~YT - NileBlue"
https://www.youtube.com/feeds/videos.xml?channel_id=UC1JTQBa5QxZCpXrFSkMxmPw "~YT - Raycevick" https://www.youtube.com/feeds/videos.xml?channel_id=UC1JTQBa5QxZCpXrFSkMxmPw "~YT - Raycevick"
https://www.youtube.com/feeds/videos.xml?channel_id=UC1P7uWBazrqughX3FV-KLbA "~YT - Axl Kss"
https://www.youtube.com/feeds/videos.xml?channel_id=UC1QdcIOh4l6l3a4udgU9bvw "~YT - Browntable"
https://www.youtube.com/feeds/videos.xml?channel_id=UC1_uAIS3r8Vu6JjXWvastJg "~YT - Mathologer" https://www.youtube.com/feeds/videos.xml?channel_id=UC1_uAIS3r8Vu6JjXWvastJg "~YT - Mathologer"
https://www.youtube.com/feeds/videos.xml?channel_id=UC1gKBgknwlQagEnq4Q-UnCg "~YT - Kiskeya Life"
https://www.youtube.com/feeds/videos.xml?channel_id=UC1s1OsWNYDFgbROPV-q5arg "~YT - Michael Horn" https://www.youtube.com/feeds/videos.xml?channel_id=UC1s1OsWNYDFgbROPV-q5arg "~YT - Michael Horn"
https://www.youtube.com/feeds/videos.xml?channel_id=UC2WHjPDvbE6O328n17ZGcfg "~YT - ForrestKnight" https://www.youtube.com/feeds/videos.xml?channel_id=UC2WHjPDvbE6O328n17ZGcfg "~YT - ForrestKnight"
https://www.youtube.com/feeds/videos.xml?channel_id=UC2avWDLN1EI3r1RZ_dlSxCw "~YT - Integza" https://www.youtube.com/feeds/videos.xml?channel_id=UC2avWDLN1EI3r1RZ_dlSxCw "~YT - Integza"
https://www.youtube.com/feeds/videos.xml?channel_id=UC2eYFnH61tmytImy1mTYvhA "~YT - Luke Smith" https://www.youtube.com/feeds/videos.xml?channel_id=UC2eYFnH61tmytImy1mTYvhA "~YT - Luke Smith"
https://www.youtube.com/feeds/videos.xml?channel_id=UC36xmz34q02JYaZYKrMwXng "~YT - Nate Gentile" https://www.youtube.com/feeds/videos.xml?channel_id=UC36xmz34q02JYaZYKrMwXng "~YT - Nate Gentile"
https://www.youtube.com/feeds/videos.xml?channel_id=UC3SyoB0UuS2rsLWcU37eQ2w "~YT - Greg Owen"
https://www.youtube.com/feeds/videos.xml?channel_id=UC3Wn3dABlgESm8Bzn8Vamgg "~YT - Sideprojects" https://www.youtube.com/feeds/videos.xml?channel_id=UC3Wn3dABlgESm8Bzn8Vamgg "~YT - Sideprojects"
https://www.youtube.com/feeds/videos.xml?channel_id=UC3jSNmKWYA04R47fDcc1ImA "~YT - InfinitelyGalactic" https://www.youtube.com/feeds/videos.xml?channel_id=UC3jSNmKWYA04R47fDcc1ImA "~YT - InfinitelyGalactic"
https://www.youtube.com/feeds/videos.xml?channel_id=UC3yaWWA9FF9OBog5U9ml68A "~YT - SavvyNik" https://www.youtube.com/feeds/videos.xml?channel_id=UC3yaWWA9FF9OBog5U9ml68A "~YT - SavvyNik"
@ -63,9 +57,8 @@ https://www.youtube.com/feeds/videos.xml?channel_id=UC5I2hjZYiW9gZPVkvzM8_Cw "~Y
https://www.youtube.com/feeds/videos.xml?channel_id=UC5KDiSAFxrDWhmysBcNqtMA "~YT - Eric Murphy" https://www.youtube.com/feeds/videos.xml?channel_id=UC5KDiSAFxrDWhmysBcNqtMA "~YT - Eric Murphy"
https://www.youtube.com/feeds/videos.xml?channel_id=UC5UAwBUum7CPN5buc-_N1Fw "~YT - The Linux Experiment" https://www.youtube.com/feeds/videos.xml?channel_id=UC5UAwBUum7CPN5buc-_N1Fw "~YT - The Linux Experiment"
https://www.youtube.com/feeds/videos.xml?channel_id=UC5nlKFUNoskvV5XdW6PbgYw "~YT - A Well-Rested Dog" https://www.youtube.com/feeds/videos.xml?channel_id=UC5nlKFUNoskvV5XdW6PbgYw "~YT - A Well-Rested Dog"
https://www.youtube.com/feeds/videos.xml?channel_id=UC64UiPJwM_e9AqAd7RiD7JA "~YT - Today I Found Out"
https://www.youtube.com/feeds/videos.xml?channel_id=UC6WOxrSKLW8VagrNkfvi6EQ "~YT - THE SQUIDD" https://www.youtube.com/feeds/videos.xml?channel_id=UC6WOxrSKLW8VagrNkfvi6EQ "~YT - THE SQUIDD"
https://www.youtube.com/feeds/videos.xml?channel_id=UC6biysICWOJ-C3P4Tyeggzg "~YT - Low Level" https://www.youtube.com/feeds/videos.xml?channel_id=UC6biysICWOJ-C3P4Tyeggzg "~YT - Low Level Learning"
https://www.youtube.com/feeds/videos.xml?channel_id=UC7WDD6yHgzdqijHluCi1z-Q "~YT - The Act Man" https://www.youtube.com/feeds/videos.xml?channel_id=UC7WDD6yHgzdqijHluCi1z-Q "~YT - The Act Man"
https://www.youtube.com/feeds/videos.xml?channel_id=UC7YOGHUfC1Tb6E4pudI9STA "~YT - Mental Outlaw" https://www.youtube.com/feeds/videos.xml?channel_id=UC7YOGHUfC1Tb6E4pudI9STA "~YT - Mental Outlaw"
https://www.youtube.com/feeds/videos.xml?channel_id=UC7qPftDWPw9XuExpSgfkmJQ "~YT - Nostalgia Nerd" https://www.youtube.com/feeds/videos.xml?channel_id=UC7qPftDWPw9XuExpSgfkmJQ "~YT - Nostalgia Nerd"
@ -77,10 +70,10 @@ https://www.youtube.com/feeds/videos.xml?channel_id=UC9-y-6csu5WGm29I7JiwpnA "~Y
https://www.youtube.com/feeds/videos.xml?channel_id=UC910yxBmXzGDH_2cx0XE0Xw "~YT - Plano de Juego" https://www.youtube.com/feeds/videos.xml?channel_id=UC910yxBmXzGDH_2cx0XE0Xw "~YT - Plano de Juego"
https://www.youtube.com/feeds/videos.xml?channel_id=UC9RM-iSvTu1uPJb8X5yp3EQ "~YT - Wendover Productions" https://www.youtube.com/feeds/videos.xml?channel_id=UC9RM-iSvTu1uPJb8X5yp3EQ "~YT - Wendover Productions"
https://www.youtube.com/feeds/videos.xml?channel_id=UC9bORzxOWiewqMXxkmhAwAg "~YT - Gingy" https://www.youtube.com/feeds/videos.xml?channel_id=UC9bORzxOWiewqMXxkmhAwAg "~YT - Gingy"
https://www.youtube.com/feeds/videos.xml?channel_id=UC9h8BDcXwkhZtnqoQJ7PggA "~YT - Warfronts" https://www.youtube.com/feeds/videos.xml?channel_id=UC9eM3jqq5IfxbGHbuRR_jRw "~YT - Sfdx Show"
https://www.youtube.com/feeds/videos.xml?channel_id=UC9h8BDcXwkhZtnqoQJ7PggA "~YT - Warographics"
https://www.youtube.com/feeds/videos.xml?channel_id=UC9rU_5YnMDUPc0IP8NwZOig "~YT - Elevated Systems" https://www.youtube.com/feeds/videos.xml?channel_id=UC9rU_5YnMDUPc0IP8NwZOig "~YT - Elevated Systems"
https://www.youtube.com/feeds/videos.xml?channel_id=UCAMu6Dso0ENoNm3sKpQsy0g "~YT - Nir Lichtman" https://www.youtube.com/feeds/videos.xml?channel_id=UCAMu6Dso0ENoNm3sKpQsy0g "~YT - Nir Lichtman"
https://www.youtube.com/feeds/videos.xml?channel_id=UCAfYntJkyJdnYbzDsOGu0qQ "~YT - RetroSpector78"
https://www.youtube.com/feeds/videos.xml?channel_id=UCAiEWppTvoNSHU939xhMb2g "~YT - hoser" https://www.youtube.com/feeds/videos.xml?channel_id=UCAiEWppTvoNSHU939xhMb2g "~YT - hoser"
https://www.youtube.com/feeds/videos.xml?channel_id=UCAiiOTio8Yu69c3XnR7nQBQ "~YT - System Crafters" https://www.youtube.com/feeds/videos.xml?channel_id=UCAiiOTio8Yu69c3XnR7nQBQ "~YT - System Crafters"
https://www.youtube.com/feeds/videos.xml?channel_id=UCBdwqWmXhupzV5q8TfD-kNQ "~YT - The Critical Gamer" https://www.youtube.com/feeds/videos.xml?channel_id=UCBdwqWmXhupzV5q8TfD-kNQ "~YT - The Critical Gamer"
@ -95,15 +88,16 @@ https://www.youtube.com/feeds/videos.xml?channel_id=UCEp20NgOZHmgWdbQdHSxgjw "~Y
https://www.youtube.com/feeds/videos.xml?channel_id=UCFhXFikryT4aFcLkLw2LBLA "~YT - NileRed" https://www.youtube.com/feeds/videos.xml?channel_id=UCFhXFikryT4aFcLkLw2LBLA "~YT - NileRed"
https://www.youtube.com/feeds/videos.xml?channel_id=UCFzGNDHEZ5-7d5UXxfHUcRg "~YT - jujalag" https://www.youtube.com/feeds/videos.xml?channel_id=UCFzGNDHEZ5-7d5UXxfHUcRg "~YT - jujalag"
https://www.youtube.com/feeds/videos.xml?channel_id=UCGE-JpLbibXJg3W_N2hbo8g "~YT - Sethorven" https://www.youtube.com/feeds/videos.xml?channel_id=UCGE-JpLbibXJg3W_N2hbo8g "~YT - Sethorven"
https://www.youtube.com/feeds/videos.xml?channel_id=UCGGAYsWFerrs-ZqyXw7fQWg "~YT - Resumidito."
https://www.youtube.com/feeds/videos.xml?channel_id=UCH5DsMZAgdx5Fkk9wwMNwCA "~YT - The New Oil" https://www.youtube.com/feeds/videos.xml?channel_id=UCH5DsMZAgdx5Fkk9wwMNwCA "~YT - The New Oil"
https://www.youtube.com/feeds/videos.xml?channel_id=UCH_7doiCkWeq0v3ycWE5lDw "~YT - Any Austin" https://www.youtube.com/feeds/videos.xml?channel_id=UCH_7doiCkWeq0v3ycWE5lDw "~YT - Any Austin"
https://www.youtube.com/feeds/videos.xml?channel_id=UCH_zBfX_o5GDZwevkh1jl9Q "~YT - Nate Live"
https://www.youtube.com/feeds/videos.xml?channel_id=UCHnyfMqiRRG1u-2MsSQLbXA "~YT - Veritasium" https://www.youtube.com/feeds/videos.xml?channel_id=UCHnyfMqiRRG1u-2MsSQLbXA "~YT - Veritasium"
https://www.youtube.com/feeds/videos.xml?channel_id=UCHvDhwNuq-h2hZQRR6BwbLQ "~YT - Tech With Nikola" https://www.youtube.com/feeds/videos.xml?channel_id=UCHvDhwNuq-h2hZQRR6BwbLQ "~YT - Tech With Nikola"
https://www.youtube.com/feeds/videos.xml?channel_id=UCI6pj4e-_6Km-dmLLYpmlaA "~YT - Alejandro Julián" https://www.youtube.com/feeds/videos.xml?channel_id=UCI6pj4e-_6Km-dmLLYpmlaA "~YT - Alejandro Julián"
https://www.youtube.com/feeds/videos.xml?channel_id=UCIjIAXXsX4YMYeFj-LP42-Q "~YT - Anthony GG" https://www.youtube.com/feeds/videos.xml?channel_id=UCIjIAXXsX4YMYeFj-LP42-Q "~YT - Anthony GG"
https://www.youtube.com/feeds/videos.xml?channel_id=UCJ0-OtVpF0wOKEqT2Z1HEtA "~YT - ElectroBOOM" https://www.youtube.com/feeds/videos.xml?channel_id=UCJ0-OtVpF0wOKEqT2Z1HEtA "~YT - ElectroBOOM"
https://www.youtube.com/feeds/videos.xml?channel_id=UCJYJgj7rzsn0vdR7fkgjuIA "~YT - styropyro" https://www.youtube.com/feeds/videos.xml?channel_id=UCJYJgj7rzsn0vdR7fkgjuIA "~YT - styropyro"
https://www.youtube.com/feeds/videos.xml?channel_id=UCJsinEiaDqEn8a-GcADVEVA "~YT - Andrea Borman"
https://www.youtube.com/feeds/videos.xml?channel_id=UCLEoyoOKZK0idGqSc6Pi23w "~YT - RMC - The Cave" https://www.youtube.com/feeds/videos.xml?channel_id=UCLEoyoOKZK0idGqSc6Pi23w "~YT - RMC - The Cave"
https://www.youtube.com/feeds/videos.xml?channel_id=UCLx053rWZxCiYWsBETgdKrQ "~YT - LGR" https://www.youtube.com/feeds/videos.xml?channel_id=UCLx053rWZxCiYWsBETgdKrQ "~YT - LGR"
https://www.youtube.com/feeds/videos.xml?channel_id=UCM1og9pwIfAlg2jEtWh-Z7A "~YT - Sakharu Baguette" https://www.youtube.com/feeds/videos.xml?channel_id=UCM1og9pwIfAlg2jEtWh-Z7A "~YT - Sakharu Baguette"
@ -115,13 +109,10 @@ https://www.youtube.com/feeds/videos.xml?channel_id=UCNnNCBgckxzqIh1Txw5cgSg "~Y
https://www.youtube.com/feeds/videos.xml?channel_id=UCNzszbnvQeFzObW0ghk0Ckw "~YT - Dave's Garage" https://www.youtube.com/feeds/videos.xml?channel_id=UCNzszbnvQeFzObW0ghk0Ckw "~YT - Dave's Garage"
https://www.youtube.com/feeds/videos.xml?channel_id=UCODHrzPMGbNv67e84WDZhQQ "~YT - fern" https://www.youtube.com/feeds/videos.xml?channel_id=UCODHrzPMGbNv67e84WDZhQQ "~YT - fern"
https://www.youtube.com/feeds/videos.xml?channel_id=UCONH73CdRXUjlh3-DdLGCPw "~YT - Nicco Loves Linux" https://www.youtube.com/feeds/videos.xml?channel_id=UCONH73CdRXUjlh3-DdLGCPw "~YT - Nicco Loves Linux"
https://www.youtube.com/feeds/videos.xml?channel_id=UCOWcZ6Wicl-1N34H0zZe38w "~YT - Level1Linux"
https://www.youtube.com/feeds/videos.xml?channel_id=UCOxmlaJURX3nq8eLuJPbl3A "~YT - Psivewri" https://www.youtube.com/feeds/videos.xml?channel_id=UCOxmlaJURX3nq8eLuJPbl3A "~YT - Psivewri"
https://www.youtube.com/feeds/videos.xml?channel_id=UCP2bshADPrVMoNrdJvZEQzw "~YT - KeepItTechie"
https://www.youtube.com/feeds/videos.xml?channel_id=UCP5tjEmvPItGyLhmjdwP7Ww "~YT - RealLifeLore" https://www.youtube.com/feeds/videos.xml?channel_id=UCP5tjEmvPItGyLhmjdwP7Ww "~YT - RealLifeLore"
https://www.youtube.com/feeds/videos.xml?channel_id=UCQ-W1KE9EYfdxhL6S4twUNw "~YT - The Cherno" https://www.youtube.com/feeds/videos.xml?channel_id=UCQ-W1KE9EYfdxhL6S4twUNw "~YT - The Cherno"
https://www.youtube.com/feeds/videos.xml?channel_id=UCQX_MZRCaluNKxkywkLEgfA "~YT - Date un Vlog" https://www.youtube.com/feeds/videos.xml?channel_id=UCQX_MZRCaluNKxkywkLEgfA "~YT - Date un Vlog"
https://www.youtube.com/feeds/videos.xml?channel_id=UCR-DXc1voovS8nhAvccRZhg "~YT - Jeff Geerling"
https://www.youtube.com/feeds/videos.xml?channel_id=UCR1IuLEqb6UEA_zQ81kwXfg "~YT - Real Engineering" https://www.youtube.com/feeds/videos.xml?channel_id=UCR1IuLEqb6UEA_zQ81kwXfg "~YT - Real Engineering"
https://www.youtube.com/feeds/videos.xml?channel_id=UCRYeRa2iUMd8An1WTPIP2bw "~YT - aChair Leg" https://www.youtube.com/feeds/videos.xml?channel_id=UCRYeRa2iUMd8An1WTPIP2bw "~YT - aChair Leg"
https://www.youtube.com/feeds/videos.xml?channel_id=UCRrHl7MO7gcwWguTTqDzBHw "~YT - LoneVaultWanderer" https://www.youtube.com/feeds/videos.xml?channel_id=UCRrHl7MO7gcwWguTTqDzBHw "~YT - LoneVaultWanderer"
@ -131,6 +122,7 @@ https://www.youtube.com/feeds/videos.xml?channel_id=UCSJPFQdZwrOutnmSFYtbstA "~Y
https://www.youtube.com/feeds/videos.xml?channel_id=UCSju5G2aFaWMqn-_0YBtq5A "~YT - Stand-up Maths" https://www.youtube.com/feeds/videos.xml?channel_id=UCSju5G2aFaWMqn-_0YBtq5A "~YT - Stand-up Maths"
https://www.youtube.com/feeds/videos.xml?channel_id=UCSp-OaMpsO8K0KkOqyBl7_w "~YT - Let's Get Rusty" https://www.youtube.com/feeds/videos.xml?channel_id=UCSp-OaMpsO8K0KkOqyBl7_w "~YT - Let's Get Rusty"
https://www.youtube.com/feeds/videos.xml?channel_id=UCSuHzQ3GrHSzoBbwrIq3LLA "~YT - Naomi Brockwell TV" https://www.youtube.com/feeds/videos.xml?channel_id=UCSuHzQ3GrHSzoBbwrIq3LLA "~YT - Naomi Brockwell TV"
https://www.youtube.com/feeds/videos.xml?channel_id=UCT35hFvV0j8SR3SBGJChKZQ "~YT - Jota."
https://www.youtube.com/feeds/videos.xml?channel_id=UCT6LaAC9VckZYJUzutUW3PQ "~YT - Game Sack" https://www.youtube.com/feeds/videos.xml?channel_id=UCT6LaAC9VckZYJUzutUW3PQ "~YT - Game Sack"
https://www.youtube.com/feeds/videos.xml?channel_id=UCTrSsPMmZavLbc3Ex7VhjDg "~YT - Brandon Herrera" https://www.youtube.com/feeds/videos.xml?channel_id=UCTrSsPMmZavLbc3Ex7VhjDg "~YT - Brandon Herrera"
https://www.youtube.com/feeds/videos.xml?channel_id=UCUMwY9iS8oMyWDYIe6_RmoA "~YT - No Boilerplate" https://www.youtube.com/feeds/videos.xml?channel_id=UCUMwY9iS8oMyWDYIe6_RmoA "~YT - No Boilerplate"
@ -139,16 +131,17 @@ https://www.youtube.com/feeds/videos.xml?channel_id=UCVIcSx0JX1lBXnyezabutrA "~Y
https://www.youtube.com/feeds/videos.xml?channel_id=UCVk4b-svNJoeytrrlOixebQ "~YT - TheVimeagen" https://www.youtube.com/feeds/videos.xml?channel_id=UCVk4b-svNJoeytrrlOixebQ "~YT - TheVimeagen"
https://www.youtube.com/feeds/videos.xml?channel_id=UCVls1GmFKf6WlTraIb_IaJg "~YT - DistroTube" https://www.youtube.com/feeds/videos.xml?channel_id=UCVls1GmFKf6WlTraIb_IaJg "~YT - DistroTube"
https://www.youtube.com/feeds/videos.xml?channel_id=UCW-HHEyt67RhZ6q21n4p2zQ "~YT - Mac84" https://www.youtube.com/feeds/videos.xml?channel_id=UCW-HHEyt67RhZ6q21n4p2zQ "~YT - Mac84"
https://www.youtube.com/feeds/videos.xml?channel_id=UCWDGyt5hy6UA6Br-hAar03A "~YT - El Robot de Linneo" https://www.youtube.com/feeds/videos.xml?channel_id=UCW0gH2G-cMKAEjEkI4YhnPA "~YT - Nerd of the Rings"
https://www.youtube.com/feeds/videos.xml?channel_id=UCWDGyt5hy6UA6Br-hAar03A "~YT - El Robot de Colón"
https://www.youtube.com/feeds/videos.xml?channel_id=UCWMV8dD0N3tAM2W6GuNCUCg "~YT - theunrealtarik" https://www.youtube.com/feeds/videos.xml?channel_id=UCWMV8dD0N3tAM2W6GuNCUCg "~YT - theunrealtarik"
https://www.youtube.com/feeds/videos.xml?channel_id=UCWQaM7SpSECp9FELz-cHzuQ "~YT - Dreams of Code" https://www.youtube.com/feeds/videos.xml?channel_id=UCWQaM7SpSECp9FELz-cHzuQ "~YT - Dreams of Code"
https://www.youtube.com/feeds/videos.xml?channel_id=UCWcp1Mwm7_bJ-mVoZb8TdkQ "~YT - TuberViejuner" https://www.youtube.com/feeds/videos.xml?channel_id=UCWcp1Mwm7_bJ-mVoZb8TdkQ "~YT - TuberViejuner"
https://www.youtube.com/feeds/videos.xml?channel_id=UCWyrVfwRL-2DOkzsqrbjo5Q "~YT - NCommander"
https://www.youtube.com/feeds/videos.xml?channel_id=UCXp5qAXAmdQ8n3RUZaME1QQ "~YT - ItsYaBoyBrandyBoy" https://www.youtube.com/feeds/videos.xml?channel_id=UCXp5qAXAmdQ8n3RUZaME1QQ "~YT - ItsYaBoyBrandyBoy"
https://www.youtube.com/feeds/videos.xml?channel_id=UCYO_jab_esuFRV4b17AJtAw "~YT - 3Blue1Brown" https://www.youtube.com/feeds/videos.xml?channel_id=UCYO_jab_esuFRV4b17AJtAw "~YT - 3Blue1Brown"
https://www.youtube.com/feeds/videos.xml?channel_id=UCYVU6rModlGxvJbszCclGGw "~YT - Rob Braxman Tech" https://www.youtube.com/feeds/videos.xml?channel_id=UCYVU6rModlGxvJbszCclGGw "~YT - Rob Braxman Tech"
https://www.youtube.com/feeds/videos.xml?channel_id=UCZ4AMrDcNrfy3X6nsU8-rPg "~YT - Economics Explained" https://www.youtube.com/feeds/videos.xml?channel_id=UCZ4AMrDcNrfy3X6nsU8-rPg "~YT - Economics Explained"
https://www.youtube.com/feeds/videos.xml?channel_id=UCZkPWp4MVoIVGLVLYC1Vjlg "~YT - Guille Ghemi" https://www.youtube.com/feeds/videos.xml?channel_id=UCZkPWp4MVoIVGLVLYC1Vjlg "~YT - Guille Ghemi"
https://www.youtube.com/feeds/videos.xml?channel_id=UCa-lsDvCuyK6ZmkRLDlnzsg "~YT - LinuxChad"
https://www.youtube.com/feeds/videos.xml?channel_id=UCa6V1UVOXN4wDm7RDQDoa6g "~YT - El Traductor de Ingeniería" https://www.youtube.com/feeds/videos.xml?channel_id=UCa6V1UVOXN4wDm7RDQDoa6g "~YT - El Traductor de Ingeniería"
https://www.youtube.com/feeds/videos.xml?channel_id=UCaSCt8s_4nfkRglWCvNSDrg "~YT - CodeAesthetic" https://www.youtube.com/feeds/videos.xml?channel_id=UCaSCt8s_4nfkRglWCvNSDrg "~YT - CodeAesthetic"
https://www.youtube.com/feeds/videos.xml?channel_id=UCaVPhFg-Ax873wvhbNitsrQ "~YT - El Robot de Platón" https://www.youtube.com/feeds/videos.xml?channel_id=UCaVPhFg-Ax873wvhbNitsrQ "~YT - El Robot de Platón"
@ -165,20 +158,19 @@ https://www.youtube.com/feeds/videos.xml?channel_id=UCdp4_l1vPmpN-gDbUwhaRUQ "~Y
https://www.youtube.com/feeds/videos.xml?channel_id=UCeCtLnoV0nmE2cBbbftCCiw "~YT - Las reviews de Camilo" https://www.youtube.com/feeds/videos.xml?channel_id=UCeCtLnoV0nmE2cBbbftCCiw "~YT - Las reviews de Camilo"
https://www.youtube.com/feeds/videos.xml?channel_id=UCeHOkFGW-7uAZFvq3BXb8YA "~YT - :3ildcat" https://www.youtube.com/feeds/videos.xml?channel_id=UCeHOkFGW-7uAZFvq3BXb8YA "~YT - :3ildcat"
https://www.youtube.com/feeds/videos.xml?channel_id=UCerEIdrEW-IqwvlH8lTQUJQ "~YT - Tech Tangents" https://www.youtube.com/feeds/videos.xml?channel_id=UCerEIdrEW-IqwvlH8lTQUJQ "~YT - Tech Tangents"
https://www.youtube.com/feeds/videos.xml?channel_id=UCevUmOfLTUX9MNGJQKsPdIA "~YT - NeetCodeIO"
https://www.youtube.com/feeds/videos.xml?channel_id=UCf-U0uPVQZtcqXUWa_Hl4Mw "~YT - Into the Shadows" https://www.youtube.com/feeds/videos.xml?channel_id=UCf-U0uPVQZtcqXUWa_Hl4Mw "~YT - Into the Shadows"
https://www.youtube.com/feeds/videos.xml?channel_id=UCg6gPGh8HU2U01vaFCAsvmQ "~YT - Chris Titus Tech" https://www.youtube.com/feeds/videos.xml?channel_id=UCg6gPGh8HU2U01vaFCAsvmQ "~YT - Chris Titus Tech"
https://www.youtube.com/feeds/videos.xml?channel_id=UCgNg3vwj3xt7QOrcIDaHdFg "~YT - PolyMatter" https://www.youtube.com/feeds/videos.xml?channel_id=UCgNg3vwj3xt7QOrcIDaHdFg "~YT - PolyMatter"
https://www.youtube.com/feeds/videos.xml?channel_id=UCgQ7Amr6fvCJyVlCwEi1bLw "~YT - Spectacles"
https://www.youtube.com/feeds/videos.xml?channel_id=UCgdTVe88YVSrOZ9qKumhULQ "~YT - Hardware Haven" https://www.youtube.com/feeds/videos.xml?channel_id=UCgdTVe88YVSrOZ9qKumhULQ "~YT - Hardware Haven"
https://www.youtube.com/feeds/videos.xml?channel_id=UChI0q9a-ZcbZh7dAu_-J-hg "~YT - Upper Echelon" https://www.youtube.com/feeds/videos.xml?channel_id=UChI0q9a-ZcbZh7dAu_-J-hg "~YT - Upper Echelon"
https://www.youtube.com/feeds/videos.xml?channel_id=UChIs72whgZI9w6d6FhwGGHA "~YT - Gamers Nexus" https://www.youtube.com/feeds/videos.xml?channel_id=UChIs72whgZI9w6d6FhwGGHA "~YT - Gamers Nexus"
https://www.youtube.com/feeds/videos.xml?channel_id=UChrYe70o7NmDioL02PRVWVg "~YT - MattKC"
https://www.youtube.com/feeds/videos.xml?channel_id=UCj8mAcR6Mu1dvaXQ6BdShRQ "~YT - The Masked Man" https://www.youtube.com/feeds/videos.xml?channel_id=UCj8mAcR6Mu1dvaXQ6BdShRQ "~YT - The Masked Man"
https://www.youtube.com/feeds/videos.xml?channel_id=UCj8orMezFWVcoN-4S545Wtw "~YT - Max Derrat" https://www.youtube.com/feeds/videos.xml?channel_id=UCj8orMezFWVcoN-4S545Wtw "~YT - Max Derrat"
https://www.youtube.com/feeds/videos.xml?channel_id=UCjFaPUcJU1vwk193mnW_w1w "~YT - Modern Vintage Gamer" https://www.youtube.com/feeds/videos.xml?channel_id=UCjFaPUcJU1vwk193mnW_w1w "~YT - Modern Vintage Gamer"
https://www.youtube.com/feeds/videos.xml?channel_id=UCjSEJkpGbcZhvo0lr-44X_w "~YT - TechHut" https://www.youtube.com/feeds/videos.xml?channel_id=UCjSEJkpGbcZhvo0lr-44X_w "~YT - TechHut"
https://www.youtube.com/feeds/videos.xml?channel_id=UCjgS6Uyg8ok4Jd_lH_MUKgg "~YT - Claus Kellerman" https://www.youtube.com/feeds/videos.xml?channel_id=UCjgS6Uyg8ok4Jd_lH_MUKgg "~YT - Claus Kellerman"
https://www.youtube.com/feeds/videos.xml?channel_id=UCjinkxv899vPCJ65BWpmPIA "~YT - Scott's Snippets"
https://www.youtube.com/feeds/videos.xml?channel_id=UCkK9UDm_ZNrq_rIXCz3xCGA "~YT - Bryan Lunduke"
https://www.youtube.com/feeds/videos.xml?channel_id=UCl2mFZoRqjw_ELax4Yisf6w "~YT - Louis Rossmann" https://www.youtube.com/feeds/videos.xml?channel_id=UCl2mFZoRqjw_ELax4Yisf6w "~YT - Louis Rossmann"
https://www.youtube.com/feeds/videos.xml?channel_id=UCl_dlV_7ofr4qeP1drJQ-qg "~YT - Tantacrul" https://www.youtube.com/feeds/videos.xml?channel_id=UCl_dlV_7ofr4qeP1drJQ-qg "~YT - Tantacrul"
https://www.youtube.com/feeds/videos.xml?channel_id=UClb90NQQcskPUGDIXsQEz5Q "~YT - developedbyed" https://www.youtube.com/feeds/videos.xml?channel_id=UClb90NQQcskPUGDIXsQEz5Q "~YT - developedbyed"
@ -189,15 +181,11 @@ https://www.youtube.com/feeds/videos.xml?channel_id=UCmGSJVG3mCRXVOP4yZrU1Dw "~Y
https://www.youtube.com/feeds/videos.xml?channel_id=UCmw-QGOHbHA5cDAvwwqUTKQ "~YT - Zaney" https://www.youtube.com/feeds/videos.xml?channel_id=UCmw-QGOHbHA5cDAvwwqUTKQ "~YT - Zaney"
https://www.youtube.com/feeds/videos.xml?channel_id=UCmyGZ0689ODyReHw3rsKLtQ "~YT - Michael Tunnell" https://www.youtube.com/feeds/videos.xml?channel_id=UCmyGZ0689ODyReHw3rsKLtQ "~YT - Michael Tunnell"
https://www.youtube.com/feeds/videos.xml?channel_id=UCnw3aIEiz60S6O3XcztCVkQ "~YT - PatricianTV" https://www.youtube.com/feeds/videos.xml?channel_id=UCnw3aIEiz60S6O3XcztCVkQ "~YT - PatricianTV"
https://www.youtube.com/feeds/videos.xml?channel_id=UCo71RUe6DX4w-Vd47rFLXPg "~YT - typecraft"
https://www.youtube.com/feeds/videos.xml?channel_id=UCoL8olX-259lS1N6QPyP4IQ "~YT - Action Retro" https://www.youtube.com/feeds/videos.xml?channel_id=UCoL8olX-259lS1N6QPyP4IQ "~YT - Action Retro"
https://www.youtube.com/feeds/videos.xml?channel_id=UCoLccjs6jbHa4soeYDgbKTg "~YT - Modern Classic"
https://www.youtube.com/feeds/videos.xml?channel_id=UConVfxXodg78Tzh5nNu85Ew "~YT - Welch Labs"
https://www.youtube.com/feeds/videos.xml?channel_id=UCoryWpk4QVYKFCJul9KBdyw "~YT - Switched to Linux" https://www.youtube.com/feeds/videos.xml?channel_id=UCoryWpk4QVYKFCJul9KBdyw "~YT - Switched to Linux"
https://www.youtube.com/feeds/videos.xml?channel_id=UCoxcjq-8xIDTYp3uz647V5A "~YT - Numberphile" https://www.youtube.com/feeds/videos.xml?channel_id=UCoxcjq-8xIDTYp3uz647V5A "~YT - Numberphile"
https://www.youtube.com/feeds/videos.xml?channel_id=UCpuKDBw8IVIdKWPhiB2VDNQ "~YT - Cinematix" https://www.youtube.com/feeds/videos.xml?channel_id=UCpuKDBw8IVIdKWPhiB2VDNQ "~YT - Cinematix"
https://www.youtube.com/feeds/videos.xml?channel_id=UCpuLiczP2Aqq11Gtf4k_fkw "~YT - Futurasound Productions" https://www.youtube.com/feeds/videos.xml?channel_id=UCpuLiczP2Aqq11Gtf4k_fkw "~YT - Futurasound Productions"
https://www.youtube.com/feeds/videos.xml?channel_id=UCpymQYvlXt2ZEcqwncmFjLw "~YT - Reacciona Explota"
https://www.youtube.com/feeds/videos.xml?channel_id=UCq8LldVrjqe61KQttZlLW8g "~YT - Patrick God" https://www.youtube.com/feeds/videos.xml?channel_id=UCq8LldVrjqe61KQttZlLW8g "~YT - Patrick God"
https://www.youtube.com/feeds/videos.xml?channel_id=UCqoGR_EedlhKDVuWNwYWRbg "~YT - Voices of the Past" https://www.youtube.com/feeds/videos.xml?channel_id=UCqoGR_EedlhKDVuWNwYWRbg "~YT - Voices of the Past"
https://www.youtube.com/feeds/videos.xml?channel_id=UCqxM9T6ksiOVKIkb88S2r7Q "~YT - Zac Builds" https://www.youtube.com/feeds/videos.xml?channel_id=UCqxM9T6ksiOVKIkb88S2r7Q "~YT - Zac Builds"
@ -207,17 +195,12 @@ https://www.youtube.com/feeds/videos.xml?channel_id=UCs7nPQIEba0T3tGOWWsZpJQ "~Y
https://www.youtube.com/feeds/videos.xml?channel_id=UCsBjURrPoezykLs9EqgamOA "~YT - Fireship" https://www.youtube.com/feeds/videos.xml?channel_id=UCsBjURrPoezykLs9EqgamOA "~YT - Fireship"
https://www.youtube.com/feeds/videos.xml?channel_id=UCsC--WvN66vZlDoYShzn4sA "~YT - Oxhorn" https://www.youtube.com/feeds/videos.xml?channel_id=UCsC--WvN66vZlDoYShzn4sA "~YT - Oxhorn"
https://www.youtube.com/feeds/videos.xml?channel_id=UCsnGwSIHyoYN0kiINAGUKxg "~YT - Wolfgang's Channel" https://www.youtube.com/feeds/videos.xml?channel_id=UCsnGwSIHyoYN0kiINAGUKxg "~YT - Wolfgang's Channel"
https://www.youtube.com/feeds/videos.xml?channel_id=UCsrVDPJBYeXItETFHG0qzyw "~YT - Web Dev Cody"
https://www.youtube.com/feeds/videos.xml?channel_id=UCtApDZWXv8fQaxZAk6dxYkw "~YT - Ghostcharm" https://www.youtube.com/feeds/videos.xml?channel_id=UCtApDZWXv8fQaxZAk6dxYkw "~YT - Ghostcharm"
https://www.youtube.com/feeds/videos.xml?channel_id=UCtMVHI3AJD4Qk4hcbZnI9ZQ "~YT - SomeOrdinaryGamers" https://www.youtube.com/feeds/videos.xml?channel_id=UCtMVHI3AJD4Qk4hcbZnI9ZQ "~YT - SomeOrdinaryGamers"
https://www.youtube.com/feeds/videos.xml?channel_id=UCtYKe7-XbaDjpUwcU5x0bLg "~YT - neo" https://www.youtube.com/feeds/videos.xml?channel_id=UCtYKe7-XbaDjpUwcU5x0bLg "~YT - neo"
https://www.youtube.com/feeds/videos.xml?channel_id=UCtYg149E_wUGVmjGz-TgyNA "~YT - Titus Tech Talk" https://www.youtube.com/feeds/videos.xml?channel_id=UCtYg149E_wUGVmjGz-TgyNA "~YT - Titus Tech Talk"
https://www.youtube.com/feeds/videos.xml?channel_id=UCtZX_67hSjOIPu0HTmFi6aw "~YT - Macintosh Librarian" https://www.youtube.com/feeds/videos.xml?channel_id=UCtZX_67hSjOIPu0HTmFi6aw "~YT - Macintosh Librarian"
https://www.youtube.com/feeds/videos.xml?channel_id=UCtsf0b8s6fWYK89vGMh4jAQ "~YT - mtt"
https://www.youtube.com/feeds/videos.xml?channel_id=UCudx6plmpbs5WtWvsvu-EdQ "~YT - Zeltik"
https://www.youtube.com/feeds/videos.xml?channel_id=UCvjgXvBlbQiydffZU7m1_aw "~YT - The Coding Train" https://www.youtube.com/feeds/videos.xml?channel_id=UCvjgXvBlbQiydffZU7m1_aw "~YT - The Coding Train"
https://www.youtube.com/feeds/videos.xml?channel_id=UCwkfNQzKwICfPKs6V0ZUFZQ "~YT - Asahi Lina / 朝日リナ"
https://www.youtube.com/feeds/videos.xml?channel_id=UCx6cailiCkg_mlMM7JX5yfA "~YT - James Channel"
https://www.youtube.com/feeds/videos.xml?channel_id=UCxQKHvKbmSzGMvUrVtJYnUA "~YT - Learn Linux TV" https://www.youtube.com/feeds/videos.xml?channel_id=UCxQKHvKbmSzGMvUrVtJYnUA "~YT - Learn Linux TV"
https://www.youtube.com/feeds/videos.xml?channel_id=UCxdZ7XCQVMRMipj3gGemQfw "~YT - GNULectures" https://www.youtube.com/feeds/videos.xml?channel_id=UCxdZ7XCQVMRMipj3gGemQfw "~YT - GNULectures"
https://www.youtube.com/feeds/videos.xml?channel_id=UCxoz4YfS4M3H3C57FD4jW4Q "~YT - Science Time" https://www.youtube.com/feeds/videos.xml?channel_id=UCxoz4YfS4M3H3C57FD4jW4Q "~YT - Science Time"
@ -226,7 +209,6 @@ https://www.youtube.com/feeds/videos.xml?channel_id=UCy6pDeDwRFi1kmFekSpMDUA "~Y
https://www.youtube.com/feeds/videos.xml?channel_id=UCybBViio_TH_uiFFDJuz5tg "~YT - Einzelgänger" https://www.youtube.com/feeds/videos.xml?channel_id=UCybBViio_TH_uiFFDJuz5tg "~YT - Einzelgänger"
https://www.youtube.com/feeds/videos.xml?channel_id=UCylGUf9BvQooEFjgdNudoQg "~YT - The Linux Cast" https://www.youtube.com/feeds/videos.xml?channel_id=UCylGUf9BvQooEFjgdNudoQg "~YT - The Linux Cast"
https://www.youtube.com/feeds/videos.xml?channel_id=UCz1oFxMrgrQ82-276UCOU9w "~YT - Atlas Pro" https://www.youtube.com/feeds/videos.xml?channel_id=UCz1oFxMrgrQ82-276UCOU9w "~YT - Atlas Pro"
https://www.youtube.com/feeds/videos.xml?channel_id=UCzDI_VuYb14FLu9f8uXOeSA "~YT - Joseju"
https://www.youtube.com/feeds/videos.xml?channel_id=UCzGMBzt6UOMoQe_dqOfShZw "~YT - Cultura VJ" https://www.youtube.com/feeds/videos.xml?channel_id=UCzGMBzt6UOMoQe_dqOfShZw "~YT - Cultura VJ"
https://www.youtube.com/feeds/videos.xml?channel_id=UCzR-rom72PHN9Zg7RML9EbA "~YT - PBS Eons" https://www.youtube.com/feeds/videos.xml?channel_id=UCzR-rom72PHN9Zg7RML9EbA "~YT - PBS Eons"
https://www.youtube.com/feeds/videos.xml?channel_id=UCzXsTSZDoAPSjfHr8IZM9Ew "~YT - FloatyMonkey" https://www.youtube.com/feeds/videos.xml?channel_id=UCzXsTSZDoAPSjfHr8IZM9Ew "~YT - FloatyMonkey"

View file

@ -1,70 +0,0 @@
## ____ __
## / __ \_________ _/ /_____
## / / / / ___/ __ `/ //_/ _ \
## / /_/ / / / /_/ / ,< / __/ Clay Gomera (Drake)
## /_____/_/ \__,_/_/|_|\___/ My custom picom config
## Shadows
shadow = false;
#shadow-radius = 8;
#shadow-opacity = .90
#shadow-offset-x = -10;
#shadow-offset-y = -10;
# shadow-red = 0
# shadow-green = 0
# shadow-blue = 0
# shadow-color = "#000000"
#shadow-exclude = [
# "name = 'Notification'",
# "class_g = 'Conky'",
# "class_g ?= 'Notify-osd'",
# "class_g = 'Cairo-clock'",
# "_GTK_FRAME_EXTENTS@:c"
#];
## Fading
fading = false;
#fade-in-step = 0.05;
#fade-out-step = 0.05;
#fade-delta = 8
#fade-exclude = []
no-fading-openclose = true
no-fading-destroyed-argb = true
## Transparency and opacity
inactive-opacity = 1.00;
frame-opacity = 1.0;
inactive-opacity-override = false;
focus-exclude = [ "class_g = 'Cairo-clock'" ];
# opaity-rule = []
## General Settings
backend = "glx";
vsync = true;
dbe = false;
detect-client-opacity = true;
detect-transient = true;
glx-no-stencil = true;
use-damage = true;
unredir-if-possible = true;
no-frame-pacing = true;
#unredir-if-possible-exclude = [
# "class_g = 'looking-glass-client' && !focused"
#];
glx-use-copysubbuffer-mesa = true;
wintypes:
{
normal = { fade = true; full-shadow = true; };
tooltip = { fade = true; };
menu = { fade = true; };
popup_menu = { fade = true; };
dropdown_menu = { fade = true; };
utility = { fade = true; };
dialog = { fade = true; };
notify = { fade = true; };
unknown = { fade = true; };
# notification = { shadow = true; };
# dock = { shadow = false; };
};

View file

@ -1,27 +0,0 @@
https://procesos.intec.edu.do/ intec-procesos
https://campusvirtual.intec.edu.do/ intec-aula-virtual
https://outlook.office.com/mail/ intec-correo
https://app.tuta.com/mail tuta
https://mail.proton.me/ protonmail
https://mail.google.com/ gmail
https://outlook.live.com/ outlook
https://floss.social/ mastodon
https://beehaw.org/ beehaw
https://pixelfed.social/ pixelfed
https://www.edx.org/ edx
https://khanacademy.org/ khanacademy
https://clientes.eps.com.do/ eps
https://www.amazon.com/ amazon
https://annas-archive.org/ annas-archive
https://cockpit.lianslair.com/ cockpit
https://cloud.lianslair.com/ nextcloud
https://vault.lianslair.com/ bitwarden
https://library.lianslair.com/ kavita
https://rss.lianslair.com/ freshrss
https://search.lianslair.com/ search
https://portainer.lianslair.com/ portainer
https://cloud.digitalocean.com/ digitalocean
https://github.com/ github
https://mega.nz/ mega
https://drive.google.com/drive/my-drive google-drive
https://web.whatsapp.com/ whatsapp

View file

@ -1,189 +0,0 @@
## ____ __
## / __ \_________ _/ /_____
## / / / / ___/ __ `/ //_/ _ \
## / /_/ / / / /_/ / ,< / __/ Clay Gomera (Drake)
## /_____/_/ \__,_/_/|_|\___/ My custom qutebrowser config
##
# NOTE: config.py is intended for advanced users who are comfortable
# with manually migrating the config file on qutebrowser upgrades. If
# you prefer, you can also configure qutebrowser using the
# :set/:bind/:config-* commands without having to write a config.py
# file.
#
# Documentation:
# qute://help/configuring.html
# qute://help/settings.html
# Uncomment this to still load settings configured via autoconfig.yml
# config.load_autoconfig()
# Or uncomment this line to load settings from config.py
config.load_autoconfig(False)
# Aliases for commands. The keys of the given dictionary are the
# aliases, while the values are the commands they map to.
# Type: Dict
c.aliases = {'q': 'quit', 'w': 'session-save', 'wq': 'quit --save'}
# Setting dark mode
# config.set("colors.webpage.darkmode.enabled", True) # this will force dark mode for everything
config.set("colors.webpage.preferred_color_scheme", "dark") # this will request dark mode if it's supported
# Which cookies to accept. With QtWebEngine, this setting also controls
# other features with tracking capabilities similar to those of cookies;
# including IndexedDB, DOM storage, filesystem API, service workers, and
# AppCache. Note that with QtWebKit, only `all` and `never` are
# supported as per-domain values. Setting `no-3rdparty` or `no-
# unknown-3rdparty` per-domain on QtWebKit will have the same effect as
# `all`.
# Type: String
# Valid values:
# - all: Accept all cookies.
# - no-3rdparty: Accept cookies from the same origin only. This is known to break some sites, such as GMail.
# - no-unknown-3rdparty: Accept cookies from the same origin only, unless a cookie is already set for the domain. On QtWebEngine, this is the same as no-3rdparty.
# - never: Don't accept cookies at all.
config.set('content.cookies.accept', 'all', 'chrome-devtools://*')
# Which cookies to accept. With QtWebEngine, this setting also controls
# other features with tracking capabilities similar to those of cookies;
# including IndexedDB, DOM storage, filesystem API, service workers, and
# AppCache. Note that with QtWebKit, only `all` and `never` are
# supported as per-domain values. Setting `no-3rdparty` or `no-
# unknown-3rdparty` per-domain on QtWebKit will have the same effect as
# `all`.
# Type: String
# Valid values:
# - all: Accept all cookies.
# - no-3rdparty: Accept cookies from the same origin only. This is known to break some sites, such as GMail.
# - no-unknown-3rdparty: Accept cookies from the same origin only, unless a cookie is already set for the domain. On QtWebEngine, this is the same as no-3rdparty.
# - never: Don't accept cookies at all.
config.set('content.cookies.accept', 'all', 'devtools://*')
# User agent to send. The following placeholders are defined: *
# `{os_info}`: Something like "X11; Linux x86_64". * `{webkit_version}`:
# The underlying WebKit version (set to a fixed value with
# QtWebEngine). * `{qt_key}`: "Qt" for QtWebKit, "QtWebEngine" for
# QtWebEngine. * `{qt_version}`: The underlying Qt version. *
# `{upstream_browser_key}`: "Version" for QtWebKit, "Chrome" for
# QtWebEngine. * `{upstream_browser_version}`: The corresponding
# Safari/Chrome version. * `{qutebrowser_version}`: The currently
# running qutebrowser version. The default value is equal to the
# unchanged user agent of QtWebKit/QtWebEngine. Note that the value
# read from JavaScript is always the global value. With QtWebEngine
# between 5.12 and 5.14 (inclusive), changing the value exposed to
# JavaScript requires a restart.
# Type: FormatString
#config.set('content.headers.user_agent', 'Mozilla/5.0 ({os_info}) AppleWebKit/{webkit_version} (KHTML, like Gecko) {upstream_browser_key}/{upstream_browser_version} Safari/{webkit_version}', 'https://web.whatsapp.com/')
#config.set('content.headers.user_agent', 'Mozilla/5.0 ({os_info}; rv:71.0) Gecko/20100101 Firefox/71.0', 'https://accounts.google.com/*')
#config.set('content.headers.user_agent', 'Mozilla/5.0 ({os_info}) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99 Safari/537.36', 'https://*.slack.com/*')
#config.set('content.headers.user_agent', 'Mozilla/5.0 ({os_info}; rv:71.0) Gecko/20100101 Firefox/71.0', 'https://docs.google.com/*')
#config.set('content.headers.user_agent', 'Mozilla/5.0 ({os_info}; rv:71.0) Gecko/20100101 Firefox/71.0', 'https://drive.google.com/*')
# Load images automatically in web pages.
# Type: Bool
config.set('content.images', True, 'chrome-devtools://*')
# Load images automatically in web pages.
# Type: Bool
config.set('content.images', True, 'devtools://*')
# Enable JavaScript.
# Type: Bool
config.set('content.javascript.enabled', True, 'chrome-devtools://*')
# Enable JavaScript.
# Type: Bool
config.set('content.javascript.enabled', True, 'devtools://*')
# Enable JavaScript.
# Type: Bool
config.set('content.javascript.enabled', True, 'chrome://*/*')
# Enable JavaScript.
# Type: Bool
config.set('content.javascript.enabled', True, 'qute://*/*')
# Directory to save downloads to. If unset, a sensible OS-specific
# default is used.
# Type: Directory
c.downloads.location.directory = '~/Downloads'
# When to show the tab bar.
# Type: String
# Valid values:
# - always: Always show the tab bar.
# - never: Always hide the tab bar.
# - multiple: Hide the tab bar if only one tab is open.
# - switching: Show the tab bar when switching tabs.
c.tabs.show = 'always'
# Setting default page for when opening new tabs or new windows with
# commands like :open -t and :open -w .
c.url.default_page = 'https://search.lianslair.com'
c.url.start_pages = 'https://search.lianslair.com'
# Search engines which can be used via the address bar. Maps a search
# engine name (such as `DEFAULT`, or `ddg`) to a URL with a `{}`
# placeholder. The placeholder will be replaced by the search term, use
# `{{` and `}}` for literal `{`/`}` braces. The following further
# placeholds are defined to configure how special characters in the
# search terms are replaced by safe characters (called 'quoting'): *
# `{}` and `{semiquoted}` quote everything except slashes; this is the
# most sensible choice for almost all search engines (for the search
# term `slash/and&amp` this placeholder expands to `slash/and%26amp`).
# * `{quoted}` quotes all characters (for `slash/and&amp` this
# placeholder expands to `slash%2Fand%26amp`). * `{unquoted}` quotes
# nothing (for `slash/and&amp` this placeholder expands to
# `slash/and&amp`). The search engine named `DEFAULT` is used when
# `url.auto_search` is turned on and something else than a URL was
# entered to be opened. Other search engines can be used by prepending
# the search engine name to the search term, e.g. `:open google
# qutebrowser`.
# Type: Dict
c.url.searchengines = {'DEFAULT': 'https://search.lianslair.com/search?q={}', 'aw': 'https://wiki.archlinux.org/?search={}', 'ub': 'https://www.urbandictionary.com/define.php?term={}', 'wiki': 'https://en.wikipedia.org/wiki/{}'}
# Default font families to use. Whenever "default_family" is used in a
# font setting, it's replaced with the fonts listed here. If set to an
# empty value, a system-specific monospace default is used.
# Type: List of Font, or Font
c.fonts.default_family = '"Inter"'
# Default font size to use. Whenever "default_size" is used in a font
# setting, it's replaced with the size listed here. Valid values are
# either a float value with a "pt" suffix, or an integer value with a
# "px" suffix.
# Type: String
c.fonts.default_size = '10pt'
# Font used in the completion widget.
# Type: Font
c.fonts.completion.entry = '10pt "mononoki Nerd Font"'
# Font used for the debugging console.
# Type: Font
c.fonts.debug_console = '10pt "mononoki Nerd Font"'
# Font used for prompts.
# Type: Font
c.fonts.prompts = 'default_size sans-serif'
# Font used in the statusbar.
# Type: Font
c.fonts.statusbar = '10pt "Inter"'
config.source('gruvbox.py')
# Bindings for normal mode
config.bind('M', 'hint links spawn mpv {hint-url}')
config.bind('Z', 'hint links spawn st -e youtube-dl {hint-url}')
config.bind('t', 'set-cmd-text -s :open -t')
config.bind('xb', 'config-cycle statusbar.show always never')
config.bind('xt', 'config-cycle tabs.show always never')
config.bind('xx', 'config-cycle statusbar.show always never;; config-cycle tabs.show always never')
# configs
config.set('content.notifications.enabled', False)
config.set('content.blocking.method', 'both')
config.set('content.blocking.enabled', True)
config.set('content.autoplay', False)
config.set('content.register_protocol_handler', False)

View file

@ -1,333 +0,0 @@
# gruvbox dark hard qutebrowser theme by Florian Bruhin <me@the-compiler.org>
#
# Originally based on:
# base16-qutebrowser (https://github.com/theova/base16-qutebrowser)
# Base16 qutebrowser template by theova and Daniel Mulford
# Gruvbox dark, hard scheme by Dawid Kurek (dawikur@gmail.com), morhetz (https://github.com/morhetz/gruvbox)
bg0_hard = "#1d2021"
bg0_soft = '#32302f'
bg0_normal = '#282828'
bg0 = bg0_normal
bg1 = "#3c3836"
bg2 = "#504945"
bg3 = "#665c54"
bg4 = "#7c6f64"
fg0 = "#fbf1c7"
fg1 = "#ebdbb2"
fg2 = "#d5c4a1"
fg3 = "#bdae93"
fg4 = "#a89984"
bright_red = "#fb4934"
bright_green = "#b8bb26"
bright_yellow = "#fabd2f"
bright_blue = "#83a598"
bright_purple = "#d3869b"
bright_aqua = "#8ec07c"
bright_gray = "#928374"
bright_orange = "#fe8019"
dark_red = "#cc241d"
dark_green = "#98971a"
dark_yellow = "#d79921"
dark_blue = "#458588"
dark_purple = "#b16286"
dark_aqua = "#689d6a"
dark_gray = "#a89984"
dark_orange = "#d65d0e"
### Completion
# Text color of the completion widget. May be a single color to use for
# all columns or a list of three colors, one for each column.
c.colors.completion.fg = [fg1, bright_aqua, bright_yellow]
# Background color of the completion widget for odd rows.
c.colors.completion.odd.bg = bg0
# Background color of the completion widget for even rows.
c.colors.completion.even.bg = c.colors.completion.odd.bg
# Foreground color of completion widget category headers.
c.colors.completion.category.fg = bright_blue
# Background color of the completion widget category headers.
c.colors.completion.category.bg = bg1
# Top border color of the completion widget category headers.
c.colors.completion.category.border.top = c.colors.completion.category.bg
# Bottom border color of the completion widget category headers.
c.colors.completion.category.border.bottom = c.colors.completion.category.bg
# Foreground color of the selected completion item.
c.colors.completion.item.selected.fg = fg0
# Background color of the selected completion item.
c.colors.completion.item.selected.bg = bg4
# Top border color of the selected completion item.
c.colors.completion.item.selected.border.top = bg2
# Bottom border color of the selected completion item.
c.colors.completion.item.selected.border.bottom = c.colors.completion.item.selected.border.top
# Foreground color of the matched text in the selected completion item.
c.colors.completion.item.selected.match.fg = bright_orange
# Foreground color of the matched text in the completion.
c.colors.completion.match.fg = c.colors.completion.item.selected.match.fg
# Color of the scrollbar handle in the completion view.
c.colors.completion.scrollbar.fg = c.colors.completion.item.selected.fg
# Color of the scrollbar in the completion view.
c.colors.completion.scrollbar.bg = c.colors.completion.category.bg
### Context menu
# Background color of disabled items in the context menu.
c.colors.contextmenu.disabled.bg = bg3
# Foreground color of disabled items in the context menu.
c.colors.contextmenu.disabled.fg = fg3
# Background color of the context menu. If set to null, the Qt default is used.
c.colors.contextmenu.menu.bg = bg0
# Foreground color of the context menu. If set to null, the Qt default is used.
c.colors.contextmenu.menu.fg = fg2
# Background color of the context menu's selected item. If set to null, the Qt default is used.
c.colors.contextmenu.selected.bg = bg2
#Foreground color of the context menu's selected item. If set to null, the Qt default is used.
c.colors.contextmenu.selected.fg = c.colors.contextmenu.menu.fg
### Downloads
# Background color for the download bar.
c.colors.downloads.bar.bg = bg0
# Color gradient start for download text.
c.colors.downloads.start.fg = bg0
# Color gradient start for download backgrounds.
c.colors.downloads.start.bg = bright_blue
# Color gradient end for download text.
c.colors.downloads.stop.fg = c.colors.downloads.start.fg
# Color gradient stop for download backgrounds.
c.colors.downloads.stop.bg = bright_aqua
# Foreground color for downloads with errors.
c.colors.downloads.error.fg = bright_red
### Hints
# Font color for hints.
c.colors.hints.fg = bg0
# Background color for hints.
c.colors.hints.bg = 'rgba(250, 191, 47, 200)' # bright_yellow
# Font color for the matched part of hints.
c.colors.hints.match.fg = bg4
### Keyhint widget
# Text color for the keyhint widget.
c.colors.keyhint.fg = fg4
# Highlight color for keys to complete the current keychain.
c.colors.keyhint.suffix.fg = fg0
# Background color of the keyhint widget.
c.colors.keyhint.bg = bg0
### Messages
# Foreground color of an error message.
c.colors.messages.error.fg = bg0
# Background color of an error message.
c.colors.messages.error.bg = bright_red
# Border color of an error message.
c.colors.messages.error.border = c.colors.messages.error.bg
# Foreground color of a warning message.
c.colors.messages.warning.fg = bg0
# Background color of a warning message.
c.colors.messages.warning.bg = bright_purple
# Border color of a warning message.
c.colors.messages.warning.border = c.colors.messages.warning.bg
# Foreground color of an info message.
c.colors.messages.info.fg = fg2
# Background color of an info message.
c.colors.messages.info.bg = bg0
# Border color of an info message.
c.colors.messages.info.border = c.colors.messages.info.bg
### Prompts
# Foreground color for prompts.
c.colors.prompts.fg = fg2
# Border used around UI elements in prompts.
c.colors.prompts.border = f'1px solid {bg1}'
# Background color for prompts.
c.colors.prompts.bg = bg3
# Background color for the selected item in filename prompts.
c.colors.prompts.selected.bg = bg2
### Statusbar
# Foreground color of the statusbar.
c.colors.statusbar.normal.fg = fg2
# Background color of the statusbar.
c.colors.statusbar.normal.bg = bg0
# Foreground color of the statusbar in insert mode.
c.colors.statusbar.insert.fg = bg0
# Background color of the statusbar in insert mode.
c.colors.statusbar.insert.bg = dark_aqua
# Foreground color of the statusbar in passthrough mode.
c.colors.statusbar.passthrough.fg = bg0
# Background color of the statusbar in passthrough mode.
c.colors.statusbar.passthrough.bg = dark_blue
# Foreground color of the statusbar in private browsing mode.
c.colors.statusbar.private.fg = bright_purple
# Background color of the statusbar in private browsing mode.
c.colors.statusbar.private.bg = bg0
# Foreground color of the statusbar in command mode.
c.colors.statusbar.command.fg = fg3
# Background color of the statusbar in command mode.
c.colors.statusbar.command.bg = bg1
# Foreground color of the statusbar in private browsing + command mode.
c.colors.statusbar.command.private.fg = c.colors.statusbar.private.fg
# Background color of the statusbar in private browsing + command mode.
c.colors.statusbar.command.private.bg = c.colors.statusbar.command.bg
# Foreground color of the statusbar in caret mode.
c.colors.statusbar.caret.fg = bg0
# Background color of the statusbar in caret mode.
c.colors.statusbar.caret.bg = dark_purple
# Foreground color of the statusbar in caret mode with a selection.
c.colors.statusbar.caret.selection.fg = c.colors.statusbar.caret.fg
# Background color of the statusbar in caret mode with a selection.
c.colors.statusbar.caret.selection.bg = bright_purple
# Background color of the progress bar.
c.colors.statusbar.progress.bg = bright_blue
# Default foreground color of the URL in the statusbar.
c.colors.statusbar.url.fg = fg4
# Foreground color of the URL in the statusbar on error.
c.colors.statusbar.url.error.fg = dark_red
# Foreground color of the URL in the statusbar for hovered links.
c.colors.statusbar.url.hover.fg = bright_orange
# Foreground color of the URL in the statusbar on successful load
# (http).
c.colors.statusbar.url.success.http.fg = bright_red
# Foreground color of the URL in the statusbar on successful load
# (https).
c.colors.statusbar.url.success.https.fg = fg0
# Foreground color of the URL in the statusbar when there's a warning.
c.colors.statusbar.url.warn.fg = bright_purple
### tabs
# Background color of the tab bar.
c.colors.tabs.bar.bg = bg0
# Color gradient start for the tab indicator.
c.colors.tabs.indicator.start = bright_blue
# Color gradient end for the tab indicator.
c.colors.tabs.indicator.stop = bright_aqua
# Color for the tab indicator on errors.
c.colors.tabs.indicator.error = bright_red
# Foreground color of unselected odd tabs.
c.colors.tabs.odd.fg = fg2
# Background color of unselected odd tabs.
c.colors.tabs.odd.bg = bg2
# Foreground color of unselected even tabs.
c.colors.tabs.even.fg = c.colors.tabs.odd.fg
# Background color of unselected even tabs.
c.colors.tabs.even.bg = bg3
# Foreground color of selected odd tabs.
c.colors.tabs.selected.odd.fg = fg2
# Background color of selected odd tabs.
c.colors.tabs.selected.odd.bg = bg0
# Foreground color of selected even tabs.
c.colors.tabs.selected.even.fg = c.colors.tabs.selected.odd.fg
# Background color of selected even tabs.
c.colors.tabs.selected.even.bg = bg0
# Background color of pinned unselected even tabs.
c.colors.tabs.pinned.even.bg = bright_green
# Foreground color of pinned unselected even tabs.
c.colors.tabs.pinned.even.fg = bg2
# Background color of pinned unselected odd tabs.
c.colors.tabs.pinned.odd.bg = bright_green
# Foreground color of pinned unselected odd tabs.
c.colors.tabs.pinned.odd.fg = c.colors.tabs.pinned.even.fg
# Background color of pinned selected even tabs.
c.colors.tabs.pinned.selected.even.bg = bg0
# Foreground color of pinned selected even tabs.
c.colors.tabs.pinned.selected.even.fg = c.colors.tabs.selected.odd.fg
# Background color of pinned selected odd tabs.
c.colors.tabs.pinned.selected.odd.bg = c.colors.tabs.pinned.selected.even.bg
# Foreground color of pinned selected odd tabs.
c.colors.tabs.pinned.selected.odd.fg = c.colors.tabs.selected.odd.fg
# Background color for webpages if unset (or empty to use the theme's
# color).
#c.colors.webpage.bg = bg4

View file

@ -0,0 +1,112 @@
* {
blue: #89b4fa;
red: #e78284;
grey: #6c7086;
bg-col: #1e1e2e;
bg-col-light: #313244;
selected-col: @bg-col;
border-col: @blue;
fg-col: #cdd6f4;
fg-col2: @blue;
width: 800px;
font: "Mononoki Nerd Font 10";
}
element-text, element-icon , mode-switcher {
background-color: inherit;
text-color: inherit;
}
window {
height: 370px;
border: 3px;
border-radius: 10px;
border-color: @border-col;
background-color: @bg-col;
}
mainbox {
background-color: @bg-col;
}
inputbar {
children: [prompt,entry];
background-color: @bg-col;
border-radius: 5px;
padding: 2px;
}
prompt {
background-color: @blue;
padding: 8px;
text-color: @bg-col;
border-radius: 3px;
margin: 20px 0px 0px 20px;
}
textbox-prompt-colon {
expand: false;
str: ":";
}
entry {
padding: 6px;
margin: 20px 0px 0px 10px;
text-color: @fg-col;
background-color: @bg-col;
}
listview {
border: 0px 0px 0px;
padding: 2px 2px 2px;
margin: 10px 20px 0px 20px;
columns: 1;
background-color: @bg-col;
}
element {
padding: 5px;
background-color: @bg-col;
text-color: @fg-col;
}
element-icon {
size: 28px;
}
element selected {
background-color: @selected-col;
text-color: @fg-col2;
}
mode-switcher {
spacing: 0;
}
button {
padding: 10px;
background-color: @bg-col;
text-color: @grey;
vertical-align: 0.5;
horizontal-align: 0.5;
}
button selected {
background-color: @bg-col-light;
text-color: @blue;
}
message {
background-color: @bg-col-light;
margin: 2px;
padding: 2px;
border-radius: 5px;
}
textbox {
padding: 6px;
margin: 20px 0px 0px 20px;
text-color: @red;
background-color: @bg-col-light;
}

19
config/rofi/config.rasi Normal file
View file

@ -0,0 +1,19 @@
configuration{
modi: "run,drun,window";
lines: 10;
show-icons: true;
icon-theme: "Papirus-Dark";
terminal: "kitty";
drun-display-format: "{icon} {name}";
location: 0;
disable-history: false;
hide-scrollbar: true;
display-drun: " Apps";
display-run: " Run";
display-window: "󰕰 Window";
display-Network: "󰤨 Network";
sidebar-mode: true;
dpi: 100;
}
@theme "catppuccin-mocha"

View file

@ -1,21 +1,20 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# _ _ _ _ _ _ # __ _ _ _ _ _ _
# __| |_ __ ___ ___ _ __ _ _ | |__ | |_ _ ___| |_ ___ ___ | |_ | |__ # _ __ ___ / _(_) | |__ | |_ _ ___| |_ ___ ___ | |_| |__
# / _` | '_ ` _ \ / _ \ '_ \| | | |_____| '_ \| | | | |/ _ \ __/ _ \ / _ \| __|| '_ \ # | '__/ _ \| |_| |_____| '_ \| | | | |/ _ \ __/ _ \ / _ \| __| '_ \
# | (_| | | | | | | __/ | | | |_| |_____| |_) | | |_| | __/ || (_) | (_) | |_ | | | | # | | | (_) | _| |_____| |_) | | |_| | __/ || (_) | (_) | |_| | | |
# \__,_|_| |_| |_|\___|_| |_|\__,_| |_.__/|_|\__,_|\___|\__\___/ \___/ \__||_| |_| # |_| \___/|_| |_| |_.__/|_|\__,_|\___|\__\___/ \___/ \__|_| |_|
# #
# Author: Nick Clyde (clydedroid) # Author: Nick Clyde (clydedroid)
# dmenu support by: Layerex
# #
# A script that generates a dmenu menu that uses bluetoothctl to # A script that generates a rofi menu that uses bluetoothctl to
# connect to bluetooth devices and display status info. # connect to bluetooth devices and display status info.
# #
# Inspired by networkmanager-dmenu (https://github.com/firecat53/networkmanager-dmenu) # Inspired by networkmanager-dmenu (https://github.com/firecat53/networkmanager-dmenu)
# Thanks to x70b1 (https://github.com/polybar/polybar-scripts/tree/master/polybar-scripts/system-bluetooth-bluetoothctl) # Thanks to x70b1 (https://github.com/polybar/polybar-scripts/tree/master/polybar-scripts/system-bluetooth-bluetoothctl)
# #
# Depends on: # Depends on:
# Arch repositories: dmenu, bluez-utils (contains bluetoothctl) # Arch repositories: rofi, bluez-utils (contains bluetoothctl)
# Constants # Constants
divider="---------" divider="---------"
@ -23,7 +22,7 @@ goback="Back"
# Checks if bluetooth controller is powered on # Checks if bluetooth controller is powered on
power_on() { power_on() {
if bluetoothctl show | grep -F -q "Powered: yes"; then if bluetoothctl show | grep -q "Powered: yes"; then
return 0 return 0
else else
return 1 return 1
@ -36,7 +35,7 @@ toggle_power() {
bluetoothctl power off bluetoothctl power off
show_menu show_menu
else else
if rfkill list bluetooth | grep -F -q 'blocked: yes'; then if rfkill list bluetooth | grep -q 'blocked: yes'; then
rfkill unblock bluetooth && sleep 3 rfkill unblock bluetooth && sleep 3
fi fi
bluetoothctl power on bluetoothctl power on
@ -46,7 +45,7 @@ toggle_power() {
# Checks if controller is scanning for new devices # Checks if controller is scanning for new devices
scan_on() { scan_on() {
if bluetoothctl show | grep -F -q "Discovering: yes"; then if bluetoothctl show | grep -q "Discovering: yes"; then
echo "Scan: on" echo "Scan: on"
return 0 return 0
else else
@ -58,7 +57,7 @@ scan_on() {
# Toggles scanning state # Toggles scanning state
toggle_scan() { toggle_scan() {
if scan_on; then if scan_on; then
kill "$(pgrep -F -f "bluetoothctl scan on")" kill $(pgrep -f "bluetoothctl scan on")
bluetoothctl scan off bluetoothctl scan off
show_menu show_menu
else else
@ -71,7 +70,7 @@ toggle_scan() {
# Checks if controller is able to pair to devices # Checks if controller is able to pair to devices
pairable_on() { pairable_on() {
if bluetoothctl show | grep -F -q "Pairable: yes"; then if bluetoothctl show | grep -q "Pairable: yes"; then
echo "Pairable: on" echo "Pairable: on"
return 0 return 0
else else
@ -93,7 +92,7 @@ toggle_pairable() {
# Checks if controller is discoverable by other devices # Checks if controller is discoverable by other devices
discoverable_on() { discoverable_on() {
if bluetoothctl show | grep -F -q "Discoverable: yes"; then if bluetoothctl show | grep -q "Discoverable: yes"; then
echo "Discoverable: on" echo "Discoverable: on"
return 0 return 0
else else
@ -116,7 +115,7 @@ toggle_discoverable() {
# Checks if a device is connected # Checks if a device is connected
device_connected() { device_connected() {
device_info=$(bluetoothctl info "$1") device_info=$(bluetoothctl info "$1")
if echo "$device_info" | grep -F -q "Connected: yes"; then if echo "$device_info" | grep -q "Connected: yes"; then
return 0 return 0
else else
return 1 return 1
@ -127,17 +126,17 @@ device_connected() {
toggle_connection() { toggle_connection() {
if device_connected "$1"; then if device_connected "$1"; then
bluetoothctl disconnect "$1" bluetoothctl disconnect "$1"
# device_menu "$device" device_menu "$device"
else else
bluetoothctl connect "$1" bluetoothctl connect "$1"
# device_menu "$device" device_menu "$device"
fi fi
} }
# Checks if a device is paired # Checks if a device is paired
device_paired() { device_paired() {
device_info=$(bluetoothctl info "$1") device_info=$(bluetoothctl info "$1")
if echo "$device_info" | grep -F -q "Paired: yes"; then if echo "$device_info" | grep -q "Paired: yes"; then
echo "Paired: yes" echo "Paired: yes"
return 0 return 0
else else
@ -160,7 +159,7 @@ toggle_paired() {
# Checks if a device is trusted # Checks if a device is trusted
device_trusted() { device_trusted() {
device_info=$(bluetoothctl info "$1") device_info=$(bluetoothctl info "$1")
if echo "$device_info" | grep -F -q "Trusted: yes"; then if echo "$device_info" | grep -q "Trusted: yes"; then
echo "Trusted: yes" echo "Trusted: yes"
return 0 return 0
else else
@ -186,12 +185,18 @@ print_status() {
if power_on; then if power_on; then
printf '' printf ''
mapfile -t paired_devices < <(bluetoothctl paired-devices | grep -F Device | cut -d ' ' -f 2) paired_devices_cmd="devices Paired"
# Check if an outdated version of bluetoothctl is used to preserve backwards compatibility
if (( $(echo "$(bluetoothctl version | cut -d ' ' -f 2) < 5.65" | bc -l) )); then
paired_devices_cmd="paired-devices"
fi
mapfile -t paired_devices < <(bluetoothctl "$paired_devices_cmd" | grep Device | cut -d ' ' -f 2)
counter=0 counter=0
for device in "${paired_devices[@]}"; do for device in "${paired_devices[@]}"; do
if device_connected "$device"; then if device_connected "$device"; then
device_alias="$(bluetoothctl info "$device" | grep -F "Alias" | cut -d ' ' -f 2-)" device_alias=$(bluetoothctl info "$device" | grep "Alias" | cut -d ' ' -f 2-)
if [ $counter -gt 0 ]; then if [ $counter -gt 0 ]; then
printf ", %s" "$device_alias" printf ", %s" "$device_alias"
@ -213,8 +218,8 @@ device_menu() {
device=$1 device=$1
# Get device name and mac address # Get device name and mac address
device_name="$(echo "$device" | cut -d ' ' -f 3-)" device_name=$(echo "$device" | cut -d ' ' -f 3-)
mac="$(echo "$device" | cut -d ' ' -f 2)" mac=$(echo "$device" | cut -d ' ' -f 2)
# Build options # Build options
if device_connected "$mac"; then if device_connected "$mac"; then
@ -226,11 +231,11 @@ device_menu() {
trusted=$(device_trusted "$mac") trusted=$(device_trusted "$mac")
options="$connected\n$paired\n$trusted\n$divider\n$goback\nExit" options="$connected\n$paired\n$trusted\n$divider\n$goback\nExit"
# Open dmenu menu, read chosen option # Open rofi menu, read chosen option
chosen="$(echo -e "$options" | run_dmenu "$device_name")" chosen="$(echo -e "$options" | $RUNNER -i -l 8 -p "󰾰 $device_name")"
# Match chosen option to command # Match chosen option to command
case $chosen in case "$chosen" in
"" | "$divider") "" | "$divider")
echo "No option chosen." echo "No option chosen."
;; ;;
@ -249,7 +254,7 @@ device_menu() {
esac esac
} }
# Opens a dmenu menu with current bluetooth status and options to connect # Opens a rofi menu with current bluetooth status and options to connect
show_menu() { show_menu() {
# Get menu options # Get menu options
if power_on; then if power_on; then
@ -257,25 +262,25 @@ show_menu() {
# Human-readable names of devices, one per line # Human-readable names of devices, one per line
# If scan is off, will only list paired devices # If scan is off, will only list paired devices
devices=$(bluetoothctl devices | grep -F Device | cut -d ' ' -f 3-) devices=$(bluetoothctl devices | grep Device | cut -d ' ' -f 3-)
# Get controller flags # Get controller flags
scan=$(scan_on) scan=$(scan_on)
pairable=$(pairable_on) pairable=$(pairable_on)
discoverable=$(discoverable_on) discoverable=$(discoverable_on)
# Options passed to dmenu # Options passed to rofi
options="$devices\n$divider\n$power\n$scan\n$pairable\n$discoverable\nExit" options="$devices\n$divider\n$power\n$scan\n$pairable\n$discoverable\nExit"
else else
power="Power: off" power="Power: off"
options="$power\nExit" options="$power\nExit"
fi fi
# Open dmenu menu, read chosen option # Open rofi menu, read chosen option
chosen="$(echo -e "$options" | run_dmenu "Bluetooth")" chosen="$(echo -e "$options" | $RUNNER -i -p " Bluetooth  ")"
# Match chosen option to command # Match chosen option to command
case $chosen in case "$chosen" in
"" | "$divider") "" | "$divider")
echo "No option chosen." echo "No option chosen."
;; ;;
@ -292,21 +297,13 @@ show_menu() {
toggle_pairable toggle_pairable
;; ;;
*) *)
device=$(bluetoothctl devices | grep -F "$chosen") device=$(bluetoothctl devices | grep "$chosen")
# Open a submenu if a device is selected # Open a submenu if a device is selected
if [[ $device ]]; then device_menu "$device"; fi if [[ $device ]]; then device_menu "$device"; fi
;; ;;
esac esac
} }
original_args=("$@")
# dmenu command to pipe into. Extra arguments to dmenu-bluetooth are passed through to dmenu. This
# allows the user to set fonts, sizes, colours, etc.
run_dmenu() {
dmenu "${original_args[@]}" -l 5 -i -p "$1"
}
case "$1" in case "$1" in
--status) --status)
print_status print_status

47
config/rofi/scripts/rs_clip Executable file
View file

@ -0,0 +1,47 @@
#!/usr/bin/env bash
# rs_clip - A simple clipboard menu script for rofi/dmenu/wofi
# Author: Clay Gomera (Drake)
# Dependencies: {rofi || dmenu || wofi}, cliphist, wl-clipboard (wl-copy)
########################
# Function Definitions #
########################
# Check for missing dependencies
check_dependencies() {
local run_launcher_found=false
for launcher in rofi dmenu wofi; do
if command -v "$launcher" &> /dev/null; then
run_launcher_found=true
break
fi
done
if [ "$run_launcher_found" = false ]; then
echo "Missing dependency: one of rofi, dmenu, or wofi is required."
exit 1
fi
local missing_deps=()
for dep in cliphist wl-copy; do
if ! command -v "$dep" &> /dev/null; then
missing_deps+=("$dep")
fi
done
if [ ${#missing_deps[@]} -ne 0 ]; then
echo "Missing dependencies: ${missing_deps[*]}"
exit 1
fi
}
####################
# Main Script Flow #
####################
# Check for dependencies
check_dependencies
# Pass clipboard data into the menu
cliphist list | $RUNNER -p "󱉧 Clipboard  " | cliphist decode | wl-copy

1902
config/rofi/scripts/rs_emoji Executable file

File diff suppressed because it is too large Load diff

146
config/rofi/scripts/rs_power Executable file
View file

@ -0,0 +1,146 @@
#!/usr/bin/env bash
# rs_power - A simple power options menu script for rofi/dmenu/wofi
# Author: Clay Gomera (Drake)
# Dependencies: rofi, power-profiles-daemon (powerprofilesctl), loginctl, libnotify (notify-send)
#######################
## Main menu options ##
#######################
option1=" Logout"
option2=" Reboot"
option3=" Power off"
option4="󰒲 Suspend"
option5=" Lock"
option6=" Change power profile"
option7=" Exit"
options="$option1\n$option2\n$option3\n$option4\n$option5\n$option6\n$option7"
####################################
## Power profiles submenu options ##
####################################
pwr1="󰓅 Performance"
pwr2="󰾅 Balanced"
pwr3="󰾆 Power Saver"
pwr4=" Cancel"
pwrs="$pwr1\n$pwr2\n$pwr3\n$pwr4"
## This variable will store the current power profile
currentpwr=$(powerprofilesctl get)
if [ "$currentpwr" = "performance" ]; then
currentpwr="$pwr1"
elif [ "$currentpwr" = "balanced" ]; then
currentpwr="$pwr2"
elif [ "$currentpwr" = "power-saver" ]; then
currentpwr="$pwr3"
fi
# prompts
prompt1=" Power Options  "
prompt2=" Power Profiles - Currently set to: $currentpwr  "
########################
# Function Definitions #
########################
# Check for missing dependencies
check_dependencies() {
local run_launcher_found=false
for launcher in rofi; do
if command -v "$launcher" &> /dev/null; then
run_launcher_found=true
break
fi
done
if [ "$run_launcher_found" = false ]; then
echo "Missing dependency: one of rofi, dmenu, or wofi is required."
exit 1
fi
local missing_deps=()
for dep in loginctl powerprofilesctl notify-send; do
if ! command -v "$dep" &> /dev/null; then
missing_deps+=("$dep")
fi
done
if [ ${#missing_deps[@]} -ne 0 ]; then
echo "Missing dependencies: ${missing_deps[*]}"
exit 1
fi
}
## Ask yes/no for action confirmation
confirm_action() {
local prompt="$1"
echo -e " Yes\n No" | $RUNNER -i -p "$prompt" | grep -q " Yes"
}
####################
# Main Script Flow #
####################
# Check for dependencies
check_dependencies
action=$(echo -e "$options" | $RUNNER -i -p "$prompt1") # main menu prompt
if [ -z "$action" ]; then
exit 0
fi
case "$action" in
"$option1")
if confirm_action " Are you sure you want to logout?"; then
loginctl kill-session self
fi
;;
"$option2")
if confirm_action " Are you sure you want to reboot?"; then
systemctl reboot
fi
;;
"$option3")
if confirm_action " Are you sure you want to power off?"; then
systemctl poweroff
fi
;;
"$option4")
systemctl suspend
;;
"$option5")
loginctl lock-session
;;
"$option6")
pwraction=$(echo -e "$pwrs" | $RUNNER -l 6 -i -p "$prompt2")
case "$pwraction" in
"$pwr1")
if [ "$currentpwr" = "$pwr1" ]; then
notify-send "The power profile is already set to performance"
exit 1
else
powerprofilesctl set performance && notify-send "Power profile switched to performance"
fi
;;
"$pwr2")
if [ "$currentpwr" = "$pwr2" ]; then
notify-send "The power profile is already set to balanced"
exit 1
else
powerprofilesctl set balanced && notify-send "Power profile switched to balanced"
fi
;;
"$pwr3")
if [ "$currentpwr" = "$pwr3" ]; then
notify-send "The power profile is already set to power saver"
exit 1
else
powerprofilesctl set power-saver && notify-send "Power profile switched to power saver"
fi
;;
"$pwr4")
exit 0
esac;;
"$option7")
exit 0;
esac

321
config/rofi/scripts/rs_scrot Executable file
View file

@ -0,0 +1,321 @@
#!/usr/bin/env bash
# rs_scrot - A simple screenshot menu script for rofi/dmenu/wofi
# Author: Clay Gomera (Drake)
# Dependencies: rofi, grim, slurp, jq, wf-recorder, wl-clipboard (wl-copy), libnotify (notify-send)
############################
# Configuration Parameters #
############################
# Directory to save screenshots
SHOTDIR="$XDG_PICTURES_DIR/Screenshots"
VCAPDIR="$XDG_VIDEOS_DIR/Screencasts" # $MEDIA_DIR refers to a global variable in .xinitrc/.bash_profile
[ ! -d "$SHOTDIR" ] && [ ! -d "$VCAPDIR" ] && mkdir -p "$SHOTDIR" "$VCAPDIR" || echo
# Get audio devices and descriptions
audioDevices=$(pactl list sources | grep "Name" | awk '{print $2}')
audioDescriptions=$(pactl list sources | grep "Description" | cut -d' ' -f2-)
# Create an associative array for mapping pretty names to actual names
declare -A audioMap
while IFS= read -r name && IFS= read -r desc <&3; do
audioMap["$desc"]="$name"
done < <(echo "$audioDevices") 3< <(echo "$audioDescriptions")
#####################
# Main Menu Options #
#####################
mainChoice1="󰹑 Take an screenshot"
mainChoice2="󰻃 Record the screen"
mainChoice3=" Exit"
mainChoices="$mainChoice1\n$mainChoice2\n$mainChoice3"
#############################
## Screenshot menu choices ##
#############################
shotChoice1="󱣴 Entire screen"
shotChoice2="󱎫 Entire screen with delay"
shotChoice3="󱕻 Select region"
shotChoice4="󰖯 Active window"
shotChoice5="󱎘 Exit"
shotChoices="$shotChoice1\n$shotChoice2\n$shotChoice3\n$shotChoice4\n$shotChoice5"
#############################
## Screencast menu choices ##
#############################
vidChoice1="󰕧 Record the screen"
vidChoice2="󰕩 Record region"
vidChoice3="󰕧 Record the screen with audio"
vidChoice4="󰕨 Stop recording"
vidChoice5="󱎘 Exit"
vidChoices="$vidChoice1\n$vidChoice2\n$vidChoice3\n$vidChoice4\n$vidChoice5"
###################
# Submenu Options #
###################
subShotChoice1="󰆏 Copy to clipboard"
subShotChoice2="󰠘 Save to $XDG_PICTURES_DIR"
subShotChoice3="󱎘 Exit"
subShotChoices="$subShotChoice1\n$subShotChoice2\n$subShotChoice3"
####################################
# Screenshot Delay Submenu Options #
####################################
delayChoice1="󱑀 3 sec delay"
delayChoice2="󱑂 5 sec delay"
delayChoice3="󱑇 10 sec delay"
delayChoice4="󱎘 Exit"
delayChoices="$delayChoice1\n$delayChoice2\n$delayChoice3\n$delayChoice4"
########################
# Function Definitions #
########################
# Check for missing dependencies
CheckDependencies() {
local run_launcher_found=false
for launcher in rofi; do
if command -v "$launcher" &> /dev/null; then
run_launcher_found=true
break
fi
done
if [ "$run_launcher_found" = false ]; then
echo "Missing dependency: one of rofi, dmenu, or wofi is required."
exit 1
fi
local missing_deps=()
for dep in grim slurp jq wl-copy notify-send wf-recorder; do
if ! command -v "$dep" &> /dev/null; then
missing_deps+=("$dep")
fi
done
if [ ${#missing_deps[@]} -ne 0 ]; then
echo "Missing dependencies: ${missing_deps[*]}"
exit 1
fi
}
# Prompt user for screenshot action
ShotActionPrompt() {
shotActionCases=$(echo -e "$subShotChoices" | $RUNNER -i -p " What do you want to do with this screenshot?")
}
# Prompt user for screenshot delay
DelayPrompt() {
delayActionsCases=$(echo -e "$delayChoices" | $RUNNER -i -p " Select Delay")
}
# Take a full screen screenshot without delay
ShotScreen() {
ShotActionPrompt
case "$shotActionCases" in
"$subShotChoice1")
sleep 0.5 && grim - | wl-copy && notify-send "Screenshot copied to clipboard"
;;
"$subShotChoice2")
sleep 0.5 && grim "$SHOTDIR/$(date +%s).png" && notify-send "Screenshot saved to $SHOTDIR"
;;
*)
exit 0
;;
esac
}
# Take a full screen screenshot with delay
ShotScreenDelay() {
ShotActionPrompt
if [ "$shotActionCases" = "$subShotChoice1" ]; then
DelayPrompt
case $delayActionsCases in
"$delayChoice1")
sleep 3 && grim - | wl-copy && notify-send "Screenshot saved to clipboard"
;;
"$delayChoice2")
sleep 5 && grim - | wl-copy && notify-send "Screenshot saved to clipboard"
;;
"$delayChoice3")
sleep 10 && grim - | wl-copy && notify-send "Screenshot saved to clipboard"
;;
"$delayChoice4")
exit 0
;;
esac
elif [ "$shotActionCases" = "$subShotChoice2" ]; then
DelayPrompt
case $delayActionsCases in
"$delayChoice1")
sleep 3 && grim "$SHOTDIR/$(date +%s).png" && notify-send "Screenshot saved to $SHOTDIR"
;;
"$delayChoice2")
sleep 5 && grim "$SHOTDIR/$(date +%s).png" && notify-send "Screenshot saved to $SHOTDIR"
;;
"$delayChoice3")
sleep 10 && grim "$SHOTDIR/$(date +%s).png" && notify-send "Screenshot saved to $SHOTDIR"
;;
"$delayChoice4")
exit 0
;;
esac
else
exit 0
fi
}
# Take a screenshot of a selected area
ShotArea() {
ShotActionPrompt
case "$shotActionCases" in
"$subShotChoice1")
sleep 0.5 && grim -g "$(slurp)" - | wl-copy && notify-send "Screenshot saved to clipboard"
;;
"$subShotChoice2")
sleep 0.5 && grim -g "$(slurp)" "$SHOTDIR/$(date +%s).png" && notify-send "Screenshot saved to $SHOTDIR"
;;
*)
exit 0
;;
esac
}
# Take a screenshot of the active window
ShotWindow() {
ShotActionPrompt
local focused=$(hyprctl activewindow -j)
local geom=$(echo "$focused" | jq -r '"\(.at[0]),\(.at[1]) \(.size[0])x\(.size[1])"')
case "$shotActionCases" in
"$subShotChoice1")
sleep 0.5 && grim -g "$geom" - | wl-copy && notify-send "Screenshot saved to clipboard"
;;
"$subShotChoice2")
sleep 0.5 && grim -g "$geom" "$SHOTDIR/$(date +%s).png" && notify-send "Screenshot saved to $SHOTDIR"
;;
*)
exit 0
;;
esac
}
# Record the entire screen
VidScreen() {
for ((i = 3; i >= 1; i--)); do
notify-send -t 1000 "Starting in $i seconds"
sleep 1
done
wf-recorder -f "$VCAPDIR/$(date +%s).mp4"
notify-send "Screenshot" "Recording saved to $VCAPDIR"
}
# Record a specific area of the screen
VidArea() {
wf-recorder -g "$(slurp)" -f "$VCAPDIR/$(date +%s).mp4"
notify-send "Screenshot" "Recording saved to $VCAPDIR"
}
# Record the entire screen with audio
VidScreenAudio() {
local chosenPrettyDevice=$(echo -e "$audioDescriptions" | $RUNNER -i -p "󰕾 Select audio input")
local chosenDevice="${audioMap["$chosenPrettyDevice"]}"
if [ -n "$chosenDevice" ]; then
for ((i = 3; i >= 1; i--)); do
notify-send -t 1000 "Starting in $i seconds"
sleep 1
done
wf-recorder --audio="$chosenDevice" -f "$VCAPDIR/$(date +%s).mp4"
else
exit 1
fi
notify-send "Screenshot" "Recording saved to $VCAPDIR"
}
# Stop the video recording
VidStopRecording() {
if pidof wfrecorder; then
killall -s SIGINT wf-recorder
else
notify-send "You are not recording right now"
exit 1
fi
}
###################
# Check arguments #
###################
# Show help information
if [ "$1" == '--help' ] || [ "$1" = '-h' ]; then
echo "rs_scrot"
echo "USAGE: rs_scrot [OPTION]"
echo -e "(no option)\tshow the screenshot menu"
echo -e "-s, --stop\tstop recording"
echo -e "-h, --help\tthis screen"
exit 1
fi
# stop recording with -s or --stop arguments
if [ "$1" = '--stop' ] || [ "$1" = '-s' ]; then
VidStopRecording
exit 1
fi
####################
# Main Script Flow #
####################
# Check for dependencies
CheckDependencies
# Display main menu and execute selected option
mainCase=$(echo -e "$mainChoices" | $RUNNER -i -p " Screenshot/Screencast Utility")
if [ -z "$mainCase" ]; then
exit 0
fi
case $mainCase in
"$mainChoice1")
shotCases=$(echo -e "$shotChoices" | $RUNNER -i -p " Screenshot Menu") # screenshot menu prompt
case $shotCases in
"$shotChoice1")
ShotScreen
;;
"$shotChoice2")
ShotScreenDelay
;;
"$shotChoice3")
ShotArea
;;
"$shotChoice4")
ShotWindow
;;
"$shotChoice5")
exit 0
;;
esac
;;
"$mainChoice2")
vidCases=$(echo -e "$vidChoices" | $RUNNER -i -p "󰕧 Screencast Menu")
case $vidCases in
"$vidChoice1")
VidScreen
;;
"$vidChoice2")
VidArea
;;
"$vidChoice3")
VidScreenAudio
;;
"$vidChoice4")
VidStopRecording
;;
"$vidChoice5")
exit 0
esac
;;
"$mainChoice3")
exit 0
;;
esac

50
config/rofi/scripts/rs_wall Executable file
View file

@ -0,0 +1,50 @@
#!/usr/bin/env bash
# rs_wall - A simple screenshot menu script for rofi/dmenu/wofi
# Author: Clay Gomera (Drake)
# Dependencies: rofi, hyprpaper
############################
# Configuration Parameters #
############################
walldir="$XDG_PICTURES_DIR/Wallpapers" # wallpapers folder, change it to yours
########################
# Function Definitions #
########################
# Check for missing dependencies
CheckDependencies() {
local missing_deps=()
for dep in hyprpaper rofi; do
if ! command -v "$dep" &> /dev/null; then
missing_deps+=("$dep")
fi
done
if [ ${#missing_deps[@]} -ne 0 ]; then
echo "Missing dependencies: ${missing_deps[*]}"
exit 1
fi
}
####################
# Main Script Flow #
####################
# Check for dependencies
CheckDependencies
cd "$walldir" || exit 1
wallpaper=$(fd -p "$walldir" | $RUNNER -only-match -i -p "󰋩 Wallpaper Selector")
if [ -n "$wallpaper" ]; then
cp "$wallpaper" "$HOME/.config/hypr/wall/wall.png"
cp "$wallpaper" "$HOME/.config/hypr/wall/lock.png"
pidof hyprpaper && pkill hyprpaper
sleep 0.5
hyprpaper &
disown
else
exit 0
fi
exit 0

View file

@ -1,8 +1,12 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# *** Script by Clay Gomera (Drake) *** # rs_wifi - A simple WiFi menu script for rofi/dmenu/wofi
# Description: A simple WiFi management script using dmenu and NetworkManager # Author: Clay Gomera (Drake)
# Dependencies: dmenu, NetworkManager, notify-send # Dependencies: {rofi || dmenu || wofi}, NetworkManager, libnotify (notify-send)
############################
# Configuration Parameters #
############################
# Main menu options # Main menu options
option1=" Turn on WiFi" option1=" Turn on WiFi"
@ -10,14 +14,46 @@ option2=" Turn off WiFi"
option3="󱛅 Disconnect WiFi" option3="󱛅 Disconnect WiFi"
option4="󱛃 Connect WiFi" option4="󱛃 Connect WiFi"
option5="󱛆 Setup captive portal" option5="󱛆 Setup captive portal"
option6="󱎘 Exit" option6=" Exit"
options="$option1\n$option2\n$option3\n$option4\n$option5\n$option6" options="$option1\n$option2\n$option3\n$option4\n$option5\n$option6"
# Retrieve wireless interface information # WiFi interface information
wifi_info=$(nmcli dev | awk '/wifi/ {print $1,$3; exit}') wifi_info=$(nmcli dev | awk '/wifi/ {print $1,$3; exit}')
read -r wlan state <<< "$wifi_info" read -r wlan constate <<< "$wifi_info"
# Function to turn off WiFi ########################
# Function Definitions #
########################
# Check for missing dependencies
check_dependencies() {
local run_launcher_found=false
for launcher in rofi dmenu wofi; do
if command -v "$launcher" &> /dev/null; then
run_launcher_found=true
break
fi
done
if [ "$run_launcher_found" = false ]; then
echo "Missing dependency: one of rofi, dmenu, or wofi is required."
exit 1
fi
local missing_deps=()
for dep in nmcli notify-send; do
if ! command -v "$dep" &> /dev/null; then
missing_deps+=("$dep")
fi
done
if [ ${#missing_deps[@]} -ne 0 ]; then
echo "Missing dependencies: ${missing_deps[*]}"
exit 1
fi
}
# Turn off WiFi
turnoff() { turnoff() {
nmcli radio wifi off nmcli radio wifi off
if [ $? -eq 0 ]; then if [ $? -eq 0 ]; then
@ -27,7 +63,7 @@ turnoff() {
fi fi
} }
# Function to turn on WiFi # Turn on WiFi
turnon() { turnon() {
nmcli radio wifi on nmcli radio wifi on
if [ $? -eq 0 ]; then if [ $? -eq 0 ]; then
@ -37,11 +73,11 @@ turnon() {
fi fi
} }
# Function to disconnect WiFi # Disconnect from WiFi
disconnect() { disconnect() {
if [ "$state" = "disconnected" ]; then if [ "$constate" = "disconnected" ]; then
notify-send "WiFi is already disconnected" notify-send "WiFi is already disconnected"
elif [ "$state" = "connected" ]; then elif [ "$constate" = "connected" ]; then
nmcli device disconnect "$wlan" nmcli device disconnect "$wlan"
if [ $? -eq 0 ]; then if [ $? -eq 0 ]; then
notify-send "WiFi has been disconnected" notify-send "WiFi has been disconnected"
@ -53,11 +89,11 @@ disconnect() {
fi fi
} }
# Function to select and connect to a WiFi network # Connect to a WiFi network
connect() { connect() {
notify-send -t 5000 "Scanning networks..." notify-send -t 5000 "Scanning networks..."
nmcli dev wifi rescan nmcli dev wifi rescan
local wifinet=$(nmcli -f BSSID,SSID,BARS,SECURITY dev wifi list | sed -n '1!p' | dmenu -i -l 10 -p " Select a Wifi Network") wifinet=$(nmcli -f BSSID,SSID,BARS dev wifi list | sed -n '1!p' | $RUNNER -i -p " Select a Wifi Network  ")
if [ -z "$wifinet" ]; then if [ -z "$wifinet" ]; then
exit 0 exit 0
fi fi
@ -65,21 +101,21 @@ connect() {
ssid=$(echo "$wifinet" | awk '{print $2}') ssid=$(echo "$wifinet" | awk '{print $2}')
} }
# Function to prompt for WiFi password # Prompt for WiFi password
password() { password() {
if nmcli connection show | awk -v ssid="$ssid" '$1 == ssid {found=1} END {exit !found}'; then if nmcli connection show | awk -v ssid="$ssid" '$1 == ssid {found=1} END {exit !found}'; then
pass="" pass=""
elif nmcli -f BSSID,SECURITY dev wifi list | grep -w "$bssid" | awk '{print $2}' | grep -q -- "--"; then elif nmcli -f BSSID,SECURITY dev wifi list | grep -w "$bssid" | awk '{print $2}' | grep -q -- "--"; then
pass="" pass=""
else else
pass=$(dmenu -l 1 -P -p "Enter Password ") pass=$($RUNNER -password -p "Enter Password   ")
if [ -z "$pass" ]; then if [ -z "$pass" ]; then
exit 0 exit 0
fi fi
fi fi
} }
# Function to connect to the selected WiFi network # Execute WiFi connection
action() { action() {
if [ -n "$pass" ]; then if [ -n "$pass" ]; then
nmcli dev wifi connect "$bssid" password "$pass" nmcli dev wifi connect "$bssid" password "$pass"
@ -93,13 +129,20 @@ action() {
fi fi
} }
# Show menu and handle user choice ####################
case=$(echo -e "$options" | dmenu -l 6 -i -p " WiFi Settings") # Main Script Flow #
if [ -z "$case" ]; then ####################
# Check for dependencies
check_dependencies
# Display main menu and execute selected option
cases=$(echo -e "$options" | $RUNNER -i -p " Wifi Settings  ")
if [ -z "$cases" ]; then
exit 0 exit 0
fi fi
case "$case" in case "$cases" in
"$option1") "$option1")
turnon turnon
;; ;;

View file

@ -1,3 +0,0 @@
#!/usr/bin/env bash
exec gnome-keyring-daemon --start --components=secrets

View file

@ -1,20 +0,0 @@
#!/usr/bin/env bash
#
# Start ssh-agent from runit
#
# Author: Dave Eddy <dave@daveeddy.com>
# Date: August 29, 2018
# License: MIT
file=~/.ssh/ssh-agent-env
exec > "$file"
echo "# started $(date)"
# For some reason, this line doesn't get emitted by ssh-agent when it is run
# with -d or -D. Since we are starting the program with exec we already know
# the pid ahead of time though so we can create this line manually
echo "SSH_AGENT_PID=$$; export SSH_AGENT_PID"
exec ssh-agent -D

35
config/starship.toml Normal file
View file

@ -0,0 +1,35 @@
## ____ __
## / __ \_________ _/ /_____
## / / / / ___/ __ `/ //_/ _ \
## / /_/ / / / /_/ / ,< / __/ Clay Gomera (Drake)
## /_____/_/ \__,_/_/|_|\___/ My custom starship prompt config
# Get editor completions based on the config schema
"$schema" = 'https://starship.rs/config-schema.json'
add_newline = false
[line_break]
disabled = true
[character]
error_symbol = "[](bold red) "
success_symbol = "[](bold green)"
[directory]
truncation_length = 5
home_symbol = " "
format = "[$path](bold italic yellow) "
[hostname]
ssh_only = false
disabled = false
style = "underline italic purple"
[package]
disabled = true
[username]
show_always = true
style_user = "bold red"
format = "[$user]($style)[ in ](white)"

View file

@ -1,29 +0,0 @@
" gruvbox color scheme approximation for vifm
" Reset all styles first
highlight clear
highlight Border cterm=none ctermfg=235 ctermbg=default
highlight TopLine cterm=none ctermfg=214 ctermbg=235
highlight TopLineSel cterm=bold ctermfg=214 ctermbg=237
highlight Win cterm=none ctermfg=223 ctermbg=none
highlight OtherWin cterm=none ctermfg=223 ctermbg=none
highlight Directory cterm=bold ctermfg=109 ctermbg=default
highlight CurrLine cterm=bold,inverse ctermfg=default ctermbg=default
highlight OtherLine cterm=bold ctermfg=default ctermbg=235
highlight Selected cterm=none ctermfg=223 ctermbg=237
highlight JobLine cterm=bold ctermfg=116 ctermbg=238
highlight StatusLine cterm=bold ctermfg=144 ctermbg=236
highlight ErrorMsg cterm=bold ctermfg=167 ctermbg=default
highlight WildMenu cterm=bold ctermfg=235 ctermbg=144
highlight CmdLine cterm=none ctermfg=223 ctermbg=default
highlight Executable cterm=bold ctermfg=142 ctermbg=default
highlight Link cterm=none ctermfg=132 ctermbg=default
highlight BrokenLink cterm=bold ctermfg=167 ctermbg=default
highlight Device cterm=none,standout ctermfg=214 ctermbg=default
highlight Fifo cterm=none ctermfg=172 ctermbg=default
highlight Socket cterm=bold ctermfg=223 ctermbg=default

View file

@ -1,56 +0,0 @@
#!/bin/sh
PCACHE="$HOME/.cache/vifm/thumbnail.$(stat --printf '%n\0%i\0%F\0%s\0%W\0%Y' -- "$(readlink -f "$PWD/$6")" | sha256sum)"
export PCACHE="${PCACHE%% *}"
pclear() {
printf '{"action": "remove", "identifier": "vifm-preview"}\n' > "$FIFO_UEBERZUG"
}
image() {
printf '{"action": "add", "identifier": "vifm-preview", "x": "%s", "y": "%s", "width": "%s", "height": "%s", "scaler": "contain", "path": "%s"}\n' "$2" "$3" "$4" "$5" "$6" > "$FIFO_UEBERZUG"
}
main() {
case "$1" in
"clear")
pclear "$@"
;;
"draw")
FILE="$PWD/$6"
image "$1" "$2" "$3" "$4" "$5" "$FILE"
;;
"video")
[ ! -f "${PCACHE}.jpg" ] && \
ffmpegthumbnailer -i "$6" -o "${PCACHE}.jpg" -s 0 -q 5
image "$1" "$2" "$3" "$4" "$5" "${PCACHE}.jpg"
;;
"epub")
[ ! -f "$PCACHE" ] && \
epub-thumbnailer "$6" "$PCACHE" 1024
image "$1" "$2" "$3" "$4" "$5" "$PCACHE"
;;
"pdf")
[ ! -f "${PCACHE}.jpg" ] && \
pdftoppm -jpeg -f 1 -singlefile "$6" "$PCACHE"
image "$1" "$2" "$3" "$4" "$5" "${PCACHE}.jpg"
;;
"djvu")
[ ! -f "${PCACHE}.jpg" ] && \
ddjvu -format=tiff -quality=90 -page=1 "$6" "$PCACHE.jpg"
image "$1" "$2" "$3" "$4" "$5" "${PCACHE}.jpg"
;;
"audio")
[ ! -f "${PCACHE}.jpg" ] && \
ffmpeg -hide_banner -i "$6" "${PCACHE}.jpg" -y >/dev/null
image "$1" "$2" "$3" "$4" "$5" "${PCACHE}.jpg"
;;
"font")
[ ! -f "${PCACHE}.jpg" ] && \
fontpreview -i "$6" -o "${PCACHE}.jpg"
image "$1" "$2" "$3" "$4" "$5" "${PCACHE}.jpg"
;;
*)
esac
}
main "$@"

View file

@ -1,21 +0,0 @@
#!/bin/sh
if [ -z "$(command -v vifm)" ]; then
printf "vifm isn't installed on your system!\n"
exit 1
elif [ -z "$(command -v ueberzug)" ]; then
exec vifm "$@"
else
cleanup() {
exec 3>&-
rm "$FIFO_UEBERZUG"
}
[ ! -d "$HOME/.cache/vifm" ] && mkdir -p "$HOME/.cache/vifm"
export FIFO_UEBERZUG="$HOME/.cache/vifm/ueberzug-${$}"
mkfifo "$FIFO_UEBERZUG"
ueberzug layer -s <"$FIFO_UEBERZUG" -p json &
exec 3>"$FIFO_UEBERZUG"
trap cleanup EXIT
vifm "$@" 3>&-
vifmimg clear
fi

File diff suppressed because it is too large Load diff

View file

@ -1,510 +0,0 @@
" ____ __
" / __ \_________ _/ /_____
" / / / / ___/ __ `/ //_/ _ \
" / /_/ / / / /_/ / ,< / __/ Clay Gomera (Drake)
" /_____/_/ \__,_/_/|_|\___/ My custom vifm config
" vim: filetype=vifm :
" My config file for the vifm terminal file manager.
" ------------------------------------------------------------------------------
" This is the actual command used to start vi. The default is vim.
" If you would like to use emacs or emacsclient, you can use them.
" Since emacs is a GUI app and not a terminal app like vim, append the command
" with an ampersand (&).
set vicmd=~/.local/bin/lvim
" This makes vifm perform file operations on its own instead of relying on
" standard utilities like `cp`. While using `cp` and alike is a more universal
" solution, it's also much slower when processing large amounts of files and
" doesn't support progress measuring.
set syscalls
" Trash Directory
" The default is to move files that are deleted with dd or :d to
" the trash directory. If you change this you will not be able to move
" files by deleting them and then using p to put the file in the new location.
" I recommend not changing this until you are familiar with vifm.
" This probably shouldn't be an option.
set trash
" This is how many directories to store in the directory history.
set history=100
" Automatically resolve symbolic links on l or Enter.
set nofollowlinks
" With this option turned on you can run partially entered commands with
" unambiguous beginning using :! (e.g. :!Te instead of :!Terminal or :!Te<tab>).
" set fastrun
" Natural sort of (version) numbers within text.
set sortnumbers
" Maximum number of changes that can be undone.
set undolevels=100
" If you installed the vim.txt help file set vimhelp.
" If would rather use a plain text help file set novimhelp.
set novimhelp
" If you would like to run an executable file when you
" press return on the file name set this.
set norunexec
" Selected color scheme
" The following line will cause issues if using vifm.vim with regular vim.
" Either use neovim or comment out the following line.
colorscheme gruvbox
" Format for displaying time in file list. For example:
" TIME_STAMP_FORMAT=%m/%d-%H:%M
" See man date or man strftime for details.
set timefmt=%m/%d\ %H:%M
" Show list of matches on tab completion in command-line mode
set wildmenu
" Display completions in a form of popup with descriptions of the matches
set wildstyle=popup
" Display suggestions in normal, visual and view modes for keys, marks and
" registers (at most 5 files). In other view, when available.
set suggestoptions=normal,visual,view,otherpane,keys,marks,registers
" Ignore case in search patterns unless it contains at least one uppercase
" letter
set ignorecase
set smartcase
" Don't highlight search results automatically
set nohlsearch
" Use increment searching (search while typing)
set incsearch
" Try to leave some space from cursor to upper/lower border in lists
set scrolloff=4
" Don't do too many requests to slow file systems
if !has('win')
set slowfs=curlftpfs
endif
" Set custom status line look
set statusline=" Hint: %z%= %A %10u:%-7g %15s %20d "
" Set line numbers to show
" ------------------------------------------------------------------------------
" :mark mark /full/directory/path [filename]
mark h ~/
" ------------------------------------------------------------------------------
" :com[mand][!] command_name action
" The following macros can be used in a command
" %a is replaced with the user arguments.
" %c the current file under the cursor.
" %C the current file under the cursor in the other directory.
" %f the current selected file, or files.
" %F the current selected file, or files in the other directory.
" %b same as %f %F.
" %d the current directory name.
" %D the other window directory name.
" %m run the command in a menu window
command! df df -h %m 2> /dev/null
command! diff vim -d %f %F
command! zip zip -r %f.zip %f
command! run !! ./%f
command! make !!make %a
command! mkcd :mkdir %a | cd %a
command! vgrep vim "+grep %a"
command! reload :write | restart
" ------------------------------------------------------------------------------
" The file type is for the default programs to be used with
" a file extension.
" :filetype pattern1,pattern2 defaultprogram,program2
" :fileviewer pattern1,pattern2 consoleviewer
" The other programs for the file type can be accessed with the :file command
" The command macros %f, %F, %d, %F may be used in the commands.
" The %a macro is ignored. To use a % you must put %%.
" For automated FUSE mounts, you must register an extension with :file[x]type
" in one of following formats:
"
" :filetype extensions FUSE_MOUNT|some_mount_command using %SOURCE_FILE and %DESTINATION_DIR variables
" %SOURCE_FILE and %DESTINATION_DIR are filled in by vifm at runtime.
" A sample line might look like this:
" :filetype *.zip,*.jar,*.war,*.ear FUSE_MOUNT|fuse-zip %SOURCE_FILE %DESTINATION_DIR
"
" :filetype extensions FUSE_MOUNT2|some_mount_command using %PARAM and %DESTINATION_DIR variables
" %PARAM and %DESTINATION_DIR are filled in by vifm at runtime.
" A sample line might look like this:
" :filetype *.ssh FUSE_MOUNT2|sshfs %PARAM %DESTINATION_DIR
" %PARAM value is filled from the first line of file (whole line).
" Example first line for SshMount filetype: root@127.0.0.1:/
"
" You can also add %CLEAR if you want to clear screen before running FUSE
" program.
" Pdf and cbz
filextype *.cbz,*.pdf zathura %c %i &, apvlv %c, xpdf %c
fileviewer *.pdf
\ vifmimg pdf %px %py %pw %ph %c
\ %pc
\ vifmimg clear
" PostScript
filextype *.ps,*.eps,*.ps.gz
\ {View in zathura}
\ zathura %f,
\ {View in gv}
\ gv %c %i &,
" Djvu
filextype *.djvu
\ {View in zathura}
\ zathura %f,
\ {View in apvlv}
\ apvlv %f,
fileviewer *.djvu
\ vifmimg djvu %px %py %pw %ph %c
\ %pc
\ vifmimg clear
fileviewer *.epub
\ vifmimg epub %px %py %pw %ph %c
\ %pc
\ vifmimg clear
" Audio
filetype *.wav,*.mp3,*.flac,*.m4a,*.wma,*.ape,*.ac3,*.og[agx],*.spx,*.opus
\ {Play using mpv}
\ mpv %f,
fileviewer *.wav,*.mp3,*.flac,*.m4a,*.wma,*.ape,*.ac3,*.og[agx],*.spx,*.opus
\ vifmimg audio %px %py %pw %ph %c
\ %pc
\ vifmimg clear
" Video
filextype *.avi,*.mp4,*.wmv,*.dat,*.3gp,*.ogv,*.mkv,*.mpg,*.mpeg,*.vob,
\*.fl[icv],*.m2v,*.mov,*.webm,*.ts,*.mts,*.m4v,*.r[am],*.qt,*.divx,
\*.as[fx]
\ {View using mplayer}
\ mpv %f,
fileviewer *.avi,*.mp4,*.wmv,*.dat,*.3gp,*.ogv,*.mkv,*.mpg,*.mpeg,*.vob,
\*.fl[icv],*.m2v,*.mov,*.webm,*.ts,*.mts,*.m4v,*.r[am],*.qt,*.divx,
\*.as[fx]
\ vifmimg video %px %py %pw %ph %c
\ %pc
\ vifmimg clear
" Web
filextype *.html,*.htm
\ {Open with emacs}
\ emacsclient -c %c &,
\ {Open with vim}
\ vim %c &,
\ {Open with dwb}
\ dwb %f %i &,
\ {Open with firefox}
\ firefox %f &,
\ {Open with uzbl}
\ uzbl-browser %f %i &,
filetype *.html,*.htm links, lynx
" Object
filetype *.o nm %f | less
" Man page
filetype *.[1-8] man ./%c
fileviewer *.[1-8] man ./%c | col -b
" Images
filextype *.bmp,*.jpg,*.jpeg,*.png,*.gif,*.xpm,*.webp
\ {View in imv}
\ nsxiv %f &,
fileviewer *.bmp,*.jpg,*.jpeg,*.png,*.gif,*.xpm,*.webp
\ vifmimg draw %px %py %pw %ph %c
\ %pc
\ vifmimg clear
" Fonts
fileviewer *.ttf, *.otf
\ vifmimg font %px %py %pw %ph %c
\ %pc
\ vifmimg clear
" OpenRaster
filextype *.ora
\ {Edit in MyPaint}
\ mypaint %f,
" Mindmap
filextype *.vym
\ {Open with VYM}
\ vym %f &,
" MD5
filetype *.md5
\ {Check MD5 hash sum}
\ md5sum -c %f %S,
" SHA1
filetype *.sha1
\ {Check SHA1 hash sum}
\ sha1sum -c %f %S,
" SHA256
filetype *.sha256
\ {Check SHA256 hash sum}
\ sha256sum -c %f %S,
" SHA512
filetype *.sha512
\ {Check SHA512 hash sum}
\ sha512sum -c %f %S,
" GPG signature
filetype *.asc
\ {Check signature}
\ !!gpg --verify %c,
" Torrent
filetype *.torrent flatpak run org.qbittorrent.qBittorrent %f &
fileviewer *.torrent dumptorrent -v %c
" FuseZipMount
filetype *.zip,*.jar,*.war,*.ear,*.oxt,*.apkg
\ {Mount with fuse-zip}
\ FUSE_MOUNT|fuse-zip %SOURCE_FILE %DESTINATION_DIR,
\ {View contents}
\ zip -sf %c | less,
\ {Extract here}
\ tar -xf %c,
fileviewer *.zip,*.jar,*.war,*.ear,*.oxt zip -sf %c
" ArchiveMount
filetype *.tar,*.tar.bz2,*.tbz2,*.tgz,*.tar.gz,*.tar.xz,*.txz
\ {Mount with archivemount}
\ FUSE_MOUNT|archivemount %SOURCE_FILE %DESTINATION_DIR,
fileviewer *.tgz,*.tar.gz tar -tzf %c
fileviewer *.tar.bz2,*.tbz2 tar -tjf %c
fileviewer *.tar.txz,*.txz xz --list %c
fileviewer *.tar tar -tf %c
" Rar2FsMount and rar archives
filetype *.rar
\ {Mount with rar2fs}
\ FUSE_MOUNT|rar2fs %SOURCE_FILE %DESTINATION_DIR,
fileviewer *.rar unrar v %c
" IsoMount
filetype *.iso
\ {Mount with fuseiso}
\ FUSE_MOUNT|fuseiso %SOURCE_FILE %DESTINATION_DIR,
" SshMount
filetype *.ssh
\ {Mount with sshfs}
\ FUSE_MOUNT2|sshfs %PARAM %DESTINATION_DIR %FOREGROUND,
" FtpMount
filetype *.ftp
\ {Mount with curlftpfs}
\ FUSE_MOUNT2|curlftpfs -o ftp_port=-,,disable_eprt %PARAM %DESTINATION_DIR %FOREGROUND,
" Fuse7z and 7z archives
filetype *.7z
\ {Mount with fuse-7z}
\ FUSE_MOUNT|fuse-7z %SOURCE_FILE %DESTINATION_DIR,
fileviewer *.7z 7z l %c
" Office files
filextype *.odt,*.doc,*.docx,*.xls,*.xlsx,*.odp,*.pptx flatpak run org.libreoffice.LibreOffice %f &
fileviewer *.doc catdoc %c
fileviewer *.docx docx2txt.pl %f -
" TuDu files
filetype *.tudu tudu -f %c
" Qt projects
filextype *.pro qtcreator %f &
" Directories
filextype */
\ {View in thunar}
\ Thunar %f &,
" Syntax highlighting in preview
"
" Explicitly set highlight type for some extensions
"
" 256-color terminal
" fileviewer *.[ch],*.[ch]pp highlight -O xterm256 -s dante --syntax c %c
" fileviewer Makefile,Makefile.* highlight -O xterm256 -s dante --syntax make %c
"
" 16-color terminal
" fileviewer *.c,*.h highlight -O ansi -s dante %c
"
" Or leave it for automatic detection
"
" fileviewer *[^/] pygmentize -O style=monokai -f console256 -g
" Displaying pictures in terminal
"
" fileviewer *.jpg,*.png shellpic %c
" Open all other files with default system programs (you can also remove all
" :file[x]type commands above to ensure they don't interfere with system-wide
" settings). By default all unknown files are opened with 'vi[x]cmd'
" uncommenting one of lines below will result in ignoring 'vi[x]cmd' option
" for unknown file types.
" For *nix:
" filetype * xdg-open
" For OS X:
" filetype * open
" For Windows:
" filetype * start, explorer
" GETTING ICONS TO DISPLAY IN VIFM
" You need the next 14 lines!
" file types
set classify=' :dir:/, :exe:, :reg:, :link:'
" various file names
set classify+=' ::../::, ::*.sh::, ::*.[hc]pp::, ::*.[hc]::, ::/^copying|license$/::, ::.git/,,*.git/::, ::*.epub,,*.fb2,,*.djvu::, ::*.pdf::, ::*.htm,,*.html,,**.[sx]html,,*.xml::'
" archives
set classify+=' ::*.7z,,*.ace,,*.arj,,*.bz2,,*.cpio,,*.deb,,*.dz,,*.gz,,*.jar,,*.lzh,,*.lzma,,*.rar,,*.rpm,,*.rz,,*.tar,,*.taz,,*.tb2,,*.tbz,,*.tbz2,,*.tgz,,*.tlz,,*.trz,,*.txz,,*.tz,,*.tz2,,*.xz,,*.z,,*.zip,,*.zoo::'
" images
set classify+=' ::*.bmp,,*.gif,,*.jpeg,,*.jpg,,*.ico,,*.png,,*.ppm,,*.svg,,*.svgz,,*.tga,,*.tif,,*.tiff,,*.xbm,,*.xcf,,*.xpm,,*.xspf,,*.xwd::'
" audio
set classify+=' ::*.aac,,*.anx,,*.asf,,*.au,,*.axa,,*.flac,,*.m2a,,*.m4a,,*.mid,,*.midi,,*.mp3,,*.mpc,,*.oga,,*.ogg,,*.ogx,,*.ra,,*.ram,,*.rm,,*.spx,,*.wav,,*.wma,,*.ac3::'
" media
set classify+=' ::*.avi,,*.ts,,*.axv,,*.divx,,*.m2v,,*.m4p,,*.m4v,,.mka,,*.mkv,,*.mov,,*.mp4,,*.flv,,*.mp4v,,*.mpeg,,*.mpg,,*.nuv,,*.ogv,,*.pbm,,*.pgm,,*.qt,,*.vob,,*.wmv,,*.xvid::'
" office files
set classify+=' ::*.doc,,*.docx::, ::*.xls,,*.xls[mx]::, ::*.pptx,,*.ppt::'
" ------------------------------------------------------------------------------
" What should be saved automatically between vifm runs
" Like in previous versions of vifm
" set vifminfo=options,filetypes,commands,bookmarks,dhistory,state,cs
" Like in vi
set vifminfo=dhistory,savedirs,chistory,state,tui,shistory,
\phistory,fhistory,dirstack,registers,bookmarks,bmarks
" ------------------------------------------------------------------------------
" Examples of configuring both panels
" Customize view columns a bit (enable ellipsis for truncated file names)
"
" set viewcolumns=-{name}..,6{}.
" Filter-out build and temporary files
"
" filter! /^.*\.(lo|o|d|class|py[co])$|.*~$/
" ------------------------------------------------------------------------------
" Sample mappings
"Open all images in current directory in sxiv thumbnail mode
nnoremap sx :!sxiv -t %d & <cr>
"Open selected images in gimp
nnoremap gp :!gimp %f & <cr>
" Start shell in current directory
nnoremap s :shell<cr>
" Display sorting dialog
nnoremap S :sort<cr>
" Toggle visibility of preview window
nnoremap w :view<cr>
vnoremap w :view<cr>gv
" Open file in the background using its default program
nnoremap gb :file &<cr>l
" Yank current directory path into the clipboard
nnoremap yd :!echo %d | xclip %i<cr>
" Yank current file path into the clipboard
nnoremap yf :!echo %c:p | xclip %i<cr>
" Mappings for faster renaming
nnoremap I cw<c-a>
nnoremap cc cw<c-u>
nnoremap A cw
" Open console in current directory
nnoremap ,t :!xterm &<cr>
" Open editor to edit vifmrc and apply settings after returning to vifm
nnoremap ,c :write | edit $MYVIFMRC | restart<cr>
" Open gvim to edit vifmrc
nnoremap ,C :!gvim --remote-tab-silent $MYVIFMRC &<cr>
" Toggle wrap setting on ,w key
nnoremap ,w :set wrap!<cr>
" Example of standard two-panel file managers mappings
nnoremap <f3> :!less %f<cr>
nnoremap <f4> :edit<cr>
nnoremap <f5> :copy<cr>
nnoremap <f6> :move<cr>
nnoremap <f7> :mkdir<space>
nnoremap <f8> :delete<cr>
" ------------------------------------------------------------------------------
" Various customization examples
" Use ag (the silver searcher) instead of grep
"
" set grepprg='ag --line-numbers %i %a %s'
" Add additional place to look for executables
"
" let $PATH = $HOME.'/bin/fuse:'.$PATH
" Block particular shortcut
"
" nnoremap <left> <nop>
" Export IPC name of current instance as environment variable and use it to
" communicate with the instance later.
"
" It can be used in some shell script that gets run from inside vifm, for
" example, like this:
" vifm --server-name "$VIFM_SERVER_NAME" --remote +"cd '$PWD'"
"
" let $VIFM_SERVER_NAME = v:servername

260
config/waybar/config Normal file
View file

@ -0,0 +1,260 @@
{
"position": "top",
"height": 25,
"layer": "top",
// Modules order
"modules-left": [
"hyprland/workspaces",
"hyprland/window"
],
"modules-right": [
"tray",
"custom/arrow1",
"clock",
"custom/arrow2",
"cpu",
"memory",
"custom/arrow3",
"hyprland/language",
"custom/arrow4",
"idle_inhibitor",
"power-profiles-daemon",
"battery",
"battery#bat2",
"custom/arrow5",
"pulseaudio",
"custom/arrow6",
"backlight",
"custom/arrow7",
"network",
"bluetooth"
],
// Modules
"hyprland/workspaces": {
"on-click": "activate",
"sort-by-number": true,
"on-scroll-up": "hyprctl dispatch workspace e+1",
"on-scroll-down": "hyprctl dispatch workspace e-1",
"format": "{icon}",
"format-icons": {
"1": "\udb80\udd69 cde",
"2": "\udb82\uddad tbx",
"3": "\udb80\ude56 fle",
"4": "\udb81\udd9f web",
"5": "\udb80\udf6a cht",
"6": "\udb83\udcb8 aud",
"7": "\udb82\udfdc vid",
"8": "\udb82\udd76 img",
"9": "\udb82\uddee doc",
"10": "\udb83\ude3f gme",
}
},
"hyprland/window": {
"format": "{title}",
"icon": true,
"icon-size": 16,
"separate-outputs": true
},
"tray": {
"icon-size": 16,
"spacing": 10
},
"cpu": {
"interval": 1,
"format": "\uf4bc {usage}%",
"on-click": "kitty --class btop btop"
},
"memory": {
"interval": 1,
"format": "\uefc5 {percentage}%",
"on-click": "kitty --class btop btop"
},
"hyprland/language": {
"format": "\udb80\udf0c {}",
"format-en": "US",
"format-es": "ES",
"on-click": "hyprctl switchxkblayout at-translated-set-2-keyboard next",
},
"pulseaudio": {
"scroll-step": 1, // %, can be a float
"tooltip-format": "{volume}% - {desc}",
"format": "{icon} {format_source}",
"format-bluetooth": "{icon}\udb80\udcaf {format_source}",
"format-bluetooth-muted": "\udb81\udd81 {icon}\udb80\udcaf {format_source}",
"format-muted": "\udb81\udd81 {format_source}",
"format-source": "\udb80\udf6c",
"format-source-muted": "\udb80\udf6d",
"format-icons": {
"headphone": "\udb80\udecb",
"hands-free": "\udb86\udc4f",
"headset": "\udb80\udece",
"phone": "\udb80\udff2",
"portable": "\udb80\udff2",
"car": "\udb80\udd0b",
"default": [
"\udb81\udd7f",
"\udb81\udd80",
"\udb81\udd7e"
]
},
"on-click": "kitty --class audiomixer pulsemixer"
},
"backlight": {
"format": "{icon}",
"format-icons": [
"\udb86\ude4e",
"\udb86\ude4f",
"\udb86\ude50",
"\udb86\ude51",
"\udb86\ude52",
"\udb86\ude53",
"\udb86\ude54",
"\udb86\ude55",
"\udb81\udee8"
],
"tooltip-format": "{percent}%"
},
"idle_inhibitor": {
"format": "{icon}",
"format-icons": {
"activated": "\uea71",
"deactivated": "\ueabc"
}
},
"power-profiles-daemon": {
"format": "{icon}",
"tooltip-format": "Power profile: {profile}",
"tooltip": true,
"format-icons": {
"default": "󰾅",
"performance": "󰓅",
"balanced": "󰾅",
"power-saver": "󰾆"
}
},
"battery": {
"bat": "BAT0",
"states": {
"warning": 30,
"critical": 15
},
"format": "{icon}",
"format-charging": "{icon} \udb81\udea5",
"format-plugged": "{icon} \udb81\udea5",
"format-critical": "{icon} \udb84\ude38",
"format-warning": "{icon} \udb84\ude38",
"format-icons": [
"\udb80\udc7a",
"\udb80\udc7c",
"\udb80\udc7e",
"\udb80\udc80",
"\udb80\udc79"
],
"tooltip-format": "{capacity}% - {timeTo}",
"on-click": "$HOME/.config/rofi/scripts/rs_power"
},
"battery#bat2": {
"bat": "BAT1",
"states": {
"warning": 30,
"critical": 15
},
"format": "{icon}",
"format-charging": "{icon} \udb81\udea5",
"format-plugged": "{icon} \udb81\udea5",
"format-critical": "{icon} \udb84\ude38",
"format-warning": "{icon} \udb84\ude38",
"format-icons": [
"\udb80\udc7a",
"\udb80\udc7c",
"\udb80\udc7e",
"\udb80\udc80",
"\udb80\udc79"
],
"tooltip-format": "{capacity}% - {timeTo}",
"on-click": "$HOME/.config/rofi/scripts/rs_power"
},
"network": {
"format-wifi": "\udb81\udda9",
"format-ethernet": "\udb80\ude00",
"format-disconnected": "\udb80\udd5b",
"tooltip-format": "({essid} - {signalStrength}%) - {ifname}: {ipaddr}/{cidr}",
"on-click": "$HOME/.config/rofi/scripts/rs_wifi"
},
"bluetooth": {
"format": "\udb80\udcb2",
"format-on": "\udb80\udcaf",
"fotmat-off": "\udb80\udcb2",
"fotmat-disabled": "\udb80\udcb2",
"format-connected": "\udb80\udcb1",
"tooltip-format": "{controller_alias}\t{controller_address} ON",
"tooltip-format-on": "{controller_alias}\t{controller_address} ON",
"tooltip-format-off": "{controller_alias}\t{controller_address} OFF",
"tooltip-format-disabled": "{controller_alias}\t{controller_address} OFF",
"tooltip-format-connected": "{controller_alias}\t{controller_address} ON\n\n{num_connections} connected\n\n{device_enumerate}",
"tooltip-format-enumerate-connected": "{device_alias}\t{device_address}",
"tooltip-format-enumerate-connected-battery": "{device_alias}\t{device_address}\t{device_battery_percentage}%",
"on-click": "$HOME/.config/rofi/scripts/rs_blue",
"on-click-right": "bluetoothctl disconnect",
"on-click-middle": "bluetoothctl power off"
},
"clock": {
"tooltip-format": "<big>{:%Y %B}</big>\n<tt><small>{calendar}</small></tt>",
"format": "\udb82\udd54 {:%H:%M}",
"format-alt": "\udb80\udcf5 {:%Y-%m-%d}"
},
"custom/arrow1": {
"format": "",
"tooltip": false
},
"custom/arrow2": {
"format": "",
"tooltip": false
},
"custom/arrow3": {
"format": "",
"tooltip": false
},
"custom/arrow4": {
"format": "",
"tooltip": false
},
"custom/arrow5": {
"format": "",
"tooltip": false
},
"custom/arrow6": {
"format": "",
"tooltip": false
},
"custom/arrow7": {
"format": "",
"tooltip": false
},
}

232
config/waybar/style.css Normal file
View file

@ -0,0 +1,232 @@
/* Styles */
/* Colors (catppuccin-mocha) */
@define-color white #cdd6f4;
@define-color black #1e1e2e;
@define-color red #e78284;
@define-color green #a6d189;
@define-color yellow #e5c890;
@define-color orange #ef9f76;
@define-color blue #8caaee;
@define-color purple #ca9ee6;
@define-color aqua #81c8be;
@define-color gray #313244;
/* Brigher variants */
@define-color brred #f38ba8;
@define-color brgreen #a6e3a1;
@define-color brpurple #cba6f7;
@define-color brorange #fab387;
@define-color brgray #45475a;
@define-color brblue #89b4fa;
@define-color braqua #94e2d5;
@define-color bryellow #f9e2af;
/* Color definitions for modules */
@define-color critical @brred;
@define-color unfocused @braqua;
@define-color focused @brblue;
@define-color inactive @gray;
@define-color clock @purple;
@define-color monitor @blue;
@define-color language @aqua;
@define-color idle @green;
@define-color powerprofile @green;
@define-color battery @green;
@define-color volume @yellow;
@define-color backlight @orange;
@define-color network @red;
@define-color wbackground rgba(30, 30, 46, 0.90);
/* Keyframes */
@keyframes blink {
to {
color: @critical;
}
}
/* Reset all styles */
* {
border: none;
border-radius: 0;
min-height: 0;
padding: 0;
box-shadow: none;
text-shadow: none;
}
button {
box-shadow: inset 0 -3px transparent;
border: none;
border-radius: 0;
}
/* https://github.com/Alexays/Waybar/wiki/FAQ#the-workspace-buttons-have-a-strange-hover-effect */
button:hover {
background: inherit;
}
/* The whole bar */
window#waybar {
background-color: @wbackground;
font-family:
Symbols Nerd Font Mono,
Mononoki Nerd Font;
font-size: 14px;
}
/* Workspaces */
#workspaces button {
border-top: 2px solid @inactive;
padding: 0 8px;
color: @white;
}
#workspaces button.active {
background-color: @inactive;
border-top: 2px solid @focused;
color: @focused;
transition-property: color;
transition-duration: 0.5s;
}
#workspaces button:hover {
color: @unfocused;
transition-property: color;
transition-duration: 0.5s;
}
#workspaces button.urgent {
background-color: @inactive;
animation-name: blink;
animation-duration: 0.5s;
animation-timing-function: linear;
animation-iteration-count: 3;
animation-direction: alternate;
}
#window {
color: @white;
padding: 0 10px;
}
/* =====================================
Individual Module Styles
===================================== */
#cpu,
#memory,
#language,
#idle_inhibitor,
#power-profiles-daemon,
#battery,
#pulseaudio,
#backlight,
#network,
#bluetooth,
#clock {
color: @wbackground;
padding-left: 4px;
}
#clock {
background-color: @clock;
}
#cpu {
background-color: @monitor;
}
#memory {
background-color: @monitor;
}
#language {
background-color: @language;
}
#idle_inhibitor {
background-color: @battery;
}
#power-profiles-daemon {
background-color: @powerprofile;
}
#battery,
#battery.charging,
#battery.plugged {
background-color: @battery;
}
#battery.critical:not(.charging) {
color: @white;
animation: blink 0.5s linear infinite alternate;
}
#network,
#network.disconnected {
background-color: @network;
}
#bluetooth,
#bluetooth.disconnected {
background-color: @network;
padding-right: 10px;
}
#pulseaudio,
#pulseaudio.muted {
background-color: @volume;
}
#backlight {
background-color: @backlight;
}
/* All Modeline arrows */
#custom-arrow1,
#custom-arrow2,
#custom-arrow3,
#custom-arrow4,
#custom-arrow5,
#custom-arrow6,
#custom-arrow7 {
font-size: 18pt;
}
/* Individual Modeline arrows */
#custom-arrow1 {
background: transparent;
color: @clock;
}
#custom-arrow2 {
background: @clock;
color: @monitor;
}
#custom-arrow3 {
background: @monitor;
color: @language;
}
#custom-arrow4 {
background: @language;
color: @battery;
}
#custom-arrow5 {
background: @battery;
color: @volume;
}
#custom-arrow6 {
background: @volume;
color: @backlight;
}
#custom-arrow7 {
background: @backlight;
color: @network;
}

View file

@ -1,141 +0,0 @@
###
### Sample Wget initialization file .wgetrc
###
## You can use this file to change the default behaviour of wget or to
## avoid having to type many many command-line options. This file does
## not contain a comprehensive list of commands -- look at the manual
## to find out what you can put into this file. You can find this here:
## $ info wget.info 'Startup File'
## Or online here:
## https://www.gnu.org/software/wget/manual/wget.html#Startup-File
##
## Wget initialization file can reside in /usr/local/etc/wgetrc
## (global, for all users) or $HOME/.wgetrc (for a single user).
##
## To use the settings in this file, you will have to uncomment them,
## as well as change them, in most cases, as the values on the
## commented-out lines are the default values (e.g. "off").
##
## Command are case-, underscore- and minus-insensitive.
## For example ftp_proxy, ftp-proxy and ftpproxy are the same.
##
## Global settings (useful for setting up in /usr/local/etc/wgetrc).
## Think well before you change them, since they may reduce wget's
## functionality, and make it behave contrary to the documentation:
##
# You can set retrieve quota for beginners by specifying a value
# optionally followed by 'K' (kilobytes) or 'M' (megabytes). The
# default quota is unlimited.
#quota = inf
# You can lower (or raise) the default number of retries when
# downloading a file (default is 20).
#tries = 20
# Lowering the maximum depth of the recursive retrieval is handy to
# prevent newbies from going too "deep" when they unwittingly start
# the recursive retrieval. The default is 5.
#reclevel = 5
# By default Wget uses "passive FTP" transfer where the client
# initiates the data connection to the server rather than the other
# way around. That is required on systems behind NAT where the client
# computer cannot be easily reached from the Internet. However, some
# firewalls software explicitly supports active FTP and in fact has
# problems supporting passive transfer. If you are in such
# environment, use "passive_ftp = off" to revert to active FTP.
#passive_ftp = off
# The "wait" command below makes Wget wait between every connection.
# If, instead, you want Wget to wait only between retries of failed
# downloads, set waitretry to maximum number of seconds to wait (Wget
# will use "linear backoff", waiting 1 second after the first failure
# on a file, 2 seconds after the second failure, etc. up to this max).
#waitretry = 10
##
## Local settings (for a user to set in his $HOME/.wgetrc). It is
## *highly* undesirable to put these settings in the global file, since
## they are potentially dangerous to "normal" users.
##
## Even when setting up your own ~/.wgetrc, you should know what you
## are doing before doing so.
##
# Set this to on to use timestamping by default:
#timestamping = off
# It is a good idea to make Wget send your email address in a `From:'
# header with your request (so that server administrators can contact
# you in case of errors). Wget does *not* send `From:' by default.
#header = From: Your Name <username@site.domain>
# You can set up other headers, like Accept-Language. Accept-Language
# is *not* sent by default.
#header = Accept-Language: en
# You can set the default proxies for Wget to use for http, https, and ftp.
# They will override the value in the environment.
#https_proxy = http://proxy.yoyodyne.com:18023/
#http_proxy = http://proxy.yoyodyne.com:18023/
#ftp_proxy = http://proxy.yoyodyne.com:18023/
# If you do not want to use proxy at all, set this to off.
#use_proxy = on
# You can customize the retrieval outlook. Valid options are default,
# binary, mega and micro.
#dot_style = default
# Setting this to off makes Wget not download /robots.txt. Be sure to
# know *exactly* what /robots.txt is and how it is used before changing
# the default!
#robots = on
# It can be useful to make Wget wait between connections. Set this to
# the number of seconds you want Wget to wait.
#wait = 0
# You can force creating directory structure, even if a single is being
# retrieved, by setting this to on.
#dirstruct = off
# You can turn on recursive retrieving by default (don't do this if
# you are not sure you know what it means) by setting this to on.
#recursive = off
# To always back up file X as X.orig before converting its links (due
# to -k / --convert-links / convert_links = on having been specified),
# set this variable to on:
#backup_converted = off
# To have Wget follow FTP links from HTML files by default, set this
# to on:
#follow_ftp = off
# To try ipv6 addresses first:
#prefer-family = IPv6
# Set default IRI support state
#iri = off
# Force the default system encoding
#localencoding = UTF-8
# Force the default remote server encoding
#remoteencoding = UTF-8
# Turn on to prevent following non-HTTPS links when in recursive mode
httpsonly = on
# Tune HTTPS security (auto, SSLv2, SSLv3, TLSv1, PFS)
#secureprotocol = auto
ca_certificate=/etc/ssl/certs/ca-certificates.crt
# Custom HSTS caching file path
hsts-file=~/.config/wget/wget-hsts

303
config/yazi/keymap.toml Normal file
View file

@ -0,0 +1,303 @@
# A TOML linter such as https://taplo.tamasfe.dev/ can use this schema to validate your config.
# If you encounter any issues, please make an issue at https://github.com/yazi-rs/schemas.
"$schema" = "https://yazi-rs.github.io/schemas/keymap.json"
[manager]
keymap = [
{ on = "<Esc>", run = "escape", desc = "Exit visual mode, clear selected, or cancel search" },
{ on = "<C-[>", run = "escape", desc = "Exit visual mode, clear selected, or cancel search" },
{ on = "q", run = "quit", desc = "Exit the process" },
{ on = "Q", run = "quit --no-cwd-file", desc = "Exit the process without writing cwd-file" },
{ on = "<C-c>", run = "close", desc = "Close the current tab, or quit if it is last tab" },
{ on = "<C-z>", run = "suspend", desc = "Suspend the process" },
# Hopping
{ on = "k", run = "arrow -1", desc = "Move cursor up" },
{ on = "j", run = "arrow 1", desc = "Move cursor down" },
{ on = "<Up>", run = "arrow -1", desc = "Move cursor up" },
{ on = "<Down>", run = "arrow 1", desc = "Move cursor down" },
{ on = "<C-u>", run = "arrow -50%", desc = "Move cursor up half page" },
{ on = "<C-d>", run = "arrow 50%", desc = "Move cursor down half page" },
{ on = "<C-b>", run = "arrow -100%", desc = "Move cursor up one page" },
{ on = "<C-f>", run = "arrow 100%", desc = "Move cursor down one page" },
{ on = "<S-PageUp>", run = "arrow -50%", desc = "Move cursor up half page" },
{ on = "<S-PageDown>", run = "arrow 50%", desc = "Move cursor down half page" },
{ on = "<PageUp>", run = "arrow -100%", desc = "Move cursor up one page" },
{ on = "<PageDown>", run = "arrow 100%", desc = "Move cursor down one page" },
{ on = [ "g", "g" ], run = "arrow -99999999", desc = "Move cursor to the top" },
{ on = "G", run = "arrow 99999999", desc = "Move cursor to the bottom" },
# Navigation
{ on = "h", run = "leave", desc = "Go back to the parent directory" },
{ on = "l", run = "enter", desc = "Enter the child directory" },
{ on = "<Left>", run = "leave", desc = "Go back to the parent directory" },
{ on = "<Right>", run = "enter", desc = "Enter the child directory" },
{ on = "H", run = "back", desc = "Go back to the previous directory" },
{ on = "L", run = "forward", desc = "Go forward to the next directory" },
# Seeking
{ on = "K", run = "seek -5", desc = "Seek up 5 units in the preview" },
{ on = "J", run = "seek 5", desc = "Seek down 5 units in the preview" },
# Selection
{ on = "<Space>", run = [ "select --state=none", "arrow 1" ], desc = "Toggle the current selection state" },
{ on = "v", run = "visual_mode", desc = "Enter visual mode (selection mode)" },
{ on = "V", run = "visual_mode --unset", desc = "Enter visual mode (unset mode)" },
{ on = "<C-a>", run = "select_all --state=true", desc = "Select all files" },
{ on = "<C-r>", run = "select_all --state=none", desc = "Inverse selection of all files" },
# Operation
{ on = "o", run = "open", desc = "Open selected files" },
{ on = "O", run = "open --interactive", desc = "Open selected files interactively" },
{ on = "<Enter>", run = "open", desc = "Open selected files" },
{ on = "<S-Enter>", run = "open --interactive", desc = "Open selected files interactively" },
{ on = "y", run = "yank", desc = "Yank selected files (copy)" },
{ on = "x", run = "yank --cut", desc = "Yank selected files (cut)" },
{ on = "p", run = "paste", desc = "Paste yanked files" },
{ on = "P", run = "paste --force", desc = "Paste yanked files (overwrite if the destination exists)" },
{ on = "-", run = "link", desc = "Symlink the absolute path of yanked files" },
{ on = "_", run = "link --relative", desc = "Symlink the relative path of yanked files" },
{ on = "<C-->", run = "hardlink", desc = "Hardlink yanked files" },
{ on = "Y", run = "unyank", desc = "Cancel the yank status" },
{ on = "X", run = "unyank", desc = "Cancel the yank status" },
{ on = "d", run = "remove", desc = "Trash selected files" },
{ on = "D", run = "remove --permanently", desc = "Permanently delete selected files" },
{ on = "a", run = "create", desc = "Create a file (ends with / for directories)" },
{ on = "r", run = "rename --cursor=before_ext", desc = "Rename selected file(s)" },
{ on = ";", run = "shell --interactive", desc = "Run a shell command" },
{ on = ":", run = "shell --block --interactive", desc = "Run a shell command (block until finishes)" },
{ on = ".", run = "hidden toggle", desc = "Toggle the visibility of hidden files" },
{ on = "s", run = "search fd", desc = "Search files by name using fd" },
{ on = "S", run = "search rg", desc = "Search files by content using ripgrep" },
{ on = "<C-s>", run = "escape --search", desc = "Cancel the ongoing search" },
{ on = "z", run = "plugin zoxide", desc = "Jump to a directory using zoxide" },
{ on = "Z", run = "plugin fzf", desc = "Jump to a directory or reveal a file using fzf" },
# Linemode
{ on = [ "m", "s" ], run = "linemode size", desc = "Set linemode to size" },
{ on = [ "m", "p" ], run = "linemode permissions", desc = "Set linemode to permissions" },
{ on = [ "m", "c" ], run = "linemode ctime", desc = "Set linemode to ctime" },
{ on = [ "m", "m" ], run = "linemode mtime", desc = "Set linemode to mtime" },
{ on = [ "m", "o" ], run = "linemode owner", desc = "Set linemode to owner" },
{ on = [ "m", "n" ], run = "linemode none", desc = "Set linemode to none" },
# Copy
{ on = [ "c", "c" ], run = "copy path", desc = "Copy the file path" },
{ on = [ "c", "d" ], run = "copy dirname", desc = "Copy the directory path" },
{ on = [ "c", "f" ], run = "copy filename", desc = "Copy the filename" },
{ on = [ "c", "n" ], run = "copy name_without_ext", desc = "Copy the filename without extension" },
# Filter
{ on = "f", run = "filter --smart", desc = "Filter files" },
# Find
{ on = "/", run = "find --smart", desc = "Find next file" },
{ on = "?", run = "find --previous --smart", desc = "Find previous file" },
{ on = "n", run = "find_arrow", desc = "Go to the next found" },
{ on = "N", run = "find_arrow --previous", desc = "Go to the previous found" },
# Sorting
{ on = [ ",", "m" ], run = [ "sort modified --reverse=no", "linemode mtime" ], desc = "Sort by modified time" },
{ on = [ ",", "M" ], run = [ "sort modified --reverse", "linemode mtime" ], desc = "Sort by modified time (reverse)" },
{ on = [ ",", "c" ], run = [ "sort created --reverse=no", "linemode ctime" ], desc = "Sort by created time" },
{ on = [ ",", "C" ], run = [ "sort created --reverse", "linemode ctime" ], desc = "Sort by created time (reverse)" },
{ on = [ ",", "e" ], run = "sort extension --reverse=no", desc = "Sort by extension" },
{ on = [ ",", "E" ], run = "sort extension --reverse", desc = "Sort by extension (reverse)" },
{ on = [ ",", "a" ], run = "sort alphabetical --reverse=no", desc = "Sort alphabetically" },
{ on = [ ",", "A" ], run = "sort alphabetical --reverse", desc = "Sort alphabetically (reverse)" },
{ on = [ ",", "n" ], run = "sort natural --reverse=no", desc = "Sort naturally" },
{ on = [ ",", "N" ], run = "sort natural --reverse", desc = "Sort naturally (reverse)" },
{ on = [ ",", "s" ], run = [ "sort size --reverse=no", "linemode size" ], desc = "Sort by size" },
{ on = [ ",", "S" ], run = [ "sort size --reverse", "linemode size" ], desc = "Sort by size (reverse)" },
{ on = [ ",", "r" ], run = "sort random --reverse=no", desc = "Sort randomly" },
# Goto
{ on = [ "g", "h" ], run = "cd ~", desc = "Go to the home directory" },
{ on = [ "g", "c" ], run = "cd ~/.config", desc = "Go to the config directory" },
{ on = [ "g", "d" ], run = "cd ~/Downloads", desc = "Go to the downloads directory" },
{ on = [ "g", "<Space>" ], run = "cd --interactive", desc = "Go to a directory interactively" },
# Tabs
{ on = "t", run = "tab_create --current", desc = "Create a new tab with CWD" },
{ on = "1", run = "tab_switch 0", desc = "Switch to the first tab" },
{ on = "2", run = "tab_switch 1", desc = "Switch to the second tab" },
{ on = "3", run = "tab_switch 2", desc = "Switch to the third tab" },
{ on = "4", run = "tab_switch 3", desc = "Switch to the fourth tab" },
{ on = "5", run = "tab_switch 4", desc = "Switch to the fifth tab" },
{ on = "6", run = "tab_switch 5", desc = "Switch to the sixth tab" },
{ on = "7", run = "tab_switch 6", desc = "Switch to the seventh tab" },
{ on = "8", run = "tab_switch 7", desc = "Switch to the eighth tab" },
{ on = "9", run = "tab_switch 8", desc = "Switch to the ninth tab" },
{ on = "[", run = "tab_switch -1 --relative", desc = "Switch to the previous tab" },
{ on = "]", run = "tab_switch 1 --relative", desc = "Switch to the next tab" },
{ on = "{", run = "tab_swap -1", desc = "Swap current tab with previous tab" },
{ on = "}", run = "tab_swap 1", desc = "Swap current tab with next tab" },
# Tasks
{ on = "w", run = "tasks_show", desc = "Show task manager" },
# Help
{ on = "~", run = "help", desc = "Open help" },
{ on = "<F1>", run = "help", desc = "Open help" },
]
[tasks]
keymap = [
{ on = "<Esc>", run = "close", desc = "Close task manager" },
{ on = "<C-[>", run = "close", desc = "Close task manager" },
{ on = "<C-c>", run = "close", desc = "Close task manager" },
{ on = "w", run = "close", desc = "Close task manager" },
{ on = "k", run = "arrow -1", desc = "Move cursor up" },
{ on = "j", run = "arrow 1", desc = "Move cursor down" },
{ on = "<Up>", run = "arrow -1", desc = "Move cursor up" },
{ on = "<Down>", run = "arrow 1", desc = "Move cursor down" },
{ on = "<Enter>", run = "inspect", desc = "Inspect the task" },
{ on = "x", run = "cancel", desc = "Cancel the task" },
# Help
{ on = "~", run = "help", desc = "Open help" },
{ on = "<F1>", run = "help", desc = "Open help" },
]
[select]
keymap = [
{ on = "<Esc>", run = "close", desc = "Cancel selection" },
{ on = "<C-[>", run = "close", desc = "Cancel selection" },
{ on = "<C-c>", run = "close", desc = "Cancel selection" },
{ on = "<Enter>", run = "close --submit", desc = "Submit the selection" },
{ on = "k", run = "arrow -1", desc = "Move cursor up" },
{ on = "j", run = "arrow 1", desc = "Move cursor down" },
{ on = "<Up>", run = "arrow -1", desc = "Move cursor up" },
{ on = "<Down>", run = "arrow 1", desc = "Move cursor down" },
# Help
{ on = "~", run = "help", desc = "Open help" },
{ on = "<F1>", run = "help", desc = "Open help" },
]
[input]
keymap = [
{ on = "<C-c>", run = "close", desc = "Cancel input" },
{ on = "<Enter>", run = "close --submit", desc = "Submit the input" },
{ on = "<Esc>", run = "escape", desc = "Go back the normal mode, or cancel input" },
{ on = "<C-[>", run = "escape", desc = "Go back the normal mode, or cancel input" },
# Mode
{ on = "i", run = "insert", desc = "Enter insert mode" },
{ on = "a", run = "insert --append", desc = "Enter append mode" },
{ on = "I", run = [ "move -999", "insert" ], desc = "Move to the BOL, and enter insert mode" },
{ on = "A", run = [ "move 999", "insert --append" ], desc = "Move to the EOL, and enter append mode" },
{ on = "v", run = "visual", desc = "Enter visual mode" },
{ on = "V", run = [ "move -999", "visual", "move 999" ], desc = "Enter visual mode and select all" },
# Character-wise movement
{ on = "h", run = "move -1", desc = "Move back a character" },
{ on = "l", run = "move 1", desc = "Move forward a character" },
{ on = "<Left>", run = "move -1", desc = "Move back a character" },
{ on = "<Right>", run = "move 1", desc = "Move forward a character" },
{ on = "<C-b>", run = "move -1", desc = "Move back a character" },
{ on = "<C-f>", run = "move 1", desc = "Move forward a character" },
# Word-wise movement
{ on = "b", run = "backward", desc = "Move back to the start of the current or previous word" },
{ on = "w", run = "forward", desc = "Move forward to the start of the next word" },
{ on = "e", run = "forward --end-of-word", desc = "Move forward to the end of the current or next word" },
{ on = "<A-b>", run = "backward", desc = "Move back to the start of the current or previous word" },
{ on = "<A-f>", run = "forward --end-of-word", desc = "Move forward to the end of the current or next word" },
# Line-wise movement
{ on = "0", run = "move -999", desc = "Move to the BOL" },
{ on = "$", run = "move 999", desc = "Move to the EOL" },
{ on = "<C-a>", run = "move -999", desc = "Move to the BOL" },
{ on = "<C-e>", run = "move 999", desc = "Move to the EOL" },
{ on = "<Home>", run = "move -999", desc = "Move to the BOL" },
{ on = "<End>", run = "move 999", desc = "Move to the EOL" },
# Delete
{ on = "<Backspace>", run = "backspace", desc = "Delete the character before the cursor" },
{ on = "<Delete>", run = "backspace --under", desc = "Delete the character under the cursor" },
{ on = "<C-h>", run = "backspace", desc = "Delete the character before the cursor" },
{ on = "<C-d>", run = "backspace --under", desc = "Delete the character under the cursor" },
# Kill
{ on = "<C-u>", run = "kill bol", desc = "Kill backwards to the BOL" },
{ on = "<C-k>", run = "kill eol", desc = "Kill forwards to the EOL" },
{ on = "<C-w>", run = "kill backward", desc = "Kill backwards to the start of the current word" },
{ on = "<A-d>", run = "kill forward", desc = "Kill forwards to the end of the current word" },
# Cut/Yank/Paste
{ on = "d", run = "delete --cut", desc = "Cut the selected characters" },
{ on = "D", run = [ "delete --cut", "move 999" ], desc = "Cut until the EOL" },
{ on = "c", run = "delete --cut --insert", desc = "Cut the selected characters, and enter insert mode" },
{ on = "C", run = [ "delete --cut --insert", "move 999" ], desc = "Cut until the EOL, and enter insert mode" },
{ on = "x", run = [ "delete --cut", "move 1 --in-operating" ], desc = "Cut the current character" },
{ on = "y", run = "yank", desc = "Copy the selected characters" },
{ on = "p", run = "paste", desc = "Paste the copied characters after the cursor" },
{ on = "P", run = "paste --before", desc = "Paste the copied characters before the cursor" },
# Undo/Redo
{ on = "u", run = "undo", desc = "Undo the last operation" },
{ on = "<C-r>", run = "redo", desc = "Redo the last operation" },
# Help
{ on = "~", run = "help", desc = "Open help" },
{ on = "<F1>", run = "help", desc = "Open help" },
]
[completion]
keymap = [
{ on = "<C-c>", run = "close", desc = "Cancel completion" },
{ on = "<Tab>", run = "close --submit", desc = "Submit the completion" },
{ on = "<Enter>", run = [ "close --submit", "close_input --submit" ], desc = "Submit the completion and input" },
{ on = "<A-k>", run = "arrow -1", desc = "Move cursor up" },
{ on = "<A-j>", run = "arrow 1", desc = "Move cursor down" },
{ on = "<Up>", run = "arrow -1", desc = "Move cursor up" },
{ on = "<Down>", run = "arrow 1", desc = "Move cursor down" },
{ on = "<C-p>", run = "arrow -1", desc = "Move cursor up" },
{ on = "<C-n>", run = "arrow 1", desc = "Move cursor down" },
# Help
{ on = "~", run = "help", desc = "Open help" },
{ on = "<F1>", run = "help", desc = "Open help" },
]
[help]
keymap = [
{ on = "<Esc>", run = "escape", desc = "Clear the filter, or hide the help" },
{ on = "<C-[>", run = "escape", desc = "Clear the filter, or hide the help" },
{ on = "q", run = "close", desc = "Exit the process" },
{ on = "<C-c>", run = "close", desc = "Hide the help" },
# Navigation
{ on = "k", run = "arrow -1", desc = "Move cursor up" },
{ on = "j", run = "arrow 1", desc = "Move cursor down" },
{ on = "<Up>", run = "arrow -1", desc = "Move cursor up" },
{ on = "<Down>", run = "arrow 1", desc = "Move cursor down" },
# Filtering
{ on = "f", run = "filter", desc = "Apply a filter for the help items" },
]

698
config/yazi/theme.toml Normal file
View file

@ -0,0 +1,698 @@
[manager]
cwd = { fg = "#94e2d5" }
# Hovered
hovered = { fg = "#1e1e2e", bg = "#89b4fa" }
preview_hovered = { underline = true }
# Find
find_keyword = { fg = "#f9e2af", italic = true }
find_position = { fg = "#f5c2e7", bg = "reset", italic = true }
# Marker
marker_copied = { fg = "#a6e3a1", bg = "#a6e3a1" }
marker_cut = { fg = "#f38ba8", bg = "#f38ba8" }
marker_selected = { fg = "#89b4fa", bg = "#89b4fa" }
# Tab
tab_active = { fg = "#1e1e2e", bg = "#cdd6f4" }
tab_inactive = { fg = "#cdd6f4", bg = "#45475a" }
tab_width = 1
# Count
count_copied = { fg = "#1e1e2e", bg = "#a6e3a1" }
count_cut = { fg = "#1e1e2e", bg = "#f38ba8" }
count_selected = { fg = "#1e1e2e", bg = "#89b4fa" }
# Border
border_symbol = "│"
border_style = { fg = "#7f849c" }
# Highlighting
syntect_theme = "~/.config/yazi/Catppuccin-mocha.tmTheme"
[status]
separator_open = ""
separator_close = ""
separator_style = { fg = "#45475a", bg = "#45475a" }
# Mode
mode_normal = { fg = "#1e1e2e", bg = "#89b4fa", bold = true }
mode_select = { fg = "#1e1e2e", bg = "#a6e3a1", bold = true }
mode_unset = { fg = "#1e1e2e", bg = "#f2cdcd", bold = true }
# Progress
progress_label = { fg = "#ffffff", bold = true }
progress_normal = { fg = "#89b4fa", bg = "#45475a" }
progress_error = { fg = "#f38ba8", bg = "#45475a" }
# Permissions
permissions_t = { fg = "#89b4fa" }
permissions_r = { fg = "#f9e2af" }
permissions_w = { fg = "#f38ba8" }
permissions_x = { fg = "#a6e3a1" }
permissions_s = { fg = "#7f849c" }
[input]
border = { fg = "#89b4fa" }
title = {}
value = {}
selected = { reversed = true }
[select]
border = { fg = "#89b4fa" }
active = { fg = "#f5c2e7" }
inactive = {}
[tasks]
border = { fg = "#89b4fa" }
title = {}
hovered = { underline = true }
[which]
mask = { bg = "#313244" }
cand = { fg = "#94e2d5" }
rest = { fg = "#9399b2" }
desc = { fg = "#f5c2e7" }
separator = "  "
separator_style = { fg = "#585b70" }
[help]
on = { fg = "#f5c2e7" }
exec = { fg = "#94e2d5" }
desc = { fg = "#9399b2" }
hovered = { bg = "#585b70", bold = true }
footer = { fg = "#45475a", bg = "#cdd6f4" }
[filetype]
rules = [
# Media
{ mime = "image/*", fg = "#94e2d5" },
{ mime = "{audio,video}/*", fg = "#f9e2af" },
# Archives
{ mime = "application/{,g}zip", fg = "#f5c2e7" },
{ mime = "application/x-{tar,bzip*,7z-compressed,xz,rar}", fg = "#f5c2e7" },
# Fallback
{ name = "*", fg = "#cdd6f4" },
{ name = "*/", fg = "#89b4fa" }
]
[icon]
files = [
{ name = "gulpfile.js", text = "", fg_dark = "#f38ba8", fg_light = "#f38ba8" },
{ name = ".babelrc", text = "", fg_dark = "#f9e2af", fg_light = "#f9e2af" },
{ name = "copying.lesser", text = "", fg_dark = "#f9e2af", fg_light = "#f9e2af" },
{ name = ".npmrc", text = "", fg_dark = "#f38ba8", fg_light = "#f38ba8" },
{ name = "docker-compose.yml", text = "󰡨", fg_dark = "#89b4fa", fg_light = "#89b4fa" },
{ name = "svelte.config.js", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "copying", text = "", fg_dark = "#f9e2af", fg_light = "#f9e2af" },
{ name = "prettier.config.ts", text = "", fg_dark = "#89b4fa", fg_light = "#89b4fa" },
{ name = "gruntfile.babel.js", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = ".SRCINFO", text = "󰣇", fg_dark = "#89b4fa", fg_light = "#89b4fa" },
{ name = ".xinitrc", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "docker-compose.yaml", text = "󰡨", fg_dark = "#89b4fa", fg_light = "#89b4fa" },
{ name = "nuxt.config.ts", text = "󱄆", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "build", text = "", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = ".editorconfig", text = "", fg_dark = "#f5e0dc", fg_light = "#f5e0dc" },
{ name = "nuxt.config.mjs", text = "󱄆", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = ".gitlab-ci.yml", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "PKGBUILD", text = "", fg_dark = "#89b4fa", fg_light = "#89b4fa" },
{ name = ".bash_profile", text = "", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = ".bashrc", text = "", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "compose.yml", text = "󰡨", fg_dark = "#89b4fa", fg_light = "#89b4fa" },
{ name = "eslint.config.cjs", text = "", fg_dark = "#585b70", fg_light = "#585b70" },
{ name = "go.mod", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = ".mailmap", text = "󰊢", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "gtkrc", text = "", fg_dark = "#f5e0dc", fg_light = "#f5e0dc" },
{ name = "go.work", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "justfile", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "kritadisplayrc", text = "", fg_dark = "#cba6f7", fg_light = "#cba6f7" },
{ name = "commitlint.config.js", text = "󰜘", fg_dark = "#94e2d5", fg_light = "#94e2d5" },
{ name = ".env", text = "", fg_dark = "#f9e2af", fg_light = "#f9e2af" },
{ name = "PrusaSlicerGcodeViewer.ini", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "r", text = "󰟔", fg_dark = "#6c7086", fg_light = "#6c7086" },
{ name = "license", text = "", fg_dark = "#f9e2af", fg_light = "#f9e2af" },
{ name = ".gitignore", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "tailwind.config.js", text = "󱏿", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = ".prettierrc.yml", text = "", fg_dark = "#89b4fa", fg_light = "#89b4fa" },
{ name = ".zprofile", text = "", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = ".zshenv", text = "", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "xmonad.hs", text = "", fg_dark = "#f38ba8", fg_light = "#f38ba8" },
{ name = ".eslintignore", text = "", fg_dark = "#585b70", fg_light = "#585b70" },
{ name = "tsconfig.json", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = ".prettierrc.json5", text = "", fg_dark = "#89b4fa", fg_light = "#89b4fa" },
{ name = ".ds_store", text = "", fg_dark = "#45475a", fg_light = "#45475a" },
{ name = "gulpfile.coffee", text = "", fg_dark = "#f38ba8", fg_light = "#f38ba8" },
{ name = "R", text = "󰟔", fg_dark = "#6c7086", fg_light = "#6c7086" },
{ name = ".zshrc", text = "", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = ".prettierrc.toml", text = "", fg_dark = "#89b4fa", fg_light = "#89b4fa" },
{ name = ".gvimrc", text = "", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = ".xsession", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = ".justfile", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = ".gitconfig", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "gradle-wrapper.properties", text = "", fg_dark = "#585b70", fg_light = "#585b70" },
{ name = "ionic.config.json", text = "", fg_dark = "#89b4fa", fg_light = "#89b4fa" },
{ name = "cantorrc", text = "", fg_dark = "#89b4fa", fg_light = "#89b4fa" },
{ name = ".gleam", text = "", fg_dark = "#f5c2e7", fg_light = "#f5c2e7" },
{ name = "package-lock.json", text = "", fg_dark = "#313244", fg_light = "#313244" },
{ name = "package.json", text = "", fg_dark = "#f38ba8", fg_light = "#f38ba8" },
{ name = "hyprland.conf", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "gulpfile.babel.js", text = "", fg_dark = "#f38ba8", fg_light = "#f38ba8" },
{ name = ".nvmrc", text = "", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = ".prettierignore", text = "", fg_dark = "#89b4fa", fg_light = "#89b4fa" },
{ name = "ext_typoscript_setup.txt", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "QtProject.conf", text = "", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "avif", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "mix.lock", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "build.gradle", text = "", fg_dark = "#585b70", fg_light = "#585b70" },
{ name = "gemfile$", text = "", fg_dark = "#313244", fg_light = "#313244" },
{ name = ".vimrc", text = "", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "i18n.config.ts", text = "󰗊", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "gulpfile.ts", text = "", fg_dark = "#f38ba8", fg_light = "#f38ba8" },
{ name = "build.zig.zon", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "checkhealth", text = "󰓙", fg_dark = "#89b4fa", fg_light = "#89b4fa" },
{ name = "xmobarrc", text = "", fg_dark = "#f38ba8", fg_light = "#f38ba8" },
{ name = "_vimrc", text = "", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = ".luaurc", text = "", fg_dark = "#89b4fa", fg_light = "#89b4fa" },
{ name = "kdenlive-layoutsrc", text = "", fg_dark = "#89b4fa", fg_light = "#89b4fa" },
{ name = "gradlew", text = "", fg_dark = "#585b70", fg_light = "#585b70" },
{ name = "xsettingsd.conf", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "vlcrc", text = "󰕼", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "xorg.conf", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "xmobarrc.hs", text = "", fg_dark = "#f38ba8", fg_light = "#f38ba8" },
{ name = "workspace", text = "", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = ".gitattributes", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "favicon.ico", text = "", fg_dark = "#f9e2af", fg_light = "#f9e2af" },
{ name = "go.sum", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "pom.xml", text = "", fg_dark = "#313244", fg_light = "#313244" },
{ name = "webpack", text = "󰜫", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "vagrantfile$", text = "", fg_dark = "#6c7086", fg_light = "#6c7086" },
{ name = "unlicense", text = "", fg_dark = "#f9e2af", fg_light = "#f9e2af" },
{ name = "tmux.conf.local", text = "", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "settings.gradle", text = "", fg_dark = "#585b70", fg_light = "#585b70" },
{ name = ".dockerignore", text = "󰡨", fg_dark = "#89b4fa", fg_light = "#89b4fa" },
{ name = "sym-lib-table", text = "", fg_dark = "#f5e0dc", fg_light = "#f5e0dc" },
{ name = "_gvimrc", text = "", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "kdenliverc", text = "", fg_dark = "#89b4fa", fg_light = "#89b4fa" },
{ name = "kdeglobals", text = "", fg_dark = "#89b4fa", fg_light = "#89b4fa" },
{ name = ".prettierrc.yaml", text = "", fg_dark = "#89b4fa", fg_light = "#89b4fa" },
{ name = "rmd", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "tailwind.config.mjs", text = "󱏿", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "sxhkdrc", text = "", fg_dark = "#313244", fg_light = "#313244" },
{ name = "robots.txt", text = "󰚩", fg_dark = "#6c7086", fg_light = "#6c7086" },
{ name = "tailwind.config.ts", text = "󱏿", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "prettier.config.mjs", text = "", fg_dark = "#89b4fa", fg_light = "#89b4fa" },
{ name = "mpv.conf", text = "", fg_dark = "#1e1e2e", fg_light = "#1e1e2e" },
{ name = "py.typed", text = "", fg_dark = "#f9e2af", fg_light = "#f9e2af" },
{ name = "PrusaSlicer.ini", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "procfile", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "rakefile", text = "", fg_dark = "#313244", fg_light = "#313244" },
{ name = "kritarc", text = "", fg_dark = "#cba6f7", fg_light = "#cba6f7" },
{ name = ".Xresources", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "prettier.config.js", text = "", fg_dark = "#89b4fa", fg_light = "#89b4fa" },
{ name = "commitlint.config.ts", text = "󰜘", fg_dark = "#94e2d5", fg_light = "#94e2d5" },
{ name = "weston.ini", text = "", fg_dark = "#f9e2af", fg_light = "#f9e2af" },
{ name = "eslint.config.js", text = "", fg_dark = "#585b70", fg_light = "#585b70" },
{ name = "cmakelists.txt", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = ".git-blame-ignore-revs", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "config", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "nuxt.config.cjs", text = "󱄆", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "node_modules", text = "", fg_dark = "#f38ba8", fg_light = "#f38ba8" },
{ name = "makefile", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "lxqt.conf", text = "", fg_dark = "#89b4fa", fg_light = "#89b4fa" },
{ name = "i18n.config.js", text = "󰗊", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "FreeCAD.conf", text = "", fg_dark = "#f38ba8", fg_light = "#f38ba8" },
{ name = "prettier.config.cjs", text = "", fg_dark = "#89b4fa", fg_light = "#89b4fa" },
{ name = "tmux.conf", text = "", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "kalgebrarc", text = "", fg_dark = "#89b4fa", fg_light = "#89b4fa" },
{ name = "i3status.conf", text = "", fg_dark = "#f5e0dc", fg_light = "#f5e0dc" },
{ name = ".settings.json", text = "", fg_dark = "#6c7086", fg_light = "#6c7086" },
{ name = "containerfile", text = "󰡨", fg_dark = "#89b4fa", fg_light = "#89b4fa" },
{ name = "i3blocks.conf", text = "", fg_dark = "#f5e0dc", fg_light = "#f5e0dc" },
{ name = "lxde-rc.xml", text = "", fg_dark = "#9399b2", fg_light = "#9399b2" },
{ name = "gradle.properties", text = "", fg_dark = "#585b70", fg_light = "#585b70" },
{ name = "hypridle.conf", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "gruntfile.ts", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "gruntfile.js", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "dockerfile", text = "󰡨", fg_dark = "#89b4fa", fg_light = "#89b4fa" },
{ name = "groovy", text = "", fg_dark = "#585b70", fg_light = "#585b70" },
{ name = "hyprlock.conf", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = ".prettierrc", text = "", fg_dark = "#89b4fa", fg_light = "#89b4fa" },
{ name = "gnumakefile", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "commit_editmsg", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "fp-lib-table", text = "", fg_dark = "#f5e0dc", fg_light = "#f5e0dc" },
{ name = "fp-info-cache", text = "", fg_dark = "#f5e0dc", fg_light = "#f5e0dc" },
{ name = "eslint.config.ts", text = "", fg_dark = "#585b70", fg_light = "#585b70" },
{ name = "nuxt.config.js", text = "󱄆", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "platformio.ini", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = ".nuxtrc", text = "󱄆", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "gruntfile.coffee", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "eslint.config.mjs", text = "", fg_dark = "#585b70", fg_light = "#585b70" },
{ name = "compose.yaml", text = "󰡨", fg_dark = "#89b4fa", fg_light = "#89b4fa" },
{ name = "bspwmrc", text = "", fg_dark = "#313244", fg_light = "#313244" },
{ name = "brewfile", text = "", fg_dark = "#313244", fg_light = "#313244" },
{ name = ".eslintrc", text = "", fg_dark = "#585b70", fg_light = "#585b70" },
{ name = ".gtkrc-2.0", text = "", fg_dark = "#f5e0dc", fg_light = "#f5e0dc" },
{ name = ".Xauthority", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = ".prettierrc.json", text = "", fg_dark = "#89b4fa", fg_light = "#89b4fa" },
{ name = ".npmignore", text = "", fg_dark = "#f38ba8", fg_light = "#f38ba8" },
{ name = ".gitmodules", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
]
exts = [
{ name = "rake", text = "", fg_dark = "#313244", fg_light = "#313244" },
{ name = "skp", text = "󰻫", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "eln", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "razor", text = "󱦘", fg_dark = "#585b70", fg_light = "#585b70" },
{ name = "vue", text = "", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "sln", text = "", fg_dark = "#6c7086", fg_light = "#6c7086" },
{ name = "el", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "blp", text = "󰺾", fg_dark = "#89b4fa", fg_light = "#89b4fa" },
{ name = "jl", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "mdx", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "jsx", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "ml", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "less", text = "", fg_dark = "#45475a", fg_light = "#45475a" },
{ name = "pot", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "pl", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "mli", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "gif", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "aif", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "cxxm", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "fcbak", text = "", fg_dark = "#f38ba8", fg_light = "#f38ba8" },
{ name = "aac", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "query", text = "", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "android", text = "", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "m3u8", text = "󰲹", fg_dark = "#f38ba8", fg_light = "#f38ba8" },
{ name = "leex", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "liquid", text = "", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "cue", text = "󰲹", fg_dark = "#f38ba8", fg_light = "#f38ba8" },
{ name = "fcmacro", text = "", fg_dark = "#f38ba8", fg_light = "#f38ba8" },
{ name = "log", text = "󰌱", fg_dark = "#cdd6f4", fg_light = "#cdd6f4" },
{ name = "pm", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "brep", text = "󰻫", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "blend", text = "󰂫", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "md5", text = "󰕥", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "sql", text = "", fg_dark = "#f5e0dc", fg_light = "#f5e0dc" },
{ name = "xcplayground", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "erb", text = "", fg_dark = "#313244", fg_light = "#313244" },
{ name = "t", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "cache", text = "", fg_dark = "#f5e0dc", fg_light = "#f5e0dc" },
{ name = "r", text = "󰟔", fg_dark = "#6c7086", fg_light = "#6c7086" },
{ name = "x", text = "", fg_dark = "#89b4fa", fg_light = "#89b4fa" },
{ name = "import", text = "", fg_dark = "#f5e0dc", fg_light = "#f5e0dc" },
{ name = "m", text = "", fg_dark = "#89b4fa", fg_light = "#89b4fa" },
{ name = "lrc", text = "󰨖", fg_dark = "#f9e2af", fg_light = "#f9e2af" },
{ name = "o", text = "", fg_dark = "#45475a", fg_light = "#45475a" },
{ name = "d", text = "", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "c", text = "", fg_dark = "#89b4fa", fg_light = "#89b4fa" },
{ name = "h", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "rss", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "hbs", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "godot", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "eot", text = "", fg_dark = "#f5e0dc", fg_light = "#f5e0dc" },
{ name = "awk", text = "", fg_dark = "#585b70", fg_light = "#585b70" },
{ name = "fsx", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "a", text = "", fg_dark = "#f5e0dc", fg_light = "#f5e0dc" },
{ name = "pyi", text = "", fg_dark = "#f9e2af", fg_light = "#f9e2af" },
{ name = "asc", text = "󰦝", fg_dark = "#6c7086", fg_light = "#6c7086" },
{ name = "ass", text = "󰨖", fg_dark = "#f9e2af", fg_light = "#f9e2af" },
{ name = "css", text = "", fg_dark = "#89b4fa", fg_light = "#89b4fa" },
{ name = "psb", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "csproj", text = "󰪮", fg_dark = "#585b70", fg_light = "#585b70" },
{ name = "csv", text = "", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "gcode", text = "󰐫", fg_dark = "#6c7086", fg_light = "#6c7086" },
{ name = "ics", text = "", fg_dark = "#313244", fg_light = "#313244" },
{ name = "mk", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "bz", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "fctb", text = "", fg_dark = "#f38ba8", fg_light = "#f38ba8" },
{ name = "gz", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "wasm", text = "", fg_dark = "#585b70", fg_light = "#585b70" },
{ name = "glb", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "elc", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "flf", text = "", fg_dark = "#f5e0dc", fg_light = "#f5e0dc" },
{ name = "elf", text = "", fg_dark = "#45475a", fg_light = "#45475a" },
{ name = "dropbox", text = "", fg_dark = "#6c7086", fg_light = "#6c7086" },
{ name = "tres", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "apk", text = "", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "ape", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "slvs", text = "󰻫", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "apl", text = "⍝", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "cs", text = "󰌛", fg_dark = "#585b70", fg_light = "#585b70" },
{ name = "azcli", text = "", fg_dark = "#6c7086", fg_light = "#6c7086" },
{ name = "pp", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "flc", text = "", fg_dark = "#f5e0dc", fg_light = "#f5e0dc" },
{ name = "gemspec", text = "", fg_dark = "#313244", fg_light = "#313244" },
{ name = "pls", text = "󰲹", fg_dark = "#f38ba8", fg_light = "#f38ba8" },
{ name = "cfg", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "fcscript", text = "", fg_dark = "#f38ba8", fg_light = "#f38ba8" },
{ name = "gnumakefile", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "zst", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "pxi", text = "", fg_dark = "#89b4fa", fg_light = "#89b4fa" },
{ name = "woff2", text = "", fg_dark = "#f5e0dc", fg_light = "#f5e0dc" },
{ name = "kicad_pcb", text = "", fg_dark = "#f5e0dc", fg_light = "#f5e0dc" },
{ name = "zsh", text = "", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "kicad_wks", text = "", fg_dark = "#f5e0dc", fg_light = "#f5e0dc" },
{ name = "info", text = "", fg_dark = "#f9e2af", fg_light = "#f9e2af" },
{ name = "cppm", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "svg", text = "󰜡", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "flac", text = "", fg_dark = "#6c7086", fg_light = "#6c7086" },
{ name = "cuh", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "bin", text = "", fg_dark = "#45475a", fg_light = "#45475a" },
{ name = "zig", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "yml", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "yaml", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "fsscript", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "xz", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "diff", text = "", fg_dark = "#45475a", fg_light = "#45475a" },
{ name = "mojo", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "cshtml", text = "󱦗", fg_dark = "#585b70", fg_light = "#585b70" },
{ name = "bak", text = "󰁯", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "nfo", text = "", fg_dark = "#f9e2af", fg_light = "#f9e2af" },
{ name = "bat", text = "", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "cpy", text = "⚙", fg_dark = "#585b70", fg_light = "#585b70" },
{ name = "gql", text = "", fg_dark = "#f38ba8", fg_light = "#f38ba8" },
{ name = "c++", text = "", fg_dark = "#f38ba8", fg_light = "#f38ba8" },
{ name = "lff", text = "", fg_dark = "#f5e0dc", fg_light = "#f5e0dc" },
{ name = "obj", text = "󰆧", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "sha512", text = "󰕥", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "scm", text = "󰘧", fg_dark = "#f5e0dc", fg_light = "#f5e0dc" },
{ name = "aiff", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "sig", text = "λ", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "webm", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "zip", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "wrz", text = "󰆧", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "jwmrc", text = "", fg_dark = "#6c7086", fg_light = "#6c7086" },
{ name = "xml", text = "󰗀", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "cbl", text = "⚙", fg_dark = "#585b70", fg_light = "#585b70" },
{ name = "rmd", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "xaml", text = "󰙳", fg_dark = "#585b70", fg_light = "#585b70" },
{ name = "xm", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "wvc", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "drl", text = "", fg_dark = "#eba0ac", fg_light = "#eba0ac" },
{ name = "erl", text = "", fg_dark = "#f38ba8", fg_light = "#f38ba8" },
{ name = "3gp", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "ccm", text = "", fg_dark = "#f38ba8", fg_light = "#f38ba8" },
{ name = "ino", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "kbx", text = "󰯄", fg_dark = "#6c7086", fg_light = "#6c7086" },
{ name = "test.js", text = "", fg_dark = "#f9e2af", fg_light = "#f9e2af" },
{ name = "wrl", text = "󰆧", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "pcm", text = "", fg_dark = "#6c7086", fg_light = "#6c7086" },
{ name = "woff", text = "", fg_dark = "#f5e0dc", fg_light = "#f5e0dc" },
{ name = "scala", text = "", fg_dark = "#f38ba8", fg_light = "#f38ba8" },
{ name = "webpack", text = "󰜫", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "hrl", text = "", fg_dark = "#f38ba8", fg_light = "#f38ba8" },
{ name = "kra", text = "", fg_dark = "#cba6f7", fg_light = "#cba6f7" },
{ name = "kicad_pro", text = "", fg_dark = "#f5e0dc", fg_light = "#f5e0dc" },
{ name = "bazel", text = "", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "toml", text = "", fg_dark = "#585b70", fg_light = "#585b70" },
{ name = "iges", text = "󰻫", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "crdownload", text = "", fg_dark = "#94e2d5", fg_light = "#94e2d5" },
{ name = "so", text = "", fg_dark = "#f5e0dc", fg_light = "#f5e0dc" },
{ name = "strings", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "xls", text = "󰈛", fg_dark = "#585b70", fg_light = "#585b70" },
{ name = "wav", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "vsix", text = "", fg_dark = "#6c7086", fg_light = "#6c7086" },
{ name = "kicad_prl", text = "", fg_dark = "#f5e0dc", fg_light = "#f5e0dc" },
{ name = "mov", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "bash", text = "", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "sqlite3", text = "", fg_dark = "#f5e0dc", fg_light = "#f5e0dc" },
{ name = "vsh", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "vim", text = "", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "lck", text = "", fg_dark = "#bac2de", fg_light = "#bac2de" },
{ name = "go", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "pyo", text = "", fg_dark = "#f9e2af", fg_light = "#f9e2af" },
{ name = "vhdl", text = "󰍛", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "vhd", text = "󰍛", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "rar", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "magnet", text = "", fg_dark = "#45475a", fg_light = "#45475a" },
{ name = "vala", text = "", fg_dark = "#585b70", fg_light = "#585b70" },
{ name = "coffee", text = "", fg_dark = "#f9e2af", fg_light = "#f9e2af" },
{ name = "kdbx", text = "", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "po", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "v", text = "󰍛", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "prisma", text = "", fg_dark = "#6c7086", fg_light = "#6c7086" },
{ name = "f90", text = "󱈚", fg_dark = "#585b70", fg_light = "#585b70" },
{ name = "txt", text = "󰈙", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "mo", text = "∞", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "mp4", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "cljc", text = "", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "heex", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "exs", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "clj", text = "", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "luau", text = "", fg_dark = "#89b4fa", fg_light = "#89b4fa" },
{ name = "fcparam", text = "", fg_dark = "#f38ba8", fg_light = "#f38ba8" },
{ name = "markdown", text = "", fg_dark = "#cdd6f4", fg_light = "#cdd6f4" },
{ name = "dxf", text = "󰻫", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "luac", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "desktop", text = "", fg_dark = "#45475a", fg_light = "#45475a" },
{ name = "docx", text = "󰈬", fg_dark = "#585b70", fg_light = "#585b70" },
{ name = "cljd", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "txz", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "bicepparam", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "kt", text = "", fg_dark = "#6c7086", fg_light = "#6c7086" },
{ name = "fcstd", text = "", fg_dark = "#f38ba8", fg_light = "#f38ba8" },
{ name = "md", text = "", fg_dark = "#cdd6f4", fg_light = "#cdd6f4" },
{ name = "edn", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "sub", text = "󰨖", fg_dark = "#f9e2af", fg_light = "#f9e2af" },
{ name = "ttf", text = "", fg_dark = "#f5e0dc", fg_light = "#f5e0dc" },
{ name = "tsx", text = "", fg_dark = "#585b70", fg_light = "#585b70" },
{ name = "hurl", text = "", fg_dark = "#f38ba8", fg_light = "#f38ba8" },
{ name = "dll", text = "", fg_dark = "#11111b", fg_light = "#11111b" },
{ name = "lhs", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "tsconfig", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "msf", text = "", fg_dark = "#89b4fa", fg_light = "#89b4fa" },
{ name = "ts", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "rproj", text = "󰗆", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "org", text = "", fg_dark = "#94e2d5", fg_light = "#94e2d5" },
{ name = "signature", text = "λ", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "elm", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "pyc", text = "", fg_dark = "#f9e2af", fg_light = "#f9e2af" },
{ name = "tmux", text = "", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "tgz", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "nu", text = ">", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "tfvars", text = "", fg_dark = "#585b70", fg_light = "#585b70" },
{ name = "lua", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "astro", text = "", fg_dark = "#f38ba8", fg_light = "#f38ba8" },
{ name = "lib", text = "", fg_dark = "#11111b", fg_light = "#11111b" },
{ name = "tex", text = "", fg_dark = "#45475a", fg_light = "#45475a" },
{ name = "ogg", text = "", fg_dark = "#6c7086", fg_light = "#6c7086" },
{ name = "stp", text = "󰻫", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "sublime", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "test.tsx", text = "", fg_dark = "#585b70", fg_light = "#585b70" },
{ name = "nswag", text = "", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "test.ts", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "test.jsx", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "dwg", text = "󰻫", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "bib", text = "󱉟", fg_dark = "#f9e2af", fg_light = "#f9e2af" },
{ name = "sass", text = "", fg_dark = "#f38ba8", fg_light = "#f38ba8" },
{ name = "templ", text = "", fg_dark = "#f9e2af", fg_light = "#f9e2af" },
{ name = "tcl", text = "󰛓", fg_dark = "#585b70", fg_light = "#585b70" },
{ name = "pck", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "swift", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "makefile", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "xcstrings", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "slim", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "iso", text = "", fg_dark = "#f2cdcd", fg_light = "#f2cdcd" },
{ name = "fsi", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "dart", text = "", fg_dark = "#585b70", fg_light = "#585b70" },
{ name = "nix", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "svelte", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "sv", text = "󰍛", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "bz2", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "sha256", text = "󰕥", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "twig", text = "", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "material", text = "󰔉", fg_dark = "#f38ba8", fg_light = "#f38ba8" },
{ name = "ppt", text = "󰈧", fg_dark = "#f38ba8", fg_light = "#f38ba8" },
{ name = "pyd", text = "", fg_dark = "#f9e2af", fg_light = "#f9e2af" },
{ name = "step", text = "󰻫", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "hx", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "webmanifest", text = "", fg_dark = "#f9e2af", fg_light = "#f9e2af" },
{ name = "kicad_sch", text = "", fg_dark = "#f5e0dc", fg_light = "#f5e0dc" },
{ name = "cjs", text = "", fg_dark = "#f9e2af", fg_light = "#f9e2af" },
{ name = "stl", text = "󰆧", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "ejs", text = "", fg_dark = "#f9e2af", fg_light = "#f9e2af" },
{ name = "ssa", text = "󰨖", fg_dark = "#f9e2af", fg_light = "#f9e2af" },
{ name = "license", text = "", fg_dark = "#f9e2af", fg_light = "#f9e2af" },
{ name = "jsonc", text = "", fg_dark = "#f9e2af", fg_light = "#f9e2af" },
{ name = "download", text = "", fg_dark = "#94e2d5", fg_light = "#94e2d5" },
{ name = "ige", text = "󰻫", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "sqlite", text = "", fg_dark = "#f5e0dc", fg_light = "#f5e0dc" },
{ name = "psd1", text = "󰨊", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "dump", text = "", fg_dark = "#f5e0dc", fg_light = "#f5e0dc" },
{ name = "resi", text = "", fg_dark = "#f38ba8", fg_light = "#f38ba8" },
{ name = "spec.ts", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "fnl", text = "", fg_dark = "#f9e2af", fg_light = "#f9e2af" },
{ name = "cu", text = "", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "scss", text = "", fg_dark = "#f38ba8", fg_light = "#f38ba8" },
{ name = "config.ru", text = "", fg_dark = "#313244", fg_light = "#313244" },
{ name = "psd", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "db", text = "", fg_dark = "#f5e0dc", fg_light = "#f5e0dc" },
{ name = "epub", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "haml", text = "", fg_dark = "#f5e0dc", fg_light = "#f5e0dc" },
{ name = "sol", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "sml", text = "λ", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "svh", text = "󰍛", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "sldprt", text = "󰻫", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "ico", text = "", fg_dark = "#f9e2af", fg_light = "#f9e2af" },
{ name = "xlsx", text = "󰈛", fg_dark = "#585b70", fg_light = "#585b70" },
{ name = "rs", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "dconf", text = "", fg_dark = "#f5e0dc", fg_light = "#f5e0dc" },
{ name = "bz3", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "fdmdownload", text = "", fg_dark = "#94e2d5", fg_light = "#94e2d5" },
{ name = "fs", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "patch", text = "", fg_dark = "#45475a", fg_light = "#45475a" },
{ name = "hs", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "xcf", text = "", fg_dark = "#585b70", fg_light = "#585b70" },
{ name = "js", text = "", fg_dark = "#f9e2af", fg_light = "#f9e2af" },
{ name = "pyw", text = "", fg_dark = "#89b4fa", fg_light = "#89b4fa" },
{ name = "sha384", text = "󰕥", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "fcmat", text = "", fg_dark = "#f38ba8", fg_light = "#f38ba8" },
{ name = "csh", text = "", fg_dark = "#585b70", fg_light = "#585b70" },
{ name = "suo", text = "", fg_dark = "#6c7086", fg_light = "#6c7086" },
{ name = "sha224", text = "󰕥", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "sha1", text = "󰕥", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "cr", text = "", fg_dark = "#f5e0dc", fg_light = "#f5e0dc" },
{ name = "huff", text = "󰡘", fg_dark = "#585b70", fg_light = "#585b70" },
{ name = "sh", text = "", fg_dark = "#585b70", fg_light = "#585b70" },
{ name = "sc", text = "", fg_dark = "#f38ba8", fg_light = "#f38ba8" },
{ name = "ksh", text = "", fg_dark = "#585b70", fg_light = "#585b70" },
{ name = "cc", text = "", fg_dark = "#f38ba8", fg_light = "#f38ba8" },
{ name = "wma", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "mp3", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "conf", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "3mf", text = "󰆧", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "sbt", text = "", fg_dark = "#f38ba8", fg_light = "#f38ba8" },
{ name = "kicad_mod", text = "", fg_dark = "#f5e0dc", fg_light = "#f5e0dc" },
{ name = "terminal", text = "", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "rlib", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "pdf", text = "", fg_dark = "#585b70", fg_light = "#585b70" },
{ name = "mts", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "kdenlive", text = "", fg_dark = "#89b4fa", fg_light = "#89b4fa" },
{ name = "kts", text = "", fg_dark = "#6c7086", fg_light = "#6c7086" },
{ name = "spec.tsx", text = "", fg_dark = "#585b70", fg_light = "#585b70" },
{ name = "res", text = "", fg_dark = "#f38ba8", fg_light = "#f38ba8" },
{ name = "hxx", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "rb", text = "", fg_dark = "#313244", fg_light = "#313244" },
{ name = "vh", text = "󰍛", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "ixx", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "cson", text = "", fg_dark = "#f9e2af", fg_light = "#f9e2af" },
{ name = "cts", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "7z", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "ex", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "cpp", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "qss", text = "", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "app", text = "", fg_dark = "#45475a", fg_light = "#45475a" },
{ name = "jxl", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "qrc", text = "", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "qml", text = "", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "epp", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "otf", text = "", fg_dark = "#f5e0dc", fg_light = "#f5e0dc" },
{ name = "hh", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "qm", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "pro", text = "", fg_dark = "#f9e2af", fg_light = "#f9e2af" },
{ name = "exe", text = "", fg_dark = "#45475a", fg_light = "#45475a" },
{ name = "kdenlivetitle", text = "", fg_dark = "#89b4fa", fg_light = "#89b4fa" },
{ name = "kdb", text = "", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "mpp", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "Dockerfile", text = "󰡨", fg_dark = "#89b4fa", fg_light = "#89b4fa" },
{ name = "bqn", text = "⎉", fg_dark = "#6c7086", fg_light = "#6c7086" },
{ name = "torrent", text = "", fg_dark = "#94e2d5", fg_light = "#94e2d5" },
{ name = "m3u", text = "󰲹", fg_dark = "#f38ba8", fg_light = "#f38ba8" },
{ name = "py", text = "", fg_dark = "#f9e2af", fg_light = "#f9e2af" },
{ name = "pxd", text = "", fg_dark = "#89b4fa", fg_light = "#89b4fa" },
{ name = "f3d", text = "󰻫", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "out", text = "", fg_dark = "#45475a", fg_light = "#45475a" },
{ name = "spec.jsx", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "kicad_dru", text = "", fg_dark = "#f5e0dc", fg_light = "#f5e0dc" },
{ name = "ps1", text = "󰨊", fg_dark = "#6c7086", fg_light = "#6c7086" },
{ name = "ui", text = "", fg_dark = "#313244", fg_light = "#313244" },
{ name = "styl", text = "", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "f#", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "png", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "ply", text = "󰆧", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "php", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "eex", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "tbc", text = "󰛓", fg_dark = "#585b70", fg_light = "#585b70" },
{ name = "part", text = "", fg_dark = "#94e2d5", fg_light = "#94e2d5" },
{ name = "pub", text = "󰷖", fg_dark = "#f9e2af", fg_light = "#f9e2af" },
{ name = "ipynb", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "opus", text = "", fg_dark = "#6c7086", fg_light = "#6c7086" },
{ name = "git", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "bmp", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "blade.php", text = "", fg_dark = "#f38ba8", fg_light = "#f38ba8" },
{ name = "nim", text = "", fg_dark = "#f9e2af", fg_light = "#f9e2af" },
{ name = "xpi", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "mustache", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "tscn", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "scad", text = "", fg_dark = "#f9e2af", fg_light = "#f9e2af" },
{ name = "ai", text = "", fg_dark = "#f9e2af", fg_light = "#f9e2af" },
{ name = "hex", text = "", fg_dark = "#6c7086", fg_light = "#6c7086" },
{ name = "hpp", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "xul", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "mobi", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "fcstd1", text = "", fg_dark = "#f38ba8", fg_light = "#f38ba8" },
{ name = "ical", text = "", fg_dark = "#313244", fg_light = "#313244" },
{ name = "icalendar", text = "", fg_dark = "#313244", fg_light = "#313244" },
{ name = "bicep", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "mm", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "mkv", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "graphql", text = "", fg_dark = "#f38ba8", fg_light = "#f38ba8" },
{ name = "mjs", text = "", fg_dark = "#f9e2af", fg_light = "#f9e2af" },
{ name = "mint", text = "󰌪", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "m4v", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "m4a", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "tf", text = "", fg_dark = "#585b70", fg_light = "#585b70" },
{ name = "gv", text = "󱁉", fg_dark = "#585b70", fg_light = "#585b70" },
{ name = "lock", text = "", fg_dark = "#bac2de", fg_light = "#bac2de" },
{ name = "krz", text = "", fg_dark = "#cba6f7", fg_light = "#cba6f7" },
{ name = "kpp", text = "", fg_dark = "#cba6f7", fg_light = "#cba6f7" },
{ name = "ko", text = "", fg_dark = "#f5e0dc", fg_light = "#f5e0dc" },
{ name = "kicad_sym", text = "", fg_dark = "#f5e0dc", fg_light = "#f5e0dc" },
{ name = "psm1", text = "󰨊", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "pyx", text = "", fg_dark = "#89b4fa", fg_light = "#89b4fa" },
{ name = "json5", text = "", fg_dark = "#f9e2af", fg_light = "#f9e2af" },
{ name = "json", text = "", fg_dark = "#f9e2af", fg_light = "#f9e2af" },
{ name = "bzl", text = "", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "ifb", text = "", fg_dark = "#313244", fg_light = "#313244" },
{ name = "image", text = "", fg_dark = "#f2cdcd", fg_light = "#f2cdcd" },
{ name = "jpg", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "jpeg", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "java", text = "", fg_dark = "#f38ba8", fg_light = "#f38ba8" },
{ name = "wv", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "ini", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "cast", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "cp", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "fctl", text = "", fg_dark = "#f38ba8", fg_light = "#f38ba8" },
{ name = "ifc", text = "󰻫", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "sldasm", text = "󰻫", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "html", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "typoscript", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "🔥", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "htm", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "ste", text = "󰻫", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "spec.js", text = "", fg_dark = "#f9e2af", fg_light = "#f9e2af" },
{ name = "gresource", text = "", fg_dark = "#f5e0dc", fg_light = "#f5e0dc" },
{ name = "ebook", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "gradle", text = "", fg_dark = "#585b70", fg_light = "#585b70" },
{ name = "gd", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "fish", text = "", fg_dark = "#585b70", fg_light = "#585b70" },
{ name = "igs", text = "󰻫", fg_dark = "#a6e3a1", fg_light = "#a6e3a1" },
{ name = "fbx", text = "󰆧", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "env", text = "", fg_dark = "#f9e2af", fg_light = "#f9e2af" },
{ name = "srt", text = "󰨖", fg_dark = "#f9e2af", fg_light = "#f9e2af" },
{ name = "dot", text = "󱁉", fg_dark = "#585b70", fg_light = "#585b70" },
{ name = "doc", text = "󰈬", fg_dark = "#585b70", fg_light = "#585b70" },
{ name = "d.ts", text = "", fg_dark = "#fab387", fg_light = "#fab387" },
{ name = "applescript", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "cxx", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "img", text = "", fg_dark = "#f2cdcd", fg_light = "#f2cdcd" },
{ name = "cljs", text = "", fg_dark = "#74c7ec", fg_light = "#74c7ec" },
{ name = "cobol", text = "⚙", fg_dark = "#585b70", fg_light = "#585b70" },
{ name = "cob", text = "⚙", fg_dark = "#585b70", fg_light = "#585b70" },
{ name = "cmake", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
{ name = "webp", text = "", fg_dark = "#7f849c", fg_light = "#7f849c" },
]

201
config/yazi/yazi.toml Normal file
View file

@ -0,0 +1,201 @@
# A TOML linter such as https://taplo.tamasfe.dev/ can use this schema to validate your config.
# If you encounter any issues, please make an issue at https://github.com/yazi-rs/schemas.
"$schema" = "https://yazi-rs.github.io/schemas/yazi.json"
[manager]
ratio = [ 1, 4, 3 ]
sort_by = "natural"
sort_sensitive = false
sort_reverse = false
sort_dir_first = true
sort_translit = false
linemode = "none"
show_hidden = false
show_symlink = true
scrolloff = 5
mouse_events = [ "click", "scroll" ]
title_format = "Yazi: {cwd}"
[preview]
tab_size = 2
max_width = 600
max_height = 900
cache_dir = ""
image_filter = "triangle"
image_quality = 75
sixel_fraction = 15
ueberzug_scale = 1
ueberzug_offset = [ 0, 0, 0, 0 ]
[opener]
edit = [
{ run = '${EDITOR:-vi} "$@"', desc = "$EDITOR", block = true, for = "unix" },
{ run = 'code %*', orphan = true, desc = "code", for = "windows" },
{ run = 'code -w %*', block = true, desc = "code (block)", for = "windows" },
]
open = [
{ run = 'xdg-open "$1"', desc = "Open", for = "linux" },
{ run = 'open "$@"', desc = "Open", for = "macos" },
{ run = 'start "" "%1"', orphan = true, desc = "Open", for = "windows" },
]
reveal = [
{ run = 'xdg-open "$(dirname "$1")"', desc = "Reveal", for = "linux" },
{ run = 'open -R "$1"', desc = "Reveal", for = "macos" },
{ run = 'explorer /select,"%1"', orphan = true, desc = "Reveal", for = "windows" },
{ run = '''exiftool "$1"; echo "Press enter to exit"; read _''', block = true, desc = "Show EXIF", for = "unix" },
]
extract = [
{ run = 'ya pub extract --list "$@"', desc = "Extract here", for = "unix" },
{ run = 'ya pub extract --list %*', desc = "Extract here", for = "windows" },
]
play = [
{ run = 'mpv --force-window "$@"', orphan = true, for = "unix" },
{ run = 'mpv --force-window %*', orphan = true, for = "windows" },
{ run = '''mediainfo "$1"; echo "Press enter to exit"; read _''', block = true, desc = "Show media info", for = "unix" },
]
[open]
rules = [
# Folder
{ name = "*/", use = [ "edit", "open", "reveal" ] },
# Text
{ mime = "text/*", use = [ "edit", "reveal" ] },
# Image
{ mime = "image/*", use = [ "open", "reveal" ] },
# Media
{ mime = "{audio,video}/*", use = [ "play", "reveal" ] },
# Archive
{ mime = "application/{,g}zip", use = [ "extract", "reveal" ] },
{ mime = "application/x-{tar,bzip*,7z-compressed,xz,rar}", use = [ "extract", "reveal" ] },
# JSON
{ mime = "application/{json,x-ndjson}", use = [ "edit", "reveal" ] },
{ mime = "*/javascript", use = [ "edit", "reveal" ] },
# Empty file
{ mime = "inode/x-empty", use = [ "edit", "reveal" ] },
# Fallback
{ name = "*", use = [ "open", "reveal" ] },
]
[tasks]
micro_workers = 10
macro_workers = 25
bizarre_retry = 5
image_alloc = 536870912 # 512MB
image_bound = [ 0, 0 ]
suppress_preload = false
[plugin]
fetchers = [
# Mimetype
{ id = "mime", name = "*", run = "mime", if = "!mime", prio = "high" },
]
preloaders = [
# Image
{ mime = "image/{avif,hei?,jxl,svg+xml}", run = "magick" },
{ mime = "image/*", run = "image" },
# Video
{ mime = "video/*", run = "video" },
# PDF
{ mime = "application/pdf", run = "pdf" },
# Font
{ mime = "font/*", run = "font" },
{ mime = "application/vnd.ms-opentype", run = "font" },
]
previewers = [
{ name = "*/", run = "folder", sync = true },
# Code
{ mime = "text/*", run = "code" },
{ mime = "*/{xml,javascript,x-wine-extension-ini}", run = "code" },
# JSON
{ mime = "application/{json,x-ndjson}", run = "json" },
# Image
{ mime = "image/{avif,hei?,jxl,svg+xml}", run = "magick" },
{ mime = "image/*", run = "image" },
# Video
{ mime = "video/*", run = "video" },
# PDF
{ mime = "application/pdf", run = "pdf" },
# Archive
{ mime = "application/{,g}zip", run = "archive" },
{ mime = "application/x-{tar,bzip*,7z-compressed,xz,rar,iso9660-image}", run = "archive" },
# Font
{ mime = "font/*", run = "font" },
{ mime = "application/vnd.ms-opentype", run = "font" },
# Empty file
{ mime = "inode/x-empty", run = "empty" },
# Fallback
{ name = "*", run = "file" },
]
[input]
cursor_blink = false
# cd
cd_title = "Change directory:"
cd_origin = "top-center"
cd_offset = [ 0, 2, 50, 3 ]
# create
create_title = "Create:"
create_origin = "top-center"
create_offset = [ 0, 2, 50, 3 ]
# rename
rename_title = "Rename:"
rename_origin = "hovered"
rename_offset = [ 0, 1, 50, 3 ]
# trash
trash_title = "Move {n} selected file{s} to trash? (y/N)"
trash_origin = "top-center"
trash_offset = [ 0, 2, 50, 3 ]
# delete
delete_title = "Delete {n} selected file{s} permanently? (y/N)"
delete_origin = "top-center"
delete_offset = [ 0, 2, 50, 3 ]
# filter
filter_title = "Filter:"
filter_origin = "top-center"
filter_offset = [ 0, 2, 50, 3 ]
# find
find_title = [ "Find next:", "Find previous:" ]
find_origin = "top-center"
find_offset = [ 0, 2, 50, 3 ]
# search
search_title = "Search via {n}:"
search_origin = "top-center"
search_offset = [ 0, 2, 50, 3 ]
# shell
shell_title = [ "Shell:", "Shell (block):" ]
shell_origin = "top-center"
shell_offset = [ 0, 2, 50, 3 ]
# overwrite
overwrite_title = "Overwrite an existing file? (y/N)"
overwrite_origin = "top-center"
overwrite_offset = [ 0, 2, 50, 3 ]
# quit
quit_title = "{n} task{s} running, sure to quit? (y/N)"
quit_origin = "top-center"
quit_offset = [ 0, 2, 50, 3 ]
[select]
open_title = "Open with:"
open_origin = "hovered"
open_offset = [ 0, 1, 50, 7 ]
[which]
sort_by = "none"
sort_sensitive = false
sort_reverse = false
sort_translit = false
[log]
enabled = false

View file

@ -6,36 +6,44 @@
## ##
set font "mononoki Nerd Font 12" set font "mononoki Nerd Font 12"
set default-bg "#262626" #00 set default-fg rgba(205,214,244,1)
set default-fg "#ebdbb2" #01 set default-bg rgba(30,30,46,1)
set statusbar-fg "#ebdbb2" #04 set completion-bg rgba(49,50,68,1)
set statusbar-bg "#262626" #01 set completion-fg rgba(205,214,244,1)
set completion-highlight-bg rgba(87,82,104,1)
set completion-highlight-fg rgba(205,214,244,1)
set completion-group-bg rgba(49,50,68,1)
set completion-group-fg rgba(137,180,250,1)
set inputbar-bg "#262626" #00 currently not used set statusbar-fg rgba(205,214,244,1)
set inputbar-fg "#ebdbb2" #02 set statusbar-bg rgba(49,50,68,1)
set notification-error-bg "#262626" #08 set notification-bg rgba(49,50,68,1)
set notification-error-fg "#cc241d" #00 set notification-fg rgba(205,214,244,1)
set notification-error-bg rgba(49,50,68,1)
set notification-error-fg rgba(243,139,168,1)
set notification-warning-bg rgba(49,50,68,1)
set notification-warning-fg rgba(250,227,176,1)
set notification-warning-bg "#262626" #08 set inputbar-fg rgba(205,214,244,1)
set notification-warning-fg "#d79921" #00 set inputbar-bg rgba(49,50,68,1)
set highlight-color "#262626" #0A set recolor "true"
set highlight-active-color "#ebdbb2" #0D set recolor-lightcolor rgba(30,30,46,1)
set recolor-darkcolor rgba(205,214,244,1)
set completion-highlight-fg "#4e4e4e" #02 set index-fg rgba(205,214,244,1)
set completion-highlight-bg "#87afaf" #0C set index-bg rgba(30,30,46,1)
set index-active-fg rgba(205,214,244,1)
set index-active-bg rgba(49,50,68,1)
set completion-bg "#4e4e4e" #02 set render-loading-bg rgba(30,30,46,1)
set completion-fg "#ebdbb2" #0C set render-loading-fg rgba(205,214,244,1)
set notification-bg "#262626" #0B set highlight-color rgba(87,82,104,0.5)
set notification-fg "#458588" #00 set highlight-fg rgba(245,194,231,0.5)
set highlight-active-color rgba(245,194,231,0.5)
set recolor-lightcolor "#262626" #00
set recolor-darkcolor "#ebdbb2" #06
set recolor "false"
# setting recolor-keep true will keep any color your pdf has. # setting recolor-keep true will keep any color your pdf has.
# if it is false, it'll just be black and white # if it is false, it'll just be black and white

28
config/zed/keymap.json Normal file
View file

@ -0,0 +1,28 @@
// Zed keymap
//
// For information on binding keys, see the Zed
// documentation: https://zed.dev/docs/key-bindings
//
// To see the default key bindings run `zed: open default keymap`
// from the command palette.
[
{
"context": "Workspace",
"bindings": {
// "shift shift": "file_finder::Toggle"
}
},
{
"context": "Editor",
"bindings": {
// "j k": ["workspace::SendKeystrokes", "escape"]
}
},
{
"context": "Terminal",
"bindings": {
"ctrl-w": "pane::CloseActiveItem", // Don't pass ctrl-w to terminal, let Zed handle it.
"ctrl-`": "workspace::ToggleBottomDock" // match vscode behavior
}
}
]

100
config/zed/settings.json Normal file
View file

@ -0,0 +1,100 @@
// Zed settings
//
// For information on how to configure Zed, see the Zed
// documentation: https://zed.dev/docs/configuring-zed
//
// To see all of Zed's default settings without changing your
// custom settings, run `zed: open default settings` from the
// command palette
{
// don't prompt for updates
"auto_update": false,
// editor settings
"autosave": "on_focus_change",
"confirm_quit": true,
"tab_size": 4,
"ui_font_size": 16,
"buffer_font_size": 16,
"soft_wrap": "editor_width",
"hard_tabs": false,
"vim_mode": true,
"preferred_line_length": 120,
"search": {
"regex": true // allow regex search
},
// specific languages settings
"languages": {
"Dart": {
"tab_size": 2
},
"LaTeX": {
"tab_size": 2
},
"JSON": {
"tab_size": 2
},
"Go": {
"formatter": "language_server"
}
},
// theme settings
"theme": {
"mode": "system",
"light": "Gruvbox Dark Hard",
"dark": "Catppuccin Mocha"
},
// terminal settings
"terminal": {
"shell": {
"program": "fish"
},
"blinking": "on"
},
// configure tabs UI
"tabs": {
"close_position": "right",
"file_icons": true,
"git_status": true
},
// settings for project panel and outline panel
"project_panel": {
"button": true,
"default_width": 250,
"dock": "left",
"indent_size": 10
},
"outline_panel": {
"button": true,
"default_width": 200,
"dock": "right",
"indent_size": 15
},
// disable panels I don't need
"chat_panel": {
"button": false
},
"collaboration_panel": {
"button": false
},
"assistant": {
"button": false,
"version": "2"
},
"features": {
"copilot": false,
"inline_completion_provider": "none"
},
// disable telemetry
"telemetry": {
"diagnostics": false,
"metrics": false
}
}

View file

@ -1,349 +0,0 @@
[General]
# Default adapter name
# Defaults to 'BlueZ X.YZ'
#Name = BlueZ
# Default device class. Only the major and minor device class bits are
# considered. Defaults to '0x000000'.
#Class = 0x000100
# How long to stay in discoverable mode before going back to non-discoverable
# The value is in seconds. Default is 180, i.e. 3 minutes.
# 0 = disable timer, i.e. stay discoverable forever
#DiscoverableTimeout = 0
# Always allow pairing even if there are no agent registered
# Possible values: true, false
# Default: false
#AlwaysPairable = false
# How long to stay in pairable mode before going back to non-discoverable
# The value is in seconds. Default is 0.
# 0 = disable timer, i.e. stay pairable forever
#PairableTimeout = 0
# Use vendor id source (assigner), vendor, product and version information for
# DID profile support. The values are separated by ":" and assigner, VID, PID
# and version.
# Possible vendor id source values: bluetooth, usb (default) or false (disabled)
#DeviceID = bluetooth:1234:5678:abcd
# Do reverse service discovery for previously unknown devices that connect to
# us. For BR/EDR this option is really only needed for qualification since the
# BITE tester doesn't like us doing reverse SDP for some test cases, for LE
# this disables the GATT client functionally so it can be used in system which
# can only operate as peripheral (see also GATT Client option).
# Defaults to 'true'.
#ReverseServiceDiscovery = true
# Enable name resolving after inquiry. Set it to 'false' if you don't need
# remote devices name and want shorter discovery cycle. Defaults to 'true'.
#NameResolving = true
# Enable runtime persistency of debug link keys. Default is false which
# makes debug link keys valid only for the duration of the connection
# that they were created for.
#DebugKeys = false
# Restricts all controllers to the specified transport. Default value
# is "dual", i.e. both BR/EDR and LE enabled (when supported by the HW).
# Possible values: "dual", "bredr", "le"
#ControllerMode = dual
# Maximum number of controllers allowed to be exposed to the system.
# Default=0 (unlimited)
#MaxControllers=0
# Enables Multi Profile Specification support. This allows to specify if
# system supports only Multiple Profiles Single Device (MPSD) configuration
# or both Multiple Profiles Single Device (MPSD) and Multiple Profiles Multiple
# Devices (MPMD) configurations.
# Possible values: "off", "single", "multiple"
#MultiProfile = off
# Permanently enables the Fast Connectable setting for adapters that
# support it. When enabled other devices can connect faster to us,
# however the tradeoff is increased power consumptions. This feature
# will fully work only on kernel version 4.1 and newer. Defaults to
# 'false'.
#FastConnectable = false
# Default privacy setting.
# Enables use of private address.
# Possible values for LE mode: "off", "network/on", "device"
# Possible values for Dual mode: "off", "network/on", "device",
# "limited-network", "limited-device"
#
# - off: Local privacy disabled.
#
# - network/on: A device will only accept advertising packets from peer
# devices that contain private addresses. It may not be compatible with some
# legacy devices since it requires the use of RPA(s) all the time.
#
# - device: A device in device privacy mode is only concerned about the
# privacy of the device and will accept advertising packets from peer devices
# that contain their Identity Address as well as ones that contain a private
# address, even if the peer device has distributed its IRK in the past.
# - limited-network: Apply Limited Discoverable Mode to advertising, which
# follows the same policy as to BR/EDR that publishes the identity address when
# discoverable, and Network Privacy Mode for scanning.
#
# - limited-device: Apply Limited Discoverable Mode to advertising, which
# follows the same policy as to BR/EDR that publishes the identity address when
# discoverable, and Device Privacy Mode for scanning.
#
# Defaults to "off"
#Privacy = off
# Specify the policy to the JUST-WORKS repairing initiated by peer
# Possible values: "never", "confirm", "always"
# Defaults to "never"
#JustWorksRepairing = never
# How long to keep temporary devices around
# The value is in seconds. Default is 30.
# 0 = disable timer, i.e. never keep temporary devices
#TemporaryTimeout = 30
# Enables the device to issue an SDP request to update known services when
# profile is connected. Defaults to true.
#RefreshDiscovery = true
# Default Secure Connections setting.
# Enables the Secure Connections setting for adapters that support it. It
# provides better crypto algorithms for BT links and also enables CTKD (cross
# transport key derivation) during pairing on any link.
# Possible values: "off", "on", "only"
# - "off": Secure Connections are disabled
# - "on": Secure Connections are enabled when peer device supports them
# - "only": we allow only Secure Connections
# Defaults to "on"
#SecureConnections = on
# Enables D-Bus experimental interfaces
# Possible values: true or false
#Experimental = false
# Enables D-Bus testing interfaces
# Possible values: true or false
#Testing = false
# Enables kernel experimental features, alternatively a list of UUIDs
# can be given.
# Possible values: true,false,<UUID List>
# Possible UUIDS:
# d4992530-b9ec-469f-ab01-6c481c47da1c (BlueZ Experimental Debug)
# 671b10b5-42c0-4696-9227-eb28d1b049d6 (BlueZ Experimental Simultaneous Central and Peripheral)
# 15c0a148-c273-11ea-b3de-0242ac130004 (BlueZ Experimental LL privacy)
# 330859bc-7506-492d-9370-9a6f0614037f (BlueZ Experimental Bluetooth Quality Report)
# a6695ace-ee7f-4fb9-881a-5fac66c629af (BlueZ Experimental Offload Codecs)
# 6fbaf188-05e0-496a-9885-d6ddfdb4e03e (BlueZ Experimental ISO socket)
# 69518c4c-b69f-4679-8bc1-c021b47b5733 (BlueZ Experimental Poll Errqueue)
# Defaults to false.
#KernelExperimental = false
# The duration to avoid retrying to resolve a peer's name, if the previous
# try failed.
# The value is in seconds. Default is 300, i.e. 5 minutes.
#RemoteNameRequestRetryDelay = 300
[BR]
# The following values are used to load default adapter parameters for BR/EDR.
# BlueZ loads the values into the kernel before the adapter is powered if the
# kernel supports the MGMT_LOAD_DEFAULT_PARAMETERS command. If a value isn't
# provided, the kernel will be initialized to it's default value. The actual
# value will vary based on the kernel version and thus aren't provided here.
# The Bluetooth Core Specification should be consulted for the meaning and valid
# domain of each of these values.
# BR/EDR Page scan activity configuration
#PageScanType=
#PageScanInterval=
#PageScanWindow=
# BR/EDR Inquiry scan activity configuration
#InquiryScanType=
#InquiryScanInterval=
#InquiryScanWindow=
# BR/EDR Link supervision timeout
#LinkSupervisionTimeout=
# BR/EDR Page Timeout
#PageTimeout=
# BR/EDR Sniff Intervals
#MinSniffInterval=
#MaxSniffInterval=
[LE]
# The following values are used to load default adapter parameters for LE.
# BlueZ loads the values into the kernel before the adapter is powered if the
# kernel supports the MGMT_LOAD_DEFAULT_PARAMETERS command. If a value isn't
# provided, the kernel will be initialized to it's default value. The actual
# value will vary based on the kernel version and thus aren't provided here.
# The Bluetooth Core Specification should be consulted for the meaning and valid
# domain of each of these values.
# LE advertisement interval (used for legacy advertisement interface only)
#MinAdvertisementInterval=
#MaxAdvertisementInterval=
#MultiAdvertisementRotationInterval=
# LE scanning parameters used for passive scanning supporting auto connect
# scenarios
#ScanIntervalAutoConnect=
#ScanWindowAutoConnect=
# LE scanning parameters used for passive scanning supporting wake from suspend
# scenarios
#ScanIntervalSuspend=
#ScanWindowSuspend=
# LE scanning parameters used for active scanning supporting discovery
# proceedure
#ScanIntervalDiscovery=
#ScanWindowDiscovery=
# LE scanning parameters used for passive scanning supporting the advertisement
# monitor Apis
#ScanIntervalAdvMonitor=
#ScanWindowAdvMonitor=
# LE scanning parameters used for connection establishment.
#ScanIntervalConnect=
#ScanWindowConnect=
# LE default connection parameters. These values are superceeded by any
# specific values provided via the Load Connection Parameters interface
#MinConnectionInterval=
#MaxConnectionInterval=
#ConnectionLatency=
#ConnectionSupervisionTimeout=
#Autoconnecttimeout=
# Scan duration during interleaving scan. Only used when scanning for ADV
# monitors. The units are msec.
# Default: 300
#AdvMonAllowlistScanDuration=
# Default: 500
#AdvMonNoFilterScanDuration=
# Enable/Disable Advertisement Monitor interleave scan for power saving.
# 0: disable
# 1: enable
# Defaults to 1
#EnableAdvMonInterleaveScan=
[GATT]
# GATT attribute cache.
# Possible values:
# always: Always cache attributes even for devices not paired, this is
# recommended as it is best for interoperability, with more consistent
# reconnection times and enables proper tracking of notifications for all
# devices.
# yes: Only cache attributes of paired devices.
# no: Never cache attributes
# Default: always
#Cache = always
# Minimum required Encryption Key Size for accessing secured characteristics.
# Possible values: 0 and 7-16. 0 means don't care.
# Defaults to 0
#KeySize = 0
# Exchange MTU size.
# Possible values: 23-517
# Defaults to 517
#ExchangeMTU = 517
# Number of ATT channels
# Possible values: 1-5 (1 disables EATT)
# Default to 1
#Channels = 1
[CSIS]
# SIRK - Set Identification Resolution Key which is common for all the
# sets. They SIRK key is used to identify its sets. This can be any
# 128 bit value or a string value (e.g. product name) which is then hashed.
# Possible Values:
# 16 byte hexadecimal value: 861FAE703ED681F0C50B34155B6434FB
# String value: "My Product Name"
# Defaults to none
#SIRK =
# SIRK Encryption
# Possible values:
# true: Encrypt SIRK when read
# false: Do not encrypt SIRK when read. (plaintext)
# Defaults to true
#Encryption = true
# Total no of sets belongs to this Profile
# Defaults to 0
#Size = 0
# Rank for the device
# Defaults to 0
#Rank = 0
# This enables the GATT client functionally, so it can be disabled in system
# which can only operate as a peripheral.
# Defaults to 'true'.
#Client = true
[AVDTP]
# AVDTP L2CAP Signalling Channel Mode.
# Possible values:
# basic: Use L2CAP Basic Mode
# ertm: Use L2CAP Enhanced Retransmission Mode
#SessionMode = basic
# AVDTP L2CAP Transport Channel Mode.
# Possible values:
# basic: Use L2CAP Basic Mode
# streaming: Use L2CAP Streaming Mode
#StreamMode = basic
[Policy]
#
# The ReconnectUUIDs defines the set of remote services that should try
# to be reconnected to in case of a link loss (link supervision
# timeout). The policy plugin should contain a sane set of values by
# default, but this list can be overridden here. By setting the list to
# empty the reconnection feature gets disabled.
#ReconnectUUIDs=00001112-0000-1000-8000-00805f9b34fb,0000111f-0000-1000-8000-00805f9b34fb,0000110a-0000-1000-8000-00805f9b34fb,0000110b-0000-1000-8000-00805f9b34fb
# ReconnectAttempts define the number of attempts to reconnect after a link
# lost. Setting the value to 0 disables reconnecting feature.
#ReconnectAttempts=7
# ReconnectIntervals define the set of intervals in seconds to use in between
# attempts.
# If the number of attempts defined in ReconnectAttempts is bigger than the
# set of intervals the last interval is repeated until the last attempt.
#ReconnectIntervals=1,2,4,8,16,32,64
# AutoEnable defines option to enable all controllers when they are found.
# This includes adapters present on start as well as adapters that are plugged
# in later on. Defaults to 'true'.
AutoEnable=false
# Audio devices that were disconnected due to suspend will be reconnected on
# resume. ResumeDelay determines the delay between when the controller
# resumes from suspend and a connection attempt is made. A longer delay is
# better for better co-existence with Wi-Fi.
# The value is in seconds.
# Default: 2
#ResumeDelay = 2
[AdvMon]
# Default RSSI Sampling Period. This is used when a client registers an
# advertisement monitor and leaves the RSSISamplingPeriod unset.
# Possible values:
# 0x00 Report all advertisements
# N = 0xXX Report advertisements every N x 100 msec (range: 0x01 to 0xFE)
# 0xFF Report only one advertisement per device during monitoring period
# Default: 0xFF
#RSSISamplingPeriod=0xFF

View file

@ -1,14 +0,0 @@
# crypttab: mappings for encrypted partitions
#
# Each mapped device will be created in /dev/mapper, so your /etc/fstab
# should use the /dev/mapper/<name> paths for encrypted devices.
#
# NOTE: Do not list your root (/) partition here.
# <name> <device> <password> <options>
# home /dev/hda4 /etc/mypassword1
# data1 /dev/hda3 /etc/mypassword2
# data2 /dev/hda5 /etc/cryptfs.key
# swap /dev/hdx4 /dev/urandom swap,cipher=aes-cbc-essiv:sha256,size=256
# vol /dev/hdb7 none
# <lvmname> <device> /boot/volume.key luks

View file

@ -1,23 +0,0 @@
#
# Configuration file for GRUB.
#
GRUB_DEFAULT=0
GRUB_HIDDEN_TIMEOUT=1
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT=0
GRUB_DISTRIBUTOR="Void"
GRUB_CMDLINE_LINUX_DEFAULT="loglevel=3 quiet"
#GRUB_CMDLINE_LINUX_DEFAULT="rd.luks.uuid=<uuid> rd.luks.vg=<vgname> loglevel=3 quiet"
GRUB_ENABLE_CRYPTODISK=y
# Uncomment to use basic console
#GRUB_TERMINAL_INPUT="console"
# Uncomment to disable graphical terminal
#GRUB_TERMINAL_OUTPUT=console
#GRUB_BACKGROUND=/usr/share/void-artwork/splash.png
#GRUB_GFXMODE=1920x1080x32
#GRUB_DISABLE_LINUX_UUID=true
#GRUB_DISABLE_RECOVERY=true
# Uncomment and set to the desired menu colors. Used by normal and wallpaper
# modes only. Entries specified as foreground/background.
#GRUB_COLOR_NORMAL="light-blue/black"
#GRUB_COLOR_HIGHLIGHT="light-cyan/blue"

View file

@ -1,13 +0,0 @@

\e[H\e[2J
\e[0;32m
_______
\\_____ `- ____ ____ .__ .___ .____ .__
/\\ ___ `- \\ \\ \\ / /___ |__| __| _/ | | |__| ____ __ _____ ___
| | / \\ | | \\ Y / _ \\| |/ __ | | | | |/ \\| | \\ \\/ /
| | \\___/ | | \\ ( <_> ) / /_/ | | |___| | | \\ | /> <
\\ `-_____ \\/ \\___/ \\____/|__\\____ | |_______ \\__|___| /____//__/\\_ \\
`-______\\ \\/ \\/ \\/ \\/
\e[0m
Welcome Back! Linux Version: \r (\n) (\l)

View file

@ -1,47 +0,0 @@
# /etc/rc.conf - system configuration for void
# Set the host name.
#
# NOTE: it's preferred to declare the hostname in /etc/hostname instead:
# - echo myhost > /etc/hostname
#
#HOSTNAME="void-live"
# Set RTC to UTC or localtime.
#HARDWARECLOCK="UTC"
# Set timezone, availables timezones can be found at /usr/share/zoneinfo.
#
# NOTE: it's preferred to set the timezone in /etc/localtime instead:
# - ln -sf /usr/share/zoneinfo/<timezone> /etc/localtime
# Setting the timezone here requires a reboot to apply any changes/fixes
# and read-write access to the filesystem.
#
#TIMEZONE="Europe/Madrid"
# Keymap to load, see loadkeys(8).
#KEYMAP="es"
# Console font to load, see setfont(8).
#FONT="lat9w-16"
# Console map to load, see setfont(8).
#FONT_MAP=
# Font unimap to load, see setfont(8).
#FONT_UNIMAP=
# Amount of ttys which should be setup.
#TTYS=
# Set the mode for cgroup mounts.
# hybrid: mount cgroup v1 under /sys/fs/cgroup and
# cgroup v2 under /sys/fs/cgroup/unified
# legacy: mount cgroup v1 /sys/fs/cgroup
# unified: mount cgroup v2 under /sys/fs/cgroup
CGROUP_MODE=unified
# Set this to true only if you do not want seed files to actually credit the
# RNG, for example if you plan to replicate this file system image and do not
# have the wherewithal to first delete the contents of /var/lib/seedrng.
#SEEDRNG_SKIP_CREDIT=false

View file

@ -1,6 +0,0 @@
#!/bin/sh
# Default rc.local for void; add your custom commands here.
#
# This is run by runit in stage 2 before the services are executed
# (see /etc/runit/2).
mount --make-rshared /

View file

@ -1,14 +0,0 @@
#!/bin/sh
export USER="drk"
export HOME="/home/$USER"
export XDG_RUNTIME_DIR="/run/user/$(id -u $USER)"
mkdir $XDG_RUNTIME_DIR
chown $USER:$USER $XDG_RUNTIME_DIR
groups="$(id -Gn "$USER" | tr ' ' ':')"
svdir="$HOME/.config/runit/service"
mkdir -p "$svdir"
chown $USER:$USER "$svdir"
exec chpst -u "$USER:$groups" runsvdir "$svdir"

View file

@ -6,10 +6,6 @@ export XDG_CACHE_HOME="$HOME/.cache"
export XDG_CONFIG_HOME="$HOME/.config" export XDG_CONFIG_HOME="$HOME/.config"
export XDG_LIB_HOME="$HOME/.local/lib" export XDG_LIB_HOME="$HOME/.local/lib"
export XDG_BIN_HOME="$HOME/.local/bin" export XDG_BIN_HOME="$HOME/.local/bin"
export XDG_SOURCE_HOME="$HOME/.local/src"
# X11
export XINITRC="$XDG_CONFIG_HOME/X11/xinitrc"
# Sanely export XDG Base dir variables # Sanely export XDG Base dir variables
eval "$(sed 's/^[^#].*/export &/g;t;d' ~/.config/user-dirs.dirs)" eval "$(sed 's/^[^#].*/export &/g;t;d' ~/.config/user-dirs.dirs)"
@ -25,10 +21,10 @@ export LESSHISTFILE="-"
export BASHRC="$HOME/.bashrc" export BASHRC="$HOME/.bashrc"
# Default apps # Default apps
export TERMINAL="foot" export TERMINAL="kitty"
export EDITOR="$HOME/.local/bin/lvim" export EDITOR="$HOME/.local/bin/lvim"
export VISUAL="foot -T lunarvim -a lunarvim lvim" export VISUAL="zed"
export BROWSER="flatpak run org.mozilla.firefox" export BROWSER="flatpak run com.brave.Browser"
export VIEWER="zathura" export VIEWER="zathura"
# Programming languages specific environment variables # Programming languages specific environment variables
@ -39,7 +35,7 @@ export GOPATH="$XDG_DATA_HOME/go"
export CARGO_HOME="$XDG_DATA_HOME/cargo" export CARGO_HOME="$XDG_DATA_HOME/cargo"
## Flutter ## Flutter
export CHROME_EXECUTABLE="/var/lib/flatpak/app/io.github.ungoogled_software.ungoogled_chromium/x86_64/stable/active/export/bin/io.github.ungoogled_software.ungoogled_chromium" export CHROME_EXECUTABLE="/var/lib/flatpak/app/com.brave.Browser/x86_64/stable/active/export/bin/com.brave.Browser"
export PUB_CACHE="$XDG_DATA_HOME/pub-cache" export PUB_CACHE="$XDG_DATA_HOME/pub-cache"
export FLUTTER_ROOT="$XDG_LIB_HOME/flutter" export FLUTTER_ROOT="$XDG_LIB_HOME/flutter"
export FLUTTER_ANALYTICS_DISABLED=true export FLUTTER_ANALYTICS_DISABLED=true
@ -51,15 +47,9 @@ export ANDROID_SDK_ROOT="$ANDROID_HOME"
export ANDROID_USER_HOME="$XDG_DATA_HOME/android" export ANDROID_USER_HOME="$XDG_DATA_HOME/android"
export ANDROID_EMULATOR_HOME="$ANDROID_USER_HOME" export ANDROID_EMULATOR_HOME="$ANDROID_USER_HOME"
export ANDROID_AVD_HOME="$ANDROID_USER_HOME/avd" export ANDROID_AVD_HOME="$ANDROID_USER_HOME/avd"
export JAVA_HOME="/usr/lib/jvm/openjdk21" export JAVA_HOME="/usr/lib/jvm/jre-17-openjdk"
export GRADLE_USER_HOME="$XDG_DATA_HOME/gradle" export GRADLE_USER_HOME="$XDG_DATA_HOME/gradle"
## Dotnet
export DOTNET_CLI_HOME="$XDG_LIB_HOME/dotnet"
export DOTNET_ROOT="$DOTNET_CLI_HOME"
export DOTNET_CLI_TELEMETRY_OPTOUT=true
export DOTENT_SKIP_FIRST_TIME_EXPERIENCE=true
# Set path # Set path
## local bin paths ## local bin paths
if [ -d "$HOME/.bin" ]; then if [ -d "$HOME/.bin" ]; then
@ -98,14 +88,9 @@ if [ -d "$ANDROID_HOME/tools/bin" ]; then
PATH="$ANDROID_HOME/tools/bin:$PATH" PATH="$ANDROID_HOME/tools/bin:$PATH"
fi fi
## dotnet cli
if [ -d $DOTNET_CLI_HOME ]; then
PATH="$DOTNET_CLI_HOME:$PATH"
fi
## dotnet sdk tools ## dotnet sdk tools
if [ -d $DOTNET_CLI_HOME/.dotnet/tools ]; then if [ -d $DOTNET_CLI_HOME/tools ]; then
PATH="$DOTNET_CLI_HOME/.dotnet/tools:$PATH" PATH="$DOTNET_CLI_HOME/tools:$PATH"
fi fi
## AppImage applications ## AppImage applications
@ -123,11 +108,16 @@ if [ ! -d "$WGETDIR" ] || [ ! -d "$GNUPGHOME" ]; then
mkdir -p "$WGETDIR" "$GNUPGHOME" mkdir -p "$WGETDIR" "$GNUPGHOME"
fi fi
# export SSH_AUTH_SOCK
if [[ -z "${SSH_CONNECTION}" ]]; then
export SSH_AUTH_SOCK="$XDG_RUNTIME_DIR/ssh-agent.socket"
fi
# Bashrc # Bashrc
source "$BASHRC" source "$BASHRC"
# Starting xsession # Starting Hyprland
if [ -z "$DISPLAY" ] && [ "$(tty)" = "/dev/tty1" ]; then if [ -z "$DISPLAY" ] && [ "$(tty)" = "/dev/tty1" ]; then
startx "$XINITRC" -- vt1 -keeptty &>> /dev/null exec Hyprland &>/dev/null
logout logout
fi fi

View file

@ -3,7 +3,7 @@ export TERM="xterm-256color" # getting proper colors
export HISTCONTROL=ignoredups:erasedups # no duplicate entries export HISTCONTROL=ignoredups:erasedups # no duplicate entries
### "bat" as manpager ### "bat" as manpager
export MANPAGER="batman" export MANPAGER="sh -c 'sed -u -e \"s/\\x1B\[[0-9;]*m//g; s/.\\x08//g\" | bat -p -lman'"
# use bash-completion, if available # use bash-completion, if available
[[ $PS1 && -f /usr/share/bash-completion/bash_completion ]] && \ [[ $PS1 && -f /usr/share/bash-completion/bash_completion ]] && \
@ -111,9 +111,6 @@ alias \
# fastfetch as neofetch # fastfetch as neofetch
[ -x "$(command -v fastfetch)" ] && alias neofetch="fastfetch" [ -x "$(command -v fastfetch)" ] && alias neofetch="fastfetch"
# btop as htop
[ -x "$(command -v btop)" ] && alias htop="btop"
# use lunarvim or neovim for vim if present. # use lunarvim or neovim for vim if present.
if [ -x "$(command -v $HOME/.local/bin/lvim)" ]; then if [ -x "$(command -v $HOME/.local/bin/lvim)" ]; then
alias vim="$HOME/.local/bin/lvim" alias vim="$HOME/.local/bin/lvim"
@ -131,12 +128,11 @@ fi
# function to detect os and assign aliases to package managers # function to detect os and assign aliases to package managers
alias \ alias \
xbu="sudo xbps-install -Su" \ pkg-update="sudo dnf update" \
xbi="sudo xbps-install -S" \ pkg-install="sudo dnf install" \
xbr="sudo xbps-remove -R" \ pkg-remove="sudo dnf remove" \
xbrs="sudo xbps-remove" \ pkg-clean="sudo dnf autoremove" \
xbc="sudo xbps-remove -Oo" \ pkg-search="sudo dnf search"
xbs="sudo xbps-query -R"
# colorize grep output (good for log files) # colorize grep output (good for log files)
alias \ alias \
@ -179,9 +175,9 @@ alias \
# power management # power management
alias \ alias \
po="loginctl poweroff" \ po="systemctl poweroff" \
sp="loginctl suspend" \ sp="systemctl suspend" \
rb="loginctl reboot" rb="systemctl reboot"
# file management # file management
alias \ alias \
@ -223,62 +219,11 @@ alias \
wfi-off="nmcli radio wifi off" \ wfi-off="nmcli radio wifi off" \
blt="bluetoothctl" blt="bluetoothctl"
### PROMPT # android emulator
# get current branch in git repo alias avd="QT_QPA_PLATFORM=xcb emulator -avd Pixel_7_Pro_API_35"
function parse_git_branch() { alias avds="emulator -list-avds"
BRANCH=$(git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/') alias avde="QT_QPA_PLATFORM=xcb emulator -avd"
if [ ! "${BRANCH}" == "" ]; then
STAT=$(parse_git_dirty)
echo "[${BRANCH}${STAT}]"
else
echo ""
fi
}
# get current branch in git repo # starship prompt
function parse_git_branch() { eval "$(starship init bash)"
BRANCH=$(git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/') eval "$(zoxide init bash)"
if [ ! "${BRANCH}" == "" ]; then
STAT=$(parse_git_dirty)
echo "[${BRANCH}${STAT}]"
else
echo ""
fi
}
# get current status of git repo
function parse_git_dirty {
status=$(git status 2>&1 | tee)
dirty=$(echo -n "${status}" 2> /dev/null | grep "modified:" &> /dev/null; echo "$?")
untracked=$(echo -n "${status}" 2> /dev/null | grep "Untracked files" &> /dev/null; echo "$?")
ahead=$(echo -n "${status}" 2> /dev/null | grep "Your branch is ahead of" &> /dev/null; echo "$?")
newfile=$(echo -n "${status}" 2> /dev/null | grep "new file:" &> /dev/null; echo "$?")
renamed=$(echo -n "${status}" 2> /dev/null | grep "renamed:" &> /dev/null; echo "$?")
deleted=$(echo -n "${status}" 2> /dev/null | grep "deleted:" &> /dev/null; echo "$?")
bits=''
if [ "${renamed}" == "0" ]; then
bits=">${bits}"
fi
if [ "${ahead}" == "0" ]; then
bits="*${bits}"
fi
if [ "${newfile}" == "0" ]; then
bits="+${bits}"
fi
if [ "${untracked}" == "0" ]; then
bits="?${bits}"
fi
if [ "${deleted}" == "0" ]; then
bits="x${bits}"
fi
if [ "${dirty}" == "0" ]; then
bits="!${bits}"
fi
if [ ! "${bits}" == "" ]; then
echo " ${bits}"
else
echo ""
fi
}
export PS1="[\[\e[31m\]\u\[\e[m\]\[\e[35m\]@\[\e[m\]\[\e[32m\]\h\[\e[m\]] [\[\e[33m\]\W\[\e[m\]\[\e[34m\]\`parse_git_branch\`\[\e[m\]] 󱞪 "

View file

@ -1,6 +0,0 @@
#!/bin/sh
if [ -f "$1" ]; then
col -bx < "$1" | bat --language man --plain
else
col -bx | bat --language man --plain
fi

View file

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" version="1">
<rect style="fill:#783535" width="16" height="16" x="0" y="0" rx=".8" ry=".8"/>
<path style="fill:#f1e9de" d="m 4.0778022,3.0000069 c -0.048735,0.5708172 0.1988144,2.400385 0.1782184,2.5909634 0.014861,0.2607783 0.2526897,0.3302782 0.2526897,0.3302782 L 4.80112,5.9278185 C 4.8868949,5.5236132 5.0105912,5.1394927 5.2427381,5 H 7 v 7.00866 L 6.011623,11.99134 5.988377,11.00552 5.3453462,10.99448 l -0.2024855,2.005513 4.4909013,5e-6 0.501981,-0.485703 C 9.7981732,12.401877 9.1429842,12.301437 9,11.638717 V 4 h 2.324981 c 0.07628,0.079818 -0.346846,0.5594016 -0.271767,0.630798 0.335976,0.3194996 0.585859,0.540103 0.875354,0.5326994 V 3.0000015 Z"/>
</svg>

After

Width:  |  Height:  |  Size: 738 B

View file

@ -0,0 +1,7 @@
<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" version="1">
<rect style="opacity:0.2" width="20" height="20" x="1" y="1.5" rx="1" ry="1"/>
<rect style="fill:#783535" width="20" height="20" x="1" y="1" rx="1" ry="1"/>
<path style="opacity:0.2" d="m 5.508917,4.999993 c -0.068229,0.799145 0.2783405,2.2997475 0.249506,2.5665575 0.020805,0.36509 0.353766,0.46239 0.353766,0.46239 l 0.409374,0.0092 c 0.120085,-0.56589 0.29326,-0.843005 0.618266,-1.038295 H 9 V 18.036544 L 8.002341,18.012294 7.969796,17.012892 7.28348,16.997442 7,18.999993 12.787269,19 13.490042,18.320015 C 13.017445,18.162625 12.200178,18.02201 12,17.0942 V 5.999548 h 3.154978 C 15.261761,6.111293 14.669393,6.682703 14.774504,6.782658 15.24487,7.229958 15.594707,7.538803 16,7.528438 V 4.9999855 Z"/>
<path style="fill:#f1e9de" d="m 5.508917,4 c -0.068229,0.799145 0.2783405,2.2997475 0.249506,2.5665575 0.020805,0.36509 0.353766,0.46239 0.353766,0.46239 l 0.409374,0.0092 c 0.120085,-0.56589 0.29326,-0.843005 0.618266,-1.038295 H 9 V 17.036551 L 8.002341,17.012301 7.969796,16.012899 7.28348,15.997449 7,18 l 5.787269,7e-6 0.702773,-0.679985 C 13.017445,17.162632 12.200178,17.022017 12,16.094207 V 4.999555 h 3.154978 C 15.261761,5.1113 14.669393,5.68271 14.774504,5.782665 15.24487,6.229965 15.594707,6.53881 16,6.528445 V 3.9999925 Z"/>
<path style="opacity:0.1;fill:#ffffff" d="M 2,1 C 1.446,1 1,1.446 1,2 v 0.5 c 0,-0.554 0.446,-1 1,-1 h 18 c 0.554,0 1,0.446 1,1 V 2 C 21,1.446 20.554,1 20,1 Z"/>
</svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

View file

@ -0,0 +1,7 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" version="1">
<rect style="opacity:0.2" width="20" height="20" x="2" y="2.5" rx="1" ry="1"/>
<rect style="fill:#783535" width="20" height="20" x="2" y="2" rx="1" ry="1"/>
<path style="opacity:0.2" d="m 6.508917,5.999993 c -0.068229,0.799145 0.2783405,2.2997475 0.249506,2.5665575 0.020805,0.36509 0.353766,0.46239 0.353766,0.46239 l 0.409374,0.0092 c 0.120085,-0.56589 0.29326,-0.843005 0.618266,-1.038295 H 10 V 19.036544 L 9.002341,19.012294 8.969796,18.012892 8.28348,17.997442 8,19.999993 13.787269,20 14.490042,19.320015 C 14.017445,19.162625 13.200178,19.02201 13,18.0942 V 6.999548 h 3.154978 C 16.261761,7.111293 15.669393,7.682703 15.774504,7.782658 16.24487,8.229958 16.594707,8.538803 17,8.528438 V 5.9999855 Z"/>
<path style="fill:#f1e9de" d="m 6.508917,5 c -0.068229,0.799145 0.2783405,2.2997475 0.249506,2.5665575 0.020805,0.36509 0.353766,0.46239 0.353766,0.46239 l 0.409374,0.0092 c 0.120085,-0.56589 0.29326,-0.843005 0.618266,-1.038295 H 10 V 18.036551 L 9.002341,18.012301 8.969796,17.012899 8.28348,16.997449 8,19 l 5.787269,7e-6 0.702773,-0.679985 C 14.017445,18.162632 13.200178,18.022017 13,17.094207 V 5.999555 h 3.154978 C 16.261761,6.1113 15.669393,6.68271 15.774504,6.782665 16.24487,7.229965 16.594707,7.53881 17,7.528445 V 4.9999925 Z"/>
<path style="opacity:0.1;fill:#ffffff" d="M 3,2 C 2.446,2 2,2.446 2,3 v 0.5 c 0,-0.554 0.446,-1 1,-1 h 18 c 0.554,0 1,0.446 1,1 V 3 C 22,2.446 21.554,2 21,2 Z"/>
</svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

View file

@ -0,0 +1,7 @@
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" version="1">
<rect style="opacity:0.2" width="28" height="28" x="2" y="3" rx="1.4" ry="1.4"/>
<rect style="fill:#783535" width="28" height="28" x="2" y="2" rx="1.4" ry="1.4"/>
<path style="opacity:0.2" d="m 8.0127404,7.0000082 c -0.09747,1.1416345 0.3976289,3.9998458 0.3564368,4.3810018 0.029721,0.521557 0.5053794,0.660557 0.5053794,0.660557 l 0.5848194,0.01314 C 9.6309258,11.246297 9.8783179,10.278985 10.342613,10 h 2.657384 v 15.01732 l -1.92504,-0.03464 -0.04649,-1.971645 -0.98045,-0.02207 -0.404974,4.011026 9.481617,10e-6 1.003961,-0.971406 C 19.453484,25.803748 18.28596,25.60287 17.999992,24.277428 V 9 h 4.707189 C 22.859728,9.1596356 22.013488,9.9185081 22.163647,10.061301 22.835598,10.7003 23.42101,11.141506 24,11.126699 V 6.9999975 Z"/>
<path style="fill:#f1e9de" d="m 8.0127404,6.0000082 c -0.09747,1.1416345 0.3976289,3.9998458 0.3564368,4.3810018 0.029721,0.521557 0.5053794,0.660557 0.5053794,0.660557 l 0.5848194,0.01314 C 9.6309258,10.246297 9.8783179,9.2789854 10.342613,9 h 2.657384 v 15.01732 l -1.92504,-0.03464 -0.04649,-1.971645 -0.98045,-0.02207 -0.404974,4.011026 9.481617,10e-6 1.003961,-0.971406 C 19.453484,24.803748 18.28596,24.60287 17.999992,23.277428 V 8 h 4.707189 C 22.859728,8.1596356 22.013488,8.9185081 22.163647,9.0613008 22.835598,9.7003 23.42101,10.141506 24,10.126699 V 5.9999975 Z"/>
<path style="fill:#ffffff;opacity:0.1" d="M 3.4003906 2 C 2.6247906 2 2 2.6247906 2 3.4003906 L 2 4.4003906 C 2 3.6247906 2.6247906 3 3.4003906 3 L 28.599609 3 C 29.375209 3 30 3.6247906 30 4.4003906 L 30 3.4003906 C 30 2.6247906 29.375209 2 28.599609 2 L 3.4003906 2 z"/>
</svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

View file

@ -0,0 +1,7 @@
<svg xmlns="http://www.w3.org/2000/svg" width="48" height="48" version="1">
<rect style="opacity:0.2" width="40" height="40" x="4" y="5" rx="2" ry="2"/>
<rect style="fill:#783535" width="40" height="40" x="4" y="4" rx="2" ry="2"/>
<path style="opacity:0.2" d="m 13.017834,11 c -0.136458,1.59829 0.556681,5.59979 0.499012,6.13341 0.04161,0.73018 0.707532,0.92478 0.707532,0.92478 l 0.818748,0.0184 C 15.283296,16.94481 15.629646,16.39058 16.279658,16 H 20 V 36.072755 L 18.004682,36.024255 17.939592,34.02545 16.56696,33.99455 16,39 l 12.574537,1.5e-5 1.405547,-1.35997 C 29.034891,37.325265 27.400356,37.044035 27,35.188415 V 14 h 6.309958 c 0.213565,0.22349 -0.971171,1.36631 -0.76095,1.56622 0.940734,0.8946 1.640407,1.51229 2.450994,1.49156 v -6.057795 z"/>
<path style="fill:#f1e9de" d="m 13.017834,10 c -0.136458,1.59829 0.556681,5.59979 0.499012,6.13341 0.04161,0.73018 0.707532,0.92478 0.707532,0.92478 l 0.818748,0.0184 C 15.283296,15.94481 15.629646,15.39058 16.279658,15 H 20 V 35.072755 L 18.004682,35.024255 17.939592,33.02545 16.56696,32.99455 16,38 l 12.574537,1.5e-5 1.405547,-1.35997 C 29.034891,36.325265 27.400356,36.044035 27,34.188415 V 13 h 6.309958 c 0.213565,0.22349 -0.971171,1.36631 -0.76095,1.56622 0.940734,0.8946 1.640407,1.51229 2.450994,1.49156 V 9.999985 Z"/>
<path style="fill:#ffffff;opacity:0.1" d="M 6 4 C 4.892 4 4 4.892 4 6 L 4 7 C 4 5.892 4.892 5 6 5 L 42 5 C 43.108 5 44 5.892 44 7 L 44 6 C 44 4.892 43.108 4 42 4 L 6 4 z"/>
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

View file

@ -0,0 +1,7 @@
<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" version="1">
<rect style="opacity:0.2" width="56" height="56" x="4" y="5" rx="2.8" ry="2.8"/>
<rect style="fill:#783535" width="56" height="56" x="4" y="4" rx="2.8" ry="2.8"/>
<path style="opacity:0.2" d="m 16.025481,13.000014 c -0.19494,2.283269 0.795258,7.999692 0.712873,8.762004 0.05944,1.043114 1.010759,1.321114 1.010759,1.321114 l 1.169639,0.02628 c 0.3431,-1.61682 0.837884,-2.551443 1.766474,-3.109413 h 5.314768 v 29.034639 l -2.850452,-0.06928 -0.09298,-2.943289 -1.9609,-0.04414 L 20.285714,52.99998 38.24932,53 40.257242,51.057188 C 38.906968,50.607494 36.57192,50.205738 35.999984,47.554854 V 16.999998 h 9.414378 c 0.305094,0.319271 -1.387386,1.837016 -1.087068,2.122602 1.343902,1.277998 2.514726,2.16041 3.672706,2.130796 v -8.253403 z"/>
<path style="fill:#f1e9de" d="m 16.025481,12.000016 c -0.19494,2.283269 0.795258,7.999692 0.712873,8.762004 0.05944,1.043114 1.010759,1.321114 1.010759,1.321114 l 1.169639,0.02628 c 0.3431,-1.61682 0.837884,-2.551442 1.766474,-3.109413 h 5.314768 V 48.03464 l -2.850452,-0.06928 -0.09298,-2.943289 -1.9609,-0.04414 -0.809948,7.022051 17.963606,2e-5 2.007922,-1.942812 C 38.906968,49.607496 36.57192,49.20574 35.999984,46.554856 V 16 h 9.414378 c 0.305094,0.319271 -1.387386,1.837016 -1.087068,2.122602 C 45.671196,19.4006 46.84202,20.283012 48,20.253398 v -8.253403 z"/>
<path style="opacity:0.1;fill:#ffffff" d="M 6.8007812 4 C 5.2495812 4 4 5.2495812 4 6.8007812 L 4 7.8007812 C 4 6.2495813 5.2495812 5 6.8007812 5 L 57.199219 5 C 58.750419 5 60 6.2495812 60 7.8007812 L 60 6.8007812 C 60 5.2495813 58.750419 4 57.199219 4 L 6.8007812 4 z"/>
</svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

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