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 0c69684..f610716 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,3 @@ -/nvim/plugged/* -gtk-3.0/bookmarks -gtk-3.0/servers -/fish/fish_variables -fish/fish_variables +result/* +result +flake.lock diff --git a/.zshrc b/.zshrc deleted file mode 100644 index 6bb491d..0000000 --- a/.zshrc +++ /dev/null @@ -1,162 +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 -export VISUAL=nvim; -export EDITOR=nvim; - -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' -alias s="kitty +kitten ssh" - -# 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/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/copyq/copyq-bak.conf b/copyq/copyq-bak.conf deleted file mode 100644 index 6ae5aec..0000000 --- a/copyq/copyq-bak.conf +++ /dev/null @@ -1,216 +0,0 @@ -[General] -plugin_priority=itemimage, itemencrypted, itemfakevim, itemnotes, itempinned, itemsync, itemtags, itemtext - -[Options] -activate_closes=true -activate_focuses=true -activate_item_with_single_click=false -activate_pastes=true -always_on_top=false -autocompletion=true -autostart=false -change_clipboard_owner_delay_ms=150 -check_clipboard=true -check_selection=false -clipboard_notification_lines=0 -clipboard_tab=&clipboard -close_on_unfocus=false -close_on_unfocus_delay_ms=500 -command_history_size=100 -confirm_exit=true -copy_clipboard=false -copy_selection=false -disable_tray=false -edit_ctrl_return=true -editor=gedit --standalone -- %1 -expire_tab=0 -filter_case_insensitive=true -filter_regular_expression=false -hide_main_window=true -hide_main_window_in_task_bar=false -hide_tabs=false -hide_toolbar=false -hide_toolbar_labels=true -item_popup_interval=0 -language=en -max_process_manager_rows=1000 -maxitems=200 -move=true -native_menu_bar=true -native_notifications=true -native_tray_menu=false -notification_horizontal_offset=10 -notification_maximum_height=100 -notification_maximum_width=300 -notification_position=3 -notification_vertical_offset=10 -number_search=false -open_windows_on_current_screen=true -restore_geometry=true -row_index_from_one=true -run_selection=true -save_delay_ms_on_item_added=300000 -save_delay_ms_on_item_edited=1000 -save_delay_ms_on_item_modified=300000 -save_delay_ms_on_item_moved=1800000 -save_delay_ms_on_item_removed=600000 -save_filter_history=false -save_on_app_deactivated=true -script_paste_delay_ms=250 -show_advanced_command_settings=false -show_simple_items=false -show_tab_item_count=false -style= -tab_tree=false -tabs=&clipboard -text_tab_width=8 -text_wrap=true -transparency=0 -transparency_focused=0 -tray_commands=true -tray_images=true -tray_item_paste=true -tray_items=5 -tray_menu_open_on_left_click=false -tray_tab= -tray_tab_is_current=true -vi=false -window_key_press_time_ms=50 -window_paste_with_ctrl_v_regex= -window_wait_after_raised_ms=50 -window_wait_before_raise_ms=20 -window_wait_for_modifier_released_ms=2000 -window_wait_raised_ms=150 - -[Plugins] -itemencrypted\enabled=true -itemfakevim\enabled=true -itemimage\enabled=true -itemimage\image_editor= -itemimage\max_image_height=240 -itemimage\max_image_width=320 -itemimage\svg_editor= -itemnotes\enabled=true -itempinned\enabled=true -itemsync\enabled=true -itemtags\enabled=true -itemtext\enabled=true - -[Shortcuts] -about=shift+f1 -change_tab_icon=ctrl+shift+t -commands=f6 -copy_selected_items=ctrl+c -delete_item=del -edit=f2 -edit_notes=shift+f2 -editor=ctrl+e -editor_background= -editor_bold=ctrl+b -editor_cancel=esc -editor_erase_style= -editor_font= -editor_foreground= -editor_italic=ctrl+i -editor_redo=ctrl+shift+z -editor_save=f2 -editor_search=ctrl+f -editor_strikethrough= -editor_underline=ctrl+u -editor_undo=ctrl+z -exit=ctrl+q -export=ctrl+s -find_items=ctrl+g -help=f1 -import=ctrl+i -item-menu=shift+f10 -move_down=ctrl+down -move_to_bottom=ctrl+end -move_to_clipboard= -move_to_top=ctrl+home -move_up=ctrl+up -new=ctrl+n -new_tab=ctrl+t -next_tab=right -paste_selected_items=ctrl+v -preferences=ctrl+p -previous_tab=left -process_manager=ctrl+shift+z -remove_tab=ctrl+w -rename_tab=ctrl+f2 -reverse_selected_items=ctrl+shift+r -show-log=f12 -show_clipboard_content=ctrl+shift+c -show_item_content=f4 -show_item_preview=f7 -sort_selected_items=ctrl+shift+s -system-run=f5 -toggle_clipboard_storing=ctrl+shift+x - -[Tabs] -1\icon= -1\max_item_count=0 -1\name=&clipboard -1\store_items=true -size=1 - -[Theme] -alt_bg=default_alt_bg -alt_item_css= -bg=default_bg -css= -css_template_items=items -css_template_main_window=main_window -css_template_menu=menu -css_template_notification=notification -cur_item_css="\n ;border: 0.1em solid ${sel_bg}" -edit_bg=default_bg -edit_fg=default_text -edit_font= -fg=default_text -find_bg=#ff0 -find_fg=#000 -find_font= -font= -font_antialiasing=true -hover_item_css= -icon_size=16 -item_css= -item_spacing= -menu_bar_css="\n ;background: ${bg}\n ;color: ${fg}" -menu_bar_disabled_css="\n ;color: ${bg - #666}" -menu_bar_selected_css="\n ;background: ${sel_bg}\n ;color: ${sel_fg}" -menu_css="\n ;border: 1px solid ${sel_bg}\n ;background: ${bg}\n ;color: ${fg}" -notes_bg=default_tooltip_bg -notes_css= -notes_fg=default_tooltip_text -notes_font= -notification_bg=#333 -notification_fg=#ddd -notification_font= -num_fg=default_placeholder_text -num_font= -num_margin=2 -search_bar="\n ;background: ${edit_bg}\n ;color: ${edit_fg}\n ;border: 1px solid ${alt_bg}\n ;margin: 2px" -search_bar_focused="\n ;border: 1px solid ${sel_bg}" -sel_bg=default_highlight_bg -sel_fg=default_highlight_text -sel_item_css= -show_number=true -show_scrollbars=true -style_main_window=false -tab_bar_css="\n ;background: ${bg - #222}" -tab_bar_item_counter="\n ;color: ${fg - #044 + #400}\n ;font-size: 6pt" -tab_bar_scroll_buttons_css="\n ;background: ${bg - #222}\n ;color: ${fg}\n ;border: 0" -tab_bar_sel_item_counter="\n ;color: ${sel_bg - #044 + #400}" -tab_bar_tab_selected_css="\n ;padding: 0.5em\n ;background: ${bg}\n ;border: 0.05em solid ${bg}\n ;color: ${fg}" -tab_bar_tab_unselected_css="\n ;border: 0.05em solid ${bg}\n ;padding: 0.5em\n ;background: ${bg - #222}\n ;color: ${fg - #333}" -tab_tree_css="\n ;color: ${fg}\n ;background-color: ${bg}" -tab_tree_item_counter="\n ;color: ${fg - #044 + #400}\n ;font-size: 6pt" -tab_tree_sel_item_counter="\n ;color: ${sel_fg - #044 + #400}" -tab_tree_sel_item_css="\n ;color: ${sel_fg}\n ;background-color: ${sel_bg}\n ;border-radius: 2px" -tool_bar_css="\n ;color: ${fg}\n ;background-color: ${bg}\n ;border: 0" -tool_button_css="\n ;color: ${fg}\n ;background: ${bg}\n ;border: 0\n ;border-radius: 2px" -tool_button_pressed_css="\n ;background: ${sel_bg}" -tool_button_selected_css="\n ;background: ${sel_bg - #222}\n ;color: ${sel_fg}\n ;border: 1px solid ${sel_bg}" -use_system_icons=false diff --git a/copyq/copyq-commands.ini b/copyq/copyq-commands.ini deleted file mode 100644 index ae62c0a..0000000 --- a/copyq/copyq-commands.ini +++ /dev/null @@ -1,44 +0,0 @@ -[Commands] -1\Command=copyq: plugins.itempinned.pin() -1\Icon=\xf08d -1\InMenu=true -1\Input=!OUTPUT -1\InternalId=copyq_pinned_pin -1\Name=Pin -1\Output=application/x-copyq-item-pinned -2\Command=copyq: plugins.itempinned.unpin() -2\Icon=\xf08d -2\InMenu=true -2\Input=application/x-copyq-item-pinned -2\InternalId=copyq_pinned_unpin -2\Name=Unpin -3\Command=copyq: plugins.itemtags.tag(decodeURIComponent('Important')) -3\Icon=\xf02b -3\InMenu=true -3\InternalId=copyq_tags_tag:Important -3\MatchCommand=copyq: plugins.itemtags.hasTag(decodeURIComponent('Important')) && fail() -3\Name=Tag as \x201cImportant\x201d -4\Command=copyq: plugins.itemtags.untag(decodeURIComponent('Important')) -4\Icon=\xf02b -4\InMenu=true -4\InternalId=copyq_tags_untag:Important -4\MatchCommand=copyq: plugins.itemtags.hasTag(decodeURIComponent('Important')) || fail() -4\Name=Remove tag \x201cImportant\x201d -5\Command=copyq: plugins.itemtags.tag() -5\Icon=\xf02b -5\InMenu=true -5\InternalId=copyq_tags_tag -5\Name=Add a Tag -6\Command=copyq: plugins.itemtags.untag() -6\Icon=\xf02b -6\InMenu=true -6\Input=application/x-copyq-tags -6\InternalId=copyq_tags_untag -6\Name=Remove a Tag -7\Command=copyq: plugins.itemtags.clearTags() -7\Icon=\xf02b -7\InMenu=true -7\Input=application/x-copyq-tags -7\InternalId=copyq_tags_clear -7\Name=Clear all tags -size=7 diff --git a/copyq/copyq-commands.ini.bak b/copyq/copyq-commands.ini.bak deleted file mode 100644 index ae62c0a..0000000 --- a/copyq/copyq-commands.ini.bak +++ /dev/null @@ -1,44 +0,0 @@ -[Commands] -1\Command=copyq: plugins.itempinned.pin() -1\Icon=\xf08d -1\InMenu=true -1\Input=!OUTPUT -1\InternalId=copyq_pinned_pin -1\Name=Pin -1\Output=application/x-copyq-item-pinned -2\Command=copyq: plugins.itempinned.unpin() -2\Icon=\xf08d -2\InMenu=true -2\Input=application/x-copyq-item-pinned -2\InternalId=copyq_pinned_unpin -2\Name=Unpin -3\Command=copyq: plugins.itemtags.tag(decodeURIComponent('Important')) -3\Icon=\xf02b -3\InMenu=true -3\InternalId=copyq_tags_tag:Important -3\MatchCommand=copyq: plugins.itemtags.hasTag(decodeURIComponent('Important')) && fail() -3\Name=Tag as \x201cImportant\x201d -4\Command=copyq: plugins.itemtags.untag(decodeURIComponent('Important')) -4\Icon=\xf02b -4\InMenu=true -4\InternalId=copyq_tags_untag:Important -4\MatchCommand=copyq: plugins.itemtags.hasTag(decodeURIComponent('Important')) || fail() -4\Name=Remove tag \x201cImportant\x201d -5\Command=copyq: plugins.itemtags.tag() -5\Icon=\xf02b -5\InMenu=true -5\InternalId=copyq_tags_tag -5\Name=Add a Tag -6\Command=copyq: plugins.itemtags.untag() -6\Icon=\xf02b -6\InMenu=true -6\Input=application/x-copyq-tags -6\InternalId=copyq_tags_untag -6\Name=Remove a Tag -7\Command=copyq: plugins.itemtags.clearTags() -7\Icon=\xf02b -7\InMenu=true -7\Input=application/x-copyq-tags -7\InternalId=copyq_tags_clear -7\Name=Clear all tags -size=7 diff --git a/copyq/copyq-filter.ini b/copyq/copyq-filter.ini deleted file mode 100644 index 50b0ec1..0000000 --- a/copyq/copyq-filter.ini +++ /dev/null @@ -1,2 +0,0 @@ -[General] -filter_history=@Invalid() diff --git a/copyq/copyq.conf b/copyq/copyq.conf deleted file mode 100644 index 6ae5aec..0000000 --- a/copyq/copyq.conf +++ /dev/null @@ -1,216 +0,0 @@ -[General] -plugin_priority=itemimage, itemencrypted, itemfakevim, itemnotes, itempinned, itemsync, itemtags, itemtext - -[Options] -activate_closes=true -activate_focuses=true -activate_item_with_single_click=false -activate_pastes=true -always_on_top=false -autocompletion=true -autostart=false -change_clipboard_owner_delay_ms=150 -check_clipboard=true -check_selection=false -clipboard_notification_lines=0 -clipboard_tab=&clipboard -close_on_unfocus=false -close_on_unfocus_delay_ms=500 -command_history_size=100 -confirm_exit=true -copy_clipboard=false -copy_selection=false -disable_tray=false -edit_ctrl_return=true -editor=gedit --standalone -- %1 -expire_tab=0 -filter_case_insensitive=true -filter_regular_expression=false -hide_main_window=true -hide_main_window_in_task_bar=false -hide_tabs=false -hide_toolbar=false -hide_toolbar_labels=true -item_popup_interval=0 -language=en -max_process_manager_rows=1000 -maxitems=200 -move=true -native_menu_bar=true -native_notifications=true -native_tray_menu=false -notification_horizontal_offset=10 -notification_maximum_height=100 -notification_maximum_width=300 -notification_position=3 -notification_vertical_offset=10 -number_search=false -open_windows_on_current_screen=true -restore_geometry=true -row_index_from_one=true -run_selection=true -save_delay_ms_on_item_added=300000 -save_delay_ms_on_item_edited=1000 -save_delay_ms_on_item_modified=300000 -save_delay_ms_on_item_moved=1800000 -save_delay_ms_on_item_removed=600000 -save_filter_history=false -save_on_app_deactivated=true -script_paste_delay_ms=250 -show_advanced_command_settings=false -show_simple_items=false -show_tab_item_count=false -style= -tab_tree=false -tabs=&clipboard -text_tab_width=8 -text_wrap=true -transparency=0 -transparency_focused=0 -tray_commands=true -tray_images=true -tray_item_paste=true -tray_items=5 -tray_menu_open_on_left_click=false -tray_tab= -tray_tab_is_current=true -vi=false -window_key_press_time_ms=50 -window_paste_with_ctrl_v_regex= -window_wait_after_raised_ms=50 -window_wait_before_raise_ms=20 -window_wait_for_modifier_released_ms=2000 -window_wait_raised_ms=150 - -[Plugins] -itemencrypted\enabled=true -itemfakevim\enabled=true -itemimage\enabled=true -itemimage\image_editor= -itemimage\max_image_height=240 -itemimage\max_image_width=320 -itemimage\svg_editor= -itemnotes\enabled=true -itempinned\enabled=true -itemsync\enabled=true -itemtags\enabled=true -itemtext\enabled=true - -[Shortcuts] -about=shift+f1 -change_tab_icon=ctrl+shift+t -commands=f6 -copy_selected_items=ctrl+c -delete_item=del -edit=f2 -edit_notes=shift+f2 -editor=ctrl+e -editor_background= -editor_bold=ctrl+b -editor_cancel=esc -editor_erase_style= -editor_font= -editor_foreground= -editor_italic=ctrl+i -editor_redo=ctrl+shift+z -editor_save=f2 -editor_search=ctrl+f -editor_strikethrough= -editor_underline=ctrl+u -editor_undo=ctrl+z -exit=ctrl+q -export=ctrl+s -find_items=ctrl+g -help=f1 -import=ctrl+i -item-menu=shift+f10 -move_down=ctrl+down -move_to_bottom=ctrl+end -move_to_clipboard= -move_to_top=ctrl+home -move_up=ctrl+up -new=ctrl+n -new_tab=ctrl+t -next_tab=right -paste_selected_items=ctrl+v -preferences=ctrl+p -previous_tab=left -process_manager=ctrl+shift+z -remove_tab=ctrl+w -rename_tab=ctrl+f2 -reverse_selected_items=ctrl+shift+r -show-log=f12 -show_clipboard_content=ctrl+shift+c -show_item_content=f4 -show_item_preview=f7 -sort_selected_items=ctrl+shift+s -system-run=f5 -toggle_clipboard_storing=ctrl+shift+x - -[Tabs] -1\icon= -1\max_item_count=0 -1\name=&clipboard -1\store_items=true -size=1 - -[Theme] -alt_bg=default_alt_bg -alt_item_css= -bg=default_bg -css= -css_template_items=items -css_template_main_window=main_window -css_template_menu=menu -css_template_notification=notification -cur_item_css="\n ;border: 0.1em solid ${sel_bg}" -edit_bg=default_bg -edit_fg=default_text -edit_font= -fg=default_text -find_bg=#ff0 -find_fg=#000 -find_font= -font= -font_antialiasing=true -hover_item_css= -icon_size=16 -item_css= -item_spacing= -menu_bar_css="\n ;background: ${bg}\n ;color: ${fg}" -menu_bar_disabled_css="\n ;color: ${bg - #666}" -menu_bar_selected_css="\n ;background: ${sel_bg}\n ;color: ${sel_fg}" -menu_css="\n ;border: 1px solid ${sel_bg}\n ;background: ${bg}\n ;color: ${fg}" -notes_bg=default_tooltip_bg -notes_css= -notes_fg=default_tooltip_text -notes_font= -notification_bg=#333 -notification_fg=#ddd -notification_font= -num_fg=default_placeholder_text -num_font= -num_margin=2 -search_bar="\n ;background: ${edit_bg}\n ;color: ${edit_fg}\n ;border: 1px solid ${alt_bg}\n ;margin: 2px" -search_bar_focused="\n ;border: 1px solid ${sel_bg}" -sel_bg=default_highlight_bg -sel_fg=default_highlight_text -sel_item_css= -show_number=true -show_scrollbars=true -style_main_window=false -tab_bar_css="\n ;background: ${bg - #222}" -tab_bar_item_counter="\n ;color: ${fg - #044 + #400}\n ;font-size: 6pt" -tab_bar_scroll_buttons_css="\n ;background: ${bg - #222}\n ;color: ${fg}\n ;border: 0" -tab_bar_sel_item_counter="\n ;color: ${sel_bg - #044 + #400}" -tab_bar_tab_selected_css="\n ;padding: 0.5em\n ;background: ${bg}\n ;border: 0.05em solid ${bg}\n ;color: ${fg}" -tab_bar_tab_unselected_css="\n ;border: 0.05em solid ${bg}\n ;padding: 0.5em\n ;background: ${bg - #222}\n ;color: ${fg - #333}" -tab_tree_css="\n ;color: ${fg}\n ;background-color: ${bg}" -tab_tree_item_counter="\n ;color: ${fg - #044 + #400}\n ;font-size: 6pt" -tab_tree_sel_item_counter="\n ;color: ${sel_fg - #044 + #400}" -tab_tree_sel_item_css="\n ;color: ${sel_fg}\n ;background-color: ${sel_bg}\n ;border-radius: 2px" -tool_bar_css="\n ;color: ${fg}\n ;background-color: ${bg}\n ;border: 0" -tool_button_css="\n ;color: ${fg}\n ;background: ${bg}\n ;border: 0\n ;border-radius: 2px" -tool_button_pressed_css="\n ;background: ${sel_bg}" -tool_button_selected_css="\n ;background: ${sel_bg - #222}\n ;color: ${sel_fg}\n ;border: 1px solid ${sel_bg}" -use_system_icons=false diff --git a/copyq/copyq.lock b/copyq/copyq.lock deleted file mode 100644 index 448fc6f..0000000 --- a/copyq/copyq.lock +++ /dev/null @@ -1,5 +0,0 @@ -1263 -copyq -spaceship -a10dc6f271ba47d988a3b282250928e2 -cb602df7-7d2d-4352-8c2d-7847932ab696 diff --git a/copyq/copyq.pub b/copyq/copyq.pub deleted file mode 100644 index a32e7f1..0000000 Binary files a/copyq/copyq.pub and /dev/null differ diff --git a/copyq/copyq_geometry.ini b/copyq/copyq_geometry.ini deleted file mode 100644 index 7ebdab1..0000000 --- a/copyq/copyq_geometry.ini +++ /dev/null @@ -1,6 +0,0 @@ -[Options] -ConfigurationManager_geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\0\0\0\x5\x82\0\0\x3z\0\0\0\0\0\0\0\0\0\0\x2\xa6\0\0\x2l\0\0\0\x2\x2\0\0\0\n\0\0\0\0\0\0\0\0\0\0\0\x5\x82\0\0\x3z) -ConfigurationManager_geometry_screen_2=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\0\0\0\x5\x82\0\0\x3z\0\0\0\0\0\0\0\0\0\0\x2\xa6\0\0\x2l\0\0\0\x2\x2\0\0\0\n\0\0\0\0\0\0\0\0\0\0\0\x5\x82\0\0\x3z) -ConfigurationManager_geometry_screen_2_2560x1440=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\0\0\0\x5\x82\0\0\x3z\0\0\0\0\0\0\0\0\0\0\x2\xa6\0\0\x2l\0\0\0\x2\x2\0\0\0\n\0\0\0\0\0\0\0\0\0\0\0\x5\x82\0\0\x3z) -MainWindow_geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\n\0\0\0\0\0\0\0\xe[\0\0\x2\xf3\0\0\n\0\0\0\0\0\0\0\fG\0\0\x1G\0\0\0\0\x2\0\0\0\rp\0\0\n\0\0\0\0\0\0\0\xe[\0\0\x2\xf3) -MainWindow_geometry_3440x1440=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\n\0\0\0\0\0\0\0\xe[\0\0\x2\xf3\0\0\n\0\0\0\0\0\0\0\fG\0\0\x1G\0\0\0\0\x2\0\0\0\rp\0\0\n\0\0\0\0\0\0\0\xe[\0\0\x2\xf3) diff --git a/copyq/copyq_tab_JmNsaXBib2FyZA==.dat b/copyq/copyq_tab_JmNsaXBib2FyZA==.dat deleted file mode 100644 index 0db8f4c..0000000 Binary files a/copyq/copyq_tab_JmNsaXBib2FyZA==.dat and /dev/null differ diff --git a/copyq/copyq_tabs.ini b/copyq/copyq_tabs.ini deleted file mode 100644 index b56ad40..0000000 --- a/copyq/copyq_tabs.ini +++ /dev/null @@ -1,3 +0,0 @@ -[TabWidget] -collapsed_tabs=@Invalid() -tab_item_counters=@Variant(\0\0\0\b\0\0\0\x1\0\0\0\x14\0&\0\x63\0l\0i\0p\0\x62\0o\0\x61\0r\0\x64\0\0\0\x2\0\0\0\xc8) 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/copyq/copyq_geometry.ini.lock b/docs/src/SUMMARY.md similarity index 100% rename from copyq/copyq_geometry.ini.lock rename to docs/src/SUMMARY.md diff --git a/copyq/copyq_geometry.ini.lock.rmlock b/docs/src/coding.md similarity index 100% rename from copyq/copyq_geometry.ini.lock.rmlock rename to docs/src/coding.md 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 e4b5797..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 = mouse - - ### 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 = 300 - - # Position the notification in the top right corner - origin = top-right - - # Offset from the origin - offset = 10x10 - - # 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 = "#002684" - - # 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 = "#002684C8" - timeout = 3 - # Icon for notifications with low urgency, uncomment to enable - #default_icon = /path/to/icon - -[urgency_normal] - background = "#222222F0" - foreground = "#888888" - frame_color = "#002684C8" - 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 eaf16f3..0000000 --- a/environment.d/envvars.conf +++ /dev/null @@ -1,14 +0,0 @@ -GTK_CSD=0 -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 -XCURSOR_SIZE=24 -WAYLAND_DISPLAY=wayland-1 -XDG_CURRENT_DESKTOP=wlr -GPG_TTY=$(tty) -PATH=$PATH:$HOME/.local/bin -TEXMFHOME=$HOME/.texmf -PATH=/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl:$HOME/.local/bin:$HOME/.cargo/bin:$PATH 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 5e15c2f..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: #111017; /** #111017 old **/ - 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: #111017; - 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: #111017; -} - -.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 81080a2..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 "3417px" - :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 80dfd97..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 10 "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 cca2764..0000000 --- a/eww_desktop/scripts/ncspot_control.sh +++ /dev/null @@ -1,7 +0,0 @@ -#! /bin/bash - -NUM=$(pactl list clients short | rg "spotify_player" | 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 '%') -dunstify -a "changeVolume" -r 2 -u low -i audio-volume-high -h int:value:"$VOLUME" "Spotify Volume: ${VOLUME}%" 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 a42ec58..0000000 --- a/eww_desktop/scripts/workspace +++ /dev/null @@ -1,120 +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 " -ws0="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" ) -o0=$(hyprctl workspaces | grep "$ws0" ) - -# 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" ) -f9=$(hyprctl monitors | grep "workspace: 9 " -A 4 | grep "focused: yes" ) -f0=$(hyprctl monitors | grep "workspace: 10" -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 [ "$o9" != "" ]; then - ic_9="⑨" - else - ic_9="" -fi -if [ "$o0" != "" ]; then - ic_0="⑩" - else - ic_0="" -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 [ "$f0" != "" ]; then - ic_0="➓" -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$o0$f0\" \"$ic_0\"))" -} -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 3d4bda8..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:#000000 ; /*#282828#111017;*/ - 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: #111017; - border-radius: 16px; - margin: 0px 10px 0px 0px; -} -.bat_module { - background-color: #111017; - 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: #000000; -} - -.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 c7dc8e0..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 "15px" - :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 80dfd97..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 10 "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 a42ec58..0000000 --- a/eww_laptop/scripts/workspace +++ /dev/null @@ -1,120 +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 " -ws0="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" ) -o0=$(hyprctl workspaces | grep "$ws0" ) - -# 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" ) -f9=$(hyprctl monitors | grep "workspace: 9 " -A 4 | grep "focused: yes" ) -f0=$(hyprctl monitors | grep "workspace: 10" -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 [ "$o9" != "" ]; then - ic_9="⑨" - else - ic_9="" -fi -if [ "$o0" != "" ]; then - ic_0="⑩" - else - ic_0="" -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 [ "$f0" != "" ]; then - ic_0="➓" -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$o0$f0\" \"$ic_0\"))" -} -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/fish/completions/tide.fish b/fish/completions/tide.fish deleted file mode 100644 index 2d3784d..0000000 --- a/fish/completions/tide.fish +++ /dev/null @@ -1,12 +0,0 @@ -complete tide --no-files - -set -l subcommands bug-report configure - -complete tide -x -n __fish_use_subcommand -a bug-report -d "Print info for use in bug reports" -complete tide -x -n __fish_use_subcommand -a configure -d "Run the configuration wizard" - -complete tide -x -n "not __fish_seen_subcommand_from $subcommands" -s h -l help -d "Print help message" -complete tide -x -n "not __fish_seen_subcommand_from $subcommands" -s v -l version -d "Print tide version" - -complete tide -x -n '__fish_seen_subcommand_from bug-report' -l clean -d "Run clean Fish instance and install Tide" -complete tide -x -n '__fish_seen_subcommand_from bug-report' -l verbose -d "Print full Tide configuration" diff --git a/fish/conf.d/_tide_init.fish b/fish/conf.d/_tide_init.fish deleted file mode 100644 index 939f17c..0000000 --- a/fish/conf.d/_tide_init.fish +++ /dev/null @@ -1,41 +0,0 @@ -function _tide_init_install --on-event _tide_init_install - set -U VIRTUAL_ENV_DISABLE_PROMPT true - - source (functions --details _tide_sub_configure) - _load_config lean - _tide_finish - - if status is-interactive - tide bug-report --check || sleep 4 - - if contains ilancosman/tide (string lower $_fisher_plugins) - set_color bryellow - echo "ilancosman/tide is a development branch. Please install from a release tag:" - echo -ns "fisher install ilancosman/tide@v5" | fish_indent --ansi - sleep 3 - end - - switch (read --prompt-str="Configure tide prompt? [Y/n] " | string lower) - case y ye yes '' - tide configure - case '*' - echo -s \n 'Run ' (echo -ns "tide configure" | fish_indent --ansi) ' to customize your prompt.' - end - end -end - -function _tide_init_update --on-event _tide_init_update - # Warn users who install from main branch - if contains ilancosman/tide (string lower $_fisher_plugins) - set_color bryellow - echo "ilancosman/tide is a development branch. Please install from a release tag:" - echo -ns "fisher install ilancosman/tide@v5" | fish_indent --ansi - sleep 3 - end -end - -function _tide_init_uninstall --on-event _tide_init_uninstall - set -e VIRTUAL_ENV_DISABLE_PROMPT - set -e (set -U --names | string match --entire -r '^_?tide') - functions --erase (functions --all | string match --entire -r '^_?tide') -end diff --git a/fish/config.fish b/fish/config.fish deleted file mode 100644 index e8fe466..0000000 --- a/fish/config.fish +++ /dev/null @@ -1,134 +0,0 @@ -if status is-interactive - # Commands to run in interactive sessions can go here -end -# ============================================================================= -# -# Utility functions for zoxide. -# -set fish_greeting -function sudo --description "Replacement for Bash 'sudo !!' command to run last command using sudo." - if test "$argv" = !! - echo sudo $history[1] - eval command sudo $history[1] - else - command sudo $argv - end -end -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' -alias s="kitty +kitten ssh" -alias zl='z "" ' -alias jo='joshuto' - -# 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 -q __zoxide_cd_internal - if builtin functions -q cd - builtin functions -c 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. -# - -set __zoxide_z_prefix 'z!' - -# Jump to a directory using only keywords. -function __zoxide_z - set -l argc (count $argv) - set -l completion_regex '^'(string escape --style=regex $__zoxide_z_prefix)'(.*)$' - - 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 match --groups-only --regex $completion_regex $argv[-1]) - __zoxide_cd $result - else - set -l result (command zoxide query --exclude (__zoxide_pwd) -- $argv) - and __zoxide_cd $result - end -end - -# Completions for `z`. -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. - __fish_complete_directories "$tokens[2]" '' - else if test (count $tokens) -eq (count $curr_tokens) - # If the last argument is empty, use interactive selection. - set -l query $tokens[2..-1] - set -l result (zoxide query --exclude (__zoxide_pwd) -i -- $query) - and echo $__zoxide_z_prefix$result - commandline --function repaint - end -end - -# Jump to a directory using interactive search. -function __zoxide_zi - set -l result (command zoxide query -i -- $argv) - and __zoxide_cd $result -end - -# ============================================================================= -# -# Commands for zoxide. Disable these using --no-cmd. -# - -abbr --erase z &>/dev/null -complete --command z --erase -function z - __zoxide_z $argv -end -complete --command z --no-files --arguments '(__zoxide_z_complete)' - -abbr --erase zi &>/dev/null -complete --command zi --erase -function zi - __zoxide_zi $argv -end - -# ============================================================================= -# -# To initialize zoxide, add this to your configuration (usually -# ~/.config/fish/config.fish): -# -# zoxide init fish | source -# -# Note: zoxide only supports fish v3.4.0 and above. -# diff --git a/fish/fish_plugins b/fish/fish_plugins deleted file mode 100644 index b2d5f77..0000000 --- a/fish/fish_plugins +++ /dev/null @@ -1 +0,0 @@ -ilancosman/tide@v5 diff --git a/fish/functions/_tide_1_line_prompt.fish b/fish/functions/_tide_1_line_prompt.fish deleted file mode 100644 index 5772223..0000000 --- a/fish/functions/_tide_1_line_prompt.fish +++ /dev/null @@ -1,19 +0,0 @@ -function _tide_1_line_prompt - set -g add_prefix - _tide_side=left for item in $_tide_left_items - _tide_item_$item - end - set_color $prev_bg_color -b normal - echo $tide_left_prompt_suffix - - set -g add_prefix - _tide_side=right for item in $_tide_right_items - _tide_item_$item - end - set_color $prev_bg_color -b normal - echo $tide_right_prompt_suffix -end - -function _tide_item_pwd - _tide_print_item pwd @PWD@ -end diff --git a/fish/functions/_tide_2_line_prompt.fish b/fish/functions/_tide_2_line_prompt.fish deleted file mode 100644 index e9017af..0000000 --- a/fish/functions/_tide_2_line_prompt.fish +++ /dev/null @@ -1,31 +0,0 @@ -function _tide_2_line_prompt - set -g add_prefix - _tide_side=left for item in $_tide_left_items - _tide_item_$item - end - if not set -e add_prefix - set_color $prev_bg_color -b normal - echo $tide_left_prompt_suffix - end - - echo - - set -g add_prefix - _tide_side=right for item in $_tide_right_items - _tide_item_$item - end - if not set -e add_prefix - set_color $prev_bg_color -b normal - echo $tide_right_prompt_suffix - end -end - -function _tide_item_pwd - _tide_print_item pwd @PWD@ -end - -function _tide_item_newline - set_color $prev_bg_color -b normal - v=tide_"$_tide_side"_prompt_suffix echo $$v - set -g add_prefix -end diff --git a/fish/functions/_tide_cache_variables.fish b/fish/functions/_tide_cache_variables.fish deleted file mode 100644 index 31e3850..0000000 --- a/fish/functions/_tide_cache_variables.fish +++ /dev/null @@ -1,17 +0,0 @@ -function _tide_cache_variables - # Same-color-separator color - set_color $tide_prompt_color_separator_same_color | read -gx _tide_color_separator_same_color - - # git - contains git $_tide_left_items $_tide_right_items && set_color $tide_git_color_branch | read -gx _tide_location_color - - # private_mode - if contains private_mode $_tide_left_items $_tide_right_items && test -n "$fish_private_mode" - set -gx _tide_private_mode - else - set -e _tide_private_mode - end - - # item padding - test "$tide_prompt_pad_items" = true && set -gx _tide_pad ' ' || set -e _tide_pad -end diff --git a/fish/functions/_tide_detect_os.fish b/fish/functions/_tide_detect_os.fish deleted file mode 100644 index 5d96053..0000000 --- a/fish/functions/_tide_detect_os.fish +++ /dev/null @@ -1,75 +0,0 @@ -# Outputs icon, color, bg_color -function _tide_detect_os - set -lx defaultColor 080808 CED7CF - switch (uname | string lower) - case darwin - printf %s\n  D6D6D6 333333 # from apple.com header - case freebsd openbsd dragonfly - printf %s\n  FFFFFF AB2B28 # https://freebsdfoundation.org/about-us/about-the-foundation/project/ - case 'cygwin*' - printf %s\n  FFFFFF 00CCFF # https://answers.microsoft.com/en-us/windows/forum/all/what-is-the-official-windows-8-blue-rgb-or-hex/fd57144b-f69b-42d8-8c21-6ca911646e44 - case linux - if test (uname -o) = Android - echo ﲎ # This character is evil and messes up code display, so it's put on its own line - # https://developer.android.com/distribute/marketing-tools/brand-guidelines - printf %s\n 3DDC84 3C3F41 # fg is from above link, bg is from Android Studio default dark theme - else - _tide_detect_os_linux_cases /etc/os-release ID || - _tide_detect_os_linux_cases /etc/os-release ID_LIKE || - _tide_detect_os_linux_cases /etc/lsb-release DISTRIB_ID || - printf %s\n  $defaultColor - end - case '*' - echo -ns '?' - end -end - -function _tide_detect_os_linux_cases -a file key - test -e $file || return - set -l split_file (string split '=' <$file) - set -l key_index (contains --index $key $split_file) || return - set -l value (string trim --chars='"' $split_file[(math $key_index + 1)]) - - # Anything which would have pure white background has been changed to D4D4D4 - # It was just too bright otherwise - switch (string lower $value) - case alpine - printf %s\n  FFFFFF 0D597F # from alpine logo - case arch - printf %s\n  1793D1 4D4D4D # from arch wiki header - case centos - printf %s\n  000000 D4D4D4 # https://wiki.centos.org/ArtWork/Brand/Logo, monochromatic - case debian - printf %s\n  C70036 D4D4D4 # from debian logo https://www.debian.org/logos/openlogo-nd-100.png - case devuan - printf %s\n  $defaultColor # logo is monochromatic - case elementary - printf %s\n  000000 D4D4D4 # https://elementary.io/brand, encouraged to be monochromatic - case fedora - printf %s\n  FFFFFF 294172 # from logo https://fedoraproject.org/w/uploads/2/2d/Logo_fedoralogo.png - case gentoo - printf %s\n  FFFFFF 54487A # https://wiki.gentoo.org/wiki/Project:Artwork/Colors - case mageia - printf %s\n  FFFFFF 262F45 # https://wiki.mageia.org/en/Artwork_guidelines - case manjaro - printf %s\n  FFFFFF 35BF5C # from https://gitlab.manjaro.org/artwork/branding/logo/-/blob/master/logo.svg - case mint - printf %s\n  FFFFFF 69B53F # extracted from https://linuxmint.com/web/img/favicon.ico - case nixos - printf %s\n  FFFFFF 5277C3 # https://github.com/NixOS/nixos-artwork/tree/master/logo - case opensuse-leap opensuse-tumbleweed - printf %s\n  73BA25 173f4f # https://en.opensuse.org/openSUSE:Artwork_brand - case raspbian - printf %s\n  FFFFFF A22846 # https://static.raspberrypi.org/files/Raspberry_Pi_Visual_Guidelines_2020.pdf - case rhel - printf %s\n  EE0000 000000 # https://www.redhat.com/en/about/brand/standards/color - case sabayon - printf %s\n  $defaultColor # Can't find colors, and they are rebranding anyway - case slackware - printf %s\n  $defaultColor # Doesn't really have a logo, and the colors are too close to PWD blue anyway - case ubuntu - printf %s\n  E95420 D4D4D4 # https://design.ubuntu.com/brand/ - case '*' - return 1 - end -end diff --git a/fish/functions/_tide_find_and_remove.fish b/fish/functions/_tide_find_and_remove.fish deleted file mode 100644 index 29f2180..0000000 --- a/fish/functions/_tide_find_and_remove.fish +++ /dev/null @@ -1,3 +0,0 @@ -function _tide_find_and_remove -a name list --no-scope-shadowing - contains --index $name $$list | read -l index && set -e "$list"[$index] -end diff --git a/fish/functions/_tide_item_aws.fish b/fish/functions/_tide_item_aws.fish deleted file mode 100644 index 7cb6338..0000000 --- a/fish/functions/_tide_item_aws.fish +++ /dev/null @@ -1,11 +0,0 @@ -function _tide_item_aws - # AWS_PROFILE overrides AWS_DEFAULT_PROFILE, AWS_REGION overrides AWS_DEFAULT_REGION - set -q AWS_PROFILE && set -l AWS_DEFAULT_PROFILE $AWS_PROFILE - set -q AWS_REGION && set -l AWS_DEFAULT_REGION $AWS_REGION - - if test -n "$AWS_DEFAULT_PROFILE" && test -n "$AWS_DEFAULT_REGION" - _tide_print_item aws $tide_aws_icon' ' "$AWS_DEFAULT_PROFILE/$AWS_DEFAULT_REGION" - else if test -n "$AWS_DEFAULT_PROFILE$AWS_DEFAULT_REGION" - _tide_print_item aws $tide_aws_icon' ' "$AWS_DEFAULT_PROFILE$AWS_DEFAULT_REGION" - end -end diff --git a/fish/functions/_tide_item_character.fish b/fish/functions/_tide_item_character.fish deleted file mode 100644 index 10bb324..0000000 --- a/fish/functions/_tide_item_character.fish +++ /dev/null @@ -1,17 +0,0 @@ -function _tide_item_character - test $_tide_status = 0 && set_color $tide_character_color || set_color $tide_character_color_failure - - set -q add_prefix || echo -ns ' ' - - test "$fish_key_bindings" = fish_default_key_bindings && echo -ns $tide_character_icon || - switch $fish_bind_mode - case insert - echo -ns $tide_character_icon - case default - echo -ns $tide_character_vi_icon_default - case replace replace_one - echo -ns $tide_character_vi_icon_replace - case visual - echo -ns $tide_character_vi_icon_visual - end -end diff --git a/fish/functions/_tide_item_chruby.fish b/fish/functions/_tide_item_chruby.fish deleted file mode 100644 index 02d5fbd..0000000 --- a/fish/functions/_tide_item_chruby.fish +++ /dev/null @@ -1,3 +0,0 @@ -function _tide_item_chruby - test -n "$RUBY_VERSION" && _tide_print_item chruby $tide_chruby_icon' ' $RUBY_VERSION -end diff --git a/fish/functions/_tide_item_cmd_duration.fish b/fish/functions/_tide_item_cmd_duration.fish deleted file mode 100644 index bc48bac..0000000 --- a/fish/functions/_tide_item_cmd_duration.fish +++ /dev/null @@ -1,12 +0,0 @@ -function _tide_item_cmd_duration - test $CMD_DURATION -gt $tide_cmd_duration_threshold && t=( - math -s0 "$CMD_DURATION/3600000" # Hours - math -s0 "$CMD_DURATION/60000"%60 # Minutes - math -s$tide_cmd_duration_decimals "$CMD_DURATION/1000"%60) if test $t[1] != 0 - _tide_print_item cmd_duration $tide_cmd_duration_icon' ' "$t[1]h $t[2]m $t[3]s" - else if test $t[2] != 0 - _tide_print_item cmd_duration $tide_cmd_duration_icon' ' "$t[2]m $t[3]s" - else - _tide_print_item cmd_duration $tide_cmd_duration_icon' ' "$t[3]s" - end -end diff --git a/fish/functions/_tide_item_context.fish b/fish/functions/_tide_item_context.fish deleted file mode 100644 index 575c438..0000000 --- a/fish/functions/_tide_item_context.fish +++ /dev/null @@ -1,15 +0,0 @@ -function _tide_item_context - if set -q SSH_TTY - set -lx tide_context_color $tide_context_color_ssh - test "$tide_context_hostname_parts" = 0 && _tide_print_item context $USER || - h=(string split . $hostname) _tide_print_item context $USER@(string join . $h[..$tide_context_hostname_parts]) - else if test "$EUID" = 0 - set -lx tide_context_color $tide_context_color_root - test "$tide_context_hostname_parts" = 0 && _tide_print_item context $USER || - h=(string split . $hostname) _tide_print_item context $USER@(string join . $h[..$tide_context_hostname_parts]) - else if test "$tide_context_always_display" = true - set -lx tide_context_color $tide_context_color_default - test "$tide_context_hostname_parts" = 0 && _tide_print_item context $USER || - h=(string split . $hostname) _tide_print_item context $USER@(string join . $h[..$tide_context_hostname_parts]) - end -end diff --git a/fish/functions/_tide_item_crystal.fish b/fish/functions/_tide_item_crystal.fish deleted file mode 100644 index cec9752..0000000 --- a/fish/functions/_tide_item_crystal.fish +++ /dev/null @@ -1,4 +0,0 @@ -function _tide_item_crystal - path is $_tide_parent_dirs/shard.yml && - _tide_print_item crystal $tide_crystal_icon' ' (crystal --version | string match -r "[\d.]+")[1] -end diff --git a/fish/functions/_tide_item_docker.fish b/fish/functions/_tide_item_docker.fish deleted file mode 100644 index 4eec0bf..0000000 --- a/fish/functions/_tide_item_docker.fish +++ /dev/null @@ -1,5 +0,0 @@ -function _tide_item_docker - docker context inspect --format '{{.Name}}' | read -l context - contains -- "$context" $tide_docker_default_contexts || - _tide_print_item docker $tide_docker_icon' ' $context -end diff --git a/fish/functions/_tide_item_git.fish b/fish/functions/_tide_item_git.fish deleted file mode 100644 index 43d46cb..0000000 --- a/fish/functions/_tide_item_git.fish +++ /dev/null @@ -1,67 +0,0 @@ -function _tide_item_git - if git branch --show-current 2>/dev/null | string replace -r ".+(.{$tide_git_truncation_length})" '…$1' | read -l location - git rev-parse --git-dir --is-inside-git-dir | read -fL gdir in_gdir - set location $_tide_location_color$location - else if test $pipestatus[1] != 0 - return - else if git tag --points-at HEAD | string replace -r ".+(.{$tide_git_truncation_length})" '…$1' | read location - git rev-parse --git-dir --is-inside-git-dir | read -fL gdir in_gdir - set location '#'$_tide_location_color$location - else - git rev-parse --git-dir --is-inside-git-dir --short HEAD | read -fL gdir in_gdir location - set location @$_tide_location_color$location - end - - # Operation - if test -d $gdir/rebase-merge - read -f step <$gdir/rebase-merge/msgnum - read -f total_steps <$gdir/rebase-merge/end - test -f $gdir/rebase-merge/interactive && set -f operation rebase-i || set -f operation rebase-m - else if test -d $gdir/rebase-apply - read -f step <$gdir/rebase-apply/next - read -f total_steps <$gdir/rebase-apply/last - if test -f $gdir/rebase-apply/rebasing - set -f operation rebase - else if test -f $gdir/rebase-apply/applying - set -f operation am - else - set -f operation am/rebase - end - else if test -f $gdir/MERGE_HEAD - set -f operation merge - else if test -f $gdir/CHERRY_PICK_HEAD - set -f operation cherry-pick - else if test -f $gdir/REVERT_HEAD - set -f operation revert - else if test -f $gdir/BISECT_LOG - set -f operation bisect - end - - # Git status/stash + Upstream behind/ahead - test $in_gdir = true && set -l _set_dir_opt -C $gdir/.. - # Suppress errors in case we are in a bare repo or there is no upstream - stat=(git $_set_dir_opt --no-optional-locks status --porcelain 2>/dev/null) \ - string match -qr '(0|(?.*))\n(0|(?.*))\n(0|(?.*)) -(0|(?.*))\n(0|(?.*))(\n(0|(?.*))\t(0|(?.*)))?' \ - "$(git $_set_dir_opt stash list 2>/dev/null | count - string match -r ^UU $stat | count - string match -r ^[ADMR]. $stat | count - string match -r ^.[ADMR] $stat | count - string match -r '^\?\?' $stat | count - git rev-list --count --left-right @{upstream}...HEAD 2>/dev/null)" - - if test -n "$operation$conflicted" - set -g tide_git_bg_color $tide_git_bg_color_urgent - else if test -n "$staged$dirty$untracked" - set -g tide_git_bg_color $tide_git_bg_color_unstable - end - - _tide_print_item git $_tide_location_color$tide_git_icon' ' (set_color white; echo -ns $location - set_color $tide_git_color_operation; echo -ns ' '$operation ' '$step/$total_steps - set_color $tide_git_color_upstream; echo -ns ' ⇣'$behind ' ⇡'$ahead - set_color $tide_git_color_stash; echo -ns ' *'$stash - set_color $tide_git_color_conflicted; echo -ns ' ~'$conflicted - set_color $tide_git_color_staged; echo -ns ' +'$staged - set_color $tide_git_color_dirty; echo -ns ' !'$dirty - set_color $tide_git_color_untracked; echo -ns ' ?'$untracked) -end diff --git a/fish/functions/_tide_item_go.fish b/fish/functions/_tide_item_go.fish deleted file mode 100644 index 7c5919f..0000000 --- a/fish/functions/_tide_item_go.fish +++ /dev/null @@ -1,4 +0,0 @@ -function _tide_item_go - path is $_tide_parent_dirs/go.mod && - _tide_print_item go $tide_go_icon' ' (go version | string match -r "[\d.]+") -end diff --git a/fish/functions/_tide_item_java.fish b/fish/functions/_tide_item_java.fish deleted file mode 100644 index 6105acc..0000000 --- a/fish/functions/_tide_item_java.fish +++ /dev/null @@ -1,4 +0,0 @@ -function _tide_item_java - path is $_tide_parent_dirs/pom.xml && - _tide_print_item java $tide_java_icon' ' (java -version &| string match -r "[\d.]+")[1] -end diff --git a/fish/functions/_tide_item_jobs.fish b/fish/functions/_tide_item_jobs.fish deleted file mode 100644 index 96cf902..0000000 --- a/fish/functions/_tide_item_jobs.fish +++ /dev/null @@ -1,3 +0,0 @@ -function _tide_item_jobs - set -q _tide_jobs && _tide_print_item jobs $tide_jobs_icon -end diff --git a/fish/functions/_tide_item_kubectl.fish b/fish/functions/_tide_item_kubectl.fish deleted file mode 100644 index ab044b3..0000000 --- a/fish/functions/_tide_item_kubectl.fish +++ /dev/null @@ -1,4 +0,0 @@ -function _tide_item_kubectl - kubectl config view --minify --output 'jsonpath={.current-context}/{..namespace}' 2>/dev/null | read -l context && - _tide_print_item kubectl $tide_kubectl_icon' ' (string replace -r '/(|default)$' '' $context) -end diff --git a/fish/functions/_tide_item_nix_shell.fish b/fish/functions/_tide_item_nix_shell.fish deleted file mode 100644 index 647f606..0000000 --- a/fish/functions/_tide_item_nix_shell.fish +++ /dev/null @@ -1,3 +0,0 @@ -function _tide_item_nix_shell - set -q IN_NIX_SHELL && _tide_print_item nix_shell $tide_nix_shell_icon' ' $IN_NIX_SHELL -end diff --git a/fish/functions/_tide_item_node.fish b/fish/functions/_tide_item_node.fish deleted file mode 100644 index 0588051..0000000 --- a/fish/functions/_tide_item_node.fish +++ /dev/null @@ -1,4 +0,0 @@ -function _tide_item_node - path is $_tide_parent_dirs/package.json && - _tide_print_item node $tide_node_icon' ' (node --version | string trim --chars=v) -end diff --git a/fish/functions/_tide_item_os.fish b/fish/functions/_tide_item_os.fish deleted file mode 100644 index 8a6208c..0000000 --- a/fish/functions/_tide_item_os.fish +++ /dev/null @@ -1,3 +0,0 @@ -function _tide_item_os - _tide_print_item os $tide_os_icon -end diff --git a/fish/functions/_tide_item_php.fish b/fish/functions/_tide_item_php.fish deleted file mode 100644 index abc104e..0000000 --- a/fish/functions/_tide_item_php.fish +++ /dev/null @@ -1,4 +0,0 @@ -function _tide_item_php - path is $_tide_parent_dirs/composer.json && - _tide_print_item php $tide_php_icon' ' (php --version | string match -r 'PHP ([\d.]+)')[2] -end diff --git a/fish/functions/_tide_item_private_mode.fish b/fish/functions/_tide_item_private_mode.fish deleted file mode 100644 index 4eb4684..0000000 --- a/fish/functions/_tide_item_private_mode.fish +++ /dev/null @@ -1,3 +0,0 @@ -function _tide_item_private_mode - set -q _tide_private_mode && _tide_print_item private_mode $tide_private_mode_icon -end diff --git a/fish/functions/_tide_item_rustc.fish b/fish/functions/_tide_item_rustc.fish deleted file mode 100644 index 2e71645..0000000 --- a/fish/functions/_tide_item_rustc.fish +++ /dev/null @@ -1,4 +0,0 @@ -function _tide_item_rustc - path is $_tide_parent_dirs/Cargo.toml && - _tide_print_item rustc $tide_rustc_icon' ' (rustc --version | string split ' ')[2] -end diff --git a/fish/functions/_tide_item_shlvl.fish b/fish/functions/_tide_item_shlvl.fish deleted file mode 100644 index 95dd5ff..0000000 --- a/fish/functions/_tide_item_shlvl.fish +++ /dev/null @@ -1,4 +0,0 @@ -function _tide_item_shlvl - # Non-interactive shells do not increment SHLVL, so we don't need to subtract 1 - test $SHLVL -gt $tide_shlvl_threshold && _tide_print_item shlvl $tide_shlvl_icon' ' $SHLVL -end diff --git a/fish/functions/_tide_item_status.fish b/fish/functions/_tide_item_status.fish deleted file mode 100644 index 3a040fd..0000000 --- a/fish/functions/_tide_item_status.fish +++ /dev/null @@ -1,15 +0,0 @@ -function _tide_item_status - if string match -qv 0 $_tide_pipestatus # If there is a failure anywhere in the pipestatus - if test "$_tide_pipestatus" = 1 # If simple failure - contains character $_tide_left_items || tide_status_bg_color=$tide_status_bg_color_failure \ - tide_status_color=$tide_status_color_failure _tide_print_item status $tide_status_icon_failure' ' 1 - else - fish_status_to_signal $_tide_pipestatus | string replace SIG '' | string join '|' | read -l out - test $_tide_status = 0 && _tide_print_item status $tide_status_icon' ' $out || - tide_status_bg_color=$tide_status_bg_color_failure tide_status_color=$tide_status_color_failure \ - _tide_print_item status $tide_status_icon_failure' ' $out - end - else if not contains character $_tide_left_items - _tide_print_item status $tide_status_icon - end -end diff --git a/fish/functions/_tide_item_terraform.fish b/fish/functions/_tide_item_terraform.fish deleted file mode 100644 index 8d99fb7..0000000 --- a/fish/functions/_tide_item_terraform.fish +++ /dev/null @@ -1,6 +0,0 @@ -function _tide_item_terraform - if path is $_tide_parent_dirs/.terraform - terraform workspace show | read -l workspace - test $workspace != default && _tide_print_item terraform $tide_terraform_icon' ' $workspace - end -end diff --git a/fish/functions/_tide_item_time.fish b/fish/functions/_tide_item_time.fish deleted file mode 100644 index b8522bc..0000000 --- a/fish/functions/_tide_item_time.fish +++ /dev/null @@ -1,3 +0,0 @@ -function _tide_item_time - _tide_print_item time (date +$tide_time_format) -end diff --git a/fish/functions/_tide_item_toolbox.fish b/fish/functions/_tide_item_toolbox.fish deleted file mode 100644 index 28975d3..0000000 --- a/fish/functions/_tide_item_toolbox.fish +++ /dev/null @@ -1,3 +0,0 @@ -function _tide_item_toolbox - test -e /run/.toolboxenv && _tide_print_item toolbox $tide_toolbox_icon' ' $hostname -end diff --git a/fish/functions/_tide_item_vi_mode.fish b/fish/functions/_tide_item_vi_mode.fish deleted file mode 100644 index 582855d..0000000 --- a/fish/functions/_tide_item_vi_mode.fish +++ /dev/null @@ -1,16 +0,0 @@ -function _tide_item_vi_mode - test "$fish_key_bindings" != fish_default_key_bindings && switch $fish_bind_mode - case default - tide_vi_mode_bg_color=$tide_vi_mode_bg_color_default tide_vi_mode_color=$tide_vi_mode_color_default \ - _tide_print_item vi_mode $tide_vi_mode_icon_default - case insert - tide_vi_mode_bg_color=$tide_vi_mode_bg_color_insert tide_vi_mode_color=$tide_vi_mode_color_insert \ - _tide_print_item vi_mode $tide_vi_mode_icon_insert - case replace replace_one - tide_vi_mode_bg_color=$tide_vi_mode_bg_color_replace tide_vi_mode_color=$tide_vi_mode_color_replace \ - _tide_print_item vi_mode $tide_vi_mode_icon_replace - case visual - tide_vi_mode_bg_color=$tide_vi_mode_bg_color_visual tide_vi_mode_color=$tide_vi_mode_color_visual \ - _tide_print_item vi_mode $tide_vi_mode_icon_visual - end -end diff --git a/fish/functions/_tide_item_virtual_env.fish b/fish/functions/_tide_item_virtual_env.fish deleted file mode 100644 index 0f20cee..0000000 --- a/fish/functions/_tide_item_virtual_env.fish +++ /dev/null @@ -1,11 +0,0 @@ -function _tide_item_virtual_env - test -n "$VIRTUAL_ENV" && split_virtual_env=(string split / "$VIRTUAL_ENV") if test $split_virtual_env[-2] = virtualenvs - # pipenv $VIRTUAL_ENV looks like /home/ilan/.local/share/virtualenvs/pipenv_project-EwRYuc3l - # Detect whether we are using pipenv by looking for virtualenvs. If so, remove the hash at the end. - _tide_print_item virtual_env $tide_virtual_env_icon' ' (string split -r -m1 - "$split_virtual_env[-1]")[1] - else if contains -- $split_virtual_env[-1] virtualenv venv .venv env # avoid generic names - _tide_print_item virtual_env $tide_virtual_env_icon' ' $split_virtual_env[-2] - else - _tide_print_item virtual_env $tide_virtual_env_icon' ' $split_virtual_env[-1] - end -end diff --git a/fish/functions/_tide_parent_dirs.fish b/fish/functions/_tide_parent_dirs.fish deleted file mode 100644 index 9f31b04..0000000 --- a/fish/functions/_tide_parent_dirs.fish +++ /dev/null @@ -1,7 +0,0 @@ -function _tide_parent_dirs --on-variable PWD - set -g _tide_parent_dirs (string escape ( - for dir in (string split / -- $PWD) - set -la parts $dir - string join / -- $parts - end)) -end diff --git a/fish/functions/_tide_print_item.fish b/fish/functions/_tide_print_item.fish deleted file mode 100644 index db5c98b..0000000 --- a/fish/functions/_tide_print_item.fish +++ /dev/null @@ -1,22 +0,0 @@ -function _tide_print_item -a item - v=tide_"$item"_bg_color set -f item_bg_color $$v - - if set -e add_prefix - set_color $item_bg_color -b normal - v=tide_"$_tide_side"_prompt_prefix echo -ns $$v - else if test "$item_bg_color" = "$prev_bg_color" - v=tide_"$_tide_side"_prompt_separator_same_color echo -ns $_tide_color_separator_same_color$$v - else if test $_tide_side = left - set_color $prev_bg_color -b $item_bg_color - echo -ns $tide_left_prompt_separator_diff_color - else - set_color $item_bg_color -b $prev_bg_color - echo -ns $tide_right_prompt_separator_diff_color - end - - v=tide_"$item"_color set_color $$v -b $item_bg_color - - echo -ns $_tide_pad $argv[2..] $_tide_pad - - set -g prev_bg_color $item_bg_color -end diff --git a/fish/functions/_tide_pwd.fish b/fish/functions/_tide_pwd.fish deleted file mode 100644 index 3bd53b0..0000000 --- a/fish/functions/_tide_pwd.fish +++ /dev/null @@ -1,37 +0,0 @@ -set_color -o $tide_pwd_color_anchors | read -l color_anchors -set_color $tide_pwd_color_truncated_dirs | read -l color_truncated -set -l reset_to_color_dirs (set_color normal -b $tide_pwd_bg_color; set_color $tide_pwd_color_dirs) - -set -l unwritable_icon $tide_pwd_icon_unwritable' ' -set -l home_icon $tide_pwd_icon_home' ' -set -l pwd_icon $tide_pwd_icon' ' - -eval "function _tide_pwd - if set -l split_pwd (string replace -r '^$HOME' '~' -- \$PWD | string split /) - test -w . && set -f split_output \"$pwd_icon\$split_pwd[1]\" \$split_pwd[2..] || - set -f split_output \"$unwritable_icon\$split_pwd[1]\" \$split_pwd[2..] - set split_output[-1] \"$color_anchors\$split_output[-1]$reset_to_color_dirs\" - else - set -f split_output \"$home_icon$color_anchors~\" - end - - string join / -- \$split_output | string length -V | read -g _tide_pwd_len - - i=1 for dir_section in \$split_pwd[2..-2] - string join -- / \$split_pwd[..\$i] | string replace '~' $HOME | read -l parent_dir # Uses i before increment - - math \$i+1 | read i - - if path is \$parent_dir/\$dir_section/\$tide_pwd_markers - set split_output[\$i] \"$color_anchors\$dir_section$reset_to_color_dirs\" - else if test \$_tide_pwd_len -gt \$dist_btwn_sides - set -l trunc - while string match -qr \"(?\$trunc.)\" \$dir_section && v=\$parent_dir/\$trunc*/ set -q v[2] - end - test -n \"\$trunc\" && set split_output[\$i] \"$color_truncated\$trunc$reset_to_color_dirs\" && - string join / \$split_output | string length -V | read _tide_pwd_len - end - end - - string join -- / \"$reset_to_color_dirs\$split_output[1]\" \$split_output[2..] -end" diff --git a/fish/functions/_tide_remove_unusable_items.fish b/fish/functions/_tide_remove_unusable_items.fish deleted file mode 100644 index f1111cb..0000000 --- a/fish/functions/_tide_remove_unusable_items.fish +++ /dev/null @@ -1,21 +0,0 @@ -function _tide_remove_unusable_items - # Remove tool-specific items for tools the machine doesn't have installed - set -l removed_items - for item in aws chruby crystal docker git go java kubectl nix_shell node php rustc terraform toolbox virtual_env - set -l cli_names $item - switch $item - case virtual_env - set cli_names python python3 - case nix_shell - set cli_names nix nix-shell - end - type --query $cli_names || set -a removed_items $item - end - - set -U _tide_left_items (for item in $tide_left_prompt_items - contains $item $removed_items || echo $item - end) - set -U _tide_right_items (for item in $tide_right_prompt_items - contains $item $removed_items || echo $item - end) -end diff --git a/fish/functions/_tide_sub_bug-report.fish b/fish/functions/_tide_sub_bug-report.fish deleted file mode 100644 index 5f087c8..0000000 --- a/fish/functions/_tide_sub_bug-report.fish +++ /dev/null @@ -1,73 +0,0 @@ -function _tide_sub_bug-report - argparse c/clean v/verbose check -- $argv - - set -l fish_path (status fish-path) - - if set -q _flag_clean - HOME=(mktemp -d) $fish_path --init-command "curl --silent \ - https://raw.githubusercontent.com/jorgebucaran/fisher/main/functions/fisher.fish | - source && fisher install ilancosman/tide@v5" - else if set -q _flag_verbose - set --long | string match -r "^_?tide.*" | # Get only tide variables - string match -r --invert "^_tide_prompt_var.*" # Remove _tide_prompt_var - else - set -l fish_version ($fish_path --version | string match -r "fish, version (\d\.\d\.\d)")[2] - _tide_check_version Fish fish-shell/fish-shell "(\d\.\d\.\d)" $fish_version || return - - set -l tide_version (tide --version | string match -r "tide, version (\d\.\d\.\d)")[2] - _tide_check_version Tide IlanCosman/tide "v(\d\.\d\.\d)" $tide_version || return - - if command --query git - test (git --version | string match -r "git version ([\d\.]*)" | string replace --all . '')[2] -gt 2220 - _tide_check_condition \ - "Your git version is too old." \ - "Tide requires at least version 2.22." \ - "Please update before submitting a bug report." || return - end - - # Check that omf is not installed - not functions --query omf - _tide_check_condition \ - "Tide does not work with oh-my-fish installed." \ - "Please uninstall it before submitting a bug report." || return - - if not set -q _flag_check - set -l fish_startup_time ($fish_path -ic "time $fish_path -c exit" 2>| - string match -r "Executed in(.*)fish" | string trim)[2] - - read --local --prompt-str "What operating system are you using? (e.g Ubuntu 20.04): " os - read --local --prompt-str "What terminal emulator are you using? (e.g Kitty): " terminal_emulator - - printf '%b\n' "\nPlease copy the following information into the issue:\n" \ - "fish version: $fish_version" \ - "tide version: $tide_version" \ - "term: $TERM" \ - "os: $os" \ - "terminal emulator: $terminal_emulator" \ - "fish startup: $fish_startup_time" \ - "fisher plugins: $_fisher_plugins" - end - end -end - -function _tide_check_version -a program_name repo_name regex_to_get_version current_version - curl --silent https://github.com/$repo_name/releases/latest | - string match -r ".*$repo_name/releases/tag/$regex_to_get_version.*" | - read --local --line __ latestVersion - - string match --quiet -r "^$latestVersion" "$current_version" - _tide_check_condition \ - "Your $program_name version is out of date." \ - "The latest is $latestVersion. You have $current_version." \ - "Please update before submitting a bug report." -end - -function _tide_check_condition - if test "$status" != 0 - set_color red - printf '%s\n' $argv - set_color normal - return 1 - end - return 0 -end diff --git a/fish/functions/_tide_sub_configure.fish b/fish/functions/_tide_sub_configure.fish deleted file mode 100644 index cb87290..0000000 --- a/fish/functions/_tide_sub_configure.fish +++ /dev/null @@ -1,95 +0,0 @@ -set -g _tide_color_dark_blue 0087AF -set -g _tide_color_dark_green 5FAF00 -set -g _tide_color_gold D7AF00 -set -g _tide_color_green 5FD700 -set -g _tide_color_light_blue 00AFFF - -# Create an empty fake function for each item -for func in _fake(functions --all | string match --entire _tide_item) - function $func - end -end - -for file in (status dirname)/tide/configure/{choices, functions}/**.fish - source $file -end - -function _tide_sub_configure - if test $COLUMNS -lt 55 -o $LINES -lt 21 - echo 'Terminal size too small; must be at least 55 x 21' - return 1 - end - - _tide_detect_os | read -g --line os_branding_icon os_branding_color os_branding_bg_color - - set -g fake_columns $COLUMNS - test $fake_columns -gt 90 && set fake_columns 90 - set -g fake_lines $LINES - - set -g _tide_selected_option - _next_choice all/style -end - -function _next_choice -a nextChoice - set -q _tide_selected_option || return 0 - set -l cmd (string split '/' $nextChoice)[2] - $cmd -end - -function _tide_title -a text - command -q clear && clear - set_color -o - string pad --width (math --scale=0 "$fake_columns/2" + (string length $text)/2) $text - set_color normal -end - -function _tide_option -a symbol text - set -ga _tide_option_list $symbol - - set_color -o - echo "($symbol) $text" - set_color normal -end - -function _tide_menu - set -l list_with_slashes (string join '/' $_tide_option_list) - - echo '(r) Restart from the beginning' - echo '(q) Quit and do nothing'\n - - while true - set_color -o - read --nchars 1 --prompt-str "Choice [$list_with_slashes/r/q] " input - set_color normal - - switch $input - case r - set -e _tide_option_list - _next_choice all/style - break - case q - set -e _tide_selected_option # Skip through all the _next_choices - set -e _tide_option_list - command -q clear && clear - break - case $_tide_option_list - set -e _tide_option_list - set -g _tide_selected_option $input - break - end - end -end - -function _tide_display_prompt -a var_name var_value - test -n "$var_name" && set -g $var_name $var_value - _fake_tide_cache_variables - set -l prompt (_fake_tide_prompt) - - set -l bottom_left_prompt_string_length (string length --visible $prompt[-1]) - set -l right_prompt_string (string pad --width (math $fake_columns-$bottom_left_prompt_string_length) $prompt[1]) - set -l prompt[-1] "$prompt[-1]$right_prompt_string" - - string unescape $prompt[2..] - set_color normal - echo -end diff --git a/fish/functions/fish_mode_prompt.fish b/fish/functions/fish_mode_prompt.fish deleted file mode 100644 index f37cf7d..0000000 --- a/fish/functions/fish_mode_prompt.fish +++ /dev/null @@ -1 +0,0 @@ -# Disable default vi prompt diff --git a/fish/functions/fish_prompt.fish b/fish/functions/fish_prompt.fish deleted file mode 100644 index 3e820c4..0000000 --- a/fish/functions/fish_prompt.fish +++ /dev/null @@ -1,90 +0,0 @@ -function fish_prompt -end # In case this file gets loaded non-interactively, e.g by conda -status is-interactive || exit - -_tide_remove_unusable_items -_tide_cache_variables -_tide_parent_dirs -source (functions --details _tide_pwd) - -set -l prompt_var _tide_prompt_$fish_pid -set -U $prompt_var # Set var here so if we erase $prompt_var, bg job won't set a uvar - -set_color normal | read -l color_normal -status fish-path | read -l fish_path - -# _tide_repaint prevents us from creating a second background job -function _tide_refresh_prompt --on-variable $prompt_var --on-variable COLUMNS - set -g _tide_repaint - commandline -f repaint -end - -if contains newline $_tide_left_items # two line prompt initialization - test "$tide_prompt_add_newline_before" = true && set -l add_newline '\n' - - set_color $tide_prompt_color_frame_and_connection -b normal | read -l prompt_and_frame_color - - set -l column_offset 5 - test "$tide_left_prompt_frame_enabled" = true && - set -l top_left_frame "$prompt_and_frame_color╭─" && - set -l bot_left_frame "$prompt_and_frame_color╰─" && - set column_offset (math $column_offset-2) - test "$tide_right_prompt_frame_enabled" = true && - set -l top_right_frame "$prompt_and_frame_color─╮" && - set -l bot_right_frame "$prompt_and_frame_color─╯" && - set column_offset (math $column_offset-2) - - eval " -function fish_prompt - _tide_status=\$status _tide_pipestatus=\$pipestatus if not set -e _tide_repaint - jobs -q && set -lx _tide_jobs - $fish_path -c \"set _tide_pipestatus \$_tide_pipestatus -set _tide_parent_dirs \$_tide_parent_dirs -PATH=\$(string escape \"\$PATH\") CMD_DURATION=\$CMD_DURATION fish_bind_mode=\$fish_bind_mode set $prompt_var (_tide_2_line_prompt)\" & - builtin disown - - command kill \$_tide_last_pid 2>/dev/null - set -g _tide_last_pid \$last_pid - end - - math \$COLUMNS-(string length -V \"\$$prompt_var[1][1]\$$prompt_var[1][3]\")+$column_offset | read -lx dist_btwn_sides - - echo -ns $add_newline'$top_left_frame'(string replace @PWD@ (_tide_pwd) \"\$$prompt_var[1][1]\")'$prompt_and_frame_color' - string repeat -Nm(math max 0, \$dist_btwn_sides-\$_tide_pwd_len) '$tide_prompt_icon_connection' - echo -ns \"\$$prompt_var[1][3]$top_right_frame\"\n\"$bot_left_frame\$$prompt_var[1][2]$color_normal \" -end - -function fish_right_prompt - string unescape \"\$$prompt_var[1][4]$bot_right_frame$color_normal\" -end" -else # one line prompt initialization - test "$tide_prompt_add_newline_before" = true && set -l add_newline '\0' - - math 5 -$tide_prompt_min_cols | read -l column_offset - test $column_offset -ge 0 && set column_offset "+$column_offset" - - eval " -function fish_prompt - _tide_status=\$status _tide_pipestatus=\$pipestatus if not set -e _tide_repaint - jobs -q && set -lx _tide_jobs - $fish_path -c \"set _tide_pipestatus \$_tide_pipestatus -set _tide_parent_dirs \$_tide_parent_dirs -PATH=\$(string escape \"\$PATH\") CMD_DURATION=\$CMD_DURATION fish_bind_mode=\$fish_bind_mode set $prompt_var (_tide_1_line_prompt)\" & - builtin disown - - command kill \$_tide_last_pid 2>/dev/null - set -g _tide_last_pid \$last_pid - end - - math \$COLUMNS-(string length -V \"\$$prompt_var[1][1]\$$prompt_var[1][2]\")$column_offset | read -lx dist_btwn_sides - string replace @PWD@ (_tide_pwd) $add_newline \$$prompt_var[1][1]'$color_normal ' -end - -function fish_right_prompt - string unescape \"\$$prompt_var[1][2]$color_normal\" -end" -end - -eval "function _tide_on_fish_exit --on-event fish_exit - set -e $prompt_var -end" diff --git a/fish/functions/nheko.fish b/fish/functions/nheko.fish deleted file mode 100644 index 78672b0..0000000 --- a/fish/functions/nheko.fish +++ /dev/null @@ -1,4 +0,0 @@ -function nheko --description 'alias nheko nheko --style Breeze' - command nheko --style Breeze $argv - -end diff --git a/fish/functions/tide.fish b/fish/functions/tide.fish deleted file mode 100644 index 1a58f40..0000000 --- a/fish/functions/tide.fish +++ /dev/null @@ -1,27 +0,0 @@ -function tide --description 'Manage your Tide prompt' - argparse --stop-nonopt v/version h/help -- $argv - - if set -q _flag_version - echo 'tide, version 5.5.1' - else if set -q _flag_help - _tide_help - else if functions --query _tide_sub_$argv[1] - _tide_sub_$argv[1] $argv[2..] - else - _tide_help - return 1 - end -end - -function _tide_help - printf %s\n \ - 'Usage: tide [options] subcommand [options]' \ - '' \ - 'Options:' \ - ' -v or --version print tide version number' \ - ' -h or --help print this help message' \ - '' \ - 'Subcommands:' \ - ' configure run interactive configuration wizard' \ - ' bug-report print info for use in bug reports' -end diff --git a/fish/functions/tide/configure/choices/all/finish.fish b/fish/functions/tide/configure/choices/all/finish.fish deleted file mode 100644 index f60a128..0000000 --- a/fish/functions/tide/configure/choices/all/finish.fish +++ /dev/null @@ -1,33 +0,0 @@ -function finish - set_color red - _tide_title 'Overwrite tide config?' - set_color normal - - _tide_option y Yes - echo - - _tide_menu - switch $_tide_selected_option - case y - _tide_finish - command -q clear && clear - end -end - -function _tide_finish - set -e _tide_selected_option # Skip through all the _next_choices - - # Deal with prompt char/vi mode - contains character $fake_tide_left_prompt_items || set -p fake_tide_left_prompt_items vi_mode - - # Set the real variables - for fakeVar in (set --names | string match -r "^fake_tide.*") - set -U (string replace 'fake_' '' $fakeVar) $$fakeVar - end - - # Make sure old prompt won't display - set -e $_tide_prompt_var 2>/dev/null - - # Re-initialize the prompt - source (functions --details fish_prompt) -end diff --git a/fish/functions/tide/configure/choices/all/icons.fish b/fish/functions/tide/configure/choices/all/icons.fish deleted file mode 100644 index e53bffa..0000000 --- a/fish/functions/tide/configure/choices/all/icons.fish +++ /dev/null @@ -1,33 +0,0 @@ -function icons - _tide_title Icons - - _tide_option 1 'Few icons' - _tide_display_prompt - - _tide_option 2 'Many icons' - _enable_icons - _tide_display_prompt - - _tide_menu - switch $_tide_selected_option - case 1 - _disable_icons - end - _next_choice all/finish -end - -function _enable_icons - set -p fake_tide_left_prompt_items os - set -g fake_tide_pwd_icon  - set -g fake_tide_pwd_icon_home  - set -g fake_tide_cmd_duration_icon  - set -g fake_tide_git_icon  -end - -function _disable_icons - _tide_find_and_remove os fake_tide_left_prompt_items - set fake_tide_pwd_icon - set fake_tide_pwd_icon_home - set fake_tide_cmd_duration_icon - set fake_tide_git_icon -end diff --git a/fish/functions/tide/configure/choices/all/prompt_colors.fish b/fish/functions/tide/configure/choices/all/prompt_colors.fish deleted file mode 100644 index 90b1a9d..0000000 --- a/fish/functions/tide/configure/choices/all/prompt_colors.fish +++ /dev/null @@ -1,26 +0,0 @@ -function prompt_colors - _tide_title 'Prompt Colors' - - _tide_option 1 'True color' - _tide_display_prompt - - _tide_option 2 '16 colors' - _load_config "$_tide_configure_style"_16color - set -g _tide_16color true - _tide_display_prompt - - _tide_menu - switch $_tide_selected_option - case 1 - _load_config "$_tide_configure_style" - set -e _tide_16color - switch $_tide_configure_style - case lean rainbow - _next_choice all/show_time - case classic - _next_choice classic/classic_prompt_color - end - case 2 - _next_choice all/show_time - end -end diff --git a/fish/functions/tide/configure/choices/all/prompt_connection.fish b/fish/functions/tide/configure/choices/all/prompt_connection.fish deleted file mode 100644 index ae31ef3..0000000 --- a/fish/functions/tide/configure/choices/all/prompt_connection.fish +++ /dev/null @@ -1,28 +0,0 @@ -function prompt_connection - _tide_title 'Prompt Connection' - - _tide_option 1 Disconnected - _tide_display_prompt fake_tide_prompt_icon_connection ' ' - - _tide_option 2 Dotted - _tide_display_prompt fake_tide_prompt_icon_connection '·' - - _tide_option 3 Solid - _tide_display_prompt fake_tide_prompt_icon_connection '─' - - _tide_menu - switch $_tide_selected_option - case 1 - set -g fake_tide_prompt_icon_connection ' ' - case 2 - set -g fake_tide_prompt_icon_connection '·' - case 3 - set -g fake_tide_prompt_icon_connection '─' - end - switch $_tide_configure_style - case lean - _next_choice all/prompt_connection_andor_frame_color - case classic rainbow - _next_choice powerline/powerline_prompt_frame - end -end diff --git a/fish/functions/tide/configure/choices/all/prompt_connection_andor_frame_color.fish b/fish/functions/tide/configure/choices/all/prompt_connection_andor_frame_color.fish deleted file mode 100644 index b8803b4..0000000 --- a/fish/functions/tide/configure/choices/all/prompt_connection_andor_frame_color.fish +++ /dev/null @@ -1,36 +0,0 @@ -function prompt_connection_andor_frame_color - if test "$_tide_16color" = true || - test "$fake_tide_left_prompt_frame_enabled" = false -a \ - "$fake_tide_right_prompt_frame_enabled" = false -a \ - "$fake_tide_prompt_icon_connection" = ' ' - _next_choice all/prompt_spacing - return 0 - end - - _tide_title "Connection & Frame Color" - - _tide_option 1 Lightest - _tide_display_prompt fake_tide_prompt_color_frame_and_connection 808080 - - _tide_option 2 Light - _tide_display_prompt fake_tide_prompt_color_frame_and_connection 6C6C6C - - _tide_option 3 Dark - _tide_display_prompt fake_tide_prompt_color_frame_and_connection 585858 - - _tide_option 4 Darkest - _tide_display_prompt fake_tide_prompt_color_frame_and_connection 444444 - - _tide_menu - switch $_tide_selected_option - case 1 - set -g fake_tide_prompt_color_frame_and_connection 808080 - case 2 - set -g fake_tide_prompt_color_frame_and_connection 6C6C6C - case 3 - set -g fake_tide_prompt_color_frame_and_connection 585858 - case 4 - set -g fake_tide_prompt_color_frame_and_connection 444444 - end - _next_choice all/prompt_spacing -end diff --git a/fish/functions/tide/configure/choices/all/prompt_spacing.fish b/fish/functions/tide/configure/choices/all/prompt_spacing.fish deleted file mode 100644 index a5bb98b..0000000 --- a/fish/functions/tide/configure/choices/all/prompt_spacing.fish +++ /dev/null @@ -1,21 +0,0 @@ -function prompt_spacing - _tide_title 'Prompt Spacing' - - _tide_option 1 Compact - _tide_display_prompt - printf \e\[1A # Move cursor up 1 row - _tide_display_prompt - - _tide_option 2 Sparse - _tide_display_prompt - _tide_display_prompt - - _tide_menu - switch $_tide_selected_option - case 1 - set -g fake_tide_prompt_add_newline_before false - case 2 - set -g fake_tide_prompt_add_newline_before true - end - _next_choice all/icons -end diff --git a/fish/functions/tide/configure/choices/all/show_time.fish b/fish/functions/tide/configure/choices/all/show_time.fish deleted file mode 100644 index 8cf1843..0000000 --- a/fish/functions/tide/configure/choices/all/show_time.fish +++ /dev/null @@ -1,31 +0,0 @@ -function show_time - _tide_title 'Show current time?' - - _tide_option 1 No - _tide_display_prompt - - set -a fake_tide_right_prompt_items time - - _tide_option 2 '24-hour format' - _tide_display_prompt fake_tide_time_format %T - - _tide_option 3 '12-hour format' - _tide_display_prompt fake_tide_time_format '%r' - - _tide_menu - switch $_tide_selected_option - case 1 - set -g fake_tide_time_format '' - set -e fake_tide_right_prompt_items[-1] - case 2 - set -g fake_tide_time_format %T - case 3 - set -g fake_tide_time_format '%r' - end - switch $_tide_configure_style - case lean - _next_choice "$_tide_configure_style"/"$_tide_configure_style"_prompt_height - case classic rainbow - _next_choice "$_tide_configure_style"/"$_tide_configure_style"_prompt_separators - end -end diff --git a/fish/functions/tide/configure/choices/all/style.fish b/fish/functions/tide/configure/choices/all/style.fish deleted file mode 100644 index ae52bc5..0000000 --- a/fish/functions/tide/configure/choices/all/style.fish +++ /dev/null @@ -1,57 +0,0 @@ -function style - _tide_title 'Prompt Style' - - _tide_option 1 Lean - _load_config lean - _tide_display_prompt - - _tide_option 2 Classic - _load_config classic - _tide_display_prompt - - _tide_option 3 Rainbow - _load_config rainbow - _tide_display_prompt - - _tide_style_menu - switch $_tide_selected_option - case 1 - _load_config lean - set -g _tide_configure_style lean - case 2 - _load_config classic - set -g _tide_configure_style classic - case 3 - _load_config rainbow - set -g _tide_configure_style rainbow - end - _next_choice all/prompt_colors -end - -function _load_config -a name - string replace -r '^' 'set -g fake_' <(status dirname)/../../configs/$name.fish | source -end - -function _tide_style_menu # Exactly like _tide_menu except that it doesn't have (r) option - set -l list_with_slashes (string join '/' $_tide_option_list) - - echo '(q) Quit and do nothing'\n - - while true - set_color -o - read --nchars 1 --prompt-str "Choice [$list_with_slashes/q] " input - set_color normal - - switch $input - case q - set -e _tide_selected_option # Skip through all the _next_choices - set -e _tide_option_list - command -q clear && clear - break - case $_tide_option_list - set -e _tide_option_list - set -g _tide_selected_option $input - break - end - end -end diff --git a/fish/functions/tide/configure/choices/classic/classic_prompt_color.fish b/fish/functions/tide/configure/choices/classic/classic_prompt_color.fish deleted file mode 100644 index 2189f36..0000000 --- a/fish/functions/tide/configure/choices/classic/classic_prompt_color.fish +++ /dev/null @@ -1,38 +0,0 @@ -function classic_prompt_color - _tide_title 'Prompt Color' - - _tide_option 1 Lightest - _set_all_items_bg_color 585858 - _tide_display_prompt - - _tide_option 2 Light - _set_all_items_bg_color 444444 - _tide_display_prompt - - _tide_option 3 Dark - _set_all_items_bg_color 303030 - _tide_display_prompt - - _tide_option 4 Darkest - _set_all_items_bg_color 1C1C1C - _tide_display_prompt - - _tide_menu - switch $_tide_selected_option - case 1 - _set_all_items_bg_color 585858 - case 2 - _set_all_items_bg_color 444444 - case 3 - _set_all_items_bg_color 303030 - case 4 - _set_all_items_bg_color 1C1C1C - end - _next_choice all/show_time -end - -function _set_all_items_bg_color -a color - for var in (set --names | string match -r "fake_.*_bg_color.*") - set $var $color - end -end diff --git a/fish/functions/tide/configure/choices/classic/classic_prompt_separators.fish b/fish/functions/tide/configure/choices/classic/classic_prompt_separators.fish deleted file mode 100644 index 17b88e4..0000000 --- a/fish/functions/tide/configure/choices/classic/classic_prompt_separators.fish +++ /dev/null @@ -1,40 +0,0 @@ -function classic_prompt_separators - _tide_title 'Prompt Separators' - - _tide_option 1 Angled - set -g fake_tide_left_prompt_separator_same_color  - set -g fake_tide_right_prompt_separator_same_color  - _tide_display_prompt - - _tide_option 2 Vertical - set -g fake_tide_left_prompt_separator_same_color '│' - set -g fake_tide_right_prompt_separator_same_color '│' - _tide_display_prompt - - _tide_option 3 Slanted - set -g fake_tide_left_prompt_separator_same_color '╱' - set -g fake_tide_right_prompt_separator_same_color '╱' - _tide_display_prompt - - _tide_option 4 Round - set -g fake_tide_left_prompt_separator_same_color '' - set -g fake_tide_right_prompt_separator_same_color '' - _tide_display_prompt - - _tide_menu - switch $_tide_selected_option - case 1 - set -g fake_tide_left_prompt_separator_same_color  - set -g fake_tide_right_prompt_separator_same_color  - case 2 - set -g fake_tide_left_prompt_separator_same_color '│' - set -g fake_tide_right_prompt_separator_same_color '│' - case 3 - set -g fake_tide_left_prompt_separator_same_color '╱' - set -g fake_tide_right_prompt_separator_same_color '╱' - case 4 - set -g fake_tide_left_prompt_separator_same_color '' - set -g fake_tide_right_prompt_separator_same_color '' - end - _next_choice powerline/powerline_prompt_heads -end diff --git a/fish/functions/tide/configure/choices/lean/lean_prompt_height.fish b/fish/functions/tide/configure/choices/lean/lean_prompt_height.fish deleted file mode 100644 index 4db04a8..0000000 --- a/fish/functions/tide/configure/choices/lean/lean_prompt_height.fish +++ /dev/null @@ -1,26 +0,0 @@ -function lean_prompt_height - _tide_title 'Prompt Height' - - _tide_option 1 'One line' - _tide_find_and_remove newline fake_tide_left_prompt_items - set -g fake_tide_left_prompt_suffix '' - _tide_display_prompt - - _tide_option 2 'Two lines' - set -g fake_tide_left_prompt_items $fake_tide_left_prompt_items[1..-2] newline $fake_tide_left_prompt_items[-1] - set -g fake_tide_left_prompt_suffix ' ' - _tide_display_prompt - - _tide_menu - switch $_tide_selected_option - case 1 - _tide_find_and_remove newline fake_tide_left_prompt_items - set fake_tide_left_prompt_suffix '' - _next_choice all/prompt_connection_andor_frame_color - case 2 - _tide_find_and_remove newline fake_tide_left_prompt_items - set -g fake_tide_left_prompt_items $fake_tide_left_prompt_items[1..-2] newline $fake_tide_left_prompt_items[-1] - set -g fake_tide_left_prompt_suffix ' ' - _next_choice all/prompt_connection - end -end diff --git a/fish/functions/tide/configure/choices/powerline/powerline_prompt_frame.fish b/fish/functions/tide/configure/choices/powerline/powerline_prompt_frame.fish deleted file mode 100644 index 19b3588..0000000 --- a/fish/functions/tide/configure/choices/powerline/powerline_prompt_frame.fish +++ /dev/null @@ -1,46 +0,0 @@ -function powerline_prompt_frame - _tide_title 'Prompt Frame' - - _tide_option 1 'No frame' - set fake_tide_left_prompt_frame_enabled false - set fake_tide_right_prompt_frame_enabled false - set -a fake_tide_left_prompt_items character - _tide_display_prompt - set -e fake_tide_left_prompt_items[-1] - - _tide_option 2 Left - set fake_tide_left_prompt_frame_enabled true - set fake_tide_right_prompt_frame_enabled false - _tide_display_prompt - - _tide_option 3 Right - set fake_tide_left_prompt_frame_enabled false - set fake_tide_right_prompt_frame_enabled true - set -a fake_tide_left_prompt_items character - _tide_display_prompt - set -e fake_tide_left_prompt_items[-1] - - _tide_option 4 Full - set fake_tide_left_prompt_frame_enabled true - set fake_tide_right_prompt_frame_enabled true - _tide_display_prompt - - _tide_menu - switch $_tide_selected_option - case 1 - set fake_tide_left_prompt_frame_enabled false - set fake_tide_right_prompt_frame_enabled false - set -a fake_tide_left_prompt_items character - case 2 - set fake_tide_left_prompt_frame_enabled true - set fake_tide_right_prompt_frame_enabled false - case 3 - set fake_tide_left_prompt_frame_enabled false - set fake_tide_right_prompt_frame_enabled true - set -a fake_tide_left_prompt_items character - case 4 - set fake_tide_left_prompt_frame_enabled true - set fake_tide_right_prompt_frame_enabled true - end - _next_choice all/prompt_connection_andor_frame_color -end diff --git a/fish/functions/tide/configure/choices/powerline/powerline_prompt_heads.fish b/fish/functions/tide/configure/choices/powerline/powerline_prompt_heads.fish deleted file mode 100644 index ac187c9..0000000 --- a/fish/functions/tide/configure/choices/powerline/powerline_prompt_heads.fish +++ /dev/null @@ -1,40 +0,0 @@ -function powerline_prompt_heads - _tide_title 'Prompt Heads' - - _tide_option 1 Sharp - set -g fake_tide_left_prompt_suffix  - set -g fake_tide_right_prompt_prefix  - _tide_display_prompt - - _tide_option 2 Blurred - set -g fake_tide_left_prompt_suffix '▓▒░' - set -g fake_tide_right_prompt_prefix '░▒▓' - _tide_display_prompt - - _tide_option 3 Slanted - set -g fake_tide_left_prompt_suffix '' - set -g fake_tide_right_prompt_prefix '' - _tide_display_prompt - - _tide_option 4 Round - set -g fake_tide_left_prompt_suffix '' - set -g fake_tide_right_prompt_prefix '' - _tide_display_prompt - - _tide_menu - switch $_tide_selected_option - case 1 - set -g fake_tide_left_prompt_suffix  - set -g fake_tide_right_prompt_prefix  - case 2 - set -g fake_tide_left_prompt_suffix '▓▒░' - set -g fake_tide_right_prompt_prefix '░▒▓' - case 3 - set -g fake_tide_left_prompt_suffix '' - set -g fake_tide_right_prompt_prefix '' - case 4 - set -g fake_tide_left_prompt_suffix '' - set -g fake_tide_right_prompt_prefix '' - end - _next_choice powerline/powerline_prompt_tails -end diff --git a/fish/functions/tide/configure/choices/powerline/powerline_prompt_height.fish b/fish/functions/tide/configure/choices/powerline/powerline_prompt_height.fish deleted file mode 100644 index 83fef05..0000000 --- a/fish/functions/tide/configure/choices/powerline/powerline_prompt_height.fish +++ /dev/null @@ -1,30 +0,0 @@ -function powerline_prompt_height - _tide_title 'Prompt Height' - - _tide_option 1 'One line' - _tide_find_and_remove newline fake_tide_left_prompt_items - set fake_tide_left_prompt_frame_enabled false - set fake_tide_right_prompt_frame_enabled false - _tide_display_prompt - - _tide_option 2 'Two lines' - set -g fake_tide_left_prompt_items $fake_tide_left_prompt_items newline - set fake_tide_left_prompt_frame_enabled true - set fake_tide_right_prompt_frame_enabled true - _tide_display_prompt - - _tide_menu - switch $_tide_selected_option - case 1 - _tide_find_and_remove newline fake_tide_left_prompt_items - set fake_tide_left_prompt_frame_enabled false - set fake_tide_right_prompt_frame_enabled false - _next_choice all/prompt_connection_andor_frame_color - case 2 - _tide_find_and_remove newline fake_tide_left_prompt_items - set -g fake_tide_left_prompt_items $fake_tide_left_prompt_items newline - set fake_tide_left_prompt_frame_enabled true - set fake_tide_right_prompt_frame_enabled true - _next_choice all/prompt_connection - end -end diff --git a/fish/functions/tide/configure/choices/powerline/powerline_prompt_tails.fish b/fish/functions/tide/configure/choices/powerline/powerline_prompt_tails.fish deleted file mode 100644 index 02f4609..0000000 --- a/fish/functions/tide/configure/choices/powerline/powerline_prompt_tails.fish +++ /dev/null @@ -1,48 +0,0 @@ -function powerline_prompt_tails - _tide_title 'Prompt Tails' - - _tide_option 1 Flat - set -g fake_tide_left_prompt_prefix '' - set -g fake_tide_right_prompt_suffix '' - _tide_display_prompt - - _tide_option 2 Blurred - set -g fake_tide_left_prompt_prefix '░▒▓' - set -g fake_tide_right_prompt_suffix '▓▒░' - _tide_display_prompt - - _tide_option 3 Sharp - set -g fake_tide_left_prompt_prefix  - set -g fake_tide_right_prompt_suffix  - _tide_display_prompt - - _tide_option 4 Slanted - set -g fake_tide_left_prompt_prefix '' - set -g fake_tide_right_prompt_suffix '' - _tide_display_prompt - - _tide_option 5 Round - set -g fake_tide_left_prompt_prefix '' - set -g fake_tide_right_prompt_suffix '' - _tide_display_prompt - - _tide_menu - switch $_tide_selected_option - case 1 - set -g fake_tide_left_prompt_prefix '' - set -g fake_tide_right_prompt_suffix '' - case 2 - set -g fake_tide_left_prompt_prefix '░▒▓' - set -g fake_tide_right_prompt_suffix '▓▒░' - case 3 - set -g fake_tide_left_prompt_prefix  - set -g fake_tide_right_prompt_suffix  - case 4 - set -g fake_tide_left_prompt_prefix '' - set -g fake_tide_right_prompt_suffix '' - case 5 - set -g fake_tide_left_prompt_prefix '' - set -g fake_tide_right_prompt_suffix '' - end - _next_choice powerline/powerline_prompt_height -end diff --git a/fish/functions/tide/configure/choices/rainbow/rainbow_prompt_separators.fish b/fish/functions/tide/configure/choices/rainbow/rainbow_prompt_separators.fish deleted file mode 100644 index 29f6ccc..0000000 --- a/fish/functions/tide/configure/choices/rainbow/rainbow_prompt_separators.fish +++ /dev/null @@ -1,40 +0,0 @@ -function rainbow_prompt_separators - _tide_title 'Prompt Separators' - - _tide_option 1 Angled - set -g fake_tide_left_prompt_separator_diff_color  - set -g fake_tide_right_prompt_separator_diff_color  - _tide_display_prompt - - _tide_option 2 Vertical - set -g fake_tide_left_prompt_separator_diff_color '' - set -g fake_tide_right_prompt_separator_diff_color '' - _tide_display_prompt - - _tide_option 3 Slanted - set -g fake_tide_left_prompt_separator_diff_color '' - set -g fake_tide_right_prompt_separator_diff_color '' - _tide_display_prompt - - _tide_option 4 Round - set -g fake_tide_left_prompt_separator_diff_color '' - set -g fake_tide_right_prompt_separator_diff_color '' - _tide_display_prompt - - _tide_menu - switch $_tide_selected_option - case 1 - set -g fake_tide_left_prompt_separator_diff_color  - set -g fake_tide_right_prompt_separator_diff_color  - case 2 - set -g fake_tide_left_prompt_separator_diff_color '' - set -g fake_tide_right_prompt_separator_diff_color '' - case 3 - set -g fake_tide_left_prompt_separator_diff_color '' - set -g fake_tide_right_prompt_separator_diff_color '' - case 4 - set -g fake_tide_left_prompt_separator_diff_color '' - set -g fake_tide_right_prompt_separator_diff_color '' - end - _next_choice powerline/powerline_prompt_heads -end diff --git a/fish/functions/tide/configure/configs/classic.fish b/fish/functions/tide/configure/configs/classic.fish deleted file mode 100644 index 9b23f37..0000000 --- a/fish/functions/tide/configure/configs/classic.fish +++ /dev/null @@ -1,133 +0,0 @@ -tide_aws_bg_color 444444 -tide_aws_color FF9900 -tide_aws_icon  -tide_character_color $_tide_color_green -tide_character_color_failure FF0000 -tide_character_icon ❯ -tide_character_vi_icon_default ❮ -tide_character_vi_icon_replace ▶ -tide_character_vi_icon_visual V -tide_chruby_bg_color 444444 -tide_chruby_color B31209 -tide_chruby_icon  -tide_cmd_duration_bg_color 444444 -tide_cmd_duration_color 87875F -tide_cmd_duration_decimals 0 -tide_cmd_duration_icon -tide_cmd_duration_threshold 3000 -tide_context_always_display false -tide_context_bg_color 444444 -tide_context_color_default D7AF87 -tide_context_color_root $_tide_color_gold -tide_context_color_ssh D7AF87 -tide_context_hostname_parts 1 -tide_crystal_bg_color 444444 -tide_crystal_color FFFFFF -tide_crystal_icon ⬢ -tide_docker_bg_color 444444 -tide_docker_color 2496ED -tide_docker_default_contexts default colima -tide_docker_icon  -tide_git_bg_color 444444 -tide_git_bg_color_unstable 444444 -tide_git_bg_color_urgent 444444 -tide_git_color_branch $_tide_color_green -tide_git_color_conflicted FF0000 -tide_git_color_dirty $_tide_color_gold -tide_git_color_operation FF0000 -tide_git_color_staged $_tide_color_gold -tide_git_color_stash $_tide_color_green -tide_git_color_untracked $_tide_color_light_blue -tide_git_color_upstream $_tide_color_green -tide_git_icon -tide_git_truncation_length 24 -tide_go_bg_color 444444 -tide_go_color 00ACD7 -tide_go_icon  -tide_java_bg_color 444444 -tide_java_color ED8B00 -tide_java_icon  -tide_jobs_bg_color 444444 -tide_jobs_color $_tide_color_dark_green -tide_jobs_icon  -tide_kubectl_bg_color 444444 -tide_kubectl_color 326CE5 -tide_kubectl_icon ⎈ -tide_left_prompt_frame_enabled true -tide_left_prompt_items pwd git newline -tide_left_prompt_prefix '' -tide_left_prompt_separator_diff_color  -tide_left_prompt_separator_same_color  -tide_left_prompt_suffix  -tide_nix_shell_bg_color 444444 -tide_nix_shell_color 7EBAE4 -tide_nix_shell_icon  -tide_node_bg_color 444444 -tide_node_color 44883E -tide_node_icon ⬢ -tide_os_bg_color 444444 -tide_os_color EEEEEE -tide_os_icon $os_branding_icon -tide_php_bg_color 444444 -tide_php_color 617CBE -tide_php_icon  -tide_private_mode_bg_color 444444 -tide_private_mode_color FFFFFF -tide_private_mode_icon 﫸 -tide_prompt_add_newline_before true -tide_prompt_color_frame_and_connection 6C6C6C -tide_prompt_color_separator_same_color 949494 -tide_prompt_icon_connection ' ' -tide_prompt_min_cols 34 -tide_prompt_pad_items true -tide_pwd_bg_color 444444 -tide_pwd_color_anchors $_tide_color_light_blue -tide_pwd_color_dirs $_tide_color_dark_blue -tide_pwd_color_truncated_dirs 8787AF -tide_pwd_icon -tide_pwd_icon_home -tide_pwd_icon_unwritable  -tide_pwd_markers .bzr .citc .git .hg .node-version .python-version .ruby-version .shorten_folder_marker .svn .terraform Cargo.toml composer.json CVS go.mod package.json -tide_right_prompt_frame_enabled true -tide_right_prompt_items status cmd_duration context jobs node virtual_env rustc java php chruby go kubectl toolbox terraform aws nix_shell crystal -tide_right_prompt_prefix  -tide_right_prompt_separator_diff_color  -tide_right_prompt_separator_same_color  -tide_right_prompt_suffix '' -tide_rustc_bg_color 444444 -tide_rustc_color F74C00 -tide_rustc_icon  -tide_shlvl_bg_color 444444 -tide_shlvl_color d78700 -tide_shlvl_icon  -tide_shlvl_threshold 1 -tide_status_bg_color 444444 -tide_status_bg_color_failure 444444 -tide_status_color $_tide_color_dark_green -tide_status_color_failure D70000 -tide_status_icon ✔ -tide_status_icon_failure ✘ -tide_terraform_bg_color 444444 -tide_terraform_color 844FBA -tide_terraform_icon -tide_time_bg_color 444444 -tide_time_color 5F8787 -tide_time_format %T -tide_toolbox_bg_color 444444 -tide_toolbox_color 613583 -tide_toolbox_icon ⬢ -tide_vi_mode_bg_color_default 444444 -tide_vi_mode_bg_color_insert 444444 -tide_vi_mode_bg_color_replace 444444 -tide_vi_mode_bg_color_visual 444444 -tide_vi_mode_color_default 949494 -tide_vi_mode_color_insert 87AFAF -tide_vi_mode_color_replace 87AF87 -tide_vi_mode_color_visual FF8700 -tide_vi_mode_icon_default D -tide_vi_mode_icon_insert I -tide_vi_mode_icon_replace R -tide_vi_mode_icon_visual V -tide_virtual_env_bg_color 444444 -tide_virtual_env_color 00AFAF -tide_virtual_env_icon  diff --git a/fish/functions/tide/configure/configs/classic_16color.fish b/fish/functions/tide/configure/configs/classic_16color.fish deleted file mode 100644 index acdc411..0000000 --- a/fish/functions/tide/configure/configs/classic_16color.fish +++ /dev/null @@ -1,75 +0,0 @@ -tide_aws_bg_color black -tide_aws_color yellow -tide_character_color brgreen -tide_character_color_failure brred -tide_chruby_bg_color black -tide_chruby_color red -tide_cmd_duration_bg_color black -tide_cmd_duration_color brblack -tide_context_bg_color black -tide_context_color_default yellow -tide_context_color_root bryellow -tide_context_color_ssh yellow -tide_crystal_bg_color black -tide_crystal_color brwhite -tide_docker_bg_color black -tide_docker_color blue -tide_git_bg_color black -tide_git_bg_color_unstable black -tide_git_bg_color_urgent black -tide_git_color_branch brgreen -tide_git_color_conflicted brred -tide_git_color_dirty bryellow -tide_git_color_operation brred -tide_git_color_staged bryellow -tide_git_color_stash brgreen -tide_git_color_untracked brblue -tide_git_color_upstream brgreen -tide_go_bg_color black -tide_go_color brcyan -tide_java_bg_color black -tide_java_color yellow -tide_jobs_bg_color black -tide_jobs_color green -tide_kubectl_bg_color black -tide_kubectl_color blue -tide_nix_shell_bg_color black -tide_nix_shell_color brblue -tide_node_bg_color black -tide_node_color green -tide_os_bg_color black -tide_os_color brwhite -tide_php_bg_color black -tide_php_color blue -tide_private_mode_bg_color black -tide_private_mode_color brwhite -tide_prompt_color_frame_and_connection brblack -tide_prompt_color_separator_same_color brblack -tide_pwd_bg_color black -tide_pwd_color_anchors brcyan -tide_pwd_color_dirs cyan -tide_pwd_color_truncated_dirs magenta -tide_rustc_bg_color black -tide_rustc_color red -tide_shlvl_bg_color black -tide_shlvl_color yellow -tide_status_bg_color black -tide_status_bg_color_failure black -tide_status_color green -tide_status_color_failure red -tide_terraform_bg_color black -tide_terraform_color magenta -tide_time_bg_color black -tide_time_color brblack -tide_toolbox_bg_color black -tide_toolbox_color magenta -tide_vi_mode_bg_color_default black -tide_vi_mode_bg_color_insert black -tide_vi_mode_bg_color_replace black -tide_vi_mode_bg_color_visual black -tide_vi_mode_color_default white -tide_vi_mode_color_insert cyan -tide_vi_mode_color_replace green -tide_vi_mode_color_visual yellow -tide_virtual_env_bg_color black -tide_virtual_env_color cyan diff --git a/fish/functions/tide/configure/configs/lean.fish b/fish/functions/tide/configure/configs/lean.fish deleted file mode 100644 index 2565e0a..0000000 --- a/fish/functions/tide/configure/configs/lean.fish +++ /dev/null @@ -1,133 +0,0 @@ -tide_aws_bg_color normal -tide_aws_color FF9900 -tide_aws_icon  -tide_character_color $_tide_color_green -tide_character_color_failure FF0000 -tide_character_icon ❯ -tide_character_vi_icon_default ❮ -tide_character_vi_icon_replace ▶ -tide_character_vi_icon_visual V -tide_chruby_bg_color normal -tide_chruby_color B31209 -tide_chruby_icon  -tide_cmd_duration_bg_color normal -tide_cmd_duration_color 87875F -tide_cmd_duration_decimals 0 -tide_cmd_duration_icon -tide_cmd_duration_threshold 3000 -tide_context_always_display false -tide_context_bg_color normal -tide_context_color_default D7AF87 -tide_context_color_root $_tide_color_gold -tide_context_color_ssh D7AF87 -tide_context_hostname_parts 1 -tide_crystal_bg_color normal -tide_crystal_color FFFFFF -tide_crystal_icon ⬢ -tide_docker_bg_color normal -tide_docker_color 2496ED -tide_docker_default_contexts default colima -tide_docker_icon  -tide_git_bg_color normal -tide_git_bg_color_unstable normal -tide_git_bg_color_urgent normal -tide_git_color_branch $_tide_color_green -tide_git_color_conflicted FF0000 -tide_git_color_dirty $_tide_color_gold -tide_git_color_operation FF0000 -tide_git_color_staged $_tide_color_gold -tide_git_color_stash $_tide_color_green -tide_git_color_untracked $_tide_color_light_blue -tide_git_color_upstream $_tide_color_green -tide_git_icon -tide_git_truncation_length 24 -tide_go_bg_color normal -tide_go_color 00ACD7 -tide_go_icon  -tide_java_bg_color normal -tide_java_color ED8B00 -tide_java_icon  -tide_jobs_bg_color normal -tide_jobs_color $_tide_color_dark_green -tide_jobs_icon  -tide_kubectl_bg_color normal -tide_kubectl_color 326CE5 -tide_kubectl_icon ⎈ -tide_left_prompt_frame_enabled false -tide_left_prompt_items pwd git newline character -tide_left_prompt_prefix '' -tide_left_prompt_separator_diff_color ' ' -tide_left_prompt_separator_same_color ' ' -tide_left_prompt_suffix ' ' -tide_nix_shell_bg_color normal -tide_nix_shell_color 7EBAE4 -tide_nix_shell_icon  -tide_node_bg_color normal -tide_node_color 44883E -tide_node_icon ⬢ -tide_os_bg_color normal -tide_os_color normal -tide_os_icon $os_branding_icon -tide_php_bg_color normal -tide_php_color 617CBE -tide_php_icon  -tide_private_mode_bg_color normal -tide_private_mode_color FFFFFF -tide_private_mode_icon 﫸 -tide_prompt_add_newline_before true -tide_prompt_color_frame_and_connection 6C6C6C -tide_prompt_color_separator_same_color 949494 -tide_prompt_icon_connection ' ' -tide_prompt_min_cols 34 -tide_prompt_pad_items false -tide_pwd_bg_color normal -tide_pwd_color_anchors $_tide_color_light_blue -tide_pwd_color_dirs $_tide_color_dark_blue -tide_pwd_color_truncated_dirs 8787AF -tide_pwd_icon -tide_pwd_icon_home -tide_pwd_icon_unwritable  -tide_pwd_markers .bzr .citc .git .hg .node-version .python-version .ruby-version .shorten_folder_marker .svn .terraform Cargo.toml composer.json CVS go.mod package.json -tide_right_prompt_frame_enabled false -tide_right_prompt_items status cmd_duration context jobs node virtual_env rustc java php chruby go kubectl toolbox terraform aws nix_shell crystal -tide_right_prompt_prefix ' ' -tide_right_prompt_separator_diff_color ' ' -tide_right_prompt_separator_same_color ' ' -tide_right_prompt_suffix '' -tide_rustc_bg_color normal -tide_rustc_color F74C00 -tide_rustc_icon  -tide_shlvl_bg_color normal -tide_shlvl_color d78700 -tide_shlvl_icon  -tide_shlvl_threshold 1 -tide_status_bg_color normal -tide_status_bg_color_failure normal -tide_status_color $_tide_color_dark_green -tide_status_color_failure D70000 -tide_status_icon ✔ -tide_status_icon_failure ✘ -tide_terraform_bg_color normal -tide_terraform_color 844FBA -tide_terraform_icon -tide_time_bg_color normal -tide_time_color 5F8787 -tide_time_format %T -tide_toolbox_bg_color normal -tide_toolbox_color 613583 -tide_toolbox_icon ⬢ -tide_vi_mode_bg_color_default normal -tide_vi_mode_bg_color_insert normal -tide_vi_mode_bg_color_replace normal -tide_vi_mode_bg_color_visual normal -tide_vi_mode_color_default 949494 -tide_vi_mode_color_insert 87AFAF -tide_vi_mode_color_replace 87AF87 -tide_vi_mode_color_visual FF8700 -tide_vi_mode_icon_default D -tide_vi_mode_icon_insert I -tide_vi_mode_icon_replace R -tide_vi_mode_icon_visual V -tide_virtual_env_bg_color normal -tide_virtual_env_color 00AFAF -tide_virtual_env_icon  diff --git a/fish/functions/tide/configure/configs/lean_16color.fish b/fish/functions/tide/configure/configs/lean_16color.fish deleted file mode 100644 index 49a8606..0000000 --- a/fish/functions/tide/configure/configs/lean_16color.fish +++ /dev/null @@ -1,75 +0,0 @@ -tide_aws_bg_color normal -tide_aws_color yellow -tide_character_color brgreen -tide_character_color_failure brred -tide_chruby_bg_color normal -tide_chruby_color red -tide_cmd_duration_bg_color normal -tide_cmd_duration_color brblack -tide_context_bg_color normal -tide_context_color_default yellow -tide_context_color_root bryellow -tide_context_color_ssh yellow -tide_crystal_bg_color normal -tide_crystal_color brwhite -tide_docker_bg_color normal -tide_docker_color blue -tide_git_bg_color normal -tide_git_bg_color_unstable normal -tide_git_bg_color_urgent normal -tide_git_color_branch brgreen -tide_git_color_conflicted brred -tide_git_color_dirty bryellow -tide_git_color_operation brred -tide_git_color_staged bryellow -tide_git_color_stash brgreen -tide_git_color_untracked brblue -tide_git_color_upstream brgreen -tide_go_bg_color normal -tide_go_color brcyan -tide_java_bg_color normal -tide_java_color yellow -tide_jobs_bg_color normal -tide_jobs_color green -tide_kubectl_bg_color normal -tide_kubectl_color blue -tide_nix_shell_bg_color normal -tide_nix_shell_color brblue -tide_node_bg_color normal -tide_node_color green -tide_os_bg_color normal -tide_os_color brwhite -tide_php_bg_color normal -tide_php_color blue -tide_private_mode_bg_color normal -tide_private_mode_color brwhite -tide_prompt_color_frame_and_connection brblack -tide_prompt_color_separator_same_color brblack -tide_pwd_bg_color normal -tide_pwd_color_anchors brcyan -tide_pwd_color_dirs cyan -tide_pwd_color_truncated_dirs magenta -tide_rustc_bg_color normal -tide_rustc_color red -tide_shlvl_bg_color normal -tide_shlvl_color yellow -tide_status_bg_color normal -tide_status_bg_color_failure normal -tide_status_color green -tide_status_color_failure red -tide_terraform_bg_color normal -tide_terraform_color magenta -tide_time_bg_color normal -tide_time_color brblack -tide_toolbox_bg_color normal -tide_toolbox_color magenta -tide_vi_mode_bg_color_default normal -tide_vi_mode_bg_color_insert normal -tide_vi_mode_bg_color_replace normal -tide_vi_mode_bg_color_visual normal -tide_vi_mode_color_default white -tide_vi_mode_color_insert cyan -tide_vi_mode_color_replace green -tide_vi_mode_color_visual yellow -tide_virtual_env_bg_color normal -tide_virtual_env_color cyan diff --git a/fish/functions/tide/configure/configs/rainbow.fish b/fish/functions/tide/configure/configs/rainbow.fish deleted file mode 100644 index 39ce7bb..0000000 --- a/fish/functions/tide/configure/configs/rainbow.fish +++ /dev/null @@ -1,133 +0,0 @@ -tide_aws_bg_color FF9900 -tide_aws_color 232F3E -tide_aws_icon  -tide_character_color $_tide_color_green -tide_character_color_failure FF0000 -tide_character_icon ❯ -tide_character_vi_icon_default ❮ -tide_character_vi_icon_replace ▶ -tide_character_vi_icon_visual V -tide_chruby_bg_color B31209 -tide_chruby_color 000000 -tide_chruby_icon  -tide_cmd_duration_bg_color C4A000 -tide_cmd_duration_color 000000 -tide_cmd_duration_decimals 0 -tide_cmd_duration_icon -tide_cmd_duration_threshold 3000 -tide_context_always_display false -tide_context_bg_color 444444 -tide_context_color_default D7AF87 -tide_context_color_root $_tide_color_gold -tide_context_color_ssh D7AF87 -tide_context_hostname_parts 1 -tide_crystal_bg_color FFFFFF -tide_crystal_color 000000 -tide_crystal_icon ⬢ -tide_docker_bg_color 2496ED -tide_docker_color 000000 -tide_docker_default_contexts default colima -tide_docker_icon  -tide_git_bg_color 4E9A06 -tide_git_bg_color_unstable C4A000 -tide_git_bg_color_urgent CC0000 -tide_git_color_branch 000000 -tide_git_color_conflicted 000000 -tide_git_color_dirty 000000 -tide_git_color_operation 000000 -tide_git_color_staged 000000 -tide_git_color_stash 000000 -tide_git_color_untracked 000000 -tide_git_color_upstream 000000 -tide_git_icon -tide_git_truncation_length 24 -tide_go_bg_color 00ACD7 -tide_go_color 000000 -tide_go_icon  -tide_java_bg_color ED8B00 -tide_java_color 000000 -tide_java_icon  -tide_jobs_bg_color 444444 -tide_jobs_color 4E9A06 -tide_jobs_icon  -tide_kubectl_bg_color 326CE5 -tide_kubectl_color 000000 -tide_kubectl_icon ⎈ -tide_left_prompt_frame_enabled true -tide_left_prompt_items pwd git newline -tide_left_prompt_prefix '' -tide_left_prompt_separator_diff_color  -tide_left_prompt_separator_same_color  -tide_left_prompt_suffix  -tide_nix_shell_bg_color 7EBAE4 -tide_nix_shell_color 000000 -tide_nix_shell_icon  -tide_node_bg_color 44883E -tide_node_color 000000 -tide_node_icon ⬢ -tide_os_bg_color $os_branding_bg_color -tide_os_color $os_branding_color -tide_os_icon $os_branding_icon -tide_php_bg_color 617CBE -tide_php_color 000000 -tide_php_icon  -tide_private_mode_bg_color F1F3F4 -tide_private_mode_color 000000 -tide_private_mode_icon 﫸 -tide_prompt_add_newline_before true -tide_prompt_color_frame_and_connection 6C6C6C -tide_prompt_color_separator_same_color 949494 -tide_prompt_icon_connection ' ' -tide_prompt_min_cols 34 -tide_prompt_pad_items true -tide_pwd_bg_color 3465A4 -tide_pwd_color_anchors E4E4E4 -tide_pwd_color_dirs E4E4E4 -tide_pwd_color_truncated_dirs BCBCBC -tide_pwd_icon -tide_pwd_icon_home -tide_pwd_icon_unwritable  -tide_pwd_markers .bzr .citc .git .hg .node-version .python-version .ruby-version .shorten_folder_marker .svn .terraform Cargo.toml composer.json CVS go.mod package.json -tide_right_prompt_frame_enabled true -tide_right_prompt_items status cmd_duration context jobs node virtual_env rustc java php chruby go kubectl toolbox terraform aws nix_shell crystal -tide_right_prompt_prefix  -tide_right_prompt_separator_diff_color  -tide_right_prompt_separator_same_color  -tide_right_prompt_suffix '' -tide_rustc_bg_color F74C00 -tide_rustc_color 000000 -tide_rustc_icon  -tide_shlvl_bg_color 808000 -tide_shlvl_color 000000 -tide_shlvl_icon  -tide_shlvl_threshold 1 -tide_status_bg_color 2E3436 -tide_status_bg_color_failure CC0000 -tide_status_color 4E9A06 -tide_status_color_failure FFFF00 -tide_status_icon ✔ -tide_status_icon_failure ✘ -tide_terraform_bg_color 800080 -tide_terraform_color 000000 -tide_terraform_icon -tide_time_bg_color D3D7CF -tide_time_color 000000 -tide_time_format %T -tide_toolbox_bg_color 613583 -tide_toolbox_color 000000 -tide_toolbox_icon ⬢ -tide_vi_mode_bg_color_default 949494 -tide_vi_mode_bg_color_insert 87AFAF -tide_vi_mode_bg_color_replace 87AF87 -tide_vi_mode_bg_color_visual FF8700 -tide_vi_mode_color_default 000000 -tide_vi_mode_color_insert 000000 -tide_vi_mode_color_replace 000000 -tide_vi_mode_color_visual 000000 -tide_vi_mode_icon_default D -tide_vi_mode_icon_insert I -tide_vi_mode_icon_replace R -tide_vi_mode_icon_visual V -tide_virtual_env_bg_color 444444 -tide_virtual_env_color 00AFAF -tide_virtual_env_icon  diff --git a/fish/functions/tide/configure/configs/rainbow_16color.fish b/fish/functions/tide/configure/configs/rainbow_16color.fish deleted file mode 100644 index c102e2f..0000000 --- a/fish/functions/tide/configure/configs/rainbow_16color.fish +++ /dev/null @@ -1,79 +0,0 @@ -tide_aws_bg_color yellow -tide_aws_color brblack -tide_character_color brgreen -tide_character_color_failure brred -tide_chruby_bg_color red -tide_chruby_color black -tide_cmd_duration_bg_color yellow -tide_cmd_duration_color black -tide_context_bg_color brblack -tide_context_color_default yellow -tide_context_color_root yellow -tide_context_color_ssh yellow -tide_crystal_bg_color brwhite -tide_crystal_color black -tide_docker_bg_color blue -tide_docker_color black -tide_git_bg_color green -tide_git_bg_color_unstable yellow -tide_git_bg_color_urgent red -tide_git_color_branch black -tide_git_color_conflicted black -tide_git_color_dirty black -tide_git_color_operation black -tide_git_color_staged black -tide_git_color_stash black -tide_git_color_untracked black -tide_git_color_upstream black -tide_go_bg_color brcyan -tide_go_color black -tide_java_bg_color yellow -tide_java_color black -tide_jobs_bg_color brblack -tide_jobs_color green -tide_kubectl_bg_color blue -tide_kubectl_color black -tide_nix_shell_bg_color brblue -tide_nix_shell_color black -tide_node_bg_color green -tide_node_color black -tide_os_bg_color white -tide_os_color black -tide_php_bg_color blue -tide_php_color black -tide_private_mode_bg_color brwhite -tide_private_mode_color black -tide_prompt_color_frame_and_connection brblack -tide_prompt_color_separator_same_color brblack -tide_pwd_bg_color blue -tide_pwd_color_anchors brwhite -tide_pwd_color_dirs brwhite -tide_pwd_color_truncated_dirs white -tide_rustc_bg_color red -tide_rustc_color black -tide_shlvl_bg_color yellow -tide_shlvl_color black -tide_status_bg_color black -tide_status_bg_color_failure red -tide_status_color green -tide_status_color_failure bryellow -tide_terraform_bg_color magenta -tide_terraform_color black -tide_time_bg_color white -tide_time_color black -tide_toolbox_bg_color magenta -tide_toolbox_color black -tide_vi_mode_bg_color_default white -tide_vi_mode_bg_color_insert cyan -tide_vi_mode_bg_color_replace green -tide_vi_mode_bg_color_visual yellow -tide_vi_mode_color_default black -tide_vi_mode_color_insert black -tide_vi_mode_color_replace black -tide_vi_mode_color_visual black -tide_vi_mode_icon_default D -tide_vi_mode_icon_insert I -tide_vi_mode_icon_replace R -tide_vi_mode_icon_visual V -tide_virtual_env_bg_color brblack -tide_virtual_env_color cyan diff --git a/fish/functions/tide/configure/functions/_fake_tide_cache_variables.fish b/fish/functions/tide/configure/functions/_fake_tide_cache_variables.fish deleted file mode 100644 index 4661ab1..0000000 --- a/fish/functions/tide/configure/functions/_fake_tide_cache_variables.fish +++ /dev/null @@ -1,41 +0,0 @@ -function _fake_tide_cache_variables - # pwd - set_color -o $fake_tide_pwd_color_anchors | read -gx _fake_tide_color_anchors - set -gx _fake_tide_color_truncated_dirs "$(set_color $fake_tide_pwd_color_truncated_dirs)" - set -gx _fake_tide_reset_to_color_dirs (set_color normal -b $fake_tide_pwd_bg_color; set_color $fake_tide_pwd_color_dirs) - - # git - contains git $fake_tide_left_prompt_items $fake_tide_right_prompt_items && - set -gx _fake_tide_location_color "$(set_color $fake_tide_git_color_branch)" - - # private_mode - if contains private_mode $fake_tide_left_prompt_items $fake_tide_right_prompt_items && test -n "$fish_private_mode" - set -gx _fake_tide_private_mode - else - set -e _fake_tide_private_mode - end - - # Same-color-separator color - set -gx _fake_tide_color_separator_same_color "$(set_color $fake_tide_prompt_color_separator_same_color)" - - # two line prompt - if contains newline $fake_tide_left_prompt_items - set_color $fake_tide_prompt_color_frame_and_connection -b normal | read -gx _fake_tide_prompt_and_frame_color - else - set -e _fake_tide_prompt_and_frame_color - end - - # newline before - if test "$fake_tide_prompt_add_newline_before" = true - set -g _fake_tide_add_newline '' - else - set -e _fake_tide_add_newline - end - - # item padding - if test "$fake_tide_prompt_pad_items" = true - set -gx _fake_tide_pad ' ' - else - set -e _fake_tide_pad - end -end diff --git a/fish/functions/tide/configure/functions/_fake_tide_item_character.fish b/fish/functions/tide/configure/functions/_fake_tide_item_character.fish deleted file mode 100644 index 73ae055..0000000 --- a/fish/functions/tide/configure/functions/_fake_tide_item_character.fish +++ /dev/null @@ -1,5 +0,0 @@ -function _fake_tide_item_character - set_color $fake_tide_character_color - contains newline $fake_tide_left_prompt_items || echo -ns ' ' - echo -ns $fake_tide_character_icon -end diff --git a/fish/functions/tide/configure/functions/_fake_tide_item_cmd_duration.fish b/fish/functions/tide/configure/functions/_fake_tide_item_cmd_duration.fish deleted file mode 100644 index 5aa13b2..0000000 --- a/fish/functions/tide/configure/functions/_fake_tide_item_cmd_duration.fish +++ /dev/null @@ -1,3 +0,0 @@ -function _fake_tide_item_cmd_duration - _fake_tide_print_item cmd_duration $fake_tide_cmd_duration_icon' ' 5s -end diff --git a/fish/functions/tide/configure/functions/_fake_tide_item_git.fish b/fish/functions/tide/configure/functions/_fake_tide_item_git.fish deleted file mode 100644 index fb5b957..0000000 --- a/fish/functions/tide/configure/functions/_fake_tide_item_git.fish +++ /dev/null @@ -1,3 +0,0 @@ -function _fake_tide_item_git - _fake_tide_print_item git (set_color $fake_tide_git_color_branch) $fake_tide_git_icon' ' main -end diff --git a/fish/functions/tide/configure/functions/_fake_tide_item_newline.fish b/fish/functions/tide/configure/functions/_fake_tide_item_newline.fish deleted file mode 100644 index c614bab..0000000 --- a/fish/functions/tide/configure/functions/_fake_tide_item_newline.fish +++ /dev/null @@ -1,5 +0,0 @@ -function _fake_tide_item_newline - set_color $prev_bg_color -b normal - var=fake_tide_"$_fake_tide_side"_prompt_suffix echo $$var - set -g add_prefix -end diff --git a/fish/functions/tide/configure/functions/_fake_tide_item_os.fish b/fish/functions/tide/configure/functions/_fake_tide_item_os.fish deleted file mode 100644 index 5255721..0000000 --- a/fish/functions/tide/configure/functions/_fake_tide_item_os.fish +++ /dev/null @@ -1,3 +0,0 @@ -function _fake_tide_item_os - _fake_tide_print_item os $fake_tide_os_icon -end diff --git a/fish/functions/tide/configure/functions/_fake_tide_item_time.fish b/fish/functions/tide/configure/functions/_fake_tide_item_time.fish deleted file mode 100644 index bbce0b5..0000000 --- a/fish/functions/tide/configure/functions/_fake_tide_item_time.fish +++ /dev/null @@ -1,3 +0,0 @@ -function _fake_tide_item_time - _fake_tide_print_item time (date +$fake_tide_time_format) -end diff --git a/fish/functions/tide/configure/functions/_fake_tide_print_item.fish b/fish/functions/tide/configure/functions/_fake_tide_print_item.fish deleted file mode 100644 index 30cd024..0000000 --- a/fish/functions/tide/configure/functions/_fake_tide_print_item.fish +++ /dev/null @@ -1,22 +0,0 @@ -function _fake_tide_print_item -a item - var=fake_tide_"$item"_bg_color set -f item_bg_color $$var - - if set -e add_prefix - set_color $item_bg_color -b normal - var=fake_tide_"$_fake_tide_side"_prompt_prefix echo -ns $$var - else if test "$item_bg_color" = "$prev_bg_color" - var=fake_tide_"$_fake_tide_side"_prompt_separator_same_color echo -ns $_fake_tide_color_separator_same_color$$var - else if test "$_fake_tide_side" = left - set_color $prev_bg_color -b $item_bg_color - echo -ns $fake_tide_left_prompt_separator_diff_color - else - set_color $item_bg_color -b $prev_bg_color - echo -ns $fake_tide_right_prompt_separator_diff_color - end - - var=fake_tide_"$item"_color set_color $$var -b $item_bg_color - - echo -ns $_fake_tide_pad $argv[2..] $_fake_tide_pad - - set -g prev_bg_color $item_bg_color -end diff --git a/fish/functions/tide/configure/functions/_fake_tide_prompt.fish b/fish/functions/tide/configure/functions/_fake_tide_prompt.fish deleted file mode 100644 index 11f20ca..0000000 --- a/fish/functions/tide/configure/functions/_fake_tide_prompt.fish +++ /dev/null @@ -1,42 +0,0 @@ -function _fake_tide_prompt - set -g add_prefix - _fake_tide_side=left set -f left (for item in $fake_tide_left_prompt_items - _fake_tide_item_$item - end - if not set -e add_prefix - set_color $prev_bg_color -b normal - echo -ns $fake_tide_left_prompt_suffix - end) - - set -g add_prefix - _fake_tide_side=right set -f right (for item in $fake_tide_right_prompt_items - _fake_tide_item_$item - end - if not set -e add_prefix - set_color $prev_bg_color -b normal - echo -ns $fake_tide_right_prompt_suffix - end) - - if set -q _fake_tide_prompt_and_frame_color # If prompt is two lines - test "$fake_tide_left_prompt_frame_enabled" = true && - set left[1] "$_fake_tide_prompt_and_frame_color╭─$left[1]" && - set left[2] "$_fake_tide_prompt_and_frame_color╰─$left[2]" - test "$fake_tide_right_prompt_frame_enabled" = true && - set right[1] "$right[1]$_fake_tide_prompt_and_frame_color─╮" && - set right[2] "$right[2]$_fake_tide_prompt_and_frame_color─╯" - - # 5 = @PWD@ length which will be replaced - math $fake_columns+5-(string length --visible "$left[1]$right[1]") | read -lx dist_btwn_sides - echo -ns "$right[2]"\n(string replace @PWD@ (_fake_tide_pwd) "$left[1]")$_fake_tide_prompt_and_frame_color - - string repeat --no-newline --max (math max 0, $dist_btwn_sides-$_tide_pwd_len) $fake_tide_prompt_icon_connection - echo -ns "$right[1]"\n"$left[2] " - else - math $fake_columns+5-(string length --visible "$left[1]$right[1]") -$fake_tide_prompt_min_cols | read -lx dist_btwn_sides - string replace @PWD@ (_fake_tide_pwd) "$right[1]" "$left[1] " - end -end - -function _fake_tide_item_pwd - _fake_tide_print_item pwd @PWD@ -end diff --git a/fish/functions/tide/configure/functions/_fake_tide_pwd.fish b/fish/functions/tide/configure/functions/_fake_tide_pwd.fish deleted file mode 100644 index 433eafa..0000000 --- a/fish/functions/tide/configure/functions/_fake_tide_pwd.fish +++ /dev/null @@ -1,11 +0,0 @@ -function _fake_tide_pwd - set -l out ( - set_color $fake_tide_pwd_color_dirs - echo -ns $fake_tide_pwd_icon' ' '~/' - set_color -o $fake_tide_pwd_color_anchors - echo -ns src - set_color normal -b $fake_tide_pwd_bg_color - ) - set -g _tide_pwd_len (string length --visible $out) - echo -ns $out -end diff --git a/fish/themes/tokyonight_night.theme b/fish/themes/tokyonight_night.theme deleted file mode 100644 index 2c33869..0000000 --- a/fish/themes/tokyonight_night.theme +++ /dev/null @@ -1,25 +0,0 @@ - - # TokyoNight - - # Syntax Highlighting Colors - fish_color_normal c0caf5 - fish_color_command 7dcfff - fish_color_keyword bb9af7 - fish_color_quote e0af68 - fish_color_redirection c0caf5 - fish_color_end ff9e64 - fish_color_error f7768e - fish_color_param 9d7cd8 - fish_color_comment 565f89 - fish_color_selection --background=33467c - fish_color_search_match --background=33467c - fish_color_operator 9ece6a - fish_color_escape bb9af7 - fish_color_autosuggestion 565f89 - - # Completion Pager Colors - fish_pager_color_progress 565f89 - fish_pager_color_prefix 7dcfff - fish_pager_color_completion c0caf5 - fish_pager_color_description 565f89 - fish_pager_color_selected_background --background=33467c diff --git a/fish/tokyonight_night.fish b/fish/tokyonight_night.fish deleted file mode 100644 index f79979f..0000000 --- a/fish/tokyonight_night.fish +++ /dev/null @@ -1,34 +0,0 @@ - # TokyoNight Color Palette - set -l foreground c0caf5 - set -l selection 33467c - set -l comment 565f89 - set -l red f7768e - set -l orange ff9e64 - set -l yellow e0af68 - set -l green 9ece6a - set -l purple 9d7cd8 - set -l cyan 7dcfff - set -l pink bb9af7 - - # Syntax Highlighting Colors - set -g fish_color_normal $foreground - set -g fish_color_command $cyan - set -g fish_color_keyword $pink - set -g fish_color_quote $yellow - set -g fish_color_redirection $foreground - set -g fish_color_end $orange - set -g fish_color_error $red - set -g fish_color_param $purple - set -g fish_color_comment $comment - set -g fish_color_selection --background=$selection - set -g fish_color_search_match --background=$selection - set -g fish_color_operator $green - set -g fish_color_escape $pink - set -g fish_color_autosuggestion $comment - - # Completion Pager Colors - set -g fish_pager_color_progress $comment - set -g fish_pager_color_prefix $cyan - set -g fish_pager_color_completion $foreground - set -g fish_pager_color_description $comment - set -g fish_pager_color_selected_background --background=$selection 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-3.0/bookmarks b/gtk-3.0/bookmarks deleted file mode 100644 index 0b15c6d..0000000 --- a/gtk-3.0/bookmarks +++ /dev/null @@ -1,6 +0,0 @@ -file:///home/dashie/Pictures -file:///home/dashie/Documents -file:///home/dashie/Downloads -file:///home/dashie/gits -file:///home/dashie/gits/ost-4semester -file:///home/dashie/gits/ost-3semester diff --git a/gtk-3.0/gtk.css b/gtk-3.0/gtk.css deleted file mode 100644 index 6f0341d..0000000 --- a/gtk-3.0/gtk.css +++ /dev/null @@ -1,78 +0,0 @@ -@define-color accent_color #a9b1d6; -@define-color accent_bg_color #a9b1d6; -@define-color accent_fg_color rgba(0, 0, 0, 0.87); -@define-color destructive_color #F28B82; -@define-color destructive_bg_color #F28B82; -@define-color destructive_fg_color rgba(0, 0, 0, 0.87); -@define-color success_color #81C995; -@define-color success_bg_color #81C995; -@define-color success_fg_color rgba(0, 0, 0, 0.87); -@define-color warning_color #FDD633; -@define-color warning_bg_color #FDD633; -@define-color warning_fg_color rgba(0, 0, 0, 0.87); -@define-color error_color #F28B82; -@define-color error_bg_color #F28B82; -@define-color error_fg_color rgba(0, 0, 0, 0.87); -@define-color window_bg_color #1a1b26; -@define-color window_fg_color #c0caf5; -@define-color view_bg_color #1a1b26; -@define-color view_fg_color #c0caf5; -@define-color headerbar_bg_color #1a1b26; -@define-color headerbar_fg_color #c0caf5; -@define-color headerbar_border_color rgba(192, 202, 245, 0.12); -@define-color headerbar_backdrop_color @window_bg_color; -@define-color headerbar_shade_color rgba(0, 0, 0, 0.36); -@define-color card_bg_color #1a1b26; -@define-color card_fg_color #c0caf5; -@define-color card_shade_color rgba(0, 0, 0, 0.36); -@define-color dialog_bg_color #1a1b26; -@define-color dialog_fg_color #c0caf5; -@define-color popover_bg_color #1a1b26; -@define-color popover_fg_color #c0caf5; -@define-color shade_color rgba(0, 0, 0, 0.36); -@define-color scrollbar_outline_color rgba(0, 0, 0, 0.5); -@define-color blue_1 #99c1f1; -@define-color blue_2 #62a0ea; -@define-color blue_3 #3584e4; -@define-color blue_4 #1c71d8; -@define-color blue_5 #1a5fb4; -@define-color green_1 #8ff0a4; -@define-color green_2 #57e389; -@define-color green_3 #33d17a; -@define-color green_4 #2ec27e; -@define-color green_5 #26a269; -@define-color yellow_1 #f9f06b; -@define-color yellow_2 #f8e45c; -@define-color yellow_3 #f6d32d; -@define-color yellow_4 #f5c211; -@define-color yellow_5 #e5a50a; -@define-color orange_1 #ffbe6f; -@define-color orange_2 #ffa348; -@define-color orange_3 #ff7800; -@define-color orange_4 #e66100; -@define-color orange_5 #c64600; -@define-color red_1 #f66151; -@define-color red_2 #ed333b; -@define-color red_3 #e01b24; -@define-color red_4 #c01c28; -@define-color red_5 #a51d2d; -@define-color purple_1 #dc8add; -@define-color purple_2 #c061cb; -@define-color purple_3 #9141ac; -@define-color purple_4 #813d9c; -@define-color purple_5 #613583; -@define-color brown_1 #cdab8f; -@define-color brown_2 #b5835a; -@define-color brown_3 #986a44; -@define-color brown_4 #865e3c; -@define-color brown_5 #63452c; -@define-color light_1 #ffffff; -@define-color light_2 #f6f5f4; -@define-color light_3 #deddda; -@define-color light_4 #c0bfbc; -@define-color light_5 #9a9996; -@define-color dark_1 #77767b; -@define-color dark_2 #5e5c64; -@define-color dark_3 #3d3846; -@define-color dark_4 #241f31; -@define-color dark_5 #000000; diff --git a/gtk-3.0/gtk.css.bak b/gtk-3.0/gtk.css.bak deleted file mode 100644 index 6f0341d..0000000 --- a/gtk-3.0/gtk.css.bak +++ /dev/null @@ -1,78 +0,0 @@ -@define-color accent_color #a9b1d6; -@define-color accent_bg_color #a9b1d6; -@define-color accent_fg_color rgba(0, 0, 0, 0.87); -@define-color destructive_color #F28B82; -@define-color destructive_bg_color #F28B82; -@define-color destructive_fg_color rgba(0, 0, 0, 0.87); -@define-color success_color #81C995; -@define-color success_bg_color #81C995; -@define-color success_fg_color rgba(0, 0, 0, 0.87); -@define-color warning_color #FDD633; -@define-color warning_bg_color #FDD633; -@define-color warning_fg_color rgba(0, 0, 0, 0.87); -@define-color error_color #F28B82; -@define-color error_bg_color #F28B82; -@define-color error_fg_color rgba(0, 0, 0, 0.87); -@define-color window_bg_color #1a1b26; -@define-color window_fg_color #c0caf5; -@define-color view_bg_color #1a1b26; -@define-color view_fg_color #c0caf5; -@define-color headerbar_bg_color #1a1b26; -@define-color headerbar_fg_color #c0caf5; -@define-color headerbar_border_color rgba(192, 202, 245, 0.12); -@define-color headerbar_backdrop_color @window_bg_color; -@define-color headerbar_shade_color rgba(0, 0, 0, 0.36); -@define-color card_bg_color #1a1b26; -@define-color card_fg_color #c0caf5; -@define-color card_shade_color rgba(0, 0, 0, 0.36); -@define-color dialog_bg_color #1a1b26; -@define-color dialog_fg_color #c0caf5; -@define-color popover_bg_color #1a1b26; -@define-color popover_fg_color #c0caf5; -@define-color shade_color rgba(0, 0, 0, 0.36); -@define-color scrollbar_outline_color rgba(0, 0, 0, 0.5); -@define-color blue_1 #99c1f1; -@define-color blue_2 #62a0ea; -@define-color blue_3 #3584e4; -@define-color blue_4 #1c71d8; -@define-color blue_5 #1a5fb4; -@define-color green_1 #8ff0a4; -@define-color green_2 #57e389; -@define-color green_3 #33d17a; -@define-color green_4 #2ec27e; -@define-color green_5 #26a269; -@define-color yellow_1 #f9f06b; -@define-color yellow_2 #f8e45c; -@define-color yellow_3 #f6d32d; -@define-color yellow_4 #f5c211; -@define-color yellow_5 #e5a50a; -@define-color orange_1 #ffbe6f; -@define-color orange_2 #ffa348; -@define-color orange_3 #ff7800; -@define-color orange_4 #e66100; -@define-color orange_5 #c64600; -@define-color red_1 #f66151; -@define-color red_2 #ed333b; -@define-color red_3 #e01b24; -@define-color red_4 #c01c28; -@define-color red_5 #a51d2d; -@define-color purple_1 #dc8add; -@define-color purple_2 #c061cb; -@define-color purple_3 #9141ac; -@define-color purple_4 #813d9c; -@define-color purple_5 #613583; -@define-color brown_1 #cdab8f; -@define-color brown_2 #b5835a; -@define-color brown_3 #986a44; -@define-color brown_4 #865e3c; -@define-color brown_5 #63452c; -@define-color light_1 #ffffff; -@define-color light_2 #f6f5f4; -@define-color light_3 #deddda; -@define-color light_4 #c0bfbc; -@define-color light_5 #9a9996; -@define-color dark_1 #77767b; -@define-color dark_2 #5e5c64; -@define-color dark_3 #3d3846; -@define-color dark_4 #241f31; -@define-color dark_5 #000000; diff --git a/gtk-3.0/settings.ini b/gtk-3.0/settings.ini deleted file mode 100644 index efb1803..0000000 --- a/gtk-3.0/settings.ini +++ /dev/null @@ -1 +0,0 @@ -gtk-icon-theme-name = Papirus diff --git a/gtk-4.0/gtk.css b/gtk-4.0/gtk.css deleted file mode 100644 index 6f0341d..0000000 --- a/gtk-4.0/gtk.css +++ /dev/null @@ -1,78 +0,0 @@ -@define-color accent_color #a9b1d6; -@define-color accent_bg_color #a9b1d6; -@define-color accent_fg_color rgba(0, 0, 0, 0.87); -@define-color destructive_color #F28B82; -@define-color destructive_bg_color #F28B82; -@define-color destructive_fg_color rgba(0, 0, 0, 0.87); -@define-color success_color #81C995; -@define-color success_bg_color #81C995; -@define-color success_fg_color rgba(0, 0, 0, 0.87); -@define-color warning_color #FDD633; -@define-color warning_bg_color #FDD633; -@define-color warning_fg_color rgba(0, 0, 0, 0.87); -@define-color error_color #F28B82; -@define-color error_bg_color #F28B82; -@define-color error_fg_color rgba(0, 0, 0, 0.87); -@define-color window_bg_color #1a1b26; -@define-color window_fg_color #c0caf5; -@define-color view_bg_color #1a1b26; -@define-color view_fg_color #c0caf5; -@define-color headerbar_bg_color #1a1b26; -@define-color headerbar_fg_color #c0caf5; -@define-color headerbar_border_color rgba(192, 202, 245, 0.12); -@define-color headerbar_backdrop_color @window_bg_color; -@define-color headerbar_shade_color rgba(0, 0, 0, 0.36); -@define-color card_bg_color #1a1b26; -@define-color card_fg_color #c0caf5; -@define-color card_shade_color rgba(0, 0, 0, 0.36); -@define-color dialog_bg_color #1a1b26; -@define-color dialog_fg_color #c0caf5; -@define-color popover_bg_color #1a1b26; -@define-color popover_fg_color #c0caf5; -@define-color shade_color rgba(0, 0, 0, 0.36); -@define-color scrollbar_outline_color rgba(0, 0, 0, 0.5); -@define-color blue_1 #99c1f1; -@define-color blue_2 #62a0ea; -@define-color blue_3 #3584e4; -@define-color blue_4 #1c71d8; -@define-color blue_5 #1a5fb4; -@define-color green_1 #8ff0a4; -@define-color green_2 #57e389; -@define-color green_3 #33d17a; -@define-color green_4 #2ec27e; -@define-color green_5 #26a269; -@define-color yellow_1 #f9f06b; -@define-color yellow_2 #f8e45c; -@define-color yellow_3 #f6d32d; -@define-color yellow_4 #f5c211; -@define-color yellow_5 #e5a50a; -@define-color orange_1 #ffbe6f; -@define-color orange_2 #ffa348; -@define-color orange_3 #ff7800; -@define-color orange_4 #e66100; -@define-color orange_5 #c64600; -@define-color red_1 #f66151; -@define-color red_2 #ed333b; -@define-color red_3 #e01b24; -@define-color red_4 #c01c28; -@define-color red_5 #a51d2d; -@define-color purple_1 #dc8add; -@define-color purple_2 #c061cb; -@define-color purple_3 #9141ac; -@define-color purple_4 #813d9c; -@define-color purple_5 #613583; -@define-color brown_1 #cdab8f; -@define-color brown_2 #b5835a; -@define-color brown_3 #986a44; -@define-color brown_4 #865e3c; -@define-color brown_5 #63452c; -@define-color light_1 #ffffff; -@define-color light_2 #f6f5f4; -@define-color light_3 #deddda; -@define-color light_4 #c0bfbc; -@define-color light_5 #9a9996; -@define-color dark_1 #77767b; -@define-color dark_2 #5e5c64; -@define-color dark_3 #3d3846; -@define-color dark_4 #241f31; -@define-color dark_5 #000000; diff --git a/gtk-4.0/gtk.css.bak b/gtk-4.0/gtk.css.bak deleted file mode 100644 index 6f0341d..0000000 --- a/gtk-4.0/gtk.css.bak +++ /dev/null @@ -1,78 +0,0 @@ -@define-color accent_color #a9b1d6; -@define-color accent_bg_color #a9b1d6; -@define-color accent_fg_color rgba(0, 0, 0, 0.87); -@define-color destructive_color #F28B82; -@define-color destructive_bg_color #F28B82; -@define-color destructive_fg_color rgba(0, 0, 0, 0.87); -@define-color success_color #81C995; -@define-color success_bg_color #81C995; -@define-color success_fg_color rgba(0, 0, 0, 0.87); -@define-color warning_color #FDD633; -@define-color warning_bg_color #FDD633; -@define-color warning_fg_color rgba(0, 0, 0, 0.87); -@define-color error_color #F28B82; -@define-color error_bg_color #F28B82; -@define-color error_fg_color rgba(0, 0, 0, 0.87); -@define-color window_bg_color #1a1b26; -@define-color window_fg_color #c0caf5; -@define-color view_bg_color #1a1b26; -@define-color view_fg_color #c0caf5; -@define-color headerbar_bg_color #1a1b26; -@define-color headerbar_fg_color #c0caf5; -@define-color headerbar_border_color rgba(192, 202, 245, 0.12); -@define-color headerbar_backdrop_color @window_bg_color; -@define-color headerbar_shade_color rgba(0, 0, 0, 0.36); -@define-color card_bg_color #1a1b26; -@define-color card_fg_color #c0caf5; -@define-color card_shade_color rgba(0, 0, 0, 0.36); -@define-color dialog_bg_color #1a1b26; -@define-color dialog_fg_color #c0caf5; -@define-color popover_bg_color #1a1b26; -@define-color popover_fg_color #c0caf5; -@define-color shade_color rgba(0, 0, 0, 0.36); -@define-color scrollbar_outline_color rgba(0, 0, 0, 0.5); -@define-color blue_1 #99c1f1; -@define-color blue_2 #62a0ea; -@define-color blue_3 #3584e4; -@define-color blue_4 #1c71d8; -@define-color blue_5 #1a5fb4; -@define-color green_1 #8ff0a4; -@define-color green_2 #57e389; -@define-color green_3 #33d17a; -@define-color green_4 #2ec27e; -@define-color green_5 #26a269; -@define-color yellow_1 #f9f06b; -@define-color yellow_2 #f8e45c; -@define-color yellow_3 #f6d32d; -@define-color yellow_4 #f5c211; -@define-color yellow_5 #e5a50a; -@define-color orange_1 #ffbe6f; -@define-color orange_2 #ffa348; -@define-color orange_3 #ff7800; -@define-color orange_4 #e66100; -@define-color orange_5 #c64600; -@define-color red_1 #f66151; -@define-color red_2 #ed333b; -@define-color red_3 #e01b24; -@define-color red_4 #c01c28; -@define-color red_5 #a51d2d; -@define-color purple_1 #dc8add; -@define-color purple_2 #c061cb; -@define-color purple_3 #9141ac; -@define-color purple_4 #813d9c; -@define-color purple_5 #613583; -@define-color brown_1 #cdab8f; -@define-color brown_2 #b5835a; -@define-color brown_3 #986a44; -@define-color brown_4 #865e3c; -@define-color brown_5 #63452c; -@define-color light_1 #ffffff; -@define-color light_2 #f6f5f4; -@define-color light_3 #deddda; -@define-color light_4 #c0bfbc; -@define-color light_5 #9a9996; -@define-color dark_1 #77767b; -@define-color dark_2 #5e5c64; -@define-color dark_3 #3d3846; -@define-color dark_4 #241f31; -@define-color dark_5 #000000; diff --git a/gtk-4.0/servers b/gtk-4.0/servers deleted file mode 100644 index 45a22c7..0000000 --- a/gtk-4.0/servers +++ /dev/null @@ -1,16 +0,0 @@ - - - - Windows shares on 192.168.1.4 - - - - - - - - - \ No newline at end of file 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 e9cb021..0000000 --- a/hypr_desktop/hyprland.conf +++ /dev/null @@ -1,210 +0,0 @@ - -# -#fix the fucking portal -exec-once=systemctl --user import-environment -exec-once=dbus-update-activation-environment --all -# -# - -monitor=DP-3,2560x1440@165,0x0,1 -monitor=DP-1,3440x1440@180,2560x0,1 -monitor=DP-2,1920x1200@60,6000x0,1 -monitor=DP-2,transform,1 - -monitor=,highrr,auto,1 - -workspace=DP-3,1 -workspace=DP-1,2 -workspace=DP-2,3 - -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,5,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 { - - vfr=true - vrr = 1 - # animate_manual_resizes=1 - # 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=float,^(.*)(copyq)(.*)$ -windowrule=center,^(.*)(gnome)(.*)$ -# windowrule=windowdance,^(.*)(ota)(.*)$ -windowrule=forceinput,^(.*)(ota)(.*)$ -windowrule=size 1200 800,^(org.gnome.NautilusPreviewer)$ -windowrule=center,^(.*)(swappy)(.*)$ -windowrule=opacity 80,^(.*)(dunst)(.*)$ -windowrule=float,title:^(.*)(Spirit)(.*)$ -#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-4semester/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,rofi -show drun -theme tokyonight -bind=SUPERSHIFT,R,exec,rofi -show run -theme tokyonight -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 -bind=SUPER,A,exec,copyq 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 - -bind=SUPERSHIFTALT,1,movetoworkspacesilent,1 -bind=SUPERSHIFTALT,2,movetoworkspacesilent,2 -bind=SUPERSHIFTALT,3,movetoworkspacesilent,3 -bind=SUPERSHIFTALT,4,movetoworkspacesilent,4 -bind=SUPERSHIFTALT,5,movetoworkspacesilent,5 -bind=SUPERSHIFTALT,6,movetoworkspacesilent,6 -bind=SUPERSHIFTALT,7,movetoworkspacesilent,7 -bind=SUPERSHIFTALT,8,movetoworkspacesilent,8 -bind=SUPERSHIFTALT,9,movetoworkspacesilent,9 -bind=SUPERSHIFTALT,0,movetoworkspacesilent,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)$ -bind=CTRLALT,P,pass,^(parcellite)$ - - -#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 -exec-once = copyq --start-server diff --git a/hypr_desktop/hyprlandd.conf b/hypr_desktop/hyprlandd.conf deleted file mode 100644 index eaef5ca..0000000 --- a/hypr_desktop/hyprlandd.conf +++ /dev/null @@ -1,66 +0,0 @@ - - -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 - - gaps_in=5 - gaps_out=10 - border_size=3 - col.active_border=0x66ee1111 - col.inactive_border=0x66333333 - - apply_sens_to_raw=0 - -} - -decoration { - rounding=10 - blur=1 - blur_size=3 - blur_passes=1 - blur_new_optimizations=true -} - -animations { - enabled=1 -} - -dwindle { - preserve_split=true - pseudotile=0 -} - -gestures { -} - -misc { - animate_manual_resizes = 1 - } - -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 - -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_desktop/hyprpaper.conf b/hypr_desktop/hyprpaper.conf deleted file mode 100644 index 2137dc8..0000000 --- a/hypr_desktop/hyprpaper.conf +++ /dev/null @@ -1,8 +0,0 @@ - -# wallpaper -preload = /home/dashie/Pictures/backgrounds/arch-chan2.jpg -preload = /home/dashie/Pictures/backgrounds/Arch_chan.png -preload = /home/dashie/Pictures/backgrounds/arch-chan3-2560.png -wallpaper = DP-2,/home/dashie/Pictures/backgrounds/arch-chan2.jpg -wallpaper = DP-1,/home/dashie/Pictures/backgrounds/Arch_chan.png -wallpaper = DP-3,/home/dashie/Pictures/backgrounds/arch-chan3-2560.png diff --git a/hypr_laptop/hyprland.conf b/hypr_laptop/hyprland.conf deleted file mode 100644 index f06a7fb..0000000 --- a/hypr_laptop/hyprland.conf +++ /dev/null @@ -1,188 +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 - repeat_rate=35 - 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=0 - blur_size=3 # minimum 1 - blur_passes=1 # minimum 1 - blur_new_optimizations=true -} -animations { - enabled=1 - animation=windowsMove,1,5,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 { - vfr=true - vrr=1 - # enable_swallow=true - # swallow_regex=^(.*)(kitty)(.*)$ - } - -# 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=float,^(.*)(copyq)(.*)$ -windowrule=dimaround,^(.*)(onagre)(.*)$ -windowrule=noborder,^(.*)(onagre)(.*)$ -#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,kitty -bind=SUPER,Q,killactive, -bind=SUPER,M,exit, -bind=SUPER,E,exec,nautilus --new-window -bind=SUPER,V,togglefloating, -bind=SUPER,R,exec,rofi -show drun -theme tokyonight -bind=SUPERSHIFT,R,exec,rofi -show run -theme tokyonight -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-4semester/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=SUPER,A,exec,copyq toggle -# 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=SUPERSHIFTALT,1,movetoworkspacesilent,1 -bind=SUPERSHIFTALT,2,movetoworkspacesilent,2 -bind=SUPERSHIFTALT,3,movetoworkspacesilent,3 -bind=SUPERSHIFTALT,4,movetoworkspacesilent,4 -bind=SUPERSHIFTALT,5,movetoworkspacesilent,5 -bind=SUPERSHIFTALT,6,movetoworkspacesilent,6 -bind=SUPERSHIFTALT,7,movetoworkspacesilent,7 -bind=SUPERSHIFTALT,8,movetoworkspacesilent,8 -bind=SUPERSHIFTALT,9,movetoworkspacesilent,9 -bind=SUPERSHIFTALT,0,movetoworkspacesilent,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=kitty -e ncspot -exec-once = copyq --start-server diff --git a/hypr_laptop/hyprlandd.conf b/hypr_laptop/hyprlandd.conf deleted file mode 100644 index 1bbaaa7..0000000 --- a/hypr_laptop/hyprlandd.conf +++ /dev/null @@ -1,128 +0,0 @@ -monitor=,1920x1080@144,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 { - bezier=test,0.5,0.5,0.5,0.5 - enabled=1 - animation=windowsMove,1,1,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 { - animate_manual_resizes=true - animate_mouse_windowdragging=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 199e59a..0000000 --- a/hypr_laptop/hyprpaper.conf +++ /dev/null @@ -1,5 +0,0 @@ - -# wallpaper -preload = /home/dashie/Pictures/backgrounds/arch-chan3-1920.png -wallpaper = eDP-1,/home/dashie/Pictures/backgrounds/arch-chan3-1920.png -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/joshuto/joshuto.toml b/joshuto/joshuto.toml deleted file mode 100644 index 160e4a8..0000000 --- a/joshuto/joshuto.toml +++ /dev/null @@ -1,5 +0,0 @@ -xdg_open = true -[preview] -max_preview_size = 50000097152 -preview_shown_hook_script = "~/.config/joshuto/on_preview_shown" -preview_removed_hook_script = "~/.config/joshuto/on_preview_removed" diff --git a/joshuto/on_preview_removed.sh b/joshuto/on_preview_removed.sh deleted file mode 100755 index bd66564..0000000 --- a/joshuto/on_preview_removed.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/usr/bin/env bash - -kitty +kitten icat \ - --transfer-mode=file \ - --clear 2>/dev/null diff --git a/joshuto/on_preview_shown b/joshuto/on_preview_shown deleted file mode 100755 index c1f6a9d..0000000 --- a/joshuto/on_preview_shown +++ /dev/null @@ -1,32 +0,0 @@ -#!/usr/bin/env bash - -FILE_PATH="$1" # Full path of the previewed file -PREVIEW_X_COORD="$2" # x coordinate of upper left cell of preview area -PREVIEW_Y_COORD="$3" # y coordinate of upper left cell of preview area -PREVIEW_WIDTH="$4" # Width of the preview pane (number of fitting characters) -PREVIEW_HEIGHT="$5" # Height of the preview pane (number of fitting characters) - -TMP_FILE="$HOME/.cache/joshuto/thumbcache.png" - -mimetype=$(file --mime-type -Lb "$FILE_PATH") - -function image { - kitty +kitten icat \ - --transfer-mode=file \ - --clear 2>/dev/null - kitty +kitten icat \ - --transfer-mode=file \ - --place "${PREVIEW_WIDTH}x${PREVIEW_HEIGHT}@${PREVIEW_X_COORD}x${PREVIEW_Y_COORD}" \ - "$1" 2>/dev/null -} - -case "$mimetype" in - image/*) - image "${FILE_PATH}" - ;; - *) - kitty +kitten icat \ - --transfer-mode=file \ - --clear 2>/dev/null - ;; -esac diff --git a/joshuto/preview.sh b/joshuto/preview.sh deleted file mode 100755 index 8b91cb9..0000000 --- a/joshuto/preview.sh +++ /dev/null @@ -1,202 +0,0 @@ -#!/usr/bin/env bash -# ranger supports enhanced previews. If the option "use_preview_script" -# is set to True and this file exists, this script will be called and its -# output is displayed in ranger. ANSI color codes are supported. - -# NOTES: This script is considered a configuration file. If you upgrade -# ranger, it will be left untouched. (You must update it yourself.) -# Also, ranger disables STDIN here, so interactive scripts won't work properly - -# Meanings of exit codes: -# code | meaning | action of ranger -# -----+------------+------------------------------------------- -# 0 | success | success. display stdout as preview -# 1 | no preview | failure. display no preview at all -# 2 | plain text | display the plain content of the file -# 3 | fix width | success. Don't reload when width changes -# 4 | fix height | success. Don't reload when height changes -# 5 | fix both | success. Don't ever reload -# 6 | image | success. display the image $cached points to as an image preview -# 7 | image | success. display the file directly as an image - -# Meaningful aliases for arguments: -path="$1" # Full path of the selected file -width="$2" # Width of the preview pane (number of fitting characters) -height="$3" # Height of the preview pane (number of fitting characters) -cached="$4" # Path that should be used to cache image previews -preview_images="$5" # "True" if image previews are enabled, "False" otherwise. -x_coord=0 -y_coord=0 -cache_path="" - -while [ "$#" -gt 0 ]; do - case "$1" in - "--path") - shift - path="$1" - ;; - "--preview-width") - shift - width="$1" - ;; - "--preview-height") - shift - height="$1" - ;; - "--x-coord") - shift - x_coord="$1" - ;; - "--y-coord") - shift - y_coord="$1" - ;; - "--preview-images") - shift - preview_images="$1" - ;; - "--image-cache") - shift - cache_path="$1" - ;; - esac - shift -done - - -maxln=200 # Stop after $maxln lines. Can be used like ls | head -n $maxln - -# Find out something about the file: -mimetype=$(file --mime-type -Lb "$path") -extension=$(/bin/echo "${path##*.}" | awk '{print tolower($0)}') -realpath=$(realpath "$path") - -# Functions: -# runs a command and saves its output into $output. Useful if you need -# the return value AND want to use the output in a pipe -try() { output=$(eval '"$@"'); } - -# writes the output of the previously used "try" command -dump() { /bin/echo "$output"; } - -# a common post-processing function used after most commands -trim() { head -n "$maxln"; } - -# wraps highlight to treat exit code 141 (killed by SIGPIPE) as success -safepipe() { "$@"; test $? = 0 -o $? = 141; } - -tmsu_tag_list() { - taglist=`tmsu tags -n never -1 "$path"` - result=$? - if [ $result -eq 0 ]; then - if [ -z "$taglist" ]; then - echo "No Tags" - else - taglist=`echo "$taglist" | sed 's/^/ • /'` - echo "Tags:" - echo "$taglist" - fi - fi -} - - - -# case "$mimetype" in -# image/* | video/* | audio/*) -# image_output="Tags:\n `tmsu tags -n never -1 "$path" | sed 's/^/ • /'`" -# echo -e "$image_output" -# esac - -# Image previews, if enabled in ranger. -if [ "$preview_images" = "True" ]; then - case "$mimetype" in - # Image previews for SVG files, disabled by default. - ###image/svg+xml) - ### convert "$path" "$cached" && exit 6 || exit 1;; - # Image previews for image files. w3mimgdisplay will be called for all - # image files (unless overriden as above), but might fail for - # unsupported types. - image/*) - exit 7;; - # Image preview for video, disabled by default.: - ###video/*) - ### ffmpegthumbnailer -i "$path" -o "$cached" -s 0 && exit 6 || exit 1;; - esac -fi - -case "$extension" in - # Archive extensions: - a|ace|alz|arc|arj|bz|bz2|cab|cpio|deb|gz|jar|lha|lz|lzh|lzma|lzo|\ - rpm|rz|t7z|tar|tbz|tbz2|tgz|tlz|txz|tZ|tzo|war|xpi|xz|Z|zip) - try als "$path" && { dump | trim; exit 0; } - try acat "$path" && { dump | trim; exit 3; } - try bsdtar -lf "$path" && { dump | trim; exit 0; } - exit 1;; - rar) - # avoid password prompt by providing empty password - try unrar -p- lt "$path" && { dump | trim; exit 0; } || exit 1;; - 7z) - # avoid password prompt by providing empty password - try 7z -p l "$path" && { dump | trim; exit 0; } || exit 1;; - # PDF documents: - pdf) - try pdftotext -l 10 -nopgbrk -q "$path" - && \ - { dump | trim | fmt -s -w $width; exit 0; } || exit 1;; - # BitTorrent Files - torrent) - try transmission-show "$path" && { dump | trim; exit 5; } || exit 1;; - # ODT Files - odt|ods|odp|sxw) - try odt2txt "$path" && { dump | trim; exit 5; } || exit 1;; - # HTML Pages: - htm|html|xhtml) - try w3m -dump "$path" && { dump | trim | fmt -s -w $width; exit 4; } - try lynx -dump "$path" && { dump | trim | fmt -s -w $width; exit 4; } - try elinks -dump "$path" && { dump | trim | fmt -s -w $width; exit 4; } - ;; # fall back to highlight/cat if the text browsers fail -esac - -case "$mimetype" in - # Syntax highlight for text files: - text/* | */xml | */json) - if [ "$(tput colors)" -ge 256 ]; then - pygmentize_format=terminal256 - highlight_format=xterm256 - else - pygmentize_format=terminal - highlight_format=ansi - fi - #try safepipe highlight --out-format=${highlight_format} "$path" && { dump | trim; exit 5; } - #try safepipe pygmentize -f ${pygmentize_format} "$path" && { dump | trim; exit 5; } - try safepipe bat -pp --color always "$path" && { dump | trim; exit 5; } - cat "$path" - exit 2;; - image/png | image/jpeg | image/gif) - dimension="Size `exiftool "$path" | grep '^Image Size' | awk '{print $4}'`" - tags=$(tmsu_tag_list) - echo "$realpath" - echo "$dimension" - echo "$tags" - meta_file="$(get_preview_meta_file $path)" - let y_offset=`printf "${tags}" | sed -n '=' | wc -l`+3 - echo "y-offset $y_offset" > "$meta_file" - exit 4 - ;; - image/*) - tags=$(tmsu_tag_list) - echo "$tags" - echo "$realpath" - exit 4 - #img2txt --gamma=0.6 --width="$width" "$path" && exit 4 || exit 1 - ;; - # Display information about media files: - video/* | audio/*) - tags=$(tmsu_tag_list) - echo "$tags" - echo "$realpath" - exiftool "$path" && exit 5 - # Use sed to remove spaces so the output fits into the narrow window - try mediainfo "$path" && { dump | trim | sed 's/ \+:/: /;'; exit 5; } || exit 1;; -esac - -exit 1 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 5f7abbf..0000000 --- a/kitty/kitty.conf +++ /dev/null @@ -1,55 +0,0 @@ -enable_audio_bell no -window_alert_on_bell no -background_opacity 0.8 -cursor_blink_interval 0 -window_padding_width 1 -shell_integration yes - -background #1a1b25 -foreground #c5c8c6 - -selection_background #b2ceee -selection_foreground #080808 - -selection_background #33467c -selection_foreground #c0caf5 -url_color #73daca -cursor #c0caf5 -cursor_text_color #1a1b25 - -# 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 fish 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/.gitignore b/nvim/.gitignore deleted file mode 100644 index cc5457a..0000000 --- a/nvim/.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -tt.* -.tests -doc/tags -debug -.repro -foo.* -*.log -data diff --git a/nvim/.neoconf.json b/nvim/.neoconf.json deleted file mode 100644 index aa1b504..0000000 --- a/nvim/.neoconf.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "neodev": { - "library": { - "enabled": true, - "plugins": true - } - }, - "neoconf": { - "plugins": { - "sumneko_lua": { - "enabled": true - } - } - } -} diff --git a/nvim/LICENSE b/nvim/LICENSE deleted file mode 100644 index 261eeb9..0000000 --- a/nvim/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/nvim/README.md b/nvim/README.md deleted file mode 100644 index ad6d1a3..0000000 --- a/nvim/README.md +++ /dev/null @@ -1,141 +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 | - -## Neo-Tree -| key | Description | -| --- | ------------------------- | -| f |toggle open | -| a |create new file | -| d |remove file | -| r |rename file | -| y |copy name | -| Y |copy path | -| x |cut file | -| c |copy file | -| p |paste file | -| f |filter (inside nvim tree) | -| E |expand all folders | -| W |collapse all folders | - -## 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 | - -## Leap -| key | Description | -| -------- | ------------------------------------------------------ | -| s | followed by 2 other characters and the marker to jump | - -## 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/ftplugin/java.lua b/nvim/ftplugin/java.lua deleted file mode 100644 index a94c6af..0000000 --- a/nvim/ftplugin/java.lua +++ /dev/null @@ -1,46 +0,0 @@ -local jdtls = require("jdtls") - -jdtls.start_or_attach({ - cmd = { "jdtls" }, - root_dir = vim.fs.dirname(vim.fs.find({ "settings.gradle", ".git", "pom.xml" }, { upward = true })[1]), - init_options = { - bundles = vim.list_extend( - { - -- Mason: java-debug-adapter - -- stylua: ignore - vim.fn.glob( "~/.local/share/nvim/mason/packages/java-debug-adapter/extension/server/com.microsoft.java.debug.plugin-*.jar", 1), - }, - -- Mason: java-test - -- stylua: ignore - vim.split(vim.fn.glob("~/.local/share/nvim/mason/packages/java-test/extension/server/*.jar", 1), "\n") - ), - }, - on_attach = function() - jdtls.setup_dap() -- Create new dap adapter for java - - -- nvim-jdtls specific mappings - vim.keymap.set("n", "", jdtls.organize_imports, {}) - vim.keymap.set("n", "crv", jdtls.extract_variable, {}) - vim.keymap.set("v", "crv", jdtls.extract_variable, {}) - vim.keymap.set("n", "crc", jdtls.extract_constant, {}) - vim.keymap.set("v", "crc", jdtls.extract_constant, {}) - vim.keymap.set("v", "crm", jdtls.extract_method, {}) - - vim.keymap.set("n", "df", jdtls.test_class, {}) - vim.keymap.set("n", "dn", jdtls.test_nearest_method, {}) - end, -}) - -local dap_status, dap = pcall(require, "dap") -if not dap_status then - return -end - -dap.configurations.java = { - { - name = "Launch current file", - type = "java", - request = "launch", - program = "${file}", - }, -} diff --git a/nvim/init.lua b/nvim/init.lua deleted file mode 100644 index 2514f9e..0000000 --- a/nvim/init.lua +++ /dev/null @@ -1,2 +0,0 @@ --- bootstrap lazy.nvim, LazyVim and your plugins -require("config.lazy") diff --git a/nvim/lazy-lock.json b/nvim/lazy-lock.json deleted file mode 100644 index 8ae0848..0000000 --- a/nvim/lazy-lock.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "LazyVim": { "branch": "main", "commit": "3c6357815c354ee2bb82b4162a484c1de6d575dc" }, - "LuaSnip": { "branch": "master", "commit": "9b5be5e9b460fad7134991d3fd0434466959db08" }, - "alpha-nvim": { "branch": "main", "commit": "4b0ba68022d8612b04b26844f1ce5e708c0d23b0" }, - "bufferline.nvim": { "branch": "main", "commit": "3677aceb9a72630b0613e56516c8f7151b86f95c" }, - "catppuccin": { "branch": "main", "commit": "5e2c9cf8277c42fb634007126c36d765fd176f4a" }, - "cmp-buffer": { "branch": "main", "commit": "3022dbc9166796b644a841a02de8dd1cc1d311fa" }, - "cmp-nvim-lsp": { "branch": "main", "commit": "0e6b2ed705ddcff9738ec4ea838141654f12eeef" }, - "cmp-path": { "branch": "main", "commit": "91ff86cd9c29299a64f968ebb45846c485725f23" }, - "cmp_luasnip": { "branch": "master", "commit": "18095520391186d634a0045dacaa346291096566" }, - "dressing.nvim": { "branch": "master", "commit": "5f44f829481640be0f96759c965ae22a3bcaf7ce" }, - "editorconfig.nvim": { "branch": "master", "commit": "5b9e303e1d6f7abfe616ce4cc8d3fffc554790bf" }, - "flit.nvim": { "branch": "main", "commit": "4c1739137acd3e7f03e2065a7be8a4dc41c7e461" }, - "friendly-snippets": { "branch": "main", "commit": "009887b76f15d16f69ae1341f86a7862f61cf2a1" }, - "gitsigns.nvim": { "branch": "main", "commit": "3b6c0a6412b31b91eb26bb8f712562cf7bb1d3be" }, - "harpoon": { "branch": "master", "commit": "f7040fd0c44e7a4010369136547de5604b9c22a1" }, - "indent-blankline.nvim": { "branch": "master", "commit": "018bd04d80c9a73d399c1061fa0c3b14a7614399" }, - "lazy.nvim": { "branch": "main", "commit": "14075657131b9a19883a8845c47f1ab65461cd6f" }, - "leap.nvim": { "branch": "main", "commit": "d34680b16af977928228e57c68e5a162f1649e3c" }, - "lsp-inlayhints.nvim": { "branch": "main", "commit": "84ca3abe8aaecbb5b30ad89e4701d4a9c821b72c" }, - "lualine.nvim": { "branch": "master", "commit": "e99d733e0213ceb8f548ae6551b04ae32e590c80" }, - "markdown-preview.nvim": { "branch": "master", "commit": "02cc3874738bc0f86e4b91f09b8a0ac88aef8e96" }, - "mason-lspconfig.nvim": { "branch": "main", "commit": "e4badf7984f7a5f0ac7dc10657dbedbd99a82f94" }, - "mason-nvim-dap.nvim": { "branch": "main", "commit": "07fd5396c17eec6d5857039f232d0a03a2b28a5a" }, - "mason.nvim": { "branch": "main", "commit": "c400270804059087e2d0041893a95c6bab4df3c1" }, - "mini.bufremove": { "branch": "main", "commit": "8464390c932556dbb298ccf8a7587d6ef765e94f" }, - "mini.comment": { "branch": "main", "commit": "5e8c7f75c48d958ef84ed75772b0263284c8621d" }, - "mini.indentscope": { "branch": "main", "commit": "7998edc970610c05598c7aea3d21ece8dd87ed52" }, - "mini.pairs": { "branch": "main", "commit": "0256717c9364ad6b5384c37b4f96fb4f7cc74867" }, - "mini.surround": { "branch": "main", "commit": "b7c2f4bea1f60af8dfee71f696319d045d986ce6" }, - "neo-tree.nvim": { "branch": "v2.x", "commit": "aec592bb1f0cf67f7e1123053d1eb17700aa9ed4" }, - "neoconf.nvim": { "branch": "main", "commit": "c2604560ea764ad5f72e52f38c52ef7fc2d1be98" }, - "neodev.nvim": { "branch": "main", "commit": "c6b8ff8f0d261c8fb99a55ec7cc5dcf9cb928293" }, - "noice.nvim": { "branch": "main", "commit": "c22651651da01239fc4afac4cdb7261797d5f02e" }, - "nui.nvim": { "branch": "main", "commit": "0dc148c6ec06577fcf06cbab3b7dac96d48ba6be" }, - "null-ls.nvim": { "branch": "main", "commit": "456cd2754c56c991c5e4df60a807d054c1bc7148" }, - "nvim-cmp": { "branch": "main", "commit": "feed47fd1da7a1bad2c7dca456ea19c8a5a9823a" }, - "nvim-dap": { "branch": "master", "commit": "c1bfcd89ef440a44d02ade7e71befb1e5aa358ca" }, - "nvim-dap-ui": { "branch": "master", "commit": "bdb94e3853d11b5ce98ec182e5a3719d5c0ef6fd" }, - "nvim-dap-virtual-text": { "branch": "master", "commit": "8db23ea51203b5f00ad107a0cef7e0b2d7a0476c" }, - "nvim-highlight-colors": { "branch": "main", "commit": "af051bfe2971fc888d21cdfc59f5444904353b43" }, - "nvim-jdtls": { "branch": "master", "commit": "db08bfb87300fca2db91d15b64ca88a62970fb58" }, - "nvim-lspconfig": { "branch": "master", "commit": "1a2d5f5224c65b0709bf5da0ccd9cad29272083a" }, - "nvim-navic": { "branch": "master", "commit": "cdd24539bcf114a499827e9b32869fe74836efe7" }, - "nvim-notify": { "branch": "master", "commit": "281e4d793c550c866bea3fb85d39de1f0188fb50" }, - "nvim-spectre": { "branch": "master", "commit": "b71b64afe9fedbfdd25a8abec897ff4af3bd553a" }, - "nvim-treesitter": { "branch": "master", "commit": "980f0816cc28c20e45715687a0a21b5b39af59eb" }, - "nvim-treesitter-textobjects": { "branch": "master", "commit": "4b30081d2736e09f90c890a8a7adfe4df36f5b36" }, - "nvim-ts-context-commentstring": { "branch": "main", "commit": "729d83ecb990dc2b30272833c213cc6d49ed5214" }, - "nvim-web-devicons": { "branch": "master", "commit": "b2060eac2fbc84e0637ea706378ff66451e7c424" }, - "persistence.nvim": { "branch": "main", "commit": "adcf6913693a0434665d162ee45a186230496f8a" }, - "plenary.nvim": { "branch": "master", "commit": "253d34830709d690f013daf2853a9d21ad7accab" }, - "tailwindcss-colorizer-cmp.nvim": { "branch": "main", "commit": "f044050da3ec6e1cdb31985beecec6810cc27f0b" }, - "telescope-file-browser.nvim": { "branch": "master", "commit": "61b3769065131129716974f7fb63f82ee409bd80" }, - "telescope-project.nvim": { "branch": "master", "commit": "8e8ee37b7210761502cdf2c3a82b5ba8fb5b2972" }, - "telescope-zoxide": { "branch": "main", "commit": "68966349aa1b8e9ade403e18479ecf79447389a7" }, - "telescope.nvim": { "branch": "master", "commit": "a3f17d3baf70df58b9d3544ea30abe52a7a832c2" }, - "todo-comments.nvim": { "branch": "main", "commit": "74c7d28cb50b0713c881ef69bcb6cdd77d8907d1" }, - "toggleterm.nvim": { "branch": "main", "commit": "31d38d11390bcd35a568fcc65a79b7d6ec89de62" }, - "tokyonight.nvim": { "branch": "main", "commit": "a310c1ddb3a7d8b940834238f79f7bfd494ba76a" }, - "trouble.nvim": { "branch": "main", "commit": "67337644e38144b444d026b0df2dc5fa0038930f" }, - "vim-illuminate": { "branch": "master", "commit": "49062ab1dd8fec91833a69f0a1344223dd59d643" }, - "vim-repeat": { "branch": "master", "commit": "24afe922e6a05891756ecf331f39a1f6743d3d5a" }, - "vim-startuptime": { "branch": "master", "commit": "6580cf539c33a212f4f5542068a3b4dd2b3ad834" }, - "vimtex": { "branch": "master", "commit": "6f7e507ed1c397838798e43a8249612864c929ba" }, - "which-key.nvim": { "branch": "main", "commit": "fb027738340502b556c3f43051f113bcaa7e8e63" } -} \ No newline at end of file diff --git a/nvim/lua/config/autocmds.lua b/nvim/lua/config/autocmds.lua deleted file mode 100644 index e45d3ac..0000000 --- a/nvim/lua/config/autocmds.lua +++ /dev/null @@ -1,12 +0,0 @@ --- Autocmds are automatically loaded on the VeryLazy event --- Default autocmds that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/autocmds.lua --- Add any additional autocmds here -local function augroup(name) - return vim.api.nvim_create_augroup("lazyvim_" .. name, { clear = true }) -end -vim.api.nvim_create_autocmd("TextYankPost", { - group = augroup("toggle_relative_group"), - callback = function(_) - vim.cmd("set norelativenumber") - end, -}) diff --git a/nvim/lua/config/keymaps.lua b/nvim/lua/config/keymaps.lua deleted file mode 100644 index 60d09c6..0000000 --- a/nvim/lua/config/keymaps.lua +++ /dev/null @@ -1,104 +0,0 @@ --- maps are automatically loaded on the VeryLazy event --- Default maps that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/maps.lua --- Add any additional maps here - -local Util = require("lazyvim.util") - -local function map(mode, lhs, rhs, opts) - local keys = require("lazy.core.handler").handlers.keys - ---@cast keys LazyKeysHandler - -- do not create the map if a lazy keys handler exists - if not keys.active[keys.parse({ lhs, mode = mode }).id] then - opts = opts or {} - opts.silent = opts.silent ~= false - vim.keymap.set(mode, lhs, rhs, opts) - end -end -local opts = { noremap = true, silent = true } -local term_opts = { silent = true } - -map("n", "d", ':set relativenumberd', opts) -map("n", "y", ':set relativenumbery', opts) -map("n", "", ':set norelativenumber', opts) - --- debug -map("n", "", ':lua require("dap").toggle_breakpoint()', opts) -map("n", "", ':lua require("dap").step_over()', opts) -map("n", "", ':lua require("dap").step_into()', opts) -map("n", "", ':lua require("dapui").toggle() :lua require("dap").continue() ', opts) -map("n", "", ':lua require("dap").continue()', opts) -map("n", "", ':lua require("dap").close() :lua require("dapui").toggle()', opts) - --- file tree -map("n", "f", ":Neotree action=focus toggle=true", opts) - --- toggle terminal -map("n", "", ":lua require('toggleterm').toggle(1)", opts) - --- tab switching -map("n", "", ":BufferLineCyclePrev", opts) -map("n", "", ":BufferLineCycleNext", opts) - --- formatting -map("n", "", ":lua vim.lsp.buf.format { async = true }", opts) -map("n", "a", ":Telescope lsp_definitions", opts) -map("n", "s", ":Telescope lsp_references", opts) -map("n", "d", ":Telescope lsp_type_definitions", opts) -map("n", "f", ":Telescope lsp_implementations", opts) -map("n", "q", ":lua vim.lsp.buf.code_action()", opts) -map("n", "w", ":lua vim.lsp.buf.signature_help()", opts) -map("n", "e", ":lua vim.lsp.buf.hover()", opts) -map("n", "r", ":lua vim.lsp.buf.rename()", opts) -map("n", "gq", ":lua require('telescope.builtin').git_commits()", opts) -map("n", "gw", ":lua require('telescope.builtin').git_bcommits()", opts) -map("n", "ge", ":lua require('telescope.builtin').git_branches()", opts) -map("n", "gr", ":lua require('telescope.builtin').git_status()", opts) -map("n", "ga", ":lua require('telescope.builtin').git_stash()", opts) - --- window switching -function _G.set_terminal_maps() - 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_maps()") -map("n", "", ":wincmd h", opts) -map("n", "", ":wincmd j", opts) -map("n", "", ":wincmd k", opts) -map("n", "", ":wincmd l", opts) - --- harpoon man - -map("n", "", ":lua require('harpoon.ui').nav_file(1)", opts) -map("n", "", ":lua require('harpoon.ui').nav_file(2)", opts) -map("n", "", ":lua require('harpoon.ui').nav_file(3)", opts) -map("n", "fma", ":lua require('harpoon.mark').add_file()", opts) -map("n", "fmd", ":lua require('harpoon.mark').remove_file()", opts) - --- telescope -map("n", "fb", ":Telescope file_browser", {}) -map("n", "fc", ":Cheatsheet", {}) -map("n", "ff", ":lua require('telescope.builtin').find_files()", {}) -map("n", "fg", ":lua require('telescope.builtin').live_grep()", {}) -map("n", "fh", ":lua require('telescope.builtin').help_tags()", {}) -map("n", "fp", ":lua require'telescope'.extensions.project.project{}", { noremap = true, silent = true }) -map("n", "fm", ":Telescope harpoon marks", { noremap = true, silent = true }) - -vim.keymap.set("n", "z", ":lua require('telescope').extensions.zoxide.list{}") - --- trouble -map("n", "", "TroubleToggle", term_opts) - --- gitui -map("n", "gg", function() - Util.float_term({ "gitui" }, { cwd = Util.get_root() }) -end, { desc = "gitui (root dir)" }) -map("n", "gG", function() - Util.float_term({ "gitui" }) -end, { desc = "gitui (cwd)" }) diff --git a/nvim/lua/config/lazy.lua b/nvim/lua/config/lazy.lua deleted file mode 100644 index 3416a6b..0000000 --- a/nvim/lua/config/lazy.lua +++ /dev/null @@ -1,48 +0,0 @@ -local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" -if not vim.loop.fs_stat(lazypath) then - -- bootstrap lazy.nvim - -- stylua: ignore - vim.fn.system({ "git", "clone", "--filter=blob:none", "https://github.com/folke/lazy.nvim.git", "--branch=stable", - lazypath }) -end -vim.opt.rtp:prepend(vim.env.LAZY or lazypath) - -require("lazy").setup({ - spec = { - -- add LazyVim and import its plugins - { "LazyVim/LazyVim", import = "lazyvim.plugins" }, - -- import any extras modules here - -- { import = "lazyvim.plugins.extras.lang.typescript" }, - -- { import = "lazyvim.plugins.extras.lang.json" }, - -- { import = "lazyvim.plugins.extras.ui.mini-animate" }, - -- import/override with your plugins - { import = "plugins" }, - }, - defaults = { - -- By default, only LazyVim plugins will be lazy-loaded. Your custom plugins will load during startup. - -- If you - lazy = false, - -- It's recommended to leave version=false for now, since a lot the plugin that support versioning, - -- have outdated releases, which may break your Neovim install. - version = false, -- always use the latest git commit - -- version = "*", -- try installing the latest stable version for plugins that support semver - }, - install = { colorscheme = { "tokyonight", "habamax" } }, - checker = { enabled = true, notify = false }, - change_detection = { enabled = true, notify = false }, --know what you're doing, you can set this to `true` to have all your custom plugins lazy-loaded by default. - performance = { - rtp = { - -- disable some rtp plugins - disabled_plugins = { - "gzip", - -- "matchit", - -- "matchparen", - -- "netrwPlugin", - "tarPlugin", - "tohtml", - "tutor", - "zipPlugin", - }, - }, - }, -}) diff --git a/nvim/lua/config/options.lua b/nvim/lua/config/options.lua deleted file mode 100644 index 7b0412f..0000000 --- a/nvim/lua/config/options.lua +++ /dev/null @@ -1,21 +0,0 @@ --- Options are automatically loaded before lazy.nvim startup --- Default options that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/options.lua --- Add any additional options here -local options = { - clipboard = "unnamedplus", - mouse = "n", - fileencoding = "utf-8", - number = true, - showmode = true, - termguicolors = true, - spelllang = "en_us", - shell = "/usr/bin/zsh", - autochdir = true, - relativenumber = false, -} - -vim.g.mkdp_browser = "/usr/bin/firefox" -vim.g.mkdp_auto_start = 1 -for k, v in pairs(options) do - vim.opt[k] = v -end diff --git a/nvim/lua/plugins/cmp.lua b/nvim/lua/plugins/cmp.lua deleted file mode 100644 index 201405c..0000000 --- a/nvim/lua/plugins/cmp.lua +++ /dev/null @@ -1,123 +0,0 @@ -return { - { - "L3MON4D3/LuaSnip", - build = (not jit.os:find("Windows")) - and "echo -e 'NOTE: jsregexp is optional, so not a big deal if it fails to build\n'; make install_jsregexp" - or nil, - dependencies = { - "rafamadriz/friendly-snippets", - config = function() - require("luasnip.loaders.from_vscode").lazy_load() - end, - }, - opts = { - history = true, - delete_check_events = "TextChanged", - updateevents = "TextChanged,TextChangedI", - enable_autosnippets = true, - }, - keys = function() - return {} - end, - config = function(_, opts) - require("luasnip").setup(opts) - end, - }, - { - "hrsh7th/nvim-cmp", - event = "InsertEnter", - dependencies = { - "hrsh7th/cmp-nvim-lsp", - "hrsh7th/cmp-buffer", - "hrsh7th/cmp-path", - "saadparwaiz1/cmp_luasnip", - { "roobert/tailwindcss-colorizer-cmp.nvim", config = true }, - }, - opts = function() - local cmp = require("cmp") - local luasnip = require("luasnip") - return { - preselect = cmp.PreselectMode.None, - completion = { - completeopt = "menu,menuone,noinsert", - }, - snippet = { - expand = function(args) - luasnip.lsp_expand(args.body) - end, - }, - mapping = { - [""] = cmp.mapping.scroll_docs(-4), - [""] = cmp.mapping.scroll_docs(4), - [""] = cmp.mapping.complete(), - [""] = cmp.mapping.abort(), - [""] = cmp.mapping.confirm({ select = false }), -- Accept currently selected item. Set `select` to `false` to only confirm explicitly selected items. - [""] = 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", - }), - }, - sources = cmp.config.sources({ - { name = "nvim_lsp" }, - { name = "luasnip" }, - { name = "buffer" }, - { name = "path" }, - }), - formatting = { - format = function(entry, item) - local icons = require("lazyvim.config").icons.kinds - if icons[item.kind] then - item.kind = icons[item.kind] .. item.kind - end - return require("tailwindcss-colorizer-cmp").formatter(entry, item) - end, - }, - experimental = { - ghost_text = { - hl_group = "LspCodeLens", - }, - }, - } - end, - config = function(_, opts) - local cmp = require("cmp") - require("luasnip.loaders.from_lua").load({ paths = "~/.config/nvim/snippets" }) - cmp.setup(opts) - end, - }, -} diff --git a/nvim/lua/plugins/dap.lua b/nvim/lua/plugins/dap.lua deleted file mode 100644 index 667b92b..0000000 --- a/nvim/lua/plugins/dap.lua +++ /dev/null @@ -1,255 +0,0 @@ -return { - { - "mfussenegger/nvim-dap", - lazy = true, - dependencies = { - "rcarriga/nvim-dap-ui", - "theHamsta/nvim-dap-virtual-text", - { - "jay-babu/mason-nvim-dap.nvim", - opts = { - ensure_installed = { - "node2", - "python", - "javadbg", - "javatest", - "codelldb", - "firefox", - "bash", - "delve", - "coreclr", - }, - automatic_installation = true, - automatic_setup = true, - }, - config = function(_, opts) - require("mason-nvim-dap").setup(opts) - require("mason-nvim-dap").setup_handlers({ - javadbg = function() end, - }) - end, - }, - }, - config = function() - local dap = require("dap") - dap.adapters.lldb = { - type = "executable", - command = "/usr/bin/lldb-vscode", - name = "lldb", - } - dap.adapters.nlua = function(callback, config) - callback({ type = "server", host = config.host or "127.0.0.1", port = config.port or 8086 }) - end - dap.adapters.bashdb = { - type = "executable", - command = vim.fn.stdpath("data") .. "/mason/packages/bash-debug-adapter/bash-debug-adapter", - name = "bashdb", - } - - 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 - - dap.configurations.python = { - { - type = "python", -- the type here established the link to the adapter definition: `dap.adapters.python` - request = "launch", - name = "Launch file", - program = "${file}", -- This configuration will launch the current file if used. - pythonPath = function() - local cwd = vim.fn.getcwd() - if vim.fn.executable(cwd .. "/venv/bin/python") == 1 then - return cwd .. "/venv/bin/python" - elseif vim.fn.executable(cwd .. "/.venv/bin/python") == 1 then - return cwd .. "/.venv/bin/python" - else - return "/usr/bin/python" - end - end, - }, - } - dap.configurations.java = { - { - request = "attach", - name = "Debug (Attach) - Remote", - hostName = "127.0.0.1", - port = 5005, - }, - } - dap.configurations.go = { - { - type = "delve", - name = "Debug", - request = "launch", - program = "${file}", - }, - { - type = "delve", - name = "Debug test", -- configuration for debugging test files - request = "launch", - mode = "test", - program = "${file}", - }, - { - type = "delve", - name = "Debug test (go.mod)", - request = "launch", - mode = "test", - program = "./${relativeFileDirname}", - }, - } - dap.configurations.javascript = { - { - name = "Launch", - type = "js", - request = "launch", - program = "${file}", - cwd = vim.fn.getcwd(), - sourceMaps = true, - protocol = "inspector", - console = "integratedTerminal", - }, - } - dap.configurations.typescript = { - { - name = "Debug with Firefox", - type = "firefox", - request = "launch", - reAttach = true, - url = "http://localhost:3000", - webRoot = "${workspaceFolder}", - firefoxExecutable = "/usr/bin/firefox", - }, - } - dap.configurations.lua = { - { - type = "nlua", - request = "attach", - name = "Attach to running Neovim instance", - }, - } - dap.configurations.cs = { - { - type = "coreclr", - name = "launch - netcoredbg", - request = "launch", - program = function() - return vim.fn.input("Path to dll", vim.fn.getcwd() .. "/bin/Debug/", "file") - end, - }, - } - dap.configurations.sh = { - { - type = "bashdb", - request = "launch", - name = "Launch file", - showDebugOutput = true, - pathBashdb = vim.fn.stdpath("data") .. "/mason/packages/bash-debug-adapter/extension/bashdb_dir/bashdb", - pathBashdbLib = vim.fn.stdpath("data") .. "/mason/packages/bash-debug-adapter/extension/bashdb_dir", - trace = true, - file = "${file}", - program = "${file}", - cwd = "${workspaceFolder}", - pathCat = "cat", - pathBash = "/bin/bash", - pathMkfifo = "mkfifo", - pathPkill = "pkill", - args = {}, - env = {}, - terminalKind = "integrated", - }, - } - require("dapui").setup({ - icons = { expanded = "▾", collapsed = "▸", current_frame = "▸" }, - mappings = { - expand = { "", "<2-LeftMouse>" }, - open = "o", - remove = "d", - edit = "e", - repl = "r", - toggle = "t", - }, - expand_lines = vim.fn.has("nvim-0.7") == 1, - layouts = { - { - elements = { - { 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 = { - enabled = true, - 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("nvim-dap-virtual-text").setup() - end, - }, -} diff --git a/nvim/lua/plugins/dashboard.lua b/nvim/lua/plugins/dashboard.lua deleted file mode 100644 index 958da04..0000000 --- a/nvim/lua/plugins/dashboard.lua +++ /dev/null @@ -1,69 +0,0 @@ -return { - { - "goolord/alpha-nvim", - event = "VimEnter", - opts = function() - local alpha = require("alpha") - local dashboard = require("alpha.themes.dashboard") - dashboard.section.header.val = { - [[ _______ ___ _______. __ __ __ _______ ]], - [[| \ / \ / || | | | | | | ____|]], - [[| .--. | / ^ \ | (----`| |__| | | | | |__ ]], - [[| | | | / /_\ \ \ \ | __ | | | | __| ]], - [[| '--' | / _____ \ .----) | | | | | | | | |____ ]], - [[|_______/ /__/ \__\ |_______/ |__| |__| |__| |_______|]], - } - dashboard.section.buttons.val = { - dashboard.button("f", " Find file", ":lua require('telescope.builtin').find_files()"), - dashboard.button( - "b", - " Open File Browser", - ":lua require('telescope').extensions.file_browser.file_browser{}" - ), - dashboard.button("e", " New file", ":ene startinsert "), - dashboard.button("p", " Find project", ":lua require('telescope').extensions.project.project{}"), - dashboard.button("r", " Recently used files", ":lua require('telescope.builtin').oldfiles() "), - dashboard.button("t", " Zoxide", ":lua require('telescope').extensions.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) - end, - config = function(_, dashboard) - -- close Lazy and re-open when the dashboard is ready - if vim.o.filetype == "lazy" then - vim.cmd.close() - vim.api.nvim_create_autocmd("User", { - pattern = "AlphaReady", - callback = function() - require("lazy").show() - end, - }) - end - - require("alpha").setup(dashboard.opts) - - vim.api.nvim_create_autocmd("User", { - pattern = "LazyVimStarted", - callback = function() - local stats = require("lazy").stats() - local ms = (math.floor(stats.startuptime * 100 + 0.5) / 100) - dashboard.section.footer.val = "⚡ Neovim loaded " .. stats.count .. " plugins in " .. ms .. "ms" - pcall(vim.cmd.AlphaRedraw) - end, - }) - end, - }, -} diff --git a/nvim/lua/plugins/disabled.lua b/nvim/lua/plugins/disabled.lua deleted file mode 100644 index 0e680b8..0000000 --- a/nvim/lua/plugins/disabled.lua +++ /dev/null @@ -1,4 +0,0 @@ -return { - -- { "L3MON4D3/LuaSnip", enabled = false }, - -- { "hrsh7th/nvim-cmp", enabled = false }, -} diff --git a/nvim/lua/plugins/java.lua b/nvim/lua/plugins/java.lua deleted file mode 100644 index 5044d6f..0000000 --- a/nvim/lua/plugins/java.lua +++ /dev/null @@ -1,3 +0,0 @@ -local M = {} - -return M diff --git a/nvim/lua/plugins/lsp.lua b/nvim/lua/plugins/lsp.lua deleted file mode 100644 index 483681e..0000000 --- a/nvim/lua/plugins/lsp.lua +++ /dev/null @@ -1,188 +0,0 @@ -return { - { - "neovim/nvim-lspconfig", - lazy = true, - event = { "BufReadPre", "BufNewFile" }, - dependencies = { - { "folke/neoconf.nvim", cmd = "Neoconf", config = true }, - { "folke/neodev.nvim", opts = { experimental = { pathStrict = true } } }, - "mason.nvim", - "williamboman/mason-lspconfig.nvim", - "lvimuser/lsp-inlayhints.nvim", - "mfussenegger/nvim-jdtls", - { - "hrsh7th/cmp-nvim-lsp", - cond = function() - return require("lazyvim.util").has("nvim-cmp") - end, - }, - }, - ---@class PluginLspOpts - opts = { - -- options for vim.diagnostic.config() - diagnostics = { - underline = true, - update_in_insert = false, - virtual_text = { spacing = 4, prefix = "●" }, - severity_sort = true, - }, - -- Automatically format on save - autoformat = false, - -- options for vim.lsp.buf.format - -- `bufnr` and `filter` is handled by the LazyVim formatter, - -- but can be also overridden when specified - format = { - formatting_options = nil, - timeout_ms = nil, - }, - -- LSP Server Settings - ---@type lspconfig.options - servers = { - jsonls = {}, - tailwindcss = {}, - cssls = {}, - html = {}, - clangd = {}, - pyright = {}, - cmake = {}, - bashls = {}, - ansiblels = {}, - marksman = {}, - asm_lsp = {}, - tsserver = { - settings = { - typescript = { - inlayHints = { - includeInlayParameterNameHints = "all", - includeInlayParameterNameHintsWhenArgumentMatchesName = true, - includeInlayFunctionParameterTypeHints = true, - includeInlayVariableTypeHints = true, - includeInlayPropertyDeclarationTypeHints = true, - includeInlayFunctionLikeReturnTypeHints = true, - includeInlayEnumMemberValueHints = true, - }, - }, - javascript = { - inlayHints = { - includeInlayParameterNameHints = "all", - includeInlayParameterNameHintsWhenArgumentMatchesName = true, - includeInlayFunctionParameterTypeHints = true, - includeInlayVariableTypeHints = true, - includeInlayPropertyDeclarationTypeHints = true, - includeInlayFunctionLikeReturnTypeHints = true, - includeInlayEnumMemberValueHints = true, - }, - }, - }, - }, - ltex = { - settings = { - ltex = { - checkFrequency = "save", - }, - }, - }, - texlab = {}, - gopls = {}, - sqls = {}, - taplo = {}, - lemminx = {}, - yamlls = {}, - lua_ls = { - -- mason = false, -- set to false if you don't want this server to be installed with mason - settings = { - Lua = { - workspace = { - checkThirdParty = false, - }, - completion = { - callSnippet = "Replace", - }, - }, - }, - }, - }, - setup = { - jdtls = function() - return true - end, - }, - }, - config = function(plugin, opts) - -- setup autoformat - require("lazyvim.plugins.lsp.format").autoformat = opts.autoformat - -- setup formatting and keymaps - require("lazyvim.util").on_attach(function(client, buffer) - require("lazyvim.plugins.lsp.format").on_attach(client, buffer) - require("lazyvim.plugins.lsp.keymaps").on_attach(client, buffer) - end) - - -- diagnostics - for name, icon in pairs(require("lazyvim.config").icons.diagnostics) do - name = "DiagnosticSign" .. name - vim.fn.sign_define(name, { text = icon, texthl = name, numhl = "" }) - end - vim.diagnostic.config(opts.diagnostics) - - require("lsp-inlayhints").setup({}) - local servers = opts.servers - local capabilities = require("cmp_nvim_lsp").default_capabilities(vim.lsp.protocol.make_client_capabilities()) - 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-inlayhints").on_attach(client, bufnr) - end - - local function setup(server) - local server_opts = vim.tbl_deep_extend("force", { - capabilities = vim.deepcopy(capabilities), - on_attach = on_attach, - vim.lsp.diagnostic.on_publish_diagnostics, - { - -- Disable virtual_text - virtual_text = true, - }, - }, servers[server] or {}) - - if opts.setup[server] then - if opts.setup[server](server, server_opts) then - return - end - elseif opts.setup["*"] then - if opts.setup["*"](server, server_opts) then - return - end - end - require("lspconfig")[server].setup(server_opts) - end - - -- temp fix for lspconfig rename - -- https://github.com/neovim/nvim-lspconfig/pull/2439 - local mappings = require("mason-lspconfig.mappings.server") - if not mappings.lspconfig_to_package.lua_ls then - mappings.lspconfig_to_package.lua_ls = "lua-language-server" - mappings.package_to_lspconfig["lua-language-server"] = "lua_ls" - end - - local mlsp = require("mason-lspconfig") - local available = mlsp.get_available_servers() - - local ensure_installed = {} ---@type string[] - for server, server_opts in pairs(servers) do - if server_opts then - server_opts = server_opts == true and {} or server_opts - -- run manual setup if mason=false or if this is a server that cannot be installed with mason-lspconfig - if server_opts.mason == false or not vim.tbl_contains(available, server) then - setup(server) - else - ensure_installed[#ensure_installed + 1] = server - end - end - end - - require("mason-lspconfig").setup({ ensure_installed = ensure_installed }) - require("mason-lspconfig").setup_handlers({ setup }) - vim.cmd([[highlight LspInlayHint guibg=#1A1B26]]) - end, - }, -} diff --git a/nvim/lua/plugins/plugins.lua b/nvim/lua/plugins/plugins.lua deleted file mode 100644 index 3cef678..0000000 --- a/nvim/lua/plugins/plugins.lua +++ /dev/null @@ -1,129 +0,0 @@ -return { - { - "LazyVim/LazyVim", - opts = { - colorscheme = "tokyonight-night", - }, - }, - { - "akinsho/toggleterm.nvim", - lazy = true, - opts = { - autochdir = true, - }, - }, - { - "brenoprata10/nvim-highlight-colors", - lazy = true, - event = { "BufReadPre", "BufNewFile" }, - config = function(_, _) - require("nvim-highlight-colors").setup({ - enable_tailwind = true, - }) - vim.cmd(":hi clear CursorLine") - vim.cmd(":hi clear CursorLineFold") - vim.cmd(":hi clear CursorLineSign") - end, - }, - { - "gpanders/editorconfig.nvim", - event = { "BufReadPre", "BufNewFile" }, - lazy = true, - }, - { - "lvimuser/lsp-inlayhints.nvim", - event = { "BufReadPre", "BufNewFile" }, - lazy = true, - }, - { - "ThePrimeagen/harpoon", - lazy = true, - config = function() - require("telescope").load_extension("harpoon") - end, - }, - { - "iamcco/markdown-preview.nvim", - lazy = true, - event = "FileType markdown", - build = "cd app && yarn install", - }, - { - "nvim-telescope/telescope-project.nvim", - lazy = true, - }, - { - "nvim-telescope/telescope-file-browser.nvim", - lazy = true, - config = function() - require("telescope").load_extension("file_browser") - end, - }, - { - "jvgrootveld/telescope-zoxide", - lazy = true, - config = function() - local z_utils = require("telescope._extensions.zoxide.utils") - local t = require("telescope") - -- 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") - end, - }, - { - "lervag/vimtex", - config = function() - -- require("vimtex").setup() - vim.cmd("let g:vimtex_quickfix_mode=0") - vim.cmd("let g:vimtex_view_general_viewer = 'evince'") - vim.cmd("let g:vimtex_compiler_method = 'tectonic'") - vim.cmd( - "let g:vimtex_compiler_latexmk = {'options': ['-pdf', '-shell-escape', '-file-line-error', '--extra-mem-bot=10000000', '-synctex=1', '-interaction=nonstopmode',],}" - ) - end, - }, - { - "nvim-neo-tree/neo-tree.nvim", - opts = { - close_if_last_window = true, - filesystem = { - group_empty_dirs = true, - }, - window = { - mappings = { - ["f"] = "close_window", - }, - position = "right", - scan_mode = "deep", - }, - }, - }, - { - "echasnovski/mini.ai", - enabled = false, - }, -} 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/nvim/stylua.toml b/nvim/stylua.toml deleted file mode 100644 index 5d6c50d..0000000 --- a/nvim/stylua.toml +++ /dev/null @@ -1,3 +0,0 @@ -indent_type = "Spaces" -indent_width = 2 -column_width = 120 \ No newline at end of file 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/colors/Dracula.conf b/qt5ct/colors/Dracula.conf deleted file mode 100644 index 93b37d5..0000000 --- a/qt5ct/colors/Dracula.conf +++ /dev/null @@ -1,4 +0,0 @@ -[ColorScheme] -active_colors=#ffbd93f9, #ff424559, #ff484d6b, #ff6272a4, #ff44475a, #ff44475a, #ff6272a4, #ff44475a, #ffbd93f9, #ff282a36, #ff282a36, #ff44475a, #ff6272a4, #ffbd93f9, #ff8be9fd, #ff8be9fd, #ff44475a, #ff6272a4, #ff44475a, #fff8f8f2, #ff44475a -disabled_colors=#ffbd93f9, #ff424559, #ff484d6b, #ff6272a4, #ff44475a, #ff44475a, #ff6272a4, #ff44475a, #ffbd93f9, #ff282a36, #ff282a36, #ff44475a, #ff6272a4, #ffbd93f9, #ff8be9fd, #ff8be9fd, #ff44475a, #ff6272a4, #ff44475a, #fff8f8f2, #ff44475a -inactive_colors=#ffbd93f9, #ff424559, #ff484d6b, #ff6272a4, #ff44475a, #ff44475a, #ff6272a4, #ff44475a, #ffbd93f9, #ff282a36, #ff282a36, #ff44475a, #ff6272a4, #ffbd93f9, #ff8be9fd, #ff8be9fd, #ff44475a, #ff6272a4, #ff44475a, #fff8f8f2, #ff44475a diff --git a/qt5ct/colors/Gradience.conf b/qt5ct/colors/Gradience.conf deleted file mode 100644 index 9c04d1f..0000000 --- a/qt5ct/colors/Gradience.conf +++ /dev/null @@ -1,4 +0,0 @@ -[ColorScheme] -active_colors=#ffc0caf5, #ff1a1b26, #ff373949, #ff2b2c3b, #ff1a1b26, #ff2b2c3b, #ffc0caf5, #ffc0caf5, #ffc0caf5, #ff1a1b26, #ff1a1b26, #19000000, #ff2b2c3b, #ffc0caf5, #ff3584e4, #ff1b6acb, #ff1a1b26, #ff242530, #ff1a1b26, #ffc0caf5, #ffc0caf5 -disabled_colors=#ff6d728d, #ff1a1b26, #ff373949, #ff2b2c3b, #ff1a1b26, #ff2b2c3b, #ff6d728d, #ff6d728d, #ff6d728d, #ff1a1b26, #ff1a1b26, #19000000, #ff2b2c3b, #ff6d728d, #ff3584e4, #ff1b6acb, #ff1a1b26, #ff242530, #ff1a1b26, #ff6d728d, #ff6d728d -inactive_colors=#ff6d728d, #ff1a1b26, #ff373949, #ff2b2c3b, #ff1a1b26, #ff2b2c3b, #ff6d728d, #ff6d728d, #ff6d728d, #ff1a1b26, #ff1a1b26, #19000000, #ff2b2c3b, #ff6d728d, #ff3584e4, #ff1b6acb, #ff1a1b26, #ff242530, #ff1a1b26, #ff6d728d, #ff6d728d diff --git a/qt5ct/colors/mocha (copy).conf b/qt5ct/colors/mocha (copy).conf deleted file mode 100644 index b71eead..0000000 --- a/qt5ct/colors/mocha (copy).conf +++ /dev/null @@ -1,4 +0,0 @@ -[ColorScheme] -active_colors=#ffcdd6f4, #ff1a1b26, #ff2b2c3b, #ff9399b2, #ff45475a, #ff6c7086, #ffc0caf5, #ffc0caf5, #ffc0caf5, #ff1a1b26, #ff1a1b26, #ff7f849c, #ff2b2c3b, #ff1e1e2e, #ff89b4fa, #fff38ba8, #ff1e1e2e, #ffcdd6f4, #ff11111b, #ffcdd6f4, #807f849c -disabled_colors=#ffa6adc8, #ff1a1b26, #ff2b2c3b, #ff9399b2, #ff45475a, #ff6c7086, #ffc0caf5, #ffc0caf5, #ffc0caf5, #ff1a1b26, #ff1a1b26, #ff7f849c, #ff2b2c3b, #ff1a1b26, #ff89b4fa, #fff38ba8, #ff1e1e2e, #ffcdd6f4, #ff11111b, #ffcdd6f4, #807f849c -inactive_colors=#ffcdd6f4, #ff1a1b26, #ff2b2c3b, #ff9399b2, #ff45475a, #ff6c7086, #ffc0caf5, #ffc0caf5, #ffc0caf5, #ff1a1b26, #ff1a1b26, #ff7f849c, #ff2b2c3b, #ff1e1e2e, #ff89b4fa, #fff38ba8, #ff1e1e2e, #ffcdd6f4, #ff11111b, #ffcdd6f4, #807f849c diff --git a/qt5ct/colors/mocha.conf b/qt5ct/colors/mocha.conf deleted file mode 100644 index 4bc0e2c..0000000 --- a/qt5ct/colors/mocha.conf +++ /dev/null @@ -1,5 +0,0 @@ -[ColorScheme] -active_colors=#ffcdd6f4, #ff1e1e2e, #ffa6adc8, #ff9399b2, #ff45475a, #ff6c7086, #ffcdd6f4, #ffcdd6f4, #ffcdd6f4, #ff1e1e2e, #ff181825, #ff7f849c, #ff89b4fa, #ff1e1e2e, #ff89b4fa, #fff38ba8, #ff1e1e2e, #ffcdd6f4, #ff11111b, #ffcdd6f4, #807f849c -disabled_colors=#ffa6adc8, #ff1e1e2e, #ffa6adc8, #ff9399b2, #ff45475a, #ff6c7086, #ffa6adc8, #ffa6adc8, #ffa6adc8, #ff1e1e2e, #ff11111b, #ff7f849c, #ff89b4fa, #ff45475a, #ff89b4fa, #fff38ba8, #ff1e1e2e, #ffcdd6f4, #ff11111b, #ffcdd6f4, #807f849c -inactive_colors=#ffcdd6f4, #ff1e1e2e, #ffa6adc8, #ff9399b2, #ff45475a, #ff6c7086, #ffcdd6f4, #ffcdd6f4, #ffcdd6f4, #ff1e1e2e, #ff181825, #ff7f849c, #ff89b4fa, #ffa6adc8, #ff89b4fa, #fff38ba8, #ff1e1e2e, #ffcdd6f4, #ff11111b, #ffcdd6f4, #807f849c - diff --git a/qt5ct/colors/tokyonight.conf b/qt5ct/colors/tokyonight.conf deleted file mode 100644 index 9c04d1f..0000000 --- a/qt5ct/colors/tokyonight.conf +++ /dev/null @@ -1,4 +0,0 @@ -[ColorScheme] -active_colors=#ffc0caf5, #ff1a1b26, #ff373949, #ff2b2c3b, #ff1a1b26, #ff2b2c3b, #ffc0caf5, #ffc0caf5, #ffc0caf5, #ff1a1b26, #ff1a1b26, #19000000, #ff2b2c3b, #ffc0caf5, #ff3584e4, #ff1b6acb, #ff1a1b26, #ff242530, #ff1a1b26, #ffc0caf5, #ffc0caf5 -disabled_colors=#ff6d728d, #ff1a1b26, #ff373949, #ff2b2c3b, #ff1a1b26, #ff2b2c3b, #ff6d728d, #ff6d728d, #ff6d728d, #ff1a1b26, #ff1a1b26, #19000000, #ff2b2c3b, #ff6d728d, #ff3584e4, #ff1b6acb, #ff1a1b26, #ff242530, #ff1a1b26, #ff6d728d, #ff6d728d -inactive_colors=#ff6d728d, #ff1a1b26, #ff373949, #ff2b2c3b, #ff1a1b26, #ff2b2c3b, #ff6d728d, #ff6d728d, #ff6d728d, #ff1a1b26, #ff1a1b26, #19000000, #ff2b2c3b, #ff6d728d, #ff3584e4, #ff1b6acb, #ff1a1b26, #ff242530, #ff1a1b26, #ff6d728d, #ff6d728d diff --git a/qt5ct/qss/tab.qss b/qt5ct/qss/tab.qss deleted file mode 100644 index ab3a216..0000000 --- a/qt5ct/qss/tab.qss +++ /dev/null @@ -1,6 +0,0 @@ -QTabBar::tab:selected { - color: palette(highlight); -} -QMenuBar, QMenu, QToolBar, QStatusBar, QFrame, QScrollBar { - border: none; -} \ No newline at end of file diff --git a/qt5ct/qt5ct.conf b/qt5ct/qt5ct.conf deleted file mode 100644 index 8ff023c..0000000 --- a/qt5ct/qt5ct.conf +++ /dev/null @@ -1,38 +0,0 @@ -[Appearance] -color_scheme_path=/home/dashie/.config/qt5ct/colors/tokyonight.conf -custom_palette=true -icon_theme=breeze-dark -standard_dialogs=default -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=0 -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/dashie/.config/qt5ct/qss/tab.qss, /usr/share/qt5ct/qss/scrollbar-simple.qss, /usr/share/qt5ct/qss/sliders-simple.qss, /usr/share/qt5ct/qss/tooltip-simple.qss, /usr/share/qt5ct/qss/traynotification-simple.qss -toolbutton_style=4 -underline_shortcut=0 -wheel_scroll_lines=3 - -[PaletteEditor] -geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\0\0\0\x2v\0\0\x2\x10\0\0\0\0\0\0\0\0\0\0\x2v\0\0\x2\x10\0\0\0\x2\x2\0\0\0\n\0\0\0\0\0\0\0\0\0\0\0\x2v\0\0\x2\x10) - -[QSSEditor] -geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\0\0\0\x2\x82\0\0\x1\xf2\0\0\0\0\0\0\0\0\0\0\x2\x82\0\0\x1\xf2\0\0\0\x2\x2\0\0\0\n\0\0\0\0\0\0\0\0\0\0\0\x2\x82\0\0\x1\xf2) - -[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\x2\xd9\0\0\0\0\0\0\0\0\0\0\x4\xea\0\0\x2\xd9\0\0\0\x2\x2\0\0\0\n\0\0\0\0\0\0\0\0\0\0\0\x4\xea\0\0\x2\xd9) - -[Troubleshooting] -force_raster_widgets=1 -ignored_applications=@Invalid() diff --git a/qt6ct/colors/Dracula.conf b/qt6ct/colors/Dracula.conf deleted file mode 100644 index 93b37d5..0000000 --- a/qt6ct/colors/Dracula.conf +++ /dev/null @@ -1,4 +0,0 @@ -[ColorScheme] -active_colors=#ffbd93f9, #ff424559, #ff484d6b, #ff6272a4, #ff44475a, #ff44475a, #ff6272a4, #ff44475a, #ffbd93f9, #ff282a36, #ff282a36, #ff44475a, #ff6272a4, #ffbd93f9, #ff8be9fd, #ff8be9fd, #ff44475a, #ff6272a4, #ff44475a, #fff8f8f2, #ff44475a -disabled_colors=#ffbd93f9, #ff424559, #ff484d6b, #ff6272a4, #ff44475a, #ff44475a, #ff6272a4, #ff44475a, #ffbd93f9, #ff282a36, #ff282a36, #ff44475a, #ff6272a4, #ffbd93f9, #ff8be9fd, #ff8be9fd, #ff44475a, #ff6272a4, #ff44475a, #fff8f8f2, #ff44475a -inactive_colors=#ffbd93f9, #ff424559, #ff484d6b, #ff6272a4, #ff44475a, #ff44475a, #ff6272a4, #ff44475a, #ffbd93f9, #ff282a36, #ff282a36, #ff44475a, #ff6272a4, #ffbd93f9, #ff8be9fd, #ff8be9fd, #ff44475a, #ff6272a4, #ff44475a, #fff8f8f2, #ff44475a diff --git a/qt6ct/colors/gg.conf b/qt6ct/colors/gg.conf deleted file mode 100644 index f3a8882..0000000 --- a/qt6ct/colors/gg.conf +++ /dev/null @@ -1,4 +0,0 @@ -[ColorScheme] -active_colors=#ffcdd6f4, #ff1e1e2e, #ffa6adc8, #ff9399b2, #ff45475a, #ff6c7086, #ffcdd6f4, #ffcdd6f4, #ffcdd6f4, #ff1e1e2e, #ff181825, #ff7f849c, #ff89b4fa, #ff1e1e2e, #ff89b4fa, #fff38ba8, #ff1e1e2e, #ffcdd6f4, #ff11111b, #ffcdd6f4, #807f849c -disabled_colors=#ff1e1e2e, #ff1e1e2e, #ffa6adc8, #ff9399b2, #ff45475a, #ff6c7086, #ff1e1e2e, #ffcdd6f4, #ff1e1e2e, #ff1e1e2e, #ff181825, #ff7f849c, #ff89b4fa, #ff1e1e2e, #ff89b4fa, #fff38ba8, #ff1e1e2e, #ffcdd6f4, #ff11111b, #ffcdd6f4, #807f849c -inactive_colors=#ffcdd6f4, #ff1e1e2e, #ffa6adc8, #ff9399b2, #ff45475a, #ff6c7086, #ffcdd6f4, #ffcdd6f4, #ffcdd6f4, #ff1e1e2e, #ff181825, #ff7f849c, #ff89b4fa, #ff1e1e2e, #ff89b4fa, #fff38ba8, #ff1e1e2e, #ffcdd6f4, #ff11111b, #ffcdd6f4, #807f849c diff --git a/qt6ct/colors/mocha (copy).conf b/qt6ct/colors/mocha (copy).conf deleted file mode 100644 index 598d4a9..0000000 --- a/qt6ct/colors/mocha (copy).conf +++ /dev/null @@ -1,4 +0,0 @@ -[ColorScheme] -active_colors=#ffcdd6f4, #ff1e1e2e, #ffa6adc8, #ff9399b2, #ff45475a, #ff6c7086, #ffcdd6f4, #ffcdd6f4, #ffcdd6f4, #ff1e1e2e, #ff181825, #ff7f849c, #ff89b4fa, #ff1e1e2e, #ff89b4fa, #fff38ba8, #ff1e1e2e, #ffcdd6f4, #ff11111b, #ffcdd6f4, #807f849c -disabled_colors=#ffcdd6f4, #ff1e1e2e, #ffa6adc8, #ff9399b2, #ff45475a, #ff6c7086, #ffcdd6f4, #ffcdd6f4, #ffcdd6f4, #ff1e1e2e, #ff181825, #ff7f849c, #ff89b4fa, #ff1e1e2e, #ff89b4fa, #fff38ba8, #ff1e1e2e, #ffcdd6f4, #ff11111b, #ffcdd6f4, #807f849c -inactive_colors=#ffcdd6f4, #ff1e1e2e, #ffa6adc8, #ff9399b2, #ff45475a, #ff6c7086, #ffcdd6f4, #ffcdd6f4, #ffcdd6f4, #ff1e1e2e, #ff181825, #ff7f849c, #ff89b4fa, #ff1e1e2e, #ff89b4fa, #fff38ba8, #ff1e1e2e, #ffcdd6f4, #ff11111b, #ffcdd6f4, #807f849c diff --git a/qt6ct/colors/mocha.conf b/qt6ct/colors/mocha.conf deleted file mode 100644 index 598d4a9..0000000 --- a/qt6ct/colors/mocha.conf +++ /dev/null @@ -1,4 +0,0 @@ -[ColorScheme] -active_colors=#ffcdd6f4, #ff1e1e2e, #ffa6adc8, #ff9399b2, #ff45475a, #ff6c7086, #ffcdd6f4, #ffcdd6f4, #ffcdd6f4, #ff1e1e2e, #ff181825, #ff7f849c, #ff89b4fa, #ff1e1e2e, #ff89b4fa, #fff38ba8, #ff1e1e2e, #ffcdd6f4, #ff11111b, #ffcdd6f4, #807f849c -disabled_colors=#ffcdd6f4, #ff1e1e2e, #ffa6adc8, #ff9399b2, #ff45475a, #ff6c7086, #ffcdd6f4, #ffcdd6f4, #ffcdd6f4, #ff1e1e2e, #ff181825, #ff7f849c, #ff89b4fa, #ff1e1e2e, #ff89b4fa, #fff38ba8, #ff1e1e2e, #ffcdd6f4, #ff11111b, #ffcdd6f4, #807f849c -inactive_colors=#ffcdd6f4, #ff1e1e2e, #ffa6adc8, #ff9399b2, #ff45475a, #ff6c7086, #ffcdd6f4, #ffcdd6f4, #ffcdd6f4, #ff1e1e2e, #ff181825, #ff7f849c, #ff89b4fa, #ff1e1e2e, #ff89b4fa, #fff38ba8, #ff1e1e2e, #ffcdd6f4, #ff11111b, #ffcdd6f4, #807f849c diff --git a/qt6ct/colors/toykonight.conf b/qt6ct/colors/toykonight.conf deleted file mode 100644 index 9c04d1f..0000000 --- a/qt6ct/colors/toykonight.conf +++ /dev/null @@ -1,4 +0,0 @@ -[ColorScheme] -active_colors=#ffc0caf5, #ff1a1b26, #ff373949, #ff2b2c3b, #ff1a1b26, #ff2b2c3b, #ffc0caf5, #ffc0caf5, #ffc0caf5, #ff1a1b26, #ff1a1b26, #19000000, #ff2b2c3b, #ffc0caf5, #ff3584e4, #ff1b6acb, #ff1a1b26, #ff242530, #ff1a1b26, #ffc0caf5, #ffc0caf5 -disabled_colors=#ff6d728d, #ff1a1b26, #ff373949, #ff2b2c3b, #ff1a1b26, #ff2b2c3b, #ff6d728d, #ff6d728d, #ff6d728d, #ff1a1b26, #ff1a1b26, #19000000, #ff2b2c3b, #ff6d728d, #ff3584e4, #ff1b6acb, #ff1a1b26, #ff242530, #ff1a1b26, #ff6d728d, #ff6d728d -inactive_colors=#ff6d728d, #ff1a1b26, #ff373949, #ff2b2c3b, #ff1a1b26, #ff2b2c3b, #ff6d728d, #ff6d728d, #ff6d728d, #ff1a1b26, #ff1a1b26, #19000000, #ff2b2c3b, #ff6d728d, #ff3584e4, #ff1b6acb, #ff1a1b26, #ff242530, #ff1a1b26, #ff6d728d, #ff6d728d diff --git a/qt6ct/qt6ct.conf b/qt6ct/qt6ct.conf deleted file mode 100644 index 4f338f0..0000000 --- a/qt6ct/qt6ct.conf +++ /dev/null @@ -1,34 +0,0 @@ -[Appearance] -color_scheme_path=/home/dashie/.config/qt6ct/colors/toykonight.conf -custom_palette=true -standard_dialogs=default -style=Adwaita-Dark - -[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 - -[PaletteEditor] -geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\0\0\0\x2\x30\0\0\x1\xf4\0\0\0\0\0\0\0\0\0\0\x2\x30\0\0\x1\xf4\0\0\0\0\0\0\0\0\a\x80\0\0\0\0\0\0\0\0\0\0\x2\x30\0\0\x1\xf4) - -[SettingsWindow] -geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\0\0\0\x3#\0\0\x2\xe9\0\0\0\0\0\0\0\0\0\0\x3#\0\0\x2\xe9\0\0\0\x2\0\0\0\0\n\0\0\0\0\0\0\0\0\0\0\0\x3#\0\0\x2\xe9) - -[Troubleshooting] -force_raster_widgets=1 -ignored_applications=@Invalid() diff --git a/rofi/config.rasi b/rofi/config.rasi deleted file mode 100644 index 4d57f97..0000000 --- a/rofi/config.rasi +++ /dev/null @@ -1,19 +0,0 @@ -configuration { - matching: "prefix"; - show-icons: true; - icon-theme: "Papirus"; - sort: true; - sorting-method: "fzf"; - modes: "drun,window,calc,run,filebrowser"; - steal-focus: true; - drun-match-fields: "exec,name,categories,keywords,generic"; - hover-select: true; - window-thumbnail: true; - drun-use-desktop-cache: true; - application-fallback-icon: ""; - display-window: "Open Applications"; - display-drun: "Desktop Applications"; - display-run: "Terminal Applications"; - display-calc: "Calculator"; - display-filebrowser: "Filebrowser"; - } diff --git a/rofi/themes/tokyonight.rasi b/rofi/themes/tokyonight.rasi deleted file mode 100644 index 65c63fd..0000000 --- a/rofi/themes/tokyonight.rasi +++ /dev/null @@ -1,117 +0,0 @@ -/* - * ROFI color theme - * - * Based on Something Found in the Internet - * - * User: Contributors - * Copyright: *! - */ - -configuration { - font: "Noto Sans 12"; - - drun { - display-name: ""; - } - - run { - display-name: ""; - } - - window { - display-name: ""; - hide-active-window: true; - } - - timeout { - delay: 10; - action: "kb-cancel"; - } -} - -* { - bg: #1a1b26FF; - bg-alt: #232433FF; - fg-alt-dim: #ffffff22; - fg: #6a6f87; - fg-alt: #a9b1d6; - width: 100%; - height: 100%; - border: 0; - margin: 0; - padding: 30% 40% 30% 40%; - spacing: 0; -} - -window { - /* transparency: "real"; */ - /* width: 700px; */ - background-color: @fg-alt-dim; -} - -mainbox { - border-radius: 15px; - padding: 0; - children: [inputbar, listview]; - background-color: @bg; -} - - - -inputbar { - padding: 0; - background-color: @bg-alt; - children: [prompt, entry]; - text-color: @fg; -} - -entry { - padding: 0; - background-color: inherit; - padding: 12px 3px; - background-color: @bg; - text-color: @fg; -} - -prompt { - padding: 0; - background-color: inherit; - padding: 12px; - background-color: @bg; - text-color: @fg; -} - -listview { - padding: 0; - lines: 8; - background-color: @bg; - text-color: @fg; -} - -element { - padding: 0; - children: [element-icon, element-text]; - background-color: @bg; -} - -element-icon { - padding: 0; - padding: 10px 10px; - size: 25px; - background-color: @bg; - text-color: @fg; -} - -element-text { - padding: 0; - padding: 10px 0; - background-color: @bg; - text-color: @fg; -} - -element-text selected { - padding: 0; - text-color: @fg-alt; - background-color: @bg-alt; -} - diff --git a/setup.sh b/setup.sh deleted file mode 100755 index 216051e..0000000 --- a/setup.sh +++ /dev/null @@ -1,20 +0,0 @@ -find $PWD -maxdepth 1 -mindepth 0 -exec ln -s '{}' $HOME/.config/ \; -mv $HOME/.config/.zshrc ../.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/spotify-player/app.toml b/spotify-player/app.toml deleted file mode 100644 index 9edea94..0000000 --- a/spotify-player/app.toml +++ /dev/null @@ -1,4 +0,0 @@ -enable_media_control = true -[device] -volume = 100 -audio_cache = true diff --git a/swappy/config b/swappy/config deleted file mode 100644 index da88eb2..0000000 --- a/swappy/config +++ /dev/null @@ -1,10 +0,0 @@ -[Default] -save_dir=$HOME/Pictures/Screenshots -save_filename_format=swappy-%Y%m%d-%H%M%S.png -show_panel=false -line_size=5 -text_size=20 -text_font=sans-serif -paint_mode=brush -early_exit=false -fill_shape=false diff --git a/wofi/style.css b/wofi/style.css deleted file mode 100644 index 381dbdd..0000000 --- a/wofi/style.css +++ /dev/null @@ -1,20 +0,0 @@ -window { - margin: 0px; - background-color: #0f0f17; - border-radius: 10px; - opacity: 0.8; -} - -#inner-box { - background-color: #1a1b26; - margin: 5px; - border: none; - border-radius: 10px; -} - -#outer-box { - background-color: #0f0f17; - margin: 5px; - border: none; - border-radius: 10px; -}