diff --git a/.github/workflows/docs.yaml b/.github/workflows/docs.yaml new file mode 100644 index 0000000..06dc541 --- /dev/null +++ b/.github/workflows/docs.yaml @@ -0,0 +1,34 @@ +# by https://github.com/danth/stylix/blob/master/.github/workflows/docs.yml +name: Docs +on: + push: + branches: + - main +jobs: + build: + name: Build + permissions: + contents: read + runs-on: nixos-latest + steps: + - name: Nix Config + run: | + mkdir -p $HOME/.config + mkdir -p $HOME/.config/nix + echo experimental-features = nix-command flakes pipe-operators >> $HOME/.config/nix/nix.conf + echo access-tokens = github.com=${{ secrets.GITHUBTOKEN }} >> $HOME/.config/nix/nix.conf + nix profile install nixpkgs#nodejs + - name: Build docs + run: nix -L build git+https://git.dashie.org/${{ forgejo.repository }}.git?rev=${{ forgejo.sha }}#docs --no-write-lock-file + - name: Prepare docs for upload + run: cp -r --dereference --no-preserve=mode,ownership result/ public/ + # - name: Upload artifact + # uses: https://data.forgejo.org/forgejo/upload-artifact@v4 + # with: + # path: public/ + - name: Publish Page + uses: https://data.forgejo.org/actions/git-pages@v2 + with: + site: https://username.pages.dashie.org/reponame/ + token: ${{ forge.token }} + source: public/ diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml new file mode 100644 index 0000000..e92ddfd --- /dev/null +++ b/.github/workflows/pr.yaml @@ -0,0 +1,35 @@ +# inspired by https://github.com/danth/stylix/blob/master/.github/workflows/docs.yml +name: PR check +on: + pull_request: + branches: ["main"] +jobs: + build: + name: check + permissions: + contents: read + runs-on: ubuntu-latest + steps: + - name: Install Nix + uses: DeterminateSystems/nix-installer-action@main + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + extra-conf: | + extra-experimental-features = nix-command flakes pipe-operators + - name: Set up cache + uses: DeterminateSystems/magic-nix-cache-action@main + - name: action + uses: cachix/install-nix-action@v25 + with: + nix_path: nixpkgs=channel:nixos-unstable + - name: cache + uses: cachix/cachix-action@v16 + with: + name: dashnix + authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}' + - name: Linter check + run: nix run --no-write-lock-file github:${{ github.repository }}/${{ github.sha }}#lint -- check + - name: Format check + run: nix run --no-write-lock-file github:${{ github.repository }}/${{ github.sha }}#format -- --check . + - name: Build docs + run: nix -L build github:${{ github.repository }}/${{ github.sha }}#docs --no-write-lock-file diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml new file mode 100644 index 0000000..1984fb1 --- /dev/null +++ b/.github/workflows/release.yaml @@ -0,0 +1,29 @@ +# by https://github.com/danth/stylix/blob/master/.github/workflows/docs.yml +name: Release +on: + release: + types: [created] +jobs: + build: + name: Release + permissions: write-all + runs-on: ubuntu-latest + steps: + - name: Install Nix + uses: DeterminateSystems/nix-installer-action@main + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + extra-conf: | + extra-experimental-features = nix-command flakes pipe-operators + - name: Set up cache + uses: DeterminateSystems/magic-nix-cache-action@main + - name: Build ISO + run: nix build github:${{ github.repository }}/${{ github.sha }}#iso --no-write-lock-file + - name: Prepare ISO for upload + run: | + cp -r --dereference --no-preserve=mode,ownership result/iso/DashNix.iso DashNix.iso + - name: upload ISO + uses: softprops/action-gh-release@v1 + with: + files: | + DashNix.iso diff --git a/.gitignore b/.gitignore index 9556cca..f610716 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,3 @@ -/nvim/plugged/* +result/* +result +flake.lock diff --git a/.zshrc b/.zshrc deleted file mode 100644 index 828c5be..0000000 --- a/.zshrc +++ /dev/null @@ -1,159 +0,0 @@ -if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then - source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" -fi - -# The following lines were added by compinstall -zstyle :compinstall filename '$HOME/.zshrc' - -autoload -Uz compinit -compinit -########## - -HISTFILE=~/.histfile -HISTSIZE=1000 -SAVEHIST=1000 -# End of lines configured by zsh-newuser-install -# -source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh -source /usr/share/zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh -source /usr/share/zsh-theme-powerlevel10k/powerlevel10k.zsh-theme - -# To customize prompt, run `p10k configure` or edit ~/.p10k.zsh. -[[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh -typeset -g POWERLEVEL9K_INSTANT_PROMPT=quiet - -export PATH=$PATH:~/.local/bin -export PATH=$PATH:~/.cargo/bin -export GPG_TTY=$TTY -export TEXMFHOME=$HOME/.texmf -export MANGOHUD_CONFIG=position=top-right,font_scale=0.7,round_corners=10.0 -export MOZ_ENABLE_WAYLAND=1 -export QT_AUTO_SCREEN_SCALE_FACTOR=0 - -alias sudo='sudo ' -alias ls='lsd' -alias :q='exit' -alias gh='git push origin' -alias gl='git pull origin' -alias gm='git commit -m' -alias ga="git add -A" -alias g+='bear -- g++ -Wextra -Werror -std=c++20' - -# zoxide -## ============================================================================= -# -# Utility functions for zoxide. -# - -# pwd based on the value of _ZO_RESOLVE_SYMLINKS. -function __zoxide_pwd() { - \builtin pwd -L -} - -# cd + custom logic based on the value of _ZO_ECHO. -function __zoxide_cd() { - # shellcheck disable=SC2164 - \builtin cd -- "$@" >/dev/null -} - -# ============================================================================= -# -# Hook configuration for zoxide. -# - -# Hook to add new entries to the database. -function __zoxide_hook() { - # shellcheck disable=SC2312 - \command zoxide add -- "$(__zoxide_pwd)" -} - -# Initialize hook. -# shellcheck disable=SC2154 -if [[ ${precmd_functions[(Ie)__zoxide_hook]:-} -eq 0 ]] && [[ ${chpwd_functions[(Ie)__zoxide_hook]:-} -eq 0 ]]; then - chpwd_functions+=(__zoxide_hook) -fi - -# ============================================================================= -# -# When using zoxide with --no-cmd, alias these internal functions as desired. -# - -__zoxide_z_prefix='z#' - -# Jump to a directory using only keywords. -function __zoxide_z() { - # shellcheck disable=SC2199 - if [[ "$#" -eq 0 ]]; then - __zoxide_cd ~ - elif [[ "$#" -eq 1 ]] && { [[ -d "$1" ]] || [[ "$1" = '-' ]] || [[ "$1" =~ ^[-+][0-9]$ ]]; }; then - __zoxide_cd "$1" - elif [[ "$@[-1]" == "${__zoxide_z_prefix}"* ]]; then - # shellcheck disable=SC2124 - \builtin local result="${@[-1]}" - __zoxide_cd "${result:${#__zoxide_z_prefix}}" - else - \builtin local result - # shellcheck disable=SC2312 - result="$(\command zoxide query --exclude "$(__zoxide_pwd)" -- "$@")" && - __zoxide_cd "${result}" - fi -} - -# Jump to a directory using interactive search. -function __zoxide_zi() { - \builtin local result - result="$(\command zoxide query -i -- "$@")" && __zoxide_cd "${result}" -} - -# ============================================================================= -# -# Commands for zoxide. Disable these using --no-cmd. -# - -\builtin unalias z &>/dev/null || \builtin true -function z() { - __zoxide_z "$@" -} - -\builtin unalias zi &>/dev/null || \builtin true -function zi() { - __zoxide_zi "$@" -} - -if [[ -o zle ]]; then - function __zoxide_z_complete() { - # Only show completions when the cursor is at the end of the line. - # shellcheck disable=SC2154 - [[ "${#words[@]}" -eq "${CURRENT}" ]] || return - - if [[ "${#words[@]}" -eq 2 ]]; then - _files -/ - elif [[ "${words[-1]}" == '' ]]; then - \builtin local result - # shellcheck disable=SC2086,SC2312 - if result="$(\command zoxide query --exclude "$(__zoxide_pwd)" -i -- ${words[2,-1]})"; then - __zoxide_result="${result}" - else - __zoxide_result='' - fi - \builtin printf '\e[5n' - fi - } - - function __zoxide_z_complete_helper() { - \builtin local result="${__zoxide_z_prefix}${__zoxide_result}" - # shellcheck disable=SC2296 - [[ -n "${__zoxide_result}" ]] && LBUFFER="${LBUFFER}${(q-)result}" - \builtin zle reset-prompt - } - - \builtin zle -N __zoxide_z_complete_helper - \builtin bindkey "\e[0n" __zoxide_z_complete_helper - if [[ "${+functions[compdef]}" -ne 0 ]]; then - \compdef -d z - \compdef -d zi - \compdef __zoxide_z_complete z - fi -fi - -# ============================================================================= diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..7b6bec5 --- /dev/null +++ b/LICENSE @@ -0,0 +1,841 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser 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 +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. + + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + 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 . + +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: + + Copyright (C) + 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 +. + + 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 +. + diff --git a/README.md b/README.md deleted file mode 100644 index 13a1458..0000000 --- a/README.md +++ /dev/null @@ -1,6 +0,0 @@ -# dotFiles - -## General -Personal Dotfiles with many being combined together to get this, and other things coming from myself directly. - -## [Keymaps](nvim/README.md) diff --git a/README.md b/README.md new file mode 120000 index 0000000..95cf2af --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +docs/src/README.md \ No newline at end of file diff --git a/alacritty/alacritty.yml b/alacritty/alacritty.yml deleted file mode 100644 index 9dbbb33..0000000 --- a/alacritty/alacritty.yml +++ /dev/null @@ -1,878 +0,0 @@ -# Configuration for Alacritty, the GPU enhanced terminal emulator. - -# Import additional configuration files -# -# Imports are loaded in order, skipping all missing files, with the importing -# file being loaded last. If a field is already present in a previous import, it -# will be replaced. -# -# All imports must either be absolute paths starting with `/`, or paths relative -# to the user's home directory starting with `~/`. -#import: -# - /path/to/alacritty.yml - -# Any items in the `env` entry below will be added as -# environment variables. Some entries may override variables -# set by alacritty itself. -#env: - # TERM variable - # - # This value is used to set the `$TERM` environment variable for - # each instance of Alacritty. If it is not present, alacritty will - # check the local terminfo database and use `alacritty` if it is - # available, otherwise `xterm-256color` is used. - #TERM: alacritty - -#window: - # Window dimensions (changes require restart) - # - # Number of lines/columns (not pixels) in the terminal. The number of columns - # must be at least `2`, while using a value of `0` for columns and lines will - # fall back to the window manager's recommended size. - #dimensions: - # columns: 0 - # lines: 0 - - # Window position (changes require restart) - # - # Specified in number of pixels. - # If the position is not set, the window manager will handle the placement. - #position: - # x: 0 - # y: 0 - - # Window padding (changes require restart) - # - # Blank space added around the window in pixels. This padding is scaled - # by DPI and the specified value is always added at both opposing sides. - #padding: - # x: 0 - # y: 0 - - # Spread additional padding evenly around the terminal content. - #dynamic_padding: false - - # Window decorations - # - # Values for `decorations`: - # - full: Borders and title bar - # - none: Neither borders nor title bar - # - # Values for `decorations` (macOS only): - # - transparent: Title bar, transparent background and title bar buttons - # - buttonless: Title bar, transparent background and no title bar buttons - #decorations: full - - # Background opacity - # - # Window opacity as a floating point number from `0.0` to `1.0`. - # The value `0.0` is completely transparent and `1.0` is opaque. - window: - opacity: 0.85 - - # Startup Mode (changes require restart) - # - # Values for `startup_mode`: - # - Windowed - # - Maximized - # - Fullscreen - # - # Values for `startup_mode` (macOS only): - # - SimpleFullscreen - #startup_mode: Windowed - - # Window title - #title: Alacritty - - # Allow terminal applications to change Alacritty's window title. - #dynamic_title: true - - # Window class (Linux/BSD only): - #class: - # Application instance name - #instance: Alacritty - # General application class - #general: Alacritty - - # GTK theme variant (Linux/BSD only) - # - # Override the variant of the GTK theme. Commonly supported values are `dark` - # and `light`. Set this to `None` to use the default theme variant. - #gtk_theme_variant: None - -#scrolling: - # Maximum number of lines in the scrollback buffer. - # Specifying '0' will disable scrolling. - #history: 10000 - - # Scrolling distance multiplier. - #multiplier: 3 - -# Font configuration -#font: - # Normal (roman) font face - #normal: 'FuraMono Nerd Font' - # - # Default: - # - (macOS) Menlo - # - (Linux/BSD) monospace - # - (Windows) Consolas - #family: monospace - - # The `style` can be specified to pick a specific face. - #style: Regular - - # Bold font face - # bold: 'FuraMono Nerf Font bold' - # - # If the bold family is not specified, it will fall back to the - # value specified for the normal font. - #family: monospace - - # The `style` can be specified to pick a specific face. - #style: Bold - - # Italic font face - #italic: - # Font family - # - # If the italic family is not specified, it will fall back to the - # value specified for the normal font. - #family: monospace - - # The `style` can be specified to pick a specific face. - #style: Italic - - # Bold italic font face - #bold_italic: - # Font family - # - # If the bold italic family is not specified, it will fall back to the - # value specified for the normal font. - #family: monospace - - # The `style` can be specified to pick a specific face. - #style: Bold Italic - - # Point size - #size: 11.0 - - # Offset is the extra space around each character. `offset.y` can be thought - # of as modifying the line spacing, and `offset.x` as modifying the letter - # spacing. - #offset: - # x: 0 - # y: 0 - - # Glyph offset determines the locations of the glyphs within their cells with - # the default being at the bottom. Increasing `x` moves the glyph to the - # right, increasing `y` moves the glyph upward. - #glyph_offset: - # x: 0 - # y: 0 - - # Thin stroke font rendering (macOS only) - # - # Thin strokes are suitable for retina displays, but for non-retina screens - # it is recommended to set `use_thin_strokes` to `false`. - #use_thin_strokes: true - - # Use built-in font for box drawing characters. - # - # If `true`, Alacritty will use a custom built-in font for box drawing - # characters (Unicode points 2500 - 259f). - # - #builtin_box_drawing: true - -# If `true`, bold text is drawn using the bright color variants. -#draw_bold_text_with_bright_colors: false - -# Colors (Tomorrow Night) - colors: - # Default colors - primary: - background: '#1d1f21' - foreground: '#c5c8c6' - - # Bright and dim foreground colors - # - # The dimmed foreground color is calculated automatically if it is not - # present. If the bright foreground color is not set, or - # `draw_bold_text_with_bright_colors` is `false`, the normal foreground - # color will be used. - #dim_foreground: '#828482' - #bright_foreground: '#eaeaea' - - # Cursor colors - # - # Colors which should be used to draw the terminal cursor. - # - # Allowed values are CellForeground/CellBackground, which reference the - # affected cell, or hexadecimal colors like #ff00ff. - cursor: - text: CellBackground - cursor: CellForeground - - # Vi mode cursor colors - # - # Colors for the cursor when the vi mode is active. - # - # Allowed values are CellForeground/CellBackground, which reference the - # affected cell, or hexadecimal colors like #ff00ff. - vi_mode_cursor: - text: CellBackground - cursor: CellForeground - - # Search colors - # - # Colors used for the search bar and match highlighting. - search: - # Allowed values are CellForeground/CellBackground, which reference the - # affected cell, or hexadecimal colors like #ff00ff. - matches: - foreground: '#000000' - background: '#ffffff' - focused_match: - foreground: '#ffffff' - background: '#000000' - - colors.footer_bar: - background: '#c5c8c6' - foreground: '#1d1f21' - - # Keyboard regex hints - hints: - # First character in the hint label - # - # Allowed values are CellForeground/CellBackground, which reference the - # affected cell, or hexadecimal colors like #ff00ff. - start: - foreground: '#1d1f21' - background: '#e9ff5e' - - # All characters after the first one in the hint label - # - # Allowed values are CellForeground/CellBackground, which reference the - # affected cell, or hexadecimal colors like #ff00ff. - end: - foreground: '#e9ff5e' - background: '#1d1f21' - - # Line indicator - # - # Color used for the indicator displaying the position in history during - # search and vi mode. - # - # By default, these will use the opposing primary color. - #line_indicator: - # foreground: None - # background: None - - # Selection colors - # - # Colors which should be used to draw the selection area. - # - # Allowed values are CellForeground/CellBackground, which reference the - # affected cell, or hexadecimal colors like #ff00ff. - selection: - text: CellBackground - background: CellForeground - - # Normal colors - normal: - black: '#1d1f21' - red: '#cc6666' - green: '#b5bd68' - yellow: '#f0c674' - blue: '#81a2be' - magenta: '#b294bb' - cyan: '#8abeb7' - white: '#c5c8c6' - - # Bright colors - bright: - black: '#666666' - red: '#d54e53' - green: '#b9ca4a' - yellow: '#e7c547' - blue: '#7aa6da' - magenta: '#c397d8' - cyan: '#70c0b1' - white: '#eaeaea' - - # Dim colors - # - # If the dim colors are not set, they will be calculated automatically based - # on the `normal` colors. - dim: - black: '#131415' - red: '#864343' - green: '#777c44' - yellow: '#9e824c' - blue: '#556a7d' - magenta: '#75617b' - cyan: '#5b7d78' - white: '#828482' - - # Indexed Colors - # - # The indexed colors include all colors from 16 to 256. - # When these are not set, they're filled with sensible defaults. - # - # Example: - # `- { index: 16, color: '#ff00ff' }` - # - #indexed_colors: [] - - # Transparent cell backgrounds - # - # Whether or not `window.opacity` applies to all cell backgrounds or only to - # the default background. When set to `true` all cells will be transparent - # regardless of their background color. - #transparent_background_colors: false - -# Bell -# -# The bell is rung every time the BEL control character is received. -#bell: - # Visual Bell Animation - # - # Animation effect for flashing the screen when the visual bell is rung. - # - # Values for `animation`: - # - Ease - # - EaseOut - # - EaseOutSine - # - EaseOutQuad - # - EaseOutCubic - # - EaseOutQuart - # - EaseOutQuint - # - EaseOutExpo - # - EaseOutCirc - # - Linear - #animation: EaseOutExpo - - # Duration of the visual bell flash in milliseconds. A `duration` of `0` will - # disable the visual bell animation. - #duration: 0 - - # Visual bell animation color. - #color: '#ffffff' - - # Bell Command - # - # This program is executed whenever the bell is rung. - # - # When set to `command: None`, no command will be executed. - # - # Example: - # command: - # program: notify-send - # args: ["Hello, World!"] - # - #command: None - -#selection: - # This string contains all characters that are used as separators for - # "semantic words" in Alacritty. - #semantic_escape_chars: ",│`|:\"' ()[]{}<>\t" - - # When set to `true`, selected text will be copied to the primary clipboard. - #save_to_clipboard: false - -#cursor: - # Cursor style - #style: - # Cursor shape - # - # Values for `shape`: - # - ▇ Block - # - _ Underline - # - | Beam - #shape: Block - - # Cursor blinking state - # - # Values for `blinking`: - # - Never: Prevent the cursor from ever blinking - # - Off: Disable blinking by default - # - On: Enable blinking by default - # - Always: Force the cursor to always blink - #blinking: Off - - # Vi mode cursor style - # - # If the vi mode cursor style is `None` or not specified, it will fall back to - # the style of the active value of the normal cursor. - # - # See `cursor.style` for available options. - #vi_mode_style: None - - # Cursor blinking interval in milliseconds. - #blink_interval: 750 - - # If this is `true`, the cursor will be rendered as a hollow box when the - # window is not focused. - #unfocused_hollow: true - - # Thickness of the cursor relative to the cell width as floating point number - # from `0.0` to `1.0`. - #thickness: 0.15 - -# Live config reload (changes require restart) - live_config_reload: true - -# Shell -# -# You can set `shell.program` to the path of your favorite shell, e.g. -#`/bin/fish`. Entries in `shell.args` are passed unmodified as arguments to the -# shell. -# -# Default: -# - (macOS) /bin/bash --login -# - (Linux/BSD) user login shell -# - (Windows) powershell - shell: - program: /bin/zsh - args: - - --login - - -# Startup directory -# -# Directory the shell is started in. If this is unset, or `None`, the working -# directory of the parent process will be used. -#working_directory: None - -# Send ESC (\x1b) before characters when alt is pressed. -#alt_send_esc: true - -# Offer IPC using `alacritty msg` (unix only) -#ipc_socket: true - -#mouse: - # Click settings - # - # The `double_click` and `triple_click` settings control the time - # alacritty should wait for accepting multiple clicks as one double - # or triple click. - #double_click: { threshold: 300 } - #triple_click: { threshold: 300 } - - # If this is `true`, the cursor is temporarily hidden when typing. - #hide_when_typing: false - -# Regex hints -# -# Terminal hints can be used to find text in the visible part of the terminal -# and pipe it to other applications. -#hints: - # Keys used for the hint labels. - #alphabet: "jfkdls;ahgurieowpq" - - # List with all available hints - # - # Each hint must have a `regex` and either an `action` or a `command` field. - # The fields `mouse`, `binding` and `post_processing` are optional. - # - # The fields `command`, `binding.key`, `binding.mods`, `binding.mode` and - # `mouse.mods` accept the same values as they do in the `key_bindings` section. - # - # The `mouse.enabled` field controls if the hint should be underlined while - # the mouse with all `mouse.mods` keys held or the vi mode cursor is above it. - # - # If the `post_processing` field is set to `true`, heuristics will be used to - # shorten the match if there are characters likely not to be part of the hint - # (e.g. a trailing `.`). This is most useful for URIs. - # - # Values for `action`: - # - Copy - # Copy the hint's text to the clipboard. - # - Paste - # Paste the hint's text to the terminal or search. - # - Select - # Select the hint's text. - # - MoveViModeCursor - # Move the vi mode cursor to the beginning of the hint. - #enabled: - # - regex: "(ipfs:|ipns:|magnet:|mailto:|gemini:|gopher:|https:|http:|news:|file:|git:|ssh:|ftp:)\ - # [^\u0000-\u001F\u007F-\u009F<>\"\\s{-}\\^⟨⟩`]+" - # command: xdg-open - # post_processing: true - # mouse: - # enabled: true - # mods: None - # binding: - # key: U - # mods: Control|Shift - -# Mouse bindings -# -# Mouse bindings are specified as a list of objects, much like the key -# bindings further below. -# -# To trigger mouse bindings when an application running within Alacritty -# captures the mouse, the `Shift` modifier is automatically added as a -# requirement. -# -# Each mouse binding will specify a: -# -# - `mouse`: -# -# - Middle -# - Left -# - Right -# - Numeric identifier such as `5` -# -# - `action` (see key bindings for actions not exclusive to mouse mode) -# -# - Mouse exclusive actions: -# -# - ExpandSelection -# Expand the selection to the current mouse cursor location. -# -# And optionally: -# -# - `mods` (see key bindings) -#mouse_bindings: -# - { mouse: Right, action: ExpandSelection } -# - { mouse: Right, mods: Control, action: ExpandSelection } -# - { mouse: Middle, mode: ~Vi, action: PasteSelection } - -# Key bindings -# -# Key bindings are specified as a list of objects. For example, this is the -# default paste binding: -# -# `- { key: V, mods: Control|Shift, action: Paste }` -# -# Each key binding will specify a: -# -# - `key`: Identifier of the key pressed -# -# - A-Z -# - F1-F24 -# - Key0-Key9 -# -# A full list with available key codes can be found here: -# https://docs.rs/glutin/*/glutin/event/enum.VirtualKeyCode.html#variants -# -# Instead of using the name of the keys, the `key` field also supports using -# the scancode of the desired key. Scancodes have to be specified as a -# decimal number. This command will allow you to display the hex scancodes -# for certain keys: -# -# `showkey --scancodes`. -# -# Then exactly one of: -# -# - `chars`: Send a byte sequence to the running application -# -# The `chars` field writes the specified string to the terminal. This makes -# it possible to pass escape sequences. To find escape codes for bindings -# like `PageUp` (`"\x1b[5~"`), you can run the command `showkey -a` outside -# of tmux. Note that applications use terminfo to map escape sequences back -# to keys. It is therefore required to update the terminfo when changing an -# escape sequence. -# -# - `action`: Execute a predefined action -# -# - ToggleViMode -# - SearchForward -# Start searching toward the right of the search origin. -# - SearchBackward -# Start searching toward the left of the search origin. -# - Copy -# - Paste -# - IncreaseFontSize -# - DecreaseFontSize -# - ResetFontSize -# - ScrollPageUp -# - ScrollPageDown -# - ScrollHalfPageUp -# - ScrollHalfPageDown -# - ScrollLineUp -# - ScrollLineDown -# - ScrollToTop -# - ScrollToBottom -# - ClearHistory -# Remove the terminal's scrollback history. -# - Hide -# Hide the Alacritty window. -# - Minimize -# Minimize the Alacritty window. -# - Quit -# Quit Alacritty. -# - ToggleFullscreen -# - SpawnNewInstance -# Spawn a new instance of Alacritty. -# - CreateNewWindow -# Create a new Alacritty window from the current process. -# - ClearLogNotice -# Clear Alacritty's UI warning and error notice. -# - ClearSelection -# Remove the active selection. -# - ReceiveChar -# - None -# -# - Vi mode exclusive actions: -# -# - Open -# Perform the action of the first matching hint under the vi mode cursor -# with `mouse.enabled` set to `true`. -# - ToggleNormalSelection -# - ToggleLineSelection -# - ToggleBlockSelection -# - ToggleSemanticSelection -# Toggle semantic selection based on `selection.semantic_escape_chars`. -# -# - Vi mode exclusive cursor motion actions: -# -# - Up -# One line up. -# - Down -# One line down. -# - Left -# One character left. -# - Right -# One character right. -# - First -# First column, or beginning of the line when already at the first column. -# - Last -# Last column, or beginning of the line when already at the last column. -# - FirstOccupied -# First non-empty cell in this terminal row, or first non-empty cell of -# the line when already at the first cell of the row. -# - High -# Top of the screen. -# - Middle -# Center of the screen. -# - Low -# Bottom of the screen. -# - SemanticLeft -# Start of the previous semantically separated word. -# - SemanticRight -# Start of the next semantically separated word. -# - SemanticLeftEnd -# End of the previous semantically separated word. -# - SemanticRightEnd -# End of the next semantically separated word. -# - WordLeft -# Start of the previous whitespace separated word. -# - WordRight -# Start of the next whitespace separated word. -# - WordLeftEnd -# End of the previous whitespace separated word. -# - WordRightEnd -# End of the next whitespace separated word. -# - Bracket -# Character matching the bracket at the cursor's location. -# - SearchNext -# Beginning of the next match. -# - SearchPrevious -# Beginning of the previous match. -# - SearchStart -# Start of the match to the left of the vi mode cursor. -# - SearchEnd -# End of the match to the right of the vi mode cursor. -# -# - Search mode exclusive actions: -# - SearchFocusNext -# Move the focus to the next search match. -# - SearchFocusPrevious -# Move the focus to the previous search match. -# - SearchConfirm -# - SearchCancel -# - SearchClear -# Reset the search regex. -# - SearchDeleteWord -# Delete the last word in the search regex. -# - SearchHistoryPrevious -# Go to the previous regex in the search history. -# - SearchHistoryNext -# Go to the next regex in the search history. -# -# - macOS exclusive actions: -# - ToggleSimpleFullscreen -# Enter fullscreen without occupying another space. -# -# - Linux/BSD exclusive actions: -# -# - CopySelection -# Copy from the selection buffer. -# - PasteSelection -# Paste from the selection buffer. -# -# - `command`: Fork and execute a specified command plus arguments -# -# The `command` field must be a map containing a `program` string and an -# `args` array of command line parameter strings. For example: -# `{ program: "alacritty", args: ["-e", "vttest"] }` -# -# And optionally: -# -# - `mods`: Key modifiers to filter binding actions -# -# - Command -# - Control -# - Option -# - Super -# - Shift -# - Alt -# -# Multiple `mods` can be combined using `|` like this: -# `mods: Control|Shift`. -# Whitespace and capitalization are relevant and must match the example. -# -# - `mode`: Indicate a binding for only specific terminal reported modes -# -# This is mainly used to send applications the correct escape sequences -# when in different modes. -# -# - AppCursor -# - AppKeypad -# - Search -# - Alt -# - Vi -# -# A `~` operator can be used before a mode to apply the binding whenever -# the mode is *not* active, e.g. `~Alt`. -# -# Bindings are always filled by default, but will be replaced when a new -# binding with the same triggers is defined. To unset a default binding, it can -# be mapped to the `ReceiveChar` action. Alternatively, you can use `None` for -# a no-op if you do not wish to receive input characters for that binding. -# -# If the same trigger is assigned to multiple actions, all of them are executed -# in the order they were defined in. -#key_bindings: - #- { key: Paste, action: Paste } - #- { key: Copy, action: Copy } - #- { key: L, mods: Control, action: ClearLogNotice } - #- { key: L, mods: Control, mode: ~Vi|~Search, chars: "\x0c" } - #- { key: PageUp, mods: Shift, mode: ~Alt, action: ScrollPageUp, } - #- { key: PageDown, mods: Shift, mode: ~Alt, action: ScrollPageDown } - #- { key: Home, mods: Shift, mode: ~Alt, action: ScrollToTop, } - #- { key: End, mods: Shift, mode: ~Alt, action: ScrollToBottom } - - # Vi Mode - #- { key: Space, mods: Shift|Control, mode: ~Search, action: ToggleViMode } - #- { key: Space, mods: Shift|Control, mode: Vi|~Search, action: ScrollToBottom } - #- { key: Escape, mode: Vi|~Search, action: ClearSelection } - #- { key: I, mode: Vi|~Search, action: ToggleViMode } - #- { key: I, mode: Vi|~Search, action: ScrollToBottom } - #- { key: C, mods: Control, mode: Vi|~Search, action: ToggleViMode } - #- { key: Y, mods: Control, mode: Vi|~Search, action: ScrollLineUp } - #- { key: E, mods: Control, mode: Vi|~Search, action: ScrollLineDown } - #- { key: G, mode: Vi|~Search, action: ScrollToTop } - #- { key: G, mods: Shift, mode: Vi|~Search, action: ScrollToBottom } - #- { key: B, mods: Control, mode: Vi|~Search, action: ScrollPageUp } - #- { key: F, mods: Control, mode: Vi|~Search, action: ScrollPageDown } - #- { key: U, mods: Control, mode: Vi|~Search, action: ScrollHalfPageUp } - #- { key: D, mods: Control, mode: Vi|~Search, action: ScrollHalfPageDown } - #- { key: Y, mode: Vi|~Search, action: Copy } - #- { key: Y, mode: Vi|~Search, action: ClearSelection } - #- { key: Copy, mode: Vi|~Search, action: ClearSelection } - #- { key: V, mode: Vi|~Search, action: ToggleNormalSelection } - #- { key: V, mods: Shift, mode: Vi|~Search, action: ToggleLineSelection } - #- { key: V, mods: Control, mode: Vi|~Search, action: ToggleBlockSelection } - #- { key: V, mods: Alt, mode: Vi|~Search, action: ToggleSemanticSelection } - #- { key: Return, mode: Vi|~Search, action: Open } - #- { key: K, mode: Vi|~Search, action: Up } - #- { key: J, mode: Vi|~Search, action: Down } - #- { key: H, mode: Vi|~Search, action: Left } - #- { key: L, mode: Vi|~Search, action: Right } - #- { key: Up, mode: Vi|~Search, action: Up } - #- { key: Down, mode: Vi|~Search, action: Down } - #- { key: Left, mode: Vi|~Search, action: Left } - #- { key: Right, mode: Vi|~Search, action: Right } - #- { key: Key0, mode: Vi|~Search, action: First } - #- { key: Key4, mods: Shift, mode: Vi|~Search, action: Last } - #- { key: Key6, mods: Shift, mode: Vi|~Search, action: FirstOccupied } - #- { key: H, mods: Shift, mode: Vi|~Search, action: High } - #- { key: M, mods: Shift, mode: Vi|~Search, action: Middle } - #- { key: L, mods: Shift, mode: Vi|~Search, action: Low } - #- { key: B, mode: Vi|~Search, action: SemanticLeft } - #- { key: W, mode: Vi|~Search, action: SemanticRight } - #- { key: E, mode: Vi|~Search, action: SemanticRightEnd } - #- { key: B, mods: Shift, mode: Vi|~Search, action: WordLeft } - #- { key: W, mods: Shift, mode: Vi|~Search, action: WordRight } - #- { key: E, mods: Shift, mode: Vi|~Search, action: WordRightEnd } - #- { key: Key5, mods: Shift, mode: Vi|~Search, action: Bracket } - #- { key: Slash, mode: Vi|~Search, action: SearchForward } - #- { key: Slash, mods: Shift, mode: Vi|~Search, action: SearchBackward } - #- { key: N, mode: Vi|~Search, action: SearchNext } - #- { key: N, mods: Shift, mode: Vi|~Search, action: SearchPrevious } - - # Search Mode - #- { key: Return, mode: Search|Vi, action: SearchConfirm } - #- { key: Escape, mode: Search, action: SearchCancel } - #- { key: C, mods: Control, mode: Search, action: SearchCancel } - #- { key: U, mods: Control, mode: Search, action: SearchClear } - #- { key: W, mods: Control, mode: Search, action: SearchDeleteWord } - #- { key: P, mods: Control, mode: Search, action: SearchHistoryPrevious } - #- { key: N, mods: Control, mode: Search, action: SearchHistoryNext } - #- { key: Up, mode: Search, action: SearchHistoryPrevious } - #- { key: Down, mode: Search, action: SearchHistoryNext } - #- { key: Return, mode: Search|~Vi, action: SearchFocusNext } - #- { key: Return, mods: Shift, mode: Search|~Vi, action: SearchFocusPrevious } - - # (Windows, Linux, and BSD only) - #- { key: V, mods: Control|Shift, mode: ~Vi, action: Paste } - #- { key: C, mods: Control|Shift, action: Copy } - #- { key: F, mods: Control|Shift, mode: ~Search, action: SearchForward } - #- { key: B, mods: Control|Shift, mode: ~Search, action: SearchBackward } - #- { key: C, mods: Control|Shift, mode: Vi|~Search, action: ClearSelection } - #- { key: Insert, mods: Shift, action: PasteSelection } - #- { key: Key0, mods: Control, action: ResetFontSize } - #- { key: Equals, mods: Control, action: IncreaseFontSize } - #- { key: Plus, mods: Control, action: IncreaseFontSize } - #- { key: NumpadAdd, mods: Control, action: IncreaseFontSize } - #- { key: Minus, mods: Control, action: DecreaseFontSize } - #- { key: NumpadSubtract, mods: Control, action: DecreaseFontSize } - - # (Windows only) - #- { key: Return, mods: Alt, action: ToggleFullscreen } - - # (macOS only) - #- { key: K, mods: Command, mode: ~Vi|~Search, chars: "\x0c" } - #- { key: K, mods: Command, mode: ~Vi|~Search, action: ClearHistory } - #- { key: Key0, mods: Command, action: ResetFontSize } - #- { key: Equals, mods: Command, action: IncreaseFontSize } - #- { key: Plus, mods: Command, action: IncreaseFontSize } - #- { key: NumpadAdd, mods: Command, action: IncreaseFontSize } - #- { key: Minus, mods: Command, action: DecreaseFontSize } - #- { key: NumpadSubtract, mods: Command, action: DecreaseFontSize } - #- { key: V, mods: Command, action: Paste } - #- { key: C, mods: Command, action: Copy } - #- { key: C, mods: Command, mode: Vi|~Search, action: ClearSelection } - #- { key: H, mods: Command, action: Hide } - #- { key: H, mods: Command|Alt, action: HideOtherApplications } - #- { key: M, mods: Command, action: Minimize } - #- { key: Q, mods: Command, action: Quit } - #- { key: W, mods: Command, action: Quit } - #- { key: N, mods: Command, action: SpawnNewInstance } - #- { key: F, mods: Command|Control, action: ToggleFullscreen } - #- { key: F, mods: Command, mode: ~Search, action: SearchForward } - #- { key: B, mods: Command, mode: ~Search, action: SearchBackward } - -#debug: - # Display the time it takes to redraw each frame. - #render_timer: false - - # Keep the log file after quitting Alacritty. - #persistent_logging: false - - # Log level - # - # Values for `log_level`: - # - Off - # - Error - # - Warn - # - Info - # - Debug - # - Trace - #log_level: Warn - - # Print all received window events. - #print_events: false diff --git a/assets/logo.svg b/assets/logo.svg new file mode 100644 index 0000000..7ca00e2 --- /dev/null +++ b/assets/logo.svg @@ -0,0 +1,228 @@ + + + + diff --git a/assets/logo2.png b/assets/logo2.png new file mode 100644 index 0000000..beeac55 Binary files /dev/null and b/assets/logo2.png differ diff --git a/assets/logo2.svg b/assets/logo2.svg new file mode 100644 index 0000000..08baa43 --- /dev/null +++ b/assets/logo2.svg @@ -0,0 +1,238 @@ + + + +DashNixDashNix diff --git a/assets/logo3.svg b/assets/logo3.svg new file mode 100644 index 0000000..6076a01 --- /dev/null +++ b/assets/logo3.svg @@ -0,0 +1,238 @@ + + + +DashNixDashNix diff --git a/assets/rainbow.svg b/assets/rainbow.svg new file mode 100644 index 0000000..9f59c7c --- /dev/null +++ b/assets/rainbow.svg @@ -0,0 +1,141 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + diff --git a/base/black.jpg b/base/black.jpg new file mode 100644 index 0000000..730b0b6 Binary files /dev/null and b/base/black.jpg differ diff --git a/base/common_hardware.nix b/base/common_hardware.nix new file mode 100644 index 0000000..9f7ccf1 --- /dev/null +++ b/base/common_hardware.nix @@ -0,0 +1,174 @@ +{ + mkDashDefault, + pkgs, + config, + lib, + hostName, + modulesPath, + ... +}: let + username = config.conf.username; +in { + imports = [ + (modulesPath + "/installer/scan/not-detected.nix") + ]; + + wsl.enable = mkDashDefault config.conf.wsl; + + # Bootloader. + boot = lib.mkIf (!config.conf.wsl) { + consoleLogLevel = mkDashDefault 0; + + lanzaboote = lib.mkIf config.conf.secureBoot { + enable = mkDashDefault true; + pkiBundle = mkDashDefault "/var/lib/sbctl"; + settings.reboot-for-bitlocker = mkDashDefault true; + }; + + loader = { + systemd-boot = { + enable = + if config.conf.secureBoot + then lib.mkForce false + else if config.conf.useSystemdBootloader + then true + else mkDashDefault false; + configurationLimit = 5; + }; + efi.canTouchEfiVariables = mkDashDefault true; + }; + + kernelPackages = mkDashDefault pkgs.linuxPackages_latest; + initrd = { + verbose = mkDashDefault false; + availableKernelModules = [ + "nvme" + "xhci_pci" + "ahci" + "usbhid" + "usb_storage" + "sd_mod" + ]; + }; + kernelParams = + [ + ''resume="PARTLABEL=SWAP"'' + ''quiet'' + ''udev.log_level=3'' + ] + ++ config.conf.bootParams; + }; + + networking = { + useDHCP = mkDashDefault true; + networkmanager.enable = mkDashDefault true; + hostName = mkDashDefault hostName; + }; + + time = { + timeZone = mkDashDefault config.conf.timezone; + hardwareClockInLocalTime = mkDashDefault config.conf.systemLocalTime; + }; + + i18n.defaultLocale = mkDashDefault config.conf.locale; + + services = { + lorri.enable = mkDashDefault true; + xserver.enable = mkDashDefault true; + fstrim.enable = mkDashDefault true; + pulseaudio.enable = mkDashDefault false; + pipewire = { + enable = mkDashDefault true; + alsa = { + enable = mkDashDefault true; + support32Bit = mkDashDefault true; + }; + jack.enable = mkDashDefault true; + pulse.enable = mkDashDefault true; + }; + }; + + nixpkgs.hostPlatform = mkDashDefault config.conf.system; + nix = { + gc = { + automatic = mkDashDefault true; + dates = mkDashDefault "weekly"; + options = mkDashDefault "--delete-older-than 7d --delete-generations +5"; + }; + settings = { + trusted-users = [username]; + auto-optimise-store = mkDashDefault true; + + builders-use-substitutes = mkDashDefault true; + + trusted-substituters = [ + "https://hyprland.cachix.org" + "https://anyrun.cachix.org" + "https://oxipaste.cachix.org" + "https://oxinoti.cachix.org" + "https://oxishut.cachix.org" + "https://oxidash.cachix.org" + "https://oxicalc.cachix.org" + "https://hyprdock.cachix.org" + "https://reset.cachix.org" + "https://dashvim.cachix.org" + ]; + + trusted-public-keys = [ + "hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc=" + "anyrun.cachix.org-1:pqBobmOjI7nKlsUMV25u9QHa9btJK65/C8vnO3p346s=" + "oxipaste.cachix.org-1:n/oA3N3Z+LJP7eIWOwuoLd9QnPyZXqFjLgkahjsdDGc=" + "oxinoti.cachix.org-1:dvSoJl2Pjo5HMaNngdBbSaixK9BSf2N8gzjP2MdGvfc=" + "oxishut.cachix.org-1:axyAGF3XMh1IyMAW4UMbQCdMNovDH0KH6hqLLRJH8jU=" + "oxidash.cachix.org-1:5K2FNHp7AS8VF7LmQkJAUG/dm6UHCz4ngshBVbjFX30=" + "oxicalc.cachix.org-1:qF3krFc20tgSmtR/kt6Ku/T5QiG824z79qU5eRCSBTQ=" + "hyprdock.cachix.org-1:HaROK3fBvFWIMHZau3Vq1TLwUoJE8yRbGLk0lEGzv3Y=" + "reset.cachix.org-1:LfpnUUdG7QM/eOkN7NtA+3+4Ar/UBeYB+3WH+GjP9Xo=" + "dashvim.cachix.org-1:uLRdxp1WOWHnsZZtu3SwUWZRsvC7SXo0Gyk3tIefuL0=" + ]; + + experimental-features = mkDashDefault "nix-command flakes pipe-operators"; + }; + }; + + hardware = { + cpu.${config.conf.cpu}.updateMicrocode = + mkDashDefault + config.hardware.enableRedistributableFirmware; + }; + + security.rtkit.enable = mkDashDefault true; + + environment.variables = { + XDG_CACHE_HOME = mkDashDefault "$HOME/.cache"; + DIRENV_LOG_FORMAT = mkDashDefault ""; + QT_QPA_PLATFORMTHEME = mkDashDefault "qt5ct"; + }; + + # allows user change later on + users = { + mutableUsers = mkDashDefault true; + users.${username} = { + isNormalUser = mkDashDefault true; + description = mkDashDefault username; + extraGroups = [ + "networkmanager" + "wheel" + "gamemode" + "docker" + "vboxusers" + "video" + "audio" + "scanner" + "lp" + ]; + packages = with pkgs; [ + home-manager + xdg-desktop-portal-gtk + ]; + # this password will only last for the first login + # e.g. login, then change to whatever else, this also ensures no public hash is available + password = mkDashDefault "firstlogin"; + }; + }; +} diff --git a/base/default.nix b/base/default.nix new file mode 100644 index 0000000..eafd8a5 --- /dev/null +++ b/base/default.nix @@ -0,0 +1,7 @@ +{ + imports = [ + ./env.nix + ./xkb_layout.nix + ./common_hardware.nix + ]; +} diff --git a/base/env.nix b/base/env.nix new file mode 100644 index 0000000..0eaf068 --- /dev/null +++ b/base/env.nix @@ -0,0 +1,24 @@ +{ + mkDashDefault, + pkgs, + config, + lib, + ... +}: { + environment = { + variables = { + GSETTINGS_SCHEMA_DIR = mkDashDefault "${pkgs.glib.getSchemaPath pkgs.gsettings-desktop-schemas}"; + NEOVIDE_MAXIMIZED = mkDashDefault "0"; + GPG_TTY = mkDashDefault "$(tty)"; + EDITOR = mkDashDefault "neovide --no-fork"; + SUDO_EDITOR = mkDashDefault "neovide --no-fork"; + SCRIPTS = mkDashDefault "$HOME/.config/scripts"; + }; + sessionVariables = { + NIXOS_OZONE_WL = mkDashDefault "1"; + GOPATH = mkDashDefault "$HOME/.go"; + FLAKE = mkDashDefault config.conf.nixosConfigPath; + NH_FLAKE = mkDashDefault config.conf.nixosConfigPath; + }; + }; +} diff --git a/base/xkb_layout.nix b/base/xkb_layout.nix new file mode 100644 index 0000000..b399693 --- /dev/null +++ b/base/xkb_layout.nix @@ -0,0 +1,23 @@ +{ + mkDashDefault, + pkgs, + ... +}: let + layout = pkgs.writeText "enIntUmlaut" '' + xkb_symbols "enIntUmlaut" + { + include "us(basic)" + include "level3(ralt_switch)" + key { [ a, A, adiaeresis, Adiaeresis ] }; + key { [ o, O, odiaeresis, Odiaeresis ] }; + key { [ u, U, udiaeresis, Udiaeresis ] }; + }; + ''; +in { + environment.systemPackages = mkDashDefault [pkgs.xorg.xkbcomp]; + services.xserver.xkb.extraLayouts.enIntUmlaut = { + description = "US layout with 'umlaut'"; + languages = ["eng"]; + symbolsFile = "${layout}"; + }; +} diff --git a/docs/default.nix b/docs/default.nix new file mode 100644 index 0000000..1fd8a1e --- /dev/null +++ b/docs/default.nix @@ -0,0 +1,61 @@ +# with friendly help by stylix: https://github.com/danth/stylix/blob/master/docs/default.nix +{ + pkgs, + buildSystems, + lib, + ... +}: let + makeOptionsDoc = configuration: pkgs.nixosOptionsDoc {options = configuration;}; + generateDocs = obj: '' + touch src/${obj.fst}.md + sed '/*Declared by:*/,/^$/d' <${obj.snd.optionsCommonMark} >> src/${obj.fst}.md + ''; + summaryAppend = name: '' + echo "- [${name}](${name}.md)" >> src/SUMMARY.md + ''; + system = (buildSystems {root = ../example/.;})."example".options; + makeOptionsDocPrograms = names: pkgs.nixosOptionsDoc {options = lib.attrByPath (lib.splitString "." names) null system.mods;}; + conf = makeOptionsDoc system.conf; + basePath = ../modules/programs; + pathToAttrs = path: + lib.attrsets.mapAttrsToList ( + name: meta: { + inherit name; + inherit meta; + } + ) + (builtins.readDir path); + pathToStrings = path: prefix: let + mapFn = attrs: + if attrs.meta == "directory" + then pathToStrings "${basePath}/${attrs.name}" attrs.name + else if prefix != "" + then "${prefix}.${attrs.name}" + else attrs.name; + in + map + mapFn + (pathToAttrs path); + filteredNames = builtins.filter (names: !(lib.strings.hasInfix "default" names)) ( + map (name: lib.strings.removeSuffix ".nix" name) (lib.lists.flatten (pathToStrings basePath "")) + ); + deduplicatedNames = map (name: lib.strings.splitString "." name |> lib.lists.unique |> lib.strings.concatStringsSep ".") filteredNames; + mods = map makeOptionsDocPrograms deduplicatedNames; + docs = lib.strings.concatLines (map generateDocs (lib.lists.zipLists deduplicatedNames mods)); + summary = lib.strings.concatStringsSep " " (map summaryAppend deduplicatedNames); +in + pkgs.stdenvNoCC.mkDerivation { + name = "dashNix-book"; + src = ./.; + + patchPhase = '' + sed '/*Declared by:*/,/^$/d' <${conf.optionsCommonMark} >> src/conf.md + ${docs} + echo "[README](README.md)\n # Options\n - [Base Config](conf.md)" >> src/SUMMARY.md + ${summary} + ''; + + buildPhase = '' + ${pkgs.mdbook}/bin/mdbook build --dest-dir $out + ''; + } diff --git a/docs/src/README.md b/docs/src/README.md new file mode 100644 index 0000000..3658e00 --- /dev/null +++ b/docs/src/README.md @@ -0,0 +1,329 @@ +
+ +![Logo of DashNix](logo.svg) + +
+ +An opinionated flake to bootstrap NixOS systems with default configurations for various programs and services from both NixOS and HomeManager which can be enabled, disabled, configured or replaced at will. + +# Usage + +This flake is intended to be used as an input to your own NixOS configuration: + +```nix +dashNix = { + url = "github:Xetibo/DashNix"; + inputs = { + # ensure these are here to update the packages on your own + nixpkgs.follows = "nixpkgs"; + stable.follows = "stable"; + }; +}; +``` + +You can then configure your systems in your flake outputs with a provided library command: + +Please note that overriding inputs will invalidate the cache configuration, this means you will have to add this manually: + +```nix + builders-use-substitutes = true; + + extra-substituters = [ + "https://hyprland.cachix.org" + "https://anyrun.cachix.org" + "https://cache.garnix.io" + "https://oxipaste.cachix.org" + "https://oxinoti.cachix.org" + "https://oxishut.cachix.org" + "https://oxidash.cachix.org" + "https://oxicalc.cachix.org" + "https://hyprdock.cachix.org" + "https://reset.cachix.org" + "https://dashvim.cachix.org" + ]; + + extra-trusted-public-keys = [ + "hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc=" + "anyrun.cachix.org-1:pqBobmOjI7nKlsUMV25u9QHa9btJK65/C8vnO3p346s=" + "cache.garnix.io:CTFPyKSLcx5RMJKfLo5EEPUObbA78b0YQ2DTCJXqr9g=" + "oxipaste.cachix.org-1:n/oA3N3Z+LJP7eIWOwuoLd9QnPyZXqFjLgkahjsdDGc=" + "oxinoti.cachix.org-1:dvSoJl2Pjo5HMaNngdBbSaixK9BSf2N8gzjP2MdGvfc=" + "oxishut.cachix.org-1:axyAGF3XMh1IyMAW4UMbQCdMNovDH0KH6hqLLRJH8jU=" + "oxidash.cachix.org-1:5K2FNHp7AS8VF7LmQkJAUG/dm6UHCz4ngshBVbjFX30=" + "oxicalc.cachix.org-1:qF3krFc20tgSmtR/kt6Ku/T5QiG824z79qU5eRCSBTQ=" + "hyprdock.cachix.org-1:HaROK3fBvFWIMHZau3Vq1TLwUoJE8yRbGLk0lEGzv3Y=" + "reset.cachix.org-1:LfpnUUdG7QM/eOkN7NtA+3+4Ar/UBeYB+3WH+GjP9Xo=" + "dashvim.cachix.org-1:uLRdxp1WOWHnsZZtu3SwUWZRsvC7SXo0Gyk3tIefuL0=" + ]; +``` + +```nix +nixosConfigurations = inputs.dashNix.dashNixLib.buildSystems { root = ./.; }; +``` + +This command will build each system that is placed within the hosts/ directory. +In this directory create one directory for each system you want to configure with DashNix. +This will automatically pick up the hostname for the system and look for 3 different files that are explained below. +(Optionally, you can also change the parameter root (./.) to define a different starting directory than hosts/) + +In order for your configuration to work, you are required to at least provide a single config file with a further config file being optional for custom configuration. +The hardware.nix specifies additional NixOS configuration, while home.nix specifies additional home-manager configuration. (both optional) + +|- flake.nix\ +|- flake.lock\ +|- hosts/\ +|--- system1/\ +|------ configuration.nix (required)\ +|------ hardware.nix (optional)\ +|------ home.nix (optional)\ +|--- system2/\ +|------ configuration.nix (required)\ +|------ hardware.nix (optional)\ +|------ home.nix (optional)\ +|--- system3/\ +|------ configuration.nix (required)\ +|------ hardware.nix (optional)\ +|------ home.nix (optional) + +Here is a minimal required configuration.nix (the TODOs mention a required change): + +```nix +{config, ...}: { + # TODO denote important changes + + # variables for system + conf = { + # TODO your username + username = "YOURNAME"; + # TODO only needed when you use intel -> amd is default + # cpu = "intel"; + # TODO your xkb layout + locale = "something.UTF-8"; + # TODO your timezone + timezone = "CONTINENT/CITY"; + }; + + # modules + mods = { + # default disk config has root home boot and swap partition, overwrite if you want something different + sops.enable = false; + nextcloud.enable = false; + wm.monitors = [ + # Example + # { + # name = "DP-1"; + # resolutionX = 3440; + # resolutionY = 1440; + # refreshrate = 180; + # positionX = 2560; + # positionY = 0; + # scale = 1; + # transform = "0"; + # vrr = false; + # } + ]; + gpu.nvidia.enable = true; + kdeConnect.enable = true; + # login manager: + # default is greetd + # greetd = { }; + # sddm = { }; + # gdm = { }; + drives = { + # default assumes ROOT, BOOT, HOME and SWAP labaled drives exist + # for an example without HOME see below + # defaultDrives.enable = false; + # extraDrives = [ + # { + # name = "boot"; + # drive = { + # device = "/dev/disk/by-label/BOOT"; + # fsType = "vfat"; + # options = [ "rw" "fmask=0022" "dmask=0022" "noatime" ]; + # }; + # } + # { + # name = ""; + # drive = { + # device = "/dev/disk/by-label/ROOT"; + # fsType = "ext4"; + # options = [ "noatime" "nodiratime" "discard" ]; + # }; + # } + # ]; + # You can also use disko to format your disks on installation. + # Please refer to the Documentation about the drives module for an example. + }; + }; +} +``` + +## First Login + +After logging in the first time, your password will be set to "firstlogin", please change this to whatever you like. + +## Configuring pkgs + +While DashNix offers a default pkgs config, you may want to permit an unsecure packages, +add additional modules/inputs, or add an overlay to them. +You can configure both stable and unstable pkgs the following way: + +Please note that modules and inputs are merged together to ensure functionality. + +```nix +currentSystem = "x86_64-linux"; +permittedPackages = [ + "some package" +]; +config = { + system = currentSystem; + config = { + allowUnfree = true; + permittedInsecurePackages = permittedPackages; + }; + inputs = { + # Some inputs + } + mods = { + home = [ + # Some home manager module + ]; + nixos = [ + # Some nixos module + ]; +} +}; +unstableBundle = { + pkgs = inputs.unstable; + inherit config mods; +}; +inputs.dashNix.dashNixLib.buildSystems { + root = ./.; + inherit unstableBundle; +} +``` + +With this you could also change your input to something different should you wish to do so. +Note that overriding inputs via the flake still works, +this way however ensures you can also configure the inputs. + +## Stable/Unstable + +Sometimes you want to differentiate between systems that are stable and unstable, e.g. for servers and desktops/laptops. +This can be done with the overridePkgs flag for the lib function: + +(overridePkgs simply inverts the default bundle that is used for the nix standard library as well as NixOS itself) + +```nix +nixosConfigurations = + inputs.dashNix.dashNixLib.buildSystems { + root = ./stable; + inherit stableBundle; + overridePkgs = true; + } + // inputs.dashNix.dashNixLib.buildSystems { + inherit unstableBundle; + root = ./unstable; + }; +``` + +You can now place your systems in the respective directories. +Keep in mind that the hosts directory will still need to exist in each variant. +E.g. stable/hosts/yourserver and unstable/hosts/yourdesktop + +# Installation via ISO + +You can find a custom ISO in the releases: [Link](https://github.com/Xetibo/DashNix/releases). +With this, you will receive the example config in /iso/example alongside the gnome desktop environment, +as well as a few tools like gnome-disks, Neovim, Vscodium, a browser etc. + +Alternatively, you can use whatever NixOS installer and just install your config from there, just make sure to set the drive configuration before. + +## Commands + +First, copy the read-only config from /iso/example-config to a location of your choice. + +```sh +cp /iso/example-config ~/config -r +``` + +Then configure as you please and choose a command below depending on your disk installation variant. + +Installation via manual configuration: + +```sh +sudo nixos-install --flake # --root --option experimental-features "nix-command flakes pipe-operators" +#example +#nixos-install --flake ~/config#globi --root /mnt --option experimental-features "nix-command flakes pipe-operators" +``` + +Installation via disko: + +```sh +sudo disko-install --flake # --disk --option experimental-features "nix-command flakes pipe-operators" +#example +#disko-install -- --flake ~/config#globi --disk main /dev/nvme0n1 --option experimental-features "nix-command flakes pipe-operators" +``` + +# Installation via flake + +If you already have nix installed, you can instead just copy the default config onto your system and install DashNix with it. +To create the example config for a base to start with, you can just run this flake with the mkFlake command: + +```sh +nix run github:Xetibo/DashNix#mkFlake +``` + +This command will put the default configuration into $HOME/gits/nixos + +# Modules + +This configuration features several modules that can be used as preconfigured "recipies". +These modules attempt to combine the home-manager and nixos packages/options to one single configuration file for each new system. +For package lists, please check the individual modules, as the lists can be long. + +- Hyprland: Installs and configures Hyprland with various additional packages +- Niri: Installs and configures Niri with various additional packages +- acpid : Enables the acpid daemon +- base packages : A list of system packages to be installed by default +- bluetooth : Configures/enables bluetooth and installs tools for bluetooth +- coding packages : A list of coding packages to be installed by default +- drives : A drive configuration module +- firefox: Enables and configures firefox (extensions and settings) +- fish: Enables and configures fish shell +- gaming : Configures gaming related features (launchers, gamemode) +- git : Git key and config module +- gnome_services : Gnome services for minimal enviroments -> Window managers etc +- gpu : GPU settings (AMD) +- greetd : Enables and configures the greetd/regreet login manager with Hyprland +- home packages : A list of home packages to be installed by default +- kde_connect : Enables KDE connect and opens its ports +- keepassxc : Configures keepassxc +- kitty: Enables and configures kitty terminal +- layout : Modules to configure keyboard layout system wide +- media packages : A list of media packages to be installed by default +- mime: Mime type configuration +- nextcloud : Handles synchronization via nextcloud cmd. (requires config.sops.secrets.nextcloud) +- oxi: My own programs, can be selectively disabled, or as a whole +- piper : Installs and enables piper alongside its daemon +- plymouth: enable or disable plymouth +- printing : Enables and configures printing services +- scripts: Various preconfigured scripts with the ability to add more +- sops: Enables sops-nix +- starship : Configures the starship prompt +- stylix : Configures system themes, can also be applied to dashvim if used. +- teams: For the poor souls that have to use this.... +- virtualbox : Enables and configures virtualbox +- xkb: Keyboard layout configuration +- xone : Installs the xone driver +- yazi: Installs yazi and sets custom keybinds + +# Credits + +- [Fufexan](https://github.com/fufexan) for the xdg-mime config: +- [Catppuccin](https://github.com/catppuccin) for base16 colors and zen-browser css +- [Danth](https://github.com/danth) for providing a base for the nix docs +- [chermnyx](https://github.com/chermnyx) for providing a base for zen configuration +- [voronind-com](https://github.com/voronind-com) for providing the darkreader configuration +- [Nix-Artwork](https://github.com/NixOS/nixos-artwork/tree/master/logo) for the Nix/NixOS logo (Tim Cuthbertson (@timbertson)) +- [xddxdd](https://github.com/xddxdd) for the CachyOS-Kernel flake diff --git a/docs/src/SUMMARY.md b/docs/src/SUMMARY.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/src/coding.md b/docs/src/coding.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/src/conf.md b/docs/src/conf.md new file mode 100755 index 0000000..aa51f0b --- /dev/null +++ b/docs/src/conf.md @@ -0,0 +1 @@ +# This file handles the basic configuration for settings like language, timezone, input, cpu etc. diff --git a/docs/src/logo.svg b/docs/src/logo.svg new file mode 100644 index 0000000..08baa43 --- /dev/null +++ b/docs/src/logo.svg @@ -0,0 +1,238 @@ + + + +DashNixDashNix diff --git a/docs/src/mods.md b/docs/src/mods.md new file mode 100755 index 0000000..df7fe4f --- /dev/null +++ b/docs/src/mods.md @@ -0,0 +1 @@ +# This file handles configuration of individual modules. diff --git a/dunst/dunstrc b/dunst/dunstrc deleted file mode 100644 index 14e5885..0000000 --- a/dunst/dunstrc +++ /dev/null @@ -1,456 +0,0 @@ -# See dunst(5) for all configuration options - -[global] - ### Display ### - - # Which monitor should the notifications be displayed on. - monitor = 2 - - # 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 = none - - ### Geometry ### - - # dynamic width from 0 to 300 - # width = (0, 300) - # constant width of 300 - width = (0, 300) - - # The maximum height of a single notification, excluding the frame. - height = (0, 300) - - # Position the notification in the top right corner - origin = top-right - - # Offset from the origin - offset = 10x2 - - # Scale factor. It is auto-detected if value is 0. - scale = 0 - - # Maximum number of notification (0 means no limit) - notification_limit = 3 - - ### Progress bar ### - - # Turn on the progess bar. It appears when a progress hint is passed with - # for example dunstify -h int:value:12 - progress_bar = true - - # Set the progress bar height. This includes the frame, so make sure - # it's at least twice as big as the frame width. - progress_bar_height = 10 - - # Set the frame width of the progress bar - progress_bar_frame_width = 1 - - # Set the minimum width for the progress bar - progress_bar_min_width = 150 - - # Set the maximum width for the progress bar - progress_bar_max_width = 300 - - - # Show how many messages are currently hidden (because of - # notification_limit). - indicate_hidden = yes - - # The transparency of the window. Range: [0; 100]. - # This option will only work if a compositing window manager is - # present (e.g. xcompmgr, compiz, etc.). (X11 only) - transparency = 0 - - # Draw a line of "separator_height" pixel height between two - # notifications. - # Set to 0 to disable. - # If gap_size is greater than 0, this setting will be ignored. - separator_height = 2 - - # Padding between text and separator. - padding = 8 - - # Horizontal padding. - horizontal_padding = 8 - - # Padding between text and icon. - text_icon_padding = 0 - - # Defines width in pixels of frame around the notification window. - # Set to 0 to disable. - frame_width = 3 - - # Defines color of the frame around the notification window. - frame_color = "#0f0f17" - - # Size of gap to display between notifications - requires a compositor. - # If value is greater than 0, separator_height will be ignored and a border - # of size frame_width will be drawn around each notification instead. - # Click events on gaps do not currently propagate to applications below. - gap_size = 2 - - # Define a color for the separator. - # possible values are: - # * auto: dunst tries to find a color fitting to the background; - # * foreground: use the same color as the foreground; - # * frame: use the same color as the frame; - # * anything else will be interpreted as a X color. - separator_color = frame - - # Sort messages by urgency. - sort = yes - - # Don't remove messages, if the user is idle (no mouse 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 = FuraMono 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: - # bold - # italic - # strikethrough - # underline - # - # For a complete reference see - # . - # - # 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 = "%s\n%b" - - # Alignment of message text. - # Possible values are "left", "center" and "right". - alignment = left - - # Vertical alignment of message text and icon. - # Possible values are "top", "center" and "bottom". - vertical_alignment = center - - # Show age of message if message is older than show_age_threshold - # seconds. - # Set to -1 to disable. - show_age_threshold = 60 - - # 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 ### - - # Recursive icon lookup. You can set a single theme, instead of having to - # define all lookup paths. - enable_recursive_icon_lookup = true - - # Set icon theme (only used for recursive icon lookup) - icon_theme = Adwaita - # You can also set multiple icon themes, with the leftmost one being used first. - # icon_theme = "Adwaita, breeze" - - # Align icons left/right/top/off - icon_position = left - - # Scale small icons up to this size, set to 0 to disable. Helpful - # for e.g. small files or high-dpi screens. In case of conflict, - # max_icon_size takes precedence over this. - min_icon_size = 32 - - # Scale larger icons down to this size, set to 0 to disable - max_icon_size = 128 - - # Paths to default icons (only neccesary when not using recursive icon lookup) - icon_path = /usr/share/icons/gnome/16x16/status/:/usr/share/icons/gnome/16x16/devices/ - - ### 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/xdg-open - - # Always run rule-defined scripts, even if the notification is suppressed - always_run_script = true - - # Define the title of the windows spawned by dunst - title = Dunst - - # Define the class of the windows spawned by dunst - class = Dunst - - # Define the corner radius of the notification window - # in pixel size. If the radius is 0, you have no rounded - # corners. - # The radius will be automatically lowered if it exceeds half of the - # notification height to avoid clipping text and/or icons. - corner_radius = 10 - - # Ignore the dbus closeNotification message. - # Useful to enforce the timeout set by dunst configuration. Without this - # parameter, an application may close the notification sent before the - # user defined timeout. - ignore_dbusclose = false - - ### Wayland ### - # These settings are Wayland-specific. They have no effect when using X11 - - # Uncomment this if you want to let notications appear under fullscreen - # applications (default: overlay) - # layer = top - - # Set this to true to use X11 output on Wayland. - force_xwayland = false - - ### Legacy - - # Use the Xinerama extension instead of RandR for multi-monitor support. - # This setting is provided for compatibility with older nVidia drivers that - # do not support RandR and using it on systems that support RandR is highly - # discouraged. - # - # By enabling this setting dunst will not be able to detect when a monitor - # is connected or disconnected which might break follow mode if the screen - # layout changes. - force_xinerama = false - - ### mouse - - # Defines list of actions for each mouse event - # Possible values are: - # * none: Don't do anything. - # * do_action: Invoke the action determined by the action_name rule. If there is no - # such action, open the context menu. - # * open_url: If the notification has exactly one url, open it. If there are multiple - # ones, open the context menu. - # * close_current: Close current notification. - # * close_all: Close all notifications. - # * context: Open context menu for the notification. - # * context_all: Open context menu for all notifications. - # These values can be strung together for each mouse event, and - # will be executed in sequence. - mouse_left_click = close_current - mouse_middle_click = do_action, close_current - mouse_right_click = close_all - -# 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 = "#222222F0" - foreground = "#888888" - frame_color = "0f0f17C8" - timeout = 3 - # Icon for notifications with low urgency, uncomment to enable - #default_icon = /path/to/icon - -[urgency_normal] - background = "#222222F0" - foreground = "#888888" - frame_color = "0f0f17C8" - timeout = 3 - # Icon for notifications with normal urgency, uncomment to enable - #default_icon = /path/to/icon - -[urgency_critical] - background = "#900000F0" - foreground = "#ffffff" - frame_color = "#ff0000C8" - timeout = 0 - # Icon for notifications with critical urgency, uncomment to enable - #default_icon = /path/to/icon - -# Every section that isn't one of the above is interpreted as a rules to -# override settings for certain messages. -# -# Messages can be matched by -# appname (discouraged, see desktop_entry) -# body -# category -# desktop_entry -# icon -# match_transient -# msg_urgency -# stack_tag -# summary -# -# and you can override the -# background -# foreground -# format -# frame_color -# fullscreen -# new_icon -# set_stack_tag -# set_transient -# set_category -# timeout -# urgency -# icon_position -# skip_display -# history_ignore -# action_name -# word_wrap -# ellipsize -# alignment -# hide_text -# -# Shell-like globbing will get expanded. -# -# Instead of the appname filter, it's recommended to use the desktop_entry filter. -# GLib based applications export their desktop-entry name. In comparison to the appname, -# the desktop-entry won't get localized. -# -# SCRIPTING -# You can specify a script that gets run when the rule matches by -# setting the "script" option. -# The script will be called as follows: -# script appname summary body icon urgency -# where urgency can be "LOW", "NORMAL" or "CRITICAL". -# -# NOTE: It might be helpful to run dunst -print in a terminal in order -# to find fitting options for rules. - -# Disable the transient hint so that idle_threshold cannot be bypassed from the -# client -#[transient_disable] -# match_transient = yes -# set_transient = no -# -# Make the handling of transient notifications more strict by making them not -# be placed in history. -#[transient_history_ignore] -# match_transient = yes -# history_ignore = yes - -# fullscreen values -# show: show the notifications, regardless if there is a fullscreen window opened -# delay: displays the new notification, if there is no fullscreen window active -# If the notification is already drawn, it won't get undrawn. -# pushback: same as delay, but when switching into fullscreen, the notification will get -# withdrawn from screen again and will get delayed like a new notification -#[fullscreen_delay_everything] -# fullscreen = delay -#[fullscreen_show_critical] -# msg_urgency = critical -# fullscreen = show - -#[espeak] -# summary = "*" -# script = dunst_espeak.sh - -#[script-test] -# summary = "*script*" -# script = dunst_test.sh - -#[ignore] -# # This notification will not be displayed -# summary = "foobar" -# skip_display = true - -#[history-ignore] -# # This notification will not be saved in history -# summary = "foobar" -# history_ignore = yes - -#[skip-display] -# # This notification will not be displayed, but will be included in the history -# summary = "foobar" -# skip_display = yes - -#[signed_on] -# appname = Pidgin -# summary = "*signed on*" -# urgency = low -# -#[signed_off] -# appname = Pidgin -# summary = *signed off* -# urgency = low -# -#[says] -# appname = Pidgin -# summary = *says* -# urgency = critical -# -#[twitter] -# appname = Pidgin -# summary = *twitter.com* -# urgency = normal -# -#[stack-volumes] -# appname = "some_volume_notifiers" -# set_stack_tag = "volume" -# -# vim: ft=cfg diff --git a/environment.d/envvars.conf b/environment.d/envvars.conf deleted file mode 100644 index 159d8b4..0000000 --- a/environment.d/envvars.conf +++ /dev/null @@ -1,14 +0,0 @@ -GTK_CSD=0 -QT_QPA_PLATFORMTHEME=qt5ct -QT_WAYLAND_FORCE_DPI=96 -QT_AUTO_SCREEN_SCALE_FACTOR=0 -QT_WAYLAND_DISABLE_WINDOWDECORATION=1 -QT_SCALE_FACTOR=1 -QT_QPA_PLATFORM=wayland -XCURSOR_SIZE=24 -WAYLAND_DISPLAY=wayland-1 -XDG_CURRENT_DESKTOP=wlr -GPG_TTY=$(tty) -PATH=$PATH:$HOME/.local/bin -TEXMFHOME=$HOME/.texmf -GTK_THEME=Adwaita:dark diff --git a/eww_desktop/bar/eww.scss b/eww_desktop/bar/eww.scss deleted file mode 100644 index 1036c3a..0000000 --- a/eww_desktop/bar/eww.scss +++ /dev/null @@ -1,447 +0,0 @@ -/** EWW.SCSS -Created by saimoom **/ -*{ - all: unset; - font-family: feather; - font-family: DaddyTimeMono Nerd Font; -} - -/** General **/ -.bar_class { - background-color: #0f0f17; - border-radius: 16px; -} -.module { - margin: 0px 0px 0px 0px; - border-radius: 10px 16px 0px 10px; -} - -/** tooltip!! **/ -tooltip.background { - background-color: #0f0f17; - font-size: 18; - border-radius: 10px; - color: #bfc9db; -} - -tooltip label { - margin: 6px; -} - - -/** Widgets **/ - -.clock_time_sep { - font-size: 16; - color: #bfc9db; - margin: 0px 4px 1px 4px; -} -.clock_time_class, .clock_minute_class { - font-size: 23; -} -.clock_date_class { - font-size: 18; - margin: 0px 20px 0px -1px; - color: #d7beda; -} -.clock_minute_class { - margin: 0px 20px 0px 3px; - color: #bfc9db; -} - -.clock_time_class { - color: #bfc9db; - font-weight: bold; - margin: 0px 5px 0px 0px; -} - - -.membar { - color: #e0b089; - background-color: #38384d; - border-radius: 10px; -} -.batbar { - color: #afbea2; - background-color: #38384d; - border-radius: 10px; -} -.brightbar trough highlight { - background-image: linear-gradient(to right, #e4c9af 30%, #f2cdcd 50%, #e0b089 100% *50); - border-radius: 10px; -} -.volbar trough highlight { - background-image: linear-gradient(to right, #afcee0 30%, #a1bdce 50%, #77a5bf 100% *50); - border-radius: 10px; -} -.volume_icon { - font-size: 22; - color: #a1bdce; - margin: 0px 10px 0px 10px; -} - - -.module_essid { - font-size: 18; - color: #a1bdce; - margin: 0px 10px 0px 0px; -} -.module-wif { - font-size: 22; - color: #a1bdce; - border-radius: 100%; - margin: 0px 10px 0px 5px; -} - -.iconmem { - color: #e0b089; -} -.iconbat { - color: #afbea2; -} -.iconbat, .iconmem { - font-size: 15; - margin: 10px; -} -.bright_icon { - font-size: 22; - color: #e4c9af; - margin: 0px 10px 0px 10px; -} - - -.separ { - color: #3e424f; - font-weight: bold; - font-size: 22px; - margin: 0px 8px 0px 8px; - } - -.mem_module { - background-color: #0f0f17; - border-radius: 16px; - margin: 0px 10px 0px 3px; - } -.bat_module { - background-color: #0f0f17; - border-radius: 16px; - margin: 0px 10px 0px 10px; - } - - -scale trough { - all: unset; - background-color: #22242b; - box-shadow: 0 2px 3px 2px #06060b; - border-radius: 16px; - min-height: 10px; - min-width: 70px; - margin: 0px 10px 0px 0px; -} - -.works { -font-size: 27px; -font-weight: normal; -margin: 5px 0px 0px 20px; -background-color: #0f0f17; -} - -.0 , .01, .02, .03, .04, .05, .06, -.011, .022, .033, .044, .055, .066{ - margin: 0px 10px 0px 0px; -} - -/* Unoccupied */ -.0 { -color: #3e424f; -} - -/* Occupied */ -.01, .02, .03, .04, .05, .06 { - color: #bfc9db; -} - -/* Focused */ -.011, .022, .033, .044, .055, .066 { - color: #a1bdce; -} - - -.song_cover_art { - background-size: cover; - background-position: center; - min-height: 24px; - min-width: 24px; - margin: 10px; - border-radius: 100px; -} - -.song { - color: #a1bdce; - font-size : 18px; - font-weight : bold; - margin : 3px 5px 0px 0px; -} - -.song_btn_play { - color: #a1bdce; - font-size : 28px; - margin : 3px 0px 0px 5px; - -} - - -.song_btn_prev, .song_btn_next { - color: #bfc9db; - font-size : 24px; - margin : 3px 0px 0px 5px; - -} -// Calendar -.cal { - background-color: #0f0f17; - font-family: JetBrainsMono Nerd Font; - font-size: 18px; - font-weight: normal; - -.cal-in { - padding: 0px 10px 0px 10px; - color: #bfc9db; - -.cal { - &.highlight { - padding: 20px; - } - - padding: 5px 5px 5px 5px; - margin-left: 10px; - } - } -} - -calender { - color: #bfc9db; -} -calendar:selected { - color: #a1bdce; -} - -calendar.header { -color: #a1bdce; -font-weight: bold; -} - -calendar.button { -color: #afbea2; -} - -calendar.highlight { -color: #a1bdce; -font-weight: bold; -} - -calendar:indeterminate { -color: #bfc9db; -} - - - - - - - -.sys_sep { - color: #38384d; - font-size: 18; - margin: 0px 10px 0px 10px; -} -.sys_text_bat_sub, .sys_text_mem_sub { - font-size: 16; - color: #bbc5d7; - margin: 5px 0px 0px 25px; -} -.sys_text_bat, .sys_text_mem { - font-size: 21; - font-weight: bold; - margin: 14px 0px 0px 25px; -} -.sys_icon_bat, .sys_icon_mem { - font-size: 30; - margin: 30px; -} -.sys_win { - background-color: #0f0f17; -} -.sys_bat { - color: #afbea2; - background-color: #38384d; - border-radius: 10px; -} -.sys_mem { - color: #e4c9af; - background-color: #38384d; - border-radius: 10px; -} -.sys_icon_bat, .sys_text_bat { - color: #afbea2; -} -.sys_icon_mem, .sys_text_mem { - color: #e4c9af; -} -.sys_bat_box { - border-radius: 16px; - margin: 15px 10px 10px 20px; - } -.sys_mem_box { - border-radius: 16px; - margin: 10px 10px 15px 20px; - } - - - - - - - -.music_pop { - background-color: #0f0f17; - border-radius: 16px; -} - .music_cover_art { - background-size: cover; - background-position: center; - min-height: 100px; - box-shadow: 5px 5px 5px 5px #06060b; - min-width: 170px; - margin: 20px; - border-radius: 20px; -} - -.music { - color: #a1bdce; - font-size : 20px; - font-weight : bold; - margin : 20px 0px 0px -15px; -} - -.music_artist { - color: #bbc5d7; - font-size : 16px; - font-weight : normal; - margin : 0px 0px 0px 0px; -} - -.music_btn_prev, .music_btn_play, .music_btn_next { - font-family: Iosevka Nerd Font; -} -.music_btn_prev { - color: #bbc5d7; - font-size : 32px; - font-weight : normal; - margin: 0px 0px 0px 0px; -} -.music_btn_play { - color: #a1bdce; - font-size : 48px; - font-weight : normal; - margin: 0px 0px 0px 0px; -} -.music_btn_next { - color: #bbc5d7; - font-size : 32px; - font-weight : normal; - margin: 0px 0px 0px 0px; -} - -.music_bar scale trough highlight { - all: unset; - background-image: linear-gradient(to right, #afcee0 30%, #a1bdce 50%, #77a5bf 100% *50); - border-radius: 24px; -} -.music_bar scale trough { - all: unset; - background-color: #232232; - box-shadow: 0 6px 5px 2px #06060b; - border-radius: 24px; - min-height: 13px; - min-width: 190px; - margin : -10px 10px 20px 0px; -} - -.audio-box { - background-color: #0f0f17; - border-radius: 16px; -} -.speaker_icon { - background-size: cover; - background-image: url('images/speaker.png'); - background-position: center; - min-height: 70px; - min-width: 75px; - margin: 10px 20px 5px 20px; - border-radius: 12px; -} - -.speaker_text { - color: #a1bdce; - font-size : 26px; - font-weight : bold; - margin: 20px 0px 0px 0px; -} - -.speaker_bar scale trough highlight { - all: unset; - background-image: linear-gradient(to right, #afcee0 30%, #a1bdce 50%, #77a5bf 100% *50); - border-radius: 24px; -} -.speaker_bar scale trough { - all: unset; - background-color: #232232; - box-shadow: 0 6px 5px 2px #06060b; - border-radius: 24px; - min-height: 13px; - min-width: 120px; - margin : 0px 0px 5px 0px; -} - - - - -.mic_icon { - background-size: cover; - background-image: url('images/mic.png'); - background-position: center; - min-height: 70px; - min-width: 75px; - margin: 5px 20px 20px 20px; - border-radius: 12px; -} - -.mic_text { - color: #a1bdce; - font-size : 26px; - font-weight : bold; - margin: 0px 0px 0px 0px; -} - -.mic_bar scale trough highlight { - all: unset; - background-image: linear-gradient(to right, #afcee0 30%, #a1bdce 50%, #77a5bf 100% *50); - border-radius: 24px; -} -.mic_bar scale trough { - all: unset; - box-shadow: 0 6px 5px 2px #06060b; - background-color: #232232; - border-radius: 24px; - min-height: 13px; - min-width: 120px; - margin : 0px 0px 20px 0px; -} - -.audio_sep { - color: #38384d; - font-size: 18; - margin : 0px 0px 0px 0px; -} - diff --git a/eww_desktop/bar/eww.yuck b/eww_desktop/bar/eww.yuck deleted file mode 100644 index c0663b5..0000000 --- a/eww_desktop/bar/eww.yuck +++ /dev/null @@ -1,352 +0,0 @@ -;; Variables -(defpoll clock_time :interval "5m" "date +\%I") -(defpoll clock_minute :interval "5s" "date +\%M") -(defpoll clock_date :interval "10h" "date '+%d/%m'") -(defpoll volume_percent :interval "3s" "amixer -D pulse sget Master | grep 'Left:' | awk -F'[][]' '{ print $2 }' | tr -d '%'") -(defpoll mic_percent :interval "3s" "amixer -D pulse sget Capture | grep 'Left:' | awk -F'[][]' '{ print $2 }' | tr -d '%'") -(defpoll brightness_percent :interval "5s" "brightnessctl -m -d intel_backlight | awk -F, '{print substr($4, 0, length($4)-1)}' | tr -d '%'") -(defpoll battery :interval "15s" "./scripts/battery --bat") -(defpoll battery_status :interval "1m" "./scripts/battery --bat-st") -(defpoll memory :interval "15s" "scripts/memory") -(defpoll memory_used_mb :interval "2m" "scripts/mem-ad used") -(defpoll memory_total_mb :interval "2m" "scripts/mem-ad total") -(defpoll memory_free_mb :interval "2m" "scripts/mem-ad free") -(defvar vol_reveal false) -(defvar br_reveal false) -(defvar music_reveal false) -(defvar wifi_rev false) -(defvar time_rev false) -(deflisten workspace "scripts/workspace") - -(defvar eww "$HOME/.local/bin/eww/eww -c $HOME/.config/eww/bar") - - -(defpoll COL_WLAN :interval "1m" "~/.config/eww/bar/scripts/wifi --COL") -(defpoll ESSID_WLAN :interval "1m" "~/.config/eww/bar/scripts/wifi --ESSID") -(defpoll WLAN_ICON :interval "1m" "~/.config/eww/bar/scripts/wifi --ICON") - - -(defpoll song :interval "2s" "~/.config/eww/bar/scripts/music_info --song") -(defpoll song_artist :interval "2s" "~/.config/eww/bar/scripts/music_info --artist") -(defpoll current_status :interval "1s" "~/.config/eww/bar/scripts/music_info --time") -(defpoll song_status :interval "2s" "~/.config/eww/bar/scripts/music_info --status") -(defpoll cover_art :interval "2s" "~/.config/eww/bar/scripts/music_info --cover") - -(defpoll calendar_day :interval "20h" "date '+%d'") -(defpoll calendar_year :interval "20h" "date '+%Y'") - -;; widgets - -(defwidget wifi [] - (eventbox :onhover "${eww} update wifi_rev=true" - :onhoverlost "${eww} update wifi_rev=false" - (box :vexpand "false" :hexpand "false" :space-evenly "false" - (button :class "module-wif" :onclick "networkmanager_dmenu" :wrap "false" :limit-width 12 :style "color: ${COL_WLAN};" WLAN_ICON) - (revealer :transition "slideright" - :reveal wifi_rev - :duration "350ms" - (label :class "module_essid" - :text ESSID_WLAN - :orientation "h" - ))))) - - -(defwidget workspaces [] - (literal :content workspace)) - - -(defwidget bat [] - (box :class "bat_module" :vexpand "false" :hexpand "false" - (circular-progress :value battery - :class "batbar" - :thickness 4 - (button - :class "iconbat" - :limit-width 2 - :tooltip "battery on ${battery}%" - :show_truncated false - :onclick "$HOME/.config/eww/bar/scripts/pop system" - :wrap false - "")))) - - -(defwidget mem [] - (box :class "mem_module" :vexpand "false" :hexpand "false" - (circular-progress :value memory - :class "membar" - :thickness 4 - (button - :class "iconmem" - :limit-width 2 - :tooltip "using ${memory}% ram" - :onclick "$HOME/.config/eww/bar/scripts/pop system" - :show_truncated false - :wrap false - "")))) - - - -(defwidget sep [] - (box :class "module-2" :vexpand "false" :hexpand "false" - (label :class "separ" :text "|"))) - -(defwidget clock_module [] - (eventbox :onhover "${eww} update time_rev=true" - :onhoverlost "${eww} update time_rev=false" - (box :class "module" :space-evenly "false" :orientation "h" :spacing "3" - (label :text clock_time :class "clock_time_class" ) - (label :text "" :class "clock_time_sep" ) - (label :text clock_minute :class "clock_minute_class") - (revealer :transition "slideleft" - :reveal time_rev - :duration "350ms" - (button :class "clock_date_class" - :onclick "$HOME/.config/eww/bar/scripts/pop calendar" clock_date - ) - )))) - -(defwidget volume [] - (eventbox :onhover "${eww} update vol_reveal=true" - :onhoverlost "${eww} update vol_reveal=false" - (box :class "module-2" :space-evenly "false" :orientation "h" :spacing "3" - (button :onclick "scripts/pop audio" :class "volume_icon" "") - (revealer :transition "slideleft" - :reveal vol_reveal - :duration "350ms" - (scale :class "volbar" - :value volume_percent - :orientation "h" - :tooltip "${volume_percent}%" - :max 100 - :min 0 - :onchange "amixer -D pulse sset Master {}%" ))))) - -(defwidget bright [] - (eventbox :onhover "${eww} update br_reveal=true" :onhoverlost "${eww} update br_reveal=false" - (box :class "module-2" :space-evenly "false" :orientation "h" :spacing "3" - (label :text "" :class "bright_icon" :tooltip "brightness") - (revealer :transition "slideleft" - :reveal br_reveal - :duration "350ms" - (scale :class "brightbar" - :value brightness_percent - :orientation "h" - :tooltip "${brightness_percent}%" - :max 100 - :min 0 - :onchange "brightnessctl set {}%" ))))) - - - - ;; Music -(defwidget music [] - (eventbox :onhover "${eww} update music_reveal=true" - :onhoverlost "${eww} update music_reveal=false" - (box :class "module-2" :orientation "h" :space-evenly "false" :vexpand "false" :hexpand "false" - (box :class "song_cover_art" :vexpand "false" :hexpand "false" :style "background-image: url('${cover_art}');") - (button :class "song" :wrap "true" :onclick "~/.config/eww/bar/scripts/pop music" song) - (revealer :transition "slideright" - :reveal music_reveal - :duration "350ms" - (box :vexpand "false" :hexpand "false" :oreintation "h" - (button :class "song_btn_prev" :onclick "~/.config/eww/bar/scripts/music_info --prev" "") - (button :class "song_btn_play" :onclick "~/.config/eww/bar/scripts/music_info --toggle" song_status) - (button :class "song_btn_next" :onclick "~/.config/eww/bar/scripts/music_info --next" "")))))) - - - -(defwidget left [] - (box :orientation "h" - :space-evenly false - :halign "end" - :class "left_modules" -(bright) -(volume) -(wifi) -(sep) -(bat) -(mem) -(sep) -(clock_module))) - - -(defwidget right [] - (box :orientation "h" - :space-evenly false - :halign "start" - :class "right_modules" -(workspaces))) - - -(defwidget center [] - (box :orientation "h" - :space-evenly false - :halign "center" - :class "center_modules" -(music))) - -(defwidget bar_1 [] - (box :class "bar_class" - :orientation "h" - (right) - (center) - (left) - )) - -(defwindow bar - :monitor 0 - :geometry (geometry :x "0%" - :y "9px" - :width "98%" - :height "30px" - :anchor "top center") - :stacking "fg" - :wm-ignore true - :windowtype "dock" - (bar_1)) - -(defwidget system [] - (box :class "sys_win" :orientation "v" :space-evenly "false" :hexpand "false" :vexpand "false" :spacing 0 - (box :class "sys_bat_box" :orientation "h" :space-evenly "false" - (circular-progress :value battery - :class "sys_bat" - :thickness 9 - (label :text "" - :class "sys_icon_bat" - :limit-width 2 - :show_truncated false - :wrap false)) - (box :orientation "v" :space-evenly "false" :spacing 0 :hexpand "false" :vexpand "false" - (label :text "battery" - :halign "start" - :class "sys_text_bat" - :limit-width 9 - :show_truncated false - :wrap false) - (label :text "${battery}%" - :halign "start" - :class "sys_text_bat_sub" - :limit-width 22 - :show_truncated false - :wrap false) - (label :text "${battery_status}" - :halign "start" - :class "sys_text_bat_sub" - :limit-width 22 - :show_truncated false - :wrap false))) - (label :text "" :class "sys_sep" :halign "center") - (box :class "sys_mem_box" :orientation "h" :space-evenly "false" :halign "start" - (circular-progress :value memory - :class "sys_mem" - :thickness 9 - (label :text "" - :class "sys_icon_mem" - :limit-width 2 - :show_truncated false - :wrap false - :angle 0.0)) - (box :orientation "v" :space-evenly "false" :spacing 0 :hexpand "false" :vexpand "false" - (label :text "memory" - :halign "start" - :class "sys_text_mem" - :limit-width 9 - :show_truncated false - :wrap false) - (label :text "${memory_used_mb} | ${memory_total_mb}mb " - :halign "start" - :class "sys_text_mem_sub" - :limit-width 22 - :show_truncated false - :wrap false) - (label :text "${memory_free_mb}mb free" - :halign "start" - :class "sys_text_mem_sub" - :limit-width 22 - :show_truncated false - :wrap false))))) - -(defwidget cal [] - (box :class "cal" :orientation "v" - (box :class "cal-in" - (calendar :class "cal" - :day calendar_day - :year calendar_year)))) - -(defwindow calendar - :geometry (geometry :x "-20px" - :y "7%" - :anchor "top right" - :width "270px" - :height "60px") -(cal)) - - - -(defwidget audio [] - (box :class "audio-box" :orientation "v" :space-evenly "false" :vexpand "false" :hexpand "false" - (box :halign "v" :space-evenly "false" :hexpand "false" :vexpand "false" - (box :class "speaker_icon" :orientation "v") - (box :orientation "v" :halign "center" :vexpand "false" :hexpand "false" - (label :class "speaker_text" :text "speaker" :valign "center" :halign "left" ) - (box :class "speaker_bar" :halign "center" :vexpand "false" :hexpand "false" - (scale :value volume_percent - :space-evenly "false" - :orientation "h" - :onchange "amixer -D pulse sset Master {}%" - :tooltip "volume on ${volume_percent}%" - :max 100 - :min 0)))) - (label :text "" :class "audio_sep" :halign "center") - (box :halign "v" :space-evenly "false" :hexpand "false" :vexpand "false" - (box :class "mic_icon" :orientation "v") - (box :orientation "v" :halign "center" :vexpand "false" :hexpand "false" - (label :class "mic_text" :text "mic" :valign "center" :halign "left" ) - (box :class "mic_bar" :halign "center" :vexpand "false" :hexpand "false" - (scale :value mic_percent - :space-evenly "false" - :orientation "h" - :tooltip "mic on ${mic_percent}%" - :onchange "amixer -D pulse sset Capture {}%" - :max 100 - :min 0)))))) - -(defwindow audio_ctl - :geometry (geometry :x "-20px" - :y "7%" - :anchor "top right" - :width "280px" - :height "60px") -(audio)) - - -(defwindow system - :geometry (geometry :x "-20px" - :y "7%" - :anchor "top right" - :width "290px" - :height "120px") -(system)) - - - -;; Music -(defwidget music_pop [] - (box :class "music_pop" :orientation "h" :space-evenly "false" :vexpand "false" :hexpand "false" - (box :class "music_cover_art" :vexpand "false" :hexpand "false" :style "background-image: url('${cover_art}');") - (box :orientation "v" :spacing 20 :space-evenly "false" :vexpand "false" :hexpand "false" - (label :halign "center" :class "music" :wrap "true" :limit-width 13 :text song) - (label :halign "center" :class "music_artist" :wrap "true" :limit-width 15 :text song_artist) - (box :orientation "h" :spacing 15 :halign "center" :space-evenly "false" :vexpand "false" :hexpand "false" - (button :class "music_btn_prev" :onclick "~/.config/eww/bar/scripts/music_info --prev" "") - (button :class "music_btn_play" :onclick "~/.config/eww/bar/scripts/music_info --toggle" song_status) - (button :class "music_btn_next" :onclick "~/.config/eww/bar/scripts/music_info --next" "")) - (box :class "music_bar" :halign "center" :vexpand "false" :hexpand "false" :space-evenly "false" - (scale :onscroll "mpc -q seek {}" :min 0 :active "true" :max 100 :value current_status))))) - - -;; music - (defwindow music_win :stacking "fg" :focusable "false" :screen 1 - :geometry (geometry :x "0" :y "7%" :width 428 :height 104 :anchor "top center") - (music_pop)) - diff --git a/eww_desktop/bar/images/mic.png b/eww_desktop/bar/images/mic.png deleted file mode 100644 index d77f315..0000000 Binary files a/eww_desktop/bar/images/mic.png and /dev/null differ diff --git a/eww_desktop/bar/images/music.png b/eww_desktop/bar/images/music.png deleted file mode 100644 index 11804f5..0000000 Binary files a/eww_desktop/bar/images/music.png and /dev/null differ diff --git a/eww_desktop/bar/images/profile.png b/eww_desktop/bar/images/profile.png deleted file mode 100644 index 0190a36..0000000 Binary files a/eww_desktop/bar/images/profile.png and /dev/null differ diff --git a/eww_desktop/bar/images/speaker.png b/eww_desktop/bar/images/speaker.png deleted file mode 100644 index 79e005b..0000000 Binary files a/eww_desktop/bar/images/speaker.png and /dev/null differ diff --git a/eww_desktop/bar/launch_bar b/eww_desktop/bar/launch_bar deleted file mode 100755 index 51f2a1d..0000000 --- a/eww_desktop/bar/launch_bar +++ /dev/null @@ -1,27 +0,0 @@ -#!/bin/bash - -## Files and cmd -FILE="$HOME/.cache/eww_launch.xyz" -EWW="$HOME/.local/bin/eww/eww -c $HOME/.config/eww/bar" - -## Run eww daemon if not running already -if [[ ! `pidof eww` ]]; then - ${EWW} daemon - sleep 1 -fi - -## Open widgets -run_eww() { - ${EWW} open-many \ - bar - -} - -## Launch or close widgets accordingly -if [[ ! -f "$FILE" ]]; then - touch "$FILE" - run_eww && bspc config -m LVDS-1 top_padding 49 -else - ${EWW} close-all && killall eww - rm "$FILE" -fi diff --git a/eww_desktop/bar/scripts/battery b/eww_desktop/bar/scripts/battery deleted file mode 100755 index 0540a1b..0000000 --- a/eww_desktop/bar/scripts/battery +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/bash - -battery() { - BAT=`ls /sys/class/power_supply | grep BAT | head -n 1` - cat /sys/class/power_supply/${BAT}/capacity -} -battery_stat() { - BAT=`ls /sys/class/power_supply | grep BAT | head -n 1` - cat /sys/class/power_supply/${BAT}/status -} - -if [[ "$1" == "--bat" ]]; then - battery -elif [[ "$1" == "--bat-st" ]]; then - battery_stat -fi - diff --git a/eww_desktop/bar/scripts/mem-ad b/eww_desktop/bar/scripts/mem-ad deleted file mode 100755 index 1e4cf89..0000000 --- a/eww_desktop/bar/scripts/mem-ad +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/sh - - -total="$(free -m | grep Mem: | awk '{ print $2 }')" -used="$(free -m | grep Mem: | awk '{ print $3 }')" - -free=$(expr $total - $used) - -if [ "$1" = "total" ]; then - echo $total -elif [ "$1" = "used" ]; then - echo $used -elif [ "$1" = "free" ]; then - echo $free -fi diff --git a/eww_desktop/bar/scripts/memory b/eww_desktop/bar/scripts/memory deleted file mode 100755 index 217c834..0000000 --- a/eww_desktop/bar/scripts/memory +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh - -printf "%.0f\n" $(free -m | grep Mem | awk '{print ($3/$2)*100}') diff --git a/eww_desktop/bar/scripts/music_info b/eww_desktop/bar/scripts/music_info deleted file mode 100755 index ffafe87..0000000 --- a/eww_desktop/bar/scripts/music_info +++ /dev/null @@ -1,98 +0,0 @@ -#!/bin/bash -# scripts by adi1090x - -## Get data -STATUS="$(mpc status)" -COVER="/tmp/.music_cover.png" -MUSIC_DIR="$HOME/Music" - -## Get status -get_status() { - if [[ $STATUS == *"[playing]"* ]]; then - echo "" - else - echo "奈" - fi -} - -## Get song -get_song() { - song=`mpc -f %title% current` - if [[ -z "$song" ]]; then - echo "Offline" - else - echo "$song" - fi -} - -## Get artist -get_artist() { - artist=`mpc -f %artist% current` - if [[ -z "$artist" ]]; then - echo "" - else - echo "$artist" - fi -} - -## Get time -get_time() { - time=`mpc status | grep "%)" | awk '{print $4}' | tr -d '(%)'` - if [[ -z "$time" ]]; then - echo "0" - else - echo "$time" - fi -} -get_ctime() { - ctime=`mpc status | grep "#" | awk '{print $3}' | sed 's|/.*||g'` - if [[ -z "$ctime" ]]; then - echo "0:00" - else - echo "$ctime" - fi -} -get_ttime() { - ttime=`mpc -f %time% current` - if [[ -z "$ttime" ]]; then - echo "0:00" - else - echo "$ttime" - fi -} - -## Get cover -get_cover() { - ffmpeg -i "${MUSIC_DIR}/$(mpc current -f %file%)" "${COVER}" -y &> /dev/null - STATUS=$? - - # Check if the file has a embbeded album art - if [ "$STATUS" -eq 0 ];then - echo "$COVER" - else - echo "images/music.png" - fi -} - -## Execute accordingly -if [[ "$1" == "--song" ]]; then - get_song -elif [[ "$1" == "--artist" ]]; then - get_artist -elif [[ "$1" == "--status" ]]; then - get_status -elif [[ "$1" == "--time" ]]; then - get_time -elif [[ "$1" == "--ctime" ]]; then - get_ctime -elif [[ "$1" == "--ttime" ]]; then - get_ttime -elif [[ "$1" == "--cover" ]]; then - get_cover -elif [[ "$1" == "--toggle" ]]; then - mpc -q toggle -elif [[ "$1" == "--next" ]]; then - { mpc -q next; get_cover; } -elif [[ "$1" == "--prev" ]]; then - { mpc -q prev; get_cover; } -fi diff --git a/eww_desktop/bar/scripts/pop b/eww_desktop/bar/scripts/pop deleted file mode 100755 index aef82e8..0000000 --- a/eww_desktop/bar/scripts/pop +++ /dev/null @@ -1,92 +0,0 @@ -#!/bin/bash - -calendar() { -LOCK_FILE="$HOME/.cache/eww-calendar.lock" -EWW_BIN="$HOME/.local/bin/eww/eww" - -run() { - ${EWW_BIN} -c $HOME/.config/eww/bar open calendar -} - -# Open widgets -if [[ ! -f "$LOCK_FILE" ]]; then - ${EWW_BIN} -c $HOME/.config/eww/bar close system music_win audio_ctl - touch "$LOCK_FILE" - run && echo "ok good!" -else - ${EWW_BIN} -c $HOME/.config/eww/bar close calendar - rm "$LOCK_FILE" && echo "closed" -fi -} - - -system() { -LOCK_FILE_MEM="$HOME/.cache/eww-system.lock" -EWW_BIN="$HOME/.local/bin/eww/eww" - -run() { - ${EWW_BIN} -c $HOME/.config/eww/bar open system -} - -# Open widgets -if [[ ! -f "$LOCK_FILE_MEM" ]]; then - ${EWW_BIN} -c $HOME/.config/eww/bar close calendar music_win audio_ctl - touch "$LOCK_FILE_MEM" - run && echo "ok good!" -else - ${EWW_BIN} -c $HOME/.config/eww/bar close system - rm "$LOCK_FILE_MEM" && echo "closed" -fi -} - - -music() { -LOCK_FILE_SONG="$HOME/.cache/eww-song.lock" -EWW_BIN="$HOME/.local/bin/eww/eww" - -run() { - ${EWW_BIN} -c $HOME/.config/eww/bar open music_win -} - -# Open widgets -if [[ ! -f "$LOCK_FILE_SONG" ]]; then - ${EWW_BIN} -c $HOME/.config/eww/bar close system calendar - touch "$LOCK_FILE_SONG" - run && echo "ok good!" -else - ${EWW_BIN} -c $HOME/.config/eww/bar close music_win - rm "$LOCK_FILE_SONG" && echo "closed" -fi -} - - - -audio() { -LOCK_FILE_AUDIO="$HOME/.cache/eww-audio.lock" -EWW_BIN="$HOME/.local/bin/eww/eww" - -run() { - ${EWW_BIN} -c $HOME/.config/eww/bar open audio_ctl -} - -# Open widgets -if [[ ! -f "$LOCK_FILE_AUDIO" ]]; then - ${EWW_BIN} -c $HOME/.config/eww/bar close system calendar music - touch "$LOCK_FILE_AUDIO" - run && echo "ok good!" -else - ${EWW_BIN} -c $HOME/.config/eww/bar close audio_ctl - rm "$LOCK_FILE_AUDIO" && echo "closed" -fi -} - - -if [ "$1" = "calendar" ]; then -calendar -elif [ "$1" = "system" ]; then -system -elif [ "$1" = "music" ]; then -music -elif [ "$1" = "audio" ]; then -audio -fi diff --git a/eww_desktop/bar/scripts/wifi b/eww_desktop/bar/scripts/wifi deleted file mode 100755 index 5d7cc59..0000000 --- a/eww_desktop/bar/scripts/wifi +++ /dev/null @@ -1,26 +0,0 @@ -#!/bin/bash - -status=$(nmcli g | grep -oE "disconnected") -essid=$(nmcli c | grep wlp2s0 | awk '{print ($1)}') - -if [ $status ] ; then - icon="" - text="" - col="#575268" - -else - icon="" - text="${essid}" - col="#a1bdce" -fi - - - -if [[ "$1" == "--COL" ]]; then - echo $col -elif [[ "$1" == "--ESSID" ]]; then - echo $text -elif [[ "$1" == "--ICON" ]]; then - echo $icon -fi - diff --git a/eww_desktop/bar/scripts/workspace b/eww_desktop/bar/scripts/workspace deleted file mode 100755 index f202ef1..0000000 --- a/eww_desktop/bar/scripts/workspace +++ /dev/null @@ -1,56 +0,0 @@ -#!/bin/sh -workspaces() { - -ws1="1" -ws2="2" -ws3="3" -ws4="4" -ws5="5" -ws6="6" - -# Unoccupied -un="0" - -# check if Occupied -o1=$(bspc query -D -d .occupied --names | grep "$ws1" ) -o2=$(bspc query -D -d .occupied --names | grep "$ws2" ) -o3=$(bspc query -D -d .occupied --names | grep "$ws3" ) -o4=$(bspc query -D -d .occupied --names | grep "$ws4" ) -o5=$(bspc query -D -d .occupied --names | grep "$ws5" ) -o6=$(bspc query -D -d .occupied --names | grep "$ws6" ) - -# check if Focused -f1=$(bspc query -D -d focused --names | grep "$ws1" ) -f2=$(bspc query -D -d focused --names | grep "$ws2" ) -f3=$(bspc query -D -d focused --names | grep "$ws3" ) -f4=$(bspc query -D -d focused --names | grep "$ws4" ) -f5=$(bspc query -D -d focused --names | grep "$ws5" ) -f6=$(bspc query -D -d focused --names | grep "$ws6" ) - -ic_1="" -ic_2="" -ic_3="" -ic_4="" -ic_5="" -ic_6="" -if [ $f1 ]; then - ic_1="" -elif [ $f2 ]; then - ic_2="" -elif [ $f3 ]; then - ic_3="" -elif [ $f4 ]; then - ic_4="" -elif [ $f5 ]; then - ic_5="" -elif [ $f6 ]; then - ic_6="" -fi - -echo "(box :class \"works\" :orientation \"h\" :spacing 5 :space-evenly \"false\" (button :onclick \"bspc desktop -f $ws1\" :class \"$un$o1$f1\" \"$ic_1\") (button :onclick \"bspc desktop -f $ws2\" :class \"$un$o2$f2\" \"$ic_2\") (button :onclick \"bspc desktop -f $ws3\" :class \"$un$o3$f3\" \"$ic_3\") (button :onclick \"bspc desktop -f $ws4\" :class \"$un$o4$f4\" \"$ic_4\") (button :onclick \"bspc desktop -f $ws5\" :class \"$un$o5$f5\" \"$ic_5\") (button :onclick \"bspc desktop -f $ws6\" :class \"$un$o6$f6\" \"$ic_6\"))" - -} -workspaces -bspc subscribe desktop node_transfer | while read -r _ ; do -workspaces -done diff --git a/eww_desktop/eww.scss b/eww_desktop/eww.scss deleted file mode 100644 index 118deff..0000000 --- a/eww_desktop/eww.scss +++ /dev/null @@ -1,510 +0,0 @@ -* { - all: unset; - font-family: feather; - font-family: DaddyTimeMono Nerd Font; -} - -/** General **/ -.bar_class { - background-color: #282828; - border-radius: 10px; -} -.module { - margin: 0px 0px 0px 0px; - border-radius: 10px 10px 0px 10px; -} - -/** tooltip!! **/ -tooltip.background { - background-color: #0f0f17; - font-size: 14; - border-radius: 10px; - color: #bfc9db; -} - -tooltip label { - margin: 3px; -} - -/** Widgets **/ - -.clock_time_sep { - font-size: 20; - color: #bfc9db; - margin: 0px 0px 1px 0px; -} -.clock_time_class, -.clock_minute_class { - font-size: 24; -} -.clock_date_class { - font-size: 21; - margin: 0px 5px 0px 5px; - color: #d7beda; -} -.clock_minute_class { - margin: 0px 5px 0px 2px; - color: #bfc9db; -} -.clock_time_class { - color: #bfc9db; - font-weight: bold; - margin: 0px 0px 0px 8px; -} - -.membar { - color: #e0b089; - background-color: #38384d; - border-radius: 10px; -} - -.module_app_text { - font-size: 23; - margin: 2px 0px 0px 0px; -} - -.bright_icon_overlay { - font-size: 28; - color: #e4c9af; - background-size: cover; - background-position: center; - margin: 0px 27px 0px 3px; -} -.volume_icon { - font-size: 22; - color: #a1bdce; - margin: 0px 5px 0px 0px; -} -.module-blu { - font-size: 22; - color: #a1bdce; - border-radius: 100%; - margin: 0px 10px 0px 0px; -} - -.iconmem { - font-size: 23; - margin: 0px -3px 4px 8px; - color: #e0b089; -} - -.mem_padding { - margin: 10px; -} - -.separ { - color: #3e424f; - font-weight: bold; - font-size: 22px; - margin: 0px 0px 0px 0px; -} - -.mem_module { - background-color: #282828; - border-radius: 16px; - margin: 0px 10px 0px 0px; -} - -scale trough { - all: unset; - background-color: #22242b; - box-shadow: 0 2px 3px 2px #06060b; - border-radius: 16px; - min-height: 10px; - min-width: 70px; - margin: 0px 10px 0px 0px; -} - -.works { - font-size: 27px; - font-weight: normal; - margin: 0px 0px 0px 15px; - background-color: #282828; -} - -.0, -.01, -.02, -.03, -.04, -.05, -.06, -.011, -.022, -.033, -.044, -.055, -.066 { - margin: 0px 10px 0px 0px; -} - -/* Unoccupied */ -.0 { - color: #3e424f; -} - -/* Occupied */ -.01, -.02, -.03, -.04, -.05, -.06 { - color: #bfc9db; -} - -/* Focused */ -.011, -.022, -.033, -.044, -.055, -.066 { - color: #a1bdce; -} - -.song_cover_art { - background-size: cover; - background-position: center; - min-height: 24px; - min-width: 24px; - margin: 10px; - border-radius: 100px; -} - -// Calendar -.cal { - border-radius: 10px; - background-color: #0f0f17; - font-family: JetBrainsMono Nerd Font; - font-size: 18px; - font-weight: normal; - - .cal-in { - padding: 0px 10px 0px 10px; - color: #bfc9db; - - .cal { - &.highlight { - padding: 20px; - } - - padding: 5px 5px 5px 5px; - margin-left: 10px; - } - } -} - -calender { - color: #bfc9db; -} -calendar:selected { - color: #a1bdce; -} - -calendar.header { - color: #a1bdce; - font-weight: bold; -} - -calendar.button { - color: #afbea2; -} - -calendar.highlight { - color: #a1bdce; - font-weight: bold; -} - -calendar:indeterminate { - color: #bfc9db; -} - -.sys_sep { - color: #38384d; - font-size: 18; - margin: 0px 10px 0px 10px; -} -.sys_text_mem_sub { - font-size: 16; - color: #bbc5d7; - margin: 5px 0px 0px 25px; -} -.sys_text_mem { - font-size: 21; - font-weight: bold; - margin: 14px 0px 0px 25px; -} -.sys_icon_mem { - font-size: 30; - margin: 30px; -} -.sys_win { - border-radius: 10px; - background-color: #0f0f17; -} - -.sys_mem { - color: #e4c9af; - background-color: #38384d; - border-radius: 10px; -} - -.sys_icon_mem, -.sys_text_mem { - color: #e4c9af; -} - -.sys_mem_box { - border-radius: 16px; - margin: 10px 10px 15px 20px; -} - -.audio-box { - background-color: #0f0f17; - border-radius: 16px; -} -.speaker_icon { - background-size: cover; - background-image: url("images/speaker.png"); - background-position: center; - min-height: 40px; - min-width: 45px; - margin: 10px 10px 5px 20px; - border-radius: 12px; -} - -.speaker_text { - color: #a1bdce; - font-size: 22px; - font-weight: bold; - margin: 5px 15px 0px 15px; -} -.bright_text { - color: #a1bdce; - font-size: 22px; - font-weight: bold; - margin: 5px 15px 0px 25px; -} - -.change_audio_box { - margin: 0px 0px 0px 10px; -} - -.change_audio { - color: #a1bdce; - margin: 0px 50px 0px 50px; - font-size: 30px; - font-weight: bold; -} - -.speaker_bar scale trough highlight { - all: unset; - background-image: linear-gradient( - to right, - #afcee0 30%, - #a1bdce 50%, - #77a5bf 100% * 50 - ); - border-radius: 24px; -} -.speaker_bar scale trough { - all: unset; - background-color: #232232; - box-shadow: 0 6px 5px 2px #06060b; - border-radius: 24px; - min-height: 10px; - min-width: 100px; - margin: 0px 0px 5px 0px; -} - -.mic_icon { - background-size: cover; - background-image: url("images/mic.png"); - background-position: center; - min-height: 40px; - min-width: 45px; - margin: 5px 20px 20px 10px; - border-radius: 12px; -} - -.mic_text { - color: #a1bdce; - font-size: 26px; - font-weight: bold; - margin: 0px 0px 0px 0px; -} - -.mic_bar scale trough highlight { - all: unset; - background-image: linear-gradient( - to right, - #afcee0 30%, - #a1bdce 50%, - #77a5bf 100% * 50 - ); - border-radius: 24px; -} -.mic_bar scale trough { - all: unset; - box-shadow: 0 6px 5px 2px #06060b; - background-color: #232232; - border-radius: 24px; - min-height: 10px; - min-width: 100px; - margin: 6px 0px 20px 0px; -} - -.audio_sep { - color: #38384d; - font-size: 18; - margin: 0px 0px 0px 0px; -} - -//cockpit stuff - -.cockpit_class { - all: unset; -} - -.cockpit_clock { - padding: 0px 30px 0px 30px; -} - -.cockpit_box { - background-color: #06060b; - border-radius: 10px; - margin: 5px; - padding: 0px 5px 0px 5px; - opacity: 0.85; -} - -.cockpit_button_shutdown { - color: red; - font-size: 40px; - margin: 0px 5px -30px 5px; -} - -.cockpit_button_sleep { - color: blue; - font-size: 40px; - margin: 0px 5px -30px 5px; -} - -.cockpit_button_restart { - color: green; - font-size: 40px; - margin: 0px 5px -30px 5px; -} - -.song_info { - margin: -50px 0px 0px 0px; - font-size: 20px; - color: grey; -} - -.album_cover { - margin: -60px 10px 20px 10px; - padding: 0px; - background-size: cover; - background-repeat: no-repeat; - background-position: center; - border-radius: 10px; -} - -.cockpit_button_settings { - color: #d35d6e; - font-size: 35px; - margin: -30px 5px 0px 5px; -} - -.weather-icon { - font-size: 80px; - margin: 10px 0px 5px 10px; - font-family: Iosevka; -} - -.weather-stat { - font-size: 30px; - font-weight: bold; - color: #d35d6e; - margin: -5px 0px 10px 50px; -} - -.temperature { - color: grey; - font-size: 48px; - font-weight: 900; - margin: 0px 0px 0px 20px; -} -.weather-quote { - margin: 20px 10px 1000px 10px; - font-size: 20px; -} -.weather-quote-head, -.weather-quote-tail { - color: grey; - font-size: 18px; - margin: 0px 0px 10px 0px; -} - -.cockpit_clock_left { - font-size: 50px; - font-weight: bold; - color: #d35d6e; - margin: 5px -20px -30px 0px; -} - -.cockpit_clock_right { - font-size: 50px; - font-weight: bold; - color: #d35d6e; - margin: 5px 0px -30px -20px; -} - -.cockpit_date { - font-size: 50px; - font-weight: bold; - color: #d35d6e; - margin: -30px -20px 0px -20px; -} - -.cockpit_clock_sep { - font-size: 40px; - font-weight: bold; - color: #d35d6e; - margin: 0px -20px -30px -20px; -} - -.cockpit_docs { - color: red; - font-size: 30px; - margin: 10px 0px -10px 0px; -} - -.cockpit_pics { - color: green; - font-size: 30px; - margin: 0px 0px 0px 0px; - padding: 0px; -} - -.cockpit_gits { - color: blue; - font-size: 30px; - margin: -20px 0px 10px 0px; -} - -.cockpit_sep_bottom { - color: #38384d; - font-size: 18; - margin: -10px 0px 0px 0px; - padding: 0px; -} - -.cockpit_sep_top { - color: #38384d; - font-size: 18; - margin: 0px 0px -10px 0px; - padding: 0px; -} diff --git a/eww_desktop/eww.yuck b/eww_desktop/eww.yuck deleted file mode 100644 index 7c591f9..0000000 --- a/eww_desktop/eww.yuck +++ /dev/null @@ -1,354 +0,0 @@ -;; date definitions ;; -(defpoll clock_time :interval "1m" "date +\%I") -(defpoll clock_minute :interval "5s" "date +\%M") -(defpoll clock_date :interval "1h" "date '+%d/%m'") - -;; volume definitions ;; -(defpoll volume_percent :interval "1s" "pactl get-sink-volume @DEFAULT_SINK@ | awk -F '/' ' { print $2 } ' | tr -d ' %'") -(defpoll mic_percent :interval "1s" "pactl get-source-volume @DEFAULT_SOURCE@ | awk -F'/' '{ print $2 }' | tr -d ' %'") - -;; memory definitions ;; -(defpoll memory :interval "15s" "scripts/memory") -(defpoll memory_used_mb :interval "2m" "scripts/mem-ad used") -(defpoll memory_total_mb :interval "2m" "scripts/mem-ad total") -(defpoll memory_free_mb :interval "2m" "scripts/mem-ad free") - -;; music definitions ;; -(defpoll Song_info :interval "2s" "scripts/music_control") -(defpoll Thumbnail :interval "2s" "scripts/music_control2") - -;; calendar definitions ;; -(defpoll calendar_day :interval "20h" "date '+%d'") -(defpoll calendar_year :interval "20h" "date '+%Y'") - -;; Weather vars -(defpoll weather-icon :interval "21m" "cat ~/.cache/weather/weather-icon") -(defpoll temperature :interval "21m" "cat ~/.cache/weather/weather-degree") -(defpoll weather-hex :interval "21m" "cat ~/.cache/weather/weather-hex") -(defpoll weather-stat :interval "21m" "cat ~/.cache/weather/weather-stat") -(defpoll weather-stat-side :interval "21m" "~/.config/eww/scripts/weather-trimmer") -(defpoll weather-quote :interval "21m" "~/.config/eww/scripts/getwethquote") -(defpoll weather-quote2 :interval "21m" "~/.config/eww/scripts/getwethquote2") - -;; simple variables ;; -(defvar eww "$HOME/.local/bin/eww -c $HOME/.config/eww") -(defvar vol_reveal false) -(defvar br_reveal false) -(defvar music_reveal false) -(defvar wifi_rev false) -(defvar time_rev false) -(defvar current_monitor 0) -(deflisten workspace "scripts/workspace") -(deflisten currentName "scripts/current_name") - - -;; widgets -(defwidget bluetooth [] - (box :vexpand "false" :hexpand "false" :space-evenly "false" - (button :class "module-blu" :onclick "hyprctl dispatch exec 'blueman-manager'" :wrap "false" :limit-width 12 "") - )) - -;; workspaces ;; -(defwidget workspaces [] - (literal :content workspace)) - -;; memory ;; -(defwidget mem [] - (box :class "mem_module" :vexpand "false" :hexpand "false" - (button :class "iconmem" - :onclick "$HOME/.config/eww/scripts/pop system" - (circular-progress :value memory - :class "membar" - :thickness 4 - :tooltip "using ${memory}% ram" - :show_truncated false - :wrap false - (label :class "mem_padding" :text "") - )))) - -;; seperator ;; -(defwidget sep [] - (box :class "module-2" :vexpand "false" :hexpand "false" - (label :class "separ" :text "|"))) - -;; clock ;; -(defwidget clock_module [] - (eventbox :onhover "${eww} update time_rev=true" - :onhoverlost "${eww} update time_rev=false" - (button :onclick "scripts/pop calendar" - (box :class "module" :space-evenly "false" :orientation "h" :spacing "3" - (label :text clock_time :class "clock_time_class" ) - (label :text "" :class "clock_time_sep" ) - (label :text clock_minute :class "clock_minute_class") - (revealer :class "clock_date_class" - :transition "slideleft" - :reveal time_rev - :duration "350ms" - clock_date - ))))) - -;; speaker volume ;; -(defwidget volume [] - (box :class "module-2" :space-evenly "false" :orientation "h" :spacing "3" - (button :onclick "scripts/pop audio" :class "volume_icon" ""))) - -;; audio volume widget ;; -(defwidget audio [] - (eventbox :onhover "scripts/pop hoverCreate" - :onhoverlost "scripts/pop hoverGet audio_ctl" - (box :class "audio-box" :orientation "v" :space-evenly "false" :vexpand "false" :hexpand "false" - (box :halign "center" :space-evenly "false" :hexpand "false" :vexpand "false" - (box :class "speaker_icon" :orientation "v") - (box :orientation "v" :halign "center" :vexpand "false" :hexpand "false" - (label :class "speaker_text" :text "speaker" :valign "center" :halign "left" ) - (box :class "speaker_bar" :halign "center" :vexpand "false" :hexpand "false" - (scale :value volume_percent - :space-evenly "false" - :orientation "h" - :onchange "pactl set-sink-volume @DEFAULT_SINK@ {}%" - :tooltip "volume on ${volume_percent}%" - :max 100 - :min 0)))) - (label :text "" :class "audio_sep" :halign "center") - (box :halign "center" :space-evenly "false" :hexpand "false" :vexpand "false" - (box :class "mic_icon" :orientation "v") - (box :orientation "v" :halign "center" :vexpand "false" :hexpand "false" - (label :class "speaker_text" :text "mic" :valign "center" :halign "left" ) - (box :class "mic_bar" :halign "center" :vexpand "false" :hexpand "false" - (scale :value mic_percent - :space-evenly "false" - :orientation "h" - :tooltip "mic on ${mic_percent}%" - :onchange "pactl set-source-volume @DEFAULT_SOURCE@ {}%" - :max 100 - :min 0)))) - (label :text "" :class "audio_sep" :halign "center") - (box :class "change_audio_box" :halign "center" :spac`e-evenly "false" :hexpand "false" :vexpand "false" - (box :class "change_audio" :orientation "v" :halign "left" - (button :onclick "scripts/change-audio internal" "")) - (box :class "change_audio" :orientation "v" :halign "right" - (button :onclick "scripts/change-audio bluetooth" "")) - )))) - -(defwidget cname [] - (literal :content currentName)) - -;; calendar ;; -(defwidget cal [] - (eventbox :onhover "scripts/pop hoverCreate" - :onhoverlost "scripts/pop hoverGet calendar" - (box :class "cal" :orientation "v" - (box :class "cal-in" - (calendar :class "cal" - :day calendar_day - :year calendar_year))))) - -(defwidget system [] - (eventbox :onhover "scripts/pop hoverCreate" - :onhoverlost "scripts/pop hoverGet system" - (box :class "sys_win" :orientation "v" :space-evenly "false" :hexpand "false" :vexpand "false" :spacing 0 - (box :class "sys_mem_box" :orientation "h" :space-evenly "false" :halign "start" - (circular-progress :value memory - :class "sys_mem" - :thickness 9 - (label :text "" - :class "sys_icon_mem" - :limit-width 2 - :show_truncated false - :wrap false - :angle 0.0)) - (box :orientation "v" :space-evenly "false" :spacing 0 :hexpand "false" :vexpand "false" - (label :text "memory" - :halign "start" - :class "sys_text_mem" - :limit-width 9 - :show_truncated false - :wrap false) - (label :text "${memory_used_mb} | ${memory_total_mb}mb " - :halign "start" - :class "sys_text_mem_sub" - :limit-width 22 - :show_truncated false - :wrap false) - (label :text "${memory_free_mb}mb free" - :halign "start" - :class "sys_text_mem_sub" - :limit-width 22 - :show_truncated false - :wrap false)))))) - -;; cockpit widget ;; -(defwidget cockpit [] - (box :orientation "h" - (box :class "cockpit_class" - :orientation "h" - (box :orientation "v" - (box :class "cockpit_box" :orientation "v" - (box - (button :class "cockpit_button_shutdown" :onclick "hyprctl dispatch exec 'shutdown now'" "") - (button :class "cockpit_button_restart" :onclick "hyprctl dispatch exec reboot" "") - (button :class "cockpit_button_sleep" :onclick "hyprctl dispatch exec 'playerctl -a pause & swaylock -c 000000 & systemctl suspend'" "")) - (label :text "" :class "audio_sep" :halign "center") - (box - (button :class "cockpit_button_settings" :onclick "hyprctl dispatch exec 'pavucontrol'" "") - (button :class "cockpit_button_settings" :onclick "scripts/change-audio bluetooth" ""))) - (box :class "cockpit_box" :orientation "v" - (button :class "cockpit_docs" :onclick "hyprctl dispatch exec nautilus $HOME/Documents" "Documents ") - (label :text "" :class "cockpit_sep_top" :halign "center") - (button :class "cockpit_pics" :onclick "hyprctl dispatch exec nautilus $HOME/Pictures" "Pictures ") - (label :text "" :class "cockpit_sep_bottom" :halign "center") - (button :class "cockpit_gits" :onclick "hyprctl dispatch exec 'alacritty --working-directory $HOME/gits'" "gits "))) - (box :orientation "v" - (box :class "cockpit_box" :orientation "v" - (box :class "cockpit_clock" - (label :text clock_time :class "cockpit_clock_left" ) - (label :text "" :class "cockpit_clock_sep" ) - (label :text clock_minute :class "cockpit_clock_right")) - (label :text "" :class "audio_sep" :halign "center") - (box :class "cockpit_clock" - (label :text clock_date :class "cockpit_date") - )) - (box :class "cockpit_box" (weather))) - (box :width 300 :height 200 :class "cockpit_box" :orientation "v" - (box :class "song_info" - (label :wrap true :text "${Song_info}")) - (box :class "album_cover" :style 'background-image: url("${Thumbnail}")') - ))) -) - -;; weather ;; - (defwidget weather [] - (box :orientation "v" :space-evenly "false" - (box :orientation "h" :space-evenly "false" - (box :class "weather-icon" :style "color: ${weather-hex}" {weather-icon}) - (box :class "temperature" "${temperature}")) - (box :orientation "v" :space-evenly "false" - (box :class "weather-stat" {weather-stat})) - (box :class "weather-quote-head" - (label :wrap true :text {weather-quote})))) - -;; left side but displayed right? ;; -(defwidget left [] - (box :orientation "h" - :space-evenly false - :halign "end" - :class "left_modules" -(volume) -(bluetooth) -(sep) -(mem) -(sep) -(clock_module))) - -;; right side but displayed left? ;; -(defwidget right [] - (box :orientation "h" - :space-evenly false - :halign "start" - :class "right_modules" -(workspaces))) - -;; center widget ;; -(defwidget center [] - (box :orientation "h" - :space-evenly false - :halign "center" - :class "center_modules" -(cname))) - -;; bar as widget;; -(defwidget bar_1 [] - (box :class "bar_class" - :orientation "h" - (right) - (center) - (left) - )) - - - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; Drawing Windows ;; -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - -(defwindow calendar - :monitor 0 - :geometry (geometry :x "20px" - :y "2px" - :anchor "top right" - :width "270px" - :height "60px") - :stacking "overlay" -(cal)) - -(defwindow audio_ctl - :monitor 0 - :geometry (geometry :x "120px" - :y "2px" - :anchor "top right" - :width "250px" - :height "230px") - :stacking "overlay" -(audio)) - -(defwindow system - :monitor 0 - :geometry (geometry :x "50px" - :y "2px" - :anchor "top right" - :width "290px" - :height "120px") - :stacking "overlay" -(system)) - -;; draw the bar ;; -(defwindow bar - :monitor 0 - :geometry (geometry :x "0%" - :y "1px" - :width "99%" - :height "20px" - :anchor "top center") - :stacking "bottom" - :wm-ignore false - :exclusive true - (bar_1)) - -;; draw the cockpit monitor 0 ;; -(defwindow cockpit_window_0 - :monitor 0 - :geometry (geometry :x "1470px" - :y "420px" - :width "600px" - :height "400px" - :anchor "center") - :stacking "overlay" - :wm-ignore false - :exclusive true - (cockpit)) - - -;; draw the cockpit monitor 1 ;; -(defwindow cockpit_window_1 - :monitor 1 - :geometry (geometry - :width "600px" - :height "400px" - :anchor "center") - :stacking "overlay" - :wm-ignore false - :exclusive true - (cockpit)) - - -;; draw the cockpit monitor 2 ;; -(defwindow cockpit_window_2 - :monitor 2 - :geometry (geometry - :width "600px" - :height "400px" - :anchor "center") - :stacking "overlay" - :wm-ignore false - :exclusive true - (cockpit)) diff --git a/eww_desktop/images/mic.png b/eww_desktop/images/mic.png deleted file mode 100644 index d77f315..0000000 Binary files a/eww_desktop/images/mic.png and /dev/null differ diff --git a/eww_desktop/images/music.png b/eww_desktop/images/music.png deleted file mode 100644 index 11804f5..0000000 Binary files a/eww_desktop/images/music.png and /dev/null differ diff --git a/eww_desktop/images/profile.png b/eww_desktop/images/profile.png deleted file mode 100644 index 0190a36..0000000 Binary files a/eww_desktop/images/profile.png and /dev/null differ diff --git a/eww_desktop/images/speaker.png b/eww_desktop/images/speaker.png deleted file mode 100644 index 79e005b..0000000 Binary files a/eww_desktop/images/speaker.png and /dev/null differ diff --git a/eww_desktop/launch_bar b/eww_desktop/launch_bar deleted file mode 100755 index 205cd60..0000000 --- a/eww_desktop/launch_bar +++ /dev/null @@ -1,27 +0,0 @@ -#!/bin/bash - -## Files and cmd -FILE="$HOME/.cache/eww_launch.xyz" -EWW="$HOME/.local/bin/eww -c $HOME/.config/eww" - -## Run eww daemon if not running already -if [[ ! `pidof eww` ]]; then - ${EWW} daemon - sleep 1 -fi - -## Open widgets -run_eww() { - ${EWW} open-many \ - bar - -} - -## Launch or close widgets accordingly -if [[ ! -f "$FILE" ]]; then - touch "$FILE" - run_eww && bspc config -m LVDS-1 top_padding 49 -else - ${EWW} close-all && killall eww - rm "$FILE" -fi diff --git a/eww_desktop/scripts/audio_devices b/eww_desktop/scripts/audio_devices deleted file mode 100755 index 1548cfd..0000000 --- a/eww_desktop/scripts/audio_devices +++ /dev/null @@ -1,31 +0,0 @@ -#!/bin/bash -CLIENTS=$(pactl list sink-inputs | grep "application.process.binary" | awk -F '= ' ' { print $2 } ' | tr -d '"') - -readarray -t lines <<<"$CLIENTS" - -printf "%s\n" "${lines[@]}" -echo ${lines[2]} - - -#echo "(box :class \"works\" :orientation \"h\" :spacing 5 :space-evenly \"false\" (button :onclick \"hyprctl dispatch workspace 1\" :class \"$un$o1$f1\" \"$ic_1\") (button :onclick \"hyprctl dispatch workspace 2\" :class \"$un$o2$f2\" \"$ic_2\") (button :onclick \"hyprctl dispatch workspace 3\" :class \"$un$o3$f3\" \"$ic_3\") (button :onclick \"hyprctl dispatch workspace 4\" :class \"$un$o4$f4\" \"$ic_4\") (button :onclick \"hyprctl dispatch workspace 5\" :class \"$un$o5$f5\" \"$ic_5\") (button :onclick \"hyprctl dispatch workspace 6\" :class \"$un$o6$f6\" \"$ic_6\") (button :onclick \"hyprctl dispatch workspace 7\" :class \"$un$o7$f7\" \"$ic_7\") (button :onclick \"hyprctl dispatch workspace 8\" :class \"$un$o8$f8\" \"$ic_8\"))" - - # (eventbox :onhover "scripts/pop hoverCreate" - # :onhoverlost "scripts/pop hoverGet audio_ctl" - # (box :class "audio-box" :orientation "v" :space-evenly "false" :vexpand "false" :hexpand "false" - - # (box :halign "center" :space-evenly "false" :hexpand "false" :vexpand "false" - # (box :class "speaker_icon" :orientation "v") - # (box :orientation "v" :halign "center" :vexpand "false" :hexpand "false" - # (label :class "speaker_text" :text "speaker" :valign "center" :halign "left" ) - # (box :class "speaker_bar" :halign "center" :vexpand "false" :hexpand "false" - # (scale :value volume_percent - # :space-evenly "false" - # :orientation "h" - # :onchange "pactl set-sink-volume @DEFAULT_SINK@ {}%" - # :tooltip "volume on ${volume_percent}%" - # :max 100 - # :min 0)))) - - # (label :text "" :class "audio_sep" :halign "center") - - # )))) diff --git a/eww_desktop/scripts/battery b/eww_desktop/scripts/battery deleted file mode 100755 index 091e715..0000000 --- a/eww_desktop/scripts/battery +++ /dev/null @@ -1,77 +0,0 @@ -#!/bin/bash - -bat=/sys/class/power_supply/BAT0/ -per="$(cat "$bat/capacity")" -char="$(cat "$bat/status")" - -icon() { - -#[ $(cat "$bat/status") = Charging ] && echo "" && exit - -if [ "$char" == "Charging" ]; then - if [ "$per" -gt "90" ]; then - icon="" - elif [ "$per" -gt "80" ]; then - icon="" - elif [ "$per" -gt "70" ]; then - icon="" - elif [ "$per" -gt "60" ]; then - icon="" - elif [ "$per" -gt "50" ]; then - icon="" - elif [ "$per" -gt "40" ]; then - icon="" - elif [ "$per" -gt "30" ]; then - icon="" - elif [ "$per" -gt "20" ]; then - icon="" - elif [ "$per" -gt "10" ]; then - icon="" - elif [ "$per" -gt "0" ]; then - icon="" - else - echo  && exit - fi -else - if [ "$per" -gt "90" ]; then - icon="" - elif [ "$per" -gt "80" ]; then - icon="" - elif [ "$per" -gt "70" ]; then - icon="" - elif [ "$per" -gt "60" ]; then - icon="" - elif [ "$per" -gt "50" ]; then - icon="" - elif [ "$per" -gt "40" ]; then - icon="" - elif [ "$per" -gt "30" ]; then - icon="" - elif [ "$per" -gt "20" ]; then - icon="" - elif [ "$per" -gt "10" ]; then - icon="" - notify-send -u critical "Battery Low" "Connect Charger" - elif [ "$per" -gt "0" ]; then - icon="" - notify-send -u critical "Battery Low" "Connect Charger" - else - echo  && exit - fi -fi - echo "$icon" -} - -percent() { - echo $per -} - -stat() { - echo $char -} - -[ "$1" = "icon" ] && icon && exit -[ "$1" = "percent" ] && percent && exit -[ "$1" = 'stat' ] && stat && exit -exit - diff --git a/eww_desktop/scripts/change-audio b/eww_desktop/scripts/change-audio deleted file mode 100755 index a003eb0..0000000 --- a/eww_desktop/scripts/change-audio +++ /dev/null @@ -1,37 +0,0 @@ -#! /bin/bash - -internal() { - SPEAKER=$(pactl list sinks | grep "Name" | grep "alsa" | awk -F ': ' '{ print $2 }') - if [ "$SPEAKER" != "" ]; then - pactl set-default-sink "$SPEAKER" - pactl set-sink-mute "$SPEAKER" false - DEVICE=$( echo "$SPEAKER" | awk -F '.' ' { print $4 } ') - notify-send "changed audio to "$DEVICE" " - else - notify-send "failed, not available!" - fi -} - -bluetooth() { - SPEAKER=$(pactl list sinks | grep "Name" | grep "blue" | awk -F ': ' '{ print $2 }') - if [ "$SPEAKER" != "" ]; then - pactl set-default-sink "$SPEAKER" - pactl set-sink-mute "$SPEAKER" false - DEVICE=$(echo "$SPEAKER" | awk -F '.' ' { print $4 } ') - notify-send "changed audio to "$DEVICE" " - else - notify-send "failed, not available!" - fi -} - - -if [ "$1" == "internal" ]; then - internal -elif [ "$1" == "bluetooth" ]; then - bluetooth -else - SPEAKER=$(pactl info | grep "Default Sink" | awk -F ': ' ' { print $2 } ') - pactl set-sink-mute "$SPEAKER" false -fi - - diff --git a/eww_desktop/scripts/change-brightness b/eww_desktop/scripts/change-brightness deleted file mode 100755 index 198dc44..0000000 --- a/eww_desktop/scripts/change-brightness +++ /dev/null @@ -1,12 +0,0 @@ -#! /bin/bash - -set_brightness() { -brightnessctl set "$1" -CURRENT=$(brightnessctl -m -d intel_backlight | awk -F, '{print substr($4, 0, length($4)-1)}') -dunstify -a "changeBrightness" -r 3 -u low -i brightness-high -h int:value:"$CURRENT" "Brightness: ${CURRENT}%" -} - -if [ "$1" == "brightness" ]; then - set_brightness "$2" -fi - diff --git a/eww_desktop/scripts/change-volume b/eww_desktop/scripts/change-volume deleted file mode 100755 index 094ed43..0000000 --- a/eww_desktop/scripts/change-volume +++ /dev/null @@ -1,20 +0,0 @@ -#! /bin/bash - -set_volume_sink() { -pactl set-sink-volume @DEFAULT_SINK@ "$1" -CURRENT=$(pactl get-sink-volume @DEFAULT_SINK@ | awk -F'/' '{ print $2 }' | tr -d ' %') -dunstify -a "changeVolume" -r 2 -u low -i audio-volume-high -h int:value:"$CURRENT" "Output Volume: ${CURRENT}%" -} - -set_volume_source() { -pactl set-source-volume @DEFAULT_SOURCE@ "$1" -CURRENT=$(pactl get-source-volume @DEFAULT_SOURCE@ | awk -F'/' '{ print $2 }' | tr -d ' %') -dunstify -a "changeMicVolume" -r 2 -u low -i audio-volume-high -h int:value:"$CURRENT" "Input Volume: ${CURRENT}%" -} - - -if [ "$1" == "sink" ]; then - set_volume_sink "$2" -elif [ "$1" == "source" ]; then - set_volume_source "$2" -fi diff --git a/eww_desktop/scripts/cockpit_toggle b/eww_desktop/scripts/cockpit_toggle deleted file mode 100755 index d23fb76..0000000 --- a/eww_desktop/scripts/cockpit_toggle +++ /dev/null @@ -1,11 +0,0 @@ -#! /bin/bash - -ISOPEN=$(eww windows | grep "*cockpit" | tr -d '*') - - -if [ "$ISOPEN" = "" ]; then -MONITOR=$(hyprctl monitors | grep -B 7 "focused: yes" | grep "ID" | awk -F '(' ' { print $2 } ' | tr -d 'ID ):') - eww open cockpit_window_"$MONITOR" -else - eww close "$ISOPEN" -fi diff --git a/eww_desktop/scripts/current_name b/eww_desktop/scripts/current_name deleted file mode 100755 index 224bfac..0000000 --- a/eww_desktop/scripts/current_name +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/bash -currentName() { - win=$(hyprctl activewindow | grep class | awk -F ':' '{print $2}' | tr -d ' ') - echo "(box :class \"module_app_text\" :space-evenly \"false\" :orientation \"h\" :spacing \"3\" (label :text \"$win\"))" -} -currentName -tail -f /tmp/hypr/$HYPRLAND_INSTANCE_SIGNATURE/hyprland.log | grep -E --line-buffered "focus to surface" | while read -r; do -currentName -done diff --git a/eww_desktop/scripts/firefox_control.sh b/eww_desktop/scripts/firefox_control.sh deleted file mode 100755 index 32d818e..0000000 --- a/eww_desktop/scripts/firefox_control.sh +++ /dev/null @@ -1,5 +0,0 @@ -#! /bin/bash - -NUM=$(pactl list clients short | grep "firefox" | awk -F 'PipeWire' ' { print $1 } ' | tr -d ' \t\n') -CLIENT=$(pactl list sink-inputs short | grep "$NUM" | awk -F ' ' ' { print $1 }' | tr -d ' \t\n') -pactl set-sink-input-volume "$CLIENT" "$1" diff --git a/eww_desktop/scripts/getwethquote b/eww_desktop/scripts/getwethquote deleted file mode 100755 index 7bfaf34..0000000 --- a/eww_desktop/scripts/getwethquote +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/bash -echo -e $(cat $HOME/.cache/weather/weather-quote) | head -n1 diff --git a/eww_desktop/scripts/getwethquote2 b/eww_desktop/scripts/getwethquote2 deleted file mode 100755 index a34afa9..0000000 --- a/eww_desktop/scripts/getwethquote2 +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/bash -echo -e $(cat $HOME/.cache/weather/weather-quote) | tail -n1 diff --git a/eww_desktop/scripts/home/dashie/.cache/weather/weather-degree b/eww_desktop/scripts/home/dashie/.cache/weather/weather-degree deleted file mode 100644 index b9dd641..0000000 --- a/eww_desktop/scripts/home/dashie/.cache/weather/weather-degree +++ /dev/null @@ -1 +0,0 @@ -8°C diff --git a/eww_desktop/scripts/home/dashie/.cache/weather/weather-hex b/eww_desktop/scripts/home/dashie/.cache/weather/weather-hex deleted file mode 100644 index 4473fae..0000000 --- a/eww_desktop/scripts/home/dashie/.cache/weather/weather-hex +++ /dev/null @@ -1 +0,0 @@ -#adadff diff --git a/eww_desktop/scripts/home/dashie/.cache/weather/weather-icon b/eww_desktop/scripts/home/dashie/.cache/weather/weather-icon deleted file mode 100644 index e93d772..0000000 --- a/eww_desktop/scripts/home/dashie/.cache/weather/weather-icon +++ /dev/null @@ -1 +0,0 @@ - diff --git a/eww_desktop/scripts/home/dashie/.cache/weather/weather-quote b/eww_desktop/scripts/home/dashie/.cache/weather/weather-quote deleted file mode 100644 index 1033f21..0000000 --- a/eww_desktop/scripts/home/dashie/.cache/weather/weather-quote +++ /dev/null @@ -1 +0,0 @@ -It's cloudy, sort of gloomy \nYou'd better get a book to read... diff --git a/eww_desktop/scripts/home/dashie/.cache/weather/weather-stat b/eww_desktop/scripts/home/dashie/.cache/weather/weather-stat deleted file mode 100644 index c3806e2..0000000 --- a/eww_desktop/scripts/home/dashie/.cache/weather/weather-stat +++ /dev/null @@ -1 +0,0 @@ -Overcast Clouds diff --git a/eww_desktop/scripts/mem-ad b/eww_desktop/scripts/mem-ad deleted file mode 100755 index 0495e00..0000000 --- a/eww_desktop/scripts/mem-ad +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/bash - - -total="$(free -m | grep Mem: | awk '{ print $2 }')" -used="$(free -m | grep Mem: | awk '{ print $3 }')" - -free=$(expr $total - $used) - -if [ "$1" = "total" ]; then - echo $total -elif [ "$1" = "used" ]; then - echo $used -elif [ "$1" = "free" ]; then - echo $free -fi diff --git a/eww_desktop/scripts/memory b/eww_desktop/scripts/memory deleted file mode 100755 index da37c1d..0000000 --- a/eww_desktop/scripts/memory +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash - -printf "%.0f\n" $(free -m | grep Mem | awk '{print ($3/$2)*100}') diff --git a/eww_desktop/scripts/music_control b/eww_desktop/scripts/music_control deleted file mode 100755 index 70a1483..0000000 --- a/eww_desktop/scripts/music_control +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/bash -echo $(playerctl metadata -p ncspot,%any --format "{{ artist }}\n{{ album }}\n{{ title }}") diff --git a/eww_desktop/scripts/music_control2 b/eww_desktop/scripts/music_control2 deleted file mode 100755 index 42dca7f..0000000 --- a/eww_desktop/scripts/music_control2 +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash -echo $(playerctl -p ncspot,%any metadata mpris:artUrl) - diff --git a/eww_desktop/scripts/music_info b/eww_desktop/scripts/music_info deleted file mode 100755 index ffafe87..0000000 --- a/eww_desktop/scripts/music_info +++ /dev/null @@ -1,98 +0,0 @@ -#!/bin/bash -# scripts by adi1090x - -## Get data -STATUS="$(mpc status)" -COVER="/tmp/.music_cover.png" -MUSIC_DIR="$HOME/Music" - -## Get status -get_status() { - if [[ $STATUS == *"[playing]"* ]]; then - echo "" - else - echo "奈" - fi -} - -## Get song -get_song() { - song=`mpc -f %title% current` - if [[ -z "$song" ]]; then - echo "Offline" - else - echo "$song" - fi -} - -## Get artist -get_artist() { - artist=`mpc -f %artist% current` - if [[ -z "$artist" ]]; then - echo "" - else - echo "$artist" - fi -} - -## Get time -get_time() { - time=`mpc status | grep "%)" | awk '{print $4}' | tr -d '(%)'` - if [[ -z "$time" ]]; then - echo "0" - else - echo "$time" - fi -} -get_ctime() { - ctime=`mpc status | grep "#" | awk '{print $3}' | sed 's|/.*||g'` - if [[ -z "$ctime" ]]; then - echo "0:00" - else - echo "$ctime" - fi -} -get_ttime() { - ttime=`mpc -f %time% current` - if [[ -z "$ttime" ]]; then - echo "0:00" - else - echo "$ttime" - fi -} - -## Get cover -get_cover() { - ffmpeg -i "${MUSIC_DIR}/$(mpc current -f %file%)" "${COVER}" -y &> /dev/null - STATUS=$? - - # Check if the file has a embbeded album art - if [ "$STATUS" -eq 0 ];then - echo "$COVER" - else - echo "images/music.png" - fi -} - -## Execute accordingly -if [[ "$1" == "--song" ]]; then - get_song -elif [[ "$1" == "--artist" ]]; then - get_artist -elif [[ "$1" == "--status" ]]; then - get_status -elif [[ "$1" == "--time" ]]; then - get_time -elif [[ "$1" == "--ctime" ]]; then - get_ctime -elif [[ "$1" == "--ttime" ]]; then - get_ttime -elif [[ "$1" == "--cover" ]]; then - get_cover -elif [[ "$1" == "--toggle" ]]; then - mpc -q toggle -elif [[ "$1" == "--next" ]]; then - { mpc -q next; get_cover; } -elif [[ "$1" == "--prev" ]]; then - { mpc -q prev; get_cover; } -fi diff --git a/eww_desktop/scripts/ncspot_control.sh b/eww_desktop/scripts/ncspot_control.sh deleted file mode 100755 index 477625c..0000000 --- a/eww_desktop/scripts/ncspot_control.sh +++ /dev/null @@ -1,5 +0,0 @@ -#! /bin/bash - -NUM=$(pactl list clients short | grep "ncspot" | awk -F 'PipeWire' ' { print $1 } ' | tr -d ' \t\n') -CLIENT=$(pactl list sink-inputs short | grep "$NUM" | awk -F ' ' ' { print $1 }' | tr -d ' \t\n') -pactl set-sink-input-volume "$CLIENT" "$1" diff --git a/eww_desktop/scripts/pop b/eww_desktop/scripts/pop deleted file mode 100755 index 0a39794..0000000 --- a/eww_desktop/scripts/pop +++ /dev/null @@ -1,134 +0,0 @@ -#!/bin/bash - - -calendar() { -LOCK_FILE="$HOME/.cache/eww-calendar.lock" -EWW_BIN="$HOME/.local/bin/eww" - -run() { - ${EWW_BIN} -c $HOME/.config/eww open calendar -} - -# Open widgets -if [[ ! -f "$LOCK_FILE" ]]; then - ${EWW_BIN} -c $HOME/.config/eww close system music_win audio_ctl brightness - touch "$LOCK_FILE" - run && echo "ok good!" -else - ${EWW_BIN} -c $HOME/.config/eww close calendar - rm "$LOCK_FILE" && echo "closed" -fi -} - - -system() { -LOCK_FILE_MEM="$HOME/.cache/eww-system.lock" -EWW_BIN="$HOME/.local/bin/eww" - -run() { - ${EWW_BIN} -c $HOME/.config/eww open system -} - -# Open system -if [[ ! -f "$LOCK_FILE_MEM" ]]; then - ${EWW_BIN} -c $HOME/.config/eww close calendar music_win audio_ctl brightness - touch "$LOCK_FILE_MEM" - run && echo "ok good!" -else - ${EWW_BIN} -c $HOME/.config/eww close system - rm "$LOCK_FILE_MEM" && echo "closed" -fi -} - - -music() { -LOCK_FILE_SONG="$HOME/.cache/eww-song.lock" -EWW_BIN="$HOME/.local/bin/eww" - -run() { - ${EWW_BIN} -c $HOME/.config/eww open music_win -} - -# Open widgets -if [[ ! -f "$LOCK_FILE_SONG" ]]; then - ${EWW_BIN} -c $HOME/.config/eww close system calendar brightness - touch "$LOCK_FILE_SONG" - run && echo "ok good!" -else - ${EWW_BIN} -c $HOME/.config/eww close music_win - rm "$LOCK_FILE_SONG" && echo "closed" -fi -} - - - -audio() { -LOCK_FILE_AUDIO="$HOME/.cache/eww-audio.lock" -EWW_BIN="$HOME/.local/bin/eww" - -run() { - ${EWW_BIN} -c $HOME/.config/eww open audio_ctl -} - -# Open widgets -if [[ ! -f "$LOCK_FILE_AUDIO" ]]; then - ${EWW_BIN} -c $HOME/.config/eww close system calendar music brightness - touch "$LOCK_FILE_AUDIO" - run && echo "ok good!" -else - ${EWW_BIN} -c $HOME/.config/eww close audio_ctl - rm "$LOCK_FILE_AUDIO" && echo "closed" -fi -} - -brightness() { -LOCK_FILE_AUDIO="$HOME/.cache/eww-brightness.lock" -EWW_BIN="$HOME/.local/bin/eww" - -run() { - ${EWW_BIN} -c $HOME/.config/eww open brightness_window -} - -# Open widgets -if [[ ! -f "$LOCK_FILE_AUDIO" ]]; then - ${EWW_BIN} -c $HOME/.config/eww close system calendar music audio_ctl - touch "$LOCK_FILE_AUDIO" - run && echo "ok good!" -else - ${EWW_BIN} -c $HOME/.config/eww close brightness_window - rm "$LOCK_FILE_AUDIO" && echo "closed" -fi -} - -hoverGet() { -NAME="$1" -EWW_BIN="$HOME/.local/bin/eww" -if [[ -f "$STORE" ]]; then - rm "$STORE" - ${EWW_BIN} -c $HOME/.config/eww close "$NAME" -fi -} - -hoverCreate() { -if [[ ! -f "$STORE" ]]; then - touch "$STORE" -else - echo "failure!" -fi -} -STORE=true -if [ "$1" = "calendar" ]; then - calendar -elif [ "$1" = "system" ]; then - system -#elif [ "$1" = "music" ]; then -#music -elif [ "$1" = "audio" ]; then - audio -elif [ "$1" = "brightness" ]; then - brightness -elif [ "$1" = "hoverGet" ]; then - hoverGet "$2" -elif [ "$1" = "hoverCreate" ]; then - hoverCreate -fi diff --git a/eww_desktop/scripts/weather b/eww_desktop/scripts/weather deleted file mode 100755 index a835246..0000000 --- a/eww_desktop/scripts/weather +++ /dev/null @@ -1,125 +0,0 @@ -#!/bin/bash - -tmp_weather="$HOME/.cache/weather" -tmp_weather_stat=$tmp_weather/weather-stat -tmp_weather_degree=$tmp_weather/weather-degree -tmp_weather_quote=$tmp_weather/weather-quote -tmp_weather_hex=$tmp_weather/weather-hex -tmp_weather_icon=$tmp_weather/weather-icon - -if [ ! -d $tmp_weather ]; then - mkdir -p $tmp_weather -fi -#notify-send -u critical "weather ping" "pangping" -# Put in your api and stuff link here -# If you dunno, head to openweathermap.org, and make and account -#(completely free I swear, and then get your API Key and your City ID) -# I wish I was smart enough to do it like Elena, but this is the top I could do lol -KEY=$(cat $HOME/.ssh/weather-key) -ID=$(cat $HOME/.ssh/location) -UNIT="{metric}" #Options are 'metric' and 'imperial' -weather=$(curl -sf "http://api.openweathermap.org/data/2.5/weather?APPID="$KEY"&q="$ID"&units="$UNIT"") -#echo $weather -if [ ! -z "$weather" ]; then - weather_temp=$(echo "$weather" | jq ".main.temp" | cut -d "." -f 1) - weather_icon_code=$(echo "$weather" | jq -r ".weather[].icon" | head -1) - weather_description=$(echo "$weather" | jq -r ".weather[].description" | head -1 | sed -e "s/\b\(.\)/\u\1/g") - - #Big long if statement of doom - if [ "$weather_icon_code" == "50d" ]; then - weather_icon=" " - weather_quote="Forecast says it's misty \nMake sure you don't get lost on your way..." - weather_hex="#84afdb" #a7b8b2 - elif [ "$weather_icon_code" == "50n" ]; then - weather_icon=" " - weather_quote="Forecast says it's a misty night \nDon't go anywhere tonight or you might get lost..." - weather_hex="#84afdb" - elif [ "$weather_icon_code" == "01d" ]; then - weather_icon=" " - weather_quote="It's a sunny day, gonna be fun! \nDon't go wandering all by yourself though..." - weather_hex="#ffd86b" - elif [ "$weather_icon_code" == "01n" ]; then - weather_icon=" " - weather_quote="It's a clear night \nYou might want to take a evening stroll to relax..." - weather_hex="#fcdcf6" - elif [ "$weather_icon_code" == "02d" ]; then - weather_icon=" " - weather_quote="It's cloudy, sort of gloomy \nYou'd better get a book to read..." - weather_hex="#adadff" - elif [ "$weather_icon_code" == "02n" ]; then - weather_icon=" " - weather_quote="It's a cloudy night \nHow about some hot chocolate and a warm bed?" - weather_hex="#adadff" - elif [ "$weather_icon_code" == "03d" ]; then - weather_icon=" " - weather_quote="It's cloudy, sort of gloomy \nYou'd better get a book to read..." - weather_hex="#adadff" - elif [ "$weather_icon_code" == "03n" ]; then - weather_icon=" " - weather_quote="It's a cloudy night \nHow about some hot chocolate and a warm bed?" - weather_hex="#adadff" - elif [ "$weather_icon_code" == "04d" ]; then - weather_icon=" " - weather_quote="It's cloudy, sort of gloomy \nYou'd better get a book to read..." - weather_hex="#adadff" - elif [ "$weather_icon_code" == "04n" ]; then - weather_icon=" " - weather_quote="It's a cloudy night \nHow about some hot chocolate and a warm bed?" - weather_hex="#adadff" - elif [ "$weather_icon_code" == "09d" ]; then - weather_icon=" " - weather_quote="It's rainy, it's a great day! \nGet some ramen and watch as the rain falls..." - weather_hex="#6b95ff" - elif [ "$weather_icon_code" == "09n" ]; then - weather_icon=" " - weather_quote=" It's gonna rain tonight it seems \nMake sure your clothes aren't still outside..." - weather_hex="#6b95ff" - elif [ "$weather_icon_code" == "10d" ]; then - weather_icon=" " - weather_quote="It's rainy, it's a great day! \nGet some ramen and watch as the rain falls..." - weather_hex="#6b95ff" - elif [ "$weather_icon_code" == "10n" ]; then - weather_icon=" " - weather_quote=" It's gonna rain tonight it seems \nMake sure your clothes aren't still outside..." - weather_hex="#6b95ff" - elif [ "$weather_icon_code" == "11d" ]; then - weather_icon="" - weather_quote="There's storm for forecast today \nMake sure you don't get blown away..." - weather_hex="#ffeb57" - elif [ "$weather_icon_code" == "11n" ]; then - weather_icon="" - weather_quote="There's gonna be storms tonight \nMake sure you're warm in bed and the windows are shut..." - weather_hex="#ffeb57" - elif [ "$weather_icon_code" == "13d" ]; then - weather_icon=" " - weather_quote="It's gonna snow today \nYou'd better wear thick clothes and make a snowman as well!" - weather_hex="#e3e6fc" - elif [ "$weather_icon_code" == "13n" ]; then - weather_icon=" " - weather_quote="It's gonna snow tonight \nMake sure you get up early tomorrow to see the sights..." - weather_hex="#e3e6fc" - elif [ "$weather_icon_code" == "40d" ]; then - weather_icon=" " - weather_quote="Forecast says it's misty \nMake sure you don't get lost on your way..." - weather_hex="#84afdb" - elif [ "$weather_icon_code" == "40n" ]; then - weather_icon=" " - weather_quote="Forecast says it's a misty night \nDon't go anywhere tonight or you might get lost..." - weather_hex="#84afdb" - else - weather_icon=" " - weather_quote="Sort of odd, I don't know what to forecast \nMake sure you have a good time!" - weather_hex="#adadff" - fi - echo "$weather_icon" > $tmp_weather_icon - echo "$weather_description" > $tmp_weather_stat - echo "$weather_temp""°C" > $tmp_weather_degree - echo "$weather_quote" > $tmp_weather_quote - echo "$weather_hex" > $tmp_weather_hex - else - echo "Weather Unavailable" > $tmp_weather_stat - echo " " > $tmp_weather_icon - echo "Ah well, no weather huh? \nEven if there's no weather, it's gonna be a great day!" > $tmp_weather_quote - echo "-" > $tmp_weather_degree - echo "#adadff" > $tmp_weather_hex -fi diff --git a/eww_desktop/scripts/weather-trimmer b/eww_desktop/scripts/weather-trimmer deleted file mode 100755 index 8ddeaa1..0000000 --- a/eww_desktop/scripts/weather-trimmer +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/bash -weather=$(cat $HOME/.cache/weather/weather-stat) -weather_count=$(cat $HOME/.cache/weather/weather-stat | wc -c) - -if [ "$weather_count" -lt 10 ]; then - echo $weather; -else - echo $(cat $HOME/.cache/weather/weather-stat | cut -c1-6)... -fi diff --git a/eww_desktop/scripts/wifi b/eww_desktop/scripts/wifi deleted file mode 100755 index 9de7f23..0000000 --- a/eww_desktop/scripts/wifi +++ /dev/null @@ -1,26 +0,0 @@ -#!/bin/bash - -status=$(nmcli g | grep -oE "disconnected") -essid=$(nmcli c | grep wlp2s0 | awk '{print ($1)}') - -if [ $status ] ; then - icon="" - text="" - col="#575268" - -else - icon="" - text="${essid}" - col="#a1bdce" -fi - - - -if [[ "$1" == "--COL" ]]; then - echo $col -elif [[ "$1" == "--ESSID" ]]; then - echo $text -elif [[ "$1" == "--ICON" ]]; then - echo $icon -fi - diff --git a/eww_desktop/scripts/workspace b/eww_desktop/scripts/workspace deleted file mode 100755 index 92d2201..0000000 --- a/eww_desktop/scripts/workspace +++ /dev/null @@ -1,99 +0,0 @@ -#!/bin/bash -workspaces() { - -ws1="ID 1" -ws2="ID 2" -ws3="ID 3" -ws4="ID 4" -ws5="ID 5" -ws6="ID 6" -ws7="ID 7" -ws8="ID 8" - -# check if Occupied -o1=$(hyprctl workspaces | grep "$ws1" ) -o2=$(hyprctl workspaces | grep "$ws2" ) -o3=$(hyprctl workspaces | grep "$ws3" ) -o4=$(hyprctl workspaces | grep "$ws4" ) -o5=$(hyprctl workspaces | grep "$ws5" ) -o6=$(hyprctl workspaces | grep "$ws6" ) -o7=$(hyprctl workspaces | grep "$ws7" ) -o8=$(hyprctl workspaces | grep "$ws8" ) - -# check if Focused -f1=$(hyprctl monitors | grep "workspace: 1" -A 4 | grep "focused: yes" ) -f2=$(hyprctl monitors | grep "workspace: 2" -A 4 | grep "focused: yes" ) -f3=$(hyprctl monitors | grep "workspace: 3" -A 4 | grep "focused: yes" ) -f4=$(hyprctl monitors | grep "workspace: 4" -A 4 | grep "focused: yes" ) -f5=$(hyprctl monitors | grep "workspace: 5" -A 4 | grep "focused: yes" ) -f6=$(hyprctl monitors | grep "workspace: 6" -A 4 | grep "focused: yes" ) -f7=$(hyprctl monitors | grep "workspace: 7" -A 4 | grep "focused: yes" ) -f8=$(hyprctl monitors | grep "workspace: 8" -A 4 | grep "focused: yes" ) - -if [ "$o1" != "" ]; then - ic_1="①" - else - ic_1="" -fi -if [ "$o2" != "" ]; then - ic_2="②" - else - ic_2="" -fi -if [ "$o3" != "" ]; then - ic_3="③" - else - ic_3="" -fi -if [ "$o4" != "" ]; then - ic_4="④" - else - ic_4="" -fi -if [ "$o5" != "" ]; then - ic_5="⑤" - else - ic_5="" -fi -if [ "$o6" != "" ]; then - ic_6="⑥" - else - ic_6="" -fi -if [ "$o7" != "" ]; then - ic_7="⑦" - else - ic_7="" -fi -if [ "$o8" != "" ]; then - ic_8="⑧" - else - ic_8="" -fi - -if [ "$f1" != "" ]; then - ic_1="➊" -elif [ "$f2" != "" ]; then - ic_2="➋" -elif [ "$f3" != "" ]; then - ic_3="➌" -elif [ "$f4" != "" ]; then - ic_4="➍" -elif [ "$f5" != "" ]; then - ic_5="➎" -elif [ "$f6" != "" ]; then - ic_6="➏" -elif [ "$f7" != "" ]; then - ic_7="➐" -elif [ "$f8" != "" ]; then - ic_8="➑" -fi - -#ic_1=$(hyprctl workspaces) -#ic_2="t" -echo "(box :class \"works\" :orientation \"h\" :spacing 5 :space-evenly \"false\" (button :onclick \"hyprctl dispatch workspace 1\" :class \"$un$o1$f1\" \"$ic_1\") (button :onclick \"hyprctl dispatch workspace 2\" :class \"$un$o2$f2\" \"$ic_2\") (button :onclick \"hyprctl dispatch workspace 3\" :class \"$un$o3$f3\" \"$ic_3\") (button :onclick \"hyprctl dispatch workspace 4\" :class \"$un$o4$f4\" \"$ic_4\") (button :onclick \"hyprctl dispatch workspace 5\" :class \"$un$o5$f5\" \"$ic_5\") (button :onclick \"hyprctl dispatch workspace 6\" :class \"$un$o6$f6\" \"$ic_6\") (button :onclick \"hyprctl dispatch workspace 7\" :class \"$un$o7$f7\" \"$ic_7\") (button :onclick \"hyprctl dispatch workspace 8\" :class \"$un$o8$f8\" \"$ic_8\"))" -} -workspaces -tail -f /tmp/hypr/$HYPRLAND_INSTANCE_SIGNATURE/hyprland.log | grep -E --line-buffered "Changed to workspace|focus to surface" | while read -r; do -workspaces -done diff --git a/eww_laptop/bar/eww.scss b/eww_laptop/bar/eww.scss deleted file mode 100644 index 1036c3a..0000000 --- a/eww_laptop/bar/eww.scss +++ /dev/null @@ -1,447 +0,0 @@ -/** EWW.SCSS -Created by saimoom **/ -*{ - all: unset; - font-family: feather; - font-family: DaddyTimeMono Nerd Font; -} - -/** General **/ -.bar_class { - background-color: #0f0f17; - border-radius: 16px; -} -.module { - margin: 0px 0px 0px 0px; - border-radius: 10px 16px 0px 10px; -} - -/** tooltip!! **/ -tooltip.background { - background-color: #0f0f17; - font-size: 18; - border-radius: 10px; - color: #bfc9db; -} - -tooltip label { - margin: 6px; -} - - -/** Widgets **/ - -.clock_time_sep { - font-size: 16; - color: #bfc9db; - margin: 0px 4px 1px 4px; -} -.clock_time_class, .clock_minute_class { - font-size: 23; -} -.clock_date_class { - font-size: 18; - margin: 0px 20px 0px -1px; - color: #d7beda; -} -.clock_minute_class { - margin: 0px 20px 0px 3px; - color: #bfc9db; -} - -.clock_time_class { - color: #bfc9db; - font-weight: bold; - margin: 0px 5px 0px 0px; -} - - -.membar { - color: #e0b089; - background-color: #38384d; - border-radius: 10px; -} -.batbar { - color: #afbea2; - background-color: #38384d; - border-radius: 10px; -} -.brightbar trough highlight { - background-image: linear-gradient(to right, #e4c9af 30%, #f2cdcd 50%, #e0b089 100% *50); - border-radius: 10px; -} -.volbar trough highlight { - background-image: linear-gradient(to right, #afcee0 30%, #a1bdce 50%, #77a5bf 100% *50); - border-radius: 10px; -} -.volume_icon { - font-size: 22; - color: #a1bdce; - margin: 0px 10px 0px 10px; -} - - -.module_essid { - font-size: 18; - color: #a1bdce; - margin: 0px 10px 0px 0px; -} -.module-wif { - font-size: 22; - color: #a1bdce; - border-radius: 100%; - margin: 0px 10px 0px 5px; -} - -.iconmem { - color: #e0b089; -} -.iconbat { - color: #afbea2; -} -.iconbat, .iconmem { - font-size: 15; - margin: 10px; -} -.bright_icon { - font-size: 22; - color: #e4c9af; - margin: 0px 10px 0px 10px; -} - - -.separ { - color: #3e424f; - font-weight: bold; - font-size: 22px; - margin: 0px 8px 0px 8px; - } - -.mem_module { - background-color: #0f0f17; - border-radius: 16px; - margin: 0px 10px 0px 3px; - } -.bat_module { - background-color: #0f0f17; - border-radius: 16px; - margin: 0px 10px 0px 10px; - } - - -scale trough { - all: unset; - background-color: #22242b; - box-shadow: 0 2px 3px 2px #06060b; - border-radius: 16px; - min-height: 10px; - min-width: 70px; - margin: 0px 10px 0px 0px; -} - -.works { -font-size: 27px; -font-weight: normal; -margin: 5px 0px 0px 20px; -background-color: #0f0f17; -} - -.0 , .01, .02, .03, .04, .05, .06, -.011, .022, .033, .044, .055, .066{ - margin: 0px 10px 0px 0px; -} - -/* Unoccupied */ -.0 { -color: #3e424f; -} - -/* Occupied */ -.01, .02, .03, .04, .05, .06 { - color: #bfc9db; -} - -/* Focused */ -.011, .022, .033, .044, .055, .066 { - color: #a1bdce; -} - - -.song_cover_art { - background-size: cover; - background-position: center; - min-height: 24px; - min-width: 24px; - margin: 10px; - border-radius: 100px; -} - -.song { - color: #a1bdce; - font-size : 18px; - font-weight : bold; - margin : 3px 5px 0px 0px; -} - -.song_btn_play { - color: #a1bdce; - font-size : 28px; - margin : 3px 0px 0px 5px; - -} - - -.song_btn_prev, .song_btn_next { - color: #bfc9db; - font-size : 24px; - margin : 3px 0px 0px 5px; - -} -// Calendar -.cal { - background-color: #0f0f17; - font-family: JetBrainsMono Nerd Font; - font-size: 18px; - font-weight: normal; - -.cal-in { - padding: 0px 10px 0px 10px; - color: #bfc9db; - -.cal { - &.highlight { - padding: 20px; - } - - padding: 5px 5px 5px 5px; - margin-left: 10px; - } - } -} - -calender { - color: #bfc9db; -} -calendar:selected { - color: #a1bdce; -} - -calendar.header { -color: #a1bdce; -font-weight: bold; -} - -calendar.button { -color: #afbea2; -} - -calendar.highlight { -color: #a1bdce; -font-weight: bold; -} - -calendar:indeterminate { -color: #bfc9db; -} - - - - - - - -.sys_sep { - color: #38384d; - font-size: 18; - margin: 0px 10px 0px 10px; -} -.sys_text_bat_sub, .sys_text_mem_sub { - font-size: 16; - color: #bbc5d7; - margin: 5px 0px 0px 25px; -} -.sys_text_bat, .sys_text_mem { - font-size: 21; - font-weight: bold; - margin: 14px 0px 0px 25px; -} -.sys_icon_bat, .sys_icon_mem { - font-size: 30; - margin: 30px; -} -.sys_win { - background-color: #0f0f17; -} -.sys_bat { - color: #afbea2; - background-color: #38384d; - border-radius: 10px; -} -.sys_mem { - color: #e4c9af; - background-color: #38384d; - border-radius: 10px; -} -.sys_icon_bat, .sys_text_bat { - color: #afbea2; -} -.sys_icon_mem, .sys_text_mem { - color: #e4c9af; -} -.sys_bat_box { - border-radius: 16px; - margin: 15px 10px 10px 20px; - } -.sys_mem_box { - border-radius: 16px; - margin: 10px 10px 15px 20px; - } - - - - - - - -.music_pop { - background-color: #0f0f17; - border-radius: 16px; -} - .music_cover_art { - background-size: cover; - background-position: center; - min-height: 100px; - box-shadow: 5px 5px 5px 5px #06060b; - min-width: 170px; - margin: 20px; - border-radius: 20px; -} - -.music { - color: #a1bdce; - font-size : 20px; - font-weight : bold; - margin : 20px 0px 0px -15px; -} - -.music_artist { - color: #bbc5d7; - font-size : 16px; - font-weight : normal; - margin : 0px 0px 0px 0px; -} - -.music_btn_prev, .music_btn_play, .music_btn_next { - font-family: Iosevka Nerd Font; -} -.music_btn_prev { - color: #bbc5d7; - font-size : 32px; - font-weight : normal; - margin: 0px 0px 0px 0px; -} -.music_btn_play { - color: #a1bdce; - font-size : 48px; - font-weight : normal; - margin: 0px 0px 0px 0px; -} -.music_btn_next { - color: #bbc5d7; - font-size : 32px; - font-weight : normal; - margin: 0px 0px 0px 0px; -} - -.music_bar scale trough highlight { - all: unset; - background-image: linear-gradient(to right, #afcee0 30%, #a1bdce 50%, #77a5bf 100% *50); - border-radius: 24px; -} -.music_bar scale trough { - all: unset; - background-color: #232232; - box-shadow: 0 6px 5px 2px #06060b; - border-radius: 24px; - min-height: 13px; - min-width: 190px; - margin : -10px 10px 20px 0px; -} - -.audio-box { - background-color: #0f0f17; - border-radius: 16px; -} -.speaker_icon { - background-size: cover; - background-image: url('images/speaker.png'); - background-position: center; - min-height: 70px; - min-width: 75px; - margin: 10px 20px 5px 20px; - border-radius: 12px; -} - -.speaker_text { - color: #a1bdce; - font-size : 26px; - font-weight : bold; - margin: 20px 0px 0px 0px; -} - -.speaker_bar scale trough highlight { - all: unset; - background-image: linear-gradient(to right, #afcee0 30%, #a1bdce 50%, #77a5bf 100% *50); - border-radius: 24px; -} -.speaker_bar scale trough { - all: unset; - background-color: #232232; - box-shadow: 0 6px 5px 2px #06060b; - border-radius: 24px; - min-height: 13px; - min-width: 120px; - margin : 0px 0px 5px 0px; -} - - - - -.mic_icon { - background-size: cover; - background-image: url('images/mic.png'); - background-position: center; - min-height: 70px; - min-width: 75px; - margin: 5px 20px 20px 20px; - border-radius: 12px; -} - -.mic_text { - color: #a1bdce; - font-size : 26px; - font-weight : bold; - margin: 0px 0px 0px 0px; -} - -.mic_bar scale trough highlight { - all: unset; - background-image: linear-gradient(to right, #afcee0 30%, #a1bdce 50%, #77a5bf 100% *50); - border-radius: 24px; -} -.mic_bar scale trough { - all: unset; - box-shadow: 0 6px 5px 2px #06060b; - background-color: #232232; - border-radius: 24px; - min-height: 13px; - min-width: 120px; - margin : 0px 0px 20px 0px; -} - -.audio_sep { - color: #38384d; - font-size: 18; - margin : 0px 0px 0px 0px; -} - diff --git a/eww_laptop/bar/eww.yuck b/eww_laptop/bar/eww.yuck deleted file mode 100644 index c0663b5..0000000 --- a/eww_laptop/bar/eww.yuck +++ /dev/null @@ -1,352 +0,0 @@ -;; Variables -(defpoll clock_time :interval "5m" "date +\%I") -(defpoll clock_minute :interval "5s" "date +\%M") -(defpoll clock_date :interval "10h" "date '+%d/%m'") -(defpoll volume_percent :interval "3s" "amixer -D pulse sget Master | grep 'Left:' | awk -F'[][]' '{ print $2 }' | tr -d '%'") -(defpoll mic_percent :interval "3s" "amixer -D pulse sget Capture | grep 'Left:' | awk -F'[][]' '{ print $2 }' | tr -d '%'") -(defpoll brightness_percent :interval "5s" "brightnessctl -m -d intel_backlight | awk -F, '{print substr($4, 0, length($4)-1)}' | tr -d '%'") -(defpoll battery :interval "15s" "./scripts/battery --bat") -(defpoll battery_status :interval "1m" "./scripts/battery --bat-st") -(defpoll memory :interval "15s" "scripts/memory") -(defpoll memory_used_mb :interval "2m" "scripts/mem-ad used") -(defpoll memory_total_mb :interval "2m" "scripts/mem-ad total") -(defpoll memory_free_mb :interval "2m" "scripts/mem-ad free") -(defvar vol_reveal false) -(defvar br_reveal false) -(defvar music_reveal false) -(defvar wifi_rev false) -(defvar time_rev false) -(deflisten workspace "scripts/workspace") - -(defvar eww "$HOME/.local/bin/eww/eww -c $HOME/.config/eww/bar") - - -(defpoll COL_WLAN :interval "1m" "~/.config/eww/bar/scripts/wifi --COL") -(defpoll ESSID_WLAN :interval "1m" "~/.config/eww/bar/scripts/wifi --ESSID") -(defpoll WLAN_ICON :interval "1m" "~/.config/eww/bar/scripts/wifi --ICON") - - -(defpoll song :interval "2s" "~/.config/eww/bar/scripts/music_info --song") -(defpoll song_artist :interval "2s" "~/.config/eww/bar/scripts/music_info --artist") -(defpoll current_status :interval "1s" "~/.config/eww/bar/scripts/music_info --time") -(defpoll song_status :interval "2s" "~/.config/eww/bar/scripts/music_info --status") -(defpoll cover_art :interval "2s" "~/.config/eww/bar/scripts/music_info --cover") - -(defpoll calendar_day :interval "20h" "date '+%d'") -(defpoll calendar_year :interval "20h" "date '+%Y'") - -;; widgets - -(defwidget wifi [] - (eventbox :onhover "${eww} update wifi_rev=true" - :onhoverlost "${eww} update wifi_rev=false" - (box :vexpand "false" :hexpand "false" :space-evenly "false" - (button :class "module-wif" :onclick "networkmanager_dmenu" :wrap "false" :limit-width 12 :style "color: ${COL_WLAN};" WLAN_ICON) - (revealer :transition "slideright" - :reveal wifi_rev - :duration "350ms" - (label :class "module_essid" - :text ESSID_WLAN - :orientation "h" - ))))) - - -(defwidget workspaces [] - (literal :content workspace)) - - -(defwidget bat [] - (box :class "bat_module" :vexpand "false" :hexpand "false" - (circular-progress :value battery - :class "batbar" - :thickness 4 - (button - :class "iconbat" - :limit-width 2 - :tooltip "battery on ${battery}%" - :show_truncated false - :onclick "$HOME/.config/eww/bar/scripts/pop system" - :wrap false - "")))) - - -(defwidget mem [] - (box :class "mem_module" :vexpand "false" :hexpand "false" - (circular-progress :value memory - :class "membar" - :thickness 4 - (button - :class "iconmem" - :limit-width 2 - :tooltip "using ${memory}% ram" - :onclick "$HOME/.config/eww/bar/scripts/pop system" - :show_truncated false - :wrap false - "")))) - - - -(defwidget sep [] - (box :class "module-2" :vexpand "false" :hexpand "false" - (label :class "separ" :text "|"))) - -(defwidget clock_module [] - (eventbox :onhover "${eww} update time_rev=true" - :onhoverlost "${eww} update time_rev=false" - (box :class "module" :space-evenly "false" :orientation "h" :spacing "3" - (label :text clock_time :class "clock_time_class" ) - (label :text "" :class "clock_time_sep" ) - (label :text clock_minute :class "clock_minute_class") - (revealer :transition "slideleft" - :reveal time_rev - :duration "350ms" - (button :class "clock_date_class" - :onclick "$HOME/.config/eww/bar/scripts/pop calendar" clock_date - ) - )))) - -(defwidget volume [] - (eventbox :onhover "${eww} update vol_reveal=true" - :onhoverlost "${eww} update vol_reveal=false" - (box :class "module-2" :space-evenly "false" :orientation "h" :spacing "3" - (button :onclick "scripts/pop audio" :class "volume_icon" "") - (revealer :transition "slideleft" - :reveal vol_reveal - :duration "350ms" - (scale :class "volbar" - :value volume_percent - :orientation "h" - :tooltip "${volume_percent}%" - :max 100 - :min 0 - :onchange "amixer -D pulse sset Master {}%" ))))) - -(defwidget bright [] - (eventbox :onhover "${eww} update br_reveal=true" :onhoverlost "${eww} update br_reveal=false" - (box :class "module-2" :space-evenly "false" :orientation "h" :spacing "3" - (label :text "" :class "bright_icon" :tooltip "brightness") - (revealer :transition "slideleft" - :reveal br_reveal - :duration "350ms" - (scale :class "brightbar" - :value brightness_percent - :orientation "h" - :tooltip "${brightness_percent}%" - :max 100 - :min 0 - :onchange "brightnessctl set {}%" ))))) - - - - ;; Music -(defwidget music [] - (eventbox :onhover "${eww} update music_reveal=true" - :onhoverlost "${eww} update music_reveal=false" - (box :class "module-2" :orientation "h" :space-evenly "false" :vexpand "false" :hexpand "false" - (box :class "song_cover_art" :vexpand "false" :hexpand "false" :style "background-image: url('${cover_art}');") - (button :class "song" :wrap "true" :onclick "~/.config/eww/bar/scripts/pop music" song) - (revealer :transition "slideright" - :reveal music_reveal - :duration "350ms" - (box :vexpand "false" :hexpand "false" :oreintation "h" - (button :class "song_btn_prev" :onclick "~/.config/eww/bar/scripts/music_info --prev" "") - (button :class "song_btn_play" :onclick "~/.config/eww/bar/scripts/music_info --toggle" song_status) - (button :class "song_btn_next" :onclick "~/.config/eww/bar/scripts/music_info --next" "")))))) - - - -(defwidget left [] - (box :orientation "h" - :space-evenly false - :halign "end" - :class "left_modules" -(bright) -(volume) -(wifi) -(sep) -(bat) -(mem) -(sep) -(clock_module))) - - -(defwidget right [] - (box :orientation "h" - :space-evenly false - :halign "start" - :class "right_modules" -(workspaces))) - - -(defwidget center [] - (box :orientation "h" - :space-evenly false - :halign "center" - :class "center_modules" -(music))) - -(defwidget bar_1 [] - (box :class "bar_class" - :orientation "h" - (right) - (center) - (left) - )) - -(defwindow bar - :monitor 0 - :geometry (geometry :x "0%" - :y "9px" - :width "98%" - :height "30px" - :anchor "top center") - :stacking "fg" - :wm-ignore true - :windowtype "dock" - (bar_1)) - -(defwidget system [] - (box :class "sys_win" :orientation "v" :space-evenly "false" :hexpand "false" :vexpand "false" :spacing 0 - (box :class "sys_bat_box" :orientation "h" :space-evenly "false" - (circular-progress :value battery - :class "sys_bat" - :thickness 9 - (label :text "" - :class "sys_icon_bat" - :limit-width 2 - :show_truncated false - :wrap false)) - (box :orientation "v" :space-evenly "false" :spacing 0 :hexpand "false" :vexpand "false" - (label :text "battery" - :halign "start" - :class "sys_text_bat" - :limit-width 9 - :show_truncated false - :wrap false) - (label :text "${battery}%" - :halign "start" - :class "sys_text_bat_sub" - :limit-width 22 - :show_truncated false - :wrap false) - (label :text "${battery_status}" - :halign "start" - :class "sys_text_bat_sub" - :limit-width 22 - :show_truncated false - :wrap false))) - (label :text "" :class "sys_sep" :halign "center") - (box :class "sys_mem_box" :orientation "h" :space-evenly "false" :halign "start" - (circular-progress :value memory - :class "sys_mem" - :thickness 9 - (label :text "" - :class "sys_icon_mem" - :limit-width 2 - :show_truncated false - :wrap false - :angle 0.0)) - (box :orientation "v" :space-evenly "false" :spacing 0 :hexpand "false" :vexpand "false" - (label :text "memory" - :halign "start" - :class "sys_text_mem" - :limit-width 9 - :show_truncated false - :wrap false) - (label :text "${memory_used_mb} | ${memory_total_mb}mb " - :halign "start" - :class "sys_text_mem_sub" - :limit-width 22 - :show_truncated false - :wrap false) - (label :text "${memory_free_mb}mb free" - :halign "start" - :class "sys_text_mem_sub" - :limit-width 22 - :show_truncated false - :wrap false))))) - -(defwidget cal [] - (box :class "cal" :orientation "v" - (box :class "cal-in" - (calendar :class "cal" - :day calendar_day - :year calendar_year)))) - -(defwindow calendar - :geometry (geometry :x "-20px" - :y "7%" - :anchor "top right" - :width "270px" - :height "60px") -(cal)) - - - -(defwidget audio [] - (box :class "audio-box" :orientation "v" :space-evenly "false" :vexpand "false" :hexpand "false" - (box :halign "v" :space-evenly "false" :hexpand "false" :vexpand "false" - (box :class "speaker_icon" :orientation "v") - (box :orientation "v" :halign "center" :vexpand "false" :hexpand "false" - (label :class "speaker_text" :text "speaker" :valign "center" :halign "left" ) - (box :class "speaker_bar" :halign "center" :vexpand "false" :hexpand "false" - (scale :value volume_percent - :space-evenly "false" - :orientation "h" - :onchange "amixer -D pulse sset Master {}%" - :tooltip "volume on ${volume_percent}%" - :max 100 - :min 0)))) - (label :text "" :class "audio_sep" :halign "center") - (box :halign "v" :space-evenly "false" :hexpand "false" :vexpand "false" - (box :class "mic_icon" :orientation "v") - (box :orientation "v" :halign "center" :vexpand "false" :hexpand "false" - (label :class "mic_text" :text "mic" :valign "center" :halign "left" ) - (box :class "mic_bar" :halign "center" :vexpand "false" :hexpand "false" - (scale :value mic_percent - :space-evenly "false" - :orientation "h" - :tooltip "mic on ${mic_percent}%" - :onchange "amixer -D pulse sset Capture {}%" - :max 100 - :min 0)))))) - -(defwindow audio_ctl - :geometry (geometry :x "-20px" - :y "7%" - :anchor "top right" - :width "280px" - :height "60px") -(audio)) - - -(defwindow system - :geometry (geometry :x "-20px" - :y "7%" - :anchor "top right" - :width "290px" - :height "120px") -(system)) - - - -;; Music -(defwidget music_pop [] - (box :class "music_pop" :orientation "h" :space-evenly "false" :vexpand "false" :hexpand "false" - (box :class "music_cover_art" :vexpand "false" :hexpand "false" :style "background-image: url('${cover_art}');") - (box :orientation "v" :spacing 20 :space-evenly "false" :vexpand "false" :hexpand "false" - (label :halign "center" :class "music" :wrap "true" :limit-width 13 :text song) - (label :halign "center" :class "music_artist" :wrap "true" :limit-width 15 :text song_artist) - (box :orientation "h" :spacing 15 :halign "center" :space-evenly "false" :vexpand "false" :hexpand "false" - (button :class "music_btn_prev" :onclick "~/.config/eww/bar/scripts/music_info --prev" "") - (button :class "music_btn_play" :onclick "~/.config/eww/bar/scripts/music_info --toggle" song_status) - (button :class "music_btn_next" :onclick "~/.config/eww/bar/scripts/music_info --next" "")) - (box :class "music_bar" :halign "center" :vexpand "false" :hexpand "false" :space-evenly "false" - (scale :onscroll "mpc -q seek {}" :min 0 :active "true" :max 100 :value current_status))))) - - -;; music - (defwindow music_win :stacking "fg" :focusable "false" :screen 1 - :geometry (geometry :x "0" :y "7%" :width 428 :height 104 :anchor "top center") - (music_pop)) - diff --git a/eww_laptop/bar/images/mic.png b/eww_laptop/bar/images/mic.png deleted file mode 100644 index d77f315..0000000 Binary files a/eww_laptop/bar/images/mic.png and /dev/null differ diff --git a/eww_laptop/bar/images/music.png b/eww_laptop/bar/images/music.png deleted file mode 100644 index 11804f5..0000000 Binary files a/eww_laptop/bar/images/music.png and /dev/null differ diff --git a/eww_laptop/bar/images/profile.png b/eww_laptop/bar/images/profile.png deleted file mode 100644 index 0190a36..0000000 Binary files a/eww_laptop/bar/images/profile.png and /dev/null differ diff --git a/eww_laptop/bar/images/speaker.png b/eww_laptop/bar/images/speaker.png deleted file mode 100644 index 79e005b..0000000 Binary files a/eww_laptop/bar/images/speaker.png and /dev/null differ diff --git a/eww_laptop/bar/launch_bar b/eww_laptop/bar/launch_bar deleted file mode 100755 index 51f2a1d..0000000 --- a/eww_laptop/bar/launch_bar +++ /dev/null @@ -1,27 +0,0 @@ -#!/bin/bash - -## Files and cmd -FILE="$HOME/.cache/eww_launch.xyz" -EWW="$HOME/.local/bin/eww/eww -c $HOME/.config/eww/bar" - -## Run eww daemon if not running already -if [[ ! `pidof eww` ]]; then - ${EWW} daemon - sleep 1 -fi - -## Open widgets -run_eww() { - ${EWW} open-many \ - bar - -} - -## Launch or close widgets accordingly -if [[ ! -f "$FILE" ]]; then - touch "$FILE" - run_eww && bspc config -m LVDS-1 top_padding 49 -else - ${EWW} close-all && killall eww - rm "$FILE" -fi diff --git a/eww_laptop/bar/scripts/battery b/eww_laptop/bar/scripts/battery deleted file mode 100755 index 0540a1b..0000000 --- a/eww_laptop/bar/scripts/battery +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/bash - -battery() { - BAT=`ls /sys/class/power_supply | grep BAT | head -n 1` - cat /sys/class/power_supply/${BAT}/capacity -} -battery_stat() { - BAT=`ls /sys/class/power_supply | grep BAT | head -n 1` - cat /sys/class/power_supply/${BAT}/status -} - -if [[ "$1" == "--bat" ]]; then - battery -elif [[ "$1" == "--bat-st" ]]; then - battery_stat -fi - diff --git a/eww_laptop/bar/scripts/mem-ad b/eww_laptop/bar/scripts/mem-ad deleted file mode 100755 index 1e4cf89..0000000 --- a/eww_laptop/bar/scripts/mem-ad +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/sh - - -total="$(free -m | grep Mem: | awk '{ print $2 }')" -used="$(free -m | grep Mem: | awk '{ print $3 }')" - -free=$(expr $total - $used) - -if [ "$1" = "total" ]; then - echo $total -elif [ "$1" = "used" ]; then - echo $used -elif [ "$1" = "free" ]; then - echo $free -fi diff --git a/eww_laptop/bar/scripts/memory b/eww_laptop/bar/scripts/memory deleted file mode 100755 index 217c834..0000000 --- a/eww_laptop/bar/scripts/memory +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh - -printf "%.0f\n" $(free -m | grep Mem | awk '{print ($3/$2)*100}') diff --git a/eww_laptop/bar/scripts/music_info b/eww_laptop/bar/scripts/music_info deleted file mode 100755 index ffafe87..0000000 --- a/eww_laptop/bar/scripts/music_info +++ /dev/null @@ -1,98 +0,0 @@ -#!/bin/bash -# scripts by adi1090x - -## Get data -STATUS="$(mpc status)" -COVER="/tmp/.music_cover.png" -MUSIC_DIR="$HOME/Music" - -## Get status -get_status() { - if [[ $STATUS == *"[playing]"* ]]; then - echo "" - else - echo "奈" - fi -} - -## Get song -get_song() { - song=`mpc -f %title% current` - if [[ -z "$song" ]]; then - echo "Offline" - else - echo "$song" - fi -} - -## Get artist -get_artist() { - artist=`mpc -f %artist% current` - if [[ -z "$artist" ]]; then - echo "" - else - echo "$artist" - fi -} - -## Get time -get_time() { - time=`mpc status | grep "%)" | awk '{print $4}' | tr -d '(%)'` - if [[ -z "$time" ]]; then - echo "0" - else - echo "$time" - fi -} -get_ctime() { - ctime=`mpc status | grep "#" | awk '{print $3}' | sed 's|/.*||g'` - if [[ -z "$ctime" ]]; then - echo "0:00" - else - echo "$ctime" - fi -} -get_ttime() { - ttime=`mpc -f %time% current` - if [[ -z "$ttime" ]]; then - echo "0:00" - else - echo "$ttime" - fi -} - -## Get cover -get_cover() { - ffmpeg -i "${MUSIC_DIR}/$(mpc current -f %file%)" "${COVER}" -y &> /dev/null - STATUS=$? - - # Check if the file has a embbeded album art - if [ "$STATUS" -eq 0 ];then - echo "$COVER" - else - echo "images/music.png" - fi -} - -## Execute accordingly -if [[ "$1" == "--song" ]]; then - get_song -elif [[ "$1" == "--artist" ]]; then - get_artist -elif [[ "$1" == "--status" ]]; then - get_status -elif [[ "$1" == "--time" ]]; then - get_time -elif [[ "$1" == "--ctime" ]]; then - get_ctime -elif [[ "$1" == "--ttime" ]]; then - get_ttime -elif [[ "$1" == "--cover" ]]; then - get_cover -elif [[ "$1" == "--toggle" ]]; then - mpc -q toggle -elif [[ "$1" == "--next" ]]; then - { mpc -q next; get_cover; } -elif [[ "$1" == "--prev" ]]; then - { mpc -q prev; get_cover; } -fi diff --git a/eww_laptop/bar/scripts/pop b/eww_laptop/bar/scripts/pop deleted file mode 100755 index aef82e8..0000000 --- a/eww_laptop/bar/scripts/pop +++ /dev/null @@ -1,92 +0,0 @@ -#!/bin/bash - -calendar() { -LOCK_FILE="$HOME/.cache/eww-calendar.lock" -EWW_BIN="$HOME/.local/bin/eww/eww" - -run() { - ${EWW_BIN} -c $HOME/.config/eww/bar open calendar -} - -# Open widgets -if [[ ! -f "$LOCK_FILE" ]]; then - ${EWW_BIN} -c $HOME/.config/eww/bar close system music_win audio_ctl - touch "$LOCK_FILE" - run && echo "ok good!" -else - ${EWW_BIN} -c $HOME/.config/eww/bar close calendar - rm "$LOCK_FILE" && echo "closed" -fi -} - - -system() { -LOCK_FILE_MEM="$HOME/.cache/eww-system.lock" -EWW_BIN="$HOME/.local/bin/eww/eww" - -run() { - ${EWW_BIN} -c $HOME/.config/eww/bar open system -} - -# Open widgets -if [[ ! -f "$LOCK_FILE_MEM" ]]; then - ${EWW_BIN} -c $HOME/.config/eww/bar close calendar music_win audio_ctl - touch "$LOCK_FILE_MEM" - run && echo "ok good!" -else - ${EWW_BIN} -c $HOME/.config/eww/bar close system - rm "$LOCK_FILE_MEM" && echo "closed" -fi -} - - -music() { -LOCK_FILE_SONG="$HOME/.cache/eww-song.lock" -EWW_BIN="$HOME/.local/bin/eww/eww" - -run() { - ${EWW_BIN} -c $HOME/.config/eww/bar open music_win -} - -# Open widgets -if [[ ! -f "$LOCK_FILE_SONG" ]]; then - ${EWW_BIN} -c $HOME/.config/eww/bar close system calendar - touch "$LOCK_FILE_SONG" - run && echo "ok good!" -else - ${EWW_BIN} -c $HOME/.config/eww/bar close music_win - rm "$LOCK_FILE_SONG" && echo "closed" -fi -} - - - -audio() { -LOCK_FILE_AUDIO="$HOME/.cache/eww-audio.lock" -EWW_BIN="$HOME/.local/bin/eww/eww" - -run() { - ${EWW_BIN} -c $HOME/.config/eww/bar open audio_ctl -} - -# Open widgets -if [[ ! -f "$LOCK_FILE_AUDIO" ]]; then - ${EWW_BIN} -c $HOME/.config/eww/bar close system calendar music - touch "$LOCK_FILE_AUDIO" - run && echo "ok good!" -else - ${EWW_BIN} -c $HOME/.config/eww/bar close audio_ctl - rm "$LOCK_FILE_AUDIO" && echo "closed" -fi -} - - -if [ "$1" = "calendar" ]; then -calendar -elif [ "$1" = "system" ]; then -system -elif [ "$1" = "music" ]; then -music -elif [ "$1" = "audio" ]; then -audio -fi diff --git a/eww_laptop/bar/scripts/wifi b/eww_laptop/bar/scripts/wifi deleted file mode 100755 index 5d7cc59..0000000 --- a/eww_laptop/bar/scripts/wifi +++ /dev/null @@ -1,26 +0,0 @@ -#!/bin/bash - -status=$(nmcli g | grep -oE "disconnected") -essid=$(nmcli c | grep wlp2s0 | awk '{print ($1)}') - -if [ $status ] ; then - icon="" - text="" - col="#575268" - -else - icon="" - text="${essid}" - col="#a1bdce" -fi - - - -if [[ "$1" == "--COL" ]]; then - echo $col -elif [[ "$1" == "--ESSID" ]]; then - echo $text -elif [[ "$1" == "--ICON" ]]; then - echo $icon -fi - diff --git a/eww_laptop/bar/scripts/workspace b/eww_laptop/bar/scripts/workspace deleted file mode 100755 index f202ef1..0000000 --- a/eww_laptop/bar/scripts/workspace +++ /dev/null @@ -1,56 +0,0 @@ -#!/bin/sh -workspaces() { - -ws1="1" -ws2="2" -ws3="3" -ws4="4" -ws5="5" -ws6="6" - -# Unoccupied -un="0" - -# check if Occupied -o1=$(bspc query -D -d .occupied --names | grep "$ws1" ) -o2=$(bspc query -D -d .occupied --names | grep "$ws2" ) -o3=$(bspc query -D -d .occupied --names | grep "$ws3" ) -o4=$(bspc query -D -d .occupied --names | grep "$ws4" ) -o5=$(bspc query -D -d .occupied --names | grep "$ws5" ) -o6=$(bspc query -D -d .occupied --names | grep "$ws6" ) - -# check if Focused -f1=$(bspc query -D -d focused --names | grep "$ws1" ) -f2=$(bspc query -D -d focused --names | grep "$ws2" ) -f3=$(bspc query -D -d focused --names | grep "$ws3" ) -f4=$(bspc query -D -d focused --names | grep "$ws4" ) -f5=$(bspc query -D -d focused --names | grep "$ws5" ) -f6=$(bspc query -D -d focused --names | grep "$ws6" ) - -ic_1="" -ic_2="" -ic_3="" -ic_4="" -ic_5="" -ic_6="" -if [ $f1 ]; then - ic_1="" -elif [ $f2 ]; then - ic_2="" -elif [ $f3 ]; then - ic_3="" -elif [ $f4 ]; then - ic_4="" -elif [ $f5 ]; then - ic_5="" -elif [ $f6 ]; then - ic_6="" -fi - -echo "(box :class \"works\" :orientation \"h\" :spacing 5 :space-evenly \"false\" (button :onclick \"bspc desktop -f $ws1\" :class \"$un$o1$f1\" \"$ic_1\") (button :onclick \"bspc desktop -f $ws2\" :class \"$un$o2$f2\" \"$ic_2\") (button :onclick \"bspc desktop -f $ws3\" :class \"$un$o3$f3\" \"$ic_3\") (button :onclick \"bspc desktop -f $ws4\" :class \"$un$o4$f4\" \"$ic_4\") (button :onclick \"bspc desktop -f $ws5\" :class \"$un$o5$f5\" \"$ic_5\") (button :onclick \"bspc desktop -f $ws6\" :class \"$un$o6$f6\" \"$ic_6\"))" - -} -workspaces -bspc subscribe desktop node_transfer | while read -r _ ; do -workspaces -done diff --git a/eww_laptop/eww.scss b/eww_laptop/eww.scss deleted file mode 100644 index 23d88e7..0000000 --- a/eww_laptop/eww.scss +++ /dev/null @@ -1,665 +0,0 @@ -/** EWW.SCSS -Created by saimoom **/ -* { - all: unset; - font-family: feather; - font-family: DaddyTimeMono Nerd Font; -} - -/** General **/ -.bar_class { - background-color: #282828; - border-radius: 10px; -} -.module { - margin: 0px 0px 0px 0px; - border-radius: 10px 10px 0px 10px; -} - -/** tooltip!! **/ -tooltip.background { - background-color: #0f0f17; - font-size: 14; - border-radius: 10px; - color: #bfc9db; -} - -tooltip label { - margin: 3px; -} - -/** Widgets **/ - -.clock_time_sep { - font-size: 20; - color: #bfc9db; - margin: 0px 0px 1px 0px; -} -.clock_time_class, -.clock_minute_class { - font-size: 24; -} -.clock_date_class { - font-size: 21; - margin: 0px 5px 0px 5px; - color: #d7beda; -} -.clock_minute_class { - margin: 0px 5px 0px 2px; - color: #bfc9db; -} -.clock_time_class { - color: #bfc9db; - font-weight: bold; - margin: 0px 0px 0px 8px; -} - -.membar { - color: #e0b089; - background-color: #38384d; - border-radius: 10px; -} -.batbar { - color: #afbea2; - background-color: #38384d; - border-radius: 10px; -} -.brightbar trough highlight { - background-image: linear-gradient( - to right, - #e4c9af 30%, - #f2cdcd 50%, - #e0b089 100% * 50 - ); - border-radius: 10px; -} -.brightbar scale trough { - all: unset; - box-shadow: 0 6px 5px 2px #06060b; - background-color: #232232; - border-radius: 24px; - min-height: 10px; - min-width: 100px; - margin: 0px -15px 5px 0px; -} -.volbar trough highlight { - background-image: linear-gradient( - to right, - #afcee0 30%, - #a1bdce 50%, - #77a5bf 100% * 50 - ); - border-radius: 10px; -} - -.module_app_text { - font-size: 23; - margin: 2px 0px 0px 0px; -} -.bright_icon { - font-size: 22; - color: #e4c9af; - margin: 0px 10px 0px -10px; -} -.bright_icon_overlay { - font-size: 28; - color: #e4c9af; - background-size: cover; - background-position: center; - margin: 0px 27px 0px 3px; -} -.volume_icon { - font-size: 22; - color: #a1bdce; - margin: 0px 5px 0px 0px; -} -.module-wif { - font-size: 22; - color: #a1bdce; - border-radius: 100%; - margin: 0px 10px 0px 0px; -} -.module_essid { - font-size: 18; - color: #a1bdce; - margin: 0px 5px 0px -1px; -} - -.iconmem { - font-size: 23; - margin: 4px -3px 4px 0px; - color: #e0b089; -} -.mem_padding { - margin: 10px; -} -.iconbat { - font-size: 23; - color: #afbea2; -} - -.separ { - color: #3e424f; - font-weight: bold; - font-size: 22px; - margin: 0px 0px 0px 0px; -} - -.mem_module { - background-color: #282828; - border-radius: 16px; - margin: 0px 10px 0px 0px; -} -.bat_module { - background-color: #282828; - border-radius: 16px; - margin: 0px 10px 0px 10px; -} - -scale trough { - all: unset; - background-color: #22242b; - box-shadow: 0 2px 3px 2px #06060b; - border-radius: 16px; - min-height: 10px; - min-width: 70px; - margin: 0px 10px 0px 0px; -} - -.works { - font-size: 27px; - font-weight: normal; - margin: 0px 0px 0px 15px; - background-color: #282828; -} - -.0, -.01, -.02, -.03, -.04, -.05, -.06, -.011, -.022, -.033, -.044, -.055, -.066 { - margin: 0px 10px 0px 0px; -} - -/* Unoccupied */ -.0 { - color: #3e424f; -} - -/* Occupied */ -.01, -.02, -.03, -.04, -.05, -.06 { - color: #bfc9db; -} - -/* Focused */ -.011, -.022, -.033, -.044, -.055, -.066 { - color: #a1bdce; -} - -.song_cover_art { - background-size: cover; - background-position: center; - min-height: 24px; - min-width: 24px; - margin: 10px; - border-radius: 100px; -} - -.song { - color: #a1bdce; - font-size: 18px; - font-weight: bold; - margin: 3px 5px 0px 0px; -} - -.song_btn_play { - color: #a1bdce; - font-size: 28px; - margin: 3px 0px 0px 5px; -} - -.song_btn_prev, -.song_btn_next { - color: #bfc9db; - font-size: 24px; - margin: 3px 0px 0px 5px; -} -// Calendar -.cal { - border-radius: 10px; - background-color: #0f0f17; - font-family: JetBrainsMono Nerd Font; - font-size: 18px; - font-weight: normal; - - .cal-in { - padding: 0px 10px 0px 10px; - color: #bfc9db; - - .cal { - &.highlight { - padding: 20px; - } - - padding: 5px 5px 5px 5px; - margin-left: 10px; - } - } -} - -calender { - color: #bfc9db; -} -calendar:selected { - color: #a1bdce; -} - -calendar.header { - color: #a1bdce; - font-weight: bold; -} - -calendar.button { - color: #afbea2; -} - -calendar.highlight { - color: #a1bdce; - font-weight: bold; -} - -calendar:indeterminate { - color: #bfc9db; -} - -.sys_sep { - color: #38384d; - font-size: 18; - margin: 0px 10px 0px 10px; -} -.sys_text_bat_sub, -.sys_text_mem_sub { - font-size: 16; - color: #bbc5d7; - margin: 5px 0px 0px 25px; -} -.sys_text_bat, -.sys_text_mem { - font-size: 21; - font-weight: bold; - margin: 14px 0px 0px 25px; -} -.sys_icon_bat, -.sys_icon_mem { - font-size: 30; - margin: 30px; -} -.sys_win { - border-radius: 10px; - background-color: #0f0f17; -} -.sys_bat { - color: #afbea2; - background-color: #38384d; - border-radius: 10px; -} -.sys_mem { - color: #e4c9af; - background-color: #38384d; - border-radius: 10px; -} -.sys_icon_bat, -.sys_text_bat { - color: #afbea2; -} -.sys_icon_mem, -.sys_text_mem { - color: #e4c9af; -} -.sys_bat_box { - border-radius: 16px; - margin: 15px 10px 10px 20px; -} -.sys_mem_box { - border-radius: 16px; - margin: 10px 10px 15px 20px; -} - -.music_pop { - background-color: #0f0f17; - border-radius: 16px; -} -.music_cover_art { - background-size: cover; - background-position: center; - min-height: 100px; - box-shadow: 5px 5px 5px 5px #06060b; - min-width: 170px; - margin: 20px; - border-radius: 20px; -} - -.music { - color: #a1bdce; - font-size: 20px; - font-weight: bold; - margin: 20px 0px 0px -15px; -} - -.music_artist { - color: #bbc5d7; - font-size: 16px; - font-weight: normal; - margin: 0px 0px 0px 0px; -} - -.music_btn_prev, -.music_btn_play, -.music_btn_next { - font-family: Iosevka Nerd Font; -} -.music_btn_prev { - color: #bbc5d7; - font-size: 32px; - font-weight: normal; - margin: 0px 0px 0px 0px; -} -.music_btn_play { - color: #a1bdce; - font-size: 48px; - font-weight: normal; - margin: 0px 0px 0px 0px; -} -.music_btn_next { - color: #bbc5d7; - font-size: 32px; - font-weight: normal; - margin: 0px 0px 0px 0px; -} - -.music_bar scale trough highlight { - all: unset; - background-image: linear-gradient( - to right, - #afcee0 30%, - #a1bdce 50%, - #77a5bf 100% * 50 - ); - border-radius: 24px; -} -.music_bar scale trough { - all: unset; - background-color: #232232; - box-shadow: 0 6px 5px 2px #06060b; - border-radius: 24px; - min-height: 13px; - min-width: 190px; - margin: -10px 10px 20px 0px; -} - -.audio-box { - background-color: #0f0f17; - border-radius: 16px; -} -.speaker_icon { - background-size: cover; - background-image: url("images/speaker.png"); - background-position: center; - min-height: 40px; - min-width: 45px; - margin: 10px 10px 5px 20px; - border-radius: 12px; -} - -.speaker_text { - color: #a1bdce; - font-size: 22px; - font-weight: bold; - margin: 5px 15px 0px 15px; -} -.bright_text { - color: #a1bdce; - font-size: 22px; - font-weight: bold; - margin: 5px 15px 0px 25px; -} - -.change_audio_box { - margin: 0px 0px 0px 10px; -} - -.change_audio { - color: #a1bdce; - margin: 0px 50px 0px 50px; - font-size: 30px; - font-weight: bold; -} - -.speaker_bar scale trough highlight { - all: unset; - background-image: linear-gradient( - to right, - #afcee0 30%, - #a1bdce 50%, - #77a5bf 100% * 50 - ); - border-radius: 24px; -} -.speaker_bar scale trough { - all: unset; - background-color: #232232; - box-shadow: 0 6px 5px 2px #06060b; - border-radius: 24px; - min-height: 10px; - min-width: 100px; - margin: 0px 0px 5px 0px; -} - -.mic_icon { - background-size: cover; - background-image: url("images/mic.png"); - background-position: center; - min-height: 40px; - min-width: 45px; - margin: 5px 20px 20px 10px; - border-radius: 12px; -} - -.mic_text { - color: #a1bdce; - font-size: 26px; - font-weight: bold; - margin: 0px 0px 0px 0px; -} - -.mic_bar scale trough highlight { - all: unset; - background-image: linear-gradient( - to right, - #afcee0 30%, - #a1bdce 50%, - #77a5bf 100% * 50 - ); - border-radius: 24px; -} -.mic_bar scale trough { - all: unset; - box-shadow: 0 6px 5px 2px #06060b; - background-color: #232232; - border-radius: 24px; - min-height: 10px; - min-width: 100px; - margin: 6px 0px 20px 0px; -} - -.audio_sep { - color: #38384d; - font-size: 18; - margin: 0px 0px 0px 0px; -} - -//cockpit stuff - -.cockpit_class { - all: unset; -} - -.cockpit_clock { - padding: 0px 30px 0px 30px; -} - -.cockpit_box { - background-color: #06060b; - border-radius: 10px; - margin: 5px; - padding: 0px 5px 0px 5px; - opacity: 0.85; -} - -.cockpit_button_shutdown { - color: #FF1111; - font-size: 40px; - margin: 0px 5px -30px 5px; -} - -.cockpit_button_sleep { - color: #0055FF; - font-size: 40px; - margin: 0px 5px -30px 5px; -} - -.cockpit_button_restart { - color: #11FF11; - font-size: 40px; - margin: 0px 5px -30px 5px; -} - -.song_info { - margin: -50px 0px 0px 0px; - font-size: 20px; - color: grey; -} - -.album_cover { - margin: -60px 10px 20px 10px; - padding: 0px; - background-size: cover; - background-repeat: no-repeat; - background-position: center; - border-radius: 10px; -} - -.cockpit_button_settings { - color: #d35d6e; - font-size: 35px; - margin: -30px 5px 0px 5px; -} - -.weather-icon { - font-size: 80px; - margin: 10px 0px 35px 25px; - font-family: Iosevka; -} - -.weather-stat { - font-size: 30px; - font-weight: bold; - color: #d35d6e; - margin: -20px 0px 10px 0px; -} - -.temperature { - color: grey; - font-size: 48px; - font-weight: 900; - margin: 0px 0px 0px 20px; -} -.weather-quote { - margin: 30px -5px 0px 20px; - font-size: 20px; -} -.weather-quote-head, -.weather-quote-tail { - color: grey; - font-size: 18px; - margin: 10px 0px 10px 10px; -} - -.cockpit_clock_left { - font-size: 50px; - font-weight: bold; - color: #d35d6e; - margin: 5px -20px -30px 0px; -} - -.cockpit_clock_right { - font-size: 50px; - font-weight: bold; - color: #d35d6e; - margin: 5px 0px -30px -20px; -} - -.cockpit_date { - font-size: 50px; - font-weight: bold; - color: #d35d6e; - margin: -30px -20px 0px -20px; -} - -.cockpit_clock_sep { - font-size: 40px; - font-weight: bold; - color: #d35d6e; - margin: 0px -20px -30px -20px; -} - -.cockpit_docs { - color: #FF1111; - font-size: 30px; - margin: 10px 0px -10px 0px; -} - -.cockpit_pics { - color: #11FF11; - font-size: 30px; - margin: 0px 0px 0px 0px; - padding: 0px; -} - -.cockpit_gits { - color: #0055FF; - font-size: 30px; - margin: -20px 0px 10px 0px; -} - -.cockpit_sep_bottom { - color: #38384d; - font-size: 18; - margin: -10px 0px 0px 0px; - padding: 0px; -} - -.cockpit_sep_top { - color: #38384d; - font-size: 18; - margin: 0px 0px -10px 0px; - padding: 0px; -} diff --git a/eww_laptop/eww.yuck b/eww_laptop/eww.yuck deleted file mode 100644 index a943b9b..0000000 --- a/eww_laptop/eww.yuck +++ /dev/null @@ -1,513 +0,0 @@ -;; date definitions ;; -(defpoll clock_time :interval "1m" "date +\%I") -(defpoll clock_minute :interval "5s" "date +\%M") -(defpoll clock_date :interval "10h" "date '+%d/%m'") - -;; volume definitions ;; -(defpoll volume_percent :interval "1s" "pactl get-sink-volume @DEFAULT_SINK@ | awk -F '/' ' { print $2 } ' | tr -d ' %'") -(defpoll mic_percent :interval "1s" "pactl get-source-volume @DEFAULT_SOURCE@ | awk -F'/' '{ print $2 }' | tr -d ' %'") -(defpoll brightness_percent :interval "5s" "brightnessctl -m -d intel_backlight | awk -F, '{print substr($4, 0, length($4)-1)}' | tr -d '%'") - -;; battery definitions ;; -(defpoll battery_status :interval "5s" "./scripts/battery stat") -(defpoll battery-capacity :interval "5s" "scripts/battery percent") -(defpoll battery :interval "5s" "scripts/battery icon") - -;; memory definitions ;; -(defpoll memory :interval "15s" "scripts/memory") -(defpoll memory_used_mb :interval "2m" "scripts/mem-ad used") -(defpoll memory_total_mb :interval "2m" "scripts/mem-ad total") -(defpoll memory_free_mb :interval "2m" "scripts/mem-ad free") - -;; wifi definitions ;; -(defpoll COL_WLAN :interval "1m" "~/.config/eww/scripts/wifi --COL") -(defpoll ESSID_WLAN :interval "1m" "~/.config/eww/scripts/wifi --ESSID") -(defpoll WLAN_ICON :interval "1m" "~/.config/eww/scripts/wifi --ICON") - -;; music definitions ;; -(defpoll Song_info :interval "2s" "scripts/music_control") -(defpoll Thumbnail :interval "2s" "scripts/music_control2") - -;; current window ;; -;;(defpoll currentWindow :interval "100ms" "hyprctl activewindow | grep class | awk -F ':' '{ print $2 }'") - -;; calendar definitions ;; -(defpoll calendar_day :interval "20h" "date '+%d'") -(defpoll calendar_year :interval "20h" "date '+%Y'") - -;; Weather vars - (defpoll weather-icon :interval "20m" "cat ~/.cache/weather/weather-icon") - (defpoll temperature :interval "20m" "cat ~/.cache/weather/weather-degree") - (defpoll weather-hex :interval "20m" "cat ~/.cache/weather/weather-hex") - (defpoll weather-stat :interval "20m" "cat ~/.cache/weather/weather-stat") - (defpoll weather-stat-side :interval "20m" "~/.config/eww/scripts/weather-trimmer") - (defpoll weather-quote :interval "20m" "~/.config/eww/scripts/getwethquote") - -;; simple variables ;; -(defvar eww "$HOME/.local/bin/eww -c $HOME/.config/eww") -(defvar vol_reveal false) -(defvar br_reveal false) -(defvar music_reveal false) -(defvar wifi_rev false) -(defvar time_rev false) -(deflisten workspace "scripts/workspace") -(deflisten currentName "scripts/current_name") - - -;; widgets - - -;; wifi ;; -(defwidget wifi [] - (eventbox :onhover "${eww} update wifi_rev=true" - :onhoverlost "${eww} update wifi_rev=false" - (box :vexpand "false" :hexpand "false" :space-evenly "false" - (button :class "module-wif" :onclick "hyprctl dispatch exec 'alacritty -e nmtui' && ${eww} update wifi_rev=false" :wrap "false" :limit-width 12 :style "color: ${COL_WLAN};" WLAN_ICON) - (revealer :transition "slideright" - :reveal wifi_rev - :duration "350ms" - (button :class "module_essid" :onclick "hyprctl dispatch exec 'alacritty -e nmtui' && ${eww} update wifi_rev=false" :wrap "false" :limit-width 12 :style "color: ${COL_WLAN};" ESSID_WLAN))))) - -(defwidget bluetooth [] - (box :vexpand "false" :hexpand "false" :space-evenly "false" - (button :class "module-wif" :onclick "hyprctl dispatch exec 'blueman-manager'" :wrap "false" :limit-width 12 :style "color: ${COL_WLAN};" "") - )) - -;; workspaces ;; -(defwidget workspaces [] - (literal :content workspace)) - - -;; Battery ;; -(defwidget bat [] - (box :class "bat_module" :vexpand "false" :hexpand "false" - (button - :class "iconbat" - :tooltip "Battery: ${battery-capacity}%" - :show_truncated false - :onclick "$HOME/.config/eww/scripts/pop system" - :wrap false - "${battery}"))) - -;; memory ;; -(defwidget mem [] - (box :class "mem_module" :vexpand "false" :hexpand "false" - (button :class "iconmem" - :onclick "$HOME/.config/eww/scripts/pop system" - (circular-progress :value memory - :class "membar" - :thickness 4 - :tooltip "using ${memory}% ram" - :show_truncated false - :wrap false - (label :class "mem_padding" :text "") - )))) - - -;; seperator ;; -(defwidget sep [] - (box :class "module-2" :vexpand "false" :hexpand "false" - (label :class "separ" :text "|"))) - -;; clock ;; -(defwidget clock_module [] - (eventbox :onhover "${eww} update time_rev=true" - :onhoverlost "${eww} update time_rev=false" - (button :onclick "scripts/pop calendar" - (box :class "module" :space-evenly "false" :orientation "h" :spacing "3" - (label :text clock_time :class "clock_time_class" ) - (label :text "" :class "clock_time_sep" ) - (label :text clock_minute :class "clock_minute_class") - (revealer :class "clock_date_class" - :transition "slideleft" - :reveal time_rev - :duration "350ms" - clock_date - ))))) - -;; speaker volume ;; -(defwidget volume [] - (box :class "module-2" :space-evenly "false" :orientation "h" :spacing "3" - (button :onclick "scripts/pop audio" :class "volume_icon" ""))) - -;; screen brightness ;; -(defwidget bright [] - (box :class "module-2" :space-evenly "false" :orientation "h" :spacing "3" - (button :onclick "scripts/pop brightness" :class "bright_icon" ""))) - -;; brightness widget ;; -(defwidget brightness_overlay [] - (eventbox :onhover "scripts/pop hoverCreate" - :onhoverlost "scripts/pop hoverGet brightness_window" - (box :class "audio-box" :halign "center" :orientation "v" :vexpand "false" :hexpand "false" - (label :class "speaker_text" :text "brightness" :halign "left" ) - (box :class "brightbar" :halign "center" :vexpand "false" :hexpand "false" - (label :class "bright_icon_overlay" :text "") - (scale :value brightness_percent - :space-evenly "false" - :orientation "h" - :onchange "brightnessctl set {}%" - :tooltip "brightness on ${brightness_percent}%" - :max 100 - :min 0))))) - -;; audio volume widget ;; -(defwidget audio [] - (eventbox :onhover "scripts/pop hoverCreate" - :onhoverlost "scripts/pop hoverGet audio_ctl" - (box :class "audio-box" :orientation "v" :space-evenly "false" :vexpand "false" :hexpand "false" - (box :halign "center" :space-evenly "false" :hexpand "false" :vexpand "false" - (box :class "speaker_icon" :orientation "v") - (box :orientation "v" :halign "center" :vexpand "false" :hexpand "false" - (label :class "speaker_text" :text "speaker" :valign "center" :halign "left" ) - (box :class "speaker_bar" :halign "center" :vexpand "false" :hexpand "false" - (scale :value volume_percent - :space-evenly "false" - :orientation "h" - :onchange "pactl set-sink-volume @DEFAULT_SINK@ {}%" - :tooltip "volume on ${volume_percent}%" - :max 100 - :min 0)))) - (label :text "" :class "audio_sep" :halign "center") - (box :halign "center" :space-evenly "false" :hexpand "false" :vexpand "false" - (box :class "mic_icon" :orientation "v") - (box :orientation "v" :halign "center" :vexpand "false" :hexpand "false" - (label :class "speaker_text" :text "mic" :valign "center" :halign "left" ) - (box :class "mic_bar" :halign "center" :vexpand "false" :hexpand "false" - (scale :value mic_percent - :space-evenly "false" - :orientation "h" - :tooltip "mic on ${mic_percent}%" - :onchange "pactl set-source-volume @DEFAULT_SOURCE@ {}%" - :max 100 - :min 0)))) - (label :text "" :class "audio_sep" :halign "center") - (box :halign "center" :space-evenly "false" :hexpand "false" :vexpand "false" - (label :class "bright_icon_overlay" :orientation "v" :text "") - (box :orientation "v" :halign "center" :vexpand "false" :hexpand "false" - (label :class "bright_text" :text "lux" :valign "center" :halign "right" ) - (box :class "brightbar" :halign "center" :vexpand "false" :hexpand "false" - (scale :value brightness_percent - :space-evenly "false" - :orientation "h" - :tooltip "brightness ${brightness_percent}%" - :onchange "brightnessctl set {}%" - :max 100 - :min 0)))) - (label :text "" :class "audio_sep" :halign "center") - (box :class "change_audio_box" :halign "center" :spac`e-evenly "false" :hexpand "false" :vexpand "false" - (box :class "change_audio" :orientation "v" :halign "left" - (button :onclick "scripts/change-audio internal" "")) - (box :class "change_audio" :orientation "v" :halign "right" - (button :onclick "scripts/change-audio bluetooth" "")) - )))) - -(defwidget cname [] - (literal :content currentName)) - -;; calendar ;; -(defwidget cal [] - (eventbox :onhover "scripts/pop hoverCreate" - :onhoverlost "scripts/pop hoverGet calendar" - (box :class "cal" :orientation "v" - (box :class "cal-in" - (calendar :class "cal" - :day calendar_day - :year calendar_year))))) - -(defwidget system [] - (eventbox :onhover "scripts/pop hoverCreate" - :onhoverlost "scripts/pop hoverGet system" - (box :class "sys_win" :orientation "v" :space-evenly "false" :hexpand "false" :vexpand "false" :spacing 0 - (box :class "sys_bat_box" :orientation "h" :space-evenly "false" - (circular-progress :value battery-capacity - :class "sys_bat" - :thickness 9 - (label :text "" - :class "sys_icon_bat" - :limit-width 2 - :show_truncated false - :wrap false)) - (box :orientation "v" :space-evenly "false" :spacing 0 :hexpand "false" :vexpand "false" - (label :text "battery" - :halign "start" - :class "sys_text_bat" - :limit-width 9 - :show_truncated false - :wrap false) - (label :text "${battery-capacity}%" - :halign "start" - :class "sys_text_bat_sub" - :limit-width 22 - :show_truncated false - :wrap false) - (label :text "${battery_status}" - :halign "start" - :class "sys_text_bat_sub" - :limit-width 22 - :show_truncated false - :wrap false))) - (label :text "" :class "sys_sep" :halign "center") - (box :class "sys_mem_box" :orientation "h" :space-evenly "false" :halign "start" - (circular-progress :value memory - :class "sys_mem" - :thickness 9 - (label :text "" - :class "sys_icon_mem" - :limit-width 2 - :show_truncated false - :wrap false - :angle 0.0)) - (box :orientation "v" :space-evenly "false" :spacing 0 :hexpand "false" :vexpand "false" - (label :text "memory" - :halign "start" - :class "sys_text_mem" - :limit-width 9 - :show_truncated false - :wrap false) - (label :text "${memory_used_mb} | ${memory_total_mb}mb " - :halign "start" - :class "sys_text_mem_sub" - :limit-width 22 - :show_truncated false - :wrap false) - (label :text "${memory_free_mb}mb free" - :halign "start" - :class "sys_text_mem_sub" - :limit-width 22 - :show_truncated false - :wrap false)))))) - -;; cockpit widget ;; -(defwidget cockpit [] - (box :orientation "h" - (box :class "cockpit_class" - :orientation "h" - (box :orientation "v" - (box :class "cockpit_box" :orientation "v" - (box - (button :class "cockpit_button_shutdown" :onclick "hyprctl dispatch exec 'shutdown now'" "") - (button :class "cockpit_button_restart" :onclick "hyprctl dispatch exec reboot" "") - (button :class "cockpit_button_sleep" :onclick "hyprctl dispatch exec 'playerctl -a pause & swaylock -c 000000 & systemctl suspend'" "")) - (label :text "" :class "audio_sep" :halign "center") - (box - (button :class "cockpit_button_settings" :onclick "hyprctl dispatch exec 'pavucontrol'" "") - (button :class "cockpit_button_settings" :onclick "scripts/change-audio bluetooth" ""))) - (box :class "cockpit_box" :orientation "v" - (button :class "cockpit_docs" :onclick "hyprctl dispatch exec nautilus $HOME/Documents" "Documents ") - (label :text "" :class "cockpit_sep_top" :halign "center") - (button :class "cockpit_pics" :onclick "hyprctl dispatch exec nautilus $HOME/Pictures" "Pictures ") - (label :text "" :class "cockpit_sep_bottom" :halign "center") - (button :class "cockpit_gits" :onclick "hyprctl dispatch exec 'alacritty --working-directory $HOME/gits'" "gits "))) - (box :orientation "v" - (box :class "cockpit_box" :orientation "v" - (box :class "cockpit_clock" - (label :text clock_time :class "cockpit_clock_left" ) - (label :text "" :class "cockpit_clock_sep" ) - (label :text clock_minute :class "cockpit_clock_right")) - (label :text "" :class "audio_sep" :halign "center") - (box :class "cockpit_clock" - (label :text clock_date :class "cockpit_date") - )) - (box :class "cockpit_box" (weather))) - (box :width 300 :height 200 :class "cockpit_box" :orientation "v" - (box :class "song_info" - (label :wrap true :text "${Song_info}")) - (box :class "album_cover" :style 'background-image: url("${Thumbnail}")') - ))) -) - -;; weather ;; - (defwidget weather [] - (box :orientation "v" :space-evenly "false" - (box :orientation "h" :space-evenly "false" - (box :class "weather-icon" :style "color: ${weather-hex}" {weather-icon}) - (box :class "temperature" "${temperature}")) - (box :orientation "v" :space-evenly "false" - (box :class "weather-stat" {weather-stat})) - (box :class "weather-quote-head" - (label :wrap true :text {weather-quote})))) - -;; left side but displayed right? ;; -(defwidget left [] - (box :orientation "h" - :space-evenly false - :halign "end" - :class "left_modules" -(volume) -(wifi) -(bluetooth) -(sep) -(bat) -(mem) -(sep) -(clock_module))) - -;; right side but displayed left? ;; -(defwidget right [] - (box :orientation "h" - :space-evenly false - :halign "start" - :class "right_modules" -(workspaces))) - -;; center widget ;; -(defwidget center [] - (box :orientation "h" - :space-evenly false - :halign "center" - :class "center_modules" -(cname))) - -;; bar as widget;; -(defwidget bar_1 [] - (box :class "bar_class" - :orientation "h" - (right) - (center) - (left) - )) -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; Drawing Windows ;; -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - -(defwindow calendar - :monitor 0 - :geometry (geometry :x "20px" - :y "2px" - :anchor "top right" - :width "270px" - :height "60px") - :stacking "overlay" -(cal)) - -(defwindow audio_ctl - :monitor 0 - :geometry (geometry :x "120px" - :y "2px" - :anchor "top right" - :width "250px" - :height "330px") - :stacking "overlay" -(audio)) - -(defwindow brightness_window - :monitor 0 - :geometry (geometry :x "250px" - :y "2px" - :anchor "top right" - :width "280px" - :height "60px") - :stacking "overlay" -(brightness_overlay)) - -;; music again .. ;; -;; (defwindow music_win :stacking "fg" :focusable "false" :screen 1 -;; :geometry (geometry :x "0" :y "7%" :width 428 :height 104 :anchor "top center") -;; (music_pop)) - -(defwindow system - :monitor 0 - :geometry (geometry :x "50px" - :y "2px" - :anchor "top right" - :width "290px" - :height "120px") - :stacking "overlay" -(system)) - -;; draw the bar ;; -(defwindow bar - :monitor 0 - :geometry (geometry :x "0%" - :y "1px" - :width "99%" - :height "20px" - :anchor "top center") - :stacking "bg" - :wm-ignore false - :exclusive true - (bar_1)) - -;; draw the bar ;; -(defwindow cockpit_window_0 - :monitor 0 - :geometry (geometry - :width "600px" - :height "500px" - :anchor "center") - :stacking "overlay" - :wm-ignore false - :exclusive true - (cockpit)) - -(defwindow calendar1 - :monitor 1 - :geometry (geometry :x "20px" - :y "2px" - :anchor "top right" - :width "270px" - :height "60px") - :stacking "overlay" -(cal)) - -(defwindow audio_ctl1 - :monitor 1 - :geometry (geometry :x "120px" - :y "2px" - :anchor "top right" - :width "250px" - :height "330px") - :stacking "overlay" -(audio)) - -(defwindow brightness_window1 - :monitor 1 - :geometry (geometry :x "250px" - :y "2px" - :anchor "top right" - :width "280px" - :height "60px") - :stacking "overlay" -(brightness_overlay)) - -;; music again .. ;; -;; (defwindow music_win1 :stacking "fg" :focusable "false" :screen 1 -;; :geometry (geometry :x "0" :y "7%" :width 428 :height 104 :anchor "top center") -;; (music_pop)) - -(defwindow system1 - :monitor 1 - :geometry (geometry :x "50px" - :y "2px" - :anchor "top right" - :width "290px" - :height "120px") - :stacking "overlay" -(system)) - -;; draw the bar ;; -(defwindow bar1 - :monitor 1 - :geometry (geometry :x "0%" - :y "1px" - :width "99%" - :height "20px" - :anchor "top center") - :stacking "bg" - :wm-ignore false - :exclusive true - (bar_1)) - -;; draw the bar ;; -(defwindow cockpit_window_1 - :monitor 1 - :geometry (geometry - :width "600px" - :height "500px" - :anchor "center") - :stacking "overlay" - :wm-ignore false - :exclusive true - (cockpit)) - diff --git a/eww_laptop/images/mic.png b/eww_laptop/images/mic.png deleted file mode 100644 index d77f315..0000000 Binary files a/eww_laptop/images/mic.png and /dev/null differ diff --git a/eww_laptop/images/music.png b/eww_laptop/images/music.png deleted file mode 100644 index 11804f5..0000000 Binary files a/eww_laptop/images/music.png and /dev/null differ diff --git a/eww_laptop/images/profile.png b/eww_laptop/images/profile.png deleted file mode 100644 index 0190a36..0000000 Binary files a/eww_laptop/images/profile.png and /dev/null differ diff --git a/eww_laptop/images/speaker.png b/eww_laptop/images/speaker.png deleted file mode 100644 index 79e005b..0000000 Binary files a/eww_laptop/images/speaker.png and /dev/null differ diff --git a/eww_laptop/launch_bar b/eww_laptop/launch_bar deleted file mode 100755 index 205cd60..0000000 --- a/eww_laptop/launch_bar +++ /dev/null @@ -1,27 +0,0 @@ -#!/bin/bash - -## Files and cmd -FILE="$HOME/.cache/eww_launch.xyz" -EWW="$HOME/.local/bin/eww -c $HOME/.config/eww" - -## Run eww daemon if not running already -if [[ ! `pidof eww` ]]; then - ${EWW} daemon - sleep 1 -fi - -## Open widgets -run_eww() { - ${EWW} open-many \ - bar - -} - -## Launch or close widgets accordingly -if [[ ! -f "$FILE" ]]; then - touch "$FILE" - run_eww && bspc config -m LVDS-1 top_padding 49 -else - ${EWW} close-all && killall eww - rm "$FILE" -fi diff --git a/eww_laptop/scripts/audio_devices b/eww_laptop/scripts/audio_devices deleted file mode 100755 index 1548cfd..0000000 --- a/eww_laptop/scripts/audio_devices +++ /dev/null @@ -1,31 +0,0 @@ -#!/bin/bash -CLIENTS=$(pactl list sink-inputs | grep "application.process.binary" | awk -F '= ' ' { print $2 } ' | tr -d '"') - -readarray -t lines <<<"$CLIENTS" - -printf "%s\n" "${lines[@]}" -echo ${lines[2]} - - -#echo "(box :class \"works\" :orientation \"h\" :spacing 5 :space-evenly \"false\" (button :onclick \"hyprctl dispatch workspace 1\" :class \"$un$o1$f1\" \"$ic_1\") (button :onclick \"hyprctl dispatch workspace 2\" :class \"$un$o2$f2\" \"$ic_2\") (button :onclick \"hyprctl dispatch workspace 3\" :class \"$un$o3$f3\" \"$ic_3\") (button :onclick \"hyprctl dispatch workspace 4\" :class \"$un$o4$f4\" \"$ic_4\") (button :onclick \"hyprctl dispatch workspace 5\" :class \"$un$o5$f5\" \"$ic_5\") (button :onclick \"hyprctl dispatch workspace 6\" :class \"$un$o6$f6\" \"$ic_6\") (button :onclick \"hyprctl dispatch workspace 7\" :class \"$un$o7$f7\" \"$ic_7\") (button :onclick \"hyprctl dispatch workspace 8\" :class \"$un$o8$f8\" \"$ic_8\"))" - - # (eventbox :onhover "scripts/pop hoverCreate" - # :onhoverlost "scripts/pop hoverGet audio_ctl" - # (box :class "audio-box" :orientation "v" :space-evenly "false" :vexpand "false" :hexpand "false" - - # (box :halign "center" :space-evenly "false" :hexpand "false" :vexpand "false" - # (box :class "speaker_icon" :orientation "v") - # (box :orientation "v" :halign "center" :vexpand "false" :hexpand "false" - # (label :class "speaker_text" :text "speaker" :valign "center" :halign "left" ) - # (box :class "speaker_bar" :halign "center" :vexpand "false" :hexpand "false" - # (scale :value volume_percent - # :space-evenly "false" - # :orientation "h" - # :onchange "pactl set-sink-volume @DEFAULT_SINK@ {}%" - # :tooltip "volume on ${volume_percent}%" - # :max 100 - # :min 0)))) - - # (label :text "" :class "audio_sep" :halign "center") - - # )))) diff --git a/eww_laptop/scripts/battery b/eww_laptop/scripts/battery deleted file mode 100755 index d42c0e7..0000000 --- a/eww_laptop/scripts/battery +++ /dev/null @@ -1,76 +0,0 @@ -#!/bin/bash - -bat=/sys/class/power_supply/BAT0/ -per="$(cat "$bat/capacity")" -char="$(cat "$bat/status")" - -icon() { - -#[ $(cat "$bat/status") = Charging ] && echo "" && exit - -if [ "$char" == "Charging" ]; then - if [ "$per" -gt "90" ]; then - icon="" - elif [ "$per" -gt "80" ]; then - icon="" - elif [ "$per" -gt "70" ]; then - icon="" - elif [ "$per" -gt "60" ]; then - icon="" - elif [ "$per" -gt "50" ]; then - icon="" - elif [ "$per" -gt "40" ]; then - icon="" - elif [ "$per" -gt "30" ]; then - icon="" - elif [ "$per" -gt "20" ]; then - icon="" - elif [ "$per" -gt "10" ]; then - icon="" - elif [ "$per" -gt "0" ]; then - icon="" - else - echo  && exit - fi -else - if [ "$per" -gt "90" ]; then - icon="" - elif [ "$per" -gt "80" ]; then - icon="" - elif [ "$per" -gt "70" ]; then - icon="" - elif [ "$per" -gt "60" ]; then - icon="" - elif [ "$per" -gt "50" ]; then - icon="" - elif [ "$per" -gt "40" ]; then - icon="" - elif [ "$per" -gt "30" ]; then - icon="" - elif [ "$per" -gt "20" ]; then - icon="" - elif [ "$per" -gt "10" ]; then - icon="" - elif [ "$per" -gt "0" ]; then - icon="" - notify-send -u critical "Battery Low" "Connect Charger" - else - echo  && exit - fi -fi - echo "$icon" -} - -percent() { - echo $per -} - -stat() { - echo $char -} - -[ "$1" = "icon" ] && icon && exit -[ "$1" = "percent" ] && percent && exit -[ "$1" = 'stat' ] && stat && exit -exit - diff --git a/eww_laptop/scripts/change-audio b/eww_laptop/scripts/change-audio deleted file mode 100755 index 99702c3..0000000 --- a/eww_laptop/scripts/change-audio +++ /dev/null @@ -1,35 +0,0 @@ -#! /bin/bash - -internal() { - SPEAKER=$(pactl list sinks | grep "Name" | grep "alsa" | awk -F ': ' '{ print $2 }') - if [ "$SPEAKER" != "" ]; then - pactl set-default-sink "$SPEAKER" - pactl set-sink-mute "$SPEAKER" false - notify-send "changed audio to internal speakers " - else - notify-send "failed, not available!" - fi -} - -bluetooth() { - SPEAKER=$(pactl list sinks | grep "Name" | grep "blue" | awk -F ': ' '{ print $2 }') - if [ "$SPEAKER" != "" ]; then - pactl set-default-sink "$SPEAKER" - pactl set-sink-mute "$SPEAKER" false - notify-send "changed audio to Bluetooth" - else - notify-send "failed, not available!" - fi -} - - -if [ "$1" == "internal" ]; then - internal -elif [ "$1" == "bluetooth" ]; then - bluetooth -else - SPEAKER=$(pactl info | grep "Default Sink" | awk -F ': ' ' { print $2 } ') - pactl set-sink-mute "$SPEAKER" false -fi - - diff --git a/eww_laptop/scripts/change-brightness b/eww_laptop/scripts/change-brightness deleted file mode 100755 index 198dc44..0000000 --- a/eww_laptop/scripts/change-brightness +++ /dev/null @@ -1,12 +0,0 @@ -#! /bin/bash - -set_brightness() { -brightnessctl set "$1" -CURRENT=$(brightnessctl -m -d intel_backlight | awk -F, '{print substr($4, 0, length($4)-1)}') -dunstify -a "changeBrightness" -r 3 -u low -i brightness-high -h int:value:"$CURRENT" "Brightness: ${CURRENT}%" -} - -if [ "$1" == "brightness" ]; then - set_brightness "$2" -fi - diff --git a/eww_laptop/scripts/change-volume b/eww_laptop/scripts/change-volume deleted file mode 100755 index 094ed43..0000000 --- a/eww_laptop/scripts/change-volume +++ /dev/null @@ -1,20 +0,0 @@ -#! /bin/bash - -set_volume_sink() { -pactl set-sink-volume @DEFAULT_SINK@ "$1" -CURRENT=$(pactl get-sink-volume @DEFAULT_SINK@ | awk -F'/' '{ print $2 }' | tr -d ' %') -dunstify -a "changeVolume" -r 2 -u low -i audio-volume-high -h int:value:"$CURRENT" "Output Volume: ${CURRENT}%" -} - -set_volume_source() { -pactl set-source-volume @DEFAULT_SOURCE@ "$1" -CURRENT=$(pactl get-source-volume @DEFAULT_SOURCE@ | awk -F'/' '{ print $2 }' | tr -d ' %') -dunstify -a "changeMicVolume" -r 2 -u low -i audio-volume-high -h int:value:"$CURRENT" "Input Volume: ${CURRENT}%" -} - - -if [ "$1" == "sink" ]; then - set_volume_sink "$2" -elif [ "$1" == "source" ]; then - set_volume_source "$2" -fi diff --git a/eww_laptop/scripts/cockpit_toggle b/eww_laptop/scripts/cockpit_toggle deleted file mode 100755 index fa672b9..0000000 --- a/eww_laptop/scripts/cockpit_toggle +++ /dev/null @@ -1,11 +0,0 @@ -#! /bin/bash - -ISOPEN=$(eww windows | grep "*cockpit" | tr -d '*') - - -if [ "$ISOPEN" = "" ]; then -MONITOR=$(hyprctl monitors | grep -B 8 "focused: yes" | grep "ID" | awk -F '(' ' { print $2 } ' | tr -d 'ID ):') - eww open cockpit_window_"$MONITOR" -else - eww close "$ISOPEN" -fi diff --git a/eww_laptop/scripts/current_name b/eww_laptop/scripts/current_name deleted file mode 100755 index 224bfac..0000000 --- a/eww_laptop/scripts/current_name +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/bash -currentName() { - win=$(hyprctl activewindow | grep class | awk -F ':' '{print $2}' | tr -d ' ') - echo "(box :class \"module_app_text\" :space-evenly \"false\" :orientation \"h\" :spacing \"3\" (label :text \"$win\"))" -} -currentName -tail -f /tmp/hypr/$HYPRLAND_INSTANCE_SIGNATURE/hyprland.log | grep -E --line-buffered "focus to surface" | while read -r; do -currentName -done diff --git a/eww_laptop/scripts/firefox_control.sh b/eww_laptop/scripts/firefox_control.sh deleted file mode 100755 index 32d818e..0000000 --- a/eww_laptop/scripts/firefox_control.sh +++ /dev/null @@ -1,5 +0,0 @@ -#! /bin/bash - -NUM=$(pactl list clients short | grep "firefox" | awk -F 'PipeWire' ' { print $1 } ' | tr -d ' \t\n') -CLIENT=$(pactl list sink-inputs short | grep "$NUM" | awk -F ' ' ' { print $1 }' | tr -d ' \t\n') -pactl set-sink-input-volume "$CLIENT" "$1" diff --git a/eww_laptop/scripts/getwethquote b/eww_laptop/scripts/getwethquote deleted file mode 100755 index 7bfaf34..0000000 --- a/eww_laptop/scripts/getwethquote +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/bash -echo -e $(cat $HOME/.cache/weather/weather-quote) | head -n1 diff --git a/eww_laptop/scripts/getwethquote2 b/eww_laptop/scripts/getwethquote2 deleted file mode 100755 index a34afa9..0000000 --- a/eww_laptop/scripts/getwethquote2 +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/bash -echo -e $(cat $HOME/.cache/weather/weather-quote) | tail -n1 diff --git a/eww_laptop/scripts/mem-ad b/eww_laptop/scripts/mem-ad deleted file mode 100755 index 0495e00..0000000 --- a/eww_laptop/scripts/mem-ad +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/bash - - -total="$(free -m | grep Mem: | awk '{ print $2 }')" -used="$(free -m | grep Mem: | awk '{ print $3 }')" - -free=$(expr $total - $used) - -if [ "$1" = "total" ]; then - echo $total -elif [ "$1" = "used" ]; then - echo $used -elif [ "$1" = "free" ]; then - echo $free -fi diff --git a/eww_laptop/scripts/memory b/eww_laptop/scripts/memory deleted file mode 100755 index da37c1d..0000000 --- a/eww_laptop/scripts/memory +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash - -printf "%.0f\n" $(free -m | grep Mem | awk '{print ($3/$2)*100}') diff --git a/eww_laptop/scripts/music_control b/eww_laptop/scripts/music_control deleted file mode 100755 index 70a1483..0000000 --- a/eww_laptop/scripts/music_control +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/bash -echo $(playerctl metadata -p ncspot,%any --format "{{ artist }}\n{{ album }}\n{{ title }}") diff --git a/eww_laptop/scripts/music_control2 b/eww_laptop/scripts/music_control2 deleted file mode 100755 index 42dca7f..0000000 --- a/eww_laptop/scripts/music_control2 +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash -echo $(playerctl -p ncspot,%any metadata mpris:artUrl) - diff --git a/eww_laptop/scripts/music_info b/eww_laptop/scripts/music_info deleted file mode 100755 index ffafe87..0000000 --- a/eww_laptop/scripts/music_info +++ /dev/null @@ -1,98 +0,0 @@ -#!/bin/bash -# scripts by adi1090x - -## Get data -STATUS="$(mpc status)" -COVER="/tmp/.music_cover.png" -MUSIC_DIR="$HOME/Music" - -## Get status -get_status() { - if [[ $STATUS == *"[playing]"* ]]; then - echo "" - else - echo "奈" - fi -} - -## Get song -get_song() { - song=`mpc -f %title% current` - if [[ -z "$song" ]]; then - echo "Offline" - else - echo "$song" - fi -} - -## Get artist -get_artist() { - artist=`mpc -f %artist% current` - if [[ -z "$artist" ]]; then - echo "" - else - echo "$artist" - fi -} - -## Get time -get_time() { - time=`mpc status | grep "%)" | awk '{print $4}' | tr -d '(%)'` - if [[ -z "$time" ]]; then - echo "0" - else - echo "$time" - fi -} -get_ctime() { - ctime=`mpc status | grep "#" | awk '{print $3}' | sed 's|/.*||g'` - if [[ -z "$ctime" ]]; then - echo "0:00" - else - echo "$ctime" - fi -} -get_ttime() { - ttime=`mpc -f %time% current` - if [[ -z "$ttime" ]]; then - echo "0:00" - else - echo "$ttime" - fi -} - -## Get cover -get_cover() { - ffmpeg -i "${MUSIC_DIR}/$(mpc current -f %file%)" "${COVER}" -y &> /dev/null - STATUS=$? - - # Check if the file has a embbeded album art - if [ "$STATUS" -eq 0 ];then - echo "$COVER" - else - echo "images/music.png" - fi -} - -## Execute accordingly -if [[ "$1" == "--song" ]]; then - get_song -elif [[ "$1" == "--artist" ]]; then - get_artist -elif [[ "$1" == "--status" ]]; then - get_status -elif [[ "$1" == "--time" ]]; then - get_time -elif [[ "$1" == "--ctime" ]]; then - get_ctime -elif [[ "$1" == "--ttime" ]]; then - get_ttime -elif [[ "$1" == "--cover" ]]; then - get_cover -elif [[ "$1" == "--toggle" ]]; then - mpc -q toggle -elif [[ "$1" == "--next" ]]; then - { mpc -q next; get_cover; } -elif [[ "$1" == "--prev" ]]; then - { mpc -q prev; get_cover; } -fi diff --git a/eww_laptop/scripts/ncspot_control.sh b/eww_laptop/scripts/ncspot_control.sh deleted file mode 100755 index 477625c..0000000 --- a/eww_laptop/scripts/ncspot_control.sh +++ /dev/null @@ -1,5 +0,0 @@ -#! /bin/bash - -NUM=$(pactl list clients short | grep "ncspot" | awk -F 'PipeWire' ' { print $1 } ' | tr -d ' \t\n') -CLIENT=$(pactl list sink-inputs short | grep "$NUM" | awk -F ' ' ' { print $1 }' | tr -d ' \t\n') -pactl set-sink-input-volume "$CLIENT" "$1" diff --git a/eww_laptop/scripts/pop b/eww_laptop/scripts/pop deleted file mode 100755 index 133b55c..0000000 --- a/eww_laptop/scripts/pop +++ /dev/null @@ -1,134 +0,0 @@ -#!/bin/bash - - -calendar() { -LOCK_FILE="$HOME/.cache/eww-calendar.lock" -EWW_BIN="$HOME/.local/bin/eww" - -run() { - ${EWW_BIN} -c $HOME/.config/eww open calendar -} - -# Open widgets -if [[ ! -f "$LOCK_FILE" ]]; then - ${EWW_BIN} -c $HOME/.config/eww close system music_win audio_ctl brightness - touch "$LOCK_FILE" - run && echo "ok good!" -else - ${EWW_BIN} -c $HOME/.config/eww close calendar - rm "$LOCK_FILE" && echo "closed" -fi -} - - -system() { -LOCK_FILE_MEM="$HOME/.cache/eww-system.lock" -EWW_BIN="$HOME/.local/bin/eww" - -run() { - ${EWW_BIN} -c $HOME/.config/eww open system -} - -# Open widgets -if [[ ! -f "$LOCK_FILE_MEM" ]]; then - ${EWW_BIN} -c $HOME/.config/eww close calendar music_win audio_ctl brightness - touch "$LOCK_FILE_MEM" - run && echo "ok good!" -else - ${EWW_BIN} -c $HOME/.config/eww close system - rm "$LOCK_FILE_MEM" && echo "closed" -fi -} - - -music() { -LOCK_FILE_SONG="$HOME/.cache/eww-song.lock" -EWW_BIN="$HOME/.local/bin/eww" - -run() { - ${EWW_BIN} -c $HOME/.config/eww open music_win -} - -# Open widgets -if [[ ! -f "$LOCK_FILE_SONG" ]]; then - ${EWW_BIN} -c $HOME/.config/eww close system calendar brightness - touch "$LOCK_FILE_SONG" - run && echo "ok good!" -else - ${EWW_BIN} -c $HOME/.config/eww close music_win - rm "$LOCK_FILE_SONG" && echo "closed" -fi -} - - - -audio() { -LOCK_FILE_AUDIO="$HOME/.cache/eww-audio.lock" -EWW_BIN="$HOME/.local/bin/eww" - -run() { - ${EWW_BIN} -c $HOME/.config/eww open audio_ctl -} - -# Open widgets -if [[ ! -f "$LOCK_FILE_AUDIO" ]]; then - ${EWW_BIN} -c $HOME/.config/eww close system calendar music brightness - touch "$LOCK_FILE_AUDIO" - run && echo "ok good!" -else - ${EWW_BIN} -c $HOME/.config/eww close audio_ctl - rm "$LOCK_FILE_AUDIO" && echo "closed" -fi -} - -brightness() { -LOCK_FILE_AUDIO="$HOME/.cache/eww-brightness.lock" -EWW_BIN="$HOME/.local/bin/eww" - -run() { - ${EWW_BIN} -c $HOME/.config/eww open brightness_window -} - -# Open widgets -if [[ ! -f "$LOCK_FILE_AUDIO" ]]; then - ${EWW_BIN} -c $HOME/.config/eww close system calendar music audio_ctl - touch "$LOCK_FILE_AUDIO" - run && echo "ok good!" -else - ${EWW_BIN} -c $HOME/.config/eww close brightness_window - rm "$LOCK_FILE_AUDIO" && echo "closed" -fi -} - -hoverGet() { -NAME="$1" -EWW_BIN="$HOME/.local/bin/eww" -if [[ -f "$STORE" ]]; then - rm "$STORE" - ${EWW_BIN} -c $HOME/.config/eww close "$NAME" -fi -} - -hoverCreate() { -if [[ ! -f "$STORE" ]]; then - touch "$STORE" -else - echo "failure!" -fi -} -STORE=true -if [ "$1" = "calendar" ]; then - calendar -elif [ "$1" = "system" ]; then - system -#elif [ "$1" = "music" ]; then -#music -elif [ "$1" = "audio" ]; then - audio -elif [ "$1" = "brightness" ]; then - brightness -elif [ "$1" = "hoverGet" ]; then - hoverGet "$2" -elif [ "$1" = "hoverCreate" ]; then - hoverCreate -fi diff --git a/eww_laptop/scripts/spotifyd b/eww_laptop/scripts/spotifyd deleted file mode 100755 index fc35a11..0000000 --- a/eww_laptop/scripts/spotifyd +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/bash - -#if [ "$PLAYER_EVENT" = "start" ] || [ "$PLAYER_EVENT" = "change" ]; -#then - trackName=$(playerctl -p spotifyd,%any metadata title) - artistAndAlbumName=$(playerctl -p spotifyd,%any metadata --format "{{ artist }} ({{ album }})") - Thumbnail_url=$(playerctl -p spotifyd,%any metadata mpris:artUrl) - Thumbnail=$(curl "$Thumbnail_url") - notify-send -u low "$trackName" "$artistAndAlbumName " -i "$Thumbnail" -#fi diff --git a/eww_laptop/scripts/spotifyd.sh b/eww_laptop/scripts/spotifyd.sh deleted file mode 100755 index 86d89f3..0000000 --- a/eww_laptop/scripts/spotifyd.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/bash -if [ "$PLAYER_EVENT" = "start" ] || [ "$PLAYER_EVENT" = "change" ]; -then - song=$(playerctl metadata -p spotifyd --format "{{ title }}\n{{ artist }}\n{{ album }}") - if [ ! -f "/home/dashie/.cache/icons/$song" ]; then - thumb=$(playerctl metadata -p spotifyd --format '{{lc(mpris:artUrl)}}') - convert "$thumb" -flatten -thumbnail 256x256 /home/dashie/.cache/icons/"$song" - fi - dunstify -I /home/dashie/.cache/icons/"$song" -t 3000 "Spotify" "$song" -fi diff --git a/eww_laptop/scripts/toggle-mute b/eww_laptop/scripts/toggle-mute deleted file mode 100755 index 7fcd17e..0000000 --- a/eww_laptop/scripts/toggle-mute +++ /dev/null @@ -1,12 +0,0 @@ -#! /bin/bash - -SINK=$(pactl info | grep "Default Sink"| awk -F 'Default Sink: ' ' { print $2 } ') -pactl set-sink-mute $SINK toggle -MUTE=$(pactl list sinks | grep -A 6 "$SINK" | grep "Mute: yes" | tr -d '\t') - -if [ "$MUTE" = "Mute: yes" ]; then - dunstify -a "toggleMute" -r 2 -u low "Muted" -else - dunstify -a "toggleMute" -r 2 -u low "Unmuted" -fi - diff --git a/eww_laptop/scripts/weather b/eww_laptop/scripts/weather deleted file mode 100755 index 69c277d..0000000 --- a/eww_laptop/scripts/weather +++ /dev/null @@ -1,125 +0,0 @@ -#!/bin/bash - -tmp_weather="$HOME/.cache/weather" -tmp_weather_stat=$tmp_weather/weather-stat -tmp_weather_degree=$tmp_weather/weather-degree -tmp_weather_quote=$tmp_weather/weather-quote -tmp_weather_hex=$tmp_weather/weather-hex -tmp_weather_icon=$tmp_weather/weather-icon - -if [ ! -d $tmp_weather ]; then - mkdir -p $tmp_weather -fi - -# Put in your api and stuff link here -# If you dunno, head to openweathermap.org, and make and account -#(completely free I swear, and then get your API Key and your City ID) -# I wish I was smart enough to do it like Elena, but this is the top I could do lol -KEY=$(cat $HOME/.ssh/weather-key) -ID=$(cat $HOME/.ssh/location) -UNIT="{metric}" #Options are 'metric' and 'imperial' -weather=$(curl -sf "http://api.openweathermap.org/data/2.5/weather?APPID="$KEY"&id="$ID"&units="$UNIT"") -echo $weather -if [ ! -z "$weather" ]; then - weather_temp=$(echo "$weather" | jq ".main.temp" | cut -d "." -f 1) - weather_icon_code=$(echo "$weather" | jq -r ".weather[].icon" | head -1) - weather_description=$(echo "$weather" | jq -r ".weather[].description" | head -1 | sed -e "s/\b\(.\)/\u\1/g") - - #Big long if statement of doom - if [ "$weather_icon_code" == "50d" ]; then - weather_icon=" " - weather_quote="Forecast says it's misty \nMake sure you don't get lost on your way..." - weather_hex="#84afdb" #a7b8b2 - elif [ "$weather_icon_code" == "50n" ]; then - weather_icon=" " - weather_quote="Forecast says it's a misty night \nDon't go anywhere tonight or you might get lost..." - weather_hex="#84afdb" - elif [ "$weather_icon_code" == "01d" ]; then - weather_icon=" " - weather_quote="It's a sunny day, gonna be fun! \nDon't go wandering all by yourself though..." - weather_hex="#ffd86b" - elif [ "$weather_icon_code" == "01n" ]; then - weather_icon=" " - weather_quote="It's a clear night \nYou might want to take a evening stroll to relax..." - weather_hex="#fcdcf6" - elif [ "$weather_icon_code" == "02d" ]; then - weather_icon=" " - weather_quote="It's cloudy, sort of gloomy \nYou'd better get a book to read..." - weather_hex="#adadff" - elif [ "$weather_icon_code" == "02n" ]; then - weather_icon=" " - weather_quote="It's a cloudy night \nHow about some hot chocolate and a warm bed?" - weather_hex="#adadff" - elif [ "$weather_icon_code" == "03d" ]; then - weather_icon=" " - weather_quote="It's cloudy, sort of gloomy \nYou'd better get a book to read..." - weather_hex="#adadff" - elif [ "$weather_icon_code" == "03n" ]; then - weather_icon=" " - weather_quote="It's a cloudy night \nHow about some hot chocolate and a warm bed?" - weather_hex="#adadff" - elif [ "$weather_icon_code" == "04d" ]; then - weather_icon=" " - weather_quote="It's cloudy, sort of gloomy \nYou'd better get a book to read..." - weather_hex="#adadff" - elif [ "$weather_icon_code" == "04n" ]; then - weather_icon=" " - weather_quote="It's a cloudy night \nHow about some hot chocolate and a warm bed?" - weather_hex="#adadff" - elif [ "$weather_icon_code" == "09d" ]; then - weather_icon=" " - weather_quote="It's rainy, it's a great day! \nGet some ramen and watch as the rain falls..." - weather_hex="#6b95ff" - elif [ "$weather_icon_code" == "09n" ]; then - weather_icon=" " - weather_quote=" It's gonna rain tonight it seems \nMake sure your clothes aren't still outside..." - weather_hex="#6b95ff" - elif [ "$weather_icon_code" == "10d" ]; then - weather_icon=" " - weather_quote="It's rainy, it's a great day! \nGet some ramen and watch as the rain falls..." - weather_hex="#6b95ff" - elif [ "$weather_icon_code" == "10n" ]; then - weather_icon=" " - weather_quote=" It's gonna rain tonight it seems \nMake sure your clothes aren't still outside..." - weather_hex="#6b95ff" - elif [ "$weather_icon_code" == "11d" ]; then - weather_icon="" - weather_quote="There's storm for forecast today \nMake sure you don't get blown away..." - weather_hex="#ffeb57" - elif [ "$weather_icon_code" == "11n" ]; then - weather_icon="" - weather_quote="There's gonna be storms tonight \nMake sure you're warm in bed and the windows are shut..." - weather_hex="#ffeb57" - elif [ "$weather_icon_code" == "13d" ]; then - weather_icon=" " - weather_quote="It's gonna snow today \nYou'd better wear thick clothes and make a snowman as well!" - weather_hex="#e3e6fc" - elif [ "$weather_icon_code" == "13n" ]; then - weather_icon=" " - weather_quote="It's gonna snow tonight \nMake sure you get up early tomorrow to see the sights..." - weather_hex="#e3e6fc" - elif [ "$weather_icon_code" == "40d" ]; then - weather_icon=" " - weather_quote="Forecast says it's misty \nMake sure you don't get lost on your way..." - weather_hex="#84afdb" - elif [ "$weather_icon_code" == "40n" ]; then - weather_icon=" " - weather_quote="Forecast says it's a misty night \nDon't go anywhere tonight or you might get lost..." - weather_hex="#84afdb" - else - weather_icon=" " - weather_quote="Sort of odd, I don't know what to forecast \nMake sure you have a good time!" - weather_hex="#adadff" - fi - echo "$weather_icon" > $tmp_weather_icon - echo "$weather_description" > $tmp_weather_stat - echo "$weather_temp""°C" > $tmp_weather_degree - echo "$weather_quote" > $tmp_weather_quote - echo "$weather_hex" > $tmp_weather_hex - else - echo "Weather Unavailable" > $tmp_weather_stat - echo " " > $tmp_weather_icon - echo "Ah well, no weather huh? \nEven if there's no weather, it's gonna be a great day!" > $tmp_weather_quote - echo "-" > $tmp_weather_degree - echo "#adadff" > $tmp_weather_hex -fi diff --git a/eww_laptop/scripts/weather-trimmer b/eww_laptop/scripts/weather-trimmer deleted file mode 100755 index 8ddeaa1..0000000 --- a/eww_laptop/scripts/weather-trimmer +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/bash -weather=$(cat $HOME/.cache/weather/weather-stat) -weather_count=$(cat $HOME/.cache/weather/weather-stat | wc -c) - -if [ "$weather_count" -lt 10 ]; then - echo $weather; -else - echo $(cat $HOME/.cache/weather/weather-stat | cut -c1-6)... -fi diff --git a/eww_laptop/scripts/wifi b/eww_laptop/scripts/wifi deleted file mode 100755 index 9de7f23..0000000 --- a/eww_laptop/scripts/wifi +++ /dev/null @@ -1,26 +0,0 @@ -#!/bin/bash - -status=$(nmcli g | grep -oE "disconnected") -essid=$(nmcli c | grep wlp2s0 | awk '{print ($1)}') - -if [ $status ] ; then - icon="" - text="" - col="#575268" - -else - icon="" - text="${essid}" - col="#a1bdce" -fi - - - -if [[ "$1" == "--COL" ]]; then - echo $col -elif [[ "$1" == "--ESSID" ]]; then - echo $text -elif [[ "$1" == "--ICON" ]]; then - echo $icon -fi - diff --git a/eww_laptop/scripts/workspace b/eww_laptop/scripts/workspace deleted file mode 100755 index fd4b76b..0000000 --- a/eww_laptop/scripts/workspace +++ /dev/null @@ -1,119 +0,0 @@ -#!/bin/bash -workspaces() { - -ws1="ID 1 " -ws2="ID 2 " -ws3="ID 3 " -ws4="ID 4 " -ws5="ID 5 " -ws6="ID 6 " -ws7="ID 7 " -ws8="ID 8 " -ws9="ID 9 " -ws10="ID 10 " - -# check if Occupied -o1=$(hyprctl workspaces | grep "$ws1" ) -o2=$(hyprctl workspaces | grep "$ws2" ) -o3=$(hyprctl workspaces | grep "$ws3" ) -o4=$(hyprctl workspaces | grep "$ws4" ) -o5=$(hyprctl workspaces | grep "$ws5" ) -o6=$(hyprctl workspaces | grep "$ws6" ) -o7=$(hyprctl workspaces | grep "$ws7" ) -o8=$(hyprctl workspaces | grep "$ws8" ) -o9=$(hyprctl workspaces | grep "$ws9" ) -o10=$(hyprctl workspaces | grep "$ws10" ) - -# check if Focused -f1=$(hyprctl monitors | grep "workspace: 1 " ) -f2=$(hyprctl monitors | grep "workspace: 2 " ) -f3=$(hyprctl monitors | grep "workspace: 3 " ) -f4=$(hyprctl monitors | grep "workspace: 4 " ) -f5=$(hyprctl monitors | grep "workspace: 5 " ) -f6=$(hyprctl monitors | grep "workspace: 6 " ) -f7=$(hyprctl monitors | grep "workspace: 7 " ) -f8=$(hyprctl monitors | grep "workspace: 8 " ) -f9=$(hyprctl monitors | grep "workspace: 9 " ) -f10=$(hyprctl monitors | grep "workspace: 10 " ) - -if [ "$o1" != "" ]; then - ic_1="①" - else - ic_1="" -fi -if [ "$o2" != "" ]; then - ic_2="②" - else - ic_2="" -fi -if [ "$o3" != "" ]; then - ic_3="③" - else - ic_3="" -fi -if [ "$o4" != "" ]; then - ic_4="④" - else - ic_4="" -fi -if [ "$o5" != "" ]; then - ic_5="⑤" - else - ic_5="" -fi -if [ "$o6" != "" ]; then - ic_6="⑥" - else - ic_6="" -fi -if [ "$o7" != "" ]; then - ic_7="⑦" - else - ic_7="" -fi -if [ "$o8" != "" ]; then - ic_8="⑧" - else - ic_8="" -fi -if [ "$o9" != "" ]; then - ic_9="➈" - else - ic_9="" -fi -if [ "$o10" != "" ]; then - ic_10="➉" - else - ic_10="" -fi - -if [ "$f1" != "" ]; then - ic_1="➊" -elif [ "$f2" != "" ]; then - ic_2="➋" -elif [ "$f3" != "" ]; then - ic_3="➌" -elif [ "$f4" != "" ]; then - ic_4="➍" -elif [ "$f5" != "" ]; then - ic_5="➎" -elif [ "$f6" != "" ]; then - ic_6="➏" -elif [ "$f7" != "" ]; then - ic_7="➐" -elif [ "$f8" != "" ]; then - ic_8="➑" -elif [ "$f9" != "" ]; then - ic_9="➒" -elif [ "$f10" != "" ]; then - ic_10="➓" -fi - -#ic_1=$(hyprctl workspaces) -#ic_2="t" -echo "(box :class \"works\" :orientation \"h\" :spacing 5 :space-evenly \"false\" (button :onclick \"hyprctl dispatch workspace 1\" :class \"$un$o1$f1\" \"$ic_1\") (button :onclick \"hyprctl dispatch workspace 2\" :class \"$un$o2$f2\" \"$ic_2\") (button :onclick \"hyprctl dispatch workspace 3\" :class \"$un$o3$f3\" \"$ic_3\") (button :onclick \"hyprctl dispatch workspace 4\" :class \"$un$o4$f4\" \"$ic_4\") (button :onclick \"hyprctl dispatch workspace 5\" :class \"$un$o5$f5\" \"$ic_5\") (button :onclick \"hyprctl dispatch workspace 6\" :class \"$un$o6$f6\" \"$ic_6\") (button :onclick \"hyprctl dispatch workspace 7\" :class \"$un$o7$f7\" \"$ic_7\") (button :onclick \"hyprctl dispatch workspace 8\" :class \"$un$o8$f8\" \"$ic_8\") (button :onclick \"hyprctl dispatch workspace 9\" :class \"$un$o9$f9\" \"$ic_9\") (button :onclick \"hyprctl dispatch workspace 10\" :class \"$un$o10$f10\" \"$ic_10\"))" -} -workspaces -tail -f /tmp/hypr/$HYPRLAND_INSTANCE_SIGNATURE/hyprland.log | grep -E --line-buffered "Changed to workspace|focus to surface" | while read -r; do -workspaces -done diff --git a/example/flake.nix b/example/flake.nix new file mode 100644 index 0000000..01ec944 --- /dev/null +++ b/example/flake.nix @@ -0,0 +1,51 @@ +{ + description = "some dots"; + + inputs = { + nixpkgs.url = "github:NixOs/nixpkgs/nixos-unstable"; + stable.url = "github:NixOs/nixpkgs/nixos-24.05"; + dashNix = { + url = "github:Xetibo/DashNix"; + inputs = { + nixpkgs.follows = "nixpkgs"; + stable.follows = "stable"; + }; + }; + }; + + outputs = inputs: { + nixosConfigurations = inputs.dashNix.dashNixLib.buildSystems {root = ./.;}; + }; + + nixConfig = { + builders-use-substitutes = true; + + extra-substituters = [ + "https://hyprland.cachix.org" + "https://anyrun.cachix.org" + "https://cache.garnix.io" + "https://oxipaste.cachix.org" + "https://oxinoti.cachix.org" + "https://oxishut.cachix.org" + "https://oxidash.cachix.org" + "https://oxicalc.cachix.org" + "https://hyprdock.cachix.org" + "https://reset.cachix.org" + "https://dashvim.cachix.org" + ]; + + extra-trusted-public-keys = [ + "hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc=" + "anyrun.cachix.org-1:pqBobmOjI7nKlsUMV25u9QHa9btJK65/C8vnO3p346s=" + "cache.garnix.io:CTFPyKSLcx5RMJKfLo5EEPUObbA78b0YQ2DTCJXqr9g=" + "oxipaste.cachix.org-1:n/oA3N3Z+LJP7eIWOwuoLd9QnPyZXqFjLgkahjsdDGc=" + "oxinoti.cachix.org-1:dvSoJl2Pjo5HMaNngdBbSaixK9BSf2N8gzjP2MdGvfc=" + "oxishut.cachix.org-1:axyAGF3XMh1IyMAW4UMbQCdMNovDH0KH6hqLLRJH8jU=" + "oxidash.cachix.org-1:5K2FNHp7AS8VF7LmQkJAUG/dm6UHCz4ngshBVbjFX30=" + "oxicalc.cachix.org-1:qF3krFc20tgSmtR/kt6Ku/T5QiG824z79qU5eRCSBTQ=" + "hyprdock.cachix.org-1:HaROK3fBvFWIMHZau3Vq1TLwUoJE8yRbGLk0lEGzv3Y=" + "reset.cachix.org-1:LfpnUUdG7QM/eOkN7NtA+3+4Ar/UBeYB+3WH+GjP9Xo=" + "dashvim.cachix.org-1:uLRdxp1WOWHnsZZtu3SwUWZRsvC7SXo0Gyk3tIefuL0=" + ]; + }; +} diff --git a/example/hosts/example/configuration.nix b/example/hosts/example/configuration.nix new file mode 100644 index 0000000..dbe8cd0 --- /dev/null +++ b/example/hosts/example/configuration.nix @@ -0,0 +1,68 @@ +{config, ...}: { + # TODO denote important changes + + # variables for system + conf = { + # TODO your username + username = "exampleName"; + # TODO only needed when you use intel -> amd is default + # cpu = "intel"; + # TODO your xkb layout + locale = "en_US.UTF-8"; + # TODO your timezone + timezone = "Europe/Zurich"; + }; + + # modules + mods = { + # default disk config has root home boot and swap partition, overwrite if you want something different + sops.enable = false; + nextcloud.enable = false; + wm.monitors = [ + # Example + # { + # name = "DP-1"; + # resolutionX = 3440; + # resolutionY = 1440; + # refreshrate = 180; + # positionX = 2560; + # positionY = 0; + # scale = 1; + # transform = "0"; + # vrr = false; + # } + ]; + gpu.nvidia.enable = true; + kdeConnect.enable = true; + # login manager: + # default is greetd + # greetd = { }; + # sddm = { }; + # gdm = { }; + drives = { + # default assumes ROOT, BOOT, HOME and SWAP labaled drives exist + # for an example without HOME see below + # defaultDrives.enable = false; + # extraDrives = [ + # { + # name = "boot"; + # drive = { + # device = "/dev/disk/by-label/BOOT"; + # fsType = "vfat"; + # options = [ "rw" "fmask=0022" "dmask=0022" "noatime" ]; + # }; + # } + # { + # name = ""; + # drive = { + # device = "/dev/disk/by-label/ROOT"; + # fsType = "ext4"; + # options = [ "noatime" "nodiratime" "discard" ]; + # }; + # } + # ]; + # You can also use disko to format your disks on installation. + # Please refer to the Documentation about the drives module for an example. + }; + }; +} diff --git a/example/hosts/example/hardware.nix b/example/hosts/example/hardware.nix new file mode 100644 index 0000000..855cafb --- /dev/null +++ b/example/hosts/example/hardware.nix @@ -0,0 +1,3 @@ +{ + # this file adds custom NixOS configuration +} diff --git a/example/hosts/example/home.nix b/example/hosts/example/home.nix new file mode 100644 index 0000000..e011ea7 --- /dev/null +++ b/example/hosts/example/home.nix @@ -0,0 +1,3 @@ +{ + # this file adds custom home-manager configuration +} diff --git a/example/secrets/secrets.md b/example/secrets/secrets.md new file mode 100644 index 0000000..86d99c6 --- /dev/null +++ b/example/secrets/secrets.md @@ -0,0 +1,3 @@ +# Secrets + +This file is for sops-nix and is also where your keys for various secrets will be stored. diff --git a/example/secrets/secrets.yaml b/example/secrets/secrets.yaml new file mode 100644 index 0000000..e69de29 diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..be1d5c2 --- /dev/null +++ b/flake.nix @@ -0,0 +1,113 @@ +{ + description = "DashNix"; + + inputs = { + unstable.url = "github:NixOs/nixpkgs/nixos-unstable"; + stable.url = "github:NixOs/nixpkgs/nixos-25.05"; + nixos-wsl.url = "github:nix-community/NixOS-WSL/main"; + nur.url = "github:nix-community/NUR"; + lanzaboote = { + url = "github:nix-community/lanzaboote/v0.4.2"; + inputs.nixpkgs.follows = "unstable"; + }; + statix.url = "github:oppiliappan/statix?ref=master"; + # Darkreader requires es20, hence a stable pin + pkgsDarkreader.url = "github:NixOs/nixpkgs/nixos-24.11"; + + home-manager = { + url = "github:nix-community/home-manager"; + inputs.nixpkgs.follows = "unstable"; + }; + cachy.url = "github:xddxdd/nix-cachyos-kernel?rev=bb7b8aa687464f24dcd452354d9621331d6b0737"; + + sops-nix.url = "github:Mic92/sops-nix"; + + hyprland.url = "github:hyprwm/Hyprland"; + + ironbar = { + url = "github:JakeStanger/ironbar"; + inputs.nixpkgs.follows = "unstable"; + }; + + zen-browser.url = "github:youwen5/zen-browser-flake"; + + stylix.url = "github:danth/stylix"; + base16.url = "github:SenchoPens/base16.nix"; + disko.url = "github:nix-community/disko/latest"; + + anyrun.url = "github:Kirottu/anyrun"; + oxicalc.url = "github:Xetibo/OxiCalc"; + oxishut.url = "github:Xetibo/OxiShut"; + oxinoti.url = "github:Xetibo/OxiNoti"; + oxidash.url = "github:Xetibo/OxiDash"; + oxipaste.url = "github:Xetibo/OxiPaste"; + oxirun.url = "github:Xetibo/OxiRun"; + dashvim.url = "github:Xetibo/DashVim"; + + hyprdock.url = "github:Xetibo/hyprdock"; + reset.url = "github:Xetibo/ReSet"; + reset-plugins.url = "github:Xetibo/ReSet-Plugins"; + + superfreq.url = "github:NotAShelf/superfreq"; + + compose.url = "github:garnix-io/nixos-compose"; + }; + + outputs = {self, ...} @ inputs: let + currentSystem = "x86_64-linux"; + permittedPackages = [ + "olm-3.2.16" + ]; + importPkgsFn = import ./lib/importPkgs.nix; + defaultConfigureFn = pkgs: + importPkgsFn { + inherit inputs currentSystem permittedPackages pkgs; + }; + stable = defaultConfigureFn inputs.stable; + unstable = defaultConfigureFn inputs.unstable; + pkgsDarkreader = defaultConfigureFn inputs.pkgsDarkreader; + in rec { + dashNixLib = import ./lib { + inherit + self + inputs + unstable + permittedPackages + ; + dashNixAdditionalProps = { + inherit pkgsDarkreader; + }; + system = currentSystem; + }; + docs = import ./docs { + inherit inputs; + pkgs = unstable; + system = currentSystem; + inherit (inputs.unstable) lib; + inherit (dashNixLib) buildSystems; + }; + lint = inputs.statix.packages.${currentSystem}.default; + format = unstable.alejandra; + dashNixInputs = inputs; + stablePkgs = stable; + unstablePkgs = unstable; + modules = ./modules; + iso = dashNixLib.buildIso.config.system.build.isoImage; + nixosConfigurations = dashNixLib.buildSystems {root = ./example/.;}; + + mkFlake = stablePkgs.writeShellApplication { + name = "Create example config"; + text = + /* + bash + */ + '' + mkdir -p ~/gits/nixos + mkdir -p ~/gits/backup_nixos + + mv ~/gits/nixos/* ~/gits/backup_nixos/ + cp -r ${./example}/* ~/gits/nixos/ + ''; + }; + }; +} diff --git a/fontconfig/fonts.conf b/fontconfig/fonts.conf deleted file mode 100644 index b22732e..0000000 --- a/fontconfig/fonts.conf +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - true - - - true - - - hintnone - - - none - - - true - - - lcdnone - - - 102 - - - diff --git a/gtk-2.0/gtkfilechooser.ini b/gtk-2.0/gtkfilechooser.ini deleted file mode 100644 index e12b439..0000000 --- a/gtk-2.0/gtkfilechooser.ini +++ /dev/null @@ -1,11 +0,0 @@ -[Filechooser Settings] -LocationMode=path-bar -ShowHidden=false -ShowSizeColumn=true -GeometryX=3887 -GeometryY=88 -GeometryWidth=1008 -GeometryHeight=692 -SortColumn=name -SortOrder=ascending -StartupMode=recent diff --git a/gtk-3.0/bookmarks b/gtk-3.0/bookmarks deleted file mode 100644 index cb74c5c..0000000 --- a/gtk-3.0/bookmarks +++ /dev/null @@ -1,10 +0,0 @@ -file:///home/dashie/Pictures -file:///home/dashie/Documents -file:///home/dashie/gits gits -file:///home/dashie/Videos Videos -file:///home/dashie/Music Music -file:///home/dashie/Downloads Downloads -file:///drive2 drive2 -file:///home/dashie/Documents -file:///home/dashie/Pictures -file:///home/dashie/gits/ost-3semester ost-3semester diff --git a/gtk-3.0/servers b/gtk-3.0/servers deleted file mode 100644 index ccaee6f..0000000 --- a/gtk-3.0/servers +++ /dev/null @@ -1,16 +0,0 @@ - - - - files1 on 192.168.1.4 - - - - - - - - - \ No newline at end of file diff --git a/gtk-3.0/settings.ini b/gtk-3.0/settings.ini deleted file mode 100644 index d41cec1..0000000 --- a/gtk-3.0/settings.ini +++ /dev/null @@ -1,5 +0,0 @@ -[Settings] -gtk-icon-theme-name = Adwaita -gtk-theme-name = Adwaita -gtk-font-name = DejaVu Sans 11 -gtk-application-prefer-dark-theme = true diff --git a/gtk-4.0/settings.ini b/gtk-4.0/settings.ini deleted file mode 100644 index d41cec1..0000000 --- a/gtk-4.0/settings.ini +++ /dev/null @@ -1,5 +0,0 @@ -[Settings] -gtk-icon-theme-name = Adwaita -gtk-theme-name = Adwaita -gtk-font-name = DejaVu Sans 11 -gtk-application-prefer-dark-theme = true diff --git a/home/common.nix b/home/common.nix new file mode 100644 index 0000000..fe2fa53 --- /dev/null +++ b/home/common.nix @@ -0,0 +1,42 @@ +{ + mkDashDefault, + config, + lib, + pkgs, + ... +}: let + username = config.conf.username; +in { + manual = { + html.enable = mkDashDefault false; + json.enable = mkDashDefault false; + manpages.enable = mkDashDefault false; + }; + + fonts.fontconfig.enable = mkDashDefault true; + + home = { + username = mkDashDefault username; + homeDirectory = mkDashDefault "/home/${username}"; + sessionPath = ["$HOME/.cargo/bin"]; + + enableNixpkgsReleaseCheck = mkDashDefault false; + sessionVariables = { + GOROOT = mkDashDefault "$HOME/.go"; + QT_QPA_PLATFORMTHEME = mkDashDefault "qt5ct"; + }; + + keyboard = mkDashDefault null; + }; + + programs.nix-index = { + enable = mkDashDefault true; + enableFishIntegration = mkDashDefault true; + }; + + nix = { + extraOptions = lib.mkIf (config ? sops.secrets && config.sops.secrets ? access.path) '' + !include ${config.sops.secrets.access.path} + ''; + }; +} diff --git a/home/default.nix b/home/default.nix new file mode 100644 index 0000000..afc0ab3 --- /dev/null +++ b/home/default.nix @@ -0,0 +1,66 @@ +{ + mkDashDefault, + dashNixAdditionalProps, + config, + homeMods, + inputs, + lib, + additionalHomeConfig, + mod, + pkgs, + root, + alternativePkgs, + system, + stable, + unstable, + ... +}: { + xdg = { + portal.config.common = { + default = mkDashDefault "hyprland;gtk"; + "org.freedesktop.impl.portal.FileChooser" = lib.mkIf (config.mods.media.filePickerPortal != "Default") "shana"; + }; + portal = { + enable = mkDashDefault true; + extraPortals = with pkgs; [ + xdg-desktop-portal-gtk # prob needed either way + (lib.mkIf (config.mods.media.filePickerPortal != "Default") xdg-desktop-portal-shana) + (lib.mkIf (config.mods.media.filePickerPortal == "Kde") kdePackages.xdg-desktop-portal-kde) + # Gnome uses their file manager, kinda cool tbh + (lib.mkIf (config.mods.media.filePickerPortal == "Gnome" && !config.mods.nautilus.enable) nautilus) + (lib.mkIf (config.mods.media.filePickerPortal == "Lxqt") xdg-desktop-portal-lxqt) + (lib.mkIf (config.mods.media.filePickerPortal == "Term") xdg-desktop-portal-termfilechooser) + ]; + }; + }; + home-manager = { + useGlobalPkgs = mkDashDefault true; + useUserPackages = mkDashDefault true; + extraSpecialArgs = { + inherit + inputs + root + alternativePkgs + system + stable + unstable + dashNixAdditionalProps + ; + mkDashDefault = import ../lib/override.nix {inherit lib;}; + }; + + users.${config.conf.username} = { + disabledModules = ["programs/anyrun.nix"]; + imports = + [ + ./common.nix + ./themes + ./sync.nix + ../lib/foxwrappers.nix + ] + ++ homeMods + ++ lib.optional (builtins.pathExists additionalHomeConfig) additionalHomeConfig + ++ lib.optional (builtins.pathExists mod) mod; + }; + }; +} diff --git a/home/sync.nix b/home/sync.nix new file mode 100644 index 0000000..38dceea --- /dev/null +++ b/home/sync.nix @@ -0,0 +1,55 @@ +# derived from NixOS wiki +{ + config, + pkgs, + lib, + ... +}: let + username = config.mods.nextcloud.username; + password = + if (config.sops.secrets ? nextcloud.path) + then config.sops.secrets.nextcloud.path + else ""; + url = config.mods.nextcloud.url; + synclist = config.mods.nextcloud.synclist; +in + lib.mkIf config.mods.nextcloud.enable { + systemd.user = { + services = builtins.listToAttrs ( + map (opts: { + name = "${opts.name}"; + value = { + Unit = { + Description = "Auto sync Nextcloud"; + After = "network-online.target"; + }; + Service = { + Type = "simple"; + ExecStart = "${pkgs.bash}/bin/bash -c '${pkgs.nextcloud-client}/bin/nextcloudcmd -h --path ${opts.remote} ${opts.local} https://${username}:$(bat ${password})@${url}'"; + TimeoutStopSec = "180"; + KillMode = "process"; + KillSignal = "SIGINT"; + }; + Install.WantedBy = ["multi-user.target"]; + }; + }) + synclist + ); + timers = builtins.listToAttrs ( + map (opts: { + name = "${opts.name}"; + value = { + Unit.Description = "Automatic sync files with Nextcloud when booted up after 1 minute then rerun every 60 minutes"; + Timer.OnBootSec = "1min"; + Timer.OnUnitActiveSec = "60min"; + Install.WantedBy = [ + "multi-user.target" + "timers.target" + ]; + }; + }) + synclist + ); + startServices = true; + }; + } diff --git a/home/themes/default.nix b/home/themes/default.nix new file mode 100644 index 0000000..9976455 --- /dev/null +++ b/home/themes/default.nix @@ -0,0 +1,8 @@ +{ + imports = [ + ./qt.nix + ./kdeglobals.nix + ./oxiced.nix + ./firefoxTheme.nix + ]; +} diff --git a/home/themes/firefoxTheme.nix b/home/themes/firefoxTheme.nix new file mode 100644 index 0000000..0de46f6 --- /dev/null +++ b/home/themes/firefoxTheme.nix @@ -0,0 +1,327 @@ +# css from https://github.com/catppuccin/zen-browser/tree/main/themes +{ + config, + inputs, + pkgs, + lib, + ... +}: let + # at time of using this here, stylix might not be evaluated yet + # hence ensure it is by using base16 mkSchemeAttrs + base16 = pkgs.callPackage inputs.base16.lib {}; + scheme = base16.mkSchemeAttrs config.stylix.base16Scheme; + userChrome = + /* + css + */ + '' + /* Catppuccin Mocha Blue userContent.css*/ + + @media (prefers-color-scheme: dark) { + + /* Common variables affecting all pages */ + @-moz-document url-prefix("about:") { + :root { + --in-content-page-color: #${scheme.base05} !important; + --color-accent-primary: #${scheme.base0D} !important; + --color-accent-primary-hover: rgb(163, 197, 251) !important; // TODO + --color-accent-primary-active: rgb(138, 153, 250) !important; // TODO + background-color: #${scheme.base00} !important; + --in-content-page-background: #${scheme.base00} !important; + } + + } + + /* Variables and styles specific to about:newtab and about:home */ + @-moz-document url("about:newtab"), url("about:home") { + + :root { + --newtab-background-color: #${scheme.base00} !important; + --newtab-background-color-secondary: #${scheme.base02} !important; + --newtab-element-hover-color: #${scheme.base02} !important; + --newtab-text-primary-color: #${scheme.base05} !important; + --newtab-wordmark-color: #${scheme.base05} !important; + --newtab-primary-action-background: #${scheme.base0D} !important; + } + + .icon { + color: #${scheme.base0D} !important; + } + + .search-wrapper .logo-and-wordmark .logo { + //background: url("zen-logo-mocha.svg"), url("https://raw.githubusercontent.com/IAmJafeth/zen-browser/main/themes/Mocha/Blue/zen-logo-mocha.svg") no-repeat center !important; // TODO + display: inline-block !important; + height: 82px !important; + width: 82px !important; + background-size: 82px !important; + } + + @media (max-width: 609px) { + .search-wrapper .logo-and-wordmark .logo { + background-size: 64px !important; + height: 64px !important; + width: 64px !important; + } + } + + .card-outer:is(:hover, :focus, .active):not(.placeholder) .card-title { + color: #${scheme.base0D} !important; + } + + .top-site-outer .search-topsite { + background-color: #${scheme.base0D} !important; + } + + .compact-cards .card-outer .card-context .card-context-icon.icon-download { + fill: #${scheme.base0B} !important; + } + } + + /* Variables and styles specific to about:preferences */ + @-moz-document url-prefix("about:preferences") { + :root { + --zen-colors-tertiary: #${scheme.base01} !important; + --in-content-text-color: #${scheme.base05} !important; + --link-color: #${scheme.base0D} !important; + --link-color-hover: rgb(163, 197, 251) !important; // TODO + --zen-colors-primary: #${scheme.base02} !important; + --in-content-box-background: #${scheme.base02} !important; + --zen-primary-color: #${scheme.base0D} !important; + } + + groupbox , moz-card{ + background: #${scheme.base00} !important; + } + + button, + groupbox menulist { + background: #${scheme.base02} !important; + color: #${scheme.base05} !important; + } + + .main-content { + background-color: #${scheme.base01} !important; + } + + .identity-color-blue { + --identity-tab-color: #8aadf4 !important; // TODO + --identity-icon-color: #8aadf4 !important; // TODO + } + + .identity-color-turquoise { + --identity-tab-color: #8bd5ca !important; // TODO + --identity-icon-color: #8bd5ca !important; // TODO + } + + .identity-color-green { + --identity-tab-color: #${scheme.base0B} !important; + --identity-icon-color: #${scheme.base0B} !important; + } + + .identity-color-yellow { + --identity-tab-color: #eed49f !important; // TODO + --identity-icon-color: #eed49f !important; // TODO + } + + .identity-color-orange { + --identity-tab-color: #f5a97f !important; // TODO + --identity-icon-color: #f5a97f !important; // TODO + } + + .identity-color-red { + --identity-tab-color: #ed8796 !important; // TODO + --identity-icon-color: #ed8796 !important; // TODO + } + + .identity-color-pink { + --identity-tab-color: #f5bde6 !important; // TODO + --identity-icon-color: #f5bde6 !important; // TODO + } + + .identity-color-purple { + --identity-tab-color: #c6a0f6 !important; // TODO + --identity-icon-color: #c6a0f6 !important; // TODO + } + } + + /* Variables and styles specific to about:addons */ + @-moz-document url-prefix("about:addons") { + :root { + --zen-dark-color-mix-base: #${scheme.base01} !important; + --background-color-box: #${scheme.base00} !important; + } + } + + /* Variables and styles specific to about:protections */ + @-moz-document url-prefix("about:protections") { + :root { + --zen-primary-color: #${scheme.base00} !important; + --social-color: #${scheme.base0E} !important; + --coockie-color: #${scheme.base08} !important; + --fingerprinter-color: #${scheme.base0A} !important; + --cryptominer-color: #${scheme.base07} !important; + --tracker-color: #${scheme.base0B} !important; + --in-content-primary-button-background-hover: rgb(81, 83, 05) !important; + --in-content-primary-button-text-color-hover: #${scheme.base05} !important; + --in-content-primary-button-background: #${scheme.base03} !important; + --in-content-primary-button-text-color: #${scheme.base05} !important; + } + + + .card { + background-color: #${scheme.base02} !important; + } + } + } + ''; + userContent = + /* + css + */ + '' + /* Catppuccin Mocha Blue userChrome.css*/ + @media (prefers-color-scheme: dark) { + + :root { + --zen-colors-primary: #${scheme.base02} !important; + --zen-primary-color: #${scheme.base0D} !important; + --zen-colors-secondary: #${scheme.base02} !important; + --zen-colors-tertiary: #${scheme.base01} !important; + --zen-colors-border: #${scheme.base0D} !important; + --toolbarbutton-icon-fill: #${scheme.base0D} !important; + --lwt-text-color: #${scheme.base05} !important; + --toolbar-field-color: #${scheme.base05} !important; + --tab-selected-textcolor: rgb(171, 197, 247) !important; // TODO + --toolbar-field-focus-color: #${scheme.base05} !important; + --toolbar-color: #${scheme.base05} !important; + --newtab-text-primary-color: #${scheme.base05} !important; + --arrowpanel-color: #${scheme.base05} !important; + --arrowpanel-background: #${scheme.base00} !important; + --sidebar-text-color: #${scheme.base05} !important; + --lwt-sidebar-text-color: #${scheme.base05} !important; + --lwt-sidebar-background-color: #${scheme.base01} !important; //TODO 11111b !important; + --toolbar-bgcolor: #${scheme.base02} !important; + --newtab-background-color: #${scheme.base00} !important; + --zen-themed-toolbar-bg: #${scheme.base01} !important; + --zen-main-browser-background: #${scheme.base01} !important; + } + + #permissions-granted-icon{ + color: #${scheme.base01} !important; + } + + .sidebar-placesTree { + background-color: #${scheme.base00} !important; + } + + #zen-workspaces-button { + background-color: #${scheme.base00} !important; + } + + #TabsToolbar { + background-color: #${scheme.base01} !important; + } + + #urlbar-background { + background-color: #${scheme.base00} !important; + } + + .content-shortcuts { + background-color: #${scheme.base00} !important; + border-color: #${scheme.base0D} !important; + } + + .urlbarView-url { + color: #${scheme.base0D} !important; + } + + #zenEditBookmarkPanelFaviconContainer { + background: #${scheme.base01} !important; + } + + toolbar .toolbarbutton-1 { + &:not([disabled]) { + &:is([open], [checked]) > :is(.toolbarbutton-icon, .toolbarbutton-text, .toolbarbutton-badge-stack){ + fill: #${scheme.base01}; + } + } + } + + .identity-color-blue { + --identity-tab-color: #${scheme.base0D} !important; + --identity-icon-color: #${scheme.base0D} !important; + } + + .identity-color-turquoise { + --identity-tab-color: #${scheme.base0C} !important; + --identity-icon-color: #${scheme.base0C} !important; + } + + .identity-color-green { + --identity-tab-color: #${scheme.base0B} !important; + --identity-icon-color: #${scheme.base0B} !important; + } + + .identity-color-yellow { + --identity-tab-color: #${scheme.base0A} !important; + --identity-icon-color: #${scheme.base0A} !important; + } + + .identity-color-orange { + --identity-tab-color: #${scheme.base09} !important; + --identity-icon-color: #${scheme.base09} !important; + } + + .identity-color-red { + --identity-tab-color: #${scheme.base08} !important; + --identity-icon-color: #${scheme.base08} !important; + } + + .identity-color-pink { + --identity-tab-color: #${scheme.base0F} !important; + --identity-icon-color: #${scheme.base0F} !important; // TODO f5c2e7 + } + + .identity-color-purple { + --identity-tab-color: #${scheme.base0E} !important; + --identity-icon-color: #${scheme.base0E} !important; + } + } + ''; + browsername = config.mods.homePackages.browser; + profiles = + if config.mods.homePackages.browser == "firefox" + then config.mods.browser.firefox.profiles + else if config.mods.homePackages.browser == "zen" + then config.mods.browser.zen.profiles + else if config.mods.homePackages.browser == "librewolf" + then [ + { + name = "default"; + value = {}; + } + ] + else []; + profileNamesFn = + builtins.catAttrs "name"; + chromesFn = builtins.map ( + name: + if (builtins.isString browsername) + then { + ".${browsername}/${name}/chrome/userContent.css" = { + text = userChrome; + }; + + ".${browsername}/${name}/chrome/userChrome.css" = { + text = userContent; + }; + } + else {} + ); + moduleFn = lib.lists.foldr (attr1: attr2: attr1 // attr2) {}; + mkFirefoxTheme = profiles: + profiles + |> profileNamesFn + |> chromesFn + |> moduleFn; +in {home.file = mkFirefoxTheme profiles;} diff --git a/home/themes/kdeglobals.nix b/home/themes/kdeglobals.nix new file mode 100644 index 0000000..8fa5003 --- /dev/null +++ b/home/themes/kdeglobals.nix @@ -0,0 +1,252 @@ +# This is ABSOLUTE GARGABE, KDE srsly, remove this! +# props to catppuccin mocha for sparing me from doing this manually: https://github.com/catppuccin/kde/blob/main/Resources/Base.colors +{ + pkgs, + config, + lib, + inputs, + ... +}: let + base16 = pkgs.callPackage inputs.base16.lib {}; + + baseScheme = base16.mkSchemeAttrs config.stylix.base16Scheme; + power = number: powerIndex: + if powerIndex == 1 + then number + else if powerIndex == 0 + then 1 + else number * power number (powerIndex - 1); + + lookupTable = powerIndex: { + "0" = 0 * (power 16 powerIndex); + "1" = 1 * (power 16 powerIndex); + "2" = 2 * (power 16 powerIndex); + "3" = 3 * (power 16 powerIndex); + "4" = 4 * (power 16 powerIndex); + "5" = 5 * (power 16 powerIndex); + "6" = 6 * (power 16 powerIndex); + "7" = 7 * (power 16 powerIndex); + "8" = 8 * (power 16 powerIndex); + "9" = 9 * (power 16 powerIndex); + "a" = 10 * (power 16 powerIndex); + "b" = 11 * (power 16 powerIndex); + "c" = 12 * (power 16 powerIndex); + "d" = 13 * (power 16 powerIndex); + "e" = 14 * (power 16 powerIndex); + "f" = 15 * (power 16 powerIndex); + }; + + convertHex = hexChars: + recombineColors [ + (convertColor (lib.lists.take 2 hexChars)) + (convertColor (lib.lists.take 2 (lib.lists.drop 2 hexChars))) + (convertColor (lib.lists.take 2 (lib.lists.drop 4 hexChars))) + ]; + + convertColor = color: (lookupTable 1).${(lib.lists.head color)} + (lookupTable 0).${(lib.lists.last color)}; + recombineColors = colors: lib.lists.foldr (a: b: (toString a) + "," + (toString b)) "end" colors; + + scheme = { + base00 = lib.strings.removeSuffix ",end" ( + convertHex (lib.strings.stringToCharacters baseScheme.base00) + ); + base01 = lib.strings.removeSuffix ",end" ( + convertHex (lib.strings.stringToCharacters baseScheme.base01) + ); + base02 = lib.strings.removeSuffix ",end" ( + convertHex (lib.strings.stringToCharacters baseScheme.base02) + ); + base03 = lib.strings.removeSuffix ",end" ( + convertHex (lib.strings.stringToCharacters baseScheme.base03) + ); + base04 = lib.strings.removeSuffix ",end" ( + convertHex (lib.strings.stringToCharacters baseScheme.base04) + ); + base05 = lib.strings.removeSuffix ",end" ( + convertHex (lib.strings.stringToCharacters baseScheme.base05) + ); + base06 = lib.strings.removeSuffix ",end" ( + convertHex (lib.strings.stringToCharacters baseScheme.base06) + ); + base07 = lib.strings.removeSuffix ",end" ( + convertHex (lib.strings.stringToCharacters baseScheme.base07) + ); + base08 = lib.strings.removeSuffix ",end" ( + convertHex (lib.strings.stringToCharacters baseScheme.base08) + ); + base09 = lib.strings.removeSuffix ",end" ( + convertHex (lib.strings.stringToCharacters baseScheme.base09) + ); + base0A = lib.strings.removeSuffix ",end" ( + convertHex (lib.strings.stringToCharacters baseScheme.base0A) + ); + base0B = lib.strings.removeSuffix ",end" ( + convertHex (lib.strings.stringToCharacters baseScheme.base0B) + ); + base0C = lib.strings.removeSuffix ",end" ( + convertHex (lib.strings.stringToCharacters baseScheme.base0C) + ); + base0D = lib.strings.removeSuffix ",end" ( + convertHex (lib.strings.stringToCharacters baseScheme.base0D) + ); + base0E = lib.strings.removeSuffix ",end" ( + convertHex (lib.strings.stringToCharacters baseScheme.base0E) + ); + base0F = lib.strings.removeSuffix ",end" ( + convertHex (lib.strings.stringToCharacters baseScheme.base0F) + ); + }; +in { + # temp + # crust -> surface1 + # subtext0 -> surface2 + # accentColor -> lavender + xdg.configFile."kdeglobals" = { + text = '' + [ColorEffects:Disabled] + Color=${scheme.base01} + ColorAmount=0.30000000000000004 + ColorEffect=2 + ContrastAmount=0.1 + ContrastEffect=0 + IntensityAmount=-1 + IntensityEffect=0 + + [ColorEffects:Inactive] + ChangeSelectionColor=true + Color=${scheme.base01} + ColorAmount=0.5 + ColorEffect=3 + ContrastAmount=0 + ContrastEffect=0 + Enable=true + IntensityAmount=0 + IntensityEffect=0 + + [Colors:Button] + BackgroundAlternate=${scheme.base07} + BackgroundNormal=${scheme.base02} + DecorationFocus=${scheme.base07} + DecorationHover=${scheme.base02} + ForegroundActive=${scheme.base09} + ForegroundInactive=${scheme.base04} + ForegroundLink=${scheme.base07} + ForegroundNegative=${scheme.base08} + ForegroundNeutral=${scheme.base0A} + ForegroundNormal=${scheme.base05} + ForegroundPositive=${scheme.base0B} + ForegroundVisited=${scheme.base0E} + + + [Colors:Complementary] + BackgroundAlternate=${scheme.base03} + BackgroundNormal=${scheme.base00} + DecorationFocus=${scheme.base07} + DecorationHover=${scheme.base02} + ForegroundActive=${scheme.base09} + ForegroundInactive=${scheme.base04} + ForegroundLink=${scheme.base07} + ForegroundNegative=${scheme.base08} + ForegroundNeutral=${scheme.base0A} + ForegroundNormal=${scheme.base05} + ForegroundPositive=${scheme.base0B} + ForegroundVisited=${scheme.base0E} + + + [Colors:Header] + BackgroundAlternate=${scheme.base03} + BackgroundNormal=${scheme.base00} + DecorationFocus=${scheme.base07} + DecorationHover=${scheme.base02} + ForegroundActive=${scheme.base09} + ForegroundInactive=${scheme.base04} + ForegroundLink=${scheme.base07} + ForegroundNegative=${scheme.base08} + ForegroundNeutral=${scheme.base0A} + ForegroundNormal=${scheme.base05} + ForegroundPositive=${scheme.base0B} + ForegroundVisited=${scheme.base0E} + + + [Colors:Selection] + BackgroundAlternate=${scheme.base07} + BackgroundNormal=${scheme.base07} + DecorationFocus=${scheme.base07} + DecorationHover=${scheme.base02} + ForegroundLink=${scheme.base07} + ForegroundInactive=${scheme.base00} + ForegroundActive=${scheme.base09} + ForegroundLink=${scheme.base07} + ForegroundNegative=${scheme.base08} + ForegroundNeutral=${scheme.base0A} + ForegroundNormal=${scheme.base03} + ForegroundPositive=${scheme.base0B} + ForegroundVisited=${scheme.base0E} + + + [Colors:Tooltip] + BackgroundAlternate=27,25,35 + BackgroundNormal=${scheme.base01} + DecorationFocus=${scheme.base07} + DecorationHover=${scheme.base02} + ForegroundActive=${scheme.base09} + ForegroundInactive=${scheme.base04} + ForegroundLink=${scheme.base07} + ForegroundNegative=${scheme.base08} + ForegroundNeutral=${scheme.base0A} + ForegroundNormal=${scheme.base05} + ForegroundPositive=${scheme.base0B} + ForegroundVisited=${scheme.base0E} + + + [Colors:View] + BackgroundAlternate=${scheme.base00} + BackgroundNormal=${scheme.base01} + DecorationFocus=${scheme.base07} + DecorationHover=${scheme.base02} + ForegroundActive=${scheme.base09} + ForegroundInactive=${scheme.base04} + ForegroundLink=${scheme.base07} + ForegroundNegative=${scheme.base08} + ForegroundNeutral=${scheme.base0A} + ForegroundNormal=${scheme.base05} + ForegroundPositive=${scheme.base0B} + ForegroundVisited=${scheme.base0E} + + + [Colors:Window] + BackgroundAlternate=${scheme.base03} + BackgroundNormal=${scheme.base00} + DecorationFocus=${scheme.base07} + DecorationHover=${scheme.base02} + ForegroundActive=${scheme.base09} + ForegroundInactive=${scheme.base04} + ForegroundLink=${scheme.base07} + ForegroundNegative=${scheme.base08} + ForegroundNeutral=${scheme.base0A} + ForegroundNormal=${scheme.base05} + ForegroundPositive=${scheme.base0B} + ForegroundVisited=${scheme.base0E} + + + [General] + ColorScheme=CustomBase16Nix + Name=CustomBase16Nix + accentActiveTitlebar=false + shadeSortColumn=true + + + [KDE] + contrast=4 + + + [WM] + activeBackground=${scheme.base01} + activeBlend=${scheme.base05} + activeForeground=${scheme.base05} + inactiveBackground=${scheme.base03} + inactiveBlend=${scheme.base04} + inactiveForeground=${scheme.base04} + ''; + }; +} diff --git a/home/themes/oxiced.nix b/home/themes/oxiced.nix new file mode 100644 index 0000000..8a9e7dc --- /dev/null +++ b/home/themes/oxiced.nix @@ -0,0 +1,86 @@ +{ + config, + inputs, + pkgs, + ... +}: let + # at time of using this here, stylix might not be evaluated yet + # hence ensure it is by using base16 mkSchemeAttrs + base16 = pkgs.callPackage inputs.base16.lib {}; + scheme = base16.mkSchemeAttrs config.stylix.base16Scheme; + valueOrDefault = value: fallback: + if (scheme ? oxiced && scheme.oxiced ? ${value}) + then scheme.oxiced.value + else fallback; +in { + xdg.configFile."oxiced/theme.toml" = { + source = (pkgs.formats.toml {}).generate "oxiced" { + base = valueOrDefault "base" scheme.base00; + mantle = valueOrDefault "mantle" scheme.base01; + primary_bg = valueOrDefault "primary_bg" scheme.base02; + secondary_bg = valueOrDefault "secondary_bg" scheme.base03; + tertiary_bg = valueOrDefault "tertiary_bg" scheme.base04; + text = valueOrDefault "text" scheme.base05; + + primary = valueOrDefault "primary" scheme.base0D; + primary_contrast = valueOrDefault "primary_contrast" "FFFFFF"; + secondary = valueOrDefault "primary" scheme.base07; + secondary_contrast = valueOrDefault "secondary_contrast" "FFFFFF"; + + good = valueOrDefault "good" scheme.base0B; + good_contrast = valueOrDefault "good_contrast" "000000"; + bad = valueOrDefault "bad" scheme.base08; + bad_contrast = valueOrDefault "bad_contrast" "FFFFFF"; + warning = valueOrDefault "warning" scheme.base0A; + warning_contrast = valueOrDefault "warning_contrast" "000000"; + info = valueOrDefault "info" scheme.base0C; + info_contrast = valueOrDefault "info_contrast" "FFFFFF"; + + rose = valueOrDefault "rose" scheme.base06; + lavender = valueOrDefault "lavender" scheme.base07; + blue = valueOrDefault "blue" scheme.base0D; + mauve = valueOrDefault "mauve" scheme.base0E; + flamingo = valueOrDefault "flamingo" scheme.base0F; + + border_color_weak = valueOrDefault "border_color_weak" scheme.base05; + border_color_strong = valueOrDefault "border_color_strong" scheme.base0D; + + tint_amount = valueOrDefault "tint_amound" 0.10; + shade_amount = valueOrDefault "shade_amount" 0.05; + + border_radius = valueOrDefault "border_radius" 10; + + padding_xs = valueOrDefault "padding_xs" 4.0; + padding_sm = valueOrDefault "padding_sm" 8.0; + padding_md = valueOrDefault "padding_md" 12.0; + padding_lg = valueOrDefault "padding_lg" 16.0; + padding_xl = valueOrDefault "padding_xl" 24.0; + padding_xxl = valueOrDefault "padding_xxl" 32.0; + + font_sm = valueOrDefault "font_sm" 10.0; + font_md = valueOrDefault "font_md" 14.0; + font_lg = valueOrDefault "font_lg" 18.0; + font_xl = valueOrDefault "font_xl" 24.0; + font_xxl = valueOrDefault "font_xxl" 32.0; + + # legacy compatibility + name = scheme.scheme; + inherit (scheme) base00; + inherit (scheme) base01; + inherit (scheme) base02; + inherit (scheme) base03; + inherit (scheme) base04; + inherit (scheme) base05; + inherit (scheme) base06; + inherit (scheme) base07; + inherit (scheme) base08; + inherit (scheme) base09; + base0a = scheme.base0A; + base0b = scheme.base0B; + base0c = scheme.base0C; + base0d = scheme.base0D; + base0e = scheme.base0E; + base0f = scheme.base0F; + }; + }; +} diff --git a/home/themes/qt.nix b/home/themes/qt.nix new file mode 100644 index 0000000..21dc324 --- /dev/null +++ b/home/themes/qt.nix @@ -0,0 +1,124 @@ +{ + config, + inputs, + pkgs, + lib, + ... +}: let + username = config.conf.username; + # at time of using this here, stylix might not be evaluated yet + # hence ensure it is by using base16 mkSchemeAttrs + base16 = pkgs.callPackage inputs.base16.lib {}; + scheme = base16.mkSchemeAttrs config.stylix.base16Scheme; + # active_colors=#ffc0caf5, #${scheme.base00}, #ff373949, #ff2b2c3b, #ff1a1b26, #ff2b2c3b, #ffc0caf5, #ffc0caf5, #ffc0caf5, #ff1a1b26, #ff1a1b26, #19000000, #ff2b2c3b, #ffc0caf5, #ff3584e4, #ff1b6acb, #ff1a1b26, #ff242530, #ff1a1b26, #ffc0caf5, #ffc0caf5 + # disabled_colors=#ff6d728d, #${scheme.base00}, #ff373949, #ff2b2c3b, #ff1a1b26, #ff2b2c3b, #ff6d728d, #ff6d728d, #ff6d728d, #ff1a1b26, #ff1a1b26, #19000000, #ff2b2c3b, #ff6d728d, #ff3584e4, #ff1b6acb, #ff1a1b26, #ff242530, #ff1a1b26, #ff6d728d, #ff6d728d + # inactive_colors=#ff6d728d, #${scheme.base00}, #ff373949, #ff2b2c3b, #ff1a1b26, #ff2b2c3b, #ff6d728d, #ff6d728d, #ff6d728d, #ff1a1b26, #ff1a1b26, #19000000, #ff2b2c3b, #ff6d728d, #ff3584e4, #ff1b6acb, #ff1a1b26, #ff242530, #ff1a1b26, #ff6d728d, #ff6d728d + color = '' + + + [ColorScheme] + active_colors=#ff${scheme.base05}, #ff${scheme.base01}, #ff${scheme.base01}, #ff${scheme.base01}, #ff${scheme.base00}, #ff${scheme.base00}, #ff${scheme.base05}, #ff${scheme.base04}, #ff${scheme.base05}, #ff${scheme.base00}, #ff${scheme.base00}, #00${scheme.base01}, #ff${scheme.base02}, #ff${scheme.base04}, #ff${scheme.base08}, #ff${scheme.base04}, #ff${scheme.base01}, #ff${scheme.base00}, #ff${scheme.base01}, #ff${scheme.base05}, #ff${scheme.base04} + disabled_colors=#ff${scheme.base05}, #ff${scheme.base01}, #ff${scheme.base01}, #ff${scheme.base01}, #ff${scheme.base00}, #ff${scheme.base00}, #ff${scheme.base05}, #ff${scheme.base04}, #ff${scheme.base05}, #ff${scheme.base00}, #ff${scheme.base00}, #00${scheme.base01}, #ff${scheme.base02}, #ff${scheme.base04}, #ff${scheme.base08}, #ff${scheme.base04}, #ff${scheme.base01}, #ff${scheme.base00}, #ff${scheme.base01}, #ff${scheme.base05}, #ff${scheme.base04} + inactive_colors=#ff${scheme.base05}, #ff${scheme.base01}, #ff${scheme.base01}, #ff${scheme.base01}, #ff${scheme.base00}, #ff${scheme.base00}, #ff${scheme.base05}, #ff${scheme.base04}, #ff${scheme.base05}, #ff${scheme.base00}, #ff${scheme.base00}, #00${scheme.base01}, #ff${scheme.base02}, #ff${scheme.base04}, #ff${scheme.base08}, #ff${scheme.base04}, #ff${scheme.base01}, #ff${scheme.base00}, #ff${scheme.base01}, #ff${scheme.base05}, #ff${scheme.base04} + ''; + qss = '' + + QTabBar::tab:selected { + color: palette(highlight); + } + QMenuBar, QMenu, QToolBar, QStatusBar, QFrame, QScrollBar { + border: none; + } + ''; +in { + stylix.targets.qt = { + enable = false; + }; + qt = { + enable = true; + style.package = pkgs.kdePackages.breeze; + style.name = lib.mkForce "breeze-dark"; + }; + + xdg.configFile = { + "qt5ct/colors/tokyonight.conf" = { + text = "${color}"; + }; + "qt6ct/colors/tokyonight.conf" = { + text = "${color}"; + }; + "qt5ct/qss/tab.qss" = { + text = "${qss}"; + }; + "qt5ct/qt5ct.conf" = { + text = '' + + [Appearance] + color_scheme_path=/home/${username}/.config/qt5ct/colors/tokyonight.conf + custom_palette=true + icon_theme=MoreWaita + standard_dialogs=xdgdesktopportal + style=Breeze + + [Fonts] + fixed="Noto Sans,12,-1,5,50,0,0,0,0,0" + general="Noto Sans,12,-1,5,50,0,0,0,0,0" + + [Interface] + activate_item_on_single_click=2 + buttonbox_layout=3 + cursor_flash_time=1000 + dialog_buttons_have_icons=0 + double_click_interval=400 + gui_effects=General, AnimateMenu, AnimateCombo, AnimateTooltip, AnimateToolBox + keyboard_scheme=4 + menus_have_icons=true + show_shortcuts_in_context_menus=true + stylesheets=/home/${username}/.config/qt5ct/qss/tab.qss, /nix/store/5713p1pv913a6fsn8j7z6ndikcwikbcd-qt5ct-1.8/share/qt5ct/qss/fusion-fixes.qss, /nix/store/5713p1pv913a6fsn8j7z6ndikcwikbcd-qt5ct-1.8/share/qt5ct/qss/scrollbar-simple.qss, /nix/store/5713p1pv913a6fsn8j7z6ndikcwikbcd-qt5ct-1.8/share/qt5ct/qss/sliders-simple.qss, /nix/store/5713p1pv913a6fsn8j7z6ndikcwikbcd-qt5ct-1.8/share/qt5ct/qss/tooltip-simple.qss, /nix/store/5713p1pv913a6fsn8j7z6ndikcwikbcd-qt5ct-1.8/share/qt5ct/qss/traynotification-simple.qss + toolbutton_style=4 + underline_shortcut=0 + wheel_scroll_lines=3 + + [SettingsWindow] + geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\n\0\0\0\0\0\0\0\rK\0\0\x5q\0\0\n\0\0\0\0\0\0\0\r[\0\0\x5\x7f\0\0\0\0\x2\0\0\0\rp\0\0\n\0\0\0\0\0\0\0\rK\0\0\x5q) + + [Troubleshooting] + force_raster_widgets=1 + ignored_applications=@Invalid() + ''; + }; + "qt6ct/qt6ct.conf" = { + text = '' + + [Appearance] + color_scheme_path=/home/${username}/.config/qt6ct/colors/tokyonight.conf + custom_palette=true + standard_dialogs=xdgdesktopportal + style=Breeze + + [Fonts] + fixed="DejaVu LGC Sans,12,-1,5,400,0,0,0,0,0,0,0,0,0,0,1" + general="DejaVu LGC Sans,12,-1,5,400,0,0,0,0,0,0,0,0,0,0,1" + + [Interface] + activate_item_on_single_click=2 + buttonbox_layout=3 + cursor_flash_time=1000 + dialog_buttons_have_icons=0 + double_click_interval=400 + gui_effects=General, AnimateMenu, AnimateCombo, AnimateTooltip, AnimateToolBox + keyboard_scheme=4 + menus_have_icons=true + show_shortcuts_in_context_menus=true + stylesheets=@Invalid() + toolbutton_style=4 + underline_shortcut=1 + wheel_scroll_lines=3 + + [Troubleshooting] + force_raster_widgets=1 + ignored_applications=@Invalid() + ''; + }; + }; +} diff --git a/hypr_desktop/hyprland.conf b/hypr_desktop/hyprland.conf deleted file mode 100644 index 10d7e9e..0000000 --- a/hypr_desktop/hyprland.conf +++ /dev/null @@ -1,183 +0,0 @@ - -# -#fix the fucking portal -exec-once=systemctl --user import-environment -exec-once=dbus-update-activation-environment --all -# -# - - -monitor=,highrr,auto,1 - -input { - kb_file=/home/dashie/.config/keymap.xkb #us with dead_diaeresis on shift + ' to get ä ö ü - kb_layout= - kb_variant= - kb_model= - kb_options= - kb_rules= - repeat_delay=200 - natural_scroll=false - follow_mouse=1 - force_no_accel=true - - touchpad { - natural_scroll=yes - tap-to-click=yes - } -} - -general { - sensitivity=1.0 # for mouse cursor - - gaps_in=5 - gaps_out=10 - border_size=3 - col.active_border=0xFFFF0000 0xFF00FF00 0xFF0000FF 45deg - col.inactive_border=0x66333333 - - apply_sens_to_raw=0 # whether to apply the sensitivity to raw input (e.g. used by games where you aim using your mouse) - -} - -decoration { - rounding=10 - blur=1 - blur_size=3 # minimum 1 - blur_passes=1 # minimum 1 - blur_new_optimizations=true -} - -animations { - enabled=1 - animation=windowsMove,1,1,default - animation=windows,1,7,default - animation=border,1,10,default - animation=fade,1,10,default - animation=workspaces,1,6,default -} - -dwindle { - preserve_split=true - pseudotile=0 # enable pseudotiling on dwindle -} - -gestures { - workspace_swipe=yes -} - -misc { - no_vfr=false - # animate_manual_resizes=true - # enable_swallow=true - # swallow_regex=^(.*)(Alacritty)(.*)$ - - } - -#reserve place for bar -#monitor=eDP-1,addreserved,45,0,0,0 - -# example window rules -# for windows named/classed as abc and xyz -windowrule=tile,^(.*)(Spotify)(.*)$ -windowrule=float,^(.*)(Steam)(.*)$ -windowrule=float,^(.*)(Calculator)(.*)$ -windowrule=float,^(.*)(winecfg.exe)(.*)$ -windowrule=float,^(.*)(speed.exe)(.*)$ -windowrule=center,^(.*)(gnome)(.*)$ -# windowrule=windowdance,^(.*)(ota)(.*)$ -windowrule=forceinput,^(.*)(ota)(.*)$ -windowrule=size 1200 800,^(org.gnome.NautilusPreviewer)$ -windowrule=center,^(.*)(swappy)(.*)$ -windowrule=opacity 80,^(.*)(dunst)(.*)$ -#windowrule=tile,xyz -#windowrule=float,abc -#windowrule=pseudo,abc -#windowrule=monitor 0,xyz - -# example binds -bind=SUPER,S,exec,grim -g "$(slurp)" - | wl-copy -bind=SUPERSHIFTALT,S,exec, grim -g "$(slurp)" $HOME/gits/ost-3semester/Screenshots/$(date +'%Y_%m_%d_%I_%M_%S.png') && (date +'%Y_%m_%d_%I_%M_%S.png') | wl-copy -bind=SUPERSHIFT,S,exec,grim -g "$(slurp)" - | swappy -f - -bind=SUPER,F,exec,firefox -bind=SUPER,T,exec,kitty -bind=SUPER,Q,killactive, -bind=SUPER,M,exit, -bind=SUPER,E,exec,nautilus --new-window -bind=SUPER,V,togglefloating, -bind=SUPER,B,fullscreen, -bind=SUPER,R,exec,wofi -I -m -t alacritty -s ~/.config/wofi/style.css --show drun -bind=SUPERSHIFT,R,exec,wofi -I -m -t alacritty -s ~/.config/wofi/style.css --show run -bind=SUPER,C,togglesplit -bind=SUPER,G,exec,calculator --gui -bind=SUPERSHIFT,L,exec, playerctl -a pause & swaylock -c 000000 & systemctl suspend -bind=,XF86AudioMute,exec,pactl set-sink-mute @DEFAULT_SINK@ toggle -bind=,XF86AudioLowerVolume,exec, $HOME/.config/eww/scripts/change-volume sink -5% -bind=,XF86AudioRaiseVolume,exec, $HOME/.config/eww/scripts/change-volume sink +5% -bind=,XF86AudioPlay,exec, playerctl play-pause -bind=,XF86AudioNext,exec, playerctl next -bind=,XF86AudioPrev,exec, playerctl previous -bind=,XF86MonBrightnessDown,exec, $HOME/.config/eww/scripts/change-brightness brightness 10%- -bind=,XF86MonBrightnessUp,exec, $HOME/.config/eww/scripts/change-brightness brightness +10% -bind=SUPER,D,exec,$HOME/.config/eww/scripts/cockpit_toggle - -binde=SUPER,bracketleft,movefocus,l -binde=SUPER,bracketright,movefocus,r -binde=SUPER,semicolon,movefocus,u -binde=SUPER,apostrophe,movefocus,d - -bind=SUPER,left,movewindow,l -bind=SUPER,right,movewindow,r -bind=SUPER,up,movewindow,u -bind=SUPER,down,movewindow,d - -bind=SUPER,1,workspace,1 -bind=SUPER,2,workspace,2 -bind=SUPER,3,workspace,3 -bind=SUPER,4,workspace,4 -bind=SUPER,5,workspace,5 -bind=SUPER,6,workspace,6 -bind=SUPER,7,workspace,7 -bind=SUPER,8,workspace,8 -bind=SUPER,9,workspace,9 -bind=SUPER,0,workspace,10 - -bind=SUPERSHIFT,1,movetoworkspace,1 -bind=SUPERSHIFT,2,movetoworkspace,2 -bind=SUPERSHIFT,3,movetoworkspace,3 -bind=SUPERSHIFT,4,movetoworkspace,4 -bind=SUPERSHIFT,5,movetoworkspace,5 -bind=SUPERSHIFT,6,movetoworkspace,6 -bind=SUPERSHIFT,7,movetoworkspace,7 -bind=SUPERSHIFT,8,movetoworkspace,8 -bind=SUPERSHIFT,9,movetoworkspace,9 -bind=SUPERSHIFT,0,movetoworkspace,10 - -bindm=SUPER,mouse:272,movewindow -bindm=SUPER,mouse:273,resizewindow - -binde=SUPER,O,resizeactive,-20 0 -binde=SUPER,P,resizeactive,20 0 -binde=SUPER,K,resizeactive,0 -20 -binde=SUPER,L,resizeactive,0 20 - -#binds for debug testing - -bind=SUPERALT,H,pass,^(wlroots)$ -bind=SUPERALT,J,pass,^(wlroots)$ - -bind=SUPERALT,left,pass,^(wlroots)$ -bind=SUPERALT,right,pass,^(wlroots)$ -bind=SUPERALT,up,pass,^(wlroots)$ -bind=SUPERALT,down,pass,^(wlroots)$ - - -#autostart programs -#exec=~/Documents/scripts/hyprstart.sh -#exec=hyprstart.sh -exec-once=hyprpaper -exec-once=eww daemon -exec-once=eww open bar -exec-once=element-desktop -exec-once=firefox -exec-once=streamdeck -n diff --git a/hypr_desktop/hyprlandd.conf b/hypr_desktop/hyprlandd.conf deleted file mode 100644 index e7c3b30..0000000 --- a/hypr_desktop/hyprlandd.conf +++ /dev/null @@ -1,66 +0,0 @@ - -# -#fix the fucking portal -# - -monitor=,720x920@60,auto,1 - -input { - repeat_delay=200 - natural_scroll=false - follow_mouse=1 - force_no_accel=true - - touchpad { - natural_scroll=yes - tap-to-click=yes - } -} - -general { - sensitivity=1.0 # for mouse cursor - - gaps_in=5 - gaps_out=10 - border_size=3 - col.active_border=0x66ee1111 - col.inactive_border=0x66333333 - - apply_sens_to_raw=0 # whether to apply the sensitivity to raw input (e.g. used by games where you aim using your mouse) - -} - -decoration { - rounding=10 - blur=1 - blur_size=3 # minimum 1 - blur_passes=1 # minimum 1 - blur_new_optimizations=true -} - -animations { - enabled=0 -} - -dwindle { - preserve_split=true - pseudotile=0 # enable pseudotiling on dwindle -} - -gestures { -} - -misc { - - } - -bind=SUPERALT,H,exec,alacritty - -bind=SUPERALT,left,movewindow,l -bind=SUPERALT,right,movewindow,r -bind=SUPERALT,up,movewindow,u -bind=SUPERALT,down,movewindow,d -bind=SUPERALT,J,fullscreen - -windowrule = nofullscreenrequest,^(.*)$ - diff --git a/hypr_desktop/hyprpaper.conf b/hypr_desktop/hyprpaper.conf deleted file mode 100644 index 091ea02..0000000 --- a/hypr_desktop/hyprpaper.conf +++ /dev/null @@ -1,8 +0,0 @@ - -# wallpaper -preload = /home/dashie/Pictures/backgrounds/Monitor1.jpg -preload = /home/dashie/Pictures/backgrounds/Monitor2.jpg -preload = /home/dashie/Pictures/backgrounds/Monitor3.jpg -wallpaper = DP-2,/home/dashie/Pictures/backgrounds/Monitor1.jpg -wallpaper = DP-1,/home/dashie/Pictures/backgrounds/Monitor2.jpg -wallpaper = DP-3,/home/dashie/Pictures/backgrounds/Monitor3.jpg diff --git a/hypr_laptop/hyprland.conf b/hypr_laptop/hyprland.conf deleted file mode 100644 index 8a31a6e..0000000 --- a/hypr_laptop/hyprland.conf +++ /dev/null @@ -1,172 +0,0 @@ -# -#fix the fucking portal -exec-once=systemctl --user import-environment -exec-once=dbus-update-activation-environment --all -# - -monitor=eDP-1,1920x1080@144,0x0,1 -monitor=,highrr,1920x0,1 -input { - kb_file=/home/dashie/.config/keymap.xkb #us with dead_diaeresis on shift + ' to get ä ö ü - repeat_delay=200 - natural_scroll=false - follow_mouse=1 - force_no_accel=true - - touchpad { - natural_scroll=yes - tap-to-click=yes - } -} - -general { - sensitivity=1.0 # for mouse cursor - - gaps_in=5 - gaps_out=10 - border_size=3 - col.active_border=0xFFFF0000 0xFF00FF00 0xFF0000FF 60deg - col.inactive_border=0x66333333 - - apply_sens_to_raw=0 # whether to apply the sensitivity to raw input (e.g. used by games where you aim using your mouse) - -} - -decoration { - rounding=10 - blur=yes - blur=1 - blur_size=3 # minimum 1 - blur_passes=1 # minimum 1 - blur_new_optimizations=true -} - -animations { - enabled=1 - animation=windowsMove,1,3,default - animation=windows,1,5,default - animation=border,1,10,default - animation=fade,1,10,default - animation=workspaces,1,3,default -} - -dwindle { - preserve_split=true - pseudotile=0 # enable pseudotiling on dwindle -} - -gestures { - workspace_swipe=yes -} - -misc { - no_vfr=false - # animate_manual_resizes=true - # enable_swallow=true - # swallow_regex=^(.*)(Alacritty)(.*)$ - } - -# debug { -# overlay=true -# } - -#reserve place for bar -#monitor=eDP-1,addreserved,45,0,0,0 - -# example window rules -# for windows named/classed as abc and xyz -windowrule=opacity 80,^(.*)(dunst)(.*)$ -windowrule=float,^(.*)(Calculator)(.*)$ -#windowrule=tile,xyz -#windowrule=float,abc -#windowrule=pseudo,abc -#windowrule=monitor 0,xyz - -# example binds -bind=SUPER,S,exec,grim -g "$(slurp)" - | wl-copy -bind=SUPER,F,exec,firefox -bind=SUPER,T,exec,alacritty -bind=SUPER,Q,killactive, -bind=SUPER,M,exit, -bind=SUPER,E,exec,nautilus --new-window -bind=SUPER,V,togglefloating, -bind=SUPER,R,exec,wofi -I -m -s $HOME/.config/wofi/style.css -t alacritty --show drun -o DP-3 -bind=SUPERSHIFT,r,exec, wofi -I -m -s $HOME/.config/wofi/style.css -t alacritty --show run -o DP-3 -bind=SUPER,C,togglesplit -bind=SUPER,B,fullscreen -bind=SUPER,G,exec,calculator --gui -bind=SUPERSHIFT,L,exec, playerctl --all-players -a pause & swaylock -c 000000 & systemctl suspend -bind=,XF86AudioMute,exec, $HOME/.config/eww/scripts/toggle-mute -bind=,XF86AudioLowerVolume,exec, $HOME/.config/eww/scripts/change-volume sink -5% -bind=,XF86AudioRaiseVolume,exec, $HOME/.config/eww/scripts/change-volume sink +5% -bind=,XF86AudioPlay,exec, playerctl --player=ncspot,firefox play-pause -bind=,XF86AudioNext,exec, playerctl --player=ncspot,firefox next -bind=,XF86AudioPrev,exec, playerctl --player=ncspot,firefox previous -bind=,XF86MonBrightnessDown,exec, $HOME/.config/eww/scripts/change-brightness brightness 10%- -bind=,XF86MonBrightnessUp,exec, $HOME/.config/eww/scripts/change-brightness brightness +10% -bind=SUPERSHIFT,S,exec, grim -g "$(slurp)" - | swappy -f - -bind=SUPERSHIFTALT,S,exec, grim -g "$(slurp)" $HOME/gits/ost-3semester/Screenshots/$(date +'%Y_%m_%d_%I_%M_%S.png') && (date +'%Y_%m_%d_%I_%M_%S.png') | wl-copy -bind=SUPER,D,exec, $HOME/.config/eww/scripts/cockpit_toggle -bind=,Print,exec, grim - | wl-copy -# bind=SUPERALT,H,pass,^(wlroots)$ -# bind=SUPERALT,left,pass,^(wlroots)$ -# bind=SUPERALT,right,pass,^(wlroots)$ -# bind=SUPERALT,up,pass,^(wlroots)$ -# bind=SUPERALT,down,pass,^(wlroots)$ - -bind=SUPER,bracketleft,movefocus,l -bind=SUPER,bracketright,movefocus,r -bind=SUPER,semicolon,movefocus,u -bind=SUPER,apostrophe,movefocus,d - -bind=SUPER,left,movewindow,l -bind=SUPER,right,movewindow,r -bind=SUPER,up,movewindow,u -bind=SUPER,down,movewindow,d - -# bind=SUPERALT,left,movecursortocorner,2 -# bind=SUPERALT,left,exec, hyprctl dispatch movewindow && hyprctl dispatch moveactive -1000 300 && sleep 0.5 && hyprctl dispatch togglefloating - -bind=SUPER,1,workspace,1 -bind=SUPER,2,workspace,2 -bind=SUPER,3,workspace,3 -bind=SUPER,4,workspace,4 -bind=SUPER,5,workspace,5 -bind=SUPER,6,workspace,6 -bind=SUPER,7,workspace,7 -bind=SUPER,8,workspace,8 -bind=SUPER,9,workspace,9 -bind=SUPER,0,workspace,10 - -bind=SUPERSHIFT,1,movetoworkspace,1 -bind=SUPERSHIFT,2,movetoworkspace,2 -bind=SUPERSHIFT,3,movetoworkspace,3 -bind=SUPERSHIFT,4,movetoworkspace,4 -bind=SUPERSHIFT,5,movetoworkspace,5 -bind=SUPERSHIFT,6,movetoworkspace,6 -bind=SUPERSHIFT,7,movetoworkspace,7 -bind=SUPERSHIFT,8,movetoworkspace,8 -bind=SUPERSHIFT,9,movetoworkspace,9 -bind=SUPERSHIFT,0,movetoworkspace,10 - -bind=SUPER,mouse_down,workspace,e+1 -bind=SUPER,mouse_up,workspace,e-1 -bindm=SUPER,mouse:272,movewindow -bindm=SUPER,mouse:273,resizewindow - -binde=SUPER,O,resizeactive,-20 0 -binde=SUPER,P,resizeactive,20 0 -binde=SUPER,K,resizeactive,0 -20 -binde=SUPER,L,resizeactive,0 20 - -#autostart programs -#exec=~/Documents/scripts/hyprstart.sh -#exec=hyprstart.sh -exec-once=hyprpaper -exec-once=eww daemon -exec-once=eww open bar -exec-once=nheko -# exec-once=flatpak run --branch=stable --arch=x86_64 --command=/app/bin/schildichat-desktop --file-forwarding chat.schildi.desktop --enable-features=ozonePlatform,WebRTCPipeWireCapturer --ozone-platform=wayland -exec-once=firefox -exec-once=nextcloud -exec-once=alacritty -e ncspot diff --git a/hypr_laptop/hyprlandd.conf b/hypr_laptop/hyprlandd.conf deleted file mode 100644 index bcd5c5b..0000000 --- a/hypr_laptop/hyprlandd.conf +++ /dev/null @@ -1,127 +0,0 @@ -monitor=,1080x1920@60,0x0,1 -input { - repeat_delay=200 - natural_scroll=false - follow_mouse=1 - force_no_accel=true - - touchpad { - natural_scroll=yes - tap-to-click=yes - } -} - -general { - sensitivity=1.0 # for mouse cursor - - gaps_in=5 - gaps_out=10 - border_size=3 - col.active_border=0x66ee1111 - col.inactive_border=0x66333333 - - apply_sens_to_raw=0 # whether to apply the sensitivity to raw input (e.g. used by games where you aim using your mouse) - -} - -decoration { - rounding=10 - blur=yes - blur=1 - blur_size=3 # minimum 1 - blur_passes=1 # minimum 1 - blur_new_optimizations=true - - drop_shadow=false -} - -animations { - enabled=1 - animation=windowsMove,1,3,default - animation=windows,1,5,default - animation=border,1,10,default - animation=fade,1,10,default - animation=workspaces,1,3,default -} - -dwindle { - preserve_split=true - pseudotile=0 # enable pseudotiling on dwindle -} - -gestures { - workspace_swipe=yes -} - -misc { - no_vfr=false - # animate_manual_resizes=true - enable_swallow=true - swallow_regex=^(.*)(Alacritty)(.*)$ - } - -# debug { -# overlay=true -# } - -#reserve place for bar -#monitor=eDP-1,addreserved,45,0,0,0 - -# example window rules -# for windows named/classed as abc and xyz -#windowrule=tile,xyz -#windowrule=float,abc -#windowrule=pseudo,abc -#windowrule=monitor 0,xyz - -# example binds -bind=SUPER,T,exec,alacritty -bind=SUPER,Q,killactive, -bind=SUPER,M,exit, -bind=SUPER,V,togglefloating, -bind=SUPER,C,togglesplit -bind=SUPER,B,fullscreen -bind=SUPER,H,exec,alacritty - -bind=SUPER,bracketleft,movefocus,l -bind=SUPER,bracketright,movefocus,r -bind=SUPER,semicolon,movefocus,u -bind=SUPER,apostrophe,movefocus,d - -bind=SUPERALT,left,movewindow,l -bind=SUPERALT,right,movewindow,r -bind=SUPERALT,up,movewindow,u -bind=SUPERALT,down,movewindow,d - -bind=SUPER,1,workspace,1 -bind=SUPER,2,workspace,2 -bind=SUPER,3,workspace,3 -bind=SUPER,4,workspace,4 -bind=SUPER,5,workspace,5 -bind=SUPER,6,workspace,6 -bind=SUPER,7,workspace,7 -bind=SUPER,8,workspace,8 -bind=SUPER,9,workspace,9 -bind=SUPER,0,workspace,10 - -bind=SUPERSHIFT,1,movetoworkspace,1 -bind=SUPERSHIFT,2,movetoworkspace,2 -bind=SUPERSHIFT,3,movetoworkspace,3 -bind=SUPERSHIFT,4,movetoworkspace,4 -bind=SUPERSHIFT,5,movetoworkspace,5 -bind=SUPERSHIFT,6,movetoworkspace,6 -bind=SUPERSHIFT,7,movetoworkspace,7 -bind=SUPERSHIFT,8,movetoworkspace,8 -bind=SUPERSHIFT,9,movetoworkspace,9 -bind=SUPERSHIFT,0,movetoworkspace,10 - -bind=SUPER,mouse_down,workspace,e+1 -bind=SUPER,mouse_up,workspace,e-1 -bindm=SUPER,mouse:272,movewindow -bindm=SUPER,mouse:273,resizewindow - -binde=SUPER,O,resizeactive,-20 0 -binde=SUPER,P,resizeactive,20 0 -binde=SUPER,K,resizeactive,0 -20 -binde=SUPER,L,resizeactive,0 20 - diff --git a/hypr_laptop/hyprpaper.conf b/hypr_laptop/hyprpaper.conf deleted file mode 100644 index ac00e73..0000000 --- a/hypr_laptop/hyprpaper.conf +++ /dev/null @@ -1,5 +0,0 @@ - -# wallpaper -preload = /home/dashie/Pictures/backgrounds/Monitor3.jpg -wallpaper = eDP-1,/home/dashie/Pictures/backgrounds/Monitor3.jpg -ipc = off diff --git a/iso/configuration.nix b/iso/configuration.nix new file mode 100644 index 0000000..9272a65 --- /dev/null +++ b/iso/configuration.nix @@ -0,0 +1,86 @@ +{ + pkgs, + modulesPath, + lib, + self, + inputs, + ... +}: let + system = "x86_64-linux"; +in { + imports = ["${modulesPath}/installer/cd-dvd/iso-image.nix"]; + nixpkgs.hostPlatform = { + inherit system; + }; + + environment.systemPackages = with pkgs; [ + inputs.dashvim.packages.${system}.minimal + disko + git + firefox + kitty + gnome-disk-utility + inputs.disko.packages.${system}.disko-install + ]; + + networking = { + wireless.enable = false; + networkmanager.enable = true; + }; + + nix.settings.experimental-features = [ + "nix-command" + "flakes" + "pipe-operators" + ]; + + users.users.nixos = { + isNormalUser = true; + password = "nixos"; + extraGroups = ["wheel"]; + }; + + image.baseName = lib.mkForce "DashNix"; + + programs = { + hyprland = { + enable = true; + withUWSM = true; + xwayland.enable = false; + }; + uwsm.enable = true; + }; + + fonts.packages = [pkgs.adwaita-fonts]; + i18n.defaultLocale = "en_US.UTF-8"; + + services = { + displayManager.autoLogin = { + enable = true; + user = "nixos"; + }; + greetd = { + enable = true; + settings = { + terminal.vt = 1; + default_session = { + command = "${lib.getExe pkgs.hyprland}"; + user = "nixos"; + }; + }; + }; + }; + + isoImage = { + makeEfiBootable = true; + makeUsbBootable = true; + contents = [ + { + source = "${self}/example"; + target = "example-config"; + } + ]; + }; + + system.stateVersion = "25.11"; +} diff --git a/keymap.xkb b/keymap.xkb deleted file mode 100644 index d772778..0000000 --- a/keymap.xkb +++ /dev/null @@ -1,1581 +0,0 @@ -xkb_keymap { -xkb_keycodes "(unnamed)" { - minimum = 8; - maximum = 255; - = 9; - = 10; - = 11; - = 12; - = 13; - = 14; - = 15; - = 16; - = 17; - = 18; - = 19; - = 20; - = 21; - = 22; - = 23; - = 24; - = 25; - = 26; - = 27; - = 28; - = 29; - = 30; - = 31; - = 32; - = 33; - = 34; - = 35; - = 36; - = 37; - = 38; - = 39; - = 40; - = 41; - = 42; - = 43; - = 44; - = 45; - = 46; - = 47; - = 48; - = 49; - = 50; - = 51; - = 52; - = 53; - = 54; - = 55; - = 56; - = 57; - = 58; - = 59; - = 60; - = 61; - = 62; - = 63; - = 64; - = 65; - = 66; - = 67; - = 68; - = 69; - = 70; - = 71; - = 72; - = 73; - = 74; - = 75; - = 76; - = 77; - = 78; - = 79; - = 80; - = 81; - = 82; - = 83; - = 84; - = 85; - = 86; - = 87; - = 88; - = 89; - = 90; - = 91; - = 92; - = 94; - = 95; - = 96; - = 97; - = 98; - = 99; - = 100; - = 101; - = 102; - = 103; - = 104; - = 105; - = 106; - = 107; - = 108; - = 109; - = 110; - = 111; - = 112; - = 113; - = 114; - = 115; - = 116; - = 117; - = 118; - = 119; - = 120; - = 121; - = 122; - = 123; - = 124; - = 125; - = 126; - = 127; - = 128; - = 129; - = 130; - = 131; - = 132; - = 133; - = 134; - = 135; - = 136; - = 137; - = 138; - = 139; - = 140; - = 141; - = 142; - = 143; - = 144; - = 145; - = 146; - = 147; - = 148; - = 149; - = 150; - = 151; - = 152; - = 153; - = 154; - = 155; - = 156; - = 157; - = 158; - = 159; - = 160; - = 161; - = 162; - = 163; - = 164; - = 165; - = 166; - = 167; - = 168; - = 169; - = 170; - = 171; - = 172; - = 173; - = 174; - = 175; - = 176; - = 177; - = 178; - = 179; - = 180; - = 181; - = 182; - = 183; - = 184; - = 185; - = 186; - = 187; - = 188; - = 189; - = 190; - = 191; - = 192; - = 193; - = 194; - = 195; - = 196; - = 197; - = 198; - = 199; - = 200; - = 201; - = 202; - = 203; - = 204; - = 205; - = 206; - = 207; - = 208; - = 209; - = 210; - = 211; - = 212; - = 213; - = 214; - = 215; - = 216; - = 217; - = 218; - = 219; - = 220; - = 221; - = 222; - = 223; - = 224; - = 225; - = 226; - = 227; - = 228; - = 229; - = 230; - = 231; - = 232; - = 233; - = 234; - = 235; - = 236; - = 237; - = 238; - = 239; - = 240; - = 241; - = 242; - = 243; - = 244; - = 245; - = 246; - = 247; - = 248; - = 249; - = 250; - = 251; - = 252; - = 253; - = 254; - = 255; - indicator 1 = "Caps Lock"; - indicator 2 = "Num Lock"; - indicator 3 = "Scroll Lock"; - indicator 4 = "Compose"; - indicator 5 = "Kana"; - indicator 6 = "Sleep"; - indicator 7 = "Suspend"; - indicator 8 = "Mute"; - indicator 9 = "Misc"; - indicator 10 = "Mail"; - indicator 11 = "Charging"; - indicator 12 = "Shift Lock"; - indicator 13 = "Group 2"; - indicator 14 = "Mouse Keys"; - alias = ; - alias = ; - alias = ; - alias = ; - alias = ; - alias = ; - alias = ; - alias = ; - alias = ; - alias = ; - alias = ; - alias = ; - alias = ; - alias = ; - alias = ; - alias = ; - alias = ; - alias = ; - alias = ; - alias = ; - alias = ; - alias = ; - alias = ; - alias = ; - alias = ; - alias = ; - alias = ; - alias = ; - alias = ; - alias = ; - alias = ; - alias = ; - alias = ; - alias = ; - alias = ; - alias = ; - alias = ; - alias = ; - alias = ; - alias = ; - alias = ; - alias = ; - alias = ; - alias = ; - alias = ; - alias = ; - alias = ; - alias = ; - alias = ; - alias = ; - alias = ; - alias = ; - alias = ; - alias = ; - alias = ; - alias = ; - alias = ; - alias = ; - alias = ; - alias = ; - alias = ; - alias = ; - alias = ; - alias = ; - alias = ; - alias = ; - alias = ; - alias = ; - alias = ; - alias = ; - alias = ; - alias = ; -}; - -xkb_types "(unnamed)" { - - virtual_modifiers NumLock,Alt,LevelThree,ScrollLock,LevelFive,AltGr,Meta,Super,Hyper; - - type "ONE_LEVEL" { - modifiers= none; - level_name[Level1]= "Any"; - }; - type "TWO_LEVEL" { - modifiers= Shift; - map[Shift]= Level2; - level_name[Level1]= "Base"; - level_name[Level2]= "Shift"; - }; - type "ALPHABETIC" { - modifiers= Shift+Lock; - map[Shift]= Level2; - map[Lock]= Level2; - level_name[Level1]= "Base"; - level_name[Level2]= "Caps"; - }; - type "KEYPAD" { - modifiers= Shift+NumLock; - map[NumLock]= Level2; - level_name[Level1]= "Base"; - level_name[Level2]= "Number"; - }; - type "SHIFT+ALT" { - modifiers= Shift+Alt; - map[Shift+Alt]= Level2; - level_name[Level1]= "Base"; - level_name[Level2]= "Shift+Alt"; - }; - type "PC_SUPER_LEVEL2" { - modifiers= Mod4; - map[Mod4]= Level2; - level_name[Level1]= "Base"; - level_name[Level2]= "Super"; - }; - type "PC_CONTROL_LEVEL2" { - modifiers= Control; - map[Control]= Level2; - level_name[Level1]= "Base"; - level_name[Level2]= "Control"; - }; - type "PC_ALT_LEVEL2" { - modifiers= Alt; - map[Alt]= Level2; - level_name[Level1]= "Base"; - level_name[Level2]= "Alt"; - }; - type "CTRL+ALT" { - modifiers= Shift+Control+Alt+LevelThree; - map[Shift]= Level2; - preserve[Shift]= Shift; - map[LevelThree]= Level3; - map[Shift+LevelThree]= Level4; - preserve[Shift+LevelThree]= Shift; - map[Control+Alt]= Level5; - level_name[Level1]= "Base"; - level_name[Level2]= "Shift"; - level_name[Level3]= "Alt Base"; - level_name[Level4]= "Shift Alt"; - level_name[Level5]= "Ctrl+Alt"; - }; - type "LOCAL_EIGHT_LEVEL" { - modifiers= Shift+Lock+Control+LevelThree; - map[Shift]= Level2; - map[Lock]= Level2; - map[LevelThree]= Level3; - map[Shift+Lock+LevelThree]= Level3; - map[Shift+LevelThree]= Level4; - map[Lock+LevelThree]= Level4; - map[Control]= Level5; - map[Shift+Lock+Control]= Level5; - map[Shift+Control]= Level6; - map[Lock+Control]= Level6; - map[Control+LevelThree]= Level7; - map[Shift+Lock+Control+LevelThree]= Level7; - map[Shift+Control+LevelThree]= Level8; - map[Lock+Control+LevelThree]= Level8; - level_name[Level1]= "Base"; - level_name[Level2]= "Shift"; - level_name[Level3]= "Level3"; - level_name[Level4]= "Shift Level3"; - level_name[Level5]= "Ctrl"; - level_name[Level6]= "Shift Ctrl"; - level_name[Level7]= "Level3 Ctrl"; - level_name[Level8]= "Shift Level3 Ctrl"; - }; - type "THREE_LEVEL" { - modifiers= Shift+LevelThree; - map[Shift]= Level2; - map[LevelThree]= Level3; - map[Shift+LevelThree]= Level3; - level_name[Level1]= "Base"; - level_name[Level2]= "Shift"; - level_name[Level3]= "Level3"; - }; - type "SHIFT_SHIFTALT" { - modifiers= Shift+Alt; - map[Shift]= Level2; - map[Shift+Alt]= Level3; - level_name[Level1]= "Base"; - level_name[Level2]= "Shift"; - level_name[Level3]= "Shift+Alt"; - }; - type "EIGHT_LEVEL" { - modifiers= Shift+LevelThree+LevelFive; - map[Shift]= Level2; - map[LevelThree]= Level3; - map[Shift+LevelThree]= Level4; - map[LevelFive]= Level5; - map[Shift+LevelFive]= Level6; - map[LevelThree+LevelFive]= Level7; - map[Shift+LevelThree+LevelFive]= Level8; - level_name[Level1]= "Base"; - level_name[Level2]= "Shift"; - level_name[Level3]= "Alt Base"; - level_name[Level4]= "Shift Alt"; - level_name[Level5]= "X"; - level_name[Level6]= "X Shift"; - level_name[Level7]= "X Alt Base"; - level_name[Level8]= "X Shift Alt"; - }; - type "EIGHT_LEVEL_ALPHABETIC" { - modifiers= Shift+Lock+LevelThree+LevelFive; - map[Shift]= Level2; - map[Lock]= Level2; - map[LevelThree]= Level3; - map[Shift+LevelThree]= Level4; - map[Lock+LevelThree]= Level4; - map[Shift+Lock+LevelThree]= Level3; - map[LevelFive]= Level5; - map[Shift+LevelFive]= Level6; - map[Lock+LevelFive]= Level6; - map[LevelThree+LevelFive]= Level7; - map[Shift+LevelThree+LevelFive]= Level8; - map[Lock+LevelThree+LevelFive]= Level8; - map[Shift+Lock+LevelThree+LevelFive]= Level7; - level_name[Level1]= "Base"; - level_name[Level2]= "Shift"; - level_name[Level3]= "Alt Base"; - level_name[Level4]= "Shift Alt"; - level_name[Level5]= "X"; - level_name[Level6]= "X Shift"; - level_name[Level7]= "X Alt Base"; - level_name[Level8]= "X Shift Alt"; - }; - type "EIGHT_LEVEL_LEVEL_FIVE_LOCK" { - modifiers= Shift+Lock+NumLock+LevelThree+LevelFive; - map[Shift]= Level2; - map[LevelThree]= Level3; - map[Shift+LevelThree]= Level4; - map[LevelFive]= Level5; - map[Shift+LevelFive]= Level6; - preserve[Shift+LevelFive]= Shift; - map[LevelThree+LevelFive]= Level7; - map[Shift+LevelThree+LevelFive]= Level8; - map[NumLock]= Level5; - map[Shift+NumLock]= Level6; - preserve[Shift+NumLock]= Shift; - map[NumLock+LevelThree]= Level7; - map[Shift+NumLock+LevelThree]= Level8; - map[Shift+NumLock+LevelFive]= Level2; - map[NumLock+LevelThree+LevelFive]= Level3; - map[Shift+NumLock+LevelThree+LevelFive]= Level4; - map[Shift+Lock]= Level2; - map[Lock+LevelThree]= Level3; - map[Shift+Lock+LevelThree]= Level4; - map[Lock+LevelFive]= Level5; - map[Shift+Lock+LevelFive]= Level6; - preserve[Shift+Lock+LevelFive]= Shift; - map[Lock+LevelThree+LevelFive]= Level7; - map[Shift+Lock+LevelThree+LevelFive]= Level8; - map[Lock+NumLock]= Level5; - map[Shift+Lock+NumLock]= Level6; - preserve[Shift+Lock+NumLock]= Shift; - map[Lock+NumLock+LevelThree]= Level7; - map[Shift+Lock+NumLock+LevelThree]= Level8; - map[Shift+Lock+NumLock+LevelFive]= Level2; - map[Lock+NumLock+LevelThree+LevelFive]= Level3; - map[Shift+Lock+NumLock+LevelThree+LevelFive]= Level4; - level_name[Level1]= "Base"; - level_name[Level2]= "Shift"; - level_name[Level3]= "Alt Base"; - level_name[Level4]= "Shift Alt"; - level_name[Level5]= "X"; - level_name[Level6]= "X Shift"; - level_name[Level7]= "X Alt Base"; - level_name[Level8]= "X Shift Alt"; - }; - type "EIGHT_LEVEL_ALPHABETIC_LEVEL_FIVE_LOCK" { - modifiers= Shift+Lock+NumLock+LevelThree+LevelFive; - map[Shift]= Level2; - map[LevelThree]= Level3; - map[Shift+LevelThree]= Level4; - map[LevelFive]= Level5; - map[Shift+LevelFive]= Level6; - preserve[Shift+LevelFive]= Shift; - map[LevelThree+LevelFive]= Level7; - map[Shift+LevelThree+LevelFive]= Level8; - map[NumLock]= Level5; - map[Shift+NumLock]= Level6; - preserve[Shift+NumLock]= Shift; - map[NumLock+LevelThree]= Level7; - map[Shift+NumLock+LevelThree]= Level8; - map[Shift+NumLock+LevelFive]= Level2; - map[NumLock+LevelThree+LevelFive]= Level3; - map[Shift+NumLock+LevelThree+LevelFive]= Level4; - map[Lock]= Level2; - map[Lock+LevelThree]= Level3; - map[Shift+Lock+LevelThree]= Level4; - map[Lock+LevelFive]= Level5; - map[Shift+Lock+LevelFive]= Level6; - map[Lock+LevelThree+LevelFive]= Level7; - map[Shift+Lock+LevelThree+LevelFive]= Level8; - map[Lock+NumLock]= Level5; - map[Shift+Lock+NumLock]= Level6; - map[Lock+NumLock+LevelThree]= Level7; - map[Shift+Lock+NumLock+LevelThree]= Level8; - map[Lock+NumLock+LevelFive]= Level2; - map[Lock+NumLock+LevelThree+LevelFive]= Level4; - map[Shift+Lock+NumLock+LevelThree+LevelFive]= Level3; - level_name[Level1]= "Base"; - level_name[Level2]= "Shift"; - level_name[Level3]= "Alt Base"; - level_name[Level4]= "Shift Alt"; - level_name[Level5]= "X"; - level_name[Level6]= "X Shift"; - level_name[Level7]= "X Alt Base"; - level_name[Level8]= "X Shift Alt"; - }; - type "EIGHT_LEVEL_SEMIALPHABETIC" { - modifiers= Shift+Lock+LevelThree+LevelFive; - map[Shift]= Level2; - map[Lock]= Level2; - map[LevelThree]= Level3; - map[Shift+LevelThree]= Level4; - map[Lock+LevelThree]= Level3; - preserve[Lock+LevelThree]= Lock; - map[Shift+Lock+LevelThree]= Level4; - preserve[Shift+Lock+LevelThree]= Lock; - map[LevelFive]= Level5; - map[Shift+LevelFive]= Level6; - map[Lock+LevelFive]= Level6; - preserve[Lock+LevelFive]= Lock; - map[Shift+Lock+LevelFive]= Level6; - preserve[Shift+Lock+LevelFive]= Lock; - map[LevelThree+LevelFive]= Level7; - map[Shift+LevelThree+LevelFive]= Level8; - map[Lock+LevelThree+LevelFive]= Level7; - preserve[Lock+LevelThree+LevelFive]= Lock; - map[Shift+Lock+LevelThree+LevelFive]= Level8; - preserve[Shift+Lock+LevelThree+LevelFive]= Lock; - level_name[Level1]= "Base"; - level_name[Level2]= "Shift"; - level_name[Level3]= "Alt Base"; - level_name[Level4]= "Shift Alt"; - level_name[Level5]= "X"; - level_name[Level6]= "X Shift"; - level_name[Level7]= "X Alt Base"; - level_name[Level8]= "X Shift Alt"; - }; - type "FOUR_LEVEL" { - modifiers= Shift+LevelThree; - map[Shift]= Level2; - map[LevelThree]= Level3; - map[Shift+LevelThree]= Level4; - level_name[Level1]= "Base"; - level_name[Level2]= "Shift"; - level_name[Level3]= "Alt Base"; - level_name[Level4]= "Shift Alt"; - }; - type "FOUR_LEVEL_ALPHABETIC" { - modifiers= Shift+Lock+LevelThree; - map[Shift]= Level2; - map[Lock]= Level2; - map[LevelThree]= Level3; - map[Shift+LevelThree]= Level4; - map[Lock+LevelThree]= Level4; - map[Shift+Lock+LevelThree]= Level3; - level_name[Level1]= "Base"; - level_name[Level2]= "Shift"; - level_name[Level3]= "Alt Base"; - level_name[Level4]= "Shift Alt"; - }; - type "FOUR_LEVEL_SEMIALPHABETIC" { - modifiers= Shift+Lock+LevelThree; - map[Shift]= Level2; - map[Lock]= Level2; - map[LevelThree]= Level3; - map[Shift+LevelThree]= Level4; - map[Lock+LevelThree]= Level3; - preserve[Lock+LevelThree]= Lock; - map[Shift+Lock+LevelThree]= Level4; - preserve[Shift+Lock+LevelThree]= Lock; - level_name[Level1]= "Base"; - level_name[Level2]= "Shift"; - level_name[Level3]= "Alt Base"; - level_name[Level4]= "Shift Alt"; - }; - type "FOUR_LEVEL_MIXED_KEYPAD" { - modifiers= Shift+NumLock+LevelThree; - map[NumLock]= Level2; - map[Shift]= Level2; - map[LevelThree]= Level3; - map[NumLock+LevelThree]= Level3; - map[Shift+LevelThree]= Level4; - map[Shift+NumLock+LevelThree]= Level4; - level_name[Level1]= "Base"; - level_name[Level2]= "Number"; - level_name[Level3]= "Alt Base"; - level_name[Level4]= "Shift Alt"; - }; - type "FOUR_LEVEL_X" { - modifiers= Shift+Control+Alt+LevelThree; - map[LevelThree]= Level2; - map[Shift+LevelThree]= Level3; - map[Control+Alt]= Level4; - level_name[Level1]= "Base"; - level_name[Level2]= "Alt Base"; - level_name[Level3]= "Shift Alt"; - level_name[Level4]= "Ctrl+Alt"; - }; - type "SEPARATE_CAPS_AND_SHIFT_ALPHABETIC" { - modifiers= Shift+Lock+LevelThree; - map[Shift]= Level2; - map[Lock]= Level4; - preserve[Lock]= Lock; - map[LevelThree]= Level3; - map[Shift+LevelThree]= Level4; - map[Lock+LevelThree]= Level3; - preserve[Lock+LevelThree]= Lock; - map[Shift+Lock+LevelThree]= Level3; - level_name[Level1]= "Base"; - level_name[Level2]= "Shift"; - level_name[Level3]= "AltGr Base"; - level_name[Level4]= "Shift AltGr"; - }; - type "FOUR_LEVEL_PLUS_LOCK" { - modifiers= Shift+Lock+LevelThree; - map[Shift]= Level2; - map[LevelThree]= Level3; - map[Shift+LevelThree]= Level4; - map[Lock]= Level5; - map[Shift+Lock]= Level2; - map[Lock+LevelThree]= Level3; - map[Shift+Lock+LevelThree]= Level4; - level_name[Level1]= "Base"; - level_name[Level2]= "Shift"; - level_name[Level3]= "Alt Base"; - level_name[Level4]= "Shift Alt"; - level_name[Level5]= "Lock"; - }; - type "FOUR_LEVEL_KEYPAD" { - modifiers= Shift+NumLock+LevelThree; - map[Shift]= Level2; - map[NumLock]= Level2; - map[LevelThree]= Level3; - map[Shift+LevelThree]= Level4; - map[NumLock+LevelThree]= Level4; - map[Shift+NumLock+LevelThree]= Level3; - level_name[Level1]= "Base"; - level_name[Level2]= "Number"; - level_name[Level3]= "Alt Base"; - level_name[Level4]= "Alt Number"; - }; -}; - -xkb_compatibility "(unnamed)" { - - virtual_modifiers NumLock,Alt,LevelThree,ScrollLock,LevelFive,AltGr,Meta,Super,Hyper; - - interpret.useModMapMods= AnyLevel; - interpret.repeat= False; - interpret.locking= False; - interpret ISO_Level2_Latch+Exactly(Shift) { - useModMapMods=level1; - action= LatchMods(modifiers=Shift,clearLocks,latchToLock); - }; - interpret Shift_Lock+AnyOf(Shift+Lock) { - action= LockMods(modifiers=Shift); - }; - interpret Num_Lock+AnyOf(all) { - virtualModifier= NumLock; - action= LockMods(modifiers=NumLock); - }; - interpret ISO_Level3_Shift+AnyOf(all) { - virtualModifier= LevelThree; - useModMapMods=level1; - action= SetMods(modifiers=LevelThree,clearLocks); - }; - interpret ISO_Level3_Latch+AnyOf(all) { - virtualModifier= LevelThree; - useModMapMods=level1; - action= LatchMods(modifiers=LevelThree,clearLocks,latchToLock); - }; - interpret ISO_Level3_Lock+AnyOf(all) { - virtualModifier= LevelThree; - useModMapMods=level1; - action= LockMods(modifiers=LevelThree); - }; - interpret Alt_L+AnyOf(all) { - virtualModifier= Alt; - action= SetMods(modifiers=modMapMods,clearLocks); - }; - interpret Alt_R+AnyOf(all) { - virtualModifier= Alt; - action= SetMods(modifiers=modMapMods,clearLocks); - }; - interpret Meta_L+AnyOf(all) { - virtualModifier= Meta; - action= SetMods(modifiers=modMapMods,clearLocks); - }; - interpret Meta_R+AnyOf(all) { - virtualModifier= Meta; - action= SetMods(modifiers=modMapMods,clearLocks); - }; - interpret Super_L+AnyOf(all) { - virtualModifier= Super; - action= SetMods(modifiers=modMapMods,clearLocks); - }; - interpret Super_R+AnyOf(all) { - virtualModifier= Super; - action= SetMods(modifiers=modMapMods,clearLocks); - }; - interpret Hyper_L+AnyOf(all) { - virtualModifier= Hyper; - action= SetMods(modifiers=modMapMods,clearLocks); - }; - interpret Hyper_R+AnyOf(all) { - virtualModifier= Hyper; - action= SetMods(modifiers=modMapMods,clearLocks); - }; - interpret Scroll_Lock+AnyOf(all) { - virtualModifier= ScrollLock; - action= LockMods(modifiers=modMapMods); - }; - interpret ISO_Level5_Shift+AnyOf(all) { - virtualModifier= LevelFive; - useModMapMods=level1; - action= SetMods(modifiers=LevelFive,clearLocks); - }; - interpret ISO_Level5_Latch+AnyOf(all) { - virtualModifier= LevelFive; - useModMapMods=level1; - action= LatchMods(modifiers=LevelFive,clearLocks,latchToLock); - }; - interpret ISO_Level5_Lock+AnyOf(all) { - virtualModifier= LevelFive; - useModMapMods=level1; - action= LockMods(modifiers=LevelFive); - }; - interpret Mode_switch+AnyOfOrNone(all) { - virtualModifier= AltGr; - useModMapMods=level1; - action= SetGroup(group=+1); - }; - interpret ISO_Level3_Shift+AnyOfOrNone(all) { - action= SetMods(modifiers=LevelThree,clearLocks); - }; - interpret ISO_Level3_Latch+AnyOfOrNone(all) { - action= LatchMods(modifiers=LevelThree,clearLocks,latchToLock); - }; - interpret ISO_Level3_Lock+AnyOfOrNone(all) { - action= LockMods(modifiers=LevelThree); - }; - interpret ISO_Group_Latch+AnyOfOrNone(all) { - virtualModifier= AltGr; - useModMapMods=level1; - action= LatchGroup(group=2); - }; - interpret ISO_Next_Group+AnyOfOrNone(all) { - virtualModifier= AltGr; - useModMapMods=level1; - action= LockGroup(group=+1); - }; - interpret ISO_Prev_Group+AnyOfOrNone(all) { - virtualModifier= AltGr; - useModMapMods=level1; - action= LockGroup(group=-1); - }; - interpret ISO_First_Group+AnyOfOrNone(all) { - action= LockGroup(group=1); - }; - interpret ISO_Last_Group+AnyOfOrNone(all) { - action= LockGroup(group=2); - }; - interpret KP_1+AnyOfOrNone(all) { - repeat= True; - action= MovePtr(x=-1,y=+1); - }; - interpret KP_End+AnyOfOrNone(all) { - repeat= True; - action= MovePtr(x=-1,y=+1); - }; - interpret KP_2+AnyOfOrNone(all) { - repeat= True; - action= MovePtr(x=+0,y=+1); - }; - interpret KP_Down+AnyOfOrNone(all) { - repeat= True; - action= MovePtr(x=+0,y=+1); - }; - interpret KP_3+AnyOfOrNone(all) { - repeat= True; - action= MovePtr(x=+1,y=+1); - }; - interpret KP_Next+AnyOfOrNone(all) { - repeat= True; - action= MovePtr(x=+1,y=+1); - }; - interpret KP_4+AnyOfOrNone(all) { - repeat= True; - action= MovePtr(x=-1,y=+0); - }; - interpret KP_Left+AnyOfOrNone(all) { - repeat= True; - action= MovePtr(x=-1,y=+0); - }; - interpret KP_6+AnyOfOrNone(all) { - repeat= True; - action= MovePtr(x=+1,y=+0); - }; - interpret KP_Right+AnyOfOrNone(all) { - repeat= True; - action= MovePtr(x=+1,y=+0); - }; - interpret KP_7+AnyOfOrNone(all) { - repeat= True; - action= MovePtr(x=-1,y=-1); - }; - interpret KP_Home+AnyOfOrNone(all) { - repeat= True; - action= MovePtr(x=-1,y=-1); - }; - interpret KP_8+AnyOfOrNone(all) { - repeat= True; - action= MovePtr(x=+0,y=-1); - }; - interpret KP_Up+AnyOfOrNone(all) { - repeat= True; - action= MovePtr(x=+0,y=-1); - }; - interpret KP_9+AnyOfOrNone(all) { - repeat= True; - action= MovePtr(x=+1,y=-1); - }; - interpret KP_Prior+AnyOfOrNone(all) { - repeat= True; - action= MovePtr(x=+1,y=-1); - }; - interpret KP_5+AnyOfOrNone(all) { - repeat= True; - action= PtrBtn(button=default); - }; - interpret KP_Begin+AnyOfOrNone(all) { - repeat= True; - action= PtrBtn(button=default); - }; - interpret KP_F2+AnyOfOrNone(all) { - repeat= True; - action= SetPtrDflt(affect=button,button=1); - }; - interpret KP_Divide+AnyOfOrNone(all) { - repeat= True; - action= SetPtrDflt(affect=button,button=1); - }; - interpret KP_F3+AnyOfOrNone(all) { - repeat= True; - action= SetPtrDflt(affect=button,button=2); - }; - interpret KP_Multiply+AnyOfOrNone(all) { - repeat= True; - action= SetPtrDflt(affect=button,button=2); - }; - interpret KP_F4+AnyOfOrNone(all) { - repeat= True; - action= SetPtrDflt(affect=button,button=3); - }; - interpret KP_Subtract+AnyOfOrNone(all) { - repeat= True; - action= SetPtrDflt(affect=button,button=3); - }; - interpret KP_Separator+AnyOfOrNone(all) { - repeat= True; - action= PtrBtn(button=default,count=2); - }; - interpret KP_Add+AnyOfOrNone(all) { - repeat= True; - action= PtrBtn(button=default,count=2); - }; - interpret KP_0+AnyOfOrNone(all) { - repeat= True; - action= LockPtrBtn(button=default,affect=lock); - }; - interpret KP_Insert+AnyOfOrNone(all) { - repeat= True; - action= LockPtrBtn(button=default,affect=lock); - }; - interpret KP_Decimal+AnyOfOrNone(all) { - repeat= True; - action= LockPtrBtn(button=default,affect=unlock); - }; - interpret KP_Delete+AnyOfOrNone(all) { - repeat= True; - action= LockPtrBtn(button=default,affect=unlock); - }; - interpret F25+AnyOfOrNone(all) { - repeat= True; - action= SetPtrDflt(affect=button,button=1); - }; - interpret F26+AnyOfOrNone(all) { - repeat= True; - action= SetPtrDflt(affect=button,button=2); - }; - interpret F27+AnyOfOrNone(all) { - repeat= True; - action= MovePtr(x=-1,y=-1); - }; - interpret F29+AnyOfOrNone(all) { - repeat= True; - action= MovePtr(x=+1,y=-1); - }; - interpret F31+AnyOfOrNone(all) { - repeat= True; - action= PtrBtn(button=default); - }; - interpret F33+AnyOfOrNone(all) { - repeat= True; - action= MovePtr(x=-1,y=+1); - }; - interpret F35+AnyOfOrNone(all) { - repeat= True; - action= MovePtr(x=+1,y=+1); - }; - interpret Pointer_Button_Dflt+AnyOfOrNone(all) { - action= PtrBtn(button=default); - }; - interpret Pointer_Button1+AnyOfOrNone(all) { - action= PtrBtn(button=1); - }; - interpret Pointer_Button2+AnyOfOrNone(all) { - action= PtrBtn(button=2); - }; - interpret Pointer_Button3+AnyOfOrNone(all) { - action= PtrBtn(button=3); - }; - interpret Pointer_DblClick_Dflt+AnyOfOrNone(all) { - action= PtrBtn(button=default,count=2); - }; - interpret Pointer_DblClick1+AnyOfOrNone(all) { - action= PtrBtn(button=1,count=2); - }; - interpret Pointer_DblClick2+AnyOfOrNone(all) { - action= PtrBtn(button=2,count=2); - }; - interpret Pointer_DblClick3+AnyOfOrNone(all) { - action= PtrBtn(button=3,count=2); - }; - interpret Pointer_Drag_Dflt+AnyOfOrNone(all) { - action= LockPtrBtn(button=default,affect=both); - }; - interpret Pointer_Drag1+AnyOfOrNone(all) { - action= LockPtrBtn(button=1,affect=both); - }; - interpret Pointer_Drag2+AnyOfOrNone(all) { - action= LockPtrBtn(button=2,affect=both); - }; - interpret Pointer_Drag3+AnyOfOrNone(all) { - action= LockPtrBtn(button=3,affect=both); - }; - interpret Pointer_EnableKeys+AnyOfOrNone(all) { - action= LockControls(controls=MouseKeys); - }; - interpret Pointer_Accelerate+AnyOfOrNone(all) { - action= LockControls(controls=MouseKeysAccel); - }; - interpret Pointer_DfltBtnNext+AnyOfOrNone(all) { - action= SetPtrDflt(affect=button,button=+1); - }; - interpret Pointer_DfltBtnPrev+AnyOfOrNone(all) { - action= SetPtrDflt(affect=button,button=-1); - }; - interpret AccessX_Enable+AnyOfOrNone(all) { - action= LockControls(controls=AccessXKeys); - }; - interpret AccessX_Feedback_Enable+AnyOfOrNone(all) { - action= LockControls(controls=AccessXFeedback); - }; - interpret RepeatKeys_Enable+AnyOfOrNone(all) { - action= LockControls(controls=RepeatKeys); - }; - interpret SlowKeys_Enable+AnyOfOrNone(all) { - action= LockControls(controls=SlowKeys); - }; - interpret BounceKeys_Enable+AnyOfOrNone(all) { - action= LockControls(controls=BounceKeys); - }; - interpret StickyKeys_Enable+AnyOfOrNone(all) { - action= LockControls(controls=StickyKeys); - }; - interpret MouseKeys_Enable+AnyOfOrNone(all) { - action= LockControls(controls=MouseKeys); - }; - interpret MouseKeys_Accel_Enable+AnyOfOrNone(all) { - action= LockControls(controls=MouseKeysAccel); - }; - interpret Overlay1_Enable+AnyOfOrNone(all) { - action= LockControls(controls=none); - }; - interpret Overlay2_Enable+AnyOfOrNone(all) { - action= LockControls(controls=none); - }; - interpret AudibleBell_Enable+AnyOfOrNone(all) { - action= LockControls(controls=AudibleBell); - }; - interpret Terminate_Server+AnyOfOrNone(all) { - action= Terminate(); - }; - interpret Alt_L+AnyOfOrNone(all) { - action= SetMods(modifiers=Alt,clearLocks); - }; - interpret Alt_R+AnyOfOrNone(all) { - action= SetMods(modifiers=Alt,clearLocks); - }; - interpret Meta_L+AnyOfOrNone(all) { - action= SetMods(modifiers=Meta,clearLocks); - }; - interpret Meta_R+AnyOfOrNone(all) { - action= SetMods(modifiers=Meta,clearLocks); - }; - interpret Super_L+AnyOfOrNone(all) { - action= SetMods(modifiers=Super,clearLocks); - }; - interpret Super_R+AnyOfOrNone(all) { - action= SetMods(modifiers=Super,clearLocks); - }; - interpret Hyper_L+AnyOfOrNone(all) { - action= SetMods(modifiers=Hyper,clearLocks); - }; - interpret Hyper_R+AnyOfOrNone(all) { - action= SetMods(modifiers=Hyper,clearLocks); - }; - interpret Shift_L+AnyOfOrNone(all) { - action= SetMods(modifiers=Shift,clearLocks); - }; - interpret XF86Switch_VT_1+AnyOfOrNone(all) { - repeat= True; - action= SwitchScreen(screen=1,!same); - }; - interpret XF86Switch_VT_2+AnyOfOrNone(all) { - repeat= True; - action= SwitchScreen(screen=2,!same); - }; - interpret XF86Switch_VT_3+AnyOfOrNone(all) { - repeat= True; - action= SwitchScreen(screen=3,!same); - }; - interpret XF86Switch_VT_4+AnyOfOrNone(all) { - repeat= True; - action= SwitchScreen(screen=4,!same); - }; - interpret XF86Switch_VT_5+AnyOfOrNone(all) { - repeat= True; - action= SwitchScreen(screen=5,!same); - }; - interpret XF86Switch_VT_6+AnyOfOrNone(all) { - repeat= True; - action= SwitchScreen(screen=6,!same); - }; - interpret XF86Switch_VT_7+AnyOfOrNone(all) { - repeat= True; - action= SwitchScreen(screen=7,!same); - }; - interpret XF86Switch_VT_8+AnyOfOrNone(all) { - repeat= True; - action= SwitchScreen(screen=8,!same); - }; - interpret XF86Switch_VT_9+AnyOfOrNone(all) { - repeat= True; - action= SwitchScreen(screen=9,!same); - }; - interpret XF86Switch_VT_10+AnyOfOrNone(all) { - repeat= True; - action= SwitchScreen(screen=10,!same); - }; - interpret XF86Switch_VT_11+AnyOfOrNone(all) { - repeat= True; - action= SwitchScreen(screen=11,!same); - }; - interpret XF86Switch_VT_12+AnyOfOrNone(all) { - repeat= True; - action= SwitchScreen(screen=12,!same); - }; - interpret XF86LogGrabInfo+AnyOfOrNone(all) { - repeat= True; - action= Private(type=0x86,data[0]=0x50,data[1]=0x72,data[2]=0x47,data[3]=0x72,data[4]=0x62,data[5]=0x73,data[6]=0x00); - }; - interpret XF86LogWindowTree+AnyOfOrNone(all) { - repeat= True; - action= Private(type=0x86,data[0]=0x50,data[1]=0x72,data[2]=0x57,data[3]=0x69,data[4]=0x6e,data[5]=0x73,data[6]=0x00); - }; - interpret XF86Next_VMode+AnyOfOrNone(all) { - repeat= True; - action= Private(type=0x86,data[0]=0x2b,data[1]=0x56,data[2]=0x4d,data[3]=0x6f,data[4]=0x64,data[5]=0x65,data[6]=0x00); - }; - interpret XF86Prev_VMode+AnyOfOrNone(all) { - repeat= True; - action= Private(type=0x86,data[0]=0x2d,data[1]=0x56,data[2]=0x4d,data[3]=0x6f,data[4]=0x64,data[5]=0x65,data[6]=0x00); - }; - interpret ISO_Level5_Shift+AnyOfOrNone(all) { - action= SetMods(modifiers=LevelFive,clearLocks); - }; - interpret ISO_Level5_Latch+AnyOfOrNone(all) { - action= LatchMods(modifiers=LevelFive,clearLocks,latchToLock); - }; - interpret ISO_Level5_Lock+AnyOfOrNone(all) { - action= LockMods(modifiers=LevelFive); - }; - interpret Caps_Lock+AnyOfOrNone(all) { - action= LockMods(modifiers=Lock); - }; - interpret Any+Exactly(Lock) { - action= LockMods(modifiers=Lock); - }; - interpret Any+AnyOf(all) { - action= SetMods(modifiers=modMapMods,clearLocks); - }; - indicator "Caps Lock" { - whichModState= locked; - modifiers= Lock; - }; - indicator "Num Lock" { - whichModState= locked; - modifiers= NumLock; - }; - indicator "Scroll Lock" { - whichModState= locked; - modifiers= ScrollLock; - }; - indicator "Shift Lock" { - whichModState= locked; - modifiers= Shift; - }; - indicator "Group 2" { - groups= 0xfe; - }; - indicator "Mouse Keys" { - controls= mouseKeys; - }; -}; - -xkb_symbols "(unnamed)" { - - name[group1]="English (US)"; - - key { [ Escape ] }; - key { [ 1, exclam ] }; - key { [ 2, at ] }; - key { [ 3, numbersign ] }; - key { [ 4, dollar ] }; - key { [ 5, percent ] }; - key { [ 6, asciicircum ] }; - key { [ 7, ampersand ] }; - key { [ 8, asterisk ] }; - key { [ 9, parenleft ] }; - key { [ 0, parenright ] }; - key { [ minus, underscore ] }; - key { [ equal, plus ] }; - key { [ BackSpace, BackSpace ] }; - key { [ Tab, ISO_Left_Tab ] }; - key { - type= "ALPHABETIC", - symbols[Group1]= [ q, Q ] - }; - key { - type= "ALPHABETIC", - symbols[Group1]= [ w, W ] - }; - key { - type= "ALPHABETIC", - symbols[Group1]= [ e, E ] - }; - key { - type= "ALPHABETIC", - symbols[Group1]= [ r, R ] - }; - key { - type= "ALPHABETIC", - symbols[Group1]= [ t, T ] - }; - key { - type= "ALPHABETIC", - symbols[Group1]= [ y, Y ] - }; - key { - type= "ALPHABETIC", - symbols[Group1]= [ u, U ] - }; - key { - type= "ALPHABETIC", - symbols[Group1]= [ i, I ] - }; - key { - type= "ALPHABETIC", - symbols[Group1]= [ o, O ] - }; - key { - type= "ALPHABETIC", - symbols[Group1]= [ p, P ] - }; - key { [ bracketleft, braceleft ] }; - key { [ bracketright, braceright ] }; - key { [ Return ] }; - key { [ Control_L ] }; - key { - type= "ALPHABETIC", - symbols[Group1]= [ a, A ] - }; - key { - type= "ALPHABETIC", - symbols[Group1]= [ s, S ] - }; - key { - type= "ALPHABETIC", - symbols[Group1]= [ d, D ] - }; - key { - type= "ALPHABETIC", - symbols[Group1]= [ f, F ] - }; - key { - type= "ALPHABETIC", - symbols[Group1]= [ g, G ] - }; - key { - type= "ALPHABETIC", - symbols[Group1]= [ h, H ] - }; - key { - type= "ALPHABETIC", - symbols[Group1]= [ j, J ] - }; - key { - type= "ALPHABETIC", - symbols[Group1]= [ k, K ] - }; - key { - type= "ALPHABETIC", - symbols[Group1]= [ l, L ] - }; - key { [ semicolon, colon ] }; - key { [ apostrophe, dead_diaeresis, apostrophe, quotedouble ] }; - key { [ grave, asciitilde ] }; - key { [ Shift_L ] }; - key { [ backslash, bar ] }; - key { - type= "ALPHABETIC", - symbols[Group1]= [ z, Z ] - }; - key { - type= "ALPHABETIC", - symbols[Group1]= [ x, X ] - }; - key { - type= "ALPHABETIC", - symbols[Group1]= [ c, C ] - }; - key { - type= "ALPHABETIC", - symbols[Group1]= [ v, V ] - }; - key { - type= "ALPHABETIC", - symbols[Group1]= [ b, B ] - }; - key { - type= "ALPHABETIC", - symbols[Group1]= [ n, N ] - }; - key { - type= "ALPHABETIC", - symbols[Group1]= [ m, M ] - }; - key { [ comma, less ] }; - key { [ period, greater ] }; - key { [ slash, question ] }; - key { [ Shift_R ] }; - key { - type= "CTRL+ALT", - symbols[Group1]= [ KP_Multiply, KP_Multiply, KP_Multiply, KP_Multiply, XF86ClearGrab ] - }; - key { [ Alt_L, Meta_L ] }; - key { [ space ] }; - key { [ Caps_Lock ] }; - key { - type= "CTRL+ALT", - symbols[Group1]= [ F1, F1, F1, F1, XF86Switch_VT_1 ] - }; - key { - type= "CTRL+ALT", - symbols[Group1]= [ F2, F2, F2, F2, XF86Switch_VT_2 ] - }; - key { - type= "CTRL+ALT", - symbols[Group1]= [ F3, F3, F3, F3, XF86Switch_VT_3 ] - }; - key { - type= "CTRL+ALT", - symbols[Group1]= [ F4, F4, F4, F4, XF86Switch_VT_4 ] - }; - key { - type= "CTRL+ALT", - symbols[Group1]= [ F5, F5, F5, F5, XF86Switch_VT_5 ] - }; - key { - type= "CTRL+ALT", - symbols[Group1]= [ F6, F6, F6, F6, XF86Switch_VT_6 ] - }; - key { - type= "CTRL+ALT", - symbols[Group1]= [ F7, F7, F7, F7, XF86Switch_VT_7 ] - }; - key { - type= "CTRL+ALT", - symbols[Group1]= [ F8, F8, F8, F8, XF86Switch_VT_8 ] - }; - key { - type= "CTRL+ALT", - symbols[Group1]= [ F9, F9, F9, F9, XF86Switch_VT_9 ] - }; - key { - type= "CTRL+ALT", - symbols[Group1]= [ F10, F10, F10, F10, XF86Switch_VT_10 ] - }; - key { [ Num_Lock ] }; - key { [ Scroll_Lock ] }; - key { [ KP_Home, KP_7 ] }; - key { [ KP_Up, KP_8 ] }; - key { [ KP_Prior, KP_9 ] }; - key { - type= "CTRL+ALT", - symbols[Group1]= [ KP_Subtract, KP_Subtract, KP_Subtract, KP_Subtract, XF86Prev_VMode ] - }; - key { [ KP_Left, KP_4 ] }; - key { [ KP_Begin, KP_5 ] }; - key { [ KP_Right, KP_6 ] }; - key { - type= "CTRL+ALT", - symbols[Group1]= [ KP_Add, KP_Add, KP_Add, KP_Add, XF86Next_VMode ] - }; - key { [ KP_End, KP_1 ] }; - key { [ KP_Down, KP_2 ] }; - key { [ KP_Next, KP_3 ] }; - key { [ KP_Insert, KP_0 ] }; - key { [ KP_Delete, KP_Decimal ] }; - key { [ ISO_Level3_Shift ] }; - key { - type= "FOUR_LEVEL", - symbols[Group1]= [ less, greater, bar, brokenbar ] - }; - key { - type= "CTRL+ALT", - symbols[Group1]= [ F11, F11, F11, F11, XF86Switch_VT_11 ] - }; - key { - type= "CTRL+ALT", - symbols[Group1]= [ F12, F12, F12, F12, XF86Switch_VT_12 ] - }; - key { [ Katakana ] }; - key { [ Hiragana ] }; - key { [ Henkan_Mode ] }; - key { [ Hiragana_Katakana ] }; - key { [ Muhenkan ] }; - key { [ KP_Enter ] }; - key { [ Control_R ] }; - key { - type= "CTRL+ALT", - symbols[Group1]= [ KP_Divide, KP_Divide, KP_Divide, KP_Divide, XF86Ungrab ] - }; - key { - type= "PC_ALT_LEVEL2", - symbols[Group1]= [ Print, Sys_Req ] - }; - key { - type= "TWO_LEVEL", - symbols[Group1]= [ Alt_R, Meta_R ] - }; - key { [ Linefeed ] }; - key { [ Home ] }; - key { [ Up ] }; - key { [ Prior ] }; - key { [ Left ] }; - key { [ Right ] }; - key { [ End ] }; - key { [ Down ] }; - key { [ Next ] }; - key { [ Insert ] }; - key { [ Delete ] }; - key { [ XF86AudioMute ] }; - key { [ XF86AudioLowerVolume ] }; - key { [ XF86AudioRaiseVolume ] }; - key { [ XF86PowerOff ] }; - key { [ KP_Equal ] }; - key { [ plusminus ] }; - key { - type= "PC_CONTROL_LEVEL2", - symbols[Group1]= [ Pause, Break ] - }; - key { [ XF86LaunchA ] }; - key { [ KP_Decimal, KP_Decimal ] }; - key { [ Hangul ] }; - key { [ Hangul_Hanja ] }; - key { [ Super_L ] }; - key { [ Super_R ] }; - key { [ Menu ] }; - key { [ Cancel ] }; - key { [ Redo ] }; - key { [ SunProps ] }; - key { [ Undo ] }; - key { [ SunFront ] }; - key { [ XF86Copy ] }; - key { [ XF86Open ] }; - key { [ XF86Paste ] }; - key { [ Find ] }; - key { [ XF86Cut ] }; - key { [ Help ] }; - key { [ XF86MenuKB ] }; - key { [ XF86Calculator ] }; - key { [ XF86Sleep ] }; - key { [ XF86WakeUp ] }; - key { [ XF86Explorer ] }; - key { [ XF86Send ] }; - key { [ XF86Xfer ] }; - key { [ XF86Launch1 ] }; - key { [ XF86Launch2 ] }; - key { [ XF86WWW ] }; - key { [ XF86DOS ] }; - key { [ XF86ScreenSaver ] }; - key { [ XF86RotateWindows ] }; - key { [ XF86TaskPane ] }; - key { [ XF86Mail ] }; - key { [ XF86Favorites ] }; - key { [ XF86MyComputer ] }; - key { [ XF86Back ] }; - key { [ XF86Forward ] }; - key { [ XF86Eject ] }; - key { [ XF86Eject ] }; - key { [ XF86AudioNext ] }; - key { [ XF86AudioPlay, XF86AudioPause ] }; - key { [ XF86AudioPrev ] }; - key { [ XF86AudioStop, XF86Eject ] }; - key { [ XF86AudioRecord ] }; - key { [ XF86AudioRewind ] }; - key { [ XF86Phone ] }; - key { [ XF86Tools ] }; - key { [ XF86HomePage ] }; - key { [ XF86Reload ] }; - key { [ XF86Close ] }; - key { [ XF86ScrollUp ] }; - key { [ XF86ScrollDown ] }; - key { [ parenleft ] }; - key { [ parenright ] }; - key { [ XF86New ] }; - key { [ Redo ] }; - key { [ XF86Tools ] }; - key { [ XF86Launch5 ] }; - key { [ XF86Launch6 ] }; - key { [ XF86Launch7 ] }; - key { [ XF86Launch8 ] }; - key { [ XF86Launch9 ] }; - key { [ XF86AudioMicMute ] }; - key { [ XF86TouchpadToggle ] }; - key { [ XF86TouchpadOn ] }; - key { [ XF86TouchpadOff ] }; - key { [ Mode_switch ] }; - key { [ NoSymbol, Alt_L ] }; - key { [ NoSymbol, Meta_L ] }; - key { [ NoSymbol, Super_L ] }; - key { [ NoSymbol, Hyper_L ] }; - key { [ XF86AudioPlay ] }; - key { [ XF86AudioPause ] }; - key { [ XF86Launch3 ] }; - key { [ XF86Launch4 ] }; - key { [ XF86LaunchB ] }; - key { [ XF86Suspend ] }; - key { [ XF86Close ] }; - key { [ XF86AudioPlay ] }; - key { [ XF86AudioForward ] }; - key { [ Print ] }; - key { [ XF86WebCam ] }; - key { [ XF86AudioPreset ] }; - key { [ XF86Mail ] }; - key { [ XF86Messenger ] }; - key { [ XF86Search ] }; - key { [ XF86Go ] }; - key { [ XF86Finance ] }; - key { [ XF86Game ] }; - key { [ XF86Shop ] }; - key { [ Cancel ] }; - key { [ XF86MonBrightnessDown ] }; - key { [ XF86MonBrightnessUp ] }; - key { [ XF86AudioMedia ] }; - key { [ XF86Display ] }; - key { [ XF86KbdLightOnOff ] }; - key { [ XF86KbdBrightnessDown ] }; - key { [ XF86KbdBrightnessUp ] }; - key { [ XF86Send ] }; - key { [ XF86Reply ] }; - key { [ XF86MailForward ] }; - key { [ XF86Save ] }; - key { [ XF86Documents ] }; - key { [ XF86Battery ] }; - key { [ XF86Bluetooth ] }; - key { [ XF86WLAN ] }; - key { [ XF86UWB ] }; - key { [ XF86Next_VMode ] }; - key { [ XF86Prev_VMode ] }; - key { [ XF86MonBrightnessCycle ] }; - key { [ XF86BrightnessAuto ] }; - key { [ XF86DisplayOff ] }; - key { [ XF86WWAN ] }; - key { [ XF86RFKill ] }; - modifier_map Control { }; - modifier_map Shift { }; - modifier_map Shift { }; - modifier_map Mod1 { }; - modifier_map Lock { }; - modifier_map Mod2 { }; - modifier_map Mod5 { }; - modifier_map Control { }; - modifier_map Mod1 { }; - modifier_map Mod4 { }; - modifier_map Mod4 { }; - modifier_map Mod5 { }; - modifier_map Mod1 { }; - modifier_map Mod4 { }; - modifier_map Mod4 { }; -}; - -}; diff --git a/kitty/kitty.conf b/kitty/kitty.conf deleted file mode 100644 index 09b03da..0000000 --- a/kitty/kitty.conf +++ /dev/null @@ -1,53 +0,0 @@ -enable_audio_bell no -window_alert_on_bell no -background_opacity 0.7 -cursor_blink_interval 0 - -background #1d1f21 -foreground #c5c8c6 - -selection_background #b2ceee -selection_foreground #080808 - -selection_background #33467c -selection_foreground #c0caf5 -url_color #73daca -cursor #c0caf5 -cursor_text_color #1a1b26 - -# Tabs -active_tab_background #7aa2f7 -active_tab_foreground #16161e -inactive_tab_background #292e42 -inactive_tab_foreground #545c7e -#tab_bar_background #15161e - -# Windows -active_border_color #7aa2f7 -inactive_border_color #292e42 - -# normal -color0 #15161e -color1 #c94448 -color2 #9ece6a -color3 #e0af68 -color4 #7aa2f7 -color5 #bb9af7 -color6 #7dcfff -color7 #a9b1d6 - -# bright -color8 #414868 -color9 #f2201f -color10 #9ece6a -color11 #e0af68 -color12 #7aa2f7 -color13 #bb9af7 -color14 #7dcfff -color15 #c0caf5 - -# extended colors -color16 #ff9e64 -color17 #db4b4b - -shell zsh diff --git a/lib/default.nix b/lib/default.nix new file mode 100644 index 0000000..d8a7402 --- /dev/null +++ b/lib/default.nix @@ -0,0 +1,292 @@ +{ + inputs, + unstable, + self, + system, + permittedPackages, + dashNixAdditionalProps ? {}, + ... +}: let + defaultConfig = { + config = { + allowUnfree = true; + permittedInsecurePackages = permittedPackages; + }; + overlays = [ + inputs.cachy.overlays.default + inputs.nur.overlays.default + ]; + inherit system; + }; + mkPkgs = { + pkgs, + config, + }: let + overlays = + if (config ? overlays) + then config.overlays + else []; + comnbinedConfig = config // {overlays = overlays ++ defaultConfig.overlays;}; + in + import pkgs comnbinedConfig; +in rec { + mkNixos = { + root, + inputLib, + lib, + stablePkgs, + unstablePkgs, + stableMods, + unstableMods, + overridePkgs, + ... + }: + builtins.listToAttrs ( + map + (name: { + inherit name; + value = let + mod = root + /hosts/${name}/configuration.nix; + additionalNixosConfig = root + /hosts/${name}/hardware.nix; + additionalHomeConfig = root + /hosts/${name}/home.nix; + args = { + inherit + self + inputs + mod + additionalHomeConfig + system + root + dashNixAdditionalProps + lib + ; + stable = stablePkgs; + unstable = unstablePkgs; + pkgs = lib.mkForce ( + if overridePkgs + then stablePkgs + else unstablePkgs + ); + alternativePkgs = + if overridePkgs + then unstablePkgs + else stablePkgs; + hostName = name; + homeMods = + if overridePkgs + then unstableMods.home + else stableMods.home; + mkDashDefault = import ./override.nix {inherit lib;}; + }; + nixosMods = + if overridePkgs + then unstableMods.nixos + else stableMods.nixos; + in + inputLib.nixosSystem { + modules = + [ + {_module.args = args;} + mod + ] + ++ nixosMods + ++ lib.optional (builtins.pathExists additionalNixosConfig) additionalNixosConfig + ++ lib.optional (builtins.pathExists mod) mod; + }; + }) + ( + lib.lists.remove "" ( + lib.attrsets.mapAttrsToList (name: fType: + if fType == "directory" + then name + else "") ( + builtins.readDir (root + /hosts) + ) + ) + ) + ); + + mkHome = { + root, + lib, + stablePkgs, + unstablePkgs, + stableMods, + unstableMods, + overridePkgs, + ... + }: + builtins.listToAttrs ( + map + (name: { + inherit name; + value = let + mod = root + /homes/${name}/configuration.nix; + additionalHomeConfig = root + /homes/${name}/home.nix; + args = { + inherit + self + inputs + mod + additionalHomeConfig + system + root + dashNixAdditionalProps + lib + ; + stable = stablePkgs; + unstable = unstablePkgs; + pkgs = lib.mkForce ( + if overridePkgs + then stablePkgs + else unstablePkgs + ); + alternativePkgs = + if overridePkgs + then unstablePkgs + else stablePkgs; + userName = name; + mkDashDefault = import ./override.nix {inherit lib;}; + }; + homeMods = + if overridePkgs + then unstableMods.home + else stableMods.home; + in + inputs.home-manager.lib.homeManagerConfiguration + { + inherit (args) pkgs; + modules = + [ + {_module.args = args;} + mod + ] + ++ homeMods + ++ [ + ../home/common.nix + ../home/themes + ../home/sync.nix + ./foxwrappers.nix + ] + ++ lib.optional (builtins.pathExists mod) mod; + }; + }) + ( + lib.lists.remove "" ( + lib.attrsets.mapAttrsToList (name: fType: + if fType == "directory" + then name + else "") ( + builtins.readDir (root + /homes) + ) + ) + ) + ); + + /* + * + # buildSystems + + Builds system given a list of system names which are placed within your hosts/ directory. Note that each system has its own directory in hosts/ as well. + + A minimal configuration requires the file configuration.nix within each system directory, this will be the base config that is used across both NisOS and home-manager, specific optional files can also be added, hardware.nix for NisOS configuration and home.nix for home-manager configuration. + + The second parameter is the root of your configuration, which should be ./. in most cases. + + `root` + + : the root path of your configuration + + # Example usage + :::{.example} + ```nix + nixosConfigurations = buildSystems { root = ./.; }; + ``` + ::: + */ + # let + # paths = builtins.readDir ; + # names = lib.lists.remove "default" ( + # map (name: lib.strings.removeSuffix ".nix" name) (lib.attrsets.mapAttrsToList (name: _: name) paths) + # ); + + # in + buildFunc = func: { + root, + unstableBundle ? {}, + stableBundle ? {}, + overridePkgs ? false, + ... + }: let + defaultNixosMods = inputs: [ + inputs.lanzaboote.nixosModules.lanzaboote + inputs.nixos-wsl.nixosModules.default + inputs.home-manager.nixosModules.home-manager + inputs.stylix.nixosModules.stylix + inputs.disko.nixosModules.disko + inputs.superfreq.nixosModules.default + inputs.sops-nix.nixosModules.sops + ../base + ../home + ../modules + ]; + + defaultHomeMods = inputs: [ + inputs.anyrun.homeManagerModules.default + inputs.ironbar.homeManagerModules.default + inputs.oxicalc.homeManagerModules.default + inputs.oxishut.homeManagerModules.default + inputs.oxinoti.homeManagerModules.default + inputs.oxidash.homeManagerModules.default + inputs.oxipaste.homeManagerModules.default + inputs.oxirun.homeManagerModules.default + inputs.hyprdock.homeManagerModules.default + inputs.hyprland.homeManagerModules.default + inputs.reset.homeManagerModules.default + inputs.sops-nix.homeManagerModules.sops + inputs.dashvim.homeManagerModules.dashvim + ../modules + ]; + + unstableInput = unstableBundle.pkgs or inputs.unstable; + stableInput = stableBundle.pkgs or inputs.stable; + unstableConfig = unstableBundle.config or defaultConfig; + stableConfig = stableBundle.config or defaultConfig; + unstableInputs = (unstableBundle.inputs or {}) // inputs; + stableInputs = (stableBundle.inputs or {}) // inputs; + unstableMods = { + home = (defaultHomeMods unstableInputs) ++ (unstableBundle.mods.home or []); + nixos = (defaultNixosMods unstableInputs) ++ (unstableBundle.mods.nixos or []); + }; + stableMods = { + home = (defaultHomeMods stableInputs) ++ (stableBundle.mods.home or []); + nixos = (defaultNixosMods stableInputs) ++ (stableBundle.mods.nixos or []); + }; + + unstablePkgs = mkPkgs { + pkgs = unstableInput; + config = unstableConfig; + }; + stablePkgs = mkPkgs { + pkgs = stableInput; + config = stableConfig; + }; + inputLib = unstableInput.lib; + inherit (unstablePkgs) lib; + in + func { + inherit lib inputLib stablePkgs unstablePkgs stableMods unstableMods stableInputs unstableInputs root overridePkgs; + }; + + buildSystems = buildFunc mkNixos; + buildHome = buildFunc mkHome; + + buildIso = inputs.unstable.lib.nixosSystem { + specialArgs = { + inherit self inputs unstable; + }; + modules = [ + ../iso/configuration.nix + ]; + }; +} diff --git a/lib/foxextensions.nix b/lib/foxextensions.nix new file mode 100644 index 0000000..d2360ad --- /dev/null +++ b/lib/foxextensions.nix @@ -0,0 +1,59 @@ +{ + lib, + name, + ... +}: let + mkExtension = id: install_url: { + ${id} = { + inherit install_url; + installation_mode = "normal_installed"; + }; + }; +in { + options.mods.browser.${name} = { + darkreader = lib.mkOption { + default = true; + example = false; + type = lib.types.bool; + description = "Whether to enable darkreader"; + }; + extensions = lib.mkOption { + default = [ + (mkExtension "uBlock0@raymondhill.net" "https://addons.mozilla.org/firefox/downloads/latest/ublock-origin/latest.xpi") + (mkExtension "{a6c4a591-f1b2-4f03-b3ff-767e5bedf4e7}" "https://addons.mozilla.org/firefox/downloads/latest/user-agent-string-switcher/latest.xpi") + (mkExtension "{d7742d87-e61d-4b78-b8a1-b469842139fa}" "https://addons.mozilla.org/firefox/downloads/latest/vimium-ff/latest.xpi") + (mkExtension "firefox@ghostery.com" "https://addons.mozilla.org/firefox/downloads/latest/ghostery/latest.xpi") + (mkExtension "CanvasBlocker@kkapsner.de" "https://addons.mozilla.org/firefox/downloads/latest/canvasblocker/latest.xpi") + (mkExtension "jid1-KKzOGWgsW3Ao4Q@jetpack" "https://addons.mozilla.org/firefox/downloads/latest/i-dont-care-about-cookies/latest.xpi") + (mkExtension "keepassxc-browser@keepassxc.org" "https://addons.mozilla.org/firefox/downloads/latest/keepassxc-browser/latest.xpi") + (mkExtension "@react-devtools" "https://addons.mozilla.org/firefox/downloads/latest/react-devtools/latest.xpi") + (mkExtension "extension@redux.devtools" "https://addons.mozilla.org/firefox/downloads/latest/reduxdevtools/latest.xpi") + (mkExtension "{20a9bb38-ed7c-4faf-9aaf-7c5d241fd747}" "https://addons.mozilla.org/firefox/downloads/file/4524699/angular_devtools-1.0.37.xpi") + (mkExtension "private-relay@firefox.com" "https://addons.mozilla.org/firefox/downloads/latest/private-relay/latest.xpi") + ]; + example = [ + { + "78272b6fa58f4a1abaac99321d503a20@proton.me" = { + install_url = "https://addons.mozilla.org/en-US/firefox/downloads/latest/proton-pass/latest.xpi"; + installation_mode = "normal_installed"; + }; + } + ]; + type = with lib.types; listOf anything; + description = '' + List of extensions via attrsets: + ```nix + # id + # figure out the id via: + # nix run github:tupakkatapa/mozid -- 'https://addons.mozilla.org/en/firefox/addon/ublock-origin' + "uBlock0@raymondhill.net" = { + # install url + install_url = "https://addons.mozilla.org/firefox/downloads/latest/ublock-origin/latest.xpi"; + # method https://mozilla.github.io/policy-templates/#extensionsettings + installation_mode = "force_installed"; + }; + ``` + ''; + }; + }; +} diff --git a/lib/foxwrappers.nix b/lib/foxwrappers.nix new file mode 100644 index 0000000..e5c39a7 --- /dev/null +++ b/lib/foxwrappers.nix @@ -0,0 +1,43 @@ +# https://github.com/0xc000022070/zen-browser-flake/issues/9#issuecomment-2711057434 +{inputs, ...}: let + mkFirefoxModule = import "${inputs.home-manager.outPath}/modules/programs/firefox/mkFirefoxModule.nix"; +in { + imports = [ + (mkFirefoxModule { + modulePath = [ + "programs" + "zen-browser" + ]; + name = "Zen Browser"; + wrappedPackageName = "zen"; + unwrappedPackageName = "zen-unwrapped"; + visible = true; + platforms = { + linux = { + vendorPath = ".zen"; + configPath = ".zen"; + }; + darwin = { + configPath = "Library/Application Support/Zen"; + }; + }; + }) + (mkFirefoxModule { + modulePath = [ + "programs" + "librewolf-dashnix" + ]; + name = "LibreWolf"; + description = "LibreWolf is a privacy enhanced Firefox fork."; + wrappedPackageName = "librewolf"; + unwrappedPackageName = "librewolf-unwrapped"; + + platforms.linux = {configPath = ".librewolf";}; + platforms.darwin = { + configPath = "Library/Application Support/LibreWolf"; + }; + + enableBookmarks = false; + }) + ]; +} diff --git a/lib/importPkgs.nix b/lib/importPkgs.nix new file mode 100644 index 0000000..cfcd413 --- /dev/null +++ b/lib/importPkgs.nix @@ -0,0 +1,17 @@ +{ + inputs, + currentSystem, + permittedPackages, + pkgs, +}: +import pkgs { + system = currentSystem; + config = { + allowUnfree = true; + permittedInsecurePackages = permittedPackages; + }; + overlays = [ + inputs.nur.overlays.default + inputs.cachy.overlays.default + ]; +} diff --git a/lib/override.nix b/lib/override.nix new file mode 100644 index 0000000..4d222f8 --- /dev/null +++ b/lib/override.nix @@ -0,0 +1 @@ +{lib, ...}: value: lib.mkOverride 999 value diff --git a/lib/wm.nix b/lib/wm.nix new file mode 100644 index 0000000..416956a --- /dev/null +++ b/lib/wm.nix @@ -0,0 +1,446 @@ +let + browserName = config: + if (builtins.isString config.mods.homePackages.browser) + then config.mods.homePackages.browser + else if config.mods.homePackages.browser ? meta && config.mods.homePackages.browser.meta ? mainProgram + then config.mods.homePackages.browser.meta.mainProgram + else config.mods.homePackages.browser.pname; + mkSimpleBind = modKeys: key: command: args: { + inherit modKeys key command args; + }; + mkRepeatSimpleBind = modKeys: key: command: args: { + inherit modKeys key command args; + meta.hyprland.repeat = true; + }; + mkSimpleCustomBind = modKeys: key: niri: hyprland: args: { + inherit modKeys key args; + command = { + inherit niri hyprland; + }; + }; + mkRepeatCustomBind = modKeys: key: niri: hyprland: args: { + inherit modKeys key args; + command = { + inherit niri hyprland; + }; + meta.hyprland.repeat = true; + }; + mkBindWithDesc = modKeys: key: command: args: desc: + { + meta.niri.desc = desc; + } + // mkSimpleBind modKeys key command args; +in { + defaultWindowRules = { + niri = [ + '' + match app-id=r#"^org\.keepassxc\.KeePassXC$"# + match app-id=r#"^org\.gnome\.World\.Secrets$"# + + block-out-from "screen-capture" + '' + '' + match app-id=r#"^steam$"# + open-on-workspace "0" + '' + '' + geometry-corner-radius 12 + clip-to-geometry true + '' + ]; + hyprland = [ + # window rules + "match:class OxiCalc, float on" + "match:class winecfg.exe, float on" + "match:class copyq, float on" + "match:class swappy, center on" + "match:class steam, workspace 10 silent" + ]; + }; + + defaultStartup = config: { + all = [ + "systemctl --user import-environment" + "dbus-update-activation-environment --systemd --all" + "hyprctl setcursor ${config.mods.stylix.cursor.name} ${toString config.mods.stylix.cursor.size}" + # ensures the systemd service knows what "hyprctl" is :) + ( + if config.mods.gaming.gamemode + then "systemctl try-restart gamemoded.service --user" + else "" + ) + + # other programs + "${browserName config}" + ( + if config.mods.oxi.hyprdock.enable + then "hyprdock --server" + else "" + ) + ( + if config.mods.hypr.hyprpaper.enable + then "hyprpaper" + else "" + ) + ( + if config.mods.hypr.hyprland.useIronbar + then "ironbar" + else "" + ) + ( + if config.mods.oxi.oxipaste.enable + then "oxipaste_daemon" + else "" + ) + ( + if config.mods.oxi.oxinoti.enable + then "oxinoti" + else "" + ) + ]; + niri = [ + "XDG_CURRENT_DESKTOP=Niri" + "XDG_SESSION_DESKTOP=Niri" + "XDG_SESSION_TYPE=wayland" + ]; + hyprland = [ + "XDG_CURRENT_DESKTOP=Hyprland" + "XDG_SESSION_DESKTOP=Hyprland" + "XDG_SESSION_TYPE=wayland" + ]; + }; + + defaultEnv = config: { + all = { + GTK_CSD = "0"; + TERM = "kitty /bin/fish"; + HYPRCURSOR_THEME = config.mods.stylix.cursor.name; + HYPRCURSOR_SIZE = toString config.mods.stylix.cursor.size; + XCURSOR_THEME = config.mods.stylix.cursor.name; + XCURSOR_SIZE = toString config.mods.stylix.cursor.size; + QT_QPA_PLATFORM = "wayland"; + QT_QPA_PLATFORMTHEME = "qt5ct"; + QT_WAYLAND_FORCE_DPI = "96"; + QT_AUTO_SCREEN_SCALE_FACTOR = "0"; + QT_WAYLAND_DISABLE_WINDOWDECORATION = "1"; + QT_SCALE_FACTOR = "1"; + EDITOR = "neovide --novsync --nofork"; + + LIBVA_DRIVER_NAME = + if config.mods.gpu.nvidia.enable + then "nvidia" + else ""; + GBM_BACKEND = + if config.mods.gpu.nvidia.enable + then "nvidia-drm" + else ""; + __GLX_VENDOR_LIBRARY_NAME = + if config.mods.gpu.nvidia.enable + then "nvidia" + else ""; + }; + niri = {}; + hyprland = {}; + }; + + defaultBinds = config: [ + (mkSimpleBind ["Mod"] "1" "focusWorkspace" ["1"]) + (mkSimpleBind ["Mod"] "2" "focusWorkspace" ["2"]) + (mkSimpleBind ["Mod"] "3" "focusWorkspace" ["3"]) + (mkSimpleBind ["Mod"] "4" "focusWorkspace" ["4"]) + (mkSimpleBind ["Mod"] "5" "focusWorkspace" ["5"]) + (mkSimpleBind ["Mod"] "6" "focusWorkspace" ["6"]) + (mkSimpleBind ["Mod"] "7" "focusWorkspace" ["7"]) + (mkSimpleBind ["Mod"] "8" "focusWorkspace" ["8"]) + (mkSimpleBind ["Mod"] "9" "focusWorkspace" ["9"]) + (mkSimpleBind ["Mod"] "0" "focusWorkspace" ["10"]) + (mkSimpleBind ["Mod" "Shift"] "1" "moveToWorkspace" ["1"]) + (mkSimpleBind ["Mod" "Shift"] "2" "moveToWorkspace" ["2"]) + (mkSimpleBind ["Mod" "Shift"] "3" "moveToWorkspace" ["3"]) + (mkSimpleBind ["Mod" "Shift"] "4" "moveToWorkspace" ["4"]) + (mkSimpleBind ["Mod" "Shift"] "5" "moveToWorkspace" ["5"]) + (mkSimpleBind ["Mod" "Shift"] "6" "moveToWorkspace" ["6"]) + (mkSimpleBind ["Mod" "Shift"] "7" "moveToWorkspace" ["7"]) + (mkSimpleBind ["Mod" "Shift"] "8" "moveToWorkspace" ["8"]) + (mkSimpleBind ["Mod" "Shift"] "9" "moveToWorkspace" ["9"]) + (mkSimpleBind ["Mod" "Shift"] "0" "moveToWorkspace" ["10"]) + (mkSimpleBind ["Mod"] "B" "toggleFullscreen" []) + (mkSimpleBind ["Mod"] "V" "toggleFloating" []) + (mkSimpleBind ["Mod" "Shift"] "M" "quit" []) + (mkSimpleBind ["Mod"] "Left" "moveWindowLeft" []) + (mkSimpleBind ["Mod"] "Down" "moveWindowDown" []) + (mkSimpleBind ["Mod"] "Up" "moveWindowUp" []) + (mkSimpleBind ["Mod"] "Right" "moveWindowRight" []) + + (mkRepeatSimpleBind ["Mod"] "J" "moveFocusLeft" []) + (mkRepeatSimpleBind ["Mod"] "K" "moveFocusDown" []) + (mkRepeatSimpleBind ["Mod"] "L" "moveFocusUp" []) + (mkRepeatSimpleBind ["Mod"] "semicolon" "moveFocusRight" []) + + (mkBindWithDesc ["Mod"] "Q" "killActive" [] "Kill active window") + + (mkBindWithDesc ["Mod"] "N" "spawn" ["neovide"] "Open Neovide") + (mkBindWithDesc ["Mod"] "T" "spawn-sh" ["kitty" "-1"] "Open Kitty") + (mkBindWithDesc ["Mod" "Shift"] "L" "spawn" ["hyprlock"] "Lock screen") + + ( + if config.mods.yazi.enable + then mkBindWithDesc ["Mod"] "E" "spawn-sh" ["EDITOR='neovide --no-fork' kitty yazi"] "Open Yazi" + else {} + ) + ( + if config.mods.anyrun.enable + then mkBindWithDesc ["Mod"] "R" "spawn" ["anyrun"] "Open Anyrun" + else {} + ) + ( + if config.mods.oxi.oxirun.enable + then mkBindWithDesc ["Mod"] "R" "spawn" ["oxirun"] "Open OxiRun" + else {} + ) + ( + if config.mods.oxi.oxidash.enable + then mkBindWithDesc ["Mod"] "M" "spawn" ["oxidash"] "Open OxiDash" + else {} + ) + ( + if config.mods.oxi.oxicalc.enable + then mkBindWithDesc ["Mod"] "G" "spawn" ["oxicalc"] "Open Oxicalc" + else {} + ) + ( + if config.mods.oxi.oxishut.enable + then mkBindWithDesc ["Mod"] "D" "spawn" ["oxishut"] "Open OxiShut" + else {} + ) + ( + if config.mods.oxi.oxipaste.enable + then mkBindWithDesc ["Mod"] "A" "spawn" ["oxipaste"] "Open Oxipaste" + else {} + ) + ( + if config.mods.oxi.hyprdock.enable + then mkBindWithDesc ["Mod" "Shift"] "P" "spawn" ["hyprdock --gui"] "Open Hyprdock" + else {} + ) + ( + if config.mods.hypr.hyprlock.enable + then mkBindWithDesc ["Mod" "Shift" "Alt"] "L" "spawn-sh" ["playerctl -a pause & hyprlock & systemctl suspend"] "Lock and suspend" + else {} + ) + ( + if config.mods.hypr.hyprlock.enable + then mkBindWithDesc ["Mod" "Shift" "Alt"] "K" "spawn-sh" ["playerctl -a pause & hyprlock & systemctl hibernate"] "Lock and hibernate" + else {} + ) + + (mkBindWithDesc ["Mod"] "F" "spawn" ["${browserName config}"] "Open Browser") + ( + if + ( + browserName config == "firefox" || browserName config == "zen" + ) + then mkBindWithDesc ["Mod" "Shift"] "F" "spawn" ["${browserName config} -p special"] "Open Browser Special Profile" + else {} + ) + + (mkBindWithDesc ["Mod"] "S" "spawn-sh" [''grim -g "$(slurp)" - | wl-copy''] "Take Screenshot") + (mkBindWithDesc ["Mod" "Shift"] "S" "spawn-sh" [''grim -g "$(slurp)" - | satty -f -''] "Take Screenshot and edit") + + ( + if config.mods.scripts.audioControl + then { + key = "XF86AudioMute"; + command = "spawn-sh"; + args = ["audioControl mute"]; + meta.niri = { + allowWhileLocked = true; + desc = "Mute Audio"; + }; + } + else {} + ) + ( + if config.mods.scripts.audioControl + then { + key = "XF86AudioRaiseVolume"; + command = "spawn-sh"; + args = ["audioControl +5%"]; + meta.niri = { + allowWhileLocked = true; + desc = "Raise Audio Volume"; + }; + } + else {} + ) + ( + if config.mods.scripts.audioControl + then { + key = "XF86AudioLowerVolume"; + command = "spawn-sh"; + args = ["audioControl -5%"]; + meta.niri = { + allowWhileLocked = true; + desc = "Lower Audio Volume"; + }; + } + else {} + ) + { + key = "XF86AudioPlay"; + command = "spawn-sh"; + args = ["playerctl play-pause"]; + meta.niri = { + allowWhileLocked = true; + desc = "Play/Pause"; + }; + } + { + key = "XF86AudioNext"; + command = "spawn-sh"; + args = ["playerctl next"]; + meta.niri = { + allowWhileLocked = true; + desc = "Next Song"; + }; + } + { + key = "XF86AudioPrev"; + command = "spawn-sh"; + args = ["playerctl previous"]; + meta.niri = { + allowWhileLocked = true; + desc = "Previous Song"; + }; + } + ( + if config.mods.scripts.changeBrightness + then { + key = "XF86MonBrightnessDown"; + command = "spawn-sh"; + args = ["changeBrightness -10%"]; + meta.niri = { + allowWhileLocked = true; + desc = "Lower Brigthness"; + }; + } + else {} + ) + ( + if config.mods.scripts.changeBrightness + then { + key = "XF86MonBrightnessUp"; + command = "spawn-sh"; + args = ["changeBrightness +10%"]; + meta.niri = { + allowWhileLocked = true; + desc = "Raise Brigthness"; + }; + } + else {} + ) + + # Niri only keybinds + (mkSimpleCustomBind ["Mod"] "BracketLeft" "consume-or-expel-window-left" null []) + (mkSimpleCustomBind ["Mod"] "BracketRight" "consume-or-expel-window-right" null []) + (mkSimpleCustomBind ["Mod"] "Comma" "consume-window-into-column" null []) + (mkSimpleCustomBind ["Mod"] "Period" "expel-window-from-column" null []) + (mkSimpleCustomBind ["Mod"] "Y" "switch-preset-column-width" null []) + (mkSimpleCustomBind ["Mod"] "Tab" "focus-workspace-previous" null []) + (mkSimpleCustomBind ["Mod" "Shift"] "V" "switch-focus-between-floating-and-tiling" null []) + (mkSimpleCustomBind ["Mod" "Shift"] "B" "expand-column-to-available-width" null []) + (mkSimpleCustomBind ["Mod"] "U" "set-column-width" null ["-10%"]) + (mkSimpleCustomBind ["Mod"] "P" "set-column-width" null ["+10%"]) + (mkSimpleCustomBind ["Mod"] "O" "set-column-width" null ["50%"]) + (mkSimpleCustomBind ["Mod" "Shift"] "Minus" "set-window-height" null ["-10%"]) + (mkSimpleCustomBind ["Mod" "Shift"] "Equal" "set-window-height" null ["+10%"]) + (mkSimpleCustomBind ["Mod" "Ctrl"] "1" "move-column-to-workspace" null ["1"]) + (mkSimpleCustomBind ["Mod" "Ctrl"] "2" "move-column-to-workspace" null ["2"]) + (mkSimpleCustomBind ["Mod" "Ctrl"] "3" "move-column-to-workspace" null ["3"]) + (mkSimpleCustomBind ["Mod" "Ctrl"] "4" "move-column-to-workspace" null ["4"]) + (mkSimpleCustomBind ["Mod" "Ctrl"] "5" "move-column-to-workspace" null ["5"]) + (mkSimpleCustomBind ["Mod" "Ctrl"] "6" "move-column-to-workspace" null ["6"]) + (mkSimpleCustomBind ["Mod" "Ctrl"] "7" "move-column-to-workspace" null ["7"]) + (mkSimpleCustomBind ["Mod" "Ctrl"] "8" "move-column-to-workspace" null ["8"]) + (mkSimpleCustomBind ["Mod" "Ctrl"] "9" "move-column-to-workspace" null ["9"]) + (mkSimpleCustomBind ["Mod" "Ctrl"] "0" "move-column-to-workspace" null ["10"]) + (mkSimpleCustomBind ["Mod" "Shift"] "J" "focus-monitor-left" null []) + (mkSimpleCustomBind ["Mod" "Shift"] "semicolon" "focus-monitor-right" null []) + (mkSimpleCustomBind ["Mod" "Ctrl"] "J" "move-column-to-monitor-left" null []) + (mkSimpleCustomBind ["Mod" "Ctrl"] "semicolon" "move-column-to-monitor-right" null []) + (mkSimpleCustomBind ["Mod" "Shift"] "Slash" "show-hotkey-overlay" null []) + { + modKeys = ["Mod"]; + key = "W"; + command.niri = "toggle-overview"; + meta.niri = { + desc = "Overview"; + repeat = false; + }; + } + { + modKeys = ["Mod"]; + key = "Escape"; + command.niri = "toggle-keyboard-shortcuts-inhibit"; + meta.niri = { + allowInhibit = false; + }; + } + { + modKeys = ["Mod"]; + key = "WheelScrollUp"; + command.niri = "focus-workspace-up"; + meta.niri.cooldown = 150; + } + { + modKeys = ["Mod"]; + key = "WheelScrollDown"; + command.niri = "focus-workspace-down"; + meta.niri.cooldown = 150; + } + { + modKeys = ["Mod"]; + key = "WheelScrollRight"; + command.niri = "focus-column-right"; + meta.niri.cooldown = 150; + } + { + modKeys = ["Mod"]; + key = "WheelScrollLeft"; + command.niri = "focus-column-left"; + meta.niri.cooldown = 150; + } + + # Hyprland only keybinds + (mkSimpleCustomBind ["Mod"] "C" null "togglesplit" []) + (mkSimpleCustomBind ["Mod" "SHIFT" "ALT"] "1" null "movetoworkspacesilent" ["1"]) + (mkSimpleCustomBind ["Mod" "SHIFT" "ALT"] "2" null "movetoworkspacesilent" ["2"]) + (mkSimpleCustomBind ["Mod" "SHIFT" "ALT"] "3" null "movetoworkspacesilent" ["3"]) + (mkSimpleCustomBind ["Mod" "SHIFT" "ALT"] "4" null "movetoworkspacesilent" ["4"]) + (mkSimpleCustomBind ["Mod" "SHIFT" "ALT"] "5" null "movetoworkspacesilent" ["5"]) + (mkSimpleCustomBind ["Mod" "SHIFT" "ALT"] "6" null "movetoworkspacesilent" ["6"]) + (mkSimpleCustomBind ["Mod" "SHIFT" "ALT"] "7" null "movetoworkspacesilent" ["7"]) + (mkSimpleCustomBind ["Mod" "SHIFT" "ALT"] "8" null "movetoworkspacesilent" ["8"]) + (mkSimpleCustomBind ["Mod" "SHIFT" "ALT"] "9" null "movetoworkspacesilent" ["9"]) + (mkSimpleCustomBind ["Mod" "SHIFT" "ALT"] "0" null "movetoworkspacesilent" ["10"]) + (mkRepeatCustomBind ["Mod"] "U" null "resizeactive" ["-20" "0"]) + (mkRepeatCustomBind ["Mod"] "P" null "resizeactive" ["20" "0"]) + (mkRepeatCustomBind ["Mod"] "O" null "resizeactive" ["0" "-20"]) + (mkRepeatCustomBind ["Mod"] "I" null "resizeactive" ["0" "20"]) + (mkSimpleCustomBind ["Mod" "ALT"] "J" null "layoutmsg" ["preselect" "l"]) + (mkSimpleCustomBind ["Mod" "ALT"] "K" null "layoutmsg" ["preselect" "d"]) + (mkSimpleCustomBind ["Mod" "ALT"] "L" null "layoutmsg" ["preselect" "u"]) + (mkSimpleCustomBind ["Mod" "ALT"] "semicolon" null "layoutmsg" ["preselect" "r"]) + (mkSimpleCustomBind ["Mod" "ALT"] "H" null "layoutmsg" ["preselect" "n"]) + ( + if config.mods.hypr.hyprland.hyprspaceEnable + then { + modKeys = ["Mod"]; + key = "W"; + command.hyprland = "overview:toggle"; + args = []; + } + else {} + ) + ]; +} diff --git a/logo.svg b/logo.svg new file mode 100644 index 0000000..8c9526c --- /dev/null +++ b/logo.svg @@ -0,0 +1,293 @@ + + + +DashNixDashNix diff --git a/modules/conf.nix b/modules/conf.nix new file mode 100644 index 0000000..0e3a166 --- /dev/null +++ b/modules/conf.nix @@ -0,0 +1,170 @@ +{ + lib, + config, + options, + ... +}: { + options.conf = { + system = lib.mkOption { + default = "x86_64-linux"; + # no fisherprice unix support + type = with lib.types; (enum [ + "x86_64-linux" + "aarch64-linux" + "aarch64-linux-android" + ]); + example = "aarch64-linux"; + description = '' + System architecture. + ''; + }; + + systemLocalTime = lib.mkOption { + default = false; + example = true; + description = '' + System time for dualbooting + ''; + }; + + wsl = lib.mkOption { + default = false; + example = true; + description = '' + Runs Nix in wsl + ''; + }; + + secureBoot = lib.mkOption { + default = false; + example = true; + description = '' + enables secure boot. + Note: Secure boot is NOT reproducible + Here are the necessary steps: + + create your keys with sbctl -> sudo sbctl create-keys + + build with systemd once -> set this to false and build once + + build with secureBoot true + + verify that your keys are signed (note, only systemd and your generations should now be signed): sudo sbtcl verify + + enroll your keys (microsoft is necessary for windows dualboot support, leave it there): sudo sbctl enroll-keys --microsoft + + reboot with secureboot enabled + Note: Some motherboards have vendor specific keys for secure boot, this may not necessarily work with our self signed keys + You likely have to disable these vendor specific keys (example HP: sure boot) + ''; + }; + + useSystemdBootloader = lib.mkOption { + default = true; + example = false; + description = '' + use systemd bootloader. + ''; + }; + + cpu = lib.mkOption { + # TODO: how to enable arm? + default = "amd"; + type = with lib.types; (enum [ + "amd" + "intel" + ]); + example = "intel"; + description = '' + cpu microcode. + ''; + }; + + additionalBootKernalParams = lib.mkOption { + default = []; + example = []; + type = with lib.types; listOf str; + description = '' + additional kernelParams passed to bootloader + ''; + }; + + bootParams = lib.mkOption { + default = []; + example = ["resume=something"]; + type = with lib.types; listOf str; + description = '' + Boot params + ''; + }; + + kernelOverride = lib.mkOption { + default = null; + type = with lib.types; nullOr package; + description = '' + kernel to be used + Has no examples as doc complains... + #example = pkgs.linuxPackages_xanmod_latest; + ''; + }; + + username = lib.mkOption { + default = "DashNix"; + example = "pingpang"; + type = lib.types.str; + description = '' + The username. + ''; + }; + + timezone = lib.mkOption { + default = "Europe/Zurich"; + example = "Europe/Berlin"; + type = lib.types.str; + description = '' + The timezone. + ''; + }; + + locale = lib.mkOption { + default = "en_US.UTF-8"; + example = "de_DE.UTF-8"; + type = lib.types.str; + description = '' + The locale. + ''; + }; + + nixosConfigPath = lib.mkOption { + default = "/home/${config.conf.username}/gits/nixos/."; + example = "yourpath/."; + type = lib.types.str; + description = '' + The path for your build command, you can then simply type rebuild to switch to a new configuration. + ''; + }; + + systemStateVersion = lib.mkOption { + example = "24.11"; + default = "23.05"; + type = lib.types.str; + description = '' + System state version + ''; + }; + homeStateVersion = lib.mkOption { + default = "24.11"; + example = "23.05"; + type = lib.types.str; + description = '' + Home state version + ''; + }; + }; + + config = + (lib.optionalAttrs (options ? system.stateVersion) { + boot = { + kernelPackages = lib.mkIf (config.conf.kernelOverride != null) config.conf.kernel; + kernelParams = config.conf.additionalBootKernalParams; + }; + system.stateVersion = config.conf.systemStateVersion; + }) + // (lib.optionalAttrs (options ? home.stateVersion) { + home.stateVersion = config.conf.homeStateVersion; + }); +} diff --git a/modules/default.nix b/modules/default.nix new file mode 100644 index 0000000..683596a --- /dev/null +++ b/modules/default.nix @@ -0,0 +1,6 @@ +{ + imports = [ + ./programs + ./conf.nix + ]; +} diff --git a/modules/programs/acpid.nix b/modules/programs/acpid.nix new file mode 100644 index 0000000..228c402 --- /dev/null +++ b/modules/programs/acpid.nix @@ -0,0 +1,21 @@ +{ + lib, + config, + options, + ... +}: { + options.mods = { + acpid.enable = lib.mkOption { + default = false; + type = lib.types.bool; + example = true; + description = '' + Enables acpid. + ''; + }; + }; + + config = lib.mkIf config.mods.acpid.enable ( + lib.optionalAttrs (options ? virtualisation.virtualbox.host) {services.acpid.enable = true;} + ); +} diff --git a/modules/programs/anyrun.nix b/modules/programs/anyrun.nix new file mode 100644 index 0000000..b1b7922 --- /dev/null +++ b/modules/programs/anyrun.nix @@ -0,0 +1,145 @@ +{ + mkDashDefault, + lib, + config, + pkgs, + options, + inputs, + ... +}: { + options.mods.anyrun = { + enable = lib.mkOption { + default = false; + example = true; + type = lib.types.bool; + description = "Enables anyrun"; + }; + useDefaultConfig = lib.mkOption { + default = true; + example = false; + type = lib.types.bool; + description = '' + Use preconfigured anyrun config. + ''; + }; + customConfig = lib.mkOption { + default = {}; + example = {}; + type = with lib.types; attrsOf anything; + description = '' + Custom anyrun configuration. + Will be merged with default configuration if enabled. + ''; + }; + useDefaultCss = lib.mkOption { + default = true; + example = false; + type = lib.types.bool; + description = '' + Use preconfigured anyrun css. + ''; + }; + customCss = lib.mkOption { + default = ''''; + example = '' + #window { + border-radius: none; + } + ''; + type = lib.types.lines; + description = '' + Custom anyrun css. + Will be merged with default css if enabled. + ''; + }; + }; + + config = lib.mkIf config.mods.anyrun.enable ( + lib.optionalAttrs (options ? home.packages) { + programs.anyrun = lib.mkForce { + package = pkgs.anyrun; + enable = true; + config = + if config.mods.anyrun.useDefaultConfig + then + lib.mkMerge + [ + { + plugins = [ + inputs.anyrun.packages.${pkgs.system}.applications + inputs.anyrun.packages.${pkgs.system}.rink + inputs.anyrun.packages.${pkgs.system}.translate + inputs.anyrun.packages.${pkgs.system}.websearch + ]; + hideIcons = mkDashDefault false; + width = { + fraction = mkDashDefault 0.3; + }; + y = { + fraction = mkDashDefault 0.5; + }; + layer = mkDashDefault "overlay"; + hidePluginInfo = mkDashDefault true; + closeOnClick = mkDashDefault true; + } + config.mods.anyrun.customConfig + ] + else config.mods.anyrun.customConfig; + + extraCss = + if config.mods.anyrun.useDefaultCss + then + '' + #window { + border-radius: 10px; + background-color: transparent; + } + + box#main { + border-radius: 10px; + } + + list#main { + border-radius: 10px; + margin: 0px 10px 10px 10px; + } + + list#plugin { + border-radius: 10px; + } + + list#match { + border-radius: 10px; + } + + entry#entry { + border: 0; + border-radius: 10px; + margin: 10px 10px 0px 10px; + } + + label#match-desc { + font-size: 12px; + border-radius: 10px; + } + + label#match-title { + font-size: 12px; + border-radius: 10px; + } + + label#plugin { + font-size: 16px; + border-radius: 10px; + } + + * { + border-radius: 10px; + } + '' + + config.mods.anyrun.customCss + else config.mods.anyrun.customCss; + }; + } + ); +} diff --git a/modules/programs/basePackages.nix b/modules/programs/basePackages.nix new file mode 100644 index 0000000..1d1b2b9 --- /dev/null +++ b/modules/programs/basePackages.nix @@ -0,0 +1,132 @@ +{ + mkDashDefault, + config, + lib, + options, + pkgs, + inputs, + system, + ... +}: { + options.mods = { + basePackages = { + enable = lib.mkOption { + default = true; + example = false; + type = lib.types.bool; + description = '' + Enables default system packages. + ''; + }; + additionalPackages = lib.mkOption { + default = []; + example = [pkgs.openssl]; + type = with lib.types; listOf package; + description = '' + Additional packages to install. + Note that these are installed even if base packages is disabled, e.g. you can also use this as the only packages to install. + ''; + }; + specialPrograms = lib.mkOption { + default = {}; + example = {}; + type = with lib.types; attrsOf anything; + description = '' + special program configuration to be added which require programs.something notation. + ''; + }; + specialServices = lib.mkOption { + default = {}; + example = {}; + type = with lib.types; attrsOf anything; + description = '' + special services configuration to be added which require an services.something notation. + ''; + }; + }; + }; + + config = lib.optionalAttrs (options ? environment.systemPackages) { + environment.systemPackages = + if config.mods.basePackages.enable + then + with pkgs; + [ + inputs.statix.packages.${system}.default + adwaita-icon-theme + dbus + dconf + direnv + glib + gnome.nixos-gsettings-overrides + gsettings-desktop-schemas + gtk-layer-shell + gtk3 + gtk4 + gtk4-layer-shell + hicolor-icon-theme + icon-library + kdePackages.breeze-icons + kdePackages.breeze + kdePackages.qtstyleplugin-kvantum + libsForQt5.qtstyleplugin-kvantum + libadwaita + libxkbcommon + alejandra + openssl + seahorse + upower + xorg.xkbutils + sbctl + ] + ++ config.mods.basePackages.additionalPackages + else config.mods.basePackages.additionalPackages; + + gtk.iconCache.enable = mkDashDefault false; + services = + if config.mods.basePackages.enable + then + { + upower.enable = mkDashDefault true; + dbus = { + enable = mkDashDefault true; + }; + avahi = { + enable = mkDashDefault true; + nssmdns4 = mkDashDefault true; + openFirewall = mkDashDefault true; + }; + } + // config.mods.basePackages.specialServices + else config.mods.basePackages.specialServices; + + programs = + if config.mods.basePackages.enable + then + lib.mkMerge + [ + { + nix-ld = { + enable = mkDashDefault true; + libraries = with pkgs; [ + jdk + zlib + ]; + }; + direnv = { + package = mkDashDefault pkgs.direnv; + silent = mkDashDefault false; + loadInNixShell = mkDashDefault true; + direnvrcExtra = mkDashDefault ""; + nix-direnv = { + enable = mkDashDefault true; + package = mkDashDefault pkgs.nix-direnv; + }; + }; + gnupg.agent.enable = mkDashDefault true; + } + config.mods.basePackages.specialPrograms + ] + else config.mods.basePackages.specialPrograms; + }; +} diff --git a/modules/programs/bluetooth.nix b/modules/programs/bluetooth.nix new file mode 100644 index 0000000..f0e2ef1 --- /dev/null +++ b/modules/programs/bluetooth.nix @@ -0,0 +1,27 @@ +{ + mkDashDefault, + lib, + config, + options, + ... +}: { + options.mods = { + bluetooth.enable = lib.mkOption { + default = false; + type = lib.types.bool; + example = true; + description = '' + Enables bluetooth. + ''; + }; + }; + + config = lib.mkIf config.mods.bluetooth.enable ( + lib.optionalAttrs (options ? hardware.bluetooth) { + hardware.bluetooth = { + enable = mkDashDefault true; + powerOnBoot = mkDashDefault true; + }; + } + ); +} diff --git a/modules/programs/browser/brave.nix b/modules/programs/browser/brave.nix new file mode 100644 index 0000000..404fddd --- /dev/null +++ b/modules/programs/browser/brave.nix @@ -0,0 +1,22 @@ +{ + lib, + config, + options, + pkgs, + ... +}: { + options.mods.browser.brave = { + enable = lib.mkOption { + default = false; + example = true; + type = lib.types.bool; + description = "Enables brave"; + }; + # TODO configure brave + }; + config = lib.mkIf (config.mods.browser.brave.enable || config.mods.homePackages.browser == "brave") ( + lib.optionalAttrs (options ? home.packages) { + home.packages = with pkgs; [brave]; + } + ); +} diff --git a/modules/programs/browser/chromium.nix b/modules/programs/browser/chromium.nix new file mode 100644 index 0000000..5d48046 --- /dev/null +++ b/modules/programs/browser/chromium.nix @@ -0,0 +1,22 @@ +{ + lib, + config, + options, + pkgs, + ... +}: { + options.mods.browser.chromium = { + enable = lib.mkOption { + default = false; + example = true; + type = lib.types.bool; + description = "Enables chromium"; + }; + # TODO configure chromium + }; + config = lib.mkIf (config.mods.browser.chromium.enable || config.mods.homePackages.browser == "chromium") ( + lib.optionalAttrs (options ? home.packages) { + home.packages = with pkgs; [chromium]; + } + ); +} diff --git a/modules/programs/browser/default.nix b/modules/programs/browser/default.nix new file mode 100644 index 0000000..ade4ecf --- /dev/null +++ b/modules/programs/browser/default.nix @@ -0,0 +1,9 @@ +{ + imports = [ + ./brave.nix + ./chromium.nix + ./firefox.nix + ./librewolf.nix + ./zen.nix + ]; +} diff --git a/modules/programs/browser/firefox.nix b/modules/programs/browser/firefox.nix new file mode 100644 index 0000000..d93ac58 --- /dev/null +++ b/modules/programs/browser/firefox.nix @@ -0,0 +1,125 @@ +{ + lib, + dashNixAdditionalProps, + config, + options, + pkgs, + ... +}: let + name = "firefox"; +in { + imports = [ + (import ../../../lib/foxextensions.nix + {inherit lib dashNixAdditionalProps pkgs name;}) + ]; + options.mods.browser.${name} = { + enable = lib.mkOption { + default = false; + example = true; + type = lib.types.bool; + description = "Enables firefox"; + }; + configuration = lib.mkOption { + default = { + EnableTrackingProtection = { + Value = true; + Locked = true; + Cryptomining = true; + Fingerprinting = true; + }; + DisablePocket = true; + DisplayBookmarksToolbar = "never"; + DisplayMenuBar = "default-off"; + CaptivePortal = false; + DisableFirefoxStudies = true; + DisableTelemetry = true; + DisableFirefoxAccounts = false; + NoDefaultBookmarks = true; + OfferToSaveLogins = false; + OfferToSaveLoginsDefault = false; + PasswordManagerEnabled = false; + FirefoxHome = { + Search = true; + Pocket = false; + Snippets = false; + TopSites = true; + Highlights = false; + }; + UserMessaging = { + ExtensionRecommendations = false; + SkipOnboarding = true; + }; + }; + example = {}; + type = with lib.types; attrsOf anything; + description = "Firefox policy configuration. See https://mozilla.github.io/policy-templates/ for more information."; + }; + profiles = lib.mkOption { + default = [ + { + name = "${config.conf.username}"; + value = { + isDefault = true; + id = 0; + }; + } + { + name = "special"; + value = { + isDefault = false; + id = 1; + }; + } + ]; + example = [ + { + name = "custom"; + value = { + isDefault = true; + id = 0; + extensions.packages = [pkgs.nur.repos.rycee.firefox-addons.darkreader]; + }; + } + ]; + type = with lib.types; listOf (attrsOf anything); + description = "Firefox profiles"; + }; + }; + config = lib.mkIf (config.mods.browser.firefox.enable || config.mods.homePackages.browser == "firefox") ( + lib.optionalAttrs (options ? programs.firefox.profiles) { + stylix.targets.firefox.profileNames = + map ( + {name, ...}: + name + ) + config.mods.browser.firefox.profiles; + programs.firefox = { + enable = true; + package = + pkgs.wrapFirefox + pkgs.firefox-unwrapped + { + pname = "firefox"; + extraPolicies = + config.mods.browser.firefox.configuration + // { + ExtensionSettings = builtins.foldl' (acc: ext: acc // ext) {} (config.mods.browser.firefox.extensions + ++ ( + if config.mods.browser.firefox.darkreader + then [ + { + "addon@darkreader.org" = { + install_url = "file://${pkgs.callPackage ../../../patches/darkreader.nix {inherit lib dashNixAdditionalProps;}}/latest.xpi"; + installation_mode = "normal_installed"; + }; + } + ] + else [] + )); + }; + }; + profiles = builtins.listToAttrs config.mods.browser.firefox.profiles; + }; + } + ); +} diff --git a/modules/programs/browser/librewolf.nix b/modules/programs/browser/librewolf.nix new file mode 100644 index 0000000..fc74bf3 --- /dev/null +++ b/modules/programs/browser/librewolf.nix @@ -0,0 +1,119 @@ +{ + lib, + dashNixAdditionalProps, + config, + options, + pkgs, + ... +}: let + name = "librewolf"; +in { + imports = [ + (import ../../../lib/foxextensions.nix + {inherit lib dashNixAdditionalProps pkgs name;}) + ]; + options.mods.browser.${name} = { + enable = lib.mkOption { + default = false; + example = true; + type = lib.types.bool; + description = "Enables the librwolf browser"; + }; + configuration = lib.mkOption { + default = { + EnableTrackingProtection = { + Value = true; + Locked = true; + Cryptomining = true; + Fingerprinting = true; + }; + DisablePocket = true; + DisplayBookmarksToolbar = "never"; + DisplayMenuBar = "default-off"; + CaptivePortal = false; + DisableFirefoxStudies = true; + DisableTelemetry = true; + DisableFirefoxAccounts = false; + NoDefaultBookmarks = true; + OfferToSaveLogins = false; + OfferToSaveLoginsDefault = false; + PasswordManagerEnabled = false; + FirefoxHome = { + Search = true; + Pocket = false; + Snippets = false; + TopSites = true; + Highlights = false; + }; + UserMessaging = { + ExtensionRecommendations = false; + SkipOnboarding = true; + }; + }; + example = {}; + type = with lib.types; attrsOf anything; + description = "Librewolf policy configuration. See https://mozilla.github.io/policy-templates/ for more information."; + }; + profiles = lib.mkOption { + default = [ + { + name = "${config.conf.username}"; + value = { + isDefault = true; + id = 0; + }; + } + { + name = "special"; + value = { + isDefault = false; + id = 1; + }; + } + ]; + example = [ + { + name = "custom"; + value = { + isDefault = true; + id = 0; + extensions.packages = [pkgs.nur.repos.rycee.firefox-addons.darkreader]; + }; + } + ]; + type = with lib.types; listOf (attrsOf anything); + description = "Librewolf profiles"; + }; + }; + config = lib.mkIf (config.mods.browser.librewolf.enable || config.mods.homePackages.browser == "librewolf") ( + lib.optionalAttrs (options ? home.packages) { + programs.librewolf-dashnix = { + enable = true; + package = + pkgs.wrapFirefox + pkgs.librewolf-unwrapped + { + pname = "librewolf"; + extraPolicies = + config.mods.browser.librewolf.configuration + // { + ExtensionSettings = builtins.foldl' (acc: ext: acc // ext) {} (config.mods.browser.librewolf.extensions + ++ ( + if config.mods.browser.firefox.darkreader + then [ + { + "addon@darkreader.org" = { + install_url = "file://${pkgs.callPackage ../../../patches/darkreader.nix {inherit lib dashNixAdditionalProps;}}/latest.xpi"; + installation_mode = "normal_installed"; + }; + } + ] + else [] + )); + }; + }; + profiles = builtins.listToAttrs config.mods.browser.librewolf.profiles; + }; + } + ); +} diff --git a/modules/programs/browser/zen.nix b/modules/programs/browser/zen.nix new file mode 100644 index 0000000..db32900 --- /dev/null +++ b/modules/programs/browser/zen.nix @@ -0,0 +1,157 @@ +# credits to Voronind for darkreader config https://github.com/voronind-com/nix/blob/main/home/program/firefox/default.nix +{ + lib, + dashNixAdditionalProps, + config, + options, + inputs, + system, + pkgs, + ... +}: let + # at time of using this here, stylix might not be evaluated yet + # hence ensure it is by using base16 mkSchemeAttrs + base16 = pkgs.callPackage inputs.base16.lib {}; + scheme = base16.mkSchemeAttrs config.stylix.base16Scheme; + name = "zen"; +in { + imports = [ + (import ../../../lib/foxextensions.nix + {inherit lib dashNixAdditionalProps pkgs name;}) + ]; + options.mods.browser.${name} = { + enable = lib.mkOption { + default = false; + example = true; + type = lib.types.bool; + description = "Enables the zen browser"; + }; + configuration = lib.mkOption { + default = { + EnableTrackingProtection = { + Value = true; + Locked = true; + Cryptomining = true; + Fingerprinting = true; + }; + DisablePocket = true; + CaptivePortal = false; + DisableFirefoxStudies = true; + DisableTelemetry = true; + NoDefaultBookmarks = true; + PasswordManagerEnabled = false; + FirefoxHome = { + Search = true; + Pocket = false; + Snippets = false; + TopSites = true; + Highlights = false; + }; + UserMessaging = { + ExtensionRecommendations = false; + SkipOnboarding = true; + }; + "3rdparty".Extensions = { + "addon@darkreader.org" = { + theme = { + darkSchemeBackgroundColor = "#${scheme.base00}"; + darkSchemeTextColor = "#${scheme.base05}"; + }; + previewNewDesign = true; + }; + }; + }; + example = {}; + type = with lib.types; attrsOf anything; + description = "Zen policy configuration. See https://mozilla.github.io/policy-templates for more information."; + }; + profiles = lib.mkOption { + default = [ + { + name = "${config.conf.username}"; + value = { + settings = { + "zen.view.compact.hide-tabbar" = false; + "zen.view.compact.hide-toolbar" = true; + "zen.view.sidebar-expanded" = false; + "zen.view.use-single-toolbar" = false; + "zen.view.welcome-screen.seen" = true; + "zen.theme.accent-color" = "#b4bbff"; + "extensions.autoDisableScopes" = 0; + "cookiebanners.service.mode" = 2; + "widget.use-xdg-desktop-portal.file-picker" = 1; + }; + isDefault = true; + id = 0; + }; + } + { + name = "special"; + value = { + settings = { + "zen.view.compact.hide-tabbar" = false; + "zen.view.compact.hide-toolbar" = true; + "zen.view.sidebar-expanded" = false; + "zen.view.use-single-toolbar" = false; + "zen.view.welcome-screen.seen" = true; + "zen.theme.accent-color" = "#b4bbff"; + "extensions.autoDisableScopes" = 0; + "widget.use-xdg-desktop-portal.file-picker" = 1; + }; + isDefault = false; + id = 1; + }; + } + ]; + example = [ + { + name = "custom"; + value = { + settings = { + extensions.autoDisableScopes = 0; + }; + extensions.packages = [pkgs.nur.repos.rycee.firefox-addons.darkreader]; + isDefault = true; + id = 0; + }; + } + ]; + type = with lib.types; listOf (attrsOf anything); + description = "Zen profiles"; + }; + }; + config = lib.mkIf (config.mods.browser.zen.enable || config.mods.homePackages.browser == "zen") ( + (lib.optionalAttrs (options ? home.packages) { + programs.zen-browser = { + enable = true; + package = + pkgs.wrapFirefox + inputs.zen-browser.packages.${system}.zen-browser-unwrapped + { + pname = "zen-browser"; + extraPolicies = + config.mods.browser.zen.configuration + // { + ExtensionSettings = builtins.foldl' (acc: ext: acc // ext) {} (config.mods.browser.zen.extensions + ++ ( + if config.mods.browser.firefox.darkreader + then [ + { + "addon@darkreader.org" = { + install_url = "file://${pkgs.callPackage ../../../patches/darkreader.nix {inherit lib dashNixAdditionalProps;}}/latest.xpi"; + installation_mode = "normal_installed"; + }; + } + ] + else [] + )); + }; + }; + profiles = builtins.listToAttrs config.mods.browser.zen.profiles; + }; + }) + // (lib.optionalAttrs (options ? stylix.targets.zen-browser) { + stylix.targets.zen-browser.profileNames = lib.map (profile: profile.name) config.mods.browser.zen.profiles; + }) + ); +} diff --git a/modules/programs/clam.nix b/modules/programs/clam.nix new file mode 100644 index 0000000..e212529 --- /dev/null +++ b/modules/programs/clam.nix @@ -0,0 +1,60 @@ +{ + lib, + config, + options, + pkgs, + ... +}: { + options.mods.clam = { + enable = lib.mkOption { + default = true; + example = false; + type = lib.types.bool; + description = "Enables the clamav program and its daemon"; + }; + scanner = { + enable = lib.mkOption { + default = false; + example = true; + type = lib.types.bool; + description = "Enables the clamav scanner"; + }; + interval = lib.mkOption { + type = lib.types.str; + default = "*-*-* 04:00:00"; + description = '' + How often clamdscan is invoked. + By default this runs using 10 cores at most, be sure to run it at a time of low traffic. + ''; + }; + scanDirectories = lib.mkOption { + type = with lib.types; listOf str; + default = [ + "/home" + "/var/lib" + "/tmp" + "/etc" + "/var/tmp" + ]; + description = ''List of directories to scan''; + }; + }; + }; + config = lib.mkIf config.mods.clam.enable ( + lib.optionalAttrs (options ? services.clamav) { + services.clamav = { + daemon.enable = true; + updater.enable = true; + scanner = { + inherit (config.mods.clam.scanner) enable; + inherit (config.mods.clam.scanner) interval; + inherit (config.mods.clam.scanner) scanDirectories; + }; + }; + environment.systemPackages = [ + pkgs.clamav + ]; + } + // lib.optionalAttrs (options ? home.packages) {home.packages = with pkgs; [clamtk];} + ); +} diff --git a/modules/programs/coding.nix b/modules/programs/coding.nix new file mode 100644 index 0000000..5a22205 --- /dev/null +++ b/modules/programs/coding.nix @@ -0,0 +1,575 @@ +{ + mkDashDefault, + lib, + config, + pkgs, + options, + inputs, + system, + ... +}: let + font_family = "${config.mods.stylix.fonts.monospace.name}"; +in { + options.mods = { + coding = { + enable = lib.mkOption { + default = true; + example = false; + type = lib.types.bool; + description = '' + Enables coding packages. + ''; + }; + dashvim = lib.mkOption { + default = true; + example = false; + type = lib.types.bool; + description = '' + Enables dashvim package. + ''; + }; + jetbrains = lib.mkOption { + default = false; + example = true; + type = lib.types.bool; + description = '' + Enables jetbrains toolbox. + ''; + }; + vscodium = { + enable = lib.mkOption { + default = false; + example = true; + type = lib.types.bool; + description = '' + Enables vscodium. + ''; + }; + extensions = lib.mkOption { + default = []; + example = []; + type = with lib.types; listOf package; + description = "Extensions to be installed"; + }; + }; + penpot = lib.mkOption { + default = false; + example = true; + type = lib.types.bool; + description = "Enables penpot"; + }; + neovide = { + enable = lib.mkOption { + default = false; + example = true; + type = lib.types.bool; + description = "Enables neovide"; + }; + config = lib.mkOption { + default = { + font = { + size = 12; + normal = { + family = font_family; + style = ""; + }; + bold = { + family = font_family; + style = "ExtraBold"; + }; + italic = { + family = font_family; + style = "Italic"; + }; + bold_italic = { + family = font_family; + style = "Bold Italic"; + }; + }; + }; + example = {}; + type = with lib.types; attrsOf anything; + description = "Config for neovide"; + }; + }; + gh = { + enable = lib.mkOption { + default = true; + example = false; + type = lib.types.bool; + description = "Enables and configures gh"; + }; + config = lib.mkOption { + default = { + version = 1; + git_protocol = "ssh"; + editor = ""; + prompt = "enabled"; + prefer_editor_prompt = "disabled"; + pager = ""; + aliases = { + co = "pr checkout"; + }; + http_unix_socket = ""; + browser = ""; + }; + example = {}; + type = with lib.types; attrsOf anything; + description = "config for gh. Keep in mind, empty values refer to using environment variables"; + }; + hosts = lib.mkOption { + default = { + "github.com" = { + git_protocol = "ssh"; + users = { + ${config.mods.git.username} = ""; + }; + user = "${config.mods.git.username}"; + }; + }; + example = {}; + type = with lib.types; attrsOf anything; + description = "hosts for gh"; + }; + }; + useDefaultPackages = lib.mkOption { + default = true; + example = false; + type = lib.types.bool; + description = "Use default base packages (only additionalPackages are installed if false)"; + }; + additionalPackages = lib.mkOption { + default = []; + example = []; + type = with lib.types; listOf package; + description = "Additional packages to be installed"; + }; + languages = { + haskell = { + enable = lib.mkOption { + default = true; + example = false; + type = lib.types.bool; + description = '' + Enables haskell. + ''; + }; + packages = lib.mkOption { + default = with pkgs; [ + haskellPackages.cabal-install + ghc + haskellPackages.haskell-language-server + ]; + example = []; + type = with lib.types; listOf package; + description = '' + haskell packages + ''; + }; + }; + typst = { + enable = lib.mkOption { + default = true; + example = false; + type = lib.types.bool; + description = '' + Enables typst. + ''; + }; + packages = lib.mkOption { + default = with pkgs; [ + typst + tinymist + ]; + example = []; + type = with lib.types; listOf package; + description = '' + typst packages + ''; + }; + }; + go = { + enable = lib.mkOption { + default = true; + example = false; + type = lib.types.bool; + description = '' + Enables go. + ''; + }; + packages = lib.mkOption { + default = with pkgs; [ + go + gopls + ]; + example = []; + type = with lib.types; listOf package; + description = '' + Go packages + ''; + }; + }; + rust = { + enable = lib.mkOption { + default = true; + example = false; + type = lib.types.bool; + description = '' + Enables rust. + ''; + }; + packages = lib.mkOption { + default = with pkgs; [rustup]; + example = []; + type = with lib.types; listOf package; + description = '' + Rust packages + ''; + }; + }; + ts-js = { + enable = lib.mkOption { + default = true; + example = false; + type = lib.types.bool; + description = '' + Enables TS/JS. + ''; + }; + packages = lib.mkOption { + default = with pkgs; [ + nodejs_20 + deno + typescript + nodePackages.typescript-language-server + nodePackages.prettier + ]; + example = []; + type = with lib.types; listOf package; + description = '' + TS/JS packages + ''; + }; + }; + zig = { + enable = lib.mkOption { + default = true; + example = false; + type = lib.types.bool; + description = '' + Enables zig. + ''; + }; + packages = lib.mkOption { + default = with pkgs; [ + zig + zls + ]; + example = []; + type = with lib.types; listOf package; + description = '' + zig packages + ''; + }; + }; + java = { + enable = lib.mkOption { + default = true; + example = false; + type = lib.types.bool; + description = '' + Enables java. + ''; + }; + packages = lib.mkOption { + default = with pkgs; [ + gradle + maven + jdt-language-server + temurin-jre-bin + ]; + example = []; + type = with lib.types; listOf package; + description = '' + Java packages + ''; + }; + }; + dotnet = { + enable = lib.mkOption { + default = true; + example = false; + type = lib.types.bool; + description = '' + Enables C#/F#. + ''; + }; + packages = lib.mkOption { + default = with pkgs; [ + #.! + (with dotnetCorePackages; + combinePackages [ + sdk_8_0 + sdk_9_0 + ]) + csharpier + netcoredbg + fsharp + fsautocomplete + ]; + example = []; + type = with lib.types; listOf package; + description = '' + C#/F# packages + ''; + }; + }; + C-CPP = { + enable = lib.mkOption { + default = true; + example = false; + type = lib.types.bool; + description = '' + Enables C/C++. + ''; + }; + packages = lib.mkOption { + default = with pkgs; [ + bear + gdb + gcc + clang-tools + ]; + example = []; + type = with lib.types; listOf package; + description = '' + C/C++ packages + ''; + }; + }; + python = { + enable = lib.mkOption { + default = true; + example = false; + type = lib.types.bool; + description = '' + Enables python. + ''; + }; + packages = lib.mkOption { + default = with pkgs; [ + python3 + python312Packages.python-lsp-server + python312Packages.python-lsp-ruff + python312Packages.python-lsp-black + ]; + example = []; + type = with lib.types; listOf package; + description = '' + python packages + ''; + }; + }; + configFiles = { + enable = lib.mkOption { + default = true; + example = false; + type = lib.types.bool; + description = '' + Enables Json/toml/yaml etc. + ''; + }; + packages = lib.mkOption { + default = with pkgs; [ + #yaml + yamlfmt + yamllint + yaml-language-server + + #json + jq + ]; + example = []; + type = with lib.types; listOf package; + description = '' + packages for said filetypes + ''; + }; + }; + bash = { + enable = lib.mkOption { + default = true; + example = false; + type = lib.types.bool; + description = '' + Enables bash. + ''; + }; + packages = lib.mkOption { + default = with pkgs; [ + bash-language-server + shfmt + ]; + example = []; + type = with lib.types; listOf package; + description = '' + bash packages + ''; + }; + }; + html-css = { + enable = lib.mkOption { + default = true; + example = false; + type = lib.types.bool; + description = '' + Enables html/css. + ''; + }; + packages = lib.mkOption { + default = with pkgs; [ + tailwindcss + tailwindcss-language-server + # html-tidy + ]; + example = []; + type = with lib.types; listOf package; + description = '' + html/css packages + ''; + }; + }; + sql = { + enable = lib.mkOption { + default = true; + example = false; + type = lib.types.bool; + description = '' + Enables sql. + ''; + }; + packages = lib.mkOption { + default = with pkgs; [ + nodePackages.sql-formatter + sqls + ]; + example = []; + type = with lib.types; listOf package; + description = '' + sql packages + ''; + }; + }; + gleam = { + enable = lib.mkOption { + default = true; + example = false; + type = lib.types.bool; + description = '' + Enables gleam. + ''; + }; + packages = lib.mkOption { + default = with pkgs; [gleam]; + example = []; + type = with lib.types; listOf package; + description = '' + gleam packages + ''; + }; + }; + asm = { + enable = lib.mkOption { + default = true; + example = false; + type = lib.types.bool; + description = '' + Enables assembly. + ''; + }; + packages = lib.mkOption { + default = with pkgs; [asm-lsp]; + example = []; + type = with lib.types; listOf package; + description = '' + assembly packages + ''; + }; + }; + }; + }; + }; + + config = let + basePackages = with pkgs; [ + gitui + meson + ninja + tree-sitter + unzip + pkg-config + sqlite + plantuml + d-spy + tmux + tmate + inputs.compose.packages.${system}.default + ]; + in + lib.mkIf config.mods.coding.enable ( + lib.optionalAttrs (options ? home.packages) { + programs.dashvim = lib.mkIf config.mods.coding.dashvim { + enable = true; + inherit (config.mods.stylix) colorscheme; + }; + programs.vscode = lib.mkIf config.mods.coding.vscodium.enable { + enable = true; + package = mkDashDefault pkgs.vscodium; + profiles.default.extensions = config.mods.coding.vscodium.extensions; + }; + xdg.configFile = { + "neovide/config.toml" = lib.mkIf (config.mods.coding.dashvim || config.mods.coding.neovide.enable) { + source = + (pkgs.formats.toml {}).generate "neovide" + config.mods.coding.neovide.config; + }; + + "gh/config.yml" = lib.mkIf config.mods.coding.gh.enable { + source = + (pkgs.formats.yaml {}).generate "config" + config.mods.coding.gh.config; + }; + "gh/hosts.yml" = lib.mkIf config.mods.coding.gh.enable { + source = + (pkgs.formats.yaml {}).generate "hosts" + config.mods.coding.gh.hosts; + }; + }; + + home.packages = with pkgs; + [ + (lib.mkIf (config.mods.coding.dashvim || config.mods.coding.neovide.enable) neovide) + (lib.mkIf config.mods.coding.jetbrains jetbrains-toolbox) + (lib.mkIf config.mods.coding.penpot pkgs.penpot-desktop) + (lib.mkIf config.mods.coding.gh.enable gh) + ] + ++ config.mods.coding.additionalPackages + ++ (lib.lists.optionals config.mods.coding.useDefaultPackages basePackages) + ++ (lib.lists.optionals config.mods.coding.languages.haskell.enable config.mods.coding.languages.haskell.packages) + ++ (lib.lists.optionals config.mods.coding.languages.rust.enable config.mods.coding.languages.rust.packages) + ++ (lib.lists.optionals config.mods.coding.languages.go.enable config.mods.coding.languages.go.packages) + ++ (lib.lists.optionals config.mods.coding.languages.java.enable config.mods.coding.languages.java.packages) + ++ (lib.lists.optionals config.mods.coding.languages.dotnet.enable config.mods.coding.languages.dotnet.packages) + ++ (lib.lists.optionals config.mods.coding.languages.bash.enable config.mods.coding.languages.bash.packages) + ++ (lib.lists.optionals config.mods.coding.languages.C-CPP.enable config.mods.coding.languages.C-CPP.packages) + ++ (lib.lists.optionals config.mods.coding.languages.asm.enable config.mods.coding.languages.asm.packages) + ++ (lib.lists.optionals config.mods.coding.languages.sql.enable config.mods.coding.languages.sql.packages) + ++ (lib.lists.optionals config.mods.coding.languages.html-css.enable config.mods.coding.languages.html-css.packages) + ++ (lib.lists.optionals config.mods.coding.languages.configFiles.enable config.mods.coding.languages.configFiles.packages) + ++ (lib.lists.optionals config.mods.coding.languages.ts-js.enable config.mods.coding.languages.ts-js.packages) + ++ (lib.lists.optionals config.mods.coding.languages.typst.enable config.mods.coding.languages.typst.packages) + ++ (lib.lists.optionals config.mods.coding.languages.zig.enable config.mods.coding.languages.zig.packages) + ++ (lib.lists.optionals config.mods.coding.languages.gleam.enable config.mods.coding.languages.gleam.packages); + } + ); +} diff --git a/modules/programs/containers.nix b/modules/programs/containers.nix new file mode 100644 index 0000000..b62ee25 --- /dev/null +++ b/modules/programs/containers.nix @@ -0,0 +1,79 @@ +{ + mkDashDefault, + lib, + config, + options, + pkgs, + ... +}: { + options.mods.containers = { + variant = lib.mkOption { + default = ""; + example = "podman"; + type = lib.types.enum [ + "" + "podman" + "docker" + ]; + description = "Enables and configures a containerization solution: podman/docker"; + }; + podmanPackages = lib.mkOption { + default = with pkgs; [ + podman-tui + podman-compose + ]; + example = []; + type = with lib.types; listOf package; + description = "Podman packages"; + }; + dockerPackages = lib.mkOption { + default = with pkgs; [ + docker-compose + ]; + example = []; + type = with lib.types; listOf package; + description = "Docker packages"; + }; + combinedPackages = lib.mkOption { + default = with pkgs; [ + dive + ]; + example = []; + type = with lib.types; listOf package; + description = "Container packages"; + }; + }; + config = lib.optionalAttrs (options ? environment.systemPackages) { + environment.systemPackages = + (lib.lists.optionals ( + config.mods.containers.variant == "podman" + ) + config.mods.containers.podmanPackages) + ++ (lib.lists.optionals ( + config.mods.containers.variant == "docker" + ) + config.mods.containers.dockerPackages) + ++ (lib.lists.optionals ( + config.mods.containers.variant == "podman" || config.mods.containers.variant == "docker" + ) + config.mods.containers.combinedPackages); + virtualisation = + if (config.mods.containers.variant == "podman") + then { + containers.enable = true; + podman = { + enable = true; + dockerCompat = mkDashDefault true; + defaultNetwork.settings.dns_enabled = mkDashDefault true; + }; + } + else if (config.mods.containers.variant == "docker") + then { + containers.enable = true; + docker = { + enable = true; + }; + } + else {}; + }; +} diff --git a/modules/programs/default.nix b/modules/programs/default.nix new file mode 100644 index 0000000..08a4a2d --- /dev/null +++ b/modules/programs/default.nix @@ -0,0 +1,56 @@ +{ + imports = [ + ./acpid.nix + ./anyrun.nix + ./basePackages.nix + ./bluetooth.nix + ./browser + ./clam.nix + ./coding.nix + ./containers.nix + ./drives.nix + ./fancontrol.nix + ./fastfetch.nix + ./fish.nix + ./flatpak.nix + ./gaming.nix + ./gdm.nix + ./git.nix + ./gnome.nix + ./gnomeServices.nix + ./gpu.nix + ./greetd.nix + ./homePackages.nix + ./hypr + ./ironbar.nix + ./kde.nix + ./kdeConnect.nix + ./keepassxc.nix + ./kitty.nix + ./media.nix + ./mime.nix + ./ncspot.nix + ./nextcloud.nix + ./niri.nix + ./onedrive.nix + ./oxi + ./piper.nix + ./plymouth.nix + ./printing.nix + ./scripts.nix + ./sddm.nix + ./sops.nix + ./starship.nix + ./streamcontroller.nix + ./stylix.nix + ./superfreq.nix + ./supersonic.nix + ./sway.nix + ./teams.nix + ./virtmanager.nix + ./wm.nix + ./xkb.nix + ./xone.nix + ./yazi + ]; +} diff --git a/modules/programs/drives.nix b/modules/programs/drives.nix new file mode 100644 index 0000000..a631802 --- /dev/null +++ b/modules/programs/drives.nix @@ -0,0 +1,312 @@ +{ + lib, + config, + options, + ... +}: { + options.mods.drives = { + variant = lib.mkOption { + default = "manual"; + example = "disko"; + type = with lib.types; (enum [ + "manual" + "disko" + ]); + description = '' + Disk configuration type, either "manual" for regular NixOS disk configuration, + or "disko" for using disko to automatically format your drives. + ''; + }; + useSwap = lib.mkOption { + default = true; + example = false; + type = lib.types.bool; + description = '' + Use swap in drive. + ''; + }; + useEncryption = lib.mkOption { + default = false; + example = true; + type = lib.types.bool; + description = '' + Enables encryption. + !WARNING! + You need your root drive to be named root exactly! + Otherwise there will not be a root crypt! + !WARNING! + ''; + }; + homeAndRootFsTypes = lib.mkOption { + default = "ext4"; + example = "btrfs"; + type = with lib.types; (enum [ + "btrfs" + "ext2" + "ext3" + "ext4" + "exfat" + "f2fs" + "fat8" + "fat16" + "fat32" + "ntfs" + "xfs" + "zfs" + ]); + description = '' + Filesystem for the home and root partitions. + ''; + }; + defaultDrives = { + enable = lib.mkOption { + default = true; + example = false; + type = lib.types.bool; + description = '' + Use default drive config. + + - Manual variant + This config expects 4 different partitions on a single drive: + - boot partition with BOOT label and vfat format (filesystem configurable) + - swap partition with SWAP label + - root partition with ROOT label and ext4 format (filesystem configurable) + - home partition with HOME label and ext4 format (filesystem configurable) + - gpt disk format + + NOTE: Any different configuration must be done manually with this turned off. + + - Disko variant + This config creates 4 different partitions on a single drive: + - boot partition with 1GB size and vfat format + - swap partition with 32GB (size configurable) + - root partition with 30% size and ext4 format (size and filesystem configurable) + - home partition with 70%~ size and ext4 format (size and filesystem configurable) + - gpt disk format + + NOTE: Any different configuration must be done manually with this turned off. + ''; + }; + }; + extraDrives = lib.mkOption { + default = [ + ]; + example = [ + { + name = "drive2"; + drive = { + device = "/dev/disk/by-label/DRIVE2"; + fsType = "ext4"; + options = [ + "noatime" + "nodiratime" + "discard" + ]; + }; + } + ]; + type = with lib.types; listOf (attrsOf anything); + description = '' + Extra drives to add. + Please ensure to add variant compliant attrsets (manual/disko). + (The example is for manual variant, here an example for disko): + ```nix + drive2 = (lib.optionalAttrs config.mods.drives.defaultDrives.enable) { + device = "/dev/nvme1n1" + type = "disk"; + content = { + type = "gpt"; + partitions = { + drive2 = { + start = "0%"; + end = "100%"; + content = { + type = "filesystem"; + format = "ext4"; + mountpoint = "/drive2"; + mountOptions = [ + "noatime" + "nodiratime" + "discard" + ]; + }; + }; + }; + }; + }; + ``` + ''; + }; + disko = { + defaultDiskId = lib.mkOption { + default = "TODO"; + example = "/dev/nvme0n1"; + type = lib.types.str; + description = "The name, ID, UUID or similar for the default drive."; + }; + rootAmount = lib.mkOption { + default = 30; + example = 40; + type = lib.types.number; + description = "The percentage of the disk for root. (Home will take up the rest) (Only for disko)"; + }; + swapAmount = lib.mkOption { + default = 32; + example = 64; + type = lib.types.number; + description = "The amount of swap to use. (Only for disko)"; + }; + }; + }; + + config = lib.optionalAttrs (options ? fileSystems) { + boot.initrd.luks.devices = lib.mkIf (config.mods.drives.variant == "manual" && config.mods.drives.useEncryption) ( + builtins.listToAttrs ( + map ( + { + name, + drive, + }: { + cryptstorage.device = lib.mkIf (name != "root") drive?device; + cryptoroot.device = lib.mkIf (name == "root") drive?device; + } + ) + config.mods.drives.extraDrives + ) + ); + + fileSystems = lib.mkIf (config.mods.drives.variant == "manual" && !config.conf.wsl) ( + builtins.listToAttrs ( + map ( + { + name, + drive, + }: { + name = "/" + name; + value = drive; + } + ) + config.mods.drives.extraDrives + ) + // (lib.optionalAttrs config.mods.drives.defaultDrives.enable) { + "/" = { + device = "/dev/disk/by-label/ROOT"; + fsType = config.mods.drives.homeAndRootFsTypes; + options = [ + "noatime" + "nodiratime" + "discard" + ]; + }; + + "/boot" = { + device = "/dev/disk/by-label/BOOT"; + fsType = "vfat"; + options = [ + "rw" + "fmask=0022" + "dmask=0022" + "noatime" + ]; + }; + + "/home" = { + device = "/dev/disk/by-label/HOME"; + fsType = config.mods.drives.homeAndRootFsTypes; + options = [ + "noatime" + "nodiratime" + "discard" + ]; + }; + } + ); + + swapDevices = lib.mkIf (config.mods.drives.useSwap && config.mods.drives.variant == "manual" && !config.conf.wsl) [ + {device = "/dev/disk/by-label/SWAP";} + ]; + + disko.devices = lib.mkIf (config.mods.drives.variant == "disko") { + disk = + { + main = (lib.optionalAttrs config.mods.drives.defaultDrives.enable) { + device = "${config.mods.drives.disko.defaultDiskId}"; + type = "disk"; + content = { + type = "gpt"; + partitions = { + root = { + start = "${ + if config.mods.drives.useSwap + then builtins.toString config.mods.drives.disko.swapAmount + else builtins.toString 1 + }G"; + end = "${builtins.toString config.mods.drives.disko.rootAmount}%"; + content = { + type = "filesystem"; + format = config.mods.drives.homeAndRootFsTypes; + mountpoint = "/"; + mountOptions = [ + "noatime" + "nodiratime" + "discard" + ]; + }; + }; + plainSwap = { + start = "1G"; + end = "33G"; + content = { + type = "swap"; + discardPolicy = "both"; + resumeDevice = true; + }; + }; + boot = { + start = "0G"; + end = "1G"; + content = { + type = "filesystem"; + format = "vfat"; + mountpoint = "/boot"; + mountOptions = [ + "rw" + "fmask=0022" + "dmask=0022" + "noatime" + ]; + }; + }; + home = { + start = "${builtins.toString config.mods.drives.disko.rootAmount}%"; + end = "100%"; + content = { + type = "filesystem"; + format = config.mods.drives.homeAndRootFsTypes; + mountpoint = "/home"; + mountOptions = [ + "noatime" + "nodiratime" + "discard" + ]; + }; + }; + }; + }; + }; + } + // builtins.listToAttrs ( + map ( + { + name, + drive, + }: { + name = "/" + name; + value = drive; + } + ) + config.mods.drives.extraDrives + ); + }; + }; +} diff --git a/modules/programs/fancontrol.nix b/modules/programs/fancontrol.nix new file mode 100644 index 0000000..8abf24d --- /dev/null +++ b/modules/programs/fancontrol.nix @@ -0,0 +1,37 @@ +{ + lib, + pkgs, + config, + options, + ... +}: { + options.mods.fancontrol = { + enable = lib.mkOption { + default = false; + example = true; + type = lib.types.bool; + description = "Enables fancontrol-gui with needed drivers"; + }; + forceId = lib.mkOption { + default = null; + example = "force_id=0x8628"; + type = with lib.types; nullOr str; + description = "Modprobe options for the it87 driver. Information at: https://wiki.archlinux.org/title/Lm_sensors#Gigabyte_B250/Z370/B450M/B560M/B660M/Z690/B550_motherboards"; + }; + }; + config = lib.mkIf config.mods.fancontrol.enable ( + lib.optionalAttrs (options ? home.packages) { + home.packages = [pkgs.fancontrol-gui]; + } + // (lib.optionalAttrs (options ? boot.kernelModules) { + boot = { + kernelParams = ["acpi_enforce_resources=lax"]; + extraModulePackages = with config.boot.kernelPackages; [liquidtux it87]; + kernelModules = ["v4l2loopback" "it87"]; + extraModprobeConfig = lib.mkIf (config.mods.fancontrol.forceId != null) '' + options it87 ${config.mods.fancontrol.forceId} + ''; + }; + }) + ); +} diff --git a/modules/programs/fastfetch.nix b/modules/programs/fastfetch.nix new file mode 100644 index 0000000..9953d84 --- /dev/null +++ b/modules/programs/fastfetch.nix @@ -0,0 +1,75 @@ +{ + pkgs, + lib, + options, + config, + ... +}: { + options.mods.dashfetch = { + enable = lib.mkOption { + default = true; + example = false; + type = lib.types.bool; + description = "A custom configuration for fastfetch"; + }; + modules = lib.mkOption { + default = [ + "title" + "separator" + { + type = "os"; + key = "OS"; + format = "DashNix ({name} {version})"; + } + "host" + "kernel" + "uptime" + "packages" + "shell" + "display" + "de" + "wm" + "wmtheme" + "theme" + "icons" + "font" + "cursor" + "terminal" + "terminalfont" + "cpu" + "gpu" + "memory" + "swap" + "disk" + "localip" + "battery" + "poweradapter" + "locale" + "break" + "colors" + ]; + example = []; + type = with lib.types; listOf anything; + description = "modules for fastfetch"; + }; + }; + + config = lib.optionalAttrs (options ? home.packages) { + xdg.configFile."fastfetch/config.jsonc" = lib.mkIf config.mods.dashfetch.enable { + source = + (pkgs.formats.json {}).generate "config.jsonc" + { + "$schema" = "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json"; + logo = { + type = "kitty"; + source = ../../assets/logo2.png; + width = 35; + padding = { + top = 1; + }; + }; + modules = config.mods.dashfetch.modules; + }; + }; + }; +} diff --git a/modules/programs/fish.nix b/modules/programs/fish.nix new file mode 100644 index 0000000..1d8c8c8 --- /dev/null +++ b/modules/programs/fish.nix @@ -0,0 +1,190 @@ +{ + lib, + pkgs, + inputs, + config, + options, + ... +}: let + base16 = pkgs.callPackage inputs.base16.lib {}; + scheme = base16.mkSchemeAttrs config.stylix.base16Scheme; +in { + options.mods.fish = { + enable = lib.mkOption { + default = true; + example = false; + type = lib.types.bool; + description = "Enables fish"; + }; + additionalConfig = lib.mkOption { + default = ''''; + example = ''''; + type = lib.types.lines; + description = "Additional fish config"; + }; + useDefaultConfig = lib.mkOption { + default = true; + example = false; + type = lib.types.bool; + description = "Use default fish config"; + }; + }; + config = lib.mkIf config.mods.fish.enable ( + lib.optionalAttrs (options ? programs.fish) { + programs.fish = { + enable = true; + shellInit = + if config.mods.fish.useDefaultConfig + then + '' + if status is-interactive + # Commands to run in interactive sessions can go here + end + + # ============================================================================= + # + # Utility functions for zoxide. + # + + export NIX_PATH="$NIX_PATH:${config.conf.nixosConfigPath}" + + set EDITOR "neovide --no-fork" + + alias rebuild='nh os switch -- --accept-flake-config' + alias update='nix flake update --flake $FLAKE --accept-flake-config' + alias gcli='gh' + abbr --add ls 'lsd' + abbr --add :q 'exit' + abbr --add gh 'git push origin' + abbr --add gu 'git push upstream' + abbr --add gl 'git pull origin' + abbr --add gm 'git commit -m' + abbr --add ga "git add -A" + abbr --add gc "git commit --amend --no-edit" + abbr --add g+ 'bear -- g++ -Wextra -Werror -std=c++20' + abbr --add s "kitty +kitten ssh" + abbr --add zl 'z "" ' + abbr --add nv 'neovide' + abbr --add cr 'cargo run' + abbr --add grep 'rg' + abbr --add cat 'bat' + abbr --add find 'fd' + abbr --add rm 'rip' + abbr --add cp 'cpz' + abbr --add cd 'z' + abbr --add y 'yazi' + + set fish_color_autosuggestion '${scheme.base07}' + set fish_color_param '${scheme.base06}' + set fish_color_operator '${scheme.base0E}' + + set fish_greeting + # pwd based on the value of _ZO_RESOLVE_SYMLINKS. + function __zoxide_pwd + builtin pwd -L + end + + # A copy of fish's internal cd function. This makes it possible to use + # `alias cd=z` without causing an infinite loop. + if ! builtin functions --query __zoxide_cd_internal + if builtin functions --query cd + builtin functions --copy cd __zoxide_cd_internal + else + alias __zoxide_cd_internal='builtin cd' + end + end + + # cd + custom logic based on the value of _ZO_ECHO. + function __zoxide_cd + __zoxide_cd_internal $argv + end + + # ============================================================================= + # + # Hook configuration for zoxide. + # + + # Initialize hook to add new entries to the database. + function __zoxide_hook --on-variable PWD + test -z "$fish_private_mode" + and command zoxide add -- (__zoxide_pwd) + end + + # ============================================================================= + # + # When using zoxide with --no-cmd, alias these internal functions as desired. + # + + if test -z $__zoxide_z_prefix + set __zoxide_z_prefix 'z!' + end + set __zoxide_z_prefix_regex ^(string escape --style=regex $__zoxide_z_prefix) + + # Jump to a directory using only keywords. + function __zoxide_z + set -l argc (count $argv) + if test $argc -eq 0 + __zoxide_cd $HOME + else if test "$argv" = - + __zoxide_cd - + else if test $argc -eq 1 -a -d $argv[1] + __zoxide_cd $argv[1] + else if set -l result (string replace --regex $__zoxide_z_prefix_regex \'\' $argv[-1]); and test -n $result + __zoxide_cd $result + else + set -l result (command zoxide query --exclude (__zoxide_pwd) -- $argv) + and __zoxide_cd $result + end + end + + # Completions. + function __zoxide_z_complete + set -l tokens (commandline --current-process --tokenize) + set -l curr_tokens (commandline --cut-at-cursor --current-process --tokenize) + + if test (count $tokens) -le 2 -a (count $curr_tokens) -eq 1 + # If there are < 2 arguments, use `cd` completions. + complete --do-complete "\'\' "(commandline --cut-at-cursor --current-token) | string match --regex '.*/$' + else if test (count $tokens) -eq (count $curr_tokens); and ! string match --quiet --regex $__zoxide_z_prefix_regex. $tokens[-1] + # If the last argument is empty and the one before doesn't start with + # $__zoxide_z_prefix, use interactive selection. + set -l query $tokens[2..-1] + set -l result (zoxide query --exclude (__zoxide_pwd) --interactive -- $query) + and echo $__zoxide_z_prefix$result + commandline --function repaint + end + end + complete --command __zoxide_z --no-files --arguments '(__zoxide_z_complete)' + + # Jump to a directory using interactive search. + function __zoxide_zi + set -l result (command zoxide query --interactive -- $argv) + and __zoxide_cd $result + end + + # ============================================================================= + # + # Commands for zoxide. Disable these using --no-cmd. + # + + abbr --erase z &>/dev/null + alias z=__zoxide_z + + abbr --erase zi &>/dev/null + alias zi=__zoxide_zi + + # ============================================================================= + # + # To initialize zoxide, add this to your configuration (usually + # ~/.config/fish/config.fish): + # + # zoxide init fish | source + + direnv hook fish | source + '' + + config.mods.fish.additionalConfig + else config.mods.fish.additionalConfig; + }; + } + ); +} diff --git a/modules/programs/flatpak.nix b/modules/programs/flatpak.nix new file mode 100644 index 0000000..68ec2da --- /dev/null +++ b/modules/programs/flatpak.nix @@ -0,0 +1,21 @@ +{ + lib, + config, + options, + pkgs, + ... +}: { + options.mods.flatpak = { + enable = lib.mkOption { + default = false; + example = true; + type = lib.types.bool; + description = "Enables the flatpak package manager"; + }; + }; + config = lib.mkIf config.mods.flatpak.enable ( + lib.optionalAttrs (options ? environment.systemPackages) { + environment.systemPackages = [pkgs.flatpak]; + } + ); +} diff --git a/modules/programs/gaming.nix b/modules/programs/gaming.nix new file mode 100644 index 0000000..6c3eb0a --- /dev/null +++ b/modules/programs/gaming.nix @@ -0,0 +1,149 @@ +{ + mkDashDefault, + lib, + config, + options, + pkgs, + ... +}: { + options.mods.gaming = { + enable = lib.mkOption { + default = false; + example = true; + type = lib.types.bool; + description = "Enabled gaming related features."; + }; + tools = lib.mkOption { + default = with pkgs; [ + protonplus + gamescope + gamemode + steam + # TODO broken + # lutris + wineWowPackages.stable + adwsteamgtk + heroic + mangohud + nexusmods-app + steamtinkerlaunch + winetricks + ]; + example = []; + type = with lib.types; listOf package; + description = "Install gaming related packages"; + }; + kernel = lib.mkOption { + default = false; + example = true; + type = lib.types.bool; + description = '' + Whether to use the CachyOS kernel. + WARNING: This is a manual compiled kernel! + (Please also ensure you use your own input hash for the source as the compilation can often fail due to temporary broken changes.) + ''; + }; + steam = lib.mkOption { + default = true; + example = false; + type = lib.types.bool; + description = "Whether to use steam"; + }; + gamemode = lib.mkOption { + default = true; + example = false; + type = lib.types.bool; + description = "Whether to use gamemode"; + }; + pinCores = lib.mkOption { + default = "false"; + example = "true"; + type = lib.types.str; + description = "Pin Cores gamemode config"; + }; + parkCores = lib.mkOption { + default = "false"; + example = "true"; + type = lib.types.str; + description = "Park Cores gamemode config"; + }; + gpuOptimization = lib.mkOption { + default = true; + example = false; + type = lib.types.bool; + description = "Whether to use GPU performance setting. NOTE: this is at your own risk!"; + }; + gpuDevice = lib.mkOption { + default = 0; + example = 1; + type = lib.types.int; + description = "Your gpu device.(Physical id of lshw)"; + }; + scheduler = lib.mkOption { + default = "scx_rustland"; + example = "scx_rusty"; + type = with lib.types; + nullOr (enum [ + "scx_bpfland" + "scx_chaos" + "scx_cosmos" + "scx_central" + "scx_flash" + "scx_flatcg" + "scx_lavd" + "scx_layered" + "scx_mitosis" + "scx_nest" + "scx_p2dq" + "scx_pair" + "scx_prev" + "scx_qmap" + "scx_rlfifo" + "scx_rustland" + "scx_rusty" + "scx_sdt" + "scx_simple" + "scx_tickless" + "scx_userland" + "scx_wd40" + ]); + description = "Scheduler to use, null disables this"; + }; + }; + config = lib.mkIf config.mods.gaming.enable ( + lib.optionalAttrs (options ? environment.systemPackages) { + environment.systemPackages = config.mods.gaming.tools; + boot.kernelPackages = lib.mkForce pkgs.cachyosKernels.linuxPackages-cachyos-latest; + services.scx = lib.mkIf (config.mods.gaming.scheduler != null) { + enable = true; + inherit (config.mods.gaming) scheduler; + }; + + programs = { + steam.enable = mkDashDefault config.mods.gaming.steam; + gamemode.enable = true; + gamemode = { + settings = { + general = { + desiredgov = mkDashDefault "performance"; + }; + cpu = { + pin_cores = mkDashDefault config.mods.gaming.pinCores; + park_cores = mkDashDefault config.mods.gaming.parkCores; + }; + gpu = lib.mkIf config.mods.gaming.gpuOptimization { + apply_gpu_optimisations = mkDashDefault "accept-responsibility"; + gpu_device = mkDashDefault config.mods.gaming.gpuDevice; + amd_performance_level = mkDashDefault "high"; + nv_powermizer_mode = mkDashDefault 1; + }; + custom = { + start = mkDashDefault "notify-send -a 'Gamemode' 'Optimizations activated'"; + end = mkDashDefault "notify-send -a 'Gamemode' 'Optimizations deactivated'"; + }; + }; + }; + }; + } + ); +} diff --git a/modules/programs/gdm.nix b/modules/programs/gdm.nix new file mode 100644 index 0000000..343c6cd --- /dev/null +++ b/modules/programs/gdm.nix @@ -0,0 +1,33 @@ +{ + lib, + options, + config, + ... +}: { + options.mods.gdm = { + enable = lib.mkOption { + default = false; + example = true; + type = lib.types.bool; + description = "Enables the gdm displayManager"; + }; + extraOptions = lib.mkOption { + default = {}; + example = {}; + type = with lib.types; attrsOf anything; + description = "Extra options to be applied to the gnome config"; + }; + }; + + config = lib.mkIf config.mods.gdm.enable ( + lib.optionalAttrs (options ? services.xserver.displayManager.gdm) ( + { + services.xserver.enable = true; + services.xserver.displayManager.gdm.enable = true; + } + // { + services.xserver.displayManager.gdm = config.mods.gdm.extraOptions; + } + ) + ); +} diff --git a/modules/programs/git.nix b/modules/programs/git.nix new file mode 100644 index 0000000..57c1623 --- /dev/null +++ b/modules/programs/git.nix @@ -0,0 +1,64 @@ +{ + lib, + config, + options, + ... +}: { + options.mods.git = { + username = lib.mkOption { + default = ""; + example = "globi"; + type = lib.types.str; + description = "Git user name"; + }; + email = lib.mkOption { + default = ""; + example = "globi@globus.glob"; + type = lib.types.str; + description = "Git email"; + }; + additionalConfig = lib.mkOption { + default = { + merge = { + tool = "nvimdiff"; + }; + diff = { + tool = "nvimdiff"; + }; + pull.rebase = true; + }; + example = { + pull.rebase = false; + }; + type = with lib.types; attrsOf anything; + description = "Additional git config"; + }; + sshConfig = lib.mkOption { + default = ""; + example = '' + Host github.com + ${ + if (config ? sops.secrets && config.sops.secrets ? hub.path) + then "IdentityFile ${config.sops.secrets.hub.path}" + else "" + } + ''; + type = lib.types.lines; + description = "ssh configuration (keys for git)"; + }; + }; + config = lib.optionalAttrs (options ? programs.git && options ? home.file) { + programs.git = { + enable = true; + settings = + { + user = { + name = config.mods.git.username; + inherit (config.mods.git) email; + }; + } + // config.mods.git.additionalConfig; + }; + home.file.".ssh/config".text = config.mods.git.sshConfig; + }; +} diff --git a/modules/programs/gnome.nix b/modules/programs/gnome.nix new file mode 100644 index 0000000..faf2b1e --- /dev/null +++ b/modules/programs/gnome.nix @@ -0,0 +1,77 @@ +{ + lib, + options, + config, + pkgs, + ... +}: { + options.mods.gnome = { + enable = lib.mkOption { + default = false; + example = true; + type = lib.types.bool; + description = "Enables the Gnome desktop environment"; + }; + useDefaultOptions = lib.mkOption { + default = true; + example = false; + type = lib.types.bool; + description = "Use default options provided by module. If disabled, will only apply extraOptions."; + }; + extraOptions = lib.mkOption { + default = {}; + example = {}; + type = with lib.types; attrsOf anything; + description = "Extra options to be applied to the gnome config"; + }; + extraDconf = lib.mkOption { + default = {}; + example = {}; + type = with lib.types; attrsOf anything; + description = "Extra options to be applied to the dconf config"; + }; + }; + + config = let + defaultExtensions = with pkgs.gnomeExtensions; [ + blur-my-shell + dash-to-dock + tray-icons-reloaded + ]; + in + lib.mkIf config.mods.gnome.enable ( + lib.optionalAttrs (options ? services.xserver.desktopManager.gnome) ( + { + services.xserver = { + enable = true; + desktopManager.gnome.enable = true; + }; + } + // lib.mkIf config.mods.gnome.useDefaultOptions {environment.systemPackages = defaultExtensions;} + // { + services.xserver.desktopManager.gnome = config.mods.gnome.extraOptions; + } + ) + // lib.optionalAttrs (options ? dconf) ( + lib.mkIf config.mods.gnome.useDefaultOptions { + dconf = { + enable = true; + settings = { + "org/gnome/shell" = { + disable-user-extensions = false; + enabled-extensions = map (extension: extension.extensionUuid) defaultExtensions; + }; + "org/gnome/desktop/interface" = { + cursor-theme = config.mods.stylix.cursor.name; + cursor-size = config.mods.stylix.cursor.size; + color-scheme = "prefer-dark"; + }; + }; + }; + } + // { + dconf = config.mods.gnome.extraDconf; + } + ) + ); +} diff --git a/modules/programs/gnomeServices.nix b/modules/programs/gnomeServices.nix new file mode 100644 index 0000000..29bdea8 --- /dev/null +++ b/modules/programs/gnomeServices.nix @@ -0,0 +1,81 @@ +{ + lib, + config, + options, + pkgs, + ... +}: { + options.mods = { + gnomeServices.enable = lib.mkOption { + default = true; + example = false; + type = lib.types.bool; + description = '' + Enables gnome services: keyring and settings daemon. + Note: Do not use these for environments which ship these functionalities by default: GNOME, KDE + ''; + }; + nautilus.enable = lib.mkOption { + default = true; + example = false; + type = lib.types.bool; + description = '' + Enables and configures Nautilus + ''; + }; + }; + + config = lib.mkIf config.mods.gnomeServices.enable ( + lib.optionalAttrs (options ? services.gnome.gnome-keyring) { + programs.dconf = { + enable = true; + profiles.user.databases = [ + { + settings = { + "org/gnome/desktop/interface" = { + cursor-theme = config.mods.stylix.cursor.name; + cursor-size = lib.gvariant.mkInt32 config.mods.stylix.cursor.size; + color-scheme = "prefer-dark"; + }; + }; + } + ]; + }; + environment.extraInit = '' + export SSH_AUTH_SOCK="$XDG_RUNTIME_DIR/keyring/ssh" + ''; + services = { + # needed for GNOME services outside of GNOME Desktop + dbus.packages = with pkgs; [ + gcr + gnome-settings-daemon + ]; + + gnome.gnome-keyring.enable = true; + gvfs.enable = true; + }; + } + // lib.optionalAttrs (options ? home.packages) { + services.gnome-keyring.enable = true; + dconf.settings = { + "org/gnome/desktop/interface" = { + cursor-theme = config.mods.stylix.cursor.name; + cursor-size = config.mods.stylix.cursor.size; + color-scheme = "prefer-dark"; + }; + }; + home = { + packages = let + packages = with pkgs; [ + gcr + nautilus + sushi + nautilus-python + nautilus-open-any-terminal + ]; + in + lib.mkIf config.mods.nautilus.enable packages; + }; + } + ); +} diff --git a/modules/programs/gpu.nix b/modules/programs/gpu.nix new file mode 100644 index 0000000..023b462 --- /dev/null +++ b/modules/programs/gpu.nix @@ -0,0 +1,111 @@ +{ + mkDashDefault, + lib, + config, + options, + pkgs, + ... +}: { + options.mods.gpu = { + nvidia.enable = lib.mkOption { + default = false; + example = true; + type = lib.types.bool; + description = '' + Enables nvidia support. + ''; + }; + amdgpu.enable = lib.mkOption { + default = false; + example = true; + type = lib.types.bool; + description = '' + Enables amdgpu support. + ''; + }; + intelgpu.enable = lib.mkOption { + default = false; + example = true; + type = lib.types.bool; + description = '' + Enables intel support. + ''; + }; + vapi = { + enable = lib.mkOption { + default = true; + example = false; + type = lib.types.bool; + description = '' + Enables vapi. + ''; + }; + rocm.enable = lib.mkOption { + default = false; + type = lib.types.bool; + example = true; + description = '' + Enables rocm support. + ''; + }; + }; + }; + + config = lib.optionalAttrs (options ? boot) { + boot = lib.mkIf config.mods.gpu.amdgpu.enable { + kernelModules = ["kvm-amd"]; + initrd.kernelModules = ["amdgpu"]; + kernelParams = ["amdgpu.ppfeaturemask=0xffffffff"]; + }; + services.xserver.videoDrivers = + if config.mods.gpu.amdgpu.enable + then ["amdgpu"] + else if config.mods.gpu.nvidia.enable + then ["nvidia"] + else []; + + environment.variables = + if (config.mods.gpu.amdgpu.enable && config.mods.gpu.vapi.rocm.enable) + then { + RUSTICL_ENABLE = mkDashDefault "radeonsi"; + } + else {}; + + hardware = { + nvidia = lib.mkIf config.mods.gpu.nvidia.enable { + modesetting.enable = mkDashDefault true; + open = mkDashDefault true; + nvidiaSettings = mkDashDefault true; + package = mkDashDefault config.boot.kernelPackages.nvidiaPackages.beta; + }; + graphics = let + amdPackages = [ + (lib.mkIf (config.mods.gpu.intelgpu.enable && lib.mkIf config.mods.gpu.vapi.enable) pkgs.vpl-gpu-rt) + (lib.mkIf ( + config.mods.gpu.intelgpu.enable && lib.mkIf config.mods.gpu.vapi.enable + ) + pkgs.intel-media-driver) + (lib.mkIf config.mods.gpu.vapi.enable pkgs.libvdpau-va-gl) + (lib.mkIf config.mods.gpu.vapi.enable pkgs.libva) + (lib.mkIf config.mods.gpu.vapi.enable pkgs.libva-vdpau-driver) + (lib.mkIf (config.mods.gpu.intelgpu.enable || config.mods.gpu.amdgpu.enable) pkgs.mesa) + ]; + rocmPackages = [ + pkgs.rocmPackages.clr.icd + pkgs.mesa + pkgs.mesa.opencl + pkgs.vulkan-loader + pkgs.vulkan-validation-layers + pkgs.vulkan-tools + pkgs.clinfo + ]; + in { + enable = true; + enable32Bit = mkDashDefault true; + extraPackages = + amdPackages + ++ (lib.lists.optionals (config.mods.gpu.vapi.rocm.enable && config.mods.gpu.amdgpu.enable) rocmPackages); + }; + }; + }; +} diff --git a/modules/programs/greetd.nix b/modules/programs/greetd.nix new file mode 100644 index 0000000..fe3e455 --- /dev/null +++ b/modules/programs/greetd.nix @@ -0,0 +1,164 @@ +{ + mkDashDefault, + config, + lib, + inputs, + pkgs, + options, + system, + ... +}: { + options.mods = { + greetd = { + enable = lib.mkOption { + default = true; + example = false; + type = lib.types.bool; + description = '' + Enables the greetd login manager. + ''; + }; + monitor = lib.mkOption { + default = + if config.mods.wm.monitors != [] + then (builtins.elemAt config.mods.wm.monitors 0).name + else ""; + example = "eDP-1"; + type = lib.types.str; + description = '' + main monitor for the login screen. + By default the main monitor is used. + ''; + }; + scale = lib.mkOption { + default = + if config.mods.wm.monitors != [] + then builtins.toString (builtins.elemAt config.mods.wm.monitors 0).scale + else ""; + example = "1.5"; + type = lib.types.str; + description = '' + Scale used by the monitor in the login screen. + By default the scale of the main monitor is used. + ''; + }; + greeterCommand = lib.mkOption { + default = "${ + lib.getExe inputs.hyprland.packages.${system}.hyprland + } --config /etc/greetd/hyprgreet.conf"; + example = "${ + lib.getExe pkgs.cage + } -s -- ${lib.getExe pkgs.regreet}"; + type = lib.types.str; + description = "The compositor/greeter command to run"; + }; + resolution = lib.mkOption { + default = + if config.mods.wm.monitors != [] + then let + resX = builtins.toString (builtins.elemAt config.mods.wm.monitors 0).resolutionX; + resY = builtins.toString (builtins.elemAt config.mods.wm.monitors 0).resolutionY; + refresh = builtins.toString (builtins.elemAt config.mods.wm.monitors 0).refreshrate; + in "${resX}x${resY}@${refresh}" + else ""; + example = "3440x1440@180"; + type = lib.types.str; + description = '' + Resolution/refreshrate used by the monitor in the login screen. + ''; + }; + environments = lib.mkOption { + default = [ + (lib.mkIf config.mods.hypr.hyprland.enable inputs.hyprland.packages.${config.conf.system}.hyprland) + (lib.mkIf config.mods.niri.enable pkgs.niri) + ]; + # no idea if these are written correctly + example = [ + pkgs.niri + pkgs.river-classic + pkgs.swayfx + ]; + type = with lib.types; listOf package; + description = '' + List of environments that should be available in the login prompt. + ''; + }; + regreet = { + customSettings = lib.mkOption { + default = {}; + example = {}; + type = with lib.types; attrsOf anything; + description = '' + Custom regret settings. See https://github.com/rharish101/ReGreet/blob/main/regreet.sample.toml for more information. + ''; + }; + }; + }; + }; + + config = let + inherit (config.conf) username; + in + lib.mkIf config.mods.greetd.enable ( + lib.optionalAttrs (options ? environment) { + # greetd display manager + programs.hyprland.enable = mkDashDefault true; + services = { + displayManager.sessionPackages = config.mods.greetd.environments; + greetd = { + enable = true; + settings = { + terminal.vt = mkDashDefault 1; + default_session = { + command = mkDashDefault config.mods.greetd.greeterCommand; + user = mkDashDefault username; + }; + }; + }; + }; + + # should technically be the same, but this is configured instead in order to provide a decent out of the box login experience. + environment.etc."greetd/hyprgreet.conf".text = '' + monitor=${config.mods.greetd.monitor},${config.mods.greetd.resolution},0x0,${config.mods.greetd.scale} + monitor=,disable + + input { + kb_layout = ${config.mods.xkb.layout} + kb_variant = ${config.mods.xkb.variant} + force_no_accel = true + } + + misc { + disable_splash_rendering = false + disable_hyprland_logo = true + disable_xdg_env_checks = true + disable_scale_notification = true + } + + env=STATE_DIR,var/cache/regreet + env=CACHE_DIR,var/cache/regreet + env=HYPRCURSOR_THEME,${config.mods.stylix.cursor.name} + env=HYPRCURSOR_SIZE,${toString config.mods.stylix.cursor.size} + env=XCURSOR_THEME,${config.mods.stylix.cursor.name} + env=XCURSOR_SIZE,${toString config.mods.stylix.cursor.size} + env=QT_QPA_PLATFORMTHEME,qt5ct + + exec-once=regreet --style /home/${username}/.config/gtk-3.0/gtk.css --config /home/${username}/.config/regreet/regreet.toml; hyprctl dispatch exit + ''; + + # unlock GPG keyring on login + security.pam = { + services.greetd = { + enableGnomeKeyring = mkDashDefault true; + sshAgentAuth = mkDashDefault true; + }; + sshAgentAuth.enable = mkDashDefault true; + }; + } + // lib.optionalAttrs (options ? home) { + xdg.configFile."regreet/regreet.toml".source = + (pkgs.formats.toml {}).generate "regreet" + config.mods.greetd.regreet.customSettings; + } + ); +} diff --git a/modules/programs/homePackages.nix b/modules/programs/homePackages.nix new file mode 100644 index 0000000..6a995f0 --- /dev/null +++ b/modules/programs/homePackages.nix @@ -0,0 +1,154 @@ +{ + lib, + options, + config, + pkgs, + ... +} +: { + options.mods.homePackages = { + useDefaultPackages = lib.mkOption { + default = true; + example = false; + type = lib.types.bool; + description = "Use default packages (will use additional_packages only if disabled)"; + }; + additionalPackages = lib.mkOption { + default = []; + example = [pkgs.flatpak]; + type = with lib.types; listOf package; + description = '' + Additional Home manager packages. + Will be installed regardless of default home manager packages are installed. + ''; + }; + specialPrograms = lib.mkOption { + default = {}; + example = {}; + type = with lib.types; attrsOf anything; + description = '' + special program configuration to be added which require programs.something notation. + ''; + }; + specialServices = lib.mkOption { + default = {}; + example = {}; + type = with lib.types; attrsOf anything; + description = '' + special services configuration to be added which require an services.something notation. + ''; + }; + matrixClient = lib.mkOption { + default = pkgs.nheko; + example = null; + type = with lib.types; nullOr package; + description = "The matrix client"; + }; + vesktop = lib.mkOption { + default = true; + example = false; + type = lib.types.bool; + description = "Adds the vesktop discord client"; + }; + ncspot = lib.mkOption { + default = false; + example = true; + type = lib.types.bool; + description = "Adds the ncspot spotify client"; + }; + orcaSlicer = lib.mkOption { + default = false; + example = true; + type = lib.types.bool; + description = "Enables orca slicer"; + }; + nextcloudClient = lib.mkOption { + default = false; + example = true; + type = lib.types.bool; + description = "Adds the full desktop nextcloud client (the nextcloud module in dashnix only provides the cli tool)"; + }; + mailClient = lib.mkOption { + default = pkgs.thunderbird; + example = null; + type = with lib.types; nullOr package; + description = "The email client"; + }; + browser = lib.mkOption { + default = "zen"; + example = "firefox"; + type = with lib.types; + nullOr ( + either (enum [ + "firefox" + "zen" + "librewolf" + "chromium" + "brave" + ]) + package + ); + description = "The browser (the enum variants have preconfigured modules)"; + }; + }; + + config = lib.optionalAttrs (options ? home.packages) { + home.packages = + if config.mods.homePackages.useDefaultPackages + then + with pkgs; + [ + (lib.mkIf config.mods.homePackages.ncspot ncspot) + (lib.mkIf config.mods.homePackages.orcaSlicer orca-slicer) + (lib.mkIf config.mods.homePackages.vesktop vesktop) + (lib.mkIf config.mods.homePackages.nextcloudClient nextcloud-client) + (lib.mkIf (config.mods.homePackages.matrixClient != null) config.mods.homePackages.matrixClient) + (lib.mkIf (config.mods.homePackages.mailClient != null) config.mods.homePackages.mailClient) + (lib.mkIf ( + # NOTE: This should be package, but nix doesn't have that.... + builtins.isAttrs config.mods.homePackages.browser && config.mods.homePackages.browser != null + ) + config.mods.homePackages.browser) + adw-gtk3 + bat + brightnessctl + dbus + fastfetch + fd + ffmpeg + flake-checker + gnome-keyring + gnutar + regreet + killall + kitty + libnotify + lsd + networkmanager + nh + nix-index + playerctl + poppler-utils + pulseaudio + libsForQt5.qt5ct + qt6Packages.qt6ct + fuc + ripgrep + rm-improved + system-config-printer + xournalpp + zenith + zoxide + ] + ++ config.mods.homePackages.additionalPackages + else config.mods.homePackages.additionalPackages; + + xdg.configFile."direnv/direnv.toml".source = (pkgs.formats.toml {}).generate "direnv" { + global = { + warn_timeout = "-1s"; + }; + }; + programs = config.mods.homePackages.specialPrograms; + services = config.mods.homePackages.specialServices; + }; +} diff --git a/modules/programs/hypr/default.nix b/modules/programs/hypr/default.nix new file mode 100644 index 0000000..68b88ea --- /dev/null +++ b/modules/programs/hypr/default.nix @@ -0,0 +1,7 @@ +{ + imports = [ + ./hyprland.nix + ./hyprlock.nix + ./hyprpaper.nix + ]; +} diff --git a/modules/programs/hypr/hyprland.nix b/modules/programs/hypr/hyprland.nix new file mode 100644 index 0000000..442b964 --- /dev/null +++ b/modules/programs/hypr/hyprland.nix @@ -0,0 +1,357 @@ +{ + mkDashDefault, + config, + lib, + options, + pkgs, + ... +}: let + defaultWmConf = import ../../../lib/wm.nix; +in { + options.mods.hypr.hyprland = { + enable = lib.mkOption { + default = true; + example = false; + type = lib.types.bool; + description = '' + Enable Hyprland + ''; + }; + noAtomic = lib.mkOption { + default = false; + example = true; + type = lib.types.bool; + description = '' + Use tearing (Warning, can be buggy) + ''; + }; + useIronbar = lib.mkOption { + default = true; + example = false; + type = lib.types.bool; + description = '' + Whether to use ironbar in hyprland. + ''; + }; + useDefaultConfig = lib.mkOption { + default = true; + example = false; + type = lib.types.bool; + description = '' + Use preconfigured Hyprland config. + ''; + }; + customConfig = lib.mkOption { + default = {}; + example = {}; + type = with lib.types; attrsOf anything; + description = '' + Custom Hyprland configuration. + Will be merged with default configuration if enabled. + ''; + }; + plugins = lib.mkOption { + default = []; + example = []; + type = with lib.types; listOf package; + description = '' + Plugins to be added to Hyprland. + ''; + }; + pluginConfig = lib.mkOption { + default = {}; + example = {}; + type = with lib.types; attrsOf anything; + description = '' + Plugin configuration to be added to Hyprland. + ''; + }; + hyprspaceEnable = lib.mkOption { + default = false; + type = lib.types.bool; + example = true; + description = '' + Enables Hyprspace plugin for hyprland. + Please note, plugins tend to break VERY often. + ''; + }; + }; + + config = lib.mkIf config.mods.hypr.hyprland.enable ( + lib.optionalAttrs (options ? wayland.windowManager.hyprland) { + # install Hyprland related packages + home.packages = with pkgs; [ + xorg.xprop + grim + slurp + satty + xdg-desktop-portal-gtk + xdg-desktop-portal-gnome + kdePackages.xdg-desktop-portal-kde + xdg-desktop-portal-shana + copyq + wl-clipboard + hyprcursor + hyprpicker + ]; + + wayland.windowManager.hyprland = let + mkWorkspace = workspaces: + builtins.map (workspace: let + default = + if workspace.default + then ",default:true" + else ""; + in "${workspace.name},monitor:${workspace.monitor}${default}") + workspaces; + mkTransform = transform: + if transform == "0" + then 0 + else if transform == "90" + then 1 + else if transform == "180" + then 2 + else if transform == "270" + then 3 + else 4; + mkVrr = vrr: + if vrr + then "1" + else "0"; + mkMonitors = monitors: + builtins.map ( + monitor: "${monitor.name},${builtins.toString monitor.resolutionX}x${builtins.toString monitor.resolutionY}@${builtins.toString monitor.refreshrate},${builtins.toString monitor.positionX}x${builtins.toString monitor.positionY},${builtins.toString monitor.scale}, transform,${builtins.toString (mkTransform monitor.transform)}, vrr,${mkVrr monitor.vrr}" + ) + monitors; + + mkMods = bind: let + mods = bind.modKeys or []; + in + builtins.map (mod: + if mod == "Mod" + then (lib.strings.toUpper config.mods.wm.modKey) + " " + else lib.strings.toUpper mod) + mods + |> lib.strings.concatStringsSep ""; + mkArgs = args: + if args != [] + then (lib.strings.concatStringsSep " " args) + else ""; + shouldRepeat = bind: bind ? meta && bind.meta ? hyprland && bind.meta.hyprland ? repeat && bind.meta.hyprland.repeat == true; + + defaultBinds = cfg: + if cfg.mods.wm.useDefaultBinds + then defaultWmConf.defaultBinds cfg + else []; + + mkEBinds = cfg: let + binds = cfg.mods.wm.binds ++ defaultBinds cfg; + in + binds + |> builtins.filter (bind: bind ? command && shouldRepeat bind && !(hasInvalidCustomCommand bind)) + |> builtins.map ( + bind: "${mkMods bind},${bind.key},${mkCommand bind}" + ); + mkBinds = cfg: let + binds = cfg.mods.wm.binds ++ defaultBinds cfg; + in + binds + |> builtins.filter (bind: bind ? command && !(shouldRepeat bind) && !(hasInvalidCustomCommand bind)) + |> builtins.map ( + bind: "${mkMods bind},${bind.key},${mkCommand bind}" + ); + mkCommand = bind: let + args = bind.args or []; + in + if bind.command == "quit" + then "exit" + else if bind.command == "killActive" + then "killactive" + else if bind.command == "moveWindowRight" + then "movewindow,r" + else if bind.command == "moveWindowDown" + then "movewindow,d" + else if bind.command == "moveWindowLeft" + then "movewindow,l" + else if bind.command == "moveWindowUp" + then "movewindow,u" + else if bind.command == "moveFocusUp" + then "movefocus,u" + else if bind.command == "moveFocusRight" + then "movefocus,r" + else if bind.command == "moveFocusDown" + then "movefocus,d" + else if bind.command == "moveFocusLeft" + then "movefocus,l" + else if bind.command == "toggleFloating" + then "togglefloating" + else if bind.command == "toggleFullscreen" + then "fullscreen" + else if bind.command == "focusWorkspace" + then "workspace" + "," + mkArgs args + else if bind.command == "moveToWorkspace" + then "movetoworkspace" + "," + mkArgs args + else if bind.command == "spawn" + then "exec" + "," + mkArgs args + else if bind.command == "spawn-sh" + then "exec" + "," + mkArgs args + else bind.command.hyprland + "," + mkArgs args; + hasInvalidCustomCommand = bind: !(builtins.isString bind.command) && bind.command.hyprland or null == null; + + mkEnv = config: let + defaultEnv = + if config.mods.wm.useDefaultEnv + then defaultWmConf.defaultEnv config + else { + all = {}; + hyprland = {}; + }; + userEnv = + if config.mods.wm.env ? all + then config.mods.wm.env.all // config.mods.wm.env.hyprland + else config.mods.wm.env; + env = userEnv // defaultEnv.all // defaultEnv.hyprland; + in + lib.attrsets.mapAttrsToList ( + name: value: "${name},${value}" + ) + env; + mkAutoStart = config: let + defaultStartup = + if config.mods.wm.useDefaultStartup + then defaultWmConf.defaultStartup config + else { + all = []; + hyprland = []; + }; + userStartup = + if config.mods.wm.startup ? all + then config.mods.wm.startup.all ++ config.mods.wm.startup.hyprland + else config.mods.wm.startup; + autoStart = userStartup ++ defaultStartup.all ++ defaultStartup.hyprland; + in + autoStart; + mkWindowRule = config: let + defaultWindowRules = + if config.mods.wm.useDefaultWindowRules + then defaultWmConf.defaultWindowRules.hyprland + else []; + in + # defaultWindowRules ++ config.mods.wm.windowRules.hyprland; + defaultWindowRules; + in { + enable = true; + plugins = + [ + (lib.mkIf config.mods.hypr.hyprland.hyprspaceEnable pkgs.hyprlandPlugins.hyprspace) + ] + ++ config.mods.hypr.hyprland.plugins; + settings = + if config.mods.hypr.hyprland.useDefaultConfig + then + lib.mkMerge + [ + { + "$mod" = mkDashDefault config.mods.wm.modKey; + + bindm = [ + "$mod, mouse:272, movewindow" + "$mod, mouse:273, resizeactive" + ]; + + general = { + gaps_out = mkDashDefault "3,5,5,5"; + border_size = mkDashDefault 3; + "col.active_border" = lib.mkOverride 51 "0xFFFF0000 0xFF00FF00 0xFF0000FF 45deg"; + allow_tearing = lib.mkIf config.mods.hypr.hyprland.noAtomic true; + }; + + decoration = { + rounding = mkDashDefault 4; + }; + + render = { + direct_scanout = mkDashDefault config.mods.gaming.enable; + }; + + animations = { + bezier = mkDashDefault "overshot, 0.05, 0.9, 0.1, 1.2"; + animation = [ + "windowsMove,1,4,default" + "windows,1,3,overshot,slide bottom" + "windowsOut,1,7,default,popin 70%" + "border,1,4,default" + "fade,1,7,default" + "workspaces,1,4,default" + "layers,1,2,default,slide" + ]; + }; + + dwindle = { + preserve_split = mkDashDefault true; + pseudotile = mkDashDefault 0; + permanent_direction_override = mkDashDefault false; + }; + + input = { + kb_layout = mkDashDefault "${config.mods.xkb.layout}"; + kb_variant = mkDashDefault "${config.mods.xkb.variant}"; + repeat_delay = mkDashDefault 200; + force_no_accel = mkDashDefault true; + touchpad = { + natural_scroll = mkDashDefault true; + tap-to-click = mkDashDefault true; + tap-and-drag = mkDashDefault true; + }; + }; + + misc = { + animate_manual_resizes = mkDashDefault 1; + enable_swallow = mkDashDefault true; + disable_splash_rendering = mkDashDefault true; + disable_hyprland_logo = mkDashDefault true; + disable_xdg_env_checks = mkDashDefault true; + disable_scale_notification = mkDashDefault true; + swallow_regex = mkDashDefault "^(.*)(kitty)(.*)$"; + initial_workspace_tracking = mkDashDefault 1; + # just doesn't work + enable_anr_dialog = false; + }; + + cursor = { + enable_hyprcursor = mkDashDefault true; + no_hardware_cursors = mkDashDefault ( + if config.mods.gpu.nvidia.enable + then 2 + else 0 + ); + # done with nix, this would break the current setup otherwise + sync_gsettings_theme = mkDashDefault false; + }; + + gesture = [ + "3, horizontal, workspace" + ]; + + layerrule = [ + # layer rules + # mainly to disable animations within slurp and grim + "match:namespace selection, no_anim on" + ]; + + workspace = mkWorkspace config.mods.wm.workspaces; + monitor = mkMonitors config.mods.wm.monitors; + env = mkEnv config; + bind = mkBinds config; + binde = mkEBinds config; + windowrule = mkWindowRule config; + exec-once = mkAutoStart config; + plugin = config.mods.hypr.hyprland.pluginConfig; + } + config.mods.hypr.hyprland.customConfig + ] + else lib.mkForce config.mods.hypr.hyprland.customConfig; + }; + } + ); +} diff --git a/modules/programs/hypr/hyprlock.nix b/modules/programs/hypr/hyprlock.nix new file mode 100644 index 0000000..c152b22 --- /dev/null +++ b/modules/programs/hypr/hyprlock.nix @@ -0,0 +1,69 @@ +{ + config, + lib, + options, + pkgs, + ... +}: { + options.mods.hypr.hyprlock = { + enable = lib.mkOption { + default = true; + example = false; + type = lib.types.bool; + description = "Enables Hyprlock"; + }; + config = lib.mkOption { + default = { + background = [ + { + monitor = ""; + path = ""; + color = "rgba(26, 27, 38, 1.0)"; + } + ]; + + input-field = [ + { + monitor = "${ + if config.mods.wm.monitors != [] + then (builtins.elemAt config.mods.wm.monitors 0).name + else "" + }"; + placeholder_text = "password or something"; + } + ]; + + label = [ + { + monitor = "${ + if config.mods.wm.monitors != [] + then (builtins.elemAt config.mods.wm.monitors 0).name + else "" + }"; + text = "$TIME"; + font_size = 50; + position = "0, 200"; + valign = "center"; + halign = "center"; + } + ]; + }; + example = {}; + type = with lib.types; attrsOf anything; + description = "config"; + }; + }; + + config = lib.mkIf config.mods.hypr.hyprlock.enable ( + lib.optionalAttrs (options ? xdg.configFile) { + stylix.targets.hyprlock = { + enable = false; + }; + home.packages = with pkgs; [hyprlock]; + programs.hyprlock = lib.mkIf config.mods.hypr.hyprlock.enable { + enable = true; + settings = config.mods.hypr.hyprlock.config; + }; + } + ); +} diff --git a/modules/programs/hypr/hyprpaper.nix b/modules/programs/hypr/hyprpaper.nix new file mode 100644 index 0000000..b392b54 --- /dev/null +++ b/modules/programs/hypr/hyprpaper.nix @@ -0,0 +1,36 @@ +{ + config, + lib, + options, + pkgs, + ... +}: { + options.mods.hypr.hyprpaper = { + enable = lib.mkOption { + default = true; + example = false; + type = lib.types.bool; + description = "Enables Hyprpaper"; + }; + config = lib.mkOption { + default = ""; + example = '' + preload = path/to/wallpaper + wallpaper = YOURMONITOR,path/to/wallpaper + ''; + type = lib.types.lines; + description = '' + Hyprpaper config + ''; + }; + }; + + config = lib.mkIf config.mods.hypr.hyprpaper.enable ( + lib.optionalAttrs (options ? xdg.configFile) { + home.packages = with pkgs; [hyprpaper]; + xdg.configFile."hypr/hyprpaper.conf" = lib.mkIf config.mods.hypr.hyprpaper.enable { + text = config.mods.hypr.hyprpaper.config; + }; + } + ); +} diff --git a/modules/programs/ironbar.nix b/modules/programs/ironbar.nix new file mode 100644 index 0000000..b955d51 --- /dev/null +++ b/modules/programs/ironbar.nix @@ -0,0 +1,552 @@ +{ + lib, + config, + pkgs, + inputs, + options, + mkDashDefault, + ... +}: let + inherit (config.conf) username; + base16 = pkgs.callPackage inputs.base16.lib {}; + scheme = base16.mkSchemeAttrs config.stylix.base16Scheme; + ironbarDefaultConfig = useBatteryModule: { + end = [ + (lib.mkIf useBatteryModule + { + type = "battery"; + class = "battery"; + icon_size = 0; + format = "{percentage}%"; + thresholds = { + warning = 20; + critical = 5; + }; + }) + { + class = "music"; + type = "music"; + format = ""; + truncate = { + mode = "end"; + max_length = 0; + }; + icons = { + play = ""; + pause = ""; + }; + truncate_popup_title = { + mode = "end"; + max_length = 15; + }; + truncate_popup_album = { + mode = "end"; + max_length = 15; + }; + truncate_popup_artist = { + mode = "end"; + max_length = 15; + }; + } + { + bar = [ + { + class = "popup-button"; + label = ""; + on_click = "popup:toggle"; + type = "button"; + } + ]; + class = "popup-button-box"; + popup = [ + { + class = "audio-box"; + orientation = "vertical"; + type = "box"; + widgets = [ + { + class = "audio-button-box"; + orientation = "horizontal"; + type = "box"; + widgets = [ + { + class = "audio-button"; + label = ""; + on_click = "!audioControl bluetooth"; + type = "button"; + } + { + class = "audio-button"; + label = "󰋋"; + on_click = "!audioControl internal"; + type = "button"; + } + ]; + } + { + class = "audio-label"; + label = "Output"; + type = "label"; + } + { + class = "audio-slider"; + length = 200; + on_change = "!pactl set-sink-volume @DEFAULT_SINK@ $0%"; + step = 1.0; + type = "slider"; + value = "pactl get-sink-volume @DEFAULT_SINK@ | awk -F'/' '{ print $2 }' | tr -d ' %'"; + label = "{{pactl get-sink-volume @DEFAULT_SINK@ | awk -F'/' '{ print $2 }'}}"; + } + { + class = "audio-label"; + label = "Input"; + type = "label"; + } + { + class = "audio-slider"; + length = 200; + on_change = "!pactl set-source-volume @DEFAULT_SOURCE@ $0%"; + step = 1.0; + type = "slider"; + value = "pactl get-source-volume @DEFAULT_SOURCE@ | awk -F'/' '{ print $2 }' | tr -d ' %'"; + } + ]; + } + ]; + type = "custom"; + } + { + bar = [ + { + class = "popup-button"; + label = ""; + on_click = "!oxidash"; + type = "button"; + } + ]; + class = "popup-button-box"; + type = "custom"; + } + { + bar = [ + { + class = "popup-button"; + label = ""; + on_click = "popup:toggle"; + type = "button"; + } + ]; + type = "custom"; + class = "popup-button-box"; + popup = [ + { + class = "system-box"; + type = "box"; + widgets = [ + { + class = "memory-usage"; + format = [ + " {cpu_percent}%" + " {memory_used} / {memory_total} GB ({memory_percent}%)" + " {swap_used} / {swap_total} GB ({swap_free} | {swap_percent}%)" + "󰥔 {uptime}" + ]; + direction = "vertical"; + interval = { + memory = 30; + cpu = 5; + temps = 5; + disks = 5; + network = 5; + }; + type = "sys_info"; + } + ]; + } + ]; + } + { + type = "tray"; + } + ]; + position = "top"; + height = 10; + anchor_to_edges = true; + start = [ + { + type = "workspaces"; + all_monitors = true; + } + ]; + center = [ + { + format = "%I:%M"; + format_popup = "%a %d:%m/%I:%M %p"; + locale = "en_US"; + type = "clock"; + } + ]; + }; + monitorConfig = useBatteryModule: + if config.mods.ironbar.ironbarSingleMonitor + then { + monitors.${ + if config.mods.wm.monitors != [] + then (builtins.elemAt config.mods.wm.monitors 0).name + else "" + } = + ironbarDefaultConfig useBatteryModule; + } + else ironbarDefaultConfig useBatteryModule; +in { + options.mods = { + ironbar = { + enable = lib.mkOption { + default = false; + example = true; + type = lib.types.bool; + description = "Enables ironbar"; + }; + ironbarSingleMonitor = lib.mkOption { + default = true; + example = false; + type = lib.types.bool; + description = '' + Whether to use ironbar on a single monitor. + ''; + }; + useDefaultConfig = lib.mkOption { + default = true; + example = false; + type = lib.types.bool; + description = '' + Use preconfigured ironbar config. + ''; + }; + useBatteryModule = lib.mkOption { + default = false; + example = true; + type = lib.types.bool; + description = "Whether to use the preconfigured battery module."; + }; + customConfig = lib.mkOption { + default = {}; + example = {}; + type = with lib.types; attrsOf anything; + description = '' + Custom ironbar configuration. + Will be merged with default configuration if enabled. + ''; + }; + useDefaultCss = lib.mkOption { + default = true; + example = false; + type = lib.types.bool; + description = '' + Use preconfigured ironbar css. + ''; + }; + customCss = lib.mkOption { + default = ''''; + example = '' + #window { + border-radius: none; + } + ''; + type = lib.types.lines; + description = '' + Custom ironbar css. + Will be merged with default css if enabled. + ''; + }; + }; + }; + config = lib.mkIf (config.mods.ironbar.enable || config.mods.hypr.hyprland.useIronbar) ( + lib.optionalAttrs (options ? programs.ironbar) { + programs.ironbar = { + package = mkDashDefault pkgs.ironbar; + enable = true; + style = + if config.mods.ironbar.useDefaultCss + then + /* + css + */ + '' + @import url("/home/${username}/.config/gtk-3.0/gtk.css"); + + @define-color primary #${scheme.base0D}; + @define-color warning #${scheme.base0F}; + @define-color muted-text #${scheme.base05}; + @define-color background #${scheme.base00}; + @define-color secondary-background #${scheme.base02}; + + * slider { + background-color: @muted-text; + } + + * { + transition: + background-color 0.15s ease-in-out, + color 0.15s ease-in-out, + border-color 0.15s ease-in-out; + } + + .background { + background-color: rgba(0, 0, 0, 0); + padding: 0px; + margin: 0px; + } + + .focused { + padding: 0px 5px; + background-color: @background; + font-size: 17px; + border-radius: 10px; + } + + #bar #end { + margin: 0px 5px; + padding: 0px 5px; + background-color: @background; + border-radius: 10px; + } + + .popup-button { + padding: 0px 5px 0px 2px; + border-radius: 100%; + font-size: 13px; + background-color: @background; + } + + .popup-button-box { + padding: 2px 0px; + margin-right: 4px; + } + + .custom button { + background-color: @background; + color: @primary; + } + + .custom button:hover { + background-color: @secondary-background; + } + + /* audio */ + .audio-box * { + color: @primary; + } + + .audio-box { + padding: 2em; + background-color: @background; + border-radius: 5px; + border: 1px solid @primary; + } + + .audio-slider { + padding: 5px; + margin: 5px 5px 15px; + } + + .audio-label { + font-size: 19px; + } + + .audio-button { + padding: 10px 10px 10px 8px; + min-height: 35px; + min-width: 35px; + margin: 0px 1em; + border-radius: 50%; + font-size: 25px; + } + + .audio-button-box { + padding: 0px 2.5em 0px 2.5em; + margin: 0em 0em 1.5em; + } + + /* clock */ + .clock { + padding: 0px 5px; + font-size: 20px; + border-radius: 5px; + background-color: @background; + color: @primary; + } + + .clock:hover { + background-color: @secondary-background; + } + + .popup-clock { + font-size: 2.5em; + background-color: @background; + border: 1px solid @primary; + padding: 0.5em; + border-radius: 8px; + color: @primary; + } + + .popup-clock .calendar-clock { + margin: 0.25em 0em 0.75em; + color: @primary; + } + + .popup-clock .calendar { + font-size: 24px; + color: @primary; + } + + .popup-clock .calendar:selected { + background-color: @secondary-background; + } + + /* workspaces */ + .workspaces { + margin: 0px 0px 0px 5px; + border-radius: 10px; + background-color: @background; + padding: 2px 5px; + } + + .workspaces .item { + margin: 0px 3px; + font-size: 13px; + border-radius: 100%; + padding: 0px 3px 0px 3px; + background-color: rgba(0, 0, 0, 0); + color: @primary; + } + + .workspaces .item:hover { + background-color: @secondary-background; + color: @primary; + } + + .workspaces .item:not(.visible) { + color: @warning; + } + + .workspaces .item.focused { + background-color: @primary; + color: @background; + } + + /* battery */ + .battery { + font-size: 13px; + padding: 0px 4px 0px 0px; + margin: 2px 0px 2px 0px; + background-color: @background; + color: @primary; + } + + .battery .icon { + opacity: 0.0; + } + + .battery .label { + margin: 2px 0px 0px -8px; + color: @primary; + } + + .battery:hover { + background-color: @secondary-background; + border-radius: 5px; + } + + .popup-battery { + background-color: @background; + color: @primary; + border-radius: 8px; + border: 1px solid @primary; + padding: 16px; + font-size: 20px; + } + + /* music */ + .music { + font-size: 13px; + padding: 0px 4px 0px 3px; + margin: 2px 0px 2px 0px; + background-color: @background; + color: @primary; + } + + .music:hover { + background-color: @secondary-background; + border-radius: 100%; + } + + .music .contents .icon { + margin: 0px 0px 0px 5px; + } + + .popup-music { + background-color: @background; + color: @primary; + border-radius: 8px; + border: 1px solid @primary; + padding: 16px; + font-size: 20px; + } + + .popup-music .controls .btn-prev { + color: @primary; + margin-right: 16px; + } + + .popup-music .controls .btn-next { + color: @primary; + margin-right: 16px; + } + + .popup-music .controls .btn-play { + color: @primary; + margin-right: 16px; + } + + .popup-music .controls .btn-pause { + color: @primary; + margin-right: 16px; + } + + /* system */ + .system-box { + padding: 16px; + color: @primary; + border: 1px solid @primary; + background-color: @background; + border-radius: 8px; + } + + .memory-usage { + font-size: 15px; + color: @primary; + } + + .memory-usage:hover { + background-color: @secondary-background; + } + '' + + config.mods.ironbar.customCss + else config.mods.ironbar.customCss; + features = [ + #"another_feature" + ]; + config = + if config.mods.ironbar.useDefaultConfig + then + lib.mkMerge + [ + (monitorConfig config.mods.ironbar.useBatteryModule) + config.mods.ironbar.customConfig + ] + else config.mods.ironbar.customConfig; + }; + } + ); +} diff --git a/modules/programs/kde.nix b/modules/programs/kde.nix new file mode 100644 index 0000000..f81194d --- /dev/null +++ b/modules/programs/kde.nix @@ -0,0 +1,22 @@ +{ + lib, + options, + config, + ... +}: { + options.mods.kde = { + enable = lib.mkOption { + default = false; + example = true; + type = lib.types.bool; + description = "Enables the KDE desktop environment"; + }; + }; + + config = lib.mkIf config.mods.kde.enable ( + lib.optionalAttrs (options ? services.desktopManager.plasma6) { + # apparently kde integration is bad -> kdeconfig is too much even for nix, can't blame them :) + services.desktopManager.plasma6.enable = true; + } + ); +} diff --git a/modules/programs/kdeConnect.nix b/modules/programs/kdeConnect.nix new file mode 100644 index 0000000..46b12e8 --- /dev/null +++ b/modules/programs/kdeConnect.nix @@ -0,0 +1,42 @@ +{ + lib, + config, + options, + pkgs, + ... +}: { + options.mods = { + kdeConnect.enable = lib.mkOption { + default = false; + type = lib.types.bool; + example = true; + description = '' + Enables kde_connect. + ''; + }; + }; + + config = lib.mkIf config.mods.kdeConnect.enable ( + lib.optionalAttrs (options ? networking.firewall) { + networking.firewall = { + allowedTCPPortRanges = [ + { + from = 1714; + to = 1764; + } + # KDE Connect + ]; + allowedUDPPortRanges = [ + { + from = 1714; + to = 1764; + } + # KDE Connect + ]; + }; + } + // lib.optionalAttrs (options ? home.packages) { + home.packages = with pkgs; [kdePackages.kdeconnect-kde]; + } + ); +} diff --git a/modules/programs/keepassxc.nix b/modules/programs/keepassxc.nix new file mode 100644 index 0000000..d8c0c6a --- /dev/null +++ b/modules/programs/keepassxc.nix @@ -0,0 +1,75 @@ +{ + lib, + config, + options, + pkgs, + ... +}: { + options.mods.keepassxc = { + enable = lib.mkOption { + default = true; + example = false; + type = lib.types.bool; + description = "Enables the piper program and its daemon"; + }; + useConfig = lib.mkOption { + default = true; + example = false; + type = lib.types.bool; + description = "Whether to overwrite the config of keepassxc. Note, this means that changes can't be applied via the program anymore!"; + }; + config = lib.mkOption { + default = '' + [General] + ConfigVersion=2 + + [Browser] + Enabled=true + + [GUI] + ApplicationTheme=classic + HidePasswords=true + MinimizeOnClose=true + MinimizeToTray=true + ShowTrayIcon=true + TrayIconAppearance=monochrome-light + + [PasswordGenerator] + Length=30 + + [Security] + EnableCopyOnDoubleClick=true + ''; + example = ""; + type = lib.types.lines; + description = "Cache config to be used."; + }; + useCacheConfig = lib.mkOption { + default = false; + example = true; + type = lib.types.bool; + description = "Whether to overwrite the cache config of keepassxc. Note, this means that changes can't be applied via the program anymore!"; + }; + cacheConfig = lib.mkOption { + default = ''''; + example = '' + [General] + LastDatabases=/path/to/database + ''; + type = lib.types.lines; + description = "Cache config to be used."; + }; + }; + config = lib.mkIf config.mods.keepassxc.enable ( + lib.optionalAttrs (options ? home.file) { + home.packages = [pkgs.keepassxc]; + xdg.configFile."keepassxc/keepassxc.ini" = lib.mkIf config.mods.keepassxc.useConfig { + text = config.mods.keepassxc.config; + }; + + home.file.".cache/keepassxc/keepassxc.ini" = lib.mkIf config.mods.keepassxc.useCacheConfig { + text = config.mods.keepassxc.cacheConfig; + }; + } + ); +} diff --git a/modules/programs/kitty.nix b/modules/programs/kitty.nix new file mode 100644 index 0000000..ab2ae5a --- /dev/null +++ b/modules/programs/kitty.nix @@ -0,0 +1,129 @@ +{ + lib, + config, + options, + pkgs, + inputs, + ... +}: let + base16 = pkgs.callPackage inputs.base16.lib {}; + scheme = base16.mkSchemeAttrs config.stylix.base16Scheme; + hexTable = { + "0" = "1"; + "1" = "0"; + "2" = "1"; + "3" = "2"; + "4" = "3"; + "5" = "4"; + "6" = "5"; + "7" = "6"; + "8" = "7"; + "9" = "8"; + "a" = "9"; + "b" = "a"; + "c" = "b"; + "d" = "c"; + "e" = "d"; + "f" = "e"; + }; + # don't ask :) + base = + "#" + + lib.strings.concatStrings ( + (lib.lists.take 5 (lib.strings.stringToCharacters scheme.base00)) + ++ [hexTable."${(lib.lists.last (lib.strings.stringToCharacters scheme.base00))}"] + ); +in { + options.mods.kitty = { + enable = lib.mkOption { + default = true; + example = false; + type = lib.types.bool; + description = "Enables kitty"; + }; + useDefaultConfig = lib.mkOption { + default = true; + example = false; + type = lib.types.bool; + description = "Enable default config for kitty"; + }; + additionalConfig = lib.mkOption { + default = {}; + example = { + # for the insane people out there :P + enable_audio_bell = "yes"; + }; + type = with lib.types; attrsOf anything; + description = "Additional kitty configuration. Will be the only configuration if useDefaultConfig is disabled."; + }; + }; + config = lib.mkIf config.mods.kitty.enable ( + lib.optionalAttrs (options ? home.packages) { + stylix.targets.kitty = { + enable = false; + }; + programs.kitty = { + enable = true; + settings = + if config.mods.kitty.useDefaultConfig + then + { + enable_audio_bell = "no"; + window_alert_on_bell = "no"; + cursor_blink_interval = "0"; + window_padding_width = "1"; + shell_integration = "yes"; + sync_with_monitor = "no"; + background_opacity = "0.8"; + + font_family = "${config.mods.stylix.fonts.monospace.name}"; + bold_font = "${config.mods.stylix.fonts.monospace.name} Extra Bold"; + italic_font = "${config.mods.stylix.fonts.monospace.name} Extra Italic"; + bold_italic_font = "${config.mods.stylix.fonts.monospace.name} Extra Bold Italic"; + + background = base; + foreground = "#" + scheme.base05; + selection_foreground = "#" + scheme.base05; + selection_background = base; + url_color = "#" + scheme.base04; + cursor = "#" + scheme.base05; + active_border_color = "#" + scheme.base03; + inactive_border_color = "#" + scheme.base01; + active_tab_background = base; + active_tab_foreground = "#" + scheme.base05; + inactive_tab_background = "#" + scheme.base01; + inactive_tab_foreground = "#" + scheme.base04; + tab_bar_background = "#" + scheme.base01; + + mark1_foreground = "#" + scheme.base00; + mark1_background = "#" + scheme.base07; + mark2_foreground = "#" + scheme.base00; + mark2_background = "#" + scheme.base0E; + mark3_foreground = "#" + scheme.base00; + mark3_background = "#" + scheme.base08; + + color0 = "#" + scheme.base03; + color1 = "#" + scheme.base08; + color2 = "#" + scheme.base0B; + color3 = "#" + scheme.base0A; + color4 = "#" + scheme.base0D; + color5 = "#" + scheme.base06; + color6 = "#" + scheme.base0C; + color7 = "#" + scheme.base07; + + color8 = "#" + scheme.base04; + color9 = "#" + scheme.base08; + color10 = "#" + scheme.base0B; + color11 = "#" + scheme.base0A; + color12 = "#" + scheme.base0D; + color13 = "#" + scheme.base06; + color14 = "#" + scheme.base0C; + color15 = "#" + scheme.base0B; + shell = lib.mkIf config.mods.fish.enable "fish"; + } + // config.mods.kitty.additionalConfig + else config.mods.kitty.additionalConfig; + }; + } + ); +} diff --git a/modules/programs/media.nix b/modules/programs/media.nix new file mode 100644 index 0000000..c37d62b --- /dev/null +++ b/modules/programs/media.nix @@ -0,0 +1,123 @@ +{ + lib, + options, + config, + pkgs, + ... +}: { + options.mods.media = { + useBasePackages = lib.mkOption { + default = true; + example = false; + type = lib.types.bool; + description = "Default media packages (If disabled, only the additional packages will be installed)"; + }; + additionalPackages = lib.mkOption { + default = []; + example = [pkgs.flatpak]; + type = with lib.types; listOf package; + description = '' + Additional media packages. + ''; + }; + specialPrograms = lib.mkOption { + default = {}; + example = {}; + type = with lib.types; attrsOf anything; + description = '' + special program configuration to be added which require programs.something notation. + ''; + }; + specialServices = lib.mkOption { + default = {}; + example = {}; + type = with lib.types; attrsOf anything; + description = '' + special services configuration to be added which require an services.something notation. + ''; + }; + filePickerPortal = lib.mkOption { + default = "Term"; + example = "Gnome"; + type = with lib.types; oneOf [(enum ["Gnome" "Kde" "Lxqt" "Gtk" "Term" "Default"]) str]; + description = '' + The file picker portal to use (set with shana). + Default removes the config, allowing you to set it yourself. + ''; + }; + termFileChooserConfig = lib.mkOption { + default = { + cmd = "${pkgs.xdg-desktop-portal-termfilechooser}/share/xdg-desktop-portal-termfilechooser/yazi-wrapper.sh"; + default_dir = "$HOME"; + }; + example = {}; + type = with lib.types; attrsOf anything; + description = '' + Termfilechooser config + ''; + }; + }; + config = lib.optionalAttrs (options ? home.packages) { + xdg.configFile."xdg-desktop-portal-termfilechooser/config" = lib.mkIf (config.mods.media.filePickerPortal != "Term") { + source = (pkgs.formats.ini {}).generate "termchooser" { + filechooser = config.mods.media.termFileChooserConfig; + }; + }; + xdg.configFile."xdg-desktop-portal-shana/config.toml" = lib.mkIf (config.mods.media.filePickerPortal != "Default") { + source = let + name = + if (config.mods.media.filePickerPortal == "Term") + then "org.freedesktop.impl.portal.desktop.termfilechooser" + else config.mods.media.filePickerPortal; + in + (pkgs.formats.toml {}).generate "shana" { + open_file = name; + save_file = name; + save_files = name; + }; + }; + home.packages = + if config.mods.media.useBasePackages + then + with pkgs; + [ + # base audio + pipewire + wireplumber + # audio control + playerctl + # images + eog + # videos + mpv + # pdf + zathura + evince + libreoffice-fresh + onlyoffice-desktopeditors + pdftk + pdfpc + polylux2pdfpc + # spotify + # video editing + kdePackages.kdenlive + # image creation + inkscape + gimp + krita + yt-dlp + ] + ++ config.mods.media.additionalPackages + else config.mods.media.additionalPackages; + programs = + if config.mods.media.useBasePackages + then + { + obs-studio.enable = true; + obs-studio.plugins = with pkgs; [obs-studio-plugins.obs-vaapi]; + } + // config.mods.media.specialPrograms + else config.mods.media.specialPrograms; + services = config.mods.media.specialServices; + }; +} diff --git a/modules/programs/mime.nix b/modules/programs/mime.nix new file mode 100644 index 0000000..4da7aff --- /dev/null +++ b/modules/programs/mime.nix @@ -0,0 +1,161 @@ +# Copyright (c) 2020-2021 Mihai Fufezan +# credits to fufexan https://github.com/fufexan/dotfiles/blob/main/home/terminal/programs/xdg.nix +{ + mkDashDefault, + config, + lib, + options, + ... +}: let + browserName = + if (builtins.isString config.mods.homePackages.browser) + then config.mods.homePackages.browser + else if config.mods.homePackages.browser ? meta && config.mods.homePackages.browser.meta ? mainProgram + then config.mods.homePackages.browser.meta.mainProgram + else config.mods.homePackages.browser.pname; +in { + options.mods.mime = { + enable = lib.mkOption { + default = true; + example = false; + type = lib.types.bool; + description = "Enables mime handling with nix"; + }; + imageTypes = lib.mkOption { + default = [ + "png" + "svg" + "jpeg" + "gif" + ]; + example = []; + type = with lib.types; listOf str; + description = "Image mime handlers"; + }; + videoTypes = lib.mkOption { + default = [ + "mp4" + "avi" + "mkv" + ]; + example = []; + type = with lib.types; listOf str; + description = "Video mime handlers"; + }; + audioTypes = lib.mkOption { + default = [ + "mp3" + "flac" + "wav" + "aac" + ]; + example = []; + type = with lib.types; listOf str; + description = "Audio mime handlers"; + }; + browserTypes = lib.mkOption { + default = [ + "json" + "x-extension-htm" + "x-extension-html" + "x-extension-shtml" + "x-extension-xht" + "x-extension-xhtml" + ]; + example = []; + type = with lib.types; listOf str; + description = "Browser mime handlers"; + }; + browserXTypes = lib.mkOption { + default = [ + "about" + "ftp" + "http" + "https" + "unknown" + ]; + example = []; + type = with lib.types; listOf str; + description = "Browser X mime handlers"; + }; + browserApplications = lib.mkOption { + default = ["${browserName}"]; + example = []; + type = with lib.types; listOf str; + description = "Applications used for handling browser mime types"; + }; + imageApplications = lib.mkOption { + default = ["eog"]; + example = []; + type = with lib.types; listOf str; + description = "Applications used for handling image mime types"; + }; + videoApplications = lib.mkOption { + default = ["mpv"]; + example = []; + type = with lib.types; listOf str; + description = "Applications used for handling video mime types"; + }; + audioApplications = lib.mkOption { + default = ["io.bassi.Amberol"]; + example = []; + type = with lib.types; listOf str; + description = "Applications used for handling audio mime types"; + }; + # TODO additional config + }; + config = lib.optionalAttrs (options ? home) { + xdg = let + xdgAssociations = type: program: list: + builtins.listToAttrs ( + map (e: { + name = "${type}/${e}"; + value = program; + }) + list + ); + + imageAc = xdgAssociations "image" config.mods.mime.imageApplications config.mods.mime.imageTypes; + videoAc = xdgAssociations "video" config.mods.mime.videoApplications config.mods.mime.videoTypes; + audioAc = xdgAssociations "audio" config.mods.mime.audioApplications config.mods.mime.audioTypes; + browserAc = + (xdgAssociations "application" config.mods.mime.browserApplications config.mods.mime.browserTypes) + // ( + xdgAssociations "x-scheme-handler" config.mods.mime.browserApplications + config.mods.mime.browserXTypes + ); + associations = builtins.mapAttrs (_: v: (map (e: "${e}.desktop") v)) ( + # TODO make configurable + { + "application/pdf" = ["org.pwmt.zathura-pdf-mupdf"]; + "text/html" = config.mods.mime.browserApplications; + "text/plain" = ["neovide"]; + "x-scheme-handler/chrome" = ["com.brave.browser"]; + "inode/directory" = ["yazi"]; + } + // imageAc + // audioAc + // videoAc + // browserAc + ); + in + lib.mkIf config.mods.mime.enable { + enable = true; + cacheHome = config.home.homeDirectory + "/.local/cache"; + + mimeApps = { + enable = true; + defaultApplications = associations; + }; + + userDirs = { + enable = mkDashDefault true; + createDirectories = mkDashDefault true; + extraConfig = { + XDG_SCREENSHOTS_DIR = mkDashDefault "${config.xdg.userDirs.pictures}/Screenshots"; + pws = mkDashDefault "${config.home.homeDirectory}/pws"; + }; + }; + }; + }; +} diff --git a/modules/programs/ncspot.nix b/modules/programs/ncspot.nix new file mode 100644 index 0000000..b998942 --- /dev/null +++ b/modules/programs/ncspot.nix @@ -0,0 +1,64 @@ +{ + lib, + config, + options, + pkgs, + ... +}: { + options.mods.ncspot = { + enable = lib.mkOption { + default = false; + example = true; + type = lib.types.bool; + description = "Enables ncspot with a config"; + }; + config = lib.mkOption { + default = { + notify = true; + shuffle = true; + cover_max_scale = 2; + initial_screen = "library"; + library_tabs = ["playlists"]; + theme = { + background = "#1a1b26"; + primary = "#9aa5ce"; + secondary = "#414868"; + title = "#9ece6a"; + playing = "#7aa2f7"; + playing_selected = "#bb9af7"; + playing_bg = "#24283b"; + highlight = "#c0caf5"; + highlight_bg = "#24283b"; + error = "#414868"; + error_bg = "#f7768e"; + statusbar = "#ff9e64"; + statusbar_progress = "#7aa2f7"; + statusbar_bg = "#1a1b26"; + cmdline = "#c0caf5"; + cmdline_bg = "#24283b"; + search_match = "#f7768e"; + }; + keybindings = { + "j" = "move left 1"; + "k" = "move down 1"; + "l" = "move up 1"; + ";" = "move right 1"; + }; + notification_format = { + title = "%artists"; + body = "%title"; + }; + }; + example = {}; + type = with lib.types; attrsOf anything; + description = "config"; + }; + }; + config = lib.mkIf config.mods.ncspot.enable ( + lib.optionalAttrs (options ? home.packages) { + home.packages = with pkgs; [ncspot]; + xdg.configFile."ncspot/config.toml".source = + lib.mkIf config.mods.ncspot.useConfig (pkgs.formats.toml {}).generate "ncspot" config.mods.ncspot.config; + } + ); +} diff --git a/modules/programs/nextcloud.nix b/modules/programs/nextcloud.nix new file mode 100644 index 0000000..31216ee --- /dev/null +++ b/modules/programs/nextcloud.nix @@ -0,0 +1,38 @@ +{lib, ...}: { + options.mods = { + nextcloud = { + enable = lib.mkOption { + default = true; + example = false; + type = lib.types.bool; + description = "Enable nextcloud"; + }; + username = lib.mkOption { + default = ""; + example = "globi"; + type = lib.types.str; + description = "Your username"; + }; + url = lib.mkOption { + default = ""; + example = "cloud.globi.org"; + type = lib.types.str; + description = "Your url"; + }; + synclist = lib.mkOption { + default = []; + example = [ + { + name = "sync globi folder"; + remote = "globi"; + local = "/home/globi"; + } + ]; + description = '' + A list of folders to synchronize. + This has to be an attribute list with the name, remote and local field (all strings). + ''; + }; + }; + }; +} diff --git a/modules/programs/niri.nix b/modules/programs/niri.nix new file mode 100644 index 0000000..0531829 --- /dev/null +++ b/modules/programs/niri.nix @@ -0,0 +1,392 @@ +{ + mkDashDefault, + config, + lib, + options, + pkgs, + ... +}: let + defaultWmConf = import ../../lib/wm.nix; +in { + options.mods.niri = { + enable = lib.mkOption { + default = true; + example = false; + type = lib.types.bool; + description = '' + Enable Niri + ''; + }; + useDefaultConfig = lib.mkOption { + default = true; + example = false; + type = lib.types.bool; + description = '' + Use preconfigured Niri config. + ''; + }; + customConfig = lib.mkOption { + default = ''''; + example = ''''; + type = lib.types.lines; + description = '' + Custom Niri configuration. + Will be merged with default configuration if enabled. + ''; + }; + }; + + config = lib.mkIf config.mods.niri.enable ( + lib.optionalAttrs (options ? wayland.windowManager.hyprland) { + # TODO deduplicate and abstract away base window management config + # install Niri related packages + home.packages = with pkgs; [ + xorg.xprop + grim + slurp + satty + xdg-desktop-portal-gtk + xdg-desktop-portal-gnome + kdePackages.xdg-desktop-portal-kde + xdg-desktop-portal-shana + copyq + wl-clipboard + + niri + xwayland-satellite + ]; + + xdg.configFile."niri/config.kdl" = let + mkNiriMod = mods: + builtins.map (mod: + if mod == "Mod" + then config.mods.wm.modKey + "+" + else "${mod}" + "+") + mods + |> lib.strings.concatStringsSep ""; + mkNiriArg = args: + if args != [] + then let + concatCommand = lib.strings.concatStringsSep " " args; + validCommand = builtins.replaceStrings [''"''] [''\"''] concatCommand; + in "\"${validCommand}\"" + else ""; + mkNiriCommand = bind: let + args = bind.args or []; + in + if bind.command == "quit" + then "quit;" + else if bind.command == "killActive" + then "close-window;" + else if bind.command == "moveFocusTop" + then "focus-window-up;" + else if bind.command == "focusWorkspace" + then "focus-workspace" + " " + mkNiriArg args + ";" + else if bind.command == "moveWindowRight" + then "move-column-right-or-to-monitor-right;" + else if bind.command == "moveWindowDown" + then "move-window-down;" + else if bind.command == "moveWindowLeft" + then "move-column-left-or-to-monitor-left;" + else if bind.command == "moveWindowUp" + then "move-window-up;" + else if bind.command == "moveFocusUp" + then "focus-window-up;" + else if bind.command == "moveFocusRight" + then "focus-column-or-monitor-right;" + else if bind.command == "moveFocusDown" + then "focus-window-down;" + else if bind.command == "moveFocusLeft" + then "focus-column-or-monitor-left;" + else if bind.command == "toggleFloating" + then "toggle-window-floating;" + else if bind.command == "toggleFullscreen" + then "fullscreen-window;" + else if bind.command == "moveToWorkspace" + then "move-window-to-workspace" + " " + mkNiriArg args + ";" + else if bind.command == "spawn" + then "spawn" + " " + mkNiriArg args + ";" + else if bind.command == "spawn-sh" + then "spawn-sh" + " " + mkNiriArg args + ";" + else if bind.command.niri != null + then bind.command.niri + " " + mkNiriArg args + ";" + else ""; + + mkNiriBinds = cfg: + '' binds { + '' + + ( + ( + builtins.map ( + bind: + /* + kdl + */ + if bind ? key && bind ? command + then '' + ${mkNiriMod (bind.modKeys or [])}${bind.key} ${ + if + bind ? meta + && bind.meta ? niri + then + ( + if + bind.meta.niri ? desc + && bind.meta.niri.desc != "" + then "hotkey-overlay-title=\"" + bind.meta.niri.desc + "\"" + else "" + ) + + " " + + ( + if + bind.meta.niri ? repeat + && bind.meta.niri.repeat + then "repeat=true" + else "repeat=false" + ) + + " " + + ( + if + bind.meta.niri ? allowWhileLocked + && bind.meta.niri.allowWhileLocked + then "allow-when-locked=true" + else "" + ) + + " " + + ( + if + bind.meta.niri ? allowInhibit + && bind.meta.niri.allowInhibit + then "allow-inhibiting=true" + else "allow-inhibiting=false" + ) + else "" + } { ${ + mkNiriCommand bind + } } + '' + else '''' + ) + (( + cfg.mods.wm.binds + ++ ( + if cfg.mods.wm.useDefaultBinds + then defaultWmConf.defaultBinds cfg + else [] + ) + ) + |> builtins.filter (bind: !(hasInvalidCustomCommand bind))) + ) + |> lib.strings.concatLines + ) + + '' + } + ''; + mkVrr = vrr: + if vrr + then "true" + else "false"; + mkNiriMonitors = cfg: + (builtins.map ( + monitor: + # TODO vrr + /* + kdl + */ + '' + output "${monitor.name}" { + variable-refresh-rate on-demand=${mkVrr monitor.vrr} + mode "${builtins.toString monitor.resolutionX}x${builtins.toString monitor.resolutionY}@${builtins.toString monitor.refreshrate}" + scale ${builtins.toString monitor.scale} + transform "${ + if (monitor.transform == "0") + then "normal" + else monitor.transform + }" + position x=${builtins.toString monitor.positionX} y=${builtins.toString monitor.positionY} + } + '' + ) + cfg.mods.wm.monitors) + |> lib.strings.concatLines; + mkNiriWorkspaces = cfg: + (builtins.map ( + workspace: + /* + kdl + */ + '' + workspace "${workspace.name}" { + open-on-output "${workspace.monitor}" + } + '' + ) + cfg.mods.wm.workspaces) + |> lib.strings.concatLines; + mkNiriWindowRules = cfg: ( + ( + builtins.map ( + rule: + /* + kdl + */ + '' + window-rule { + ${rule} + } + '' + ) + ( + cfg.mods.wm.windowRules.niri + ++ ( + if cfg.mods.wm.useDefaultWindowRules + then defaultWmConf.defaultWindowRules.niri + else [] + ) + ) + ) + |> lib.strings.concatLines + ); + hasInvalidCustomCommand = bind: !(bind ? command) || (!(builtins.isString bind.command) && bind.command.niri or null == null); + mkNiriEnv = config: let + defaultEnv = + if config.mods.wm.useDefaultEnv + then defaultWmConf.defaultEnv config + else { + all = {}; + niri = {}; + }; + userEnv = + if config.mods.wm.env ? all + then config.mods.wm.env.all // config.mods.wm.env.niri + else config.mods.wm.env; + env = + userEnv + // defaultEnv.all + // defaultEnv.niri; + in + '' + environment { + '' + + ( + lib.attrsets.mapAttrsToList ( + name: value: "${name} \"${value}\"" + ) + env + |> lib.strings.concatLines + ) + + '' + } + ''; + mkNiriAutoStart = config: let + defaultStartup = + if config.mods.wm.useDefaultStartup + then defaultWmConf.defaultStartup config + else { + all = {}; + niri = {}; + }; + userStartup = + if config.mods.wm.startup ? all + then config.mods.wm.startup.all ++ config.mods.wm.startup.niri + else config.mods.wm.startup; + autoStart = userStartup ++ defaultStartup.all ++ defaultStartup.niri; + in + (builtins.map (value: "spawn-at-startup \"${value}\"") + autoStart) + |> lib.strings.concatLines; + defaultConfig = + /* + kdl + */ + '' + input { + keyboard { + xkb { + layout "enIntUmlaut" + } + repeat-delay 200 + repeat-rate 25 + numlock + } + + touchpad { + tap + natural-scroll + } + + mouse { + accel-speed 0.2 + accel-profile "flat" + } + + focus-follows-mouse max-scroll-amount="25%" + } + + layout { + // Set gaps around windows in logical pixels. + gaps 10 + center-focused-column "never" + always-center-single-column + + preset-column-widths { + proportion 0.33333 + proportion 0.5 + proportion 1.0 + } + + default-column-width { proportion 0.5; } + focus-ring { + width 3 + inactive-color "#505050" + active-gradient from="#ff0000" to="#00ff00" angle=45 + } + + border { + off + } + + // You can enable drop shadows for windows. + shadow { + on + softness 30 + spread 5 + offset x=0 y=5 + color "#0007" + } + } + + ${ + if config.mods.gpu.nvidia.enable + then '' + debug { + wait-for-frame-completion-before-queueing + } + '' + else '''' + } + + // Autostart + + hotkey-overlay { + skip-at-startup + } + + prefer-no-csd + '' + + mkNiriMonitors config + + mkNiriBinds config + + mkNiriWorkspaces config + + mkNiriWindowRules config + + mkNiriEnv config + + mkNiriAutoStart config; + in + mkDashDefault { + text = + if config.mods.niri.useDefaultConfig + then defaultConfig + config.mods.niri.customConfig + else config.mods.niri.customConfig; + }; + } + ); +} diff --git a/modules/programs/onedrive.nix b/modules/programs/onedrive.nix new file mode 100644 index 0000000..56bd79d --- /dev/null +++ b/modules/programs/onedrive.nix @@ -0,0 +1,24 @@ +{ + config, + lib, + options, + pkgs, + ... +}: { + options.mods = { + onedrive = { + enable = lib.mkOption { + default = false; + example = true; + type = lib.types.bool; + description = "Enable onedrive program and service"; + }; + }; + }; + config = lib.mkIf config.mods.onedrive.enable ( + lib.optionalAttrs (options ? environment) { + services.onedrive.enable = true; + environment.systemPackages = [pkgs.onedrive]; + } + ); +} diff --git a/modules/programs/oxi/default.nix b/modules/programs/oxi/default.nix new file mode 100644 index 0000000..83c4f23 --- /dev/null +++ b/modules/programs/oxi/default.nix @@ -0,0 +1,81 @@ +{ + lib, + config, + options, + inputs, + ... +}: { + imports = [ + ./oxidash.nix + ./oxinoti.nix + ./oxipaste.nix + ./oxirun.nix + ./oxishut.nix + ]; + options.mods.oxi = { + enable = lib.mkOption { + default = true; + example = false; + type = lib.types.bool; + description = "Enables oxi programs"; + }; + ReSet = { + enable = lib.mkOption { + default = true; + example = false; + type = lib.types.bool; + description = "Enables and configures ReSet"; + }; + }; + hyprdock = { + enable = lib.mkOption { + default = true; + example = false; + type = lib.types.bool; + description = "Enables hyprdock"; + }; + settings = lib.mkOption { + default = {}; + example = {}; + type = with lib.types; attrsOf anything; + description = "settings for hyprdock"; + }; + }; + oxicalc = { + enable = lib.mkOption { + default = true; + example = false; + type = lib.types.bool; + description = "Enables hyprdock"; + }; + }; + }; + config = lib.mkIf config.mods.oxi.enable ( + lib.optionalAttrs (options ? home.packages) { + programs = { + hyprdock = { + inherit (config.mods.oxi.hyprdock) enable; + inherit (config.mods.oxi.hyprdock) settings; + }; + oxicalc.enable = lib.mkIf config.mods.oxi.oxicalc.enable true; + ReSet = lib.mkIf config.mods.oxi.ReSet.enable { + enable = true; + config = { + plugins = [ + inputs.reset-plugins.packages."x86_64-linux".monitor + inputs.reset-plugins.packages."x86_64-linux".keyboard + ]; + plugin_config = { + Keyboard = { + path = "/home/${config.conf.username}/.config/reset/keyboard.conf"; + }; + }; + }; + }; + }; + } + // lib.optionalAttrs (options ? services.logind && options ? services.logind.settings) { + services.logind.settings.Login.HandleLidSwitchExternalPower = "ignore"; + } + ); +} diff --git a/modules/programs/oxi/oxidash.nix b/modules/programs/oxi/oxidash.nix new file mode 100644 index 0000000..9ea519e --- /dev/null +++ b/modules/programs/oxi/oxidash.nix @@ -0,0 +1,79 @@ +{ + lib, + config, + options, + pkgs, + inputs, + ... +}: let + # at time of using this here, stylix might not be evaluated yet + # hence ensure it is by using base16 mkSchemeAttrs + base16 = pkgs.callPackage inputs.base16.lib {}; + scheme = base16.mkSchemeAttrs config.stylix.base16Scheme; +in { + options.mods.oxi.oxidash = { + enable = lib.mkOption { + default = true; + example = false; + type = lib.types.bool; + description = "Enables and configures oxidash"; + }; + }; + config = lib.mkIf (config.mods.oxi.oxidash.enable && config.mods.oxi.enable) ( + lib.optionalAttrs (options ? xdg.configFile) { + programs.oxidash.enable = true; + xdg.configFile."oxidash/style.css" = { + text = '' + @define-color bg #${scheme.base00}; + @define-color primary #${scheme.base0D}; + + #MainWindow { + border-radius: 10px; + background-color: transparent; + } + + #MainBox { + border-radius: 10px; + border: 1px solid @primary; + background-color: @bg; + } + + #MainButtonBox { + padding: 10px; + margin: 5px 0px 5px 0px; + border-radius: 5px; + border: solid 1px @primary; + } + + #DoNotDisturbButton {} + + #ExitButton {} + + #ClearNotificationsButton {} + + #NotificationsWindow {} + + .debugimage { + border: solid 3px @primary; + } + + .Notification { + padding: 10px; + margin: 5px 0px 5px 0px; + border: solid 1px @primary; + border-radius: 5px; + } + + .CloseNotificationButton { + margin: 0px 5px 0px 10px; + } + + .PictureButtonBox {} + + .BaseBox {} + } + ''; + }; + } + ); +} diff --git a/modules/programs/oxi/oxinoti.nix b/modules/programs/oxi/oxinoti.nix new file mode 100644 index 0000000..d265af3 --- /dev/null +++ b/modules/programs/oxi/oxinoti.nix @@ -0,0 +1,129 @@ +{ + lib, + config, + options, + pkgs, + inputs, + ... +}: let + # at time of using this here, stylix might not be evaluated yet + # hence ensure it is by using base16 mkSchemeAttrs + base16 = pkgs.callPackage inputs.base16.lib {}; + scheme = base16.mkSchemeAttrs config.stylix.base16Scheme; +in { + options.mods.oxi.oxinoti = { + enable = lib.mkOption { + default = true; + example = false; + type = lib.types.bool; + description = "Enables and configures oxinoti"; + }; + }; + config = lib.mkIf (config.mods.oxi.oxinoti.enable && config.mods.oxi.enable) ( + lib.optionalAttrs (options ? xdg.configFile) { + programs.oxinoti.enable = true; + xdg.configFile."oxinoti/style.css" = { + text = + # css + '' + @import url("/home/dashie/.config/gtk-3.0/gtk.css"); + + @define-color bg #${scheme.base00}; + @define-color bghover #${scheme.base02}; + @define-color primary #${scheme.base0D}; + @define-color red #${scheme.base08}; + @define-color green #${scheme.base0B}; + + #MainWindow { + background-color: transparent; + padding: 0px; + /* opacity: 0; */ + } + + .MainBox { + background-color: transparent; + padding: 0px; + /* opacity: 0; */ + } + + .NotificationBox { + background-color: @bg; + border-radius: 5px; + border: solid 1px; + margin: 0px; + } + + .NotificationBox button { + background-color: @bg; + } + + .NotificationBox button:hover { + background-color: @bghover; + } + + .NotificationLow { + border-color: @green; + } + + .NotificationNormal { + border-color: @primary; + } + + .NotificationUrgent { + border-color: @red; + } + + .miscbox { + margin: 0px 10px 0px 0px; + } + + .bodybox {} + + .imagebox { + margin: 0px 0px 0px 10px; + } + + .appname { + font-size: 0.8rem; + } + + .timestamp { + font-size: 0.8rem; + } + + .summary { + font-size: 0.8rem; + } + + .body { + font-size: 1.2rem; + } + + .icon { + font-size: 2rem; + } + + .image {} + + .bold { + font-weight: bold; + } + + .italic { + font-style: italic; + } + + .underline { + text-decoration-line: underline; + } + ''; + }; + xdg.configFile."oxinoti/oxinoti.toml" = { + text = '' + timeout = 3 + dnd_override = 2 + ''; + }; + } + ); +} diff --git a/modules/programs/oxi/oxipaste.nix b/modules/programs/oxi/oxipaste.nix new file mode 100644 index 0000000..4ec7b1d --- /dev/null +++ b/modules/programs/oxi/oxipaste.nix @@ -0,0 +1,48 @@ +{ + lib, + config, + options, + ... +}: { + options.mods.oxi.oxipaste = { + enable = lib.mkOption { + default = true; + example = false; + type = lib.types.bool; + description = "Enables and configures oxipaste"; + }; + }; + config = lib.mkIf (config.mods.oxi.oxipaste.enable && config.mods.oxi.enable) ( + lib.optionalAttrs (options ? xdg.configFile) { + programs.oxipaste.enable = true; + xdg.configFile."oxipaste/style.css" = { + text = '' + .main-window { + padding: 10px; + border-radius: 10px; + border: 2px solid #2AC3DE; + } + + .item-window { + padding: 10px; + border-radius: 10px; + border: 2px solid #C0CAF5; + } + + .item-button { + background-color: #1A1B26; + border-radius: 5px; + border: 1px solid #6D728D; + } + + .delete-button { + margin: 5px 25px 5px 5px; + } + + .item-box { + } + ''; + }; + } + ); +} diff --git a/modules/programs/oxi/oxirun.nix b/modules/programs/oxi/oxirun.nix new file mode 100644 index 0000000..55f4d75 --- /dev/null +++ b/modules/programs/oxi/oxirun.nix @@ -0,0 +1,20 @@ +{ + lib, + config, + options, + ... +}: { + options.mods.oxi.oxirun = { + enable = lib.mkOption { + default = true; + example = false; + type = lib.types.bool; + description = "Enables OxiRun"; + }; + }; + config = lib.mkIf (config.mods.oxi.oxirun.enable && config.mods.oxi.enable) ( + lib.optionalAttrs (options ? xdg.configFile) { + programs.oxirun.enable = true; + } + ); +} diff --git a/modules/programs/oxi/oxishut.nix b/modules/programs/oxi/oxishut.nix new file mode 100644 index 0000000..25ebe0b --- /dev/null +++ b/modules/programs/oxi/oxishut.nix @@ -0,0 +1,42 @@ +{ + lib, + config, + options, + ... +}: { + options.mods.oxi.oxishut = { + enable = lib.mkOption { + default = true; + example = false; + type = lib.types.bool; + description = "Enables and configures oxishut"; + }; + }; + config = lib.mkIf (config.mods.oxi.oxishut.enable && config.mods.oxi.enable) ( + lib.optionalAttrs (options ? xdg.configFile) { + programs.oxishut.enable = true; + xdg.configFile."oxishut/style.css" = { + text = '' + #mainwindow { + border-radius: 10px; + } + + .mainbox { + border-radius: 5px; + padding: 20px; + } + + .button { + margin: 5px; + background-color: #2b2c3b; + -gtk-icon-size: 5rem; + } + + .button:hover { + background-color: #3e4152; + } + ''; + }; + } + ); +} diff --git a/modules/programs/piper.nix b/modules/programs/piper.nix new file mode 100644 index 0000000..24beced --- /dev/null +++ b/modules/programs/piper.nix @@ -0,0 +1,20 @@ +{ + lib, + config, + options, + pkgs, + ... +}: { + options.mods.piper = { + enable = lib.mkOption { + default = false; + example = true; + type = lib.types.bool; + description = "Enables the piper program and its daemon"; + }; + }; + config = lib.mkIf config.mods.piper.enable ( + lib.optionalAttrs (options ? services.ratbagd) {services.ratbagd.enable = true;} + // lib.optionalAttrs (options ? home.packages) {home.packages = with pkgs; [piper];} + ); +} diff --git a/modules/programs/plymouth.nix b/modules/programs/plymouth.nix new file mode 100644 index 0000000..af9c615 --- /dev/null +++ b/modules/programs/plymouth.nix @@ -0,0 +1,18 @@ +{ + lib, + config, + options, + ... +}: { + options.mods.plymouth = { + enable = lib.mkOption { + default = true; + example = false; + type = lib.types.bool; + description = "Enables the plymouth"; + }; + }; + config = lib.mkIf config.mods.plymouth.enable ( + lib.optionalAttrs (options ? boot.plymouth) {boot.plymouth.enable = true;} + ); +} diff --git a/modules/programs/printing.nix b/modules/programs/printing.nix new file mode 100644 index 0000000..98bbe4f --- /dev/null +++ b/modules/programs/printing.nix @@ -0,0 +1,38 @@ +{ + lib, + config, + options, + pkgs, + ... +}: { + options.mods.printing = { + enable = lib.mkOption { + default = true; + example = false; + type = lib.types.bool; + description = "Enables the piper program and its daemon"; + }; + }; + config = lib.mkIf config.mods.printing.enable ( + lib.optionalAttrs (options ? services.printing) { + # Enable CUPS to print documents. + environment.systemPackages = with pkgs; [ + simple-scan + ]; + hardware.sane.enable = true; + services = { + printing = { + enable = true; + browsing = true; + drivers = [pkgs.hplip]; + startWhenNeeded = true; # optional + }; + avahi = { + enable = true; + nssmdns4 = true; + openFirewall = true; + }; + }; + } + ); +} diff --git a/modules/programs/scripts.nix b/modules/programs/scripts.nix new file mode 100644 index 0000000..98eb26b --- /dev/null +++ b/modules/programs/scripts.nix @@ -0,0 +1,123 @@ +{ + lib, + config, + options, + pkgs, + ... +}: { + options.mods.scripts = { + changeBrightness = lib.mkOption { + default = true; + example = false; + type = lib.types.bool; + description = "Enables the change-brightness script"; + }; + audioControl = lib.mkOption { + default = true; + example = false; + type = lib.types.bool; + description = "Enables the audioControl script"; + }; + scripts = lib.mkOption { + default = []; + example = []; + description = "More scripts to be passed. (check existing ones for types and examples)"; + }; + }; + config = lib.optionalAttrs (options ? home.packages) { + home.packages = + [ + (lib.mkIf config.mods.scripts.changeBrightness ( + pkgs.writeShellScriptBin "changeBrightness" '' + brightnessctl set "$1" + CURRENT=$(brightnessctl -m -d intel_backlight | awk -F, '{print substr($4, 0, length($4)-1)}') + notify-send -a "changeBrightness" -r 3 -u low -i brightness-high -h int:value:"$CURRENT" "Brightness: ''${CURRENT}%" + '' + )) + (lib.mkIf config.mods.scripts.audioControl ( + pkgs.writeShellScriptBin "audioControl" '' + ncspot() { + NUM=$(pactl list clients short | rg "ncspot" | awk -F 'PipeWire' ' { print $1 } ' | tr -d ' \t\n') + CHANGE=$(pactl list sink-inputs short | rg "$NUM" | awk -F ' ' ' { print $1 }' | tr -d ' \t\n') + pactl set-sink-input-volume "$CHANGE" "$1" + VOLUME=$(pactl list sink-inputs | rg "$NUM" -A7 | rg "Volume:" | awk -F ' ' ' { print $5 }' | tr -d '%') + notify-send -a "ncspot" -r 990 -u low -i audio-volume-high -h int:progress:"$VOLUME" "Spotify Volume: ''${VOLUME}%" + } + + firefox() { + STRING=$(pactl list clients short | rg "firefox" | awk -F 'PipeWire' ' { print $1 "," } ' | tr -d ' \t\n') + # NUMS=',' read -r -a array <<< "$STRING" + readarray -td, NUMS <<<"$STRING" + declare -p NUMS + for index in "''${!NUMS[@]}"; do #"''${!array[@]}" + NUM=$(echo "''${NUMS[index]}" | tr -d ' \t\n') + CHANGE=$(pactl list sink-inputs short | rg "$NUM" | awk -F ' ' ' { print $1 }' | tr -d ' \t\n') + pactl set-sink-input-volume "$CHANGE" "$1" + done + VOLUME=$(pactl list sink-inputs | rg "''${NUMS[0]}" -A7 | rg "Volume:" | awk -F ' ' ' { print $5 }' | tr -d '%') + notify-send -a "Firefox" -r 991 -u low -i audio-volume-high -h int:progress:"$VOLUME" "Firefox Volume: ''${VOLUME}%" + } + + internal() { + SPEAKER=$(pactl list sinks | grep "Name" | grep "alsa" | awk -F ': ' '{ print $2 }') + if [ "$SPEAKER" != "" ]; then + pactl set-default-sink "$SPEAKER" + pactl set-sink-mute "$SPEAKER" false + DEVICE=$(echo "$SPEAKER" | awk -F '.' ' { print $4 } ') + notify-send "changed audio to "$DEVICE" " + else + notify-send "failed, not available!" + fi + } + + set_volume_sink() { + pactl set-sink-volume @DEFAULT_SINK@ "$1" + CURRENT=$(pactl get-sink-volume @DEFAULT_SINK@ | awk -F'/' '{ print $2 }' | tr -d ' %') + notify-send -a "System Volume" -r 1001 -u low -i audio-volume-high -h int:progress:"$CURRENT" "Output Volume: ''${CURRENT}%" + } + + set_volume_source() { + pactl set-source-volume @DEFAULT_SOURCE@ "$1" + CURRENT=$(pactl get-source-volume @DEFAULT_SOURCE@ | awk -F'/' '{ print $2 }' | tr -d ' %') + notify-send -a "System Volume" -r 1001 -u low -i audio-volume-high -h int:progress:"$CURRENT" "Input Volume: ''${CURRENT}%" + } + + bluetooth() { + SPEAKER=$(pactl list sinks | grep "Name" | grep "blue" | awk -F ': ' '{ print $2 }') + if [ "$SPEAKER" != "" ]; then + pactl set-default-sink "$SPEAKER" + pactl set-sink-mute "$SPEAKER" false + DEVICE=$(echo "$SPEAKER" | awk -F '.' ' { print $4 } ') + notify-send "changed audio to "$DEVICE" " + else + notify-send "failed, not available!" + fi + } + + mute() { + pactl set-sink-mute @DEFAULT_SINK@ toggle + MUTE=$(pactl get-sink-mute @DEFAULT_SINK@) + notify-send -a "Audio" -r 994 -u low -i audio-volume-high "Audio: $MUTE" + } + + if [ "$1" == "internal" ]; then + internal + elif [ "$1" == "bluetooth" ]; then + bluetooth + elif [ "$1" == "firefox" ]; then + firefox "$2" + elif [ "$1" == "ncspot" ]; then + ncspot "$2" + elif [ "$1" == "mute" ]; then + mute + elif [ "$1" == "sink" ]; then + set_volume_sink "$2" + elif [ "$1" == "source" ]; then + set_volume_source "$2" + fi + '' + )) + ] + ++ config.mods.scripts.scripts; + }; +} diff --git a/modules/programs/sddm.nix b/modules/programs/sddm.nix new file mode 100644 index 0000000..57328d4 --- /dev/null +++ b/modules/programs/sddm.nix @@ -0,0 +1,43 @@ +{ + lib, + options, + config, + ... +}: { + options.mods.sddm = { + enable = lib.mkOption { + default = false; + example = true; + type = lib.types.bool; + description = "Enables the sddm displayManager"; + }; + useDefaultOptions = lib.mkOption { + default = true; + example = false; + type = lib.types.bool; + description = "Use default options provided by module. If disabled, will only apply extraOptions."; + }; + extraOptions = lib.mkOption { + default = {}; + example = { + wayland.enable = false; + }; + type = with lib.types; attrsOf anything; + description = "Extra options to be applied to the sddm config"; + }; + }; + + config = lib.mkIf config.mods.sddm.enable ( + lib.optionalAttrs (options ? services.displayManager.sddm) ( + { + services.displayManager.sddm.enable = true; + } + // lib.mkIf config.mods.sddm.useDefaultOptions { + services.displayManager.sddm.wayland.enable = true; + } + // { + services.displayManager.sddm = config.mods.sddm.extraOptions; + } + ) + ); +} diff --git a/modules/programs/sops.nix b/modules/programs/sops.nix new file mode 100644 index 0000000..5897eaa --- /dev/null +++ b/modules/programs/sops.nix @@ -0,0 +1,61 @@ +{ + lib, + pkgs, + config, + options, + root, + ... +}: { + options.mods.sops = { + enable = lib.mkOption { + default = true; + example = false; + type = lib.types.bool; + description = "Enable sops secrets"; + }; + secrets = lib.mkOption { + default = {}; + example = { + hub = {}; + lab = {}; + ${config.conf.username} = {}; + nextcloud = {}; + access = {}; + }; + type = with lib.types; attrsOf anything; + description = "secrets for sops"; + }; + sopsPath = lib.mkOption { + default = root + /secrets/secrets.yaml; + example = "/your/path"; + type = with lib.types; + oneOf [ + str + path + ]; + description = "sops secrets path"; + }; + validateSopsFile = lib.mkOption { + default = true; + example = false; + type = lib.types.bool; + description = "Whether to validate the sops file -> set this to false when using full paths"; + }; + }; + config = lib.mkIf config.mods.sops.enable ( + lib.optionalAttrs (options ? home.packages) { + home.packages = with pkgs; [sops]; + sops = { + gnupg = { + home = "~/.gnupg"; + sshKeyPaths = []; + }; + defaultSopsFile = config.mods.sops.sopsPath; + validateSopsFiles = config.mods.sops.validateSopsFile; + secrets = config.mods.sops.secrets; + }; + + systemd.user.services.mbsync.Unit.After = ["sops-nix.service"]; + } + ); +} diff --git a/modules/programs/starship.nix b/modules/programs/starship.nix new file mode 100644 index 0000000..de86504 --- /dev/null +++ b/modules/programs/starship.nix @@ -0,0 +1,175 @@ +{ + mkDashDefault, + lib, + config, + options, + pkgs, + inputs, + ... +}: { + options.mods = { + starship = { + enable = lib.mkOption { + default = true; + example = false; + type = lib.types.bool; + description = '' + Enables starship prompt + ''; + }; + useDefaultPrompt = lib.mkOption { + default = true; + example = false; + type = lib.types.bool; + description = '' + Enables preconfigured prompt + ''; + }; + customPrompt = lib.mkOption { + default = {}; + example = {}; + type = with lib.types; attrsOf anything; + description = '' + Custom configuration for prompt. + Will be merged with preconfigured prompt if that is used. + ''; + }; + }; + }; + + # environment.systemPackages needed in order to configure systemwide + config = lib.mkIf config.mods.starship.enable ( + lib.optionalAttrs (options ? environment.systemPackages) { + programs.starship = let + base16 = pkgs.callPackage inputs.base16.lib {}; + scheme = base16.mkSchemeAttrs config.stylix.base16Scheme; + code_format = "[](bg:prev_bg fg:#5256c3)[ $symbol ($version)](bg:#5256c3)"; + in { + enable = true; + interactiveOnly = mkDashDefault true; + presets = lib.mkIf config.mods.starship.useDefaultPrompt ["pastel-powerline"]; + settings = + lib.mkIf config.mods.starship.useDefaultPrompt { + # derived from https://starship.rs/presets/pastel-powerline + format = "$username$directory$git_branch$git_status$git_metrics[ ](bg:none fg:prev_bg)"; + right_format = "$c$elixir$elm$golang$gradle$haskell$java$julia$nodejs$nim$rust$scala$python$ocaml$opa$perl$zig$dart$dotnet$nix_shell$shell$solidity[](bg:prev_bg fg:#3465A4)$time$os"; + username = { + show_always = false; + style_user = "bg:#5277C3 fg:#${scheme.base05}"; + style_root = "bg:#5277C3 fg:#${scheme.base05}"; + format = "[ $user ]($style)[](bg:#3465A4 fg:#5277C3)"; + disabled = false; + }; + os = { + symbols = { + NixOS = "  "; + }; + style = "bg:#3465A4 fg:#${scheme.base05}"; + disabled = false; + }; + directory = { + style = "bg:#3465A4 fg:#${scheme.base05}"; + format = "[ $path ]($style)"; + truncation_length = 3; + truncation_symbol = "…/"; + }; + git_branch = { + always_show_remote = true; + symbol = ""; + style = "bg:#5256c3 fg:#${scheme.base05}"; + format = "[ ](bg:#5256c3 fg:prev_bg)[$symbol ($remote_name )$branch ]($style)"; + }; + git_status = { + staged = "+\${count} (fg:#C4A000)"; + ahead = "⇡\${count} (fg:#C4A000)"; + diverged = "⇕⇡\${count} (fg:#C4A000)"; + behind = "⇣\${count} (fg:#C4A000)"; + stashed = " "; + untracked = "?\${count} (fg:#C4A000)"; + modified = "!\${count} (fg:#C4A000)"; + deleted = "✘\${count} (fg:#C4A000)"; + conflicted = "=\${count} (fg:#C4A000)"; + renamed = "»\${count} (fg:#C4A000)"; + style = "bg:#5256c3 fg:fg:#C4A000"; + format = "[$all_status$ahead_behind]($style)"; + }; + git_metrics = { + disabled = false; + format = "([| ](bg:#5256c3)[+$added]($added_style bg:#5256c3)[ -$deleted]($deleted_style bg:#5256c3))"; + }; + c = { + format = code_format; + }; + elixir = { + format = code_format; + }; + elm = { + format = code_format; + }; + golang = { + format = code_format; + }; + gradle = { + format = code_format; + }; + haskell = { + format = code_format; + }; + java = { + format = code_format; + }; + julia = { + format = code_format; + }; + nodejs = { + format = code_format; + }; + nim = { + format = code_format; + }; + nix_shell = { + symbol = ""; + format = code_format; + }; + rust = { + format = code_format; + }; + scala = { + format = code_format; + }; + typst = { + format = code_format; + }; + python = { + format = code_format; + }; + ocaml = { + format = code_format; + }; + opa = { + format = code_format; + }; + perl = { + format = code_format; + }; + zig = { + format = code_format; + }; + dart = { + format = code_format; + }; + dotnet = { + format = code_format; + }; + time = { + disabled = false; + time_format = "%R"; # Hour:Minute Format + style = "bg:#3465A4 fg:#${scheme.base05}"; + format = "[ $time ]($style)"; + }; + } + // config.mods.starship.customPrompt; + }; + } + ); +} diff --git a/modules/programs/streamcontroller.nix b/modules/programs/streamcontroller.nix new file mode 100644 index 0000000..544367f --- /dev/null +++ b/modules/programs/streamcontroller.nix @@ -0,0 +1,39 @@ +{ + lib, + config, + options, + ... +}: { + options.mods = { + streamcontroller = { + enable = lib.mkOption { + default = false; + example = true; + type = lib.types.bool; + description = '' + Enables streamcontroller + ''; + }; + configFilePath = lib.mkOption { + default = null; + type = with lib.types; nullOr path; + description = '' + Path to the config json for the streamcontroller. + -> ./something.json + ''; + }; + }; + }; + + config = lib.mkIf config.mods.streamcontroller.enable ( + lib.optionalAttrs (options ? environment.systemPackages) { + programs.streamcontroller.enable = true; + } + // (lib.optionalAttrs (options ? home.file) { + home.file.".var/app/com.core447.StreamController/data/pages/defaultpage.json" = + lib.mkIf + (!isNull config.mods.streamcontroller.configFilePath) + {source = config.mods.streamcontroller.configFilePath;}; + }) + ); +} diff --git a/modules/programs/stylix.nix b/modules/programs/stylix.nix new file mode 100644 index 0000000..dd11e8c --- /dev/null +++ b/modules/programs/stylix.nix @@ -0,0 +1,131 @@ +{ + mkDashDefault, + lib, + config, + options, + unstable, + inputs, + pkgs, + ... +}: let + svg = ../../assets/rainbow.svg; + sd = lib.getExe pkgs.sd; + base16 = pkgs.callPackage inputs.base16.lib {}; + mkWallpaper = schemeStr: let + scheme = base16.mkSchemeAttrs schemeStr; + in + pkgs.runCommand "rainbow.png" {} '' + cat ${svg} \ + | ${sd} '#f9e2af' '#${scheme.base0A}' \ + | ${sd} '#fab387' '#${scheme.base09}' \ + | ${sd} '#f38ba8' '#${scheme.base08}' \ + | ${sd} '#89b4fa' '#${scheme.base0D}' \ + | ${sd} '#cba6f7' '#${scheme.base0E}' \ + | ${sd} '#a6e3a1' '#${scheme.base0B}' \ + | ${sd} '#1e1e2e' '#${scheme.base00}' \ + | ${lib.getExe pkgs.imagemagick} svg:- png:$out + ''; +in { + options.mods.stylix = { + colorscheme = lib.mkOption { + default = "catppuccin-mocha"; + example = { + # custom tokyo night + base00 = "1A1B26"; + base01 = "191a25"; + base02 = "2F3549"; + base03 = "444B6A"; + base04 = "787C99"; + base05 = "A9B1D6"; + base06 = "CBCCD1"; + base07 = "D5D6DB"; + base08 = "C0CAF5"; + base09 = "A9B1D7"; + base0A = "0DB9D7"; + base0B = "9ECE6A"; + base0C = "B4F9F8"; + base0D = "366fea"; + base0E = "BB9AF7"; + base0F = "F7768E"; + }; + type = with lib.types; + oneOf [ + str + attrs + path + ]; + description = '' + Base16 colorscheme. + Can be an attribute set with base00 to base0F, + a string that leads to a yaml file in base16-schemes path, + or a path to a custom yaml file. + + Also supports the oxiced theme in an oxiced attrset. + ''; + }; + cursor = lib.mkOption { + default = { + package = pkgs.bibata-cursors; + name = "Bibata-Modern-Classic"; + size = 24; + }; + example = {}; + type = with lib.types; attrsOf anything; + description = "Xcursor config"; + }; + fonts = lib.mkOption { + default = { + serif = { + package = unstable.adwaita-fonts; + name = "Adwaita Sans"; + }; + + sansSerif = { + package = unstable.adwaita-fonts; + name = "Adwaita Sans"; + }; + + monospace = { + package = unstable.nerd-fonts.jetbrains-mono; + name = "JetBrainsMono Nerd Font Mono"; + }; + + emoji = { + package = pkgs.noto-fonts-color-emoji; + name = "Noto Color Emoji"; + }; + }; + example = {}; + type = with lib.types; attrsOf anything; + description = "font config"; + }; + }; + config = let + scheme = + if builtins.isAttrs config.mods.stylix.colorscheme + then config.mods.stylix.colorscheme + else "${pkgs.base16-schemes}/share/themes/${config.mods.stylix.colorscheme}.yaml"; + in + (lib.optionalAttrs (options ? stylix) { + stylix = { + enable = true; + image = mkDashDefault (mkWallpaper scheme); + polarity = mkDashDefault "dark"; + targets = { + nixvim.enable = mkDashDefault false; + fish.enable = mkDashDefault false; + }; + fonts = config.mods.stylix.fonts; + cursor = config.mods.stylix.cursor; + base16Scheme = scheme; + }; + }) + // lib.optionalAttrs (options ? environment.systemPackages) { + environment.systemPackages = [ + config.mods.stylix.fonts.serif.package + config.mods.stylix.fonts.sansSerif.package + config.mods.stylix.fonts.monospace.package + config.mods.stylix.fonts.emoji.package + ]; + }; +} diff --git a/modules/programs/superfreq.nix b/modules/programs/superfreq.nix new file mode 100644 index 0000000..f031e2f --- /dev/null +++ b/modules/programs/superfreq.nix @@ -0,0 +1,28 @@ +{ + lib, + options, + config, + ... +}: { + options.mods.superfreq = { + enable = lib.mkOption { + default = false; + example = true; + type = lib.types.bool; + description = ''Enables superfreq''; + }; + settings = lib.mkOption { + default = {}; + example = {}; + type = with lib.types; attrsOf anything; + description = ''Superfreq config''; + }; + }; + + config = lib.optionalAttrs (options ? services.superfreq) { + services.superfreq = { + enable = config.mods.superfreq.enable; + settings = config.mods.superfreq.settings; + }; + }; +} diff --git a/modules/programs/supersonic.nix b/modules/programs/supersonic.nix new file mode 100644 index 0000000..3b732df --- /dev/null +++ b/modules/programs/supersonic.nix @@ -0,0 +1,73 @@ +{ + lib, + config, + options, + pkgs, + inputs, + ... +}: let + base16 = pkgs.callPackage inputs.base16.lib {}; + scheme = base16.mkSchemeAttrs config.stylix.base16Scheme; +in { + options.mods.supersonic = { + enable = lib.mkOption { + default = false; + example = true; + type = lib.types.bool; + description = "Enables and configures supersonic"; + }; + variant = lib.mkOption { + default = "wayland"; + example = "x11"; + type = lib.types.enum [ + "wayland" + "x11" + ]; + description = "The variant of supersonic"; + }; + }; + config = lib.mkIf config.mods.supersonic.enable ( + lib.optionalAttrs (options ? home.packages) { + home.packages = with pkgs; [ + ( + if config.mods.supersonic.variant == "wayland" + then supersonic-wayland + else supersonic + ) + ]; + xdg.configFile."supersonic/themes/custom.toml".source = + (pkgs.formats.toml {}).generate "customTheme" + { + SupersonicTheme = { + Name = "Custom"; + Version = "0.2"; + SupportsDark = true; + SupportsLight = true; + }; + + DarkColors = { + PageBackground = "#${scheme.base00}"; + ListHeader = "#${scheme.base02}"; + PageHeader = "#${scheme.base02}"; + Background = "#${scheme.base01}"; + ScrollBar = "#${scheme.base02}"; + Button = "#${scheme.base02}"; + Foreground = "#${scheme.base04}"; + InputBackground = "#${scheme.base02}"; + }; + + # just define the same as base 16 doesn't define if it is light or not + LightColors = { + PageBackground = "#${scheme.base00}"; + ListHeader = "#${scheme.base02}"; + PageHeader = "#${scheme.base02}"; + Background = "#${scheme.base01}"; + ScrollBar = "#${scheme.base02}"; + Button = "#${scheme.base02}"; + Foreground = "#${scheme.base04}"; + InputBackground = "#${scheme.base02}"; + }; + }; + } + ); +} diff --git a/modules/programs/sway.nix b/modules/programs/sway.nix new file mode 100644 index 0000000..eef6025 --- /dev/null +++ b/modules/programs/sway.nix @@ -0,0 +1,30 @@ +{ + lib, + config, + options, + ... +}: { + options.mods.sway = { + enable = lib.mkOption { + default = false; + example = true; + type = lib.types.bool; + description = "Enables sway"; + }; + config = lib.mkOption { + default = {}; + example = {}; + type = with lib.types; attrsOf anything; + description = "sway config"; + }; + }; + config = lib.mkIf config.mods.sway.enable ( + lib.optionalAttrs (options ? wayland.windowManger.sway) { + wayland.windowManager.sway = + { + enable = true; + } + // config.mods.sway.config; + } + ); +} diff --git a/modules/programs/teams.nix b/modules/programs/teams.nix new file mode 100644 index 0000000..e9d843a --- /dev/null +++ b/modules/programs/teams.nix @@ -0,0 +1,38 @@ +{ + lib, + config, + options, + pkgs, + ... +}: let + callPackage = lib.callPackageWith pkgs; +in { + options.mods.teams = { + enable = lib.mkOption { + default = false; + example = true; + type = lib.types.bool; + description = "Enables teams via a chromium pwa (for the poor souls that have to use this for work)"; + }; + loopback = lib.mkOption { + default = true; + example = false; + type = lib.types.bool; + description = "Enables loopback for screensharing -> teams sucks :)"; + }; + }; + config = lib.mkIf config.mods.teams.enable ( + lib.optionalAttrs (options ? home.packages) { + home.packages = [(callPackage ../../override/teams.nix {inherit (pkgs) chromium;})]; + } + // (lib.optionalAttrs (options ? boot.kernelModules) { + boot = { + extraModulePackages = with config.boot.kernelPackages; [v4l2loopback]; + kernelModules = ["v4l2loopback"]; + extraModprobeConfig = '' + options v4l2loopback exclusive_caps=1 card_label="Virtual Camera" + ''; + }; + }) + ); +} diff --git a/modules/programs/virtmanager.nix b/modules/programs/virtmanager.nix new file mode 100644 index 0000000..de38848 --- /dev/null +++ b/modules/programs/virtmanager.nix @@ -0,0 +1,67 @@ +{ + mkDashDefault, + lib, + config, + options, + pkgs, + ... +}: let + module = + if config.conf.cpu == "intel" + then "kvm-intel" + else if config.conf.cpu == "amd" + then "kvm-amd" + else ""; +in { + options.mods = { + virtmanager.enable = lib.mkOption { + default = false; + type = lib.types.bool; + example = true; + description = '' + + + Enables virt-manager kvm. + ''; + }; + }; + + config = + lib.optionalAttrs (options ? virtualisation.libvirtd) { + boot.kernelModules = [ + module + ]; + programs.virt-manager.enable = true; + environment.systemPackages = with pkgs; [ + spice + spice-gtk + spice-protocol + virt-viewer + ]; + virtualisation = { + libvirtd = { + enable = true; + qemu = { + package = mkDashDefault pkgs.qemu_kvm; + swtpm.enable = mkDashDefault true; + }; + }; + spiceUSBRedirection.enable = mkDashDefault true; + }; + services.spice-vdagentd.enable = mkDashDefault true; + + users.users.${config.conf.username}.extraGroups = [ + "libvirtd" + "kvm" + "qemu-libvirtd" + ]; + } + // lib.optionalAttrs (options ? dconf.settings) { + dconf.settings = { + "org/virt-manager/virt-manager/connections" = { + autoconnect = ["qemu:///system"]; + uris = ["qemu:///system"]; + }; + }; + }; +} diff --git a/modules/programs/wm.nix b/modules/programs/wm.nix new file mode 100644 index 0000000..0f794d3 --- /dev/null +++ b/modules/programs/wm.nix @@ -0,0 +1,403 @@ +{lib, ...}: let + wmWorkspace = with lib.types; { + options = { + name = lib.mkOption { + default = ""; + example = "1"; + type = str; + description = "Name of the workspace"; + }; + default = lib.mkOption { + default = false; + example = true; + type = bool; + description = "Whether the workspace is the default workspace. (Currently doesn't do anything on niri)"; + }; + monitor = lib.mkOption { + default = ""; + example = "DP-1"; + type = str; + description = "Name of the monitor to bind the workspace to"; + }; + }; + }; + + wmOptions = with lib.types; { + options = { + name = lib.mkOption { + default = "DP-1"; + example = "DP-1"; + type = str; + description = "Name of the monitor"; + }; + resolutionX = lib.mkOption { + default = 1920; + example = 2560; + type = number; + description = "ResolutionX of the monitor"; + }; + resolutionY = lib.mkOption { + default = 1080; + example = 1440; + type = number; + description = "ResolutionY of the monitor"; + }; + refreshrate = lib.mkOption { + default = 60; + example = 144; + type = number; + description = "Refreshrate of the monitor"; + }; + positionX = lib.mkOption { + default = 0; + example = 1920; + type = number; + description = "PositionX of the monitor"; + }; + positionY = lib.mkOption { + default = 0; + example = 1080; + type = number; + description = "PositionY of the monitor"; + }; + scale = lib.mkOption { + default = 1; + example = 2; + type = number; + description = "Scale of the monitor"; + }; + transform = lib.mkOption { + default = "0"; + example = "90"; + type = enum ["0" "90" "180" "270" "360"]; + description = "Transform of the monitor"; + }; + vrr = lib.mkOption { + default = false; + example = true; + type = bool; + description = "VRR status of the monitor"; + }; + }; + }; + + modKeys = lib.types.enum ["Mod" "Super" "Alt" "Shift" "Ctrl"]; + + customCommand = with lib.types; { + options = { + niri = lib.mkOption { + default = null; + example = "kitty"; + type = either null str; + description = "Command to use in niri"; + }; + hyprland = lib.mkOption { + default = null; + example = "kitty"; + type = either null str; + description = "Command to use in hyprland"; + }; + }; + }; + + envOptions = with lib.types; { + options = { + all = lib.mkOption { + default = {}; + example = {}; + type = attrsOf str; + description = "General Env"; + }; + niri = lib.mkOption { + default = {}; + example = {}; + type = attrsOf str; + description = "Niri Env"; + }; + hyprland = lib.mkOption { + default = {}; + example = {}; + type = attrsOf str; + description = "Hyprland Env"; + }; + }; + }; + + startupOptions = with lib.types; { + options = { + all = lib.mkOption { + default = []; + example = []; + type = listOf str; + description = "General Startup commands"; + }; + niri = lib.mkOption { + default = []; + example = []; + type = listOf str; + description = "Niri Startup commands"; + }; + hyprland = lib.mkOption { + default = []; + example = []; + type = listOf str; + description = "Hyprland Startup commands"; + }; + }; + }; + + windowRuleOptions = with lib.types; { + options = { + niri = lib.mkOption { + default = []; + example = []; + type = listOf lines; + description = "Niri window rules"; + }; + hyprland = lib.mkOption { + default = []; + example = []; + type = listOf str; + description = "Hyprland window rules"; + }; + }; + }; + + bindOptions = with lib.types; { + options = { + modKeys = lib.mkOption { + default = []; + example = ["Mod"]; + type = listOf modKeys; + description = "List of modifier keys"; + }; + key = lib.mkOption { + default = ""; + example = "Q"; + type = str; + description = "Key to bind"; + }; + command = lib.mkOption { + default = ""; + example = "killActive"; + type = either (submodule customCommand) (enum [ + "spawn" + "spawn-sh" + "quit" + "killActive" + "moveFocusUp" + "moveFocusRight" + "moveFocusDown" + "moveFocusLeft" + "moveWindowUp" + "moveWindowRight" + "moveWindowDown" + "moveWindowLeft" + "focusWorkspace" + "moveToWorkspace" + "toggleFloating" + "toggleFullscreen" + ]); + description = "Command to execute"; + }; + args = lib.mkOption { + default = []; + example = []; + type = listOf str; + description = "Additional arguments for the command"; + }; + meta = lib.mkOption { + default = {}; + example = {}; + type = submodule { + options = { + niri = lib.mkOption { + default = {}; + type = submodule { + options = { + desc = lib.mkOption { + default = ""; + type = str; + description = "Description for Hotkey overview"; + }; + repeat = lib.mkOption { + type = bool; + default = true; + description = "Whether to repeat the keybind on hold"; + }; + allowInhibit = lib.mkOption { + type = bool; + default = true; + description = "Whether to allow inhibiting"; + }; + allowWhileLocked = lib.mkOption { + type = bool; + default = false; + description = "Whether to allow while locked"; + }; + cooldown = lib.mkOption { + type = number; + default = 0; + description = "Cooldown on bind"; + }; + }; + }; + description = "Niri meta for keybinds"; + }; + hyprland = lib.mkOption { + default = {}; + type = submodule { + options = { + repeat = lib.mkOption { + type = bool; + default = true; + description = "Whether to repeat the keybind on hold"; + }; + }; + }; + description = "Niri meta for keybinds"; + }; + }; + }; + description = "Custom metadata per bind. Note, only supported environments are taken into account."; + }; + }; + }; +in { + options.mods.wm = { + modKey = lib.mkOption { + default = "Super"; + example = "Alt"; + type = modKeys; + description = "Mod key"; + }; + + env = lib.mkOption { + default = {}; + example = { + all = { + EDITOR = "Neovim"; + }; + niri = { + EDITOR = "Emacs"; + }; + }; + type = with lib.types; either (submodule envOptions) (attrsOf str); + description = "Environment configuration"; + }; + + useDefaultEnv = lib.mkOption { + default = true; + example = false; + type = lib.types.bool; + description = "Whether to use default env variables"; + }; + + startup = lib.mkOption { + default = []; + example = { + all = ["oxinoti"]; + niri = ["someniricommand"]; + hyprland = ["somehyprlandcommand"]; + }; + type = with lib.types; either (submodule startupOptions) (listOf str); + description = "Start commands"; + }; + + useDefaultStartup = lib.mkOption { + default = true; + example = false; + type = lib.types.bool; + description = "Whether to use default autostart commands"; + }; + + useDefaultWindowRules = lib.mkOption { + default = true; + example = false; + type = lib.types.bool; + description = "Whether to use default window rules"; + }; + + windowRules = lib.mkOption { + default = {}; + example = { + niri = [ + '' + match app-id=r#"^org\.keepassxc\.KeePassXC$"# + match app-id=r#"^org\.gnome\.World\.Secrets$"# + + block-out-from "screen-capture" + '' + '' + match app-id=r#"^steam$"# + open-on-workspace "0" + '' + ]; + }; + type = lib.types.submodule windowRuleOptions; + description = "Window rules"; + }; + + workspaces = lib.mkOption { + default = []; + example = [ + { + name = "chat"; + monitor = "DP-1"; + } + ]; + type = + lib.types.listOf (lib.types.submodule wmWorkspace); + description = "Workspace configuration"; + }; + + monitors = lib.mkOption { + default = []; + example = [ + { + name = "DP-1"; + resolutionX = 1920; + resolutionY = 1080; + refreshrate = 144; + positionX = 0; + positionY = 0; + scale = 1; + transform = "0"; + vrr = false; + } + ]; + type = + lib.types.listOf (lib.types.submodule wmOptions); + description = "Monitor configuration"; + }; + + useDefaultBinds = lib.mkOption { + default = true; + example = false; + type = lib.types.bool; + description = "Whether to use default keybinds"; + }; + + binds = lib.mkOption { + default = []; + example = [ + { + modKeys = ["Mod"]; + key = "Q"; + command = "killActive"; + args = []; + meta = { + niri = { + desc = "Kill the active window"; + repeat = false; + }; + hyprland = {}; + }; + } + ]; + type = + lib.types.listOf (lib.types.submodule bindOptions); + description = "Bind configuration"; + }; + }; +} diff --git a/modules/programs/xkb.nix b/modules/programs/xkb.nix new file mode 100644 index 0000000..ebb1bda --- /dev/null +++ b/modules/programs/xkb.nix @@ -0,0 +1,28 @@ +{ + lib, + options, + config, + ... +}: { + options.mods.xkb = { + layout = lib.mkOption { + default = "enIntUmlaut"; + example = "us"; + type = lib.types.str; + description = "Your layout"; + }; + variant = lib.mkOption { + default = ""; + example = ""; + type = lib.types.str; + description = "Your variant"; + }; + }; + config = lib.optionalAttrs (options ? services.xserver) { + # Configure keymap in X11 + services.xserver = { + xkb.layout = "${config.mods.xkb.layout}"; + xkb.variant = "${config.mods.xkb.variant}"; + }; + }; +} diff --git a/modules/programs/xone.nix b/modules/programs/xone.nix new file mode 100644 index 0000000..84ecd48 --- /dev/null +++ b/modules/programs/xone.nix @@ -0,0 +1,19 @@ +{ + lib, + config, + options, + ... +}: { + options.mods = { + xone.enable = lib.mkOption { + default = false; + type = lib.types.bool; + example = true; + description = '' + Enables the xone driver for xbox controllers. + ''; + }; + }; + + config = lib.optionalAttrs (options ? hardware) {hardware.xone.enable = config.mods.xone.enable;}; +} diff --git a/modules/programs/yazi/default.nix b/modules/programs/yazi/default.nix new file mode 100644 index 0000000..d890a81 --- /dev/null +++ b/modules/programs/yazi/default.nix @@ -0,0 +1,62 @@ +{ + pkgs, + lib, + config, + options, + ... +}: { + options.mods.yazi = { + enable = lib.mkOption { + default = true; + example = false; + type = lib.types.bool; + description = "Enables yazi"; + }; + useDefaultConfig = lib.mkOption { + default = true; + example = false; + type = lib.types.bool; + description = "Use default yazi config (if disabled only additionalConfig is used)"; + }; + additionalConfig = lib.mkOption { + default = {}; + example = {}; + type = with lib.types; attrsOf anything; + description = "Additional config for yazi"; + }; + useDefaultKeymap = lib.mkOption { + default = true; + example = false; + type = lib.types.bool; + description = "Use default yazi keymap (if disabled only additionalKeymap is used)"; + }; + additionalKeymap = lib.mkOption { + default = {}; + example = {}; + type = with lib.types; attrsOf anything; + description = "Additional keymap for yazi"; + }; + plugins = lib.mkOption { + default = { + inherit (pkgs.yaziPlugins) piper diff gitui wl-clipboard; + }; + example = {}; + type = with lib.types; attrsOf anything; + description = "Additional keymap for yazi"; + }; + }; + config = let + conf = import ./yazi.nix; + in + lib.optionalAttrs (options ? home.packages) ( + lib.mkIf config.mods.yazi.enable { + home.packages = [pkgs.glow]; + programs.yazi = { + inherit (conf) enable; + settings = conf.settings // config.mods.yazi.additionalKeymap; + keymap = conf.keymap // config.mods.yazi.additionalConfig; + inherit (config.mods.yazi) plugins; + }; + } + ); +} diff --git a/modules/programs/yazi/yazi.nix b/modules/programs/yazi/yazi.nix new file mode 100644 index 0000000..22e3169 --- /dev/null +++ b/modules/programs/yazi/yazi.nix @@ -0,0 +1,1016 @@ +{ + # don't ask.... + enable = true; + settings = { + log = { + enabled = false; + }; + opener = { + folder = [ + { + run = ''open - R "$@"''; + orphan = true; + display_name = "Reveal in Finder"; + } + { + run = ''$EDITOR "$@"''; + orphan = true; + } + ]; + archive = [ + { + run = ''unar "$1"''; + display_name = "Extract here"; + } + ]; + text = [ + { + run = ''$EDITOR "$@"''; + orphan = true; + } + ]; + image = [ + { + run = ''eog "$@"''; + orphan = true; + display_name = "Open"; + } + { + run = ''exiftool "$1"; echo "Press enter to exit"; read''; + block = true; + display_name = "Show EXIF"; + } + ]; + pdf = [ + { + run = ''zathura "$@"''; + orphan = true; + display_name = "Open"; + } + ]; + video = [ + { + run = ''mpv "$@"''; + orphan = true; + } + { + run = ''mediainfo "$1"; echo "Press enter to exit"; read''; + block = true; + display_name = "Show media info"; + } + ]; + audio = [ + { + run = ''xdg-open "$@"''; + orphan = true; + } + { + run = ''mediainfo "$1"; echo "Press enter to exit"; read''; + block = true; + display_name = "Show media info"; + } + ]; + fallback = [ + { + run = ''xdg-open "$@"''; + orphan = true; + display_name = "Open"; + } + { + run = ''xdg-open - R "$@"''; + orphan = true; + display_name = "Reveal in Finder"; + } + ]; + }; + plugin = { + prepend_previewers = [ + { + name = "*.tar"; + run = ''piper --format=url -- tar tf "$1"''; + } + { + name = "*.md"; + run = ''piper -- CLICOLOR_FORCE=1 glow -w=$w -s=dark "$1"''; + } + { + mime = "text/csv"; + run = ''piper -- bat -p --color=always "$1"''; + } + ]; + }; + }; + keymap = { + mgr.keymap = [ + { + on = ""; + run = "backspace"; + desc = "Delete the character before the cursor"; + } + { + on = [""]; + 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 = [""]; + run = "close"; + desc = "Close the current tab or quit if it is last tab"; + } + { + on = [""]; + run = "suspend"; + desc = "Suspend the process"; + } + + # Navigation + { + on = ["l"]; + run = "arrow -1"; + desc = "Move cursor up"; + } + { + on = ["k"]; + run = "arrow 1"; + desc = "Move cursor down"; + } + + { + on = ["L"]; + run = "arrow -5"; + desc = "Move cursor up 5 lines"; + } + { + on = ["K"]; + run = "arrow 5"; + desc = "Move cursor down 5 lines"; + } + + { + on = [""]; + run = "arrow -50%"; + desc = "Move cursor up half page"; + } + { + on = [""]; + run = "arrow 50%"; + desc = "Move cursor down half page"; + } + { + on = [""]; + run = "arrow -100%"; + desc = "Move cursor up one page"; + } + { + on = [""]; + run = "arrow 100%"; + desc = "Move cursor down one page"; + } + + { + on = ["j"]; + run = "leave"; + desc = "Go back to the parent directory"; + } + { + on = [";"]; + run = "enter"; + desc = "Enter the child directory"; + } + + { + on = ["J"]; + run = "back"; + desc = "Go back to the previous directory"; + } + { + on = ["P"]; + run = "forward"; + desc = "Go forward to the next directory"; + } + + { + on = [""]; + run = "peek -5"; + desc = "Peek up 5 units in the preview"; + } + { + on = [""]; + run = "peek 5"; + desc = "Peek down 5 units in the preview"; + } + + { + on = [""]; + run = "arrow -1"; + desc = "Move cursor up"; + } + { + on = [""]; + run = "arrow 1"; + desc = "Move cursor down"; + } + { + on = [""]; + run = "leave"; + desc = "Go back to the parent directory"; + } + { + on = [""]; + run = "enter"; + desc = "Enter the child directory"; + } + + { + on = [ + "g" + "g" + ]; + run = "arrow -99999999"; + desc = "Move cursor to the top"; + } + { + on = ["G"]; + run = "arrow 99999999"; + desc = "Move cursor to the bottom"; + } + + # Selection + { + on = ["v"]; + run = "visual_mode"; + desc = "Enter visual mode (selection mode)"; + } + { + on = ["V"]; + run = "visual_mode --unset"; + desc = "Enter visual mode (unset mode)"; + } + { + on = [""]; + run = "select_all --state=true"; + desc = "Select all files"; + } + { + on = [""]; + run = "select_all --state=none"; + desc = "Inverse selection of all files"; + } + + # Operation + { + on = ["o"]; + run = "open"; + desc = "Open the selected files"; + } + { + on = ["O"]; + run = "open --interactive"; + desc = "Open the selected files interactively"; + } + { + on = [""]; + run = "open"; + desc = "Open the selected files"; + } + { + on = [""]; + run = "open --interactive"; + desc = "Open the selected files interactively"; + } # It's cool if you're using a terminal that supports CSI u + { + on = ["y"]; + run = "yank"; + desc = "Copy the selected files"; + } + { + on = ["x"]; + run = "yank --cut"; + desc = "Cut the selected files"; + } + { + on = ["p"]; + run = "paste"; + desc = "Paste the files"; + } + { + on = ["P"]; + run = "paste --force"; + desc = "Paste the files (overwrite if the destination exists)"; + } + { + on = ["-"]; + run = "link"; + desc = "Symlink the absolute path of files"; + } + { + on = ["_"]; + run = "link --relative"; + desc = "Symlink the relative path of files"; + } + { + on = ["d"]; + run = "remove"; + desc = "Move the files to the trash"; + } + { + on = ["D"]; + run = "remove --permanently"; + desc = "Permanently delete the files"; + } + { + on = ["a"]; + run = "create"; + desc = "Create a file or directory (ends with / for directories)"; + } + { + on = ["r"]; + run = "rename"; + desc = "Rename a file or directory"; + } + { + on = [";"]; + run = "shell"; + desc = "Run a shell command"; + } + { + on = [":"]; + run = "shell --block"; + desc = "Run a shell command (block the UI until the command finishes)"; + } + { + on = ["."]; + run = "hidden toggle"; + desc = "Toggle the visibility of hidden files"; + } + { + on = [ + "" + "f" + "g>" + ]; + run = "search fd"; + desc = "Search files by name using fd"; + } + { + on = [ + "" + "f" + "G>" + ]; + run = "search rg"; + desc = "Search files by content using ripgrep"; + } + { + on = [""]; + run = "search none"; + 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"; + } + + # Copy + { + on = [ + "c" + "c" + ]; + run = "copy path"; + desc = "Copy the absolute path"; + } + { + on = [ + "c" + "d" + ]; + run = "copy dirname"; + desc = "Copy the path of the parent directory"; + } + { + on = [ + "c" + "f" + ]; + run = "copy filename"; + desc = "Copy the name of the file"; + } + { + on = [ + "c" + "n" + ]; + run = "copy name_without_ext"; + desc = "Copy the name of the file without the extension"; + } + + # Find + { + on = ["/"]; + run = "find --smart"; + } + { + on = ["?"]; + run = "find --previous --smart"; + } + { + on = ["n"]; + run = "find_arrow"; + } + { + on = ["N"]; + run = "find_arrow --previous"; + } + + # Sorting + { + on = [ + "," + "a" + ]; + run = "sort alphabetical --dir_first"; + desc = "Sort alphabetically"; + } + { + on = [ + "," + "A" + ]; + run = "sort alphabetical --reverse --dir_first"; + desc = "Sort alphabetically (reverse)"; + } + { + on = [ + "," + "c" + ]; + run = "sort created --dir_first"; + desc = "Sort by creation time"; + } + { + on = [ + "," + "C" + ]; + run = "sort created --reverse --dir_first"; + desc = "Sort by creation time (reverse)"; + } + { + on = [ + "," + "m" + ]; + run = "sort modified --dir_first"; + desc = "Sort by modified time"; + } + { + on = [ + "," + "M" + ]; + run = "sort modified --reverse --dir_first"; + desc = "Sort by modified time (reverse)"; + } + { + on = [ + "," + "n" + ]; + run = "sort natural --dir_first"; + desc = "Sort naturally"; + } + { + on = [ + "," + "N" + ]; + run = "sort natural --reverse --dir_first"; + desc = "Sort naturally (reverse)"; + } + { + on = [ + "," + "s" + ]; + run = "sort size --dir_first"; + desc = "Sort by size"; + } + { + on = [ + "," + "S" + ]; + run = "sort size --reverse --dir_first"; + desc = "Sort by size (reverse)"; + } + + # Tabs + { + on = ["t"]; + run = "tab_create --current"; + desc = "Create a new tab using the current path"; + } + + { + 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 the current tab with the previous tab"; + } + { + on = ["}"]; + run = "tab_swap 1"; + desc = "Swap the current tab with the next tab"; + } + + # Tasks + { + on = ["w"]; + run = "tasks_show"; + desc = "Show the tasks manager"; + } + + # 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" + "t" + ]; + run = "cd /tmp"; + desc = "Go to the temporary directory"; + } + { + on = [ + "g" + "" + ]; + run = "cd --interactive"; + desc = "Go to a directory interactively"; + } + + # Help + { + on = ["~"]; + run = "help"; + desc = "Open help"; + } + ]; + + tasks.keymap = [ + { + on = [""]; + run = "close"; + desc = "Hide the task manager"; + } + { + on = [""]; + run = "close"; + desc = "Hide the task manager"; + } + { + on = ["w"]; + run = "close"; + desc = "Hide the task manager"; + } + + { + on = ["k"]; + run = "arrow -1"; + desc = "Move cursor up"; + } + { + on = ["j"]; + run = "arrow 1"; + desc = "Move cursor down"; + } + + { + on = [""]; + run = "arrow -1"; + desc = "Move cursor up"; + } + { + on = [""]; + run = "arrow 1"; + desc = "Move cursor down"; + } + + { + on = [""]; + run = "inspect"; + desc = "Inspect the task"; + } + { + on = ["x"]; + run = "cancel"; + desc = "Cancel the task"; + } + + { + on = ["~"]; + run = "help"; + desc = "Open help"; + } + ]; + + select.keymap = [ + { + on = [""]; + run = "close"; + desc = "Cancel selection"; + } + { + on = [""]; + run = "close"; + desc = "Cancel selection"; + } + { + on = [""]; + 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 = ["K"]; + run = "arrow -5"; + desc = "Move cursor up 5 lines"; + } + { + on = ["J"]; + run = "arrow 5"; + desc = "Move cursor down 5 lines"; + } + + { + on = [""]; + run = "arrow -1"; + desc = "Move cursor up"; + } + { + on = [""]; + run = "arrow 1"; + desc = "Move cursor down"; + } + + { + on = ["~"]; + run = "help"; + desc = "Open help"; + } + ]; + + input.keymap = [ + { + on = ""; + run = "backspace"; + desc = "Delete the character before the cursor"; + } + { + on = [""]; + run = "close"; + desc = "Cancel input"; + } + { + on = [""]; + run = "close --submit"; + desc = "Submit the input"; + } + { + on = [""]; + 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 = ["v"]; + run = "visual"; + desc = "Enter visual mode"; + } + { + on = ["V"]; + run = [ + "move -999" + "visual" + "move 999" + ]; + desc = "Enter visual mode and select all"; + } + + # Navigation + { + on = ["h"]; + run = "move -1"; + desc = "Move cursor left"; + } + { + on = ["l"]; + run = "move 1"; + desc = "Move cursor right"; + } + + { + on = ["0"]; + run = "move -999"; + desc = "Move to the BOL"; + } + { + on = ["$"]; + run = "move 999"; + desc = "Move to the EOL"; + } + { + 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 = [""]; + run = "move -1"; + desc = "Move cursor left"; + } + { + on = [""]; + run = "move 1"; + desc = "Move cursor right"; + } + + { + on = ["b"]; + run = "backward"; + desc = "Move to the beginning of the previous word"; + } + { + on = ["w"]; + run = "forward"; + desc = "Move to the beginning of the next word"; + } + { + on = ["e"]; + run = "forward --end-of-word"; + desc = "Move to the end of the next word"; + } + + # Deletion + { + 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"; + } + + # Yank/Paste + { + 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 = [""]; + run = "redo"; + desc = "Redo the last operation"; + } + + # Help + { + on = ["~"]; + run = "help"; + desc = "Open help"; + } + ]; + + help.keymap = [ + { + on = [""]; + run = "escape"; + desc = "Clear the filter or hide the help"; + } + { + on = ["q"]; + run = "close"; + desc = "Exit the process"; + } + { + on = [""]; + 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 = ["K"]; + run = "arrow -5"; + desc = "Move cursor up 5 lines"; + } + { + on = ["J"]; + run = "arrow 5"; + desc = "Move cursor down 5 lines"; + } + + { + on = [""]; + run = "arrow -1"; + desc = "Move cursor up"; + } + { + on = [""]; + run = "arrow 1"; + desc = "Move cursor down"; + } + + # Filtering + { + on = ["/"]; + run = "filter"; + desc = "Apply a filter for the help items"; + } + ]; + }; +} diff --git a/nvim/.luarc.json b/nvim/.luarc.json deleted file mode 100644 index 6789105..0000000 --- a/nvim/.luarc.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "$schema": "https://raw.githubusercontent.com/sumneko/vscode-lua/master/setting/schema.json", - "Lua.diagnostics.globals": [ - "termid", - "global" - ], - "Lua.workspace.library": [ - "${3rd}/luassert/library" - ] -} \ No newline at end of file diff --git a/nvim/README.md b/nvim/README.md deleted file mode 100644 index 0e187c7..0000000 --- a/nvim/README.md +++ /dev/null @@ -1,125 +0,0 @@ -# List of keymaps - -## Space as leader - -## Debugging -| key | Description | -| --- | ------------------------- | -| F5 | toggle breakpoint | -| F6 | step over breakpoint | -| F7 | step into breakpoint | -| F8 | start debugging | -| F9 | continue from breakpoint | -| F10 | close debug UI | - -## Nerd Tree -| key | Description | -| --- | ------------------------- | -| f |toggle open | - -## buffer switching -| key | Description | -| --- | ------------------------- | -| F1 | next buffer (cycles) | -| F2 | previous buffer (cycles) | - -## formatting -| key | Description | -| --- | ------------------------- | -| F4 | format this file | - -## telescope -| key | Description | -| --- | ------------------------- | -| ff | find files | -| fg | live ripgrep | -| fb | find buffers | -| fh | help for functions etc | -| fp | find projects | -| fb | file browser | - -### telescope git -| key | Description | -| ---------- | ------------------------- | -| gq | show commits | -| gw | show commits with diff | -| ge | show branches | -| gr | show git status | -| ga | show git stash | - -### project telescope - -
normal mode insert mode
- -| key | Description | -| --- | --------------------------------- | -| d | delete project | -| r | rename project | -| c | create project | -| s | search files in project | -| b | browse files in project | -| w | change directory to project | -| R | recently opened files in project | -| f | find file within project | - - -| key | Description | -| -------- | --------------------------------- | -| Ctrl + d | delete project | -| Ctrl + v | rename project | -| Ctrl + a | create project | -| Ctrl + s | search files in project | -| Ctrl + b | browse files in project | -| Ctrl + l | change directory to project | -| Ctrl + r | recently opened files in project | -| Ctrl + f | find file within project | - -
- - -## toggletrouble -| key | Description | -| -------- | ------------------------- | -| Ctrl + f | show errors and warnings | - -## cmp -Note, these require the cmp list view to be open to do anything! -| key | Description | -| ----------- | --------------------------------------------------------- | -| Ctrl + b | scroll docs up | -| Ctrl + f | scroll docs down | -| Ctrl + e | cancel cmp | -| Enter | write selected suggestion (does nothing if not selected) | -| Tab |scroll down through suggestion list | -| Shift + Tab | scroll up through suggestion list | - -## LSP -| key | Description | -| ----------- | ---------------------- | -| Leader + a | go to declaration | -| Leader + s | go to definition | -| Leader + d | go to type definitions | -| Leader + f | go to references | -| Leader + q | execute code actions | -| Leader + w | signature help | -| Leader + e | hover | -| Leader + r | rename | - -## snippets -These require you to be inside a snippet! -| key | Description | -| -------- | ------------------------- | -| Ctrl + j | jump to next entry | -| Ctrl + k | jump to previous entry | - -## Dashboard -only available on dashboard -| key | Description | -| --- | ------------------------- | -| f | file | -| e | new file | -| p | find project | -| r | recently used files | -| t | find text | -| c | open config | -| q | quit | diff --git a/nvim/init.lua b/nvim/init.lua deleted file mode 100644 index 3c251fc..0000000 --- a/nvim/init.lua +++ /dev/null @@ -1,32 +0,0 @@ -vim.g.loaded_netrw = 1 -vim.g.loaded_netrwPlugin = 1 - -require("settings.plugins") -require("settings.options") -require("settings.cmp") -require("settings.lsp") -require("settings.devicons") -require("settings.treesitter") -require("settings.nvim-tree") -require("settings.pairs") -require("settings.indentline") -require("settings.project") -require("settings.dashboard") -require("settings.rainbow") -require("settings.dap") -require("settings.autocommands") -require("settings.telescope") -require("settings.vimtex") -require("settings.keymaps") -require("settings.barbar") - --- simple plugins that don't make sense to put in a seperate file, would clutter too much -require("gitsigns").setup() -require("feline").setup() -require("impatient").enable_profile() -require("nightfox") -require('Comment').setup() -require("toggleterm").setup({ - autochdir = true, -}) -require('leap').add_default_mappings() diff --git a/nvim/installer.sh b/nvim/installer.sh deleted file mode 100644 index f3f80cb..0000000 --- a/nvim/installer.sh +++ /dev/null @@ -1,85 +0,0 @@ -#!/bin/sh -# Standalone installer for Unixs -# Original version is created by shoma2da -# https://github.com/shoma2da/neobundle_installer - -set -e - -if [ $# -ne 1 ]; then - echo "You must specify the installation directory!" - exit 1 -fi - -# Convert the installation directory to absolute path -case $1 in - /*) PLUGIN_DIR=$1;; - *) PLUGIN_DIR=$PWD/$1;; -esac -INSTALL_DIR="${PLUGIN_DIR}/repos/github.com/Shougo/dein.vim" -echo "Install to \"$INSTALL_DIR\"..." -if [ -e "$INSTALL_DIR" ]; then - echo "\"$INSTALL_DIR\" already exists!" -fi - -echo "" - -# check git command -type git || { - echo 'Please install git or update your path to include the git executable!' - exit 1 -} -echo "" - -# make plugin dir and fetch dein -if ! [ -e "$INSTALL_DIR" ]; then - echo "Begin fetching dein..." - mkdir -p "$PLUGIN_DIR" - git clone --depth=1 https://github.com/Shougo/dein.vim "$INSTALL_DIR" - echo "Done." - echo "" -fi - -# write initial setting for .vimrc -echo "Please add the following settings for dein to the top of your vimrc (Vim) or init.vim (NeoVim) file:" -{ - echo "" - echo "" - echo "\"dein Scripts-----------------------------" - echo "if &compatible" - echo " set nocompatible \" Be iMproved" - echo "endif" - echo "" - echo "\" Required:" - echo "set runtimepath+=$INSTALL_DIR" - echo "" - echo "\" Required:" - echo "call dein#begin('$PLUGIN_DIR')" - echo "" - echo "\" Let dein manage dein" - echo "\" Required:" - echo "call dein#add('$INSTALL_DIR')" - echo "" - echo "\" Add or remove your plugins here like this:" - echo "\"call dein#add('Shougo/neosnippet.vim')" - echo "\"call dein#add('Shougo/neosnippet-snippets')" - echo "" - echo "\" Required:" - echo "call dein#end()" - echo "" - echo "\" Required:" - echo "filetype plugin indent on" - echo "syntax enable" - echo "" - echo "\" If you want to install not installed plugins on startup." - echo "\"if dein#check_install()" - echo "\" call dein#install()" - echo "\"endif" - echo "" - echo "\"End dein Scripts-------------------------" - echo "" - echo "" -} - -echo "Done." - -echo "Complete setup dein!" diff --git a/nvim/lua/settings/.prettierrc b/nvim/lua/settings/.prettierrc deleted file mode 100644 index e524ddd..0000000 --- a/nvim/lua/settings/.prettierrc +++ /dev/null @@ -1,6 +0,0 @@ -{ - "trailingComma": "all", - "tabWidth": 4, - "semi": true, - "singleQuote": true -} diff --git a/nvim/lua/settings/autocommands.lua b/nvim/lua/settings/autocommands.lua deleted file mode 100644 index d6c6d63..0000000 --- a/nvim/lua/settings/autocommands.lua +++ /dev/null @@ -1,15 +0,0 @@ -vim.cmd('let g:vimtex_view_general_viewer = "evince"') -vim.cmd('let g:vimtex_compiler_method = "latexmk"') -vim.cmd("colorscheme nightfox") - -vim.cmd([[highlight TabLineSel guifg=#192330 guibg=#192330]]) -vim.cmd([[highlight BufferCurrent guifg=#FFFFFF guibg=#192330]]) -vim.cmd([[highlight BufferCurrentIndex guifg=#FFFFFF guibg=#192330]]) -vim.cmd([[highlight BufferCurrentMod guifg=#dbc074 guibg=#192330]]) -vim.cmd([[highlight BufferCurrentSign guifg=#719cd6 guibg=#192330]]) -vim.cmd([[highlight BufferCurrentTarget guifg=#c94f6d guibg=#192330]]) -vim.cmd([[highlight BufferInactive guifg=#888888 guibg=#131a24]]) -vim.cmd([[highlight BufferInactiveMod guifg=#dbc074 guibg=#131a24]]) -vim.cmd([[highlight BufferInactiveSign guifg=#719cd6 guibg=#131a24]]) - -vim.cmd([[highlight LspInlayHint guibg=#192330]]) diff --git a/nvim/lua/settings/barbar.lua b/nvim/lua/settings/barbar.lua deleted file mode 100644 index ae9db9c..0000000 --- a/nvim/lua/settings/barbar.lua +++ /dev/null @@ -1,42 +0,0 @@ --- Set barbar's options -require("bufferline").setup({ - animation = true, - auto_hide = false, - tabpages = true, - closable = true, - clickable = true, - exclude_name = { "package.json" }, - icons = true, - icon_custom_colors = false, - icon_separator_active = "", - icon_separator_inactive = "", - icon_close_tab = "", - icon_close_tab_modified = "●", - icon_pinned = "車", - insert_at_end = false, - maximum_padding = 1, - minimum_padding = 1, - maximum_length = 30, - semantic_letters = true, - letters = "asdfjkl;ghnmxcvbziowerutyqpASDFJKLGHNMXCVBZIOWERUTYQP", - no_name_title = nil, -}) - -local nvim_tree_events = require("nvim-tree.events") -local bufferline_api = require("bufferline.api") - -local function get_tree_size() - return require("nvim-tree.view").View.width -end - -nvim_tree_events.subscribe("TreeOpen", function() - bufferline_api.set_offset(0) -end) - -nvim_tree_events.subscribe("Resize", function() - bufferline_api.set_offset(0) -end) - -nvim_tree_events.subscribe("TreeClose", function() - bufferline_api.set_offset(0) -end) diff --git a/nvim/lua/settings/cmp.lua b/nvim/lua/settings/cmp.lua deleted file mode 100644 index 2c4a430..0000000 --- a/nvim/lua/settings/cmp.lua +++ /dev/null @@ -1,151 +0,0 @@ -local cmp_status_ok, cmp = pcall(require, "cmp") -if not cmp_status_ok then - return -end - -local snip_status_ok, luasnip = pcall(require, "luasnip") -if not snip_status_ok then - return -end - -require("luasnip.loaders.from_lua").load({ paths = "~/.config/nvim/snippets" }) - -luasnip.config.set_config({ - history = true, - delete_check_events = "TextChanged", - updateevents = "TextChanged,TextChangedI", - enable_autosnippets = true, - ext_opts = { - [require("luasnip.util.types").choiceNode] = { - active = { - virt_text = { { - Snippet = "", - "Snippet", - } }, - }, - }, - }, -}) - -require("luasnip/loaders/from_vscode").lazy_load() - -local check_backspace = function() - local col = vim.fn.col(".") - 1 - return col == 0 or vim.fn.getline("."):sub(col, col):match("%s") -end - ---   פּ ﯟ   some other good icons -local kind_icons = { - Text = "", - Method = "m", - Function = "", - Constructor = "", - Field = "", - Variable = "", - Class = "", - Interface = "", - Module = "", - Property = "", - Unit = "", - Value = "", - Enum = "", - Keyword = "", - Snippet = "", - Color = "", - File = "", - Reference = "", - Folder = "", - EnumMember = "", - Constant = "", - Struct = "", - Event = "", - Operator = "", - TypeParameter = "", -} --- find more here: https://www.nerdfonts.com/cheat-sheet - -cmp.setup({ - snippet = { - expand = function(args) - luasnip.lsp_expand(args.body) -- For `luasnip` users. - end, - }, - mapping = { - [""] = cmp.mapping.scroll_docs(-1), - [""] = cmp.mapping.scroll_docs(1), - [""] = cmp.mapping({ - i = cmp.mapping.abort(), - c = cmp.mapping.close(), - }), - [""] = cmp.mapping.confirm({ select = false }), - [""] = cmp.mapping(function(fallback) - if cmp.visible() then - cmp.select_next_item() - else - fallback() - end - end, { "i", "s" }), - [""] = cmp.mapping(function(fallback) - if cmp.visible() then - cmp.select_prev_item() - else - fallback() - end - end, { - "i", - "s", - }), - [""] = cmp.mapping(function(fallback) - if luasnip.expandable() then - luasnip.expand() - elseif luasnip.expand_or_jumpable() then - luasnip.expand_or_jump() - else - fallback() - end - end, { - "i", - "s", - }), - [""] = cmp.mapping(function(fallback) - if luasnip.expand_or_jumpable(-1) then - luasnip.jump(-1) - else - fallback() - end - end, { - "i", - "s", - }), - }, - view = { - { entries = "native" }, - }, - formatting = { - fields = { "kind", "abbr", "menu" }, - format = function(entry, vim_item) - vim_item.kind = string.format("%s", kind_icons[vim_item.kind]) - vim_item.menu = ({ - nvim_lsp = "[LSP]", - luasnip = "[Snippet]", - buffer = "[Buffer]", - path = "[Path]", - })[entry.source.name] - return vim_item - end, - }, - sources = { - { name = "nvim_lsp" }, - { name = "luasnip" }, - { name = "path" }, - { name = "buffer" }, - }, - window = { - documentation = { - border = { "╭", "─", "╮", "│", "╯", "─", "╰", "│" }, - }, - }, - experimental = { - ghost_text = true, - }, -}) diff --git a/nvim/lua/settings/dap.lua b/nvim/lua/settings/dap.lua deleted file mode 100644 index 27c65e1..0000000 --- a/nvim/lua/settings/dap.lua +++ /dev/null @@ -1,121 +0,0 @@ -local dap = require("dap") -dap.adapters.lldb = { - type = 'executable', - command = '/usr/bin/lldb-vscode', - name = "lldb" -} - -local rust_dap = vim.fn.getcwd() -local filename = "" -for w in rust_dap:gmatch("([^/]+)") do filename = w end - -dap.configurations.rust = { - { - type = "lldb", - request = "launch", - program = function() - return rust_dap .. "/target/debug/" .. filename - end, - --program = '${fileDirname}/${fileBasenameNoExtension}', - cwd = "${workspaceFolder}", - stopOnEntry = true, - terminal = "integrated", - }, -} - -dap.configurations.cpp = { - { - name = "debug cpp", - type = "lldb", - request = "launch", - program = function() - return vim.fn.input("Path to executable: ", vim.fn.getcwd() .. "/build/", "file") - end, - cwd = "${workspaceFolder}", - stopOnEntry = true, - terminal = "integrated", - }, -} -dap.configurations.c = dap.configurations.cpp - -require("dapui").setup({ - icons = { expanded = "▾", collapsed = "▸", current_frame = "▸" }, - mappings = { - -- Use a table to apply multiple mappings - expand = { "", "<2-LeftMouse>" }, - open = "o", - remove = "d", - edit = "e", - repl = "r", - toggle = "t", - }, - -- Expand lines larger than the window - -- Requires >= 0.7 - expand_lines = vim.fn.has("nvim-0.7") == 1, - -- Layouts define sections of the screen to place windows. - -- The position can be "left", "right", "top" or "bottom". - -- The size specifies the height/width depending on position. It can be an Int - -- or a Float. Integer specifies height/width directly (i.e. 20 lines/columns) while - -- Float value specifies percentage (i.e. 0.3 - 30% of available lines/columns) - -- Elements are the elements shown in the layout (in order). - -- Layouts are opened in order so that earlier layouts take priority in window sizing. - layouts = { - { - elements = { - -- Elements can be strings or table with id and size keys. - { id = "scopes", size = 0.25 }, - "breakpoints", - "stacks", - "watches", - }, - size = 40, -- 40 columns - position = "left", - }, - { - elements = { - "repl", - "console", - }, - size = 0.25, -- 25% of total lines - position = "bottom", - }, - }, - controls = { - -- Requires Neovim nightly (or 0.8 when released) - enabled = true, - -- Display controls in this element - element = "repl", - icons = { - pause = "", - play = "", - step_into = "", - step_over = "", - step_out = "", - step_back = "", - run_last = "↻", - terminate = "□", - }, - }, - floating = { - max_height = nil, -- These can be integers or a float between 0 and 1. - max_width = nil, -- Floats will be treated as percentage of your screen. - border = "single", -- Border style. Can be "single", "double" or "rounded" - mappings = { - close = { "q", "" }, - }, - }, - windows = { indent = 1 }, - render = { - max_type_length = nil, -- Can be integer or nil. - max_value_lines = 100, -- Can be integer or nil. - }, -}) -require("mason-nvim-dap").setup({ - ensure_installed = { - "bash-debug-adapter", - "firefox-debug-adapter", - "js-debug-adapter", - "node-debug2-adapter", - }, -}) -require("nvim-dap-virtual-text").setup() diff --git a/nvim/lua/settings/dashboard.lua b/nvim/lua/settings/dashboard.lua deleted file mode 100644 index d08da71..0000000 --- a/nvim/lua/settings/dashboard.lua +++ /dev/null @@ -1,37 +0,0 @@ -local status_ok, alpha = pcall(require, "alpha") -if not status_ok then - return -end - -local dashboard = require("alpha.themes.dashboard") -dashboard.section.header.val = { - [[ _______ ___ _______. __ __ __ _______ ]], - [[| \ / \ / || | | | | | | ____|]], - [[| .--. | / ^ \ | (----`| |__| | | | | |__ ]], - [[| | | | / /_\ \ \ \ | __ | | | | __| ]], - [[| '--' | / _____ \ .----) | | | | | | | | |____ ]], - [[|_______/ /__/ \__\ |_______/ |__| |__| |__| |_______|]] -} -dashboard.section.buttons.val = { - dashboard.button("f", " Find file", ":Telescope find_files "), - dashboard.button("b", " Open File Browser", ":Telescope file_browser"), - dashboard.button("e", " New file", ":ene startinsert "), - dashboard.button("p", " Find project", ":Telescope project "), - dashboard.button("r", " Recently used files", ":Telescope oldfiles "), - dashboard.button("t", " Zoxide", ":Telescope zoxide list "), - dashboard.button("c", " Configuration", ":e ~/.config/nvim/init.lua "), - dashboard.button("q", " Quit Neovim", ":qa"), -} - -local function footer() - return "dashie@dashie.org" -end - -dashboard.section.footer.val = footer() - -dashboard.section.footer.opts.hl = "Type" -dashboard.section.header.opts.hl = "Include" -dashboard.section.buttons.opts.hl = "Keyword" - -dashboard.opts.opts.noautocmd = true -alpha.setup(dashboard.opts) diff --git a/nvim/lua/settings/devicons.lua b/nvim/lua/settings/devicons.lua deleted file mode 100644 index 25b8c1c..0000000 --- a/nvim/lua/settings/devicons.lua +++ /dev/null @@ -1,22 +0,0 @@ -local status_ok, _ = pcall(require, "nvim-web-devicons") -if not status_ok then - return -end - -require 'nvim-web-devicons'.setup { - -- your personnal icons can go here (to override) - -- you can specify color or cterm_color instead of specifying both of them - -- DevIcon will be appended to `name` - override = { - zsh = { - icon = "", - color = "#428850", - cterm_color = "65", - name = "Zsh" - } - }; - - default = true; -} - -require 'nvim-web-devicons'.get_icons() diff --git a/nvim/lua/settings/indentline.lua b/nvim/lua/settings/indentline.lua deleted file mode 100644 index a0b4852..0000000 --- a/nvim/lua/settings/indentline.lua +++ /dev/null @@ -1,74 +0,0 @@ -local status_ok, indent_blankline = pcall(require, "indent_blankline") -if not status_ok then - return -end - -vim.g.indent_blankline_buftype_exclude = { "terminal", "nofile" } -vim.g.indent_blankline_filetype_exclude = { - "help", - "startify", - "dashboard", - "packer", - "neogitstatus", - "NvimTree", - "Trouble", -} -vim.g.indentLine_enabled = 1 --- vim.g.indent_blankline_char = "│" -vim.g.indent_blankline_char = "▏" --- vim.g.indent_blankline_char = "▎" -vim.g.indent_blankline_show_trailing_blankline_indent = false -vim.g.indent_blankline_show_first_indent_level = true -vim.g.indent_blankline_use_treesitter = true -vim.g.indent_blankline_show_current_context = true -vim.g.indent_blankline_context_patterns = { - "class", - "return", - "function", - "def", - "method", - "^if", - "^else", - "^else if", - "^elif", - "^while", - "jsx_element", - "^for", - "^object", - "^table", - "block", - "arguments", - "if_statement", - "else_clause", - "jsx_element", - "jsx_self_closing_element", - "try_statement", - "catch_clause", - "import_statement", - "operation_type", -} --- HACK: work-around for https://github.com/lukas-reineke/indent-blankline.nvim/issues/59 -vim.wo.colorcolumn = "99999" - --- vim.cmd [[highlight IndentBlanklineIndent1 guifg=#E06C75 gui=nocombine]] --- vim.cmd [[highlight IndentBlanklineIndent2 guifg=#E5C07B gui=nocombine]] --- vim.cmd [[highlight IndentBlanklineIndent3 guifg=#98C379 gui=nocombine]] --- vim.cmd [[highlight IndentBlanklineIndent4 guifg=#56B6C2 gui=nocombine]] --- vim.cmd [[highlight IndentBlanklineIndent5 guifg=#61AFEF gui=nocombine]] --- vim.cmd [[highlight IndentBlanklineIndent6 guifg=#C678DD gui=nocombine]] --- vim.opt.list = true --- vim.opt.listchars:append "space:⋅" --- vim.opt.listchars:append "space:" --- vim.opt.listchars:append "eol:↴" - -indent_blankline.setup({ - show_end_of_line = true, - space_char_blankline = " ", - show_current_context = true, - show_current_context_start = true, - -- char_highlight_list = { - -- "IndentBlanklineIndent1", - -- "IndentBlanklineIndent2", - -- "IndentBlanklineIndent3", - -- }, -}) diff --git a/nvim/lua/settings/keymaps.lua b/nvim/lua/settings/keymaps.lua deleted file mode 100644 index fa0388c..0000000 --- a/nvim/lua/settings/keymaps.lua +++ /dev/null @@ -1,85 +0,0 @@ -local opts = { noremap = true, silent = true } -local term_opts = { silent = true } -local keymap = vim.api.nvim_set_keymap - --- debug -keymap("n", "", ':lua require("dap").toggle_breakpoint()', opts) -keymap("n", "", ':lua require("dap").step_over()', opts) -keymap("n", "", ':lua require("dap").step_into()', opts) -keymap("n", "", ':lua require("dapui").toggle() :lua require("dap").continue() ', opts) -keymap("n", "", ':lua require("dap").continue()', opts) -keymap("n", "", ':lua require("dap").close() :lua require("dapui").toggle()', opts) - --- file tree -keymap("n", "f", ':lua require("nvim-tree").toggle()', opts) - --- toggle terminal -keymap('n', '', ':ToggleTerm ZSH', opts) - --- tab switching -keymap("n", "", ":BufferPrev", opts) -keymap("n", "", ":BufferNext", opts) - --- formatting -keymap("n", "", ":lua vim.lsp.buf.format { async = true }", opts) -keymap("n", "a", ":Telescope lsp_definitions", opts) -keymap("n", "s", ":Telescope lsp_references", opts) -keymap("n", "d", ":Telescope lsp_type_definitions", opts) -keymap("n", "f", ":Telescope lsp_implementations", opts) -keymap("n", "q", ":lua vim.lsp.buf.code_action()", opts) -keymap("n", "w", ":lua vim.lsp.buf.signature_help()", opts) -keymap("n", "e", ":lua vim.lsp.buf.hover()", opts) -keymap("n", "r", ":lua vim.lsp.buf.rename()", opts) -keymap("n", "gq", ":lua require('telescope.builtin').git_commits()", opts) -keymap("n", "gw", ":lua require('telescope.builtin').git_bcommits()", opts) -keymap("n", "ge", ":lua require('telescope.builtin').git_branches()", opts) -keymap("n", "gr", ":lua require('telescope.builtin').git_status()", opts) -keymap("n", "ga", ":lua require('telescope.builtin').git_stash()", opts) - --- window switching -function _G.set_terminal_keymaps() - local opts = {buffer = 0} - vim.keymap.set('t', '', [[]], opts) - vim.keymap.set('t', 'jk', [[]], opts) - vim.keymap.set('t', '', [[wincmd h]], opts) - vim.keymap.set('t', '', [[wincmd j]], opts) - vim.keymap.set('t', '', [[wincmd k]], opts) - vim.keymap.set('t', '', [[wincmd l]], opts) -end - --- if you only want these mappings for toggle term use term://*toggleterm#* instead -vim.cmd('autocmd! TermOpen term://* lua set_terminal_keymaps()') -keymap("n", "", ":wincmd h", opts) -keymap("n", "", ":wincmd j", opts) -keymap("n", "", ":wincmd k", opts) -keymap("n", "", ":wincmd l", opts) - - --- harpoon man - -keymap("n", "", ":lua require('harpoon.ui').nav_file(1)", opts) -keymap("n", "", ":lua require('harpoon.ui').nav_file(2)", opts) -keymap("n", "", ":lua require('harpoon.ui').nav_file(3)", opts) -keymap("n", "fma", ":lua require('harpoon.mark').add_file()", opts) -keymap("n", "fmd", ":lua require('harpoon.mark').remove_file()", opts) - - --- telescope -keymap("n", "fb", ":Telescope file_browser", {}) -keymap("n", "fc", ":Cheatsheet", {}) -keymap("n", "ff", ":lua require('telescope.builtin').find_files()", {}) -keymap("n", "fg", ":lua require('telescope.builtin').live_grep()", {}) -keymap("n", "fh", ":lua require('telescope.builtin').help_tags()", {}) -keymap("n", "fp", ":lua require'telescope'.extensions.project.project{}", { noremap = true, silent = true }) -keymap("n", "fm", ":Telescope harpoon marks", { noremap = true, silent = true }) - -vim.keymap.set("n", "z", ":lua require('telescope').extensions.zoxide.list{}") - --- trouble -keymap("n", "", "TroubleToggle", term_opts) -require("trouble").setup({ - action_keys = { - --remove the fucking stupid keymap amk - open_tab = {}, - }, -}) diff --git a/nvim/lua/settings/lsp.lua b/nvim/lua/settings/lsp.lua deleted file mode 100644 index e2a0a49..0000000 --- a/nvim/lua/settings/lsp.lua +++ /dev/null @@ -1,103 +0,0 @@ -local status_ok, _ = pcall(require, "lspconfig") -if not status_ok then - return -end - -require("mason").setup({ - ui = { - icons = { - package_installed = "✓", - package_pending = "➜", - package_uninstalled = "✗", - }, - }, -}) - -require("mason-lspconfig").setup({ - ensure_installed = { - "cssls", -- css - "html", -- html - "clangd", -- cpp / c - "sumneko_lua", -- lua - "pyright", -- python - "cmake", -- cmake - "bashls", -- shell - "ansiblels", -- ansible - "marksman", -- markdown - "asm_lsp", -- assembly - "tsserver", -- js and ts - "ltex" -- latex - }, - automatic_installation = true, -}) - -local capabilities = require("cmp_nvim_lsp").default_capabilities(vim.lsp.protocol.make_client_capabilities()) -capabilities.textDocument.completion.completionItem.snippetSupport = true - --- LSP --- require("lsp-format").setup {} -require("lsp-inlayhints").setup() -local on_attach = function(client, bufnr) - vim.api.nvim_buf_set_option(bufnr, "omnifunc", "v:lua.vim.lsp.omnifunc") - local optslsp = { noremap = false, silent = true, buffer = bufnr } - -- require("lsp-format").on_attach(client) - require("lsp-inlayhints").on_attach(client, bufnr) -end - -require("mason-lspconfig").setup_handlers({ - function(server_name) -- default handler (optional) - require("lspconfig")[server_name].setup({ - capabilities = capabilities, - on_attach = on_attach, - vim.lsp.diagnostic.on_publish_diagnostics, { - -- Disable virtual_text - virtual_text = true, - } - - }) - end, - ['tsserver'] = function() - require('lspconfig').tsserver.setup { - settings = { - typescript = { - inlayHints = { - includeInlayParameterNameHints = 'all', - includeInlayParameterNameHintsWhenArgumentMatchesName = false, - includeInlayFunctionParameterTypeHints = true, - includeInlayVariableTypeHints = true, - includeInlayPropertyDeclarationTypeHints = true, - includeInlayFunctionLikeReturnTypeHints = true, - includeInlayEnumMemberValueHints = true, - } - }, - javascript = { - inlayHints = { - includeInlayParameterNameHints = 'all', - includeInlayParameterNameHintsWhenArgumentMatchesName = false, - includeInlayFunctionParameterTypeHints = true, - includeInlayVariableTypeHints = true, - includeInlayPropertyDeclarationTypeHints = true, - includeInlayFunctionLikeReturnTypeHints = true, - includeInlayEnumMemberValueHints = true, - } - } - }, - capabilities = capabilities, - on_attach = on_attach, - vim.lsp.diagnostic.on_publish_diagnostics, { - virtual_text = true, - } - } - end, -}) - - --- special server setups -require("clangd_extensions").setup() -require("rust-tools").setup({ - server = { - standalone = false, - root_dir = require('lspconfig').util.find_git_ancestor, - loadOutputiDirs = false, - } -}) diff --git a/nvim/lua/settings/nvim-tree.lua b/nvim/lua/settings/nvim-tree.lua deleted file mode 100644 index f122fb3..0000000 --- a/nvim/lua/settings/nvim-tree.lua +++ /dev/null @@ -1,242 +0,0 @@ --- following options are the default --- each of these are documented in `:help nvim-tree.OPTION_NAME` - -local status_ok, nvim_tree = pcall(require, "nvim-tree") -if not status_ok then - return -end - -local config_status_ok, nvim_tree_config = pcall(require, "nvim-tree.config") -if not config_status_ok then - return -end - -nvim_tree.setup { -- BEGIN_DEFAULT_OPTS - auto_reload_on_write = true, - create_in_closed_folder = false, - disable_netrw = false, - hijack_cursor = false, - hijack_netrw = true, - hijack_unnamed_buffer_when_opening = false, - ignore_buffer_on_setup = false, - open_on_setup = true, - open_on_setup_file = true, - open_on_tab = true, - ignore_buf_on_tab_change = {}, - sort_by = "name", - root_dirs = {}, - prefer_startup_root = false, - sync_root_with_cwd = true, - reload_on_bufenter = false, - respect_buf_cwd = true, - on_attach = "disable", -- function(bufnr). If nil, will use the deprecated mapping strategy - remove_keymaps = false, -- boolean (disable totally or not) or list of key (lhs) - view = { - adaptive_size = false, - centralize_selection = false, - width = 30, - hide_root_folder = false, - side = "right", - preserve_window_proportions = false, - number = false, - relativenumber = false, - signcolumn = "yes", - -- @deprecated - mappings = { - custom_only = false, - list = { - -- user mappings go here - }, - }, - float = { - enable = false, - open_win_config = { - relative = "editor", - border = "rounded", - width = 30, - height = 30, - row = 1, - col = 1, - }, - }, - }, - renderer = { - add_trailing = false, - group_empty = true, - highlight_git = false, - full_name = false, - highlight_opened_files = "none", - root_folder_modifier = ":~", - indent_width = 2, - indent_markers = { - enable = false, - inline_arrows = true, - icons = { - corner = "└", - edge = "│", - item = "│", - bottom = "─", - none = " ", - }, - }, - icons = { - webdev_colors = true, - git_placement = "before", - padding = " ", - symlink_arrow = " ➛ ", - show = { - file = true, - folder = true, - folder_arrow = true, - git = true, - }, - glyphs = { - default = "", - symlink = "", - bookmark = "", - folder = { - arrow_closed = "", - arrow_open = "", - default = "", - open = "", - empty = "", - empty_open = "", - symlink = "", - symlink_open = "", - }, - git = { - unstaged = "✗", - staged = "✓", - unmerged = "", - renamed = "➜", - untracked = "★", - deleted = "", - ignored = "◌", - }, - }, - }, - special_files = { "cargo.toml", "makefile", "readme.md", "readme.md" }, - symlink_destination = true, - }, - hijack_directories = { - enable = true, - auto_open = true, - }, - update_focused_file = { - enable = true, - -- update_cwd = true, - update_root = false, - ignore_list = {}, - }, - ignore_ft_on_setup = {}, - system_open = { - cmd = "", - args = {}, - }, - diagnostics = { - enable = false, - show_on_dirs = false, - debounce_delay = 50, - icons = { - hint = "", - info = "", - warning = "", - error = "", - }, - }, - filters = { - dotfiles = false, - custom = {}, - exclude = {}, - }, - filesystem_watchers = { - enable = true, - debounce_delay = 50, - }, - git = { - enable = true, - ignore = true, - show_on_dirs = true, - timeout = 400, - }, - actions = { - use_system_clipboard = true, - change_dir = { - enable = true, - global = false, - restrict_above_cwd = false, - }, - expand_all = { - max_folder_discovery = 300, - exclude = {}, - }, - file_popup = { - open_win_config = { - col = 1, - row = 1, - relative = "cursor", - border = "shadow", - style = "minimal", - }, - }, - open_file = { - quit_on_open = false, - resize_window = true, - window_picker = { - enable = true, - chars = "abcdefghijklmnopqrstuvwxyz1234567890", - exclude = { - filetype = { "notify", "packer", "qf", "diff", "fugitive", "fugitiveblame" }, - buftype = { "nofile", "terminal", "help" }, - }, - }, - }, - remove_file = { - close_window = true, - }, - }, - trash = { - cmd = "gio trash", - require_confirm = true, - }, - live_filter = { - prefix = "[FILTER]: ", - always_show_folders = true, - }, - log = { - enable = false, - truncate = false, - types = { - all = false, - config = false, - copy_paste = false, - dev = false, - diagnostics = false, - git = false, - profile = false, - watcher = false, - }, - }, -} - --- nvim-tree is also there in modified buffers so this function filter it out -local modifiedBufs = function(bufs) - local t = 0 - for k, v in pairs(bufs) do - if v.name:match("NvimTree_") == nil then - t = t + 1 - end - end - return t -end - -vim.api.nvim_create_autocmd("BufEnter", { - nested = true, - callback = function() - if #vim.api.nvim_list_wins() == 1 and - vim.api.nvim_buf_get_name(0):match("NvimTree_") ~= nil and - modifiedBufs(vim.fn.getbufinfo({ bufmodified = 1 })) == 0 then - vim.cmd "quit" - end - end -}) diff --git a/nvim/lua/settings/options.lua b/nvim/lua/settings/options.lua deleted file mode 100644 index 8a66087..0000000 --- a/nvim/lua/settings/options.lua +++ /dev/null @@ -1,39 +0,0 @@ -local options = { - clipboard = "unnamedplus", - mouse = "n", - fileencoding = "utf-8", - relativenumber = true, - cursorline = false, - number = true, - smartindent = true, - smartcase = true, - showmode = true, - termguicolors = true, - ignorecase = true, - showtabline = 2, - timeoutlen = 200, -- time to wait for a mapped sequence to complete (in milliseconds) - undofile = true, -- enable persistent undoi updatetime = 300, -- faster completion (4000ms default) - writebackup = false, -- if a file is being edited by another program (or was written to file while editing with another program), it is not allowed to be edited - expandtab = true, -- convert tabs to spaces - shiftwidth = 2, -- the number of spaces inserted for each indentation - tabstop = 2, -- insert 2 spaces for a tab - scrolloff = 8, - sidescrolloff = 8, - spell = true, - syntax = "off", - spelllang = "en_us", - mousemodel = "popup_setpos", - shell = "/usr/bin/zsh", - autochdir = true, -} - -vim.g.mkdp_browser = '/usr/bin/firefox' -vim.g.mkdp_auto_start = 1 - --- space leader -vim.g.mapleader = " " -vim.keymap.set("n", "", "", { silent = true, noremap = false }) - -for k, v in pairs(options) do - vim.opt[k] = v -end diff --git a/nvim/lua/settings/pairs.lua b/nvim/lua/settings/pairs.lua deleted file mode 100644 index 502be27..0000000 --- a/nvim/lua/settings/pairs.lua +++ /dev/null @@ -1,36 +0,0 @@ --- Setup nvim-cmp. -local status_ok, npairs = pcall(require, "nvim-autopairs") -if not status_ok then - return -end -local Rule = require('nvim-autopairs.rule') - -npairs.setup({ - check_ts = true, - ts_config = { - lua = { "string", "source" }, - javascript = { "string", "template_string" }, - java = false, - }, - disable_filetype = { "TelescopePrompt", "spectre_panel" }, - fast_wrap = { - map = "", - chars = { "{", "[", "(", "<", '"', "'" }, - pattern = string.gsub([[ [%'%"%)%>%]%)%}%,] ]], "%s+", ""), - offset = 0, -- Offset from pattern match - end_key = "$", - keys = "qwertyuiopzxcvbnmasdfghjkl", - check_comma = true, - highlight = "PmenuSel", - highlight_grey = "LineNr", - }, -}) - -npairs.add_rule(Rule("<", ">")) - -local cmp_autopairs = require("nvim-autopairs.completion.cmp") -local cmp_status_ok, cmp = pcall(require, "cmp") -if not cmp_status_ok then - return -end -cmp.event:on("confirm_done", cmp_autopairs.on_confirm_done({ map_char = { tex = "" } })) diff --git a/nvim/lua/settings/plugins.lua b/nvim/lua/settings/plugins.lua deleted file mode 100644 index c3f3388..0000000 --- a/nvim/lua/settings/plugins.lua +++ /dev/null @@ -1,58 +0,0 @@ -local Plug = vim.fn["plug#"] -vim.call("plug#begin", "~/.config/nvim/plugged") -Plug("nvim-lua/popup.nvim") -- An implementation of the Popup API from vim in Neovim -Plug("nvim-lua/plenary.nvim") -- Useful lua functions used ny lots of plugins -Plug("EdenEast/nightfox.nvim") -- dark theme -Plug("kyazdani42/nvim-web-devicons") -- icons -Plug("feline-nvim/feline.nvim") -- bottom bar -Plug("lewis6991/gitsigns.nvim") -- git signs on the bar and on the left -Plug("nvim-lua/plenary.nvim") -- library, don't delete -Plug("williamboman/mason.nvim") -- lsp and dap -Plug("williamboman/mason-lspconfig.nvim") -- lsp to mason bridge -Plug("neovim/nvim-lspconfig") -- nvim lsp -Plug("mfussenegger/nvim-dap") -- debugging capabilities -Plug("rcarriga/nvim-dap-ui") -- debug ui -Plug("theHamsta/nvim-dap-virtual-text") -- more debug ui -Plug("jayp0521/mason-nvim-dap.nvim") -- debug mason bridge -Plug("nvim-treesitter/nvim-treesitter", -{ ["do"] = vim.fn[":TSUpdate"] }) -- syntax colors -Plug("hrsh7th/nvim-cmp") -- completions -Plug("hrsh7th/cmp-nvim-lsp") -- lsp integration with completions -Plug("hrsh7th/cmp-path") -- path completion -Plug("hrsh7th/cmp-cmdline") -- command completion -Plug("saadparwaiz1/cmp_luasnip") -- snip completion -Plug("L3MON4D3/LuaSnip") -- snippet plugin -Plug("kyazdani42/nvim-tree.lua") -- file viewer on the right -Plug("windwp/nvim-autopairs") -- autopairs -Plug("romgrk/barbar.nvim") -- bar on the top -Plug("numToStr/Comment.nvim") -- fast comments -Plug("lukas-reineke/indent-blankline.nvim") -- indicators for indentation (needs config) -Plug("lewis6991/impatient.nvim") -- speedup startup -Plug("goolord/alpha-nvim") -- dashboard -Plug("lervag/vimtex") -- latex plugin -Plug("weilbith/nvim-code-action-menu") -- code action menu -Plug("rafamadriz/friendly-snippets") -- some provided snippets -Plug("p00f/nvim-ts-rainbow") -- colors brackets -Plug("nvim-telescope/telescope.nvim") -- file/text search -Plug("nvim-telescope/telescope-ui-select.nvim") -- telescope ui -Plug("nvim-telescope/telescope-file-browser.nvim") -- telescope file browser -Plug("nvim-telescope/telescope-fzy-native.nvim") -- telescope fuzzy search -Plug('nvim-telescope/telescope-project.nvim') -- telescope projects -Plug('nvim-telescope/telescope-symbols.nvim') -- symbol picker -Plug('nvim-telescope/telescope-file-browser.nvim') -- telescope file browser -Plug('nvim-telescope/telescope-dap.nvim') -- dap UI for telescope -Plug('benfowler/telescope-luasnip.nvim') -- telescope luasnip integration -Plug('jvgrootveld/telescope-zoxide') -- zoxide integration -Plug('sudormrfbin/cheatsheet.nvim') -- cheatsheet for keymaps -Plug('ThePrimeagen/harpoon') -- harpoonman -Plug 'folke/trouble.nvim' -- provides warning/error explanation tab -Plug('akinsho/toggleterm.nvim',{ ["tag"] = "*" }) -- better terminal integration -Plug("iamcco/markdown-preview.nvim", -- markdown preview -{ ["do"] = "cd app && yarn install" }) -Plug('p00f/clangd_extensions.nvim') -- clangd_extensions -Plug('kdarkhan/rust-tools.nvim') -- rust extensions -Plug('lvimuser/lsp-inlayhints.nvim') -- inlay hints -Plug('preservim/tagbar') -- tags on the right -Plug('ggandor/leap.nvim') -- special movement -vim.call("plug#end") - diff --git a/nvim/lua/settings/project.lua b/nvim/lua/settings/project.lua deleted file mode 100644 index 88ec927..0000000 --- a/nvim/lua/settings/project.lua +++ /dev/null @@ -1,25 +0,0 @@ -local tele_status_ok, telescope = pcall(require, "telescope") -if not tele_status_ok then - return -end - -telescope.load_extension("project") - -require('telescope').setup { - extensions = { - project = { - base_dirs = { - '~/dev/src', - { '~/dev/src2' }, - { '~/dev/src3', max_depth = 4 }, - { path = '~/dev/src4' }, - { path = '~/dev/src5', max_depth = 2 }, - }, - hidden_files = true, -- default: false - theme = "dropdown", - order_by = "asc", - search_by = "title", - sync_with_nvim_tree = true, -- default false - } - } -} diff --git a/nvim/lua/settings/rainbow.lua b/nvim/lua/settings/rainbow.lua deleted file mode 100644 index f875b69..0000000 --- a/nvim/lua/settings/rainbow.lua +++ /dev/null @@ -1,9 +0,0 @@ -require("nvim-treesitter.configs").setup { - highlight = { - }, - rainbow = { - enable = true, - extended_mode = true, - max_file_lines = nil, - } -} diff --git a/nvim/lua/settings/telescope.lua b/nvim/lua/settings/telescope.lua deleted file mode 100644 index 92a8492..0000000 --- a/nvim/lua/settings/telescope.lua +++ /dev/null @@ -1,34 +0,0 @@ -local t = require("telescope") -local z_utils = require("telescope._extensions.zoxide.utils") - --- Configure the extension -t.setup({ - extensions = { - zoxide = { - prompt_title = "[ Queries ]", - mappings = { - default = { - after_action = function(selection) - print("Update to (" .. selection.z_score .. ") " .. selection.path) - end - }, - [""] = { - before_action = function(selection) print("before C-s") end, - action = function(selection) - vim.cmd("edit " .. selection.path) - end - }, - [""] = { action = z_utils.create_basic_command("split") }, - }, - }, - }, -}) - --- Load the extension -t.load_extension('zoxide') - --- Add a mapping -require("telescope").load_extension("fzy_native") -require("telescope").load_extension "file_browser" -require('telescope').load_extension('dap') -require("telescope").load_extension('harpoon') diff --git a/nvim/lua/settings/treesitter.lua b/nvim/lua/settings/treesitter.lua deleted file mode 100644 index e611e90..0000000 --- a/nvim/lua/settings/treesitter.lua +++ /dev/null @@ -1,37 +0,0 @@ -local status_ok, _ = pcall(require, "nvim-treesitter.configs") -if not status_ok then - return -end - -require("nvim-treesitter.configs").setup({ - -- A list of parser names, or "all" - ensure_installed = { - "latex", - "c", - "cpp", - "rust", - "lua", - "haskell", - "java", - "javascript", - "typescript", - "python", - "html", - "css", - "yaml", - "bash", - "json", - "c_sharp", - }, - highlight = { - enable = true, - additional_vim_regex_highlighting = false, - }, -}) - -local status_ok2, _ = pcall(require, "spellsitter") -if not status_ok2 then - return -end - -require("spellsitter").setup() diff --git a/nvim/lua/settings/vimtex.lua b/nvim/lua/settings/vimtex.lua deleted file mode 100644 index 5272847..0000000 --- a/nvim/lua/settings/vimtex.lua +++ /dev/null @@ -1,4 +0,0 @@ -vim.cmd("let g:vimtex_quickfix_mode=0") -vim.cmd("let g:vimtex_view_general_viewer = 'evince'") -vim.cmd("let g:vimtex_compiler_method = 'latexmk'") -vim.cmd("let g:vimtex_compiler_latexmk = {'options': ['-pdf', '-shell-escape', '-file-line-error', '-synctex=1', '-interaction=nonstopmode',],}") diff --git a/nvim/snippets/.texsnippetsold b/nvim/snippets/.texsnippetsold deleted file mode 100644 index 6a23f7e..0000000 --- a/nvim/snippets/.texsnippetsold +++ /dev/null @@ -1,55 +0,0 @@ - -snippet mini \minipg{}{}[] - \\minipg{ - $1 - } - {${2}}[${3}] - -snippet graphics \includegraphics[]{} - \\includegraphics[scale=$1]{${2}} - -snippet code "code" - \\begin{lstlisting} - $1 - \\end{lstlisting} - -snippet list "list" - \\begin{itemize} - \\item \\textcolor{${1}}{${2}} - \\item \\textcolor{${1}}{${3}} - \\item \\textcolor{${1}}{${4}} - \\item \\textcolor{${1}}{${5}} - \\vspace{-3mm} - \\end{itemize} - -snippet enum "enumerate" - \\begin{enumerate} - \\item \textcolor{${1}}{${2}} - \\item \textcolor{${1}}{${3}} - \\item \textcolor{${1}}{${4}} - \\item \textcolor{${1}}{${5}} - \\vspace{-3mm} - \\end{enumerate} - -snippet table "table" - \\begin{table}[ht!] - \\section{${1}} - \\begin{tabular}{|m{0.2\linewidth}|m{0.755\linewidth}|} - \hline - $2 - \hline - \\end{tabular} - \\end{table} - -snippet tabular "tabular" - \\begin{tabular}{|m{0.2\linewidth}|m{0.755\linewidth}|} - \hline - $1 - \hline - \\end{tabular} - -snippet tx "textcolor" - \\textcolor{${1}}{${2}} - -snippet bm "vectormatrix" - \\begin{bmatrix} $1 \\ $2 \\ $3 \end{bmatrix} diff --git a/nvim/snippets/tex.lua b/nvim/snippets/tex.lua deleted file mode 100644 index 38317b9..0000000 --- a/nvim/snippets/tex.lua +++ /dev/null @@ -1,210 +0,0 @@ -local ls = require("luasnip") --- some shorthands... -local s = ls.s -local i = ls.i -local t = ls.t -local d = ls.dynamic_node -local c = ls.choice_node -local f = ls.function_node -local sn = ls.snippet_node - -local fmt = require("luasnip.extras.fmt").fmt -local rep = require("luasnip.extras").rep - -local snippets, autosnippets = {}, {} -local group = vim.api.nvim_create_augroup("Tex Snippets", { clear = true }) -local file_pattern = "*.tex" -------------------------------------------------- boilerplate end --- snippers go here: - -local formSnippet = s( - "form-", - fmt( - [[ -\, \newline -\large \textcolor{{purple}}{{\( {1} \)}}\newline -\, \newline -\normalsize Legend: \newline -\begin{{itemize}} -\item {2} -\item {3} -\item {4} -\item {5} -\end{{itemize}} - ]], - { - i(1, "formula"), - i(2, "item 1"), - i(3, "item 2"), - i(4, "item 3"), - i(5, "item 4"), - } - ) -) -table.insert(snippets, formSnippet) - -local listSnippet = s( - "list-", - fmt( - [[ -\begin{{itemize}} -\item \textcolor{{{1}}}{{{5}}} -\item \textcolor{{{2}}}{{{6}}} -\item \textcolor{{{3}}}{{{7}}} -\item \textcolor{{{4}}}{{{8}}} -\end{{itemize}} - ]], - { - i(1, "color"), - rep(1), - rep(1), - rep(1), - i(2, "item 1"), - i(3, "item 2"), - i(4, "item 3"), - i(5, "item 4"), - } - ) -) -table.insert(snippets, listSnippet) - -local enumerateSnippet = s( - "enum-", - fmt( - [[ -\begin{{enumerate}} -\item \textcolor{{{1}}}{{{5}}} -\item \textcolor{{{2}}}{{{6}}} -\item \textcolor{{{3}}}{{{7}}} -\item \textcolor{{{4}}}{{{8}}} -\end{{enumerate}} - ]], - { - i(1, "color"), - rep(1), - rep(1), - rep(1), - i(2, "item 1"), - i(3, "item 2"), - i(4, "item 3"), - i(5, "item 4"), - } - ) -) -table.insert(snippets, enumerateSnippet) - -local tableSnippet = s( - "table-", - fmt( - [[ -\begin{{table}}[ht!] -\section{{{}}} -\begin{{tabular}}{{|m{{0.2\linewidth}}|m{{0.755\linewidth}}|}} -\hline -{} -\hline -\end{{tabular}} -\end{{table}} - ]], - { - i(1, "Section Name"), - i(2, "data....."), - } - ) -) -table.insert(snippets, tableSnippet) - -local tabularSnippet = s( - "tabular-", - fmt( - [[ -\begin{{tabular}}{{|m{{0.2\linewidth}}|m{{0.755\linewidth}}|}} -\hline -{} -\hline -\end{{tabular}} - ]], - { - i(1, "data....."), - } - ) -) -table.insert(snippets, tabularSnippet) - -local textcolorSnippet = s( - "tx-", - fmt( - [[ -\textcolor{{{1}}}{{{2}}} - ]], - { - i(1, "color"), - i(2, "text..."), - } - ) -) -table.insert(snippets, textcolorSnippet) - -local boldSnippet = s( - "bold-", - fmt( - [[ -\textbf{{{1}}} - ]], - { - i(1, "text..."), - } - ) -) -table.insert(snippets, boldSnippet) - -local minipgSnippet = s( - "mini-", - fmt( - [[ -\minipg{{ -{1} -}}{{ -{2} -}}[{3}] - ]], - { - i(1, "data..."), - i(2, "data..."), - i(3, "0.25,0.25"), - } - ) -) -table.insert(snippets, minipgSnippet) - -local graphicSnippet = s( - "graph-", - fmt( - [[ -\includegraphics[scale={1}]{{{2}}} - ]], - { - i(1, "0.4"), - i(2, "something.png"), - } - ) -) -table.insert(snippets, graphicSnippet) - -local lstSnippet = s( - "code-", - fmt( - [[ -\begin{{lstlisting}} -{} -\end{{lstlisting}} - ]], - { - i(1, "data"), - } - ) -) -table.insert(snippets, lstSnippet) - -------------------------------------------------- snippets end -return snippets, autosnippets diff --git a/override/teams.nix b/override/teams.nix new file mode 100644 index 0000000..7d4f454 --- /dev/null +++ b/override/teams.nix @@ -0,0 +1,35 @@ +{ + stdenv, + lib, + copyDesktopItems, + makeDesktopItem, + chromium, + ... +}: +stdenv.mkDerivation (final: { + pname = "teams-pwa"; + name = final.pname; + nativeBuildInputs = [copyDesktopItems]; + dontUnpack = true; + + desktopItems = [ + (makeDesktopItem { + name = final.pname; + icon = final.pname; + exec = "${chromium}/bin/${ + chromium.meta.mainProgram or chromium.pname + } --app=https://teams.microsoft.com"; + desktopName = "Microsoft Teams PWA"; + genericName = "Progressive Web App for Microsoft Teams"; + categories = ["Network"]; + mimeTypes = ["x-scheme-handler/msteams"]; + }) + ]; + + meta = with lib; { + description = "Microsoft Teams PWA"; + homepage = "https://teams.microsoft.com"; + maintainers = with maintainers; [ners]; + platforms = chromium.meta.platforms; + }; +}) diff --git a/patches/darkeader.patch b/patches/darkeader.patch new file mode 100644 index 0000000..f1663df --- /dev/null +++ b/patches/darkeader.patch @@ -0,0 +1,456 @@ +diff --git a/src/background/user-storage.ts b/src/background/user-storage.ts +index 54612fb3b1f6..298e5032fc94 100644 +--- a/src/background/user-storage.ts ++++ b/src/background/user-storage.ts +@@ -5,7 +5,7 @@ import {PromiseBarrier} from '../utils/promise-barrier'; + import {isURLMatched} from '../utils/url'; + import {validateSettings} from '../utils/validation'; + +-import {readSyncStorage, readLocalStorage, writeSyncStorage, writeLocalStorage, removeSyncStorage, removeLocalStorage} from './utils/extension-api'; ++import {readManagedStorage, readSyncStorage, readLocalStorage, writeSyncStorage, writeLocalStorage, removeSyncStorage, removeLocalStorage} from './utils/extension-api'; + import {logWarn} from './utils/log'; + + +@@ -78,12 +78,7 @@ export default class UserStorage { + return settings; + } + +- private static async loadSettingsFromStorage(): Promise { +- if (UserStorage.loadBarrier) { +- return await UserStorage.loadBarrier.entry(); +- } +- UserStorage.loadBarrier = new PromiseBarrier(); +- ++ private static async loadSettingsFromStorageWithoutManaged(): Promise { + let local = await readLocalStorage(DEFAULT_SETTINGS); + + if (local.schemeVersion < 2) { +@@ -113,10 +108,8 @@ export default class UserStorage { + if (local.syncSettings == null) { + local.syncSettings = DEFAULT_SETTINGS.syncSettings; + } ++ + if (!local.syncSettings) { +- UserStorage.migrateAutomationSettings(local); +- UserStorage.fillDefaults(local); +- UserStorage.loadBarrier.resolve(local); + return local; + } + +@@ -126,18 +119,34 @@ export default class UserStorage { + local.syncSettings = false; + UserStorage.set({syncSettings: false}); + UserStorage.saveSyncSetting(false); +- UserStorage.loadBarrier.resolve(local); + return local; + } + + const {errors: syncCfgErrors} = validateSettings($sync); + syncCfgErrors.forEach((err) => logWarn(err)); ++ return $sync; ++ } ++ ++ private static async loadSettingsFromStorage(): Promise { ++ if (UserStorage.loadBarrier) { ++ return await UserStorage.loadBarrier.entry(); ++ } ++ UserStorage.loadBarrier = new PromiseBarrier(); + +- UserStorage.migrateAutomationSettings($sync); +- UserStorage.fillDefaults($sync); ++ let settings = await UserStorage.loadSettingsFromStorageWithoutManaged(); + +- UserStorage.loadBarrier.resolve($sync); +- return $sync; ++ const managed = await readManagedStorage(settings); ++ const {errors: managedCfgErrors} = validateSettings(managed); ++ if (managedCfgErrors.length === 0) { ++ settings = managed; ++ } else { ++ managedCfgErrors.forEach((err) => logWarn(err)); ++ } ++ ++ UserStorage.migrateAutomationSettings(settings); ++ UserStorage.fillDefaults(settings); ++ UserStorage.loadBarrier.resolve(settings); ++ return settings; + } + + static async saveSettings(): Promise { +diff --git a/src/background/utils/extension-api.ts b/src/background/utils/extension-api.ts +index 6d18fc0919df..6812ac2e4224 100644 +--- a/src/background/utils/extension-api.ts ++++ b/src/background/utils/extension-api.ts +@@ -97,6 +97,19 @@ export async function readLocalStorage(defaults: + }); + } + ++export async function readManagedStorage(defaults: T): Promise { ++ return new Promise((resolve) => { ++ chrome.storage.managed.get(defaults, (managed: T) => { ++ if (chrome.runtime.lastError) { ++ console.error(chrome.runtime.lastError.message); ++ resolve(defaults); ++ return; ++ } ++ resolve(managed); ++ }); ++ }); ++} ++ + function prepareSyncStorage(values: T): {[key: string]: any} { + for (const key in values) { + const value = values[key]; +diff --git a/src/managed-storage.json b/src/managed-storage.json +new file mode 100644 +index 000000000000..e394d0f1ff60 +--- /dev/null ++++ b/src/managed-storage.json +@@ -0,0 +1,304 @@ ++{ ++ ++ "$schema": "http://json-schema.org/draft-07/schema#", ++ "type": "object", ++ "properties": { ++ "schemeVersion": { ++ "type": "integer" ++ }, ++ "enabled": { ++ "type": "boolean" ++ }, ++ "fetchNews": { ++ "type": "boolean" ++ }, ++ "theme": { ++ "$ref": "Theme" ++ }, ++ "presets": { ++ "type": "array", ++ "items": { ++ "$ref": "ThemePreset" ++ } ++ }, ++ "customThemes": { ++ "type": "array", ++ "items": { ++ "$ref": "CustomSiteConfig" ++ } ++ }, ++ "enabledByDefault": { ++ "type": "boolean" ++ }, ++ "enabledFor": { ++ "type": "array", ++ "items": { ++ "type": "string", ++ "minLength": 1 ++ } ++ }, ++ "disabledFor": { ++ "type": "array", ++ "items": { ++ "type": "string", ++ "minLength": 1 ++ } ++ }, ++ "changeBrowserTheme": { ++ "type": "boolean" ++ }, ++ "syncSettings": { ++ "type": "boolean" ++ }, ++ "syncSitesFixes": { ++ "type": "boolean" ++ }, ++ "automation": { ++ "$ref": "Automation" ++ }, ++ "time": { ++ "$ref": "TimeSettings" ++ }, ++ "location": { ++ "$ref": "LocationSettings" ++ }, ++ "previewNewDesign": { ++ "type": "boolean" ++ }, ++ "previewNewestDesign": { ++ "type": "boolean" ++ }, ++ "enableForPDF": { ++ "type": "boolean" ++ }, ++ "enableForProtectedPages": { ++ "type": "boolean" ++ }, ++ "enableContextMenus": { ++ "type": "boolean" ++ }, ++ "detectDarkTheme": { ++ "type": "boolean" ++ }, ++ // Chrome's JSON schema format is weird and doesn't support `definitions` property and thus `#/definitions` references ++ // https://datatracker.ietf.org/doc/html/draft-zyp-json-schema-03 ++ // This "property" mimics it ++ "definitions": { ++ "type": "object", ++ "properties": { ++ "Theme": { ++ "id": "Theme", ++ "type": "object", ++ "properties": { ++ "mode": { ++ "$ref": "FilterMode" ++ }, ++ "brightness": { ++ "type": "integer", ++ "minimum": 0, ++ "maximum": 200 ++ }, ++ "contrast": { ++ "type": "integer", ++ "minimum": 0, ++ "maximum": 200 ++ }, ++ "grayscale": { ++ "type": "integer", ++ "minimum": 0, ++ "maximum": 100 ++ }, ++ "sepia": { ++ "type": "integer", ++ "minimum": 0, ++ "maximum": 100 ++ }, ++ "useFont": { ++ "type": "boolean" ++ }, ++ "fontFamily": { ++ "type": "string", ++ "minLength": 1 ++ }, ++ "textStroke": { ++ "type": "number" ++ }, ++ "engine": { ++ "type": "string", ++ "enum": [ ++ "cssFilter", ++ "svgFilter", ++ "staticTheme", ++ "dynamicTheme" ++ ] ++ }, ++ "stylesheet": { ++ "type": "string" ++ }, ++ "darkSchemeBackgroundColor": { ++ "$ref": "HexColor" ++ }, ++ "darkSchemeTextColor": { ++ "$ref": "HexColor" ++ }, ++ "lightSchemeBackgroundColor": { ++ "$ref": "HexColor" ++ }, ++ "lightSchemeTextColor": { ++ "$ref": "HexColor" ++ }, ++ "scrollbarColor": { ++ "$ref": "HexColorOrAuto" ++ }, ++ "selectionColor": { ++ "$ref": "HexColorOrAuto" ++ }, ++ "styleSystemControls": { ++ "type": "boolean" ++ }, ++ "lightColorScheme": { ++ "type": "string", ++ "minLength": 1 ++ }, ++ "darkColorScheme": { ++ "type": "string", ++ "minLength": 1 ++ }, ++ "immediateModify": { ++ "type": "boolean" ++ } ++ } ++ }, ++ "HexColor": { ++ "id": "HexColor", ++ "type": "string", ++ "pattern": "^[0-9a-f]{6}$" ++ }, ++ "HexColorOrAuto": { ++ "id": "HexColorOrAuto", ++ "type": "string", ++ "pattern": "^([0-9a-f]{6}|auto)$" ++ }, ++ "FilterMode": { ++ "id": "FilterMode", ++ "type": "integer", ++ "enum": [ ++ 0, ++ 1 ++ ] ++ }, ++ "ThemePreset": { ++ "id": "ThemePreset", ++ "type": "object", ++ "properties": { ++ "id": { ++ "type": "string", ++ "minLength": 1 ++ }, ++ "name": { ++ "type": "string", ++ "minLength": 1 ++ }, ++ "urls": { ++ "type": "array", ++ "items": { ++ "type": "string", ++ "minLength": 1 ++ } ++ }, ++ "theme": { ++ "$ref": "Theme" ++ } ++ }, ++ "required": [ ++ "id", ++ "name", ++ "urls", ++ "theme" ++ ] ++ }, ++ "CustomSiteConfig": { ++ "id": "CustomSiteConfig", ++ "type": "object", ++ "properties": { ++ "url": { ++ "type": "array", ++ "items": { ++ "type": "string", ++ "minLength": 1 ++ } ++ }, ++ "theme": { ++ "$ref": "Theme" ++ }, ++ "builtin": { ++ "type": "boolean" ++ } ++ }, ++ "required": [ ++ "url", ++ "theme" ++ ] ++ }, ++ "Automation": { ++ "id": "Automation", ++ "type": "object", ++ "properties": { ++ "enabled": { ++ "type": "boolean" ++ }, ++ "mode": { ++ "$ref": "AutomationMode" ++ }, ++ "behavior": { ++ "type": "string", ++ "enum": [ ++ "OnOff", ++ "Scheme" ++ ] ++ } ++ } ++ }, ++ "AutomationMode": { ++ "id": "AutomationMode", ++ "type": "string", ++ "enum": [ ++ "", ++ "time", ++ "system", ++ "location" ++ ] ++ }, ++ "TimeSettings": { ++ "id": "TimeSettings", ++ "type": "object", ++ "properties": { ++ "activation": { ++ "$ref": "Time" ++ }, ++ "deactivation": { ++ "$ref": "Time" ++ } ++ } ++ }, ++ "Time": { ++ "id": "Time", ++ "type": "string", ++ "pattern": "^((0?[0-9])|(1[0-9])|(2[0-3])):([0-5][0-9])$" ++ }, ++ "LocationSettings": { ++ "id": "LocationSettings", ++ "type": "object", ++ "properties": { ++ "latitude": { ++ "type": "number" ++ }, ++ "longitude": { ++ "type": "number" ++ } ++ } ++ } ++ } ++ } ++ } ++} +diff --git a/tasks/bundle-manifest.js b/tasks/bundle-manifest.js +index ae29531e67b7..f4058a129f52 100644 +--- a/tasks/bundle-manifest.js ++++ b/tasks/bundle-manifest.js +@@ -4,6 +4,7 @@ import {PLATFORM} from './platform.js'; + import * as reload from './reload.js'; + import {createTask} from './task.js'; + import {readJSON, writeJSON} from './utils.js'; ++import {copyFile} from 'node:fs/promises'; + + async function patchManifest(platform, debug, watch, test) { + const manifest = await readJSON(absolutePath('src/manifest.json')); +@@ -16,6 +17,11 @@ async function patchManifest(platform, debug, watch, test) { + if (platform === PLATFORM.CHROMIUM_MV3) { + patched.browser_action = undefined; + } ++ if (platform === PLATFORM.CHROMIUM_MV2 || platform === PLATFORM.CHROMIUM_MV3) { ++ patched.storage = { ++ managed_schema: 'managed-storage.json', ++ }; ++ } + if (debug) { + patched.version = '1'; + patched.description = `Debug build, platform: ${platform}, watch: ${watch ? 'yes' : 'no'}.`; +@@ -42,6 +48,9 @@ async function manifests({platforms, debug, watch, test}) { + const manifest = await patchManifest(platform, debug, watch, test); + const destDir = getDestDir({debug, platform}); + await writeJSON(`${destDir}/manifest.json`, manifest); ++ if (platform === PLATFORM.CHROMIUM_MV2 || platform === PLATFORM.CHROMIUM_MV3) { ++ await copyFile(absolutePath('src/managed-storage.json'), `${destDir}/managed-storage.json`); ++ } + } + } + +@@ -49,7 +58,7 @@ const bundleManifestTask = createTask( + 'bundle-manifest', + manifests, + ).addWatcher( +- ['src/manifest*.json'], ++ ['src/manifest*.json', 'src/managed-storage.json'], + async (changedFiles, _, buildPlatforms) => { + const chrome = changedFiles.some((file) => file.endsWith('manifest.json')); + const platforms = {}; diff --git a/patches/darkreader.nix b/patches/darkreader.nix new file mode 100644 index 0000000..ef2c19f --- /dev/null +++ b/patches/darkreader.nix @@ -0,0 +1,25 @@ +# credits to Voronind for darkreader config https://github.com/voronind-com/nix/blob/main/home/program/firefox/default.nix +{ + lib, + dashNixAdditionalProps, + ... +}: let + stable = dashNixAdditionalProps.pkgsDarkreader; +in + stable.buildNpmPackage rec { + version = "4.9.99"; + pname = "dark-reader"; + npmDepsHash = "sha256-m41HkwgbeRRmxJALQFJl/grYjjIqFOc47ltaesob1FA="; + env.ESBUILD_BINARY_PATH = lib.getExe stable.esbuild; + patches = [./darkeader.patch]; + src = stable.fetchFromGitHub { + hash = "sha256-K375/4qOyE1Tp/T5V5uCGcNd1IVVbT1Pjdnq/8oRHj0="; + owner = "darkreader"; + repo = "darkreader"; + rev = "v${version}"; + }; + installPhase = '' + mkdir -p $out + cp build/release/darkreader-firefox.xpi $out/latest.xpi + ''; + } diff --git a/qt5ct/qt5ct.conf b/qt5ct/qt5ct.conf deleted file mode 100644 index e58a880..0000000 --- a/qt5ct/qt5ct.conf +++ /dev/null @@ -1,32 +0,0 @@ -[Appearance] -color_scheme_path=/usr/share/qt5ct/colors/darker.conf -custom_palette=true -icon_theme=Adwaita -standard_dialogs=default -style=Fusion - -[Fonts] -fixed=@Variant(\0\0\0@\0\0\0\x12\0N\0o\0t\0o\0 \0S\0\x61\0n\0s@(\0\0\0\0\0\0\xff\xff\xff\xff\x5\x1\0\x32\x10) -general=@Variant(\0\0\0@\0\0\0\x12\0N\0o\0t\0o\0 \0S\0\x61\0n\0s@(\0\0\0\0\0\0\xff\xff\xff\xff\x5\x1\0\x32\x10) - -[Interface] -activate_item_on_single_click=1 -buttonbox_layout=3 -cursor_flash_time=1000 -dialog_buttons_have_icons=0 -double_click_interval=400 -gui_effects=@Invalid() -keyboard_scheme=4 -menus_have_icons=true -show_shortcuts_in_context_menus=true -stylesheets=@Invalid() -toolbutton_style=4 -underline_shortcut=1 -wheel_scroll_lines=3 - -[SettingsWindow] -geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\x14\0\0\x3K\0\0\x2\xbc\0\0\0\0\0\0\0\x14\0\0\x3K\0\0\x2\xc1\0\0\0\x2\x2\0\0\0\n\0\0\0\0\0\0\0\0\x14\0\0\x3K\0\0\x2\xbc) - -[Troubleshooting] -force_raster_widgets=1 -ignored_applications=@Invalid() diff --git a/qt6ct/qt6ct.conf b/qt6ct/qt6ct.conf deleted file mode 100644 index f60d64a..0000000 --- a/qt6ct/qt6ct.conf +++ /dev/null @@ -1,32 +0,0 @@ -[Appearance] -color_scheme_path=/usr/share/qt6ct/colors/darker.conf -custom_palette=true -icon_theme=Adwaita -standard_dialogs=default -style=Adwaita-Dark - -[Fonts] -fixed=@Variant(\0\0\0@\0\0\0\x12\0N\0o\0t\0o\0 \0S\0\x61\0n\0s@(\0\0\0\0\0\0\xff\xff\xff\xff\x5\x1\0\x32\x10) -general=@Variant(\0\0\0@\0\0\0\x12\0N\0o\0t\0o\0 \0S\0\x61\0n\0s@(\0\0\0\0\0\0\xff\xff\xff\xff\x5\x1\0\x32\x10) - -[Interface] -activate_item_on_single_click=1 -buttonbox_layout=3 -cursor_flash_time=1000 -dialog_buttons_have_icons=1 -double_click_interval=400 -gui_effects=General, AnimateMenu, AnimateCombo, AnimateTooltip, AnimateToolBox -keyboard_scheme=4 -menus_have_icons=true -show_shortcuts_in_context_menus=true -stylesheets=@Invalid() -toolbutton_style=4 -underline_shortcut=1 -wheel_scroll_lines=3 - -[SettingsWindow] -geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\0\0\0\x4\xea\0\0\x3\xbe\0\0\0\0\0\0\0\0\0\0\x4\xea\0\0\x3\xbe\0\0\0\x2\0\0\0\0\n\0\0\0\0\0\0\0\0\0\0\0\x4\xea\0\0\x3\xbe) - -[Troubleshooting] -force_raster_widgets=1 -ignored_applications=@Invalid() diff --git a/setup.sh b/setup.sh deleted file mode 100755 index d6484da..0000000 --- a/setup.sh +++ /dev/null @@ -1,20 +0,0 @@ -find $PWD -maxdepth 1 -mindepth 0 -exec ln -s '{}' $HOME/.config/ \; -mv ../.zshrc $HOME/.config/.zshrc -unlink $HOME/.config/.git -unlink $HOME/.config/.gitignore -unlink $HOME/.config/README.md -unlink $HOME/.config/eww_desktop -unlink $HOME/.config/hypr_desktop -unlink $HOME/.config/eww_laptop -unlink $HOME/.config/hypr_laptop -unlink $HOME/.config/setup.sh -unlink $HOME/.config/dotFiles -gsettings set org.gnome.desktop.interface color-scheme 'prefer-dark' - -if [ "$1" = "laptop" ]; then - ln -s $PWD/eww_laptop $HOME/.config/eww - ln -s $PWD/hypr_laptop $HOME/.config/hypr -elif [ "$1" = "desktop" ]; then - ln -s $PWD/eww_desktop $HOME/.config/eww - ln -s $PWD/hypr_desktop $HOME/.config/hypr -fi diff --git a/wofi/style.css b/wofi/style.css deleted file mode 100644 index ebe34ce..0000000 --- a/wofi/style.css +++ /dev/null @@ -1,19 +0,0 @@ -window { - margin: 0px; - background-color: #0f0f17; - border-radius: 10px; -} - -#inner-box { - background-color: #0f0f17; - margin: 5px; - border: none; - border-radius: 10px; -} - -#outer-box { - background-color: #0f0f17; - margin: 5px; - border: none; - border-radius: 10px; -}