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 3853240..f610716 100644 --- a/.gitignore +++ b/.gitignore @@ -1,11 +1,3 @@ -/nvim/plugged/* -gtk-3.0/bookmarks -gtk-3.0/servers -/fish/fish_variables -fish/fish_variables -fish/*.tmp.* -copyq/copyq.lock -copyq/copyq_geometry.* -copyq/copyq_tab* -nvim/lazy-lock.json -ncspot/*.cbor +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/anyrun/config.ron b/anyrun/config.ron deleted file mode 100644 index 9954bd4..0000000 --- a/anyrun/config.ron +++ /dev/null @@ -1,35 +0,0 @@ -Config( - // `width` and `vertical_offset` use an enum for the value it can be either: - // Absolute(n): The absolute value in pixels - // Fraction(n): A fraction of the width or height of the full screen (depends on exclusive zones and the settings related to them) window respectively - - // How wide the input box and results are. - width: Absolute(800), - - // Where Anyrun is located on the screen: Top, Center - position: Center, - - // How much the runner is shifted vertically - vertical_offset: Absolute(0), - - // Hide match and plugin info icons - hide_icons: false, - - // ignore exclusive zones, f.e. Waybar - ignore_exclusive_zones: false, - - // Layer shell layer: Background, Bottom, Top, Overlay - layer: Overlay, - - // Hide the plugin info panel - hide_plugin_info: false, - - // List of plugins to be loaded by default, can be specified with a relative path to be loaded from the - // `/plugins` directory or with an absolute path to just load the file the path points to. - plugins: [ - "libapplications.so", - "libshell.so", - "librink.so", - "libanyrun_websearch.so" - ], -) diff --git a/anyrun/plugins/libanyrun_websearch.so b/anyrun/plugins/libanyrun_websearch.so deleted file mode 100755 index 956091d..0000000 Binary files a/anyrun/plugins/libanyrun_websearch.so and /dev/null differ diff --git a/anyrun/plugins/libapplications.so b/anyrun/plugins/libapplications.so deleted file mode 100755 index 3a7ab5e..0000000 Binary files a/anyrun/plugins/libapplications.so and /dev/null differ diff --git a/anyrun/plugins/libkidex.so b/anyrun/plugins/libkidex.so deleted file mode 100755 index 75aba92..0000000 Binary files a/anyrun/plugins/libkidex.so and /dev/null differ diff --git a/anyrun/plugins/librink.so b/anyrun/plugins/librink.so deleted file mode 100755 index 58de8f5..0000000 Binary files a/anyrun/plugins/librink.so and /dev/null differ diff --git a/anyrun/plugins/libshell.so b/anyrun/plugins/libshell.so deleted file mode 100755 index e7341cb..0000000 Binary files a/anyrun/plugins/libshell.so and /dev/null differ diff --git a/anyrun/plugins/libsymbols.so b/anyrun/plugins/libsymbols.so deleted file mode 100755 index e1630ea..0000000 Binary files a/anyrun/plugins/libsymbols.so and /dev/null differ diff --git a/anyrun/plugins/libtranslate.so b/anyrun/plugins/libtranslate.so deleted file mode 100755 index 232a238..0000000 Binary files a/anyrun/plugins/libtranslate.so and /dev/null differ diff --git a/anyrun/style.css b/anyrun/style.css deleted file mode 100644 index 43f7385..0000000 --- a/anyrun/style.css +++ /dev/null @@ -1,47 +0,0 @@ - -#window { - border-radius: 10px; - background-color: none; -} - -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: none; - 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; -} diff --git a/anyrun/websearch.ron b/anyrun/websearch.ron deleted file mode 100644 index 67dc035..0000000 --- a/anyrun/websearch.ron +++ /dev/null @@ -1,6 +0,0 @@ -Config ( - prefix_url_map: { - ":g": "https://google.com/search?q=", - ":b": "https://search.brave.com/search?q=", - } -) 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 2430b72..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=true -activate_pastes=true -always_on_top=true -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=true -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.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/dashie.json b/dashie.json deleted file mode 100644 index 7e3e561..0000000 --- a/dashie.json +++ /dev/null @@ -1,491 +0,0 @@ -{ - "version": 1, - "notes": "", - "documentation": "\"This file is a QMK Configurator export. You can import this at . It can also be used directly with QMK's source code.\n\nTo setup your QMK environment check out the tutorial: \n\nYou can convert this file to a keymap.c using this command: `qmk json2c {keymap}`\n\nYou can compile this keymap using this command: `qmk compile {keymap}`\"\n", - "keyboard": "rgbkb/sol3/rev1", - "keymap": "dashie", - "layout": "LAYOUT", - "layers": [ - [ - "KC_ESC", - "KC_1", - "KC_2", - "KC_3", - "KC_4", - "KC_5", - "KC_MINS", - "KC_EQL", - "KC_6", - "KC_7", - "KC_8", - "KC_9", - "KC_0", - "KC_BSPC", - "KC_TAB", - "KC_Q", - "KC_W", - "KC_E", - "KC_R", - "KC_T", - "KC_LBRC", - "KC_RBRC", - "KC_Y", - "KC_U", - "KC_I", - "KC_O", - "KC_P", - "KC_BSLS", - "MO(1)", - "KC_A", - "KC_S", - "KC_D", - "KC_F", - "KC_G", - "KC_LPRN", - "KC_RPRN", - "KC_H", - "KC_J", - "KC_K", - "KC_L", - "KC_SCLN", - "KC_QUOT", - "KC_LSFT", - "KC_Z", - "KC_X", - "KC_C", - "KC_V", - "KC_B", - "KC_LCBR", - "KC_RCBR", - "KC_N", - "KC_M", - "KC_COMM", - "KC_DOT", - "KC_SLSH", - "KC_GRV", - "KC_LCTL", - "MO(4)", - "RGB_TOG", - "KC_LALT", - "KC_LGUI", - "KC_SPC", - "KC_PGDN", - "KC_DEL", - "KC_BSPC", - "KC_PGUP", - "KC_ENT", - "KC_RCTL", - "KC_RALT", - "KC_CAPS", - "KC_HOME", - "KC_RCTL", - "KC_VOLD", - "KC_VOLU", - "KC_VOLD", - "KC_VOLU", - "KC_VOLD", - "KC_VOLU", - "KC_VOLD", - "KC_VOLU", - "KC_VOLD", - "KC_VOLU", - "KC_VOLD", - "KC_VOLU", - "KC_VOLD", - "KC_VOLU", - "KC_MNXT", - "KC_MPLY", - "KC_MPRV", - "KC_VOLD", - "KC_VOLU", - "KC_MNXT", - "KC_MPLY", - "KC_MPRV" - ], - [ - "KC_ESC", - "KC_F1", - "KC_F2", - "KC_F3", - "KC_F4", - "KC_F5", - "KC_F6", - "KC_F7", - "KC_F8", - "KC_F9", - "KC_F10", - "KC_F11", - "KC_F12", - "KC_DEL", - "KC_TRNS", - "KC_MPRV", - "KC_MNXT", - "KC_MPLY", - "KC_MUTE", - "KC_G", - "KC_TRNS", - "KC_TRNS", - "KC_BTN2", - "KC_MS_L", - "KC_MS_D", - "KC_MS_U", - "KC_MS_R", - "KC_BTN1", - "KC_TRNS", - "KC_VOLD", - "KC_VOLU", - "KC_S", - "KC_T", - "KC_D", - "KC_TRNS", - "KC_TRNS", - "KC_H", - "KC_LEFT", - "KC_DOWN", - "KC_UP", - "KC_RGHT", - "KC_TRNS", - "KC_TRNS", - "KC_Z", - "KC_X", - "KC_C", - "KC_V", - "KC_B", - "KC_TRNS", - "KC_TRNS", - "KC_K", - "KC_M", - "KC_COMM", - "KC_DOT", - "KC_SLSH", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_CAPS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS" - ], - [ - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_F1", - "KC_F5", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_Q", - "KC_W", - "KC_E", - "KC_R", - "KC_T", - "KC_F2", - "KC_F6", - "KC_Y", - "KC_U", - "KC_I", - "KC_O", - "KC_P", - "KC_TRNS", - "KC_TRNS", - "KC_A", - "KC_S", - "KC_D", - "KC_F", - "KC_G", - "KC_F3", - "KC_F7", - "KC_H", - "KC_J", - "KC_K", - "KC_L", - "KC_SCLN", - "KC_TRNS", - "KC_TRNS", - "KC_Z", - "KC_X", - "KC_C", - "KC_V", - "KC_B", - "KC_F4", - "KC_F8", - "KC_N", - "KC_M", - "KC_COMM", - "KC_DOT", - "KC_SLSH", - "KC_TRNS", - "KC_TRNS", - "KC_NO", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS" - ], - [ - "KC_TRNS", - "KC_F1", - "KC_F2", - "KC_F3", - "KC_F4", - "KC_F5", - "KC_F11", - "KC_F12", - "KC_F6", - "KC_F7", - "KC_F8", - "KC_F9", - "KC_F10", - "KC_TRNS", - "KC_TRNS", - "KC_HOME", - "KC_UP", - "KC_END", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_HOME", - "KC_UP", - "KC_END", - "KC_PSCR", - "KC_PGUP", - "KC_TRNS", - "KC_LEFT", - "KC_DOWN", - "KC_RGHT", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_LEFT", - "KC_DOWN", - "KC_RGHT", - "KC_INS", - "KC_PGDN", - "KC_TRNS", - "ANY(AU_TOGG)", - "ANY(MU_TOGG)", - "ANY(MU_NEXT)", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "ANY(CK_TOGG)", - "ANY(CK_UP)", - "ANY(CK_DOWN)", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_MPLY", - "KC_MNXT", - "KC_MUTE", - "KC_VOLD", - "KC_VOLU", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS" - ], - [ - "KC_TRNS", - "KC_F1", - "KC_F2", - "KC_F3", - "KC_F4", - "KC_F5", - "KC_F11", - "KC_F12", - "KC_F6", - "KC_F7", - "KC_F8", - "KC_F9", - "KC_F10", - "KC_TRNS", - "KC_TRNS", - "RGB_SAD", - "RGB_VAI", - "RGB_SAI", - "QK_BOOT", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_P7", - "KC_P8", - "KC_P9", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "RGB_HUD", - "RGB_VAD", - "RGB_HUI", - "KC_NO", - "KC_TRNS", - "ANY(DM_REC1)", - "KC_TRNS", - "KC_TRNS", - "KC_P4", - "KC_P5", - "KC_P6", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "RGB_SPD", - "KC_TRNS", - "RGB_SPI", - "KC_TRNS", - "KC_TRNS", - "ANY(DM_RSTP)", - "KC_TRNS", - "KC_TRNS", - "KC_P1", - "KC_P2", - "KC_P3", - "KC_TRNS", - "DF(2)", - "KC_TRNS", - "RGB_RMOD", - "RGB_TOG", - "RGB_MOD", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_P0", - "KC_PDOT", - "KC_NUM", - "DF(0)", - "DF(1)", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS", - "KC_TRNS" - ] - ], - "author": "" -} \ No newline at end of file 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/hyprdock/hyprdock.toml b/docs/src/SUMMARY.md similarity index 100% rename from hyprdock/hyprdock.toml rename to docs/src/SUMMARY.md diff --git a/docs/src/coding.md b/docs/src/coding.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/src/conf.md b/docs/src/conf.md new file mode 100755 index 0000000..aa51f0b --- /dev/null +++ b/docs/src/conf.md @@ -0,0 +1 @@ +# This file handles the basic configuration for settings like language, timezone, input, cpu etc. diff --git a/docs/src/logo.svg b/docs/src/logo.svg new file mode 100644 index 0000000..08baa43 --- /dev/null +++ b/docs/src/logo.svg @@ -0,0 +1,238 @@ + + + +DashNixDashNix diff --git a/docs/src/mods.md b/docs/src/mods.md new file mode 100755 index 0000000..df7fe4f --- /dev/null +++ b/docs/src/mods.md @@ -0,0 +1 @@ +# This file handles configuration of individual modules. diff --git a/environment.d/envvars.conf b/environment.d/envvars.conf deleted file mode 100644 index 1c04120..0000000 --- a/environment.d/envvars.conf +++ /dev/null @@ -1,9 +0,0 @@ -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 -EDITOR="neovide --novsync --nofork" -SUDO_EDITOR="neovide --novsync --nofork" -PKG_CONFIG_PATH=/usr/local/lib/pkgconfig -LD_LIBRARY_PATH=/usr/local/lib -SCRIPTS=$HOME/.config/scripts 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 20c0c5b..0000000 --- a/fish/config.fish +++ /dev/null @@ -1,140 +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' -alias nv='neovide --novsync --nofork' -alias cr='cargo run' -alias grep='rg' -alias cat='bat' -alias find='fd' -alias rm='rip' - -# 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 0ea417d..0000000 --- a/gtk-3.0/bookmarks +++ /dev/null @@ -1,14 +0,0 @@ -file:///home/dashie/gits/ReSet -file:///home/dashie/Documents -file:///home/dashie/Pictures -file:///home/dashie/Downloads -file:///home/dashie/gits -file:///home/dashie/gits/ost-5semester ost-5semester -file:///home/dashie/gits/ost-4semester -file:///home/dashie/gits/ost-3semester -file:///home/dashie/Documents/OST%205.semester OST 5.semester -file:///home/dashie/Documents/OST%204.semester -file:///drive2 -file:///drive2/animu -file:///home/dashie/tako -file:///home/dashie/ReSet diff --git a/gtk-3.0/gtk.css b/gtk-3.0/gtk.css deleted file mode 100644 index 1aa5d77..0000000 --- a/gtk-3.0/gtk.css +++ /dev/null @@ -1,96 +0,0 @@ -/* -Generated with Gradience - -Issues caused by theming should be reported to Gradience repository, and not to upstream - -https://github.com/GradienceTeam/Gradience -*/ - -@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 secondary_sidebar_backdrop_color #1a1b26; -@define-color secondary_sidebar_shade_color rgba(0,0,0,0.5); -@define-color sidebar_backdrop_color #1a1b26; -@define-color sidebar_shade_color rgba(0,0,0,0.5); -@define-color sidebar_bg_color #1a1b26; -@define-color sidebar_fg_color #c0caf5; -@define-color secondary_sidebar_bg_color #1a1b26; -@define-color secondary_sidebar_fg_color #c0caf5; -@define-color thumbnail_bg_color #1a1b26; -@define-color thumbnail_fg_color #c0caf5; -@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 1f6ab50..0000000 --- a/gtk-3.0/gtk.css.bak +++ /dev/null @@ -1,96 +0,0 @@ -/* -Generated with Gradience - -Issues caused by theming should be reported to Gradience repository, and not to upstream - -https://github.com/GradienceTeam/Gradience -*/ - -@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 secondary_sidebar_backdrop_color #1a1b26; -@define-color secondary_sidebar_shade_color #c0caf5; -@define-color sidebar_backdrop_color #1a1b26; -@define-color sidebar_shade_color #c0caf5; -@define-color sidebar_bg_color #1a1b26; -@define-color sidebar_fg_color #c0caf5; -@define-color secondary_sidebar_bg_color #1a1b26; -@define-color secondary_sidebar_fg_color #c0caf5; -@define-color thumbnail_bg_color #1a1b26; -@define-color thumbnail_fg_color #c0caf5; -@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 b/gtk-4.0/gtk.css deleted file mode 100644 index 3d750d1..0000000 --- a/gtk-4.0/gtk.css +++ /dev/null @@ -1,104 +0,0 @@ -/* -Generated with Gradience - -Issues caused by theming should be reported to Gradience repository, and not to upstream - -https://github.com/GradienceTeam/Gradience -*/ - -@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 secondary_sidebar_backdrop_color #1a1b26; -@define-color secondary_sidebar_shade_color rgba(0,0,0,0.5); -@define-color sidebar_backdrop_color #1a1b26; -@define-color sidebar_shade_color rgba(0,0,0,0.5); -@define-color sidebar_bg_color #1a1b26; -@define-color sidebar_fg_color #c0caf5; -@define-color secondary_sidebar_bg_color #1a1b26; -@define-color secondary_sidebar_fg_color #c0caf5; -@define-color thumbnail_bg_color #1a1b26; -@define-color thumbnail_fg_color #c0caf5; -@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; -/* -Generated with Gradience - -Issues caused by theming should be reported to Gradience repository, and not to upstream - -https://github.com/GradienceTeam/Gradience -*/ - diff --git a/gtk-4.0/gtk.css.bak b/gtk-4.0/gtk.css.bak deleted file mode 100644 index 1f6ab50..0000000 --- a/gtk-4.0/gtk.css.bak +++ /dev/null @@ -1,96 +0,0 @@ -/* -Generated with Gradience - -Issues caused by theming should be reported to Gradience repository, and not to upstream - -https://github.com/GradienceTeam/Gradience -*/ - -@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 secondary_sidebar_backdrop_color #1a1b26; -@define-color secondary_sidebar_shade_color #c0caf5; -@define-color sidebar_backdrop_color #1a1b26; -@define-color sidebar_shade_color #c0caf5; -@define-color sidebar_bg_color #1a1b26; -@define-color sidebar_fg_color #c0caf5; -@define-color secondary_sidebar_bg_color #1a1b26; -@define-color secondary_sidebar_fg_color #c0caf5; -@define-color thumbnail_bg_color #1a1b26; -@define-color thumbnail_fg_color #c0caf5; -@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 1205346..0000000 --- a/gtk-4.0/servers +++ /dev/null @@ -1,25 +0,0 @@ - - - - Windows shares on 192.168.1.4 - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/gtk-4.0/settings.ini b/gtk-4.0/settings.ini deleted file mode 100644 index d289a6a..0000000 --- a/gtk-4.0/settings.ini +++ /dev/null @@ -1,3 +0,0 @@ -[Settings] -gtk-application-prefer-dark-theme=true -gtk-hint-font-metrics=1 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/conf/autostart.conf b/hypr_desktop/conf/autostart.conf deleted file mode 100644 index 8da8314..0000000 --- a/hypr_desktop/conf/autostart.conf +++ /dev/null @@ -1,9 +0,0 @@ -#autostart programs -exec-once=hyprpaper -exec-once=ironbar -exec-once=firefox -exec-once=streamdeck -n -exec-once=copyq --start-server -exec-once=/usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1 -exec-once=nextcloud --background -exec-once=oxinoti diff --git a/hypr_desktop/conf/env.conf b/hypr_desktop/conf/env.conf deleted file mode 100644 index 092f811..0000000 --- a/hypr_desktop/conf/env.conf +++ /dev/null @@ -1,21 +0,0 @@ -# -#fix the fucking portal -exec-once=systemctl --user import-environment -exec-once=dbus-update-activation-environment --systemd --all -# - -env=GTK_CSD,0 -env=TERM,"kitty /bin/fish" -env=XDG_CURRENT_DESKTOP=Hyprland -env=XDG_SESSION_TYPE=wayland -env=XDG_SESSION_DESKTOP=Hyprland -env=QT_QPA_PLATFORM,wayland -env=QT_WAYLAND_FORCE_DPI,96 -env=QT_AUTO_SCREEN_SCALE_FACTOR,0 -env=QT_WAYLAND_DISABLE_WINDOWDECORATION,1 -env=QT_SCALE_FACTOR,1 -# env=XCURSOR_SIZE,24 -env=PKG_CONFIG_PATH,/usr/local/lib/pkgconfig -env=LD_LIBRARY_PATH,/usr/local/lib -env=EDITOR,"neovide --novsync --nofork" - diff --git a/hypr_desktop/conf/general.conf b/hypr_desktop/conf/general.conf deleted file mode 100644 index 19f6b32..0000000 --- a/hypr_desktop/conf/general.conf +++ /dev/null @@ -1,56 +0,0 @@ - -input { - kb_layout=diaeresis - 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=3 3 3 3 - gaps_out=2 5 5 5 - 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=4 -} - -animations { - enabled=1 - animation=windowsMove,1,4,default - animation=windows,1,7,default,popin 70% - animation=border,1,10,default - animation=fade,1,10,default - animation=workspaces,1,6,default -} - -dwindle { - preserve_split=true - pseudotile=0 - permanent_direction_override=false -} - -gestures { - workspace_swipe=yes -} - -misc { - vfr=true - vrr = 1 - animate_manual_resizes=1 - enable_swallow=true - disable_splash_rendering = true - disable_hyprland_logo = true - swallow_regex=^(.*)(kitty)(.*)$ - layers_hog_keyboard_focus=false - } diff --git a/hypr_desktop/conf/keybinds.conf b/hypr_desktop/conf/keybinds.conf deleted file mode 100644 index 88168e2..0000000 --- a/hypr_desktop/conf/keybinds.conf +++ /dev/null @@ -1,98 +0,0 @@ -# binds -bind=SUPER,S,exec,grim -g "$(slurp)" - | wl-copy -bind=SUPERSHIFTALT,S,exec, grim -g "$(slurp)" $HOME/gits/ost-5semester/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)" - | satty -f - -bind=SUPERCONTROLSHIFT,S,exec,grim -c -g "0,0 3440x1440" - | wl-copy -bind=SUPER,F,exec,firefox -bind=SUPER,T,exec,kitty -1 -bind=SUPER,Q,killactive, -bind=SUPERSHIFTALT,M,exit, -bind=SUPER,E,exec,nautilus -w -bind=SUPER,N,exec,neovide --novsync -bind=SUPER,M,exec,oxidash -bind=SUPER,V,togglefloating, -bind=SUPER,B,fullscreen, -bind=SUPER,R,exec,anyrun -bind=SUPER,C,togglesplit -bind=SUPER,G,exec,oxicalc -bind=SUPERSHIFT,G,exec,gamelock -bind=SUPERSHIFT,L,exec, playerctl -a pause & swaylock -c 000000 & systemctl suspend -bind=,XF86AudioMute,exec,pactl $HOME/.config/scripts/audio_control.sh mute -bind=,XF86AudioLowerVolume,exec, $HOME/.config/scripts/audio_control.sh sink -5% -bind=,XF86AudioRaiseVolume,exec, $HOME/.config/scripts/audio_control.sh sink +5% -bind=,XF86AudioPlay,exec, playerctl play-pause -bind=,XF86AudioNext,exec, playerctl next -bind=,XF86AudioPrev,exec, playerctl previous -bind=,XF86MonBrightnessDown,exec, $HOME/.config/scripts/change-brightness brightness 10%- -bind=,XF86MonBrightnessUp,exec, $HOME/.config/scripts/change-brightness brightness +10% -bind=SUPER,D,exec,oxishut -bind=SUPER,A,exec,copyq toggle -bind=SUPERSHIFT,W,togglespecialworkspace -# bind=SUPER,W,movetoworkspace,special - - -binde=SUPER,J,movefocus,l -binde=SUPER,semicolon,movefocus,r -binde=SUPER,L,movefocus,u -binde=SUPER,K,movefocus,d - -binde=SUPER,U,resizeactive,-20 0 -binde=SUPER,P,resizeactive,20 0 -binde=SUPER,O,resizeactive,0 -20 -binde=SUPER,I,resizeactive,0 20 - -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 - -bind=SUPERALT,j,layoutmsg,preselect l -bind=SUPERALT,k,layoutmsg,preselect d -bind=SUPERALT,l,layoutmsg,preselect u -bind=SUPERALT,semicolon,layoutmsg,preselect r -bind=SUPERALT,h,layoutmsg,preselect n - -bindm=SUPER,mouse:272,movewindow -bindm=SUPER,mouse:273,resizewindow - -#binds for debug testing -# 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)$ - diff --git a/hypr_desktop/conf/monitor.conf b/hypr_desktop/conf/monitor.conf deleted file mode 100644 index e46ea69..0000000 --- a/hypr_desktop/conf/monitor.conf +++ /dev/null @@ -1,22 +0,0 @@ -monitor=DP-3,2560x1440@165,-2560x0,1 -monitor=DP-1,3440x1440@180,0x0,1 -monitor=DP-2,1920x1200@60,3440x0,1 -monitor=DP-2,transform,1 -monitor=,highrr,auto,1 - -workspace=DP-3,1 -workspace=DP-1,2 -workspace=DP-2,3 - -workspace = 2,monitor:DP-1 -workspace = 4,monitor:DP-1 -workspace = 6,monitor:DP-1 -workspace = 8,monitor:DP-1 -workspace = 9,monitor:DP-1 -workspace = 10,monitor:DP-1 - -workspace = 1,monitor:DP-3 -workspace = 5,monitor:DP-3 -workspace = 3,monitor:DP-2 -workspace = 7,monitor:DP-2 - diff --git a/hypr_desktop/conf/plugins.conf b/hypr_desktop/conf/plugins.conf deleted file mode 100644 index f863b04..0000000 --- a/hypr_desktop/conf/plugins.conf +++ /dev/null @@ -1,12 +0,0 @@ -plugin = $HOME/.config/hypr/plugins/libhycov.so - -plugin { - hycov { - overview_gappo = 30 #gas width from screem - overview_gappi = 10 #gas width from clients - hotarea_size = 0 #hotarea size in bottom left,10x10 - enable_hotarea = 0 # enable mouse cursor hotarea - } -} - -bind = SUPER,W,hycov:toggleoverview diff --git a/hypr_desktop/conf/rules.conf b/hypr_desktop/conf/rules.conf deleted file mode 100644 index 9e41b8f..0000000 --- a/hypr_desktop/conf/rules.conf +++ /dev/null @@ -1,15 +0,0 @@ -# window rules -windowrule=tile,^(.*)(Spotify)(.*)$ -windowrule=float,^(.*)(OxiCalc)(.*)$ -windowrule=float,^(.*)(winecfg.exe)(.*)$ -windowrule=float,^(.*)(speed.exe)(.*)$ -windowrule=float,^(.*)(copyq)(.*)$ -# windowrule=center,^(.*)(gnome)(.*)$ -# windowrule=size 1200 800,^(org.gnome.NautilusPreviewer)$ -windowrule=center,^(.*)(swappy)(.*)$ -windowrule=float,title:^(.*)(Spirit)(.*)$ -windowrule=float,title:^(.*)(reset)(.*)$ -windowrule=workspace 10 silent,^(.*)(steam)(.*)$ -windowrule=workspace 9 silent,^(.*)(dota)(.*)$ -windowrule=workspace 9 silent,^(.*)(battlebits)(.*)$ -windowrule=workspace 9 silent,^(.*)(aoe)(.*)$ diff --git a/hypr_desktop/hyprgreet.conf b/hypr_desktop/hyprgreet.conf deleted file mode 100644 index 3dc2214..0000000 --- a/hypr_desktop/hyprgreet.conf +++ /dev/null @@ -1,17 +0,0 @@ -exec-once=gsettings set org.gnome.desktop.interface gtk-theme 'adw-gtk3-dark' -exec-once=gsettings set org.gnome.desktop.interface color-scheme 'prefer-dark' - -monitor=DP-1,3440x1440@180,0x0,1 -monitor=DP-2,disable -monitor=DP-3,disable - -input { - force_no_accel = true -} - -misc { - disable_splash_rendering = true - disable_hyprland_logo = true -} - -exec-once=regreet --config /home/dashie/.config/hypr/regreet.toml --style /home/dashie/.config/gtk-3.0/gtk.css; hyprctl dispatch exit diff --git a/hypr_desktop/hyprland.conf b/hypr_desktop/hyprland.conf deleted file mode 100644 index 7ee1b2c..0000000 --- a/hypr_desktop/hyprland.conf +++ /dev/null @@ -1,7 +0,0 @@ -source=/home/dashie/.config/hypr/conf/env.conf -#source=/home/dashie/.config/hypr/conf/plugins.conf -source=/home/dashie/.config/hypr/conf/monitor.conf -source=/home/dashie/.config/hypr/conf/general.conf -source=/home/dashie/.config/hypr/conf/rules.conf -source=/home/dashie/.config/hypr/conf/keybinds.conf -source=/home/dashie/.config/hypr/conf/autostart.conf diff --git a/hypr_desktop/hyprlandd.conf b/hypr_desktop/hyprlandd.conf deleted file mode 100644 index be972a5..0000000 --- a/hypr_desktop/hyprlandd.conf +++ /dev/null @@ -1,15 +0,0 @@ -bind=SUPERALT,T,exec,kitty - -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 a3a340b..0000000 --- a/hypr_desktop/hyprpaper.conf +++ /dev/null @@ -1,8 +0,0 @@ - -# wallpaper -preload = /home/dashie/Pictures/backgrounds/tree_1200.jpg -preload = /home/dashie/Pictures/backgrounds/pxfuel.jpg -preload = /home/dashie/Pictures/backgrounds/pxfuel(3).jpg -wallpaper = DP-2,/home/dashie/Pictures/backgrounds/tree_1200.jpg -wallpaper = DP-1,/home/dashie/Pictures/backgrounds/pxfuel.jpg -wallpaper = DP-3,/home/dashie/Pictures/backgrounds/pxfuel(3).jpg diff --git a/hypr_desktop/plugins/libhycov.so b/hypr_desktop/plugins/libhycov.so deleted file mode 100755 index a02ff32..0000000 Binary files a/hypr_desktop/plugins/libhycov.so and /dev/null differ diff --git a/hypr_desktop/regreet.toml b/hypr_desktop/regreet.toml deleted file mode 100644 index 8874886..0000000 --- a/hypr_desktop/regreet.toml +++ /dev/null @@ -1,17 +0,0 @@ -[background] -# path = "/usr/share/backgrounds/greeter.jpg" -fit = "Contain" - -[env] -PATH = "/home/dashie/.config/:$HOME/.local/bin:/home/dashie/.cargo/bin:$PATH" -QT_QPA_PLATFORMTHEME = "qt5ct" - -[GTK] -application_prefer_dark_theme = true -cursor_theme_name = "Adwaita" -icon_theme_name = "Adwaita" -theme_name = "adw-gtk3" - -[commands] -reboot = ["systemctl", "reboot"] -poweroff = ["systemctl", "poweroff"] diff --git a/hypr_laptop/hyprdock.toml b/hypr_laptop/hyprdock.toml deleted file mode 100644 index ba5bae2..0000000 --- a/hypr_laptop/hyprdock.toml +++ /dev/null @@ -1 +0,0 @@ -suspend_command = 'systemctl suspend' diff --git a/hypr_laptop/hyprland.conf b/hypr_laptop/hyprland.conf deleted file mode 100644 index 6e4c05f..0000000 --- a/hypr_laptop/hyprland.conf +++ /dev/null @@ -1,195 +0,0 @@ -# -#fix the fucking portal -exec-once=systemctl --user import-environment -exec-once=dbus-update-activation-environment --all -# - -env = PATH,/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl:$HOME/.local/bin:$HOME/.cargo/bin:$PATH - -monitor=eDP-1,1920x1080@144,0x0,1 -monitor=,highres,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 -} - -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 - animate_manual_resizes=true - animate_mouse_windowdragging=false - 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,^(.*)(OxiCalc)(.*)$ -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=SUPERALTSHIFT,M,exit, -bind=SUPERSHIFT,M,exec,oxidash --css /home/dashie/gits/OxiDash/style.css -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,R,exec,anyrun -bind=SUPER,C,togglesplit -bind=SUPER,B,fullscreen -bind=SUPER,G,exec, oxicalc -bind=SUPERSHIFT,equal,exec, hyprdock --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, oxishut --css /home/dashie/gits/OxiShut/style.css -bind=,Print,exec, grim - | wl-copy -bind=SUPER,A,exec,copyq toggle -bind=SUPERSHIFT,Y,exec, $HOME/.config/eww/scripts/monitor.sh extend -bind=SUPERSHIFT,H,exec, $HOME/.config/eww/scripts/monitor.sh mirror -bind=SUPERSHIFT,P,exec,hyprpicker | wl-copy - - -# bind=SUPERALT,H,pass,^(wlroots)$ -# bind=SUPERALT,left,pass,^(wlroots)$ -# bind=SUPERALT,right,pass,^(wlroots)$ -# bind=SUPERALT,up,pass,^(wlroots)$ -# bind=SUPERALT,down,pass,^(wlroots)$ - -bind=SUPER,J,movefocus,l -bind=SUPER,semicolon,movefocus,r -bind=SUPER,L,movefocus,u -bind=SUPER,K,movefocus,d - -binde=SUPER,U,resizeactive,-20 0 -binde=SUPER,P,resizeactive,20 0 -binde=SUPER,O,resizeactive,0 -20 -binde=SUPER,I,resizeactive,0 20 - -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 - -#autostart programs -exec-once=hyprpaper -exec-once=nheko -exec-once=firefox -exec-once=nextcloud -exec-once=kitty ncspot -exec-once=oxinoti --css /home/dashie/gits/oxinoti/style.css -exec-once = copyq --start-server -exec-once = hyprdock server -exec-once=/usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1 -exec-once=ironbar 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/hyprload.toml b/hypr_laptop/hyprload.toml deleted file mode 100644 index a934db7..0000000 --- a/hypr_laptop/hyprload.toml +++ /dev/null @@ -1,5 +0,0 @@ -plugins = [ - # ... - "outfoxxed/hy3", - # ... -] 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/hyprdock/monitor_configs/196440656454035672.json b/hyprdock/monitor_configs/196440656454035672.json deleted file mode 100644 index d608e38..0000000 --- a/hyprdock/monitor_configs/196440656454035672.json +++ /dev/null @@ -1,79 +0,0 @@ -[{ - "id": 0, - "name": "DP-1", - "description": "ASUSTek COMPUTER INC XG349C (DP-1)", - "make": "ASUSTek COMPUTER INC", - "model": "XG349C", - "serial": "", - "width": 3440, - "height": 1440, - "refreshRate": 179.998993, - "x": 2560, - "y": 0, - "activeWorkspace": { - "id": 2, - "name": "2" - }, - "specialWorkspace": { - "id": 0, - "name": "" - }, - "reserved": [0, 30, 0, 0], - "scale": 1.00, - "transform": 0, - "focused": true, - "dpmsStatus": true, - "vrr": true -},{ - "id": 1, - "name": "DP-2", - "description": "Lenovo Group Limited LEN LT2452pwC 0x33344B41 (DP-2)", - "make": "Lenovo Group Limited", - "model": "LEN LT2452pwC", - "serial": "0x33344B41", - "width": 1920, - "height": 1200, - "refreshRate": 59.950001, - "x": 6000, - "y": 0, - "activeWorkspace": { - "id": 3, - "name": "3" - }, - "specialWorkspace": { - "id": 0, - "name": "" - }, - "reserved": [0, 0, 0, 0], - "scale": 1.00, - "transform": 1, - "focused": false, - "dpmsStatus": true, - "vrr": false -},{ - "id": 2, - "name": "DP-3", - "description": "ASUSTek COMPUTER INC ROG PG278QR #ASOWXFZDWU/d (DP-3)", - "make": "ASUSTek COMPUTER INC", - "model": "ROG PG278QR", - "serial": "#ASOWXFZDWU/d", - "width": 2560, - "height": 1440, - "refreshRate": 165.000000, - "x": 0, - "y": 0, - "activeWorkspace": { - "id": 1, - "name": "1" - }, - "specialWorkspace": { - "id": 0, - "name": "" - }, - "reserved": [0, 0, 0, 0], - "scale": 1.00, - "transform": 0, - "focused": false, - "dpmsStatus": true, - "vrr": false -}] diff --git a/ironbar/config.toml b/ironbar/config.toml deleted file mode 100644 index b0423ae..0000000 --- a/ironbar/config.toml +++ /dev/null @@ -1,32 +0,0 @@ -[monitors.DP-1] -end = [ - { type = "sys_info", format = [ - " {memory_percent}", - ], interval.memory = 30, class = "memory-usage" }, - { type = "custom", bar = [ - { type = "button", class = "popup-button", label = "", on_click = "popup:toggle" }, - ], class = "popup-button-box", popup = [ - { type = "box", orientation = "vertical", class = "audio-box", widgets = [ - { type = "box", orientation = "horizontal", widgets = [ - { type = "button", class = "audio-button", label = "", on_click = "!/home/dashie/.config/eww/scripts/audio_control.sh bluetooth" }, - { type = "button", class = "audio-button", label = "󰋋", on_click = "!/home/dashie/.config/eww/scripts/audio_control.sh internal" }, - ], class = "audio-button-box" }, - { type = "label", label = "Output" }, - { type = "slider", class = "audio-slider", step = 1.0, length = 200, value = "pactl get-sink-volume @DEFAULT_SINK@ | awk -F'/' '{ print $2 }' | tr -d ' %'", on_change = "!pactl set-sink-volume @DEFAULT_SINK@ $0%" }, - { type = "label", label = "Input" }, - { type = "slider", class = "audio-slider", step = 1.0, length = 200, value = "pactl get-source-volume @DEFAULT_SOURCE@ | awk -F'/' '{ print $2 }' | tr -d ' %'", on_change = "!pactl set-source-volume @DEFAULT_SOURCE@ $0%" }, - ] }, - ] }, - { type = "custom", bar = [ - { type = "button", class = "popup-button", label = "", on_click = "!oxidash --css /home/dashie/gits/oxidash/style.css" }, - ], class = "popup-button-box" }, - { type = "clock", format = "%I:%M", format_popup = "%I:%M:%S", locale = "en_US" }, - { type = "tray" }, -] -position = "top" -height = 10 -anchor_to_edges = true -start = [{ type = "workspaces", all_monitors = true }] -center = [ - { type = "focused", show_icon = true, show_title = true, icon_size = 20, truncate = "end" }, -] diff --git a/ironbar/style.css b/ironbar/style.css deleted file mode 100644 index a7c244b..0000000 --- a/ironbar/style.css +++ /dev/null @@ -1,132 +0,0 @@ -@import url("/home/dashie/.config/gtk-3.0/gtk.css"); - -* { - color: #71bbe6; - padding: 0px; - margin: 0px; -} - -.background { - background-color: rgba(0, 0, 0, 0); -} - -.workspaces { - margin: 2px 0px 0px 5px; - border-radius: 10px; - /* background-color: #2b2c3b; */ - background-color: #1E1E2E; - padding: 2px 5px 2px 5px; -} - -.workspaces .item { - margin: 0px 3px 0px 3px; - font-size: 13px; - border-radius: 100%; - padding: 0px 2px 0px 3px; - background-color: rgba(0, 0, 0, 0); -} - -.workspaces .item:hover { - background-color: #3e4152; -} - -.workspaces .item.focused { - background-color: #3e4152; -} - -.audio-box { - padding: 2em; - background-color: #1E1E2E; - border-radius: 5px; -} - -.audio-slider { - padding: 5px; - margin: 5px; -} - -.audio-button { - padding: 5px 10px 5px 10px; - margin: 0px 1em 20px 1em; - border-radius: 100%; - font-size: 17px; -} - -.audio-button-box { - padding: 0px 2.5em 0px 2.5em; -} - -.focused { - /* margin: 2px 0px 0px 0px; */ - padding: 0px 5px 0px 5px; - /* background-color: 1a1b26; */ - background-color: #1E1E2E; - font-size: 17px; - border-radius: 10px; -} - -#bar #end { - margin: 0px 5px 0px 0px; - padding: 0px 5px 0px 5px; - background-color: #1E1E2E; - border-radius: 10px; -} - -.popup-button { - padding: 0px 5px 0px 3px; - margin: 0em 3px; - border-radius: 100%; - font-size: 13px; - background-color: #1E1E2E; -} - -.popup-button-box { - padding: 2px 0px 2px 0px; -} - -.clock { - padding: 0px 5px 0px 5px; - font-size: 17px; - background-color: #1E1E2E; -} - -.clock:hover { - background-color: #3e4152; -} - -.custom button { - background-color: #1E1E2E; -} - -.custom button:hover { - background-color: #3e4152; -} - -.memory-usage { - font-size: 15px; - margin: 0px 5px 0px 0px; -} - -.memory-usage:hover { - background-color: #3e4152; -} - -.popup-clock { - background-color: #1E1E2E; - border-radius: 5px; - padding: 2px 8px 10px 8px; -} - -.popup-clock .calendar-clock { - font-size: 2.5em; - padding-bottom: 0.1em; -} - -.popup-clock .calendar { - border-radius: 5px; - font-size: 1.05em; -} - -.popup-clock .calendar:selected { - background-color: #3e4152; -} 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/kanata.kbd b/kanata.kbd deleted file mode 100644 index 51dcbe6..0000000 --- a/kanata.kbd +++ /dev/null @@ -1,37 +0,0 @@ -(deflocalkeys-linux - ü 186 - ö 192 - ´ 221 - ä 226 -) - -(defalias - umalt (layer-while-held umlaut) -) - -(defsrc - esc f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12 ins del - grv 1 2 3 4 5 6 7 8 9 0 - = bspc - tab q w e r t y u i o p [ ] \ - caps a s d f g h j k l ; ' ret - lsft z x c v b n m , . / rsft up - lctl lmet lalt spc ralt rmet rctl left down rght -) - -(deflayer default - esc f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12 ins del - grv 1 2 3 4 5 6 7 8 9 0 - = bspc - tab q w e r t y u i o p [ ] \ - caps a s d f g h j k l ; ' ret - lsft z x c v b n m , . / rsft up - lctl lmet lalt spc @umalt rmet rctl left down rght -) - -(deflayer umlaut - esc f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12 ins del - grv 1 2 3 4 5 6 7 8 9 0 - = bspc - tab ä ö ü ` t y u i o p [ ] \ - caps a s d f g h j k l ; ' ret - lsft z x c v b n m , . / rsft up - lctl lmet lalt spc ralt rmet rctl left down rght -) 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 e73265e..0000000 --- a/kitty/kitty.conf +++ /dev/null @@ -1,61 +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 -sync_with_monitor no - -font_family JetBrainsMono Nerd Font Mono -bold_font JetBrainsMono Nerd Font Mono Extra Bold -italic_font JetBrainsMono Nerd Font Mono Extra Italic -bold_italic_font JetBrainsMono Nerd Font Mono Extra Bold Italic - -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/mimeapps.list b/mimeapps.list deleted file mode 100644 index d7eed17..0000000 --- a/mimeapps.list +++ /dev/null @@ -1,64 +0,0 @@ -[Default Applications] -x-scheme-handler/http=firefox.desktop -x-scheme-handler/https=firefox.desktop -x-scheme-handler/chrome=firefox.desktop -text/html=firefox.desktop -application/x-extension-htm=firefox.desktop -application/x-extension-html=firefox.desktop -application/x-extension-shtml=firefox.desktop -application/xhtml+xml=firefox.desktop -application/x-extension-xhtml=firefox.desktop -application/x-extension-xht=firefox.desktop -x-scheme-handler/mailto=userapp-Thunderbird-UUM0S1.desktop -message/rfc822=userapp-Thunderbird-UUM0S1.desktop -x-scheme-handler/mid=userapp-Thunderbird-UUM0S1.desktop -x-scheme-handler/webcal=userapp-Thunderbird-5EC1S1.desktop -text/calendar=userapp-Thunderbird-5EC1S1.desktop -application/x-extension-ics=userapp-Thunderbird-5EC1S1.desktop -x-scheme-handler/webcals=userapp-Thunderbird-5EC1S1.desktop -image/jpeg=swappy.desktop -image/png=swappy.desktop -text/markdown=neovide.desktop -text/x-tex=neovide.desktop -text/x-csrc=neovide.desktop -text/x-chdr=neovide.desktop -text/x-c++src=neovide.desktop -text/x-cmake=neovide.desktop -application/vnd.oasis.opendocument.spreadsheet=libreoffice-calc.desktop -text/x-python=nvim.desktop -image/svg+xml=org.inkscape.Inkscape.desktop -application/vnd.openxmlformats-officedocument.presentationml.presentation=libreoffice-impress.desktop -application/vnd.openxmlformats-officedocument.wordprocessingml.document=libreoffice-writer.desktop -text/csv=libreoffice-calc.desktop -application/pdf=org.pwmt.zathura.desktop - -[Added Associations] -x-scheme-handler/http=firefox.desktop; -x-scheme-handler/https=firefox.desktop; -x-scheme-handler/chrome=firefox.desktop; -text/html=firefox.desktop; -application/x-extension-htm=firefox.desktop; -application/x-extension-html=firefox.desktop; -application/x-extension-shtml=firefox.desktop; -application/xhtml+xml=firefox.desktop; -application/x-extension-xhtml=firefox.desktop; -application/x-extension-xht=firefox.desktop; -application/pdf=org.gnome.Evince.desktop;org.pwmt.zathura.desktop; -x-scheme-handler/mailto=userapp-Thunderbird-UUM0S1.desktop; -x-scheme-handler/mid=userapp-Thunderbird-UUM0S1.desktop; -x-scheme-handler/webcal=userapp-Thunderbird-5EC1S1.desktop; -x-scheme-handler/webcals=userapp-Thunderbird-5EC1S1.desktop; -application/gzip=com.github.xournalpp.xournalpp.desktop; -image/png=com.github.maoschanz.drawing.desktop;swappy.desktop; -text/markdown=firefox.desktop;neovide.desktop; -text/x-tex=neovide.desktop; -text/x-csrc=neovide.desktop; -text/x-chdr=neovide.desktop; -text/x-c++src=neovide.desktop; -text/x-cmake=neovide.desktop; -application/vnd.oasis.opendocument.spreadsheet=libreoffice-calc.desktop; -text/x-python=nvim.desktop; -image/svg+xml=krita_svg.desktop;org.inkscape.Inkscape.desktop; -application/vnd.openxmlformats-officedocument.presentationml.presentation=libreoffice-impress.desktop; -application/vnd.openxmlformats-officedocument.wordprocessingml.document=libreoffice-writer.desktop; -text/csv=libreoffice-calc.desktop; 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/ncspot/config.toml b/ncspot/config.toml deleted file mode 100644 index bd51932..0000000 --- a/ncspot/config.toml +++ /dev/null @@ -1,34 +0,0 @@ -notify = true -shuffle = true -cover_max_scale = 2 -audio_cache_size = 50000 -initial_screen = "library" -library_tabs = ["playlists"] -[theme] -background = "#1a1b26" -primary = "#c0caf5" -secondary = "#1a1b26" -title = "#e0af68" -playing = "#7dcfff" -playing_selected = "#73daca" -playing_bg = "#1a1b26" -highlight = "#73daca" -highlight_bg = "#1a1b26" -error = "#c0caf5" -error_bg = "#f7768e" -statusbar = "#24283b" -statusbar_progress = "#73daca" -statusbar_bg = "#7dcfff" - -cmdline_bg = "#24283b" -search_match = "#bb9af7" - -[keybindings] -"j" = "move left 1" -"k" = "move down 1" -"l" = "move up 1" -";" = "move right 1" - -[notification_format] -title = "%artists" -body = "%title" 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 b8a0b4a..0000000 --- a/nvim/README.md +++ /dev/null @@ -1,170 +0,0 @@ -# List of keymaps - -## Space as leader - -## Motion -| key | Descpription | -| ------- | ------------------------- | -| j | left | -| k | down | -| l | up | -| ; | right | -| \ | window left | -| \ | window up | -| \ | window down | -| \ | window right | -| \ | open file tree (root | -| \ | open file tree (cwd) | - - -## Debugging -| key | Description | -| ----------- | --------------------- | -| \da | run with args | -| \db | toggle breakpoint | -| \dB | breakpoint condition | -| \dC | run to cursoor | -| \dc | continue | -| \de | eval | -| \dg | go to line | -| \di | step into | -| \k | down | -| \l | up | -| \; | run last | -| \dO | step over | -| \do | step out | -| \dp | pause | -| \dr | toggle repl | -| \ds | session | -| \dt | terminate | -| \du | DAP UI | -| \dw | widgets | - -## neotest -| key | Description | -| ----------- | ------------------------- | -| \tt | execute all tests | -| \tT | execute nearest test | - -## 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 | -| \fh | help for functions etc | -| \fp | find projects | -| \fb | file browser | - -### telescope git -| key | Description | -| ---------- | ------------------------- | -| \gq | show commits | -| \gw | show commits with diff | -| \gb | show branches | -| \gr | show git status | -| \ga | show git stash | -| \ge | git file tree | - -### 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 | -| -------- | --------------------------------- | -| \ | delete project | -| \ | rename project | -| \ | create project | -| \ | search files in project | -| \ | browse files in project | -| \ | change directory to project | -| \ | recently opened files in project | -| \ | find file within project | - -
- - -## toggletrouble -| key | Description | -| ---------- | ------------------------- | -| \t | show errors and warnings | - -## cmp -Note, these require the cmp list view to be open to do anything! -| key | Description | -| ----------- | --------------------------------------------------------- | -| \ | scroll docs up | -| \ | scroll docs down | -| \ | 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 | -| ------------ | ---------------------- | -| \ca | go to definition | -| \ca | go to declaration | -| \cs | find references | -| \cd | go to type definition | -| \cf | go to implementation | -| \cq | fix code action | -| \cQ | refactor code action | -| \cw | signature help | -| \ce | hover | -| \cr | rename | - -## snippets -These require you to be inside a snippet! -| key | Description | -| -------- | ------------------------- | -| \ | jump to next entry | -| \ | 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 | - -## Treesitter specials -used to interact with treesitter defined objects. -| key | Description | -| --- | ------------------------------------ | -| dif | Delete the content of a function | -| daf | Delete the entire function | -| dic | Delete the content of a class/struct | -| dac | Delete the entire class/struct | diff --git a/nvim/ftdetect/cl.lua b/nvim/ftdetect/cl.lua deleted file mode 100644 index 34ed312..0000000 --- a/nvim/ftdetect/cl.lua +++ /dev/null @@ -1 +0,0 @@ -vim.cmd [[ autocmd BufRead,BufNewFile *.cl set filetype=cl ]] diff --git a/nvim/ftdetect/typ.lua b/nvim/ftdetect/typ.lua deleted file mode 100644 index 91dc42c..0000000 --- a/nvim/ftdetect/typ.lua +++ /dev/null @@ -1 +0,0 @@ -vim.cmd [[ autocmd BufRead,BufNewFile *.typ set filetype=typst ]] diff --git a/nvim/ftdetect/typst.lua b/nvim/ftdetect/typst.lua deleted file mode 100644 index 120b3c4..0000000 --- a/nvim/ftdetect/typst.lua +++ /dev/null @@ -1 +0,0 @@ -vim.cmd [[ autocmd BufRead,BufNewFile *.typst set filetype=typst ]] 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 4ff1424..0000000 --- a/nvim/lazy-lock.json +++ /dev/null @@ -1,87 +0,0 @@ -{ - "LazyVim": { "branch": "main", "commit": "68ff818a5bb7549f90b05e412b76fe448f605ffb" }, - "LuaSnip": { "branch": "master", "commit": "1def35377854535bb3b0f4cc7a33c083cdb12571" }, - "SchemaStore.nvim": { "branch": "main", "commit": "5bfeb36550018438c2c7ef58f91174f79d99a28a" }, - "alpha-nvim": { "branch": "main", "commit": "29074eeb869a6cbac9ce1fbbd04f5f5940311b32" }, - "bufferline.nvim": { "branch": "main", "commit": "1a3397556d194bb1f2cc530b07124ccc512c5501" }, - "catppuccin": { "branch": "main", "commit": "919d1f786338ebeced798afbf28cd085cd54542a" }, - "clangd_extensions.nvim": { "branch": "main", "commit": "34c8eaa12be192e83cd4865ce2375e9f53e728f2" }, - "cmake-tools.nvim": { "branch": "master", "commit": "4b965b5785776b6d258d57ce8fb7efa1a8170a7b" }, - "cmp-async-path": { "branch": "main", "commit": "d8229a93d7b71f22c66ca35ac9e6c6cd850ec61d" }, - "cmp-buffer": { "branch": "main", "commit": "3022dbc9166796b644a841a02de8dd1cc1d311fa" }, - "cmp-nvim-lsp": { "branch": "main", "commit": "44b16d11215dce86f253ce0c30949813c0a90765" }, - "cmp-path": { "branch": "main", "commit": "91ff86cd9c29299a64f968ebb45846c485725f23" }, - "cmp_luasnip": { "branch": "master", "commit": "05a9ab28b53f71d1aece421ef32fee2cb857a843" }, - "conform.nvim": { "branch": "master", "commit": "3fc2c956d99216b2816f07d2b946020ba2e02457" }, - "crates.nvim": { "branch": "main", "commit": "a8b8f60c33b16c8ef22f8064166daa29a47fca4a" }, - "dressing.nvim": { "branch": "master", "commit": "fe3071330a0720ce3695ac915820c8134b22d1b0" }, - "edgy.nvim": { "branch": "main", "commit": "8355be45610afdf79a0bab32b91ee297997455b4" }, - "flash.nvim": { "branch": "main", "commit": "48817af25f51c0590653bbc290866e4890fe1cbe" }, - "friendly-snippets": { "branch": "main", "commit": "53d3df271d031c405255e99410628c26a8f0d2b0" }, - "git-blame.nvim": { "branch": "master", "commit": "f07e913b7143f19edd6787229f2d51759b478600" }, - "gitsigns.nvim": { "branch": "main", "commit": "6ef8c54fb526bf3a0bc4efb0b2fe8e6d9a7daed2" }, - "harpoon": { "branch": "master", "commit": "c1aebbad9e3d13f20bedb8f2ce8b3a94e39e424a" }, - "headlines.nvim": { "branch": "master", "commit": "e3d7bfdf40e41a020d966d35f8b48d75b90367d2" }, - "inc-rename.nvim": { "branch": "main", "commit": "14922a84777702244a499b43134b9d04e640cbcd" }, - "indent-blankline.nvim": { "branch": "master", "commit": "29be0919b91fb59eca9e90690d76014233392bef" }, - "instant.nvim": { "branch": "master", "commit": "294b6d08143b3db8f9db7f606829270149e1a786" }, - "lazy.nvim": { "branch": "main", "commit": "96584866b9c5e998cbae300594d0ccfd0c464627" }, - "ltex_extra.nvim": { "branch": "master", "commit": "9bed99b2b8488cc2daf66c76d2e0cf051ee80d13" }, - "lualine.nvim": { "branch": "master", "commit": "2248ef254d0a1488a72041cfb45ca9caada6d994" }, - "markdown-preview.nvim": { "branch": "master", "commit": "a923f5fc5ba36a3b17e289dc35dc17f66d0548ee" }, - "mason-lspconfig.nvim": { "branch": "main", "commit": "41674c9d50f23cfa3e11f0ca964eb9100c2a8922" }, - "mason-nvim-dap.nvim": { "branch": "main", "commit": "5b4db7c0d6873436b42bcda0ba7cd4efa9206745" }, - "mason.nvim": { "branch": "main", "commit": "41e75af1f578e55ba050c863587cffde3556ffa6" }, - "mini.ai": { "branch": "main", "commit": "4a2e387b121352dfb478f440c9a5313a9d97006c" }, - "mini.bufremove": { "branch": "main", "commit": "f53c7f27e36009fe61563c11cde154b94a0e5b94" }, - "mini.comment": { "branch": "main", "commit": "3d9c8009615857e982f09bc5357fc95f2a2175f3" }, - "mini.indentscope": { "branch": "main", "commit": "c8fdafa7bf603d758986a27eb546c55a5c73b1a3" }, - "mini.pairs": { "branch": "main", "commit": "71f117fd57f930da6ef4126b24f594dd398bac26" }, - "mini.surround": { "branch": "main", "commit": "af8129efcabe95fc08a233e9f91569829bed031f" }, - "neo-tree.nvim": { "branch": "v3.x", "commit": "230ff118613fa07138ba579b89d13ec2201530b9" }, - "neoconf.nvim": { "branch": "main", "commit": "64437787dba70fce50dad7bfbb97d184c5bc340f" }, - "neodev.nvim": { "branch": "main", "commit": "1676d2c24186fc30005317e0306d20c639b2351b" }, - "neoscroll.nvim": { "branch": "master", "commit": "e85740d1a54ab0f10127b08c67a291053bc3acfa" }, - "neotest": { "branch": "master", "commit": "d424d262d01bccc1e0b038c9a7220a755afd2a1f" }, - "neotest-go": { "branch": "main", "commit": "c8ad8ccddd9d58679e05963fdc149e6a7fd61bef" }, - "neotest-python": { "branch": "master", "commit": "c969a5b0073f2b5c8eaf017d1652f9251d761a15" }, - "neotest-rust": { "branch": "main", "commit": "46428d9013023f516a61274a78b0cee87fb7e8bc" }, - "nui.nvim": { "branch": "main", "commit": "257dccc43b4badc735978f0791d216f7d665b75a" }, - "nvim-cmp": { "branch": "main", "commit": "0b751f6beef40fd47375eaf53d3057e0bfa317e4" }, - "nvim-dap": { "branch": "master", "commit": "13ce59d4852be2bb3cd4967947985cb0ceaff460" }, - "nvim-dap-go": { "branch": "main", "commit": "a5cc8dcad43f0732585d4793deb02a25c4afb766" }, - "nvim-dap-python": { "branch": "master", "commit": "e0be843877e7ae756ef1ee7a441ca0b9e1677da9" }, - "nvim-dap-ui": { "branch": "master", "commit": "34160a7ce6072ef332f350ae1d4a6a501daf0159" }, - "nvim-dap-virtual-text": { "branch": "master", "commit": "57f1dbd0458dd84a286b27768c142e1567f3ce3b" }, - "nvim-jdtls": { "branch": "master", "commit": "66b5ace68a5d1c45fdfb1afa8d847e87af2aa1f8" }, - "nvim-lint": { "branch": "master", "commit": "6f589cb93560581dc2a3b9693658afe865e5649e" }, - "nvim-lspconfig": { "branch": "master", "commit": "fcf153fbbf1facd16a71d46b92be8be495123a9f" }, - "nvim-spectre": { "branch": "master", "commit": "a18a58015b46f02b4fe537ebfffd82e46110ff24" }, - "nvim-treesitter": { "branch": "master", "commit": "1e64838ff575405c32b447b68762649289e8d73c" }, - "nvim-treesitter-context": { "branch": "master", "commit": "bf4d15ee4e96ff5201f16a4ed14443670662eb90" }, - "nvim-treesitter-textobjects": { "branch": "master", "commit": "c71406807b545f4a2c17310197a8c88b976f338d" }, - "nvim-ts-autotag": { "branch": "main", "commit": "6be1192965df35f94b8ea6d323354f7dc7a557e4" }, - "nvim-ts-context-commentstring": { "branch": "main", "commit": "b8ff464f2afc2000f6c72fa331a8fc090cb46b39" }, - "nvim-web-devicons": { "branch": "master", "commit": "5efb8bd06841f91f97c90e16de85e96d57e9c862" }, - "omnisharp-extended-lsp.nvim": { "branch": "main", "commit": "53edfb413a54c9e55dcddc9e9fa4977a897e4425" }, - "persistence.nvim": { "branch": "main", "commit": "ad538bfd5336f1335cdb6fd4e0b0eebfa6e12f32" }, - "plenary.nvim": { "branch": "master", "commit": "55d9fe89e33efd26f532ef20223e5f9430c8b0c0" }, - "rust-tools.nvim": { "branch": "master", "commit": "0cc8adab23117783a0292a0c8a2fbed1005dc645" }, - "tailwindcss-colorizer-cmp.nvim": { "branch": "main", "commit": "bc25c56083939f274edcfe395c6ff7de23b67c50" }, - "telescope-file-browser.nvim": { "branch": "master", "commit": "d7c453396a043c265bef1227920628e7b811ff30" }, - "telescope-fzf-native.nvim": { "branch": "main", "commit": "6c921ca12321edaa773e324ef64ea301a1d0da62" }, - "telescope-project.nvim": { "branch": "master", "commit": "5460c6c60d48618c5c746e5b1cad4c3e8262fdae" }, - "telescope-zoxide": { "branch": "main", "commit": "68966349aa1b8e9ade403e18479ecf79447389a7" }, - "telescope.nvim": { "branch": "master", "commit": "84c5a71d825b6687a55aed6f41e98b92fd8e5454" }, - "todo-comments.nvim": { "branch": "main", "commit": "4a6737a8d70fe1ac55c64dfa47fcb189ca431872" }, - "tokyonight.nvim": { "branch": "main", "commit": "f247ee700b569ed43f39320413a13ba9b0aef0db" }, - "tree-sitter-hypr": { "branch": "master", "commit": "da3c1d780c8e04446722ece04beadb6a44eb442d" }, - "trouble.nvim": { "branch": "main", "commit": "f1168feada93c0154ede4d1fe9183bf69bac54ea" }, - "typst.vim": { "branch": "main", "commit": "8b1d2962875b8701c830199f042b74663b6a3a7f" }, - "venv-selector.nvim": { "branch": "main", "commit": "61bc33b040ecdb93ec5788104ff41808cd5e511a" }, - "vim-illuminate": { "branch": "master", "commit": "3bd2ab64b5d63b29e05691e624927e5ebbf0fb86" }, - "vim-startuptime": { "branch": "master", "commit": "454b3de856b7bd298700de33d79774ca9b9e3875" }, - "vim-visual-multi": { "branch": "master", "commit": "aec289a9fdabaa0ee6087d044d75b32e12084344" }, - "vimtex": { "branch": "master", "commit": "941485f8b046ac00763dad2546f0701e85e5e02c" }, - "which-key.nvim": { "branch": "main", "commit": "4433e5ec9a507e5097571ed55c02ea9658fb268a" } -} \ No newline at end of file diff --git a/nvim/lazyvim.json b/nvim/lazyvim.json deleted file mode 100644 index ff6a139..0000000 --- a/nvim/lazyvim.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "extras": [ - - ], - "news": { - "NEWS.md": "2123" - }, - "version": 2 -} \ No newline at end of file diff --git a/nvim/lua/config/keymaps.lua b/nvim/lua/config/keymaps.lua deleted file mode 100644 index a1c6752..0000000 --- a/nvim/lua/config/keymaps.lua +++ /dev/null @@ -1,198 +0,0 @@ -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 } - --- crimes against humanity, but I don't care -map("n", "j", "h", opts) -map("n", "l", "k", opts) -map("n", "k", "j", opts) -map("n", ";", "l", opts) -map("v", "j", "h", opts) -map("v", "k", "j", opts) -map("v", "l", "k", opts) -map("v", ";", "l", opts) - --- debug -map("n", "db", ':lua require("dap").toggle_breakpoint()', { desc = "Toggle breakpoint" }) -map("n", "do", ':lua require("dap").step_over()', { desc = "Step over" }) -map("n", "di", ':lua require("dap").step_into()', { desc = "Step into" }) -map("n", "dc", ':lua require("dap").continue()', { desc = "Continue" }) -map("n", "du", function() - require("dapui").toggle() -end, { desc = "Toggle DAP UI" }) -map("n", "de", function() - require("dapui").eval() -end, { desc = "DAP Eval" }) - --- window movement -map("n", "", [[wincmd h]], opts) -map("n", "", [[wincmd l]], opts) -map("n", "", [[wincmd j]], opts) -map("i", "", [[wincmd h]], opts) -map("i", "", [[wincmd l]], opts) -map("i", "", [[wincmd j]], opts) - --- toggle terminal -local lazyterm = function() - Util.terminal(nil, { cwd = Util.root(), esc_esc = false, ctrl_hjkl = false }) -end -map("n", "", lazyterm, { desc = "Terminal (root dir)" }) -map("t", "", "close", { desc = "Hide Terminal" }) - --- semicolon thing --- map("i","" ,"A;", {desc = "add semi and newline"}) --- map("i","" ,"A;", {desc = "add semi"}) -map("n", "m", "$a;", { desc = "add semi and newline" }) -map("n", "n", "$a;", { desc = "add semi" }) - --- tab switching -map("n", "", ":BufferLineCyclePrev", opts) -map("n", "", ":BufferLineCycleNext", opts) - --- git -map("n", "gq", function() - require("telescope.builtin").git_commits() -end, { desc = "Commits" }) -map("n", "gw", function() - require("telescope.builtin").git_bcommits() -end, { desc = "Commits in branch" }) -map("n", "gb", function() - require("telescope.builtin").git_branches() -end, { desc = "Branches" }) -map("n", "gr", function() - require("telescope.builtin").git_status() -end, { desc = "Git status" }) -map("n", "ga", function() - require("telescope.builtin").git_stash() -end, { desc = "Git stash" }) -map("n", "gg", function() - Util.terminal({ "gitui" }, { cwd = Util.root() }) -end, { desc = "gitui (root dir)" }) -map("n", "gG", function() - Util.terminal({ "gitui" }) -end, { desc = "gitui (cwd)" }) -map("n", "gB", function() - require("gitblame") - vim.cmd(":GitBlameToggle") -end, { desc = "git blame" }) - --- harpoon man -map("n", "h1", function() - require("harpoon.ui").nav_file(1) -end, { desc = "First Harpoon File" }) -map("n", "h2", function() - require("harpoon.ui").nav_file(2) -end, { desc = "Second Harpoon File" }) -map("n", "h3", function() - require("harpoon.ui").nav_file(3) -end, { desc = "First Harpoon File" }) -map("n", "ha", function() - require("harpoon.mark").add_file() -end, { desc = "First Harpoon File" }) -map("n", "hd", function() - require("harpoon.mark").remove_file() -end, { desc = "First Harpoon File" }) -map("n", "hm", ":Telescope harpoon marks", { noremap = true, silent = true, desc = "Show harpoon marks" }) - --- telescope -map("n", "fb", function() - require("telescope").extensions.file_browser.file_browser({}) -end, { desc = "File Browser" }) -map("n", "ff", function() - require("telescope.builtin").find_files() -end, { desc = "Find Files" }) -map("n", "fg", function() - Live_grep_from_project_git_root() -end, { desc = "Live Grep (root)" }) -map("n", "fG", function() - require("telescope.builtin").live_grep() -end, { desc = "Live Grep (cwd)" }) -map("n", "fh", function() - require("telescope.builtin").help_tags() -end, { desc = "Help" }) -map("n", "fp", function() - require("telescope").extensions.project.project({}) -end, { noremap = true, silent = true, desc = "Projects" }) -map("n", "z", function() - require("telescope").extensions.zoxide.list({}) -end, { desc = "Zoxide" }) - --- neoscroll -local t = {} -t[""] = { "scroll", { "-vim.wo.scroll", "true", "250" } } -t[""] = { "scroll", { "vim.wo.scroll", "true", "250" } } -require("neoscroll.config").set_mappings(t) - --- trouble -map("n", "t", "TroubleToggle", term_opts) - --- format -map({ "n", "v" }, "", function() - Util.format({ force = true }) -end, { desc = "Format" }) - --- better yank -function Better_yank(opts) - local current_line = unpack(vim.api.nvim_win_get_cursor(0)) - vim.api.nvim_command(current_line .. "," .. (opts.count - (current_line - 1)) .. "y") -end - -vim.api.nvim_create_user_command("BetterYank", Better_yank, { count = 1 }) -map("n", "by", ":BetterYank", term_opts) - --- better delete -function Better_delete(opts) - local current_line = unpack(vim.api.nvim_win_get_cursor(0)) - vim.api.nvim_command(current_line .. "," .. (opts.count - (current_line - 1)) .. "d") -end - -vim.api.nvim_create_user_command("BetterDelete", Better_delete, { count = 1 }) -map("n", "bd", ":BetterDelete", term_opts) - --- neovide zoom -local change_scale_factor = function(delta) - vim.g.neovide_scale_factor = vim.g.neovide_scale_factor * delta -end -vim.keymap.set("n", "", function() - change_scale_factor(1.25) -end) -vim.keymap.set("n", "", function() - change_scale_factor(1 / 1.25) -end) - --- neovide paste -vim.g.neovide_input_use_logo = 1 -vim.api.nvim_set_keymap("i", "", "pI", { noremap = true, silent = true }) - -function Get_git_root() - local opts = {} - local function is_git_repo() - vim.fn.system("git rev-parse --is-inside-work-tree") - - return vim.v.shell_error == 0 - end - if is_git_repo() then - local dot_git_path = vim.fn.finddir(".git", ".;") - local root = vim.fn.fnamemodify(dot_git_path, ":h") - opts = { - cwd = root, - } - end - return opts -end - -function Live_grep_from_project_git_root() - local opts = Get_git_root() - require("telescope.builtin").live_grep(opts) -end diff --git a/nvim/lua/config/lazy.lua b/nvim/lua/config/lazy.lua deleted file mode 100644 index 310312e..0000000 --- a/nvim/lua/config/lazy.lua +++ /dev/null @@ -1,56 +0,0 @@ -local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" -if not vim.loop.fs_stat(lazypath) then - 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 = { - { "LazyVim/LazyVim", import = "lazyvim.plugins" }, - { import = "lazyvim.plugins.extras.ui.alpha" }, - { import = "lazyvim.plugins.extras.ui.edgy" }, - { import = "plugins" }, - { import = "plugins.plugins" }, - { import = "lazyvim.plugins.extras.lang.tailwind" }, - { import = "lazyvim.plugins.extras.lang.rust" }, - { import = "lazyvim.plugins.extras.lang.java" }, - { import = "lazyvim.plugins.extras.lang.go" }, - { import = "lazyvim.plugins.extras.lang.clangd" }, - { import = "lazyvim.plugins.extras.lang.typescript" }, - { import = "lazyvim.plugins.extras.lang.python" }, - { import = "lazyvim.plugins.extras.lang.markdown" }, - { import = "lazyvim.plugins.extras.lang.cmake" }, - { import = "lazyvim.plugins.extras.lang.omnisharp" }, - { import = "lazyvim.plugins.extras.lang.json" }, - { import = "lazyvim.plugins.extras.lang.tex" }, - { import = "lazyvim.plugins.extras.util.dot" }, - { import = "lazyvim.plugins.extras.dap.core" }, - { import = "lazyvim.plugins.extras.test.core" }, - }, - defaults = { - lazy = true, - version = false, - }, - install = { colorscheme = { "tokyonight", "catppuccin-mocha" } }, - checker = { enabled = true, notify = false }, - change_detection = { enabled = true, notify = false }, - performance = { - rtp = { - disabled_plugins = { - "gzip", - "netrw", - "tarPlugin", - "tohtml", - "tutor", - "zipPlugin", - }, - }, - }, -}) diff --git a/nvim/lua/config/lsp-keymap.lua b/nvim/lua/config/lsp-keymap.lua deleted file mode 100644 index df316e9..0000000 --- a/nvim/lua/config/lsp-keymap.lua +++ /dev/null @@ -1,126 +0,0 @@ -local M = {} - ----@type PluginLspKeys -M._keys = nil - ----@return (LazyKeys|{has?:string})[] -function M.get() - local format = function() - require("lazyvim.util").format({ force = true }) - end - if not M._keys then - ---@class PluginLspKeys - M._keys = { - { "cld", vim.diagnostic.open_float, desc = "Line Diagnostics" }, - { "cl", "LspInfo", desc = "Lsp Info" }, - { "ca", "Telescope lsp_definitions", desc = "Goto Definition", has = "definition" }, - { "cs", "Telescope lsp_references", desc = "References" }, - { "cA", vim.lsp.buf.declaration, desc = "Goto Declaration" }, - { "cf", "Telescope lsp_implementations", desc = "Goto Implementation" }, - { "cd", "Telescope lsp_type_definitions", desc = "Goto Type Definition" }, - { "ce", vim.lsp.buf.hover, desc = "Hover" }, - { "cw", vim.lsp.buf.signature_help, desc = "Signature Help", has = "signatureHelp" }, - { "", vim.lsp.buf.signature_help, mode = "i", desc = "Signature Help", has = "signatureHelp" }, - { "]d", M.diagnostic_goto(true), desc = "Next Diagnostic" }, - { "[d", M.diagnostic_goto(false), desc = "Prev Diagnostic" }, - { "]e", M.diagnostic_goto(true, "ERROR"), desc = "Next Error" }, - { "[e", M.diagnostic_goto(false, "ERROR"), desc = "Prev Error" }, - { "]w", M.diagnostic_goto(true, "WARN"), desc = "Next Warning" }, - { "[w", M.diagnostic_goto(false, "WARN"), desc = "Prev Warning" }, - { "", format, desc = "Format Range", mode = "v", has = "documentRangeFormatting" }, - { "cr", ":IncRename ", desc = "Rename", has = "rename" }, - { - "cq", - function() - vim.lsp.buf.code_action({ - context = { - only = { - "quickfix", - "quickfix.ltex", - "source", - "source.fixAll", - "source.organizeImports", - "", - }, - }, - }) - end, - desc = "Fix", - mode = { "n", "v" }, - has = "codeAction", - }, - { - "cQ", - function() - vim.lsp.buf.code_action({ - context = { - only = { - "refactor", - "refactor.inline", - "refactor.extract", - "refactor.rewrite", - }, - }, - }) - end, - desc = "Refactor", - mode = { "n", "v" }, - has = "codeAction", - }, - } - end - return M._keys -end - ----@param method string -function M.has(buffer, method) - method = method:find("/") and method or "textDocument/" .. method - local clients = require("lazyvim.util").lsp.get_clients({ bufnr = buffer }) - for _, client in ipairs(clients) do - if client.supports_method(method) then - return true - end - end - return false -end - ----@return (LazyKeys|{has?:string})[] -function M.resolve(buffer) - local Keys = require("lazy.core.handler.keys") - if not Keys.resolve then - return {} - end - local spec = M.get() - local opts = require("lazyvim.util").opts("nvim-lspconfig") - local clients = require("lazyvim.util").lsp.get_clients({ bufnr = buffer }) - for _, client in ipairs(clients) do - local maps = opts.servers[client.name] and opts.servers[client.name].keys or {} - vim.list_extend(spec, maps) - end - return Keys.resolve(spec) -end - -function M.on_attach(_, buffer) - local Keys = require("lazy.core.handler.keys") - local keymaps = M.resolve(buffer) - - for _, keys in pairs(keymaps) do - if not keys.has or M.has(buffer, keys.has) then - local opts = Keys.opts(keys) - opts.has = nil - opts.silent = opts.silent ~= false - opts.buffer = buffer - vim.keymap.set(keys.mode or "n", keys.lhs, keys.rhs, opts) - end - end -end - -function M.diagnostic_goto(next, severity) - local go = next and vim.diagnostic.goto_next or vim.diagnostic.goto_prev - severity = severity and vim.diagnostic.severity[severity] or nil - return function() - go({ severity = severity }) - end -end - -return M diff --git a/nvim/lua/config/options.lua b/nvim/lua/config/options.lua deleted file mode 100644 index 164d889..0000000 --- a/nvim/lua/config/options.lua +++ /dev/null @@ -1,26 +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 = { - fileencoding = "utf-8", - number = true, - showmode = true, - termguicolors = true, - spelllang = "en_us", - shell = "/usr/bin/fish", - autochdir = true, - relativenumber = false, - scrolloff = 5, - scrolljump = 5, - wrap = false, -} -vim.o.guifont = "JetBrainsMono Nerd Font:h14" -vim.g.neovide_refresh_rate_idle = 180 -vim.g.neovide_refresh_rate_idle = 5 -vim.g.neovide_hide_mouse_when_typing = true -vim.g.mkdp_browser = "/usr/bin/firefox" -vim.g.mkdp_auto_start = 1 -vim.g.autoformat = false -for k, v in pairs(options) do - vim.opt[k] = v -end diff --git a/nvim/lua/config/plugins.lua b/nvim/lua/config/plugins.lua deleted file mode 100644 index a120ce1..0000000 --- a/nvim/lua/config/plugins.lua +++ /dev/null @@ -1,302 +0,0 @@ -local Util = require("lazyvim.util") - -return { - { - "LazyVim/LazyVim", - opts = { - colorscheme = "tokyonight-night", - -- colorscheme = "catppuccin-mocha", - }, - }, - { - "nvim-telescope/telescope.nvim", - cmd = "Telescope", - keys = function() - return {} - end, - opts = { - defaults = { - layout_strategy = 'flex'; - layout_config = { - flex = { - height = 0.95, - width = 0.95, - flip_columns = 100, - vertical = { preview_height = 0.5, preview_cutoff = 5 }, - horizontal = { preview_width = 0.7, preview_cutoff = 99 }, - }, - }, - }, - }, - }, - { - "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() - vim.cmd("let g:vimtex_quickfix_mode=0") - vim.cmd("let g:vimtex_view_general_viewer = 'evince'") - vim.cmd("let g:vimtex_compiler_method = 'latexmk'") - vim.cmd( - "let g:vimtex_compiler_latexmk = {'options': ['-pdf', '-shell-escape', '-file-line-error', '--extra-mem-bot=10000000', '-synctex=1', '-interaction=nonstopmode',],}" - ) - end, - }, - { - "rcarriga/nvim-notify", - opts = { - top_down = false, - }, - }, - { - "jbyuki/instant.nvim", - config = function() - vim.cmd("let g:instant_username = 'dashie'") - end, - }, - { - "nvim-treesitter/nvim-treesitter", - opts = { - textobjects = { - select = { - enable = true, - lookahead = true, - keymaps = { - -- You can use the capture groups defined in textobjects.scm - ["af"] = "@function.outer", - ["if"] = "@function.inner", - ["ac"] = "@class.outer", - ["ic"] = "@class.inner", - }, - }, - }, - }, - }, - { - "karb94/neoscroll.nvim", - config = function() - require("neoscroll").setup() - end, - }, - { - "kaarmu/typst.vim", - lazy = true, - event = "FileType typst", - }, - { - "folke/which-key.nvim", - event = "VeryLazy", - opts = { - plugins = { spelling = true }, - defaults = { - mode = { "n", "v" }, - ["g"] = { name = "+goto" }, - ["gz"] = { name = "+surround" }, - ["]"] = { name = "+next" }, - ["["] = { name = "+prev" }, - [""] = { name = "+tabs" }, - ["b"] = { name = "+buffer" }, - ["c"] = { name = "+code" }, - ["f"] = { name = "+file/find" }, - ["g"] = { name = "+git" }, - ["gh"] = { name = "+hunks" }, - ["q"] = { name = "+quit/session" }, - ["s"] = { name = "+search" }, - ["u"] = { name = "+ui" }, - ["w"] = { name = "+windows" }, - ["x"] = { name = "+diagnostics/quickfix" }, - ["h"] = { name = "+harpoon" }, - ["d"] = { name = "+DAP" }, - }, - }, - config = function(_, opts) - local wk = require("which-key") - wk.setup(opts) - wk.register(opts.defaults) - end, - }, - { - "f-person/git-blame.nvim", - lazy = true, - }, - { - "mg979/vim-visual-multi", - }, - { - "barreiroleo/ltex_extra.nvim", - ft = { "markdown", "tex", "typst", "typ" }, - lazy = true, - }, - { - "smjonas/inc-rename.nvim", - lazy = true, - event = "BufEnter", - config = function() - require("inc_rename").setup({ - cmd_name = "IncRename", -- the name of the command - hl_group = "Substitute", -- the highlight group used for highlighting the identifier's new name - preview_empty_name = true, -- whether an empty new name should be previewed; if false the command preview will be cancelled instead - show_message = true, -- whether to display a `Renamed m instances in n files` message after a rename operation - input_buffer_type = nil, -- the type of the external input buffer to use (the only supported value is currently "dressing") - post_hook = nil, -- callback to run after renaming, receives the result table (from LSP handler) as an argument - }) - end, - }, - { - "nvim-neo-tree/neo-tree.nvim", - opts = { - window = { - position = "right", - mappings = { - ["l"] = "none", - }, - }, - }, - keys = { - { - "fe", - function() - require("neo-tree.command").execute({ position = "right", toggle = true, dir = Util.root() }) - end, - desc = "Explorer NeoTree (root dir)", - }, - { - "fE", - function() - require("neo-tree.command").execute({ position = "right", toggle = true, dir = vim.loop.cwd() }) - end, - desc = "Explorer NeoTree (cwd)", - }, - { "", "fe", desc = "Explorer NeoTree (root dir)", remap = true }, - { "", "fE", desc = "Explorer NeoTree (cwd)", remap = true }, - }, - }, - { - "folke/edgy.nvim", - opts = { - animate = { - enabled = false, - }, - left = {}, - right = { - -- Neo-tree filesystem always takes half the screen height - { - title = "Neo-Tree", - ft = "neo-tree", - filter = function(buf) - return vim.b[buf].neo_tree_source == "filesystem" - end, - size = { height = 0.5 }, - }, - { - title = "Neo-Tree Git", - ft = "neo-tree", - filter = function(buf) - return vim.b[buf].neo_tree_source == "git_status" - end, - pinned = true, - open = "Neotree position=right git_status", - }, - { - title = "Neo-Tree Buffers", - ft = "neo-tree", - filter = function(buf) - return vim.b[buf].neo_tree_source == "buffers" - end, - pinned = true, - open = "Neotree position=top buffers", - }, - { - ft = "Outline", - pinned = true, - open = "SymbolsOutlineOpen", - }, - -- any other neo-tree windows - "neo-tree", - }, - }, - }, - { - "rcarriga/nvim-dap-ui", - keys = { - { - "dk", - function() - require("dap").down() - end, - desc = "Down", - }, - { - "dl", - function() - require("dap").up() - end, - desc = "Up", - }, - { - "d;", - function() - require("dap").run_last() - end, - desc = "Run Last", - }, - }, - }, -} diff --git a/nvim/lua/plugins/cmp.lua b/nvim/lua/plugins/cmp.lua deleted file mode 100644 index 9d2019c..0000000 --- a/nvim/lua/plugins/cmp.lua +++ /dev/null @@ -1,142 +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", - "FelipeLema/cmp-async-path", - "saadparwaiz1/cmp_luasnip", - "Saecki/crates.nvim", - { "roobert/tailwindcss-colorizer-cmp.nvim", config = true }, - }, - opts = function() - vim.api.nvim_set_hl(0, "CmpGhostText", { link = "Comment", default = true }) - local cmp = require("cmp") - local defaults = require("cmp.config.default")() - local luasnip = require("luasnip") - local compare = require("cmp.config.compare") - 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.confirm({ - behavior = cmp.ConfirmBehavior.Replace, - select = false, - }), -- Accept cur - [""] = cmp.mapping(function(fallback) - if cmp.visible() then - cmp.select_next_item({ behavior = cmp.SelectBehavior.Insert }) - else - fallback() - end - end, { "i", "s" }), - [""] = cmp.mapping(function(fallback) - if cmp.visible() then - cmp.select_prev_item({ behavior = cmp.SelectBehavior.Insert }) - 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", priority = 99 }, - { name = "luasnip", priority = 3, max_item_count = 3 }, - { name = "buffer", priority = 2, max_item_count = 2, keyword_length = 5 }, - { name = "async_path", priority = 1, max_item_count = 2, keyword_length = 3, trigger_characters = {} }, - { name = "crates" }, - }), - sorting = { - priority_weight = 90, - comparators = { - compare.exact, - compare.score, - compare.offset, - compare.kind, - }, - }, - formatting = { - preselect = cmp.PreselectMode.None, - 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 = "CmpGhostText", - }, - }, - } - 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/dashboard.lua b/nvim/lua/plugins/dashboard.lua deleted file mode 100644 index 5f89ca4..0000000 --- a/nvim/lua/plugins/dashboard.lua +++ /dev/null @@ -1,106 +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.pad_margin(dashboard.section.header.val, dashboard.opts , 0, 0) - 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({ - layout = { - { type = "padding", val = 1 }, - dashboard.section.header, - { type = "padding", val = 1 }, - dashboard.section.buttons, - { type = "padding", val = 1 }, - dashboard.section.footer, - }, - }) - - 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 2db2e59..0000000 --- a/nvim/lua/plugins/disabled.lua +++ /dev/null @@ -1,8 +0,0 @@ -return { - { - { "rcarriga/nvim-notify", enabled = false }, - }, - { { "folke/noice.nvim", enabled = false } }, - { { "nvimtools/none-ls.nvim", enabled = false } }, - { { "nvimdev/dashboard-nvim", enabled = false } }, -} diff --git a/nvim/lua/plugins/lsp.lua b/nvim/lua/plugins/lsp.lua deleted file mode 100644 index 3b41164..0000000 --- a/nvim/lua/plugins/lsp.lua +++ /dev/null @@ -1,90 +0,0 @@ -return { - { - "neovim/nvim-lspconfig", - ---@class PluginLspOpts - opts = { - -- inlay_hints = { - -- enabled = true, - -- }, - format_notify = false, - -- LSP Server Settings - ---@type lspconfig.options - servers = { - bashls = {}, - ansiblels = {}, - asm_lsp = {}, - typst_lsp = { - settings = { - experimentalFormatterMode = "on", - exportPdf = "onSave", - }, - }, - ltex = { - settings = { - ltex = { - checkFrequency = "save", - }, - }, - filetypes = { - "bib", - "gitcommit", - "markdown", - "org", - "plaintex", - "rst", - "rnoweb", - "tex", - "pandoc", - "typst", - "typ", - }, - }, - sqlls = {}, - taplo = {}, - lemminx = {}, - opencl_ls = {}, - yamlls = {}, - lua_ls = { - settings = { - Lua = { - workspace = { - checkThirdParty = false, - }, - completion = { - callSnippet = "Replace", - }, - }, - }, - }, - }, - }, - init = function() - local keys = require("lazyvim.plugins.lsp.keymaps").get() - local my_keys = require("config.lsp-keymap").get() - local count = 0 - for _ in pairs(my_keys) do - keys[#keys + 1] = my_keys[count] - count = count + 1 - end - end, - }, - { - "stevearc/conform.nvim", - opts = { - keys = { - { - -- Customize or remove this keymap to your liking - "cF", - function() - require("conform").format({ async = true, lsp_fallback = true }) - end, - mode = "", - desc = "Format buffer", - }, - }, - formatters_by_ft = { - typst = { "typstfmt" }, - }, - }, - }, -} diff --git a/nvim/lua/plugins/plugins.lua b/nvim/lua/plugins/plugins.lua deleted file mode 100644 index 45c7d35..0000000 --- a/nvim/lua/plugins/plugins.lua +++ /dev/null @@ -1,302 +0,0 @@ -local Util = require("lazyvim.util") - -return { - { - "LazyVim/LazyVim", - opts = { - colorscheme = "tokyonight-night", - -- colorscheme = "catppuccin-mocha", - }, - }, - { - "nvim-telescope/telescope.nvim", - cmd = "Telescope", - keys = function() - return {} - end, - opts = { - defaults = { - layout_strategy = "flex", - layout_config = { - flex = { - height = 0.95, - width = 0.95, - flip_columns = 100, - }, - vertical = { preview_height = 0.5, preview_cutoff = 5 }, - horizontal = { preview_width = 0.7, preview_cutoff = 99 }, - }, - }, - }, - }, - { - "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() - vim.cmd("let g:vimtex_quickfix_mode=0") - vim.cmd("let g:vimtex_view_general_viewer = 'evince'") - vim.cmd("let g:vimtex_compiler_method = 'latexmk'") - vim.cmd( - "let g:vimtex_compiler_latexmk = {'options': ['-pdf', '-shell-escape', '-file-line-error', '--extra-mem-bot=10000000', '-synctex=1', '-interaction=nonstopmode',],}" - ) - end, - }, - { - "rcarriga/nvim-notify", - opts = { - top_down = false, - }, - }, - { - "jbyuki/instant.nvim", - config = function() - vim.cmd("let g:instant_username = 'dashie'") - end, - }, - { - "nvim-treesitter/nvim-treesitter", - opts = { - textobjects = { - select = { - enable = true, - lookahead = true, - keymaps = { - -- You can use the capture groups defined in textobjects.scm - ["af"] = "@function.outer", - ["if"] = "@function.inner", - ["ac"] = "@class.outer", - ["ic"] = "@class.inner", - }, - }, - }, - }, - }, - { - "karb94/neoscroll.nvim", - config = function() - require("neoscroll").setup() - end, - }, - { - "kaarmu/typst.vim", - lazy = true, - event = "FileType typst", - }, - { - "folke/which-key.nvim", - event = "VeryLazy", - opts = { - plugins = { spelling = true }, - defaults = { - mode = { "n", "v" }, - ["g"] = { name = "+goto" }, - ["gz"] = { name = "+surround" }, - ["]"] = { name = "+next" }, - ["["] = { name = "+prev" }, - [""] = { name = "+tabs" }, - ["b"] = { name = "+buffer" }, - ["c"] = { name = "+code" }, - ["f"] = { name = "+file/find" }, - ["g"] = { name = "+git" }, - ["gh"] = { name = "+hunks" }, - ["q"] = { name = "+quit/session" }, - ["s"] = { name = "+search" }, - ["u"] = { name = "+ui" }, - ["w"] = { name = "+windows" }, - ["x"] = { name = "+diagnostics/quickfix" }, - ["h"] = { name = "+harpoon" }, - ["d"] = { name = "+DAP" }, - }, - }, - config = function(_, opts) - local wk = require("which-key") - wk.setup(opts) - wk.register(opts.defaults) - end, - }, - { - "f-person/git-blame.nvim", - lazy = true, - }, - { - "mg979/vim-visual-multi", - }, - { - "barreiroleo/ltex_extra.nvim", - ft = { "markdown", "tex", "typst", "typ" }, - lazy = true, - }, - { - "smjonas/inc-rename.nvim", - lazy = true, - event = "BufEnter", - config = function() - require("inc_rename").setup({ - cmd_name = "IncRename", -- the name of the command - hl_group = "Substitute", -- the highlight group used for highlighting the identifier's new name - preview_empty_name = true, -- whether an empty new name should be previewed; if false the command preview will be cancelled instead - show_message = true, -- whether to display a `Renamed m instances in n files` message after a rename operation - input_buffer_type = nil, -- the type of the external input buffer to use (the only supported value is currently "dressing") - post_hook = nil, -- callback to run after renaming, receives the result table (from LSP handler) as an argument - }) - end, - }, - { - "nvim-neo-tree/neo-tree.nvim", - opts = { - window = { - position = "right", - mappings = { - ["l"] = "none", - }, - }, - }, - keys = { - { - "fe", - function() - require("neo-tree.command").execute({ position = "right", toggle = true, dir = Util.root() }) - end, - desc = "Explorer NeoTree (root dir)", - }, - { - "fE", - function() - require("neo-tree.command").execute({ position = "right", toggle = true, dir = vim.loop.cwd() }) - end, - desc = "Explorer NeoTree (cwd)", - }, - { "", "fe", desc = "Explorer NeoTree (root dir)", remap = true }, - { "", "fE", desc = "Explorer NeoTree (cwd)", remap = true }, - }, - }, - { - "folke/edgy.nvim", - opts = { - animate = { - enabled = false, - }, - left = {}, - right = { - -- Neo-tree filesystem always takes half the screen height - { - title = "Neo-Tree", - ft = "neo-tree", - filter = function(buf) - return vim.b[buf].neo_tree_source == "filesystem" - end, - size = { height = 0.5 }, - }, - { - title = "Neo-Tree Git", - ft = "neo-tree", - filter = function(buf) - return vim.b[buf].neo_tree_source == "git_status" - end, - pinned = true, - open = "Neotree position=right git_status", - }, - { - title = "Neo-Tree Buffers", - ft = "neo-tree", - filter = function(buf) - return vim.b[buf].neo_tree_source == "buffers" - end, - pinned = true, - open = "Neotree position=top buffers", - }, - { - ft = "Outline", - pinned = true, - open = "SymbolsOutlineOpen", - }, - -- any other neo-tree windows - "neo-tree", - }, - }, - }, - { - "rcarriga/nvim-dap-ui", - keys = { - { - "dk", - function() - require("dap").down() - end, - desc = "Down", - }, - { - "dl", - function() - require("dap").up() - end, - desc = "Up", - }, - { - "d;", - function() - require("dap").run_last() - end, - desc = "Run Last", - }, - }, - }, -} 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/snippets/typst.lua b/nvim/snippets/typst.lua deleted file mode 100644 index d7ae76e..0000000 --- a/nvim/snippets/typst.lua +++ /dev/null @@ -1,126 +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 = "*.typst" -------------------------------------------------- boilerplate end --- snippers go here: - -local colorSnippet = s( - "tx-", - fmt([[ #text({1})[{2}] ]], { - i(1, "color"), - i(2, "text"), - }) -) -table.insert(snippets, colorSnippet) - -local imageSnippet = s( - "image-", - fmt( - [[ - #image("{1}", width: {2}%) - ]], - { - i(1, "../../Screenshots/"), - i(2, "100"), - } - ) -) -table.insert(snippets, imageSnippet) - -local centerImageSnippet = s( - "cimage-", - fmt( - [[ - #align(center, [#image("{1}", width: {2}%)]) - ]], - { - i(1, "../../Screenshots"), - i(2, "100"), - } - ) -) -table.insert(snippets, centerImageSnippet) - -local colSnippet = s( - "col-", - fmt( - [[ - #columns({1}, [{2}]) - ]], - { - i(1, "col-amount"), - i(2, "content"), - } - ) -) -table.insert(snippets, colSnippet) - -local codeSnippet = s( - "code-", - fmt( - [[ - //typstfmt::off - ```{1} - {2} - ``` - //typstfmt::on - - ]], - { - i(1, "lang"), - i(2, "code"), - } - ) -) -table.insert(snippets, codeSnippet) - -local patternSnippet = s( - "pattern-", - fmt( - [[ - #subsection([{1}]) - #set text(size: 14pt) - - Problem | {2} - Context | {3} - Participants : - - {4} - #set text(size: 11pt) - // images - {5} - - #columns(2, [ - #text(green)[Benefits] - - {6} - #colbreak() - #text(red)[Liabilities] - - {7} - ]) - ]], - { - i(1, "pattern"), - i(2, "problem"), - i(3, "context"), - i(4, ""), - i(5, ""), - i(6, ""), - i(7, ""), - } - ) -) -table.insert(snippets, patternSnippet) -------------------------------------------------- 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/oxidash/style.css b/oxidash/style.css deleted file mode 100644 index 491ab64..0000000 --- a/oxidash/style.css +++ /dev/null @@ -1,45 +0,0 @@ -#MainWindow { - border-radius: 10px; -} - -#MainBox { - border-radius: 10px; -} - -#MainButtonBox { - padding: 10px; - margin: 5px 0px 5px 0px; - border-radius: 5px; - border: solid 2px #327cd5; -} - -#DoNotDisturbButton { -} - -#ExitButton { -} - -#ClearNotificationsButton { -} - -#NotificationsWindow { -} - -.debugimage { - border: solid 3px blue; -} - -.Notification { - padding: 10px; - margin: 5px 0px 5px 0px; - border: solid 2px #327cd5; - border-radius: 5px; -} - -.CloseNotificationButton { - margin: 0px 5px 0px 10px; -} -.PictureButtonBox { -} -.BaseBox { -} diff --git a/oxinoti/oxinoti.toml b/oxinoti/oxinoti.toml deleted file mode 100644 index 8c073eb..0000000 --- a/oxinoti/oxinoti.toml +++ /dev/null @@ -1,2 +0,0 @@ -timeout = 3 -dnd_override = 2 diff --git a/oxinoti/style.css b/oxinoti/style.css deleted file mode 100644 index 5230fda..0000000 --- a/oxinoti/style.css +++ /dev/null @@ -1,79 +0,0 @@ -@import url("/home/dashie/.config/gtk-3.0/gtk.css"); - -#MainWindow { - background-color: transparent; - padding: 0px; - /* opacity: 0; */ -} - -.MainBox { - background-color: transparent; - padding: 0px; - /* opacity: 0; */ -} - -.NotificationBox { - background-color: #353747; - border-radius: 5px; - border: solid 1px; - margin: 0px; - padding: 5px; -} - -.NotificationLow { - border-color: green; -} - -.NotificationNormal { - border-color: purple; -} - -.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; -} diff --git a/oxishut/style.css b/oxishut/style.css deleted file mode 100644 index 15552f1..0000000 --- a/oxishut/style.css +++ /dev/null @@ -1,18 +0,0 @@ -#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/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 6df67e0..0000000 --- a/qt5ct/colors/Gradience.conf +++ /dev/null @@ -1,4 +0,0 @@ -[ColorScheme] -active_colors=#ffc0caf5, #ff1a1b26, #ffffffff, #ffcacaca, #ff9f9f9f, #ffb8b8b8, #ffc0caf5, #ffffffff, #ffc0caf5, #ff1a1b26, #ff1a1b26, #ff767676, #ffa9b1d6, #dd000000, #ff0000ff, #ffff00ff, #fff7f7f7, #ff000000, #ffffffdc, #ff000000, #80000000 -disabled_colors=#ffbebebe, #ff1a1b26, #ffffffff, #ffcacaca, #ffbebebe, #ffb8b8b8, #ffbebebe, #ffffffff, #ffbebebe, #ffefefef, #ff1a1b26, #ffb1b1b1, #ff919191, #ffffffff, #ff0000ff, #ffff00ff, #fff7f7f7, #ff000000, #ffffffdc, #ff000000, #80000000 -inactive_colors=#ffc0caf5, #ff1a1b26, #ffffffff, #ffcacaca, #ff9f9f9f, #ffb8b8b8, #ffc0caf5, #ffffffff, #ffc0caf5, #ff1a1b26, #ff1a1b26, #ff767676, #ff308cc6, #ffffffff, #ff0000ff, #ffff00ff, #fff7f7f7, #ff000000, #ffffffdc, #ff000000, #80000000 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 8ed098c..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\n\0\0\0\0\0\0\0\fv\0\0\x2\x10\0\0\n\0\0\0\0\0\0\0\fv\0\0\x2\x10\0\0\0\0\x2\0\0\0\rp\0\0\n\0\0\0\0\0\0\0\fv\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\x5-\0\0\x3P\0\0\0\0\0\0\0\0\0\0\x3K\0\0\x5\x61\0\0\0\0\x2\0\0\0\rp\0\0\0\0\0\0\0\0\0\0\x5-\0\0\x3P) - -[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 09e5ca8..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\xec\0\0\x3,\0\0\0\0\0\0\0\0\0\0\x3\xec\0\0\x3,\0\0\0\0\0\0\0\0\rp\0\0\0\0\0\0\0\0\0\0\x3\xec\0\0\x3,)" - -[Troubleshooting] -force_raster_widgets=1 -ignored_applications=@Invalid() diff --git a/scripts/audio_control.sh b/scripts/audio_control.sh deleted file mode 100755 index a76234e..0000000 --- a/scripts/audio_control.sh +++ /dev/null @@ -1,83 +0,0 @@ -#!/bin/bash - -ncspot() { - echo "$1" - echo "$2" - 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 diff --git a/scripts/carpkg.txt b/scripts/carpkg.txt deleted file mode 100644 index 07fc7a6..0000000 --- a/scripts/carpkg.txt +++ /dev/null @@ -1 +0,0 @@ -paru diff --git a/scripts/change-brightness b/scripts/change-brightness deleted file mode 100755 index 198dc44..0000000 --- a/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/scripts/flatpkg.txt b/scripts/flatpkg.txt deleted file mode 100644 index 01493ec..0000000 --- a/scripts/flatpkg.txt +++ /dev/null @@ -1,71 +0,0 @@ -chat.revolt.RevoltDesktop -com.atlauncher.ATLauncher -Browser -com.github.GradienceTeam.Gradience.Devel -com.github.tchx84.Flatseal -Games -com.lakoliu.Furtherance -Studio -com.rustdesk.RustDesk -com.usebottles.bottles -com.valvesoftware.Steam.Utility.gamescope -de.haeckerfelix.Fragments -de.shorsh.discord-screenaudio -dev.lapce.lapce -All -io.freetubeapp.FreeTube -io.github.Foldex.AdwSteamGtk -io.github.lainsce.Colorway -Settings -io.gitlab.theevilskeleton.Upscaler -net.davidotek.pupgui2 -Picker -org.flatpak.Builder -Platform -Platform -Platform -org.freedesktop.Platform.Compat.i386 -org.freedesktop.Platform.GL.default -org.freedesktop.Platform.GL.default -(Extra) -org.freedesktop.Platform.GL.default -(Extra) -org.freedesktop.Platform.GL32.default -org.freedesktop.Platform.GL32.default -org.freedesktop.Platform.GStreamer.gstreamer-vaapi -org.freedesktop.Platform.ffmpeg-full -org.freedesktop.Platform.ffmpeg_full.i386 -org.freedesktop.Platform.openh264 -org.freedesktop.Platform.openh264 -org.freedesktop.Platform.openh264 -SDK -SDK -stable -Application -Application -Application -Application -org.gnome.Platform.Compat.i386 -Software -Software -Library -org.gnome.dspy -Gtk -Gtk -theme -Application -Application -org.kde.PlatformTheme.QGnomePlatform -org.kde.PlatformTheme.QGnomePlatform -org.kde.PlatformTheme.QGnomePlatform -org.kde.WaylandDecoration.QAdwaitaDecorations -org.kde.WaylandDecoration.QAdwaitaDecorations -org.kde.WaylandDecoration.QGnomePlatform-decoration -org.kde.WaylandDecoration.QGnomePlatform-decoration -org.kde.WaylandDecoration.QGnomePlatform-decoration -Volume -org.winehq.Wine.DLLs.dxvk -org.winehq.Wine.gecko -org.winehq.Wine.mono -org.xetibo.ReSet -re.sonny.Workbench diff --git a/scripts/pac b/scripts/pac deleted file mode 100755 index ff4ae3d..0000000 --- a/scripts/pac +++ /dev/null @@ -1,88 +0,0 @@ -#!/bin/bash - -pacfile="$HOME/.config/scripts/pacmanpkg.txt" -flatfile="$HOME/.config/scripts/flatpkg.txt" -carfile="$HOME/.config/scripts/carpkg.txt" - -save() { - pacvar=$(pacman -Q) - flatvar=$(flatpak list | awk '{ print $2 }') - if [ "$pacfile" != ' ' ]; then - touch "$pacfile" - fi - if [ "$flatfile" != ' ' ]; then - touch "$flatfile" - fi - if [ "$carfile" != ' ' ]; then - touch "$carfile" - fi - echo "$pacvar" | awk '{ print $1 }' >"$pacfile" - echo "$flatvar" >"$flatfile" - mkdir -p $HOME/.local/bin/cargo/ - ls $HOME/.local/bin/cargo/bin/ >"$carfile" -} - -load() { - sudo paru -S - <"$pacfile" -} - -install() { - PKG=$(pacman -Ss "^$1$") - if [ "$PKG" == '' ]; then - CHOICE="F" - read -p "Flatpak, cargo or aur? [F/c/a] " CHOICE - if [ "$CHOICE" == 'F' ] || [ "$CHOICE" == '' ]; then - flatpak install "$1" - elif [ "$CHOICE" == 'c' ]; then - mkdir -p $HOME/.local/bin/cargo/ - cargo install "$1" --root $HOME/.local/bin/cargo/ - else - echo "warning, this is an aur package!" - paru -S "$1" - fi - else - paru -S "$1" - fi - save -} - -remove() { - PKG=$(pacman -Qs "$1") - if [ "$PKG" == '' ]; then - flatpak uninstall "$1" - else - sudo pacman -R "$1" - fi - save -} - -update() { - CHOICE="Y" - read -p "Update pacman? [Y/n] " CHOICE - if [ "$CHOICE" == 'Y' ] || [ "$CHOICE" == 'y' ]; then - sudo pacman -Suy - fi - CHOICE="Y" - read -p "Update flatpak? [Y/n] " CHOICE - if [ "$CHOICE" == 'Y' ] || [ "$CHOICE" == 'y' ]; then - flatpak update - fi - CHOICE="Y" - read -p "Update AUR? [Y/n] " CHOICE - if [ "$CHOICE" == 'Y' ] || [ "$CHOICE" == 'y' ]; then - sudo paru -Suy - fi - CHOICE="Y" -} - -if [ "$1" == "-S" ]; then - install "$2" -elif [ "$1" == "-R" ]; then - remove "$2" -elif [ "$1" == "-Suy" ]; then - update -elif [ "$1" == "save" ]; then - save -elif [ "$1" == "load" ]; then - load -fi diff --git a/scripts/pacmanpkg.txt b/scripts/pacmanpkg.txt deleted file mode 100644 index 7893da1..0000000 --- a/scripts/pacmanpkg.txt +++ /dev/null @@ -1,1943 +0,0 @@ -Calculator -a52dec -aalib -abseil-cpp -accounts-qml-module -accountsservice -acl -acorn -acpid -adobe-source-code-pro-fonts -adw-gtk-theme -adw-gtk3 -adwaita-color-schemes -adwaita-cursors -adwaita-icon-theme -adwaita-qt5 -adwaita-qt6 -airshipper -alacritty -alembic -alsa-card-profiles -alsa-lib -alsa-plugins -alsa-topology-conf -alsa-ucm-conf -amd-ucode -amf-headers -android-tools -android-udev -ansible -ansible-core -aom -appstream -appstream-glib -appstream-qt5 -archlinux-keyring -argon2 -aribb24 -aribb25 -arm-none-eabi-binutils -arm-none-eabi-gcc -arm-none-eabi-newlib -asciidoc -asio -assimp -at-spi2-core -atkmm -attica5 -attr -aubio -audacity -audiofile -audit -autoconf -autoconf-archive -automake -avahi -avisynthplus -avr-binutils -avr-gcc -avr-libc -avrdude -awesome-terminal-fonts -aws-c-auth -aws-c-cal -aws-c-common -aws-c-compression -aws-c-event-stream -aws-c-http -aws-c-io -aws-c-mqtt -aws-c-s3 -aws-c-sdkutils -aws-checksums -aws-crt-cpp -aws-sdk-cpp -ayatana-ido -babl -baloo-widgets -baloo5 -base -bash -bat -bc -bcprov -bear -biber -binutils -bison -blas -blender -blosc -blueman -bluez -bluez-libs -bolt -boost -boost-libs -botan -botan2 -box2d -breeze -breeze-icons -breezy -bridge-utils -brightnessctl -brotli -btrfs-progs -bubblewrap -bzip2 -c-ares -ca-certificates -ca-certificates-mozilla -ca-certificates-utils -cabextract -cage -cairo -cairomm -cairomm-1.16 -calf -cambalache-git -cantarell-fonts -capstone -cblas -cdparanoia -cdrtools -chafa -check -chromaprint -chrono-date -cifs-utils -cjson -clamav -clang -clang15 -clinfo -clucene -cmake -cmark -cmatrix -cmocka -cmus -coeurl -colord -colord-gtk-common -colord-gtk4 -comgr -compiler-rt -compiler-rt15 -confuse -containerd -convertlit -copyq -corectrl -coreutils -cpio -cppdap -cpupower -cracklib -cronie -cryptsetup -ctags -cups -cups-filters -cups-pk-helper -curl -cython -d-spy -dash -dav1d -db -db5.3 -dbus -dbus-glib -dbus-python -dconf -debootstrap -default-cursors -deno -desktop-file-utils -devhelp -device-mapper -dfu-programmer -dfu-util -diffutils -djvulibre -dkms -dmidecode -dmraid -dnssec-anchors -docbook-xml -docbook-xsl -docker -docker-compose -dolphin -dos2unix -dosfstools -dotnet-host -dotnet-runtime -dotnet-runtime-6.0 -dotnet-sdk -dotnet-sdk-6.0 -dotnet-targeting-pack -dotnet-targeting-pack-6.0 -double-conversion -downgrade -draco -drawing -dtc -duktape -e2fsprogs -easyeffects -ebook-tools -editline -editorconfig-core-c -edk2-ovmf -efibootmgr -efivar -electron -electron25 -element-web -elfutils -embree -embree3 -enchant -eslint -ethtool -evince -exempi -exiv2 -exo -expat -eza -faac -faad2 -fakeroot -faudio -fcft -fd -ffmpeg -ffmpeg-obs-debug -ffmpegthumbnailer -ffnvcodec-headers -fftw -file -filesystem -findutils -firefox -fish -fisher -flac -flatpak -flatpak-builder -flex -fluidsynth -fmt -foliate -fontconfig -foomatic-db-engine -foot -frameworkintegration5 -freeglut -freeimage -freerdp -freetype2 -frei0r-plugins -fribidi -ftgl -ftl-sdk -fuse-common -fuse2 -fuse3 -fzf -gamemode -gamescope -gavl -gawk -gc -gcc -gcc-libs -gcr -gcr-4 -gd -gdb -gdb-common -gdbm -gdk-pixbuf2 -gdm -gegl -gendesk -geoclue -geocode-glib -geocode-glib-2 -geocode-glib-common -gettext -ghostscript -giflib -gimp -girara -git -gitoxide -gitui -gjs -glade -glava -glew -glfw-wayland -glib-networking -glib2 -glib2-docs -glibc -glibmm -glibmm-2.68 -glm -glslang -glu -gmp -gnome-autoar -gnome-bluetooth-3.0 -gnome-boxes -gnome-builder -gnome-color-manager -gnome-control-center -gnome-desktop -gnome-desktop-4 -gnome-desktop-common -gnome-disk-utility -gnome-keyring -gnome-online-accounts -gnome-remote-desktop -gnome-session -gnome-settings-daemon -gnome-shell -gnome-software -gnome-tweaks -gnupg -gnutls -go -gobject-introspection -gobject-introspection-runtime -godot -gperftools -gpgme -gpm -gptfdisk -gradle -graphene -graphicsmagick -graphite -graphviz -greetd -greetd-agreety -greetd-regreet -grep -grilo -grim -groff -grpc -gsettings-desktop-schemas -gsfonts -gsl -gsm -gsound -gspell -gssdp -gst-libav -gst-plugin-gtk -gst-plugin-pipewire -gst-plugin-qmlgl -gst-plugin-va -gst-plugins-bad -gst-plugins-bad-libs -gst-plugins-base -gst-plugins-base-libs -gst-plugins-good -gst-plugins-ugly -gstreamer -gstreamer-vaapi -gtk-doc -gtk-engine-murrine -gtk-layer-shell -gtk-update-icon-cache -gtk-vnc -gtk2 -gtk3 -gtk4 -gtkdatabox -gtkmm -gtkmm-4.0 -gtkmm3 -gtksourceview4 -gtksourceview5 -gts -gucharmap -guile -gumbo-parser -gupnp -gupnp-dlna -gupnp-igd -gvfs -gvfs-smb -gzip -harfbuzz -harfbuzz-icu -hdf5 -helix -hicolor-icon-theme -hidapi -highway -hplip -hsa-rocr -hsakmt-roct -http-parser -hunspell -hunspell-en_us -hwdata -hwloc -hyphen -hyprdock -hyprland -iana-etc -icu -iio-sensor-proxy -ijs -imagemagick -imath -imlib2 -imv -iniparser -inkscape -intel-oneapi-common -intel-oneapi-compiler-dpcpp-cpp-runtime-libs -intel-oneapi-compiler-shared-runtime-libs -intel-oneapi-tbb -iproute2 -iptables -iputils -iso-codes -jansson -jasper -java-commons-lang -java-environment-common -java-runtime-common -jbig2dec -jbigkit -jdk17-openjdk -jemalloc -jq -jre17-openjdk -jre17-openjdk-headless -js102 -js115 -js91 -json-c -json-glib -jsoncpp -jsonrpc-glib -just -jxrlib -kaccounts-integration -kactivities-stats5 -kactivities5 -kactivitymanagerd -kanshi -karchive5 -kauth5 -kbd -kbookmarks5 -kcmutils5 -kcodecs5 -kcompletion5 -kconfig5 -kconfigwidgets5 -kcontacts5 -kcoreaddons5 -kcrash5 -kdbusaddons5 -kde-cli-tools -kdeclarative5 -kdeconnect -kdecoration -kded5 -kdenlive -kdesu5 -kdnssd5 -kdsoap-qt5 -kdsoap-qt6 -kdsoap-ws-discovery-client -keepassxc -keyutils -kfilemetadata5 -kglobalaccel5 -kguiaddons5 -kholidays5 -ki18n5 -kiconthemes5 -kidletime5 -kio-extras -kio-fuse -kio5 -kirigami-addons5 -kirigami2 -kitemmodels5 -kitemviews5 -kitty -kitty-shell-integration -kitty-terminfo -kjobwidgets5 -klavaro -kmod -knewstuff5 -knotifications5 -knotifyconfig5 -kooha -kpackage5 -kparts5 -kpeople5 -kpeoplevcard -kpipewire -kpty5 -kquickcharts5 -krb5 -krita -krunner5 -kscreenlocker -kservice5 -ksystemstats -ktexteditor5 -ktextwidgets5 -kuserfeedback5 -kwallet5 -kwayland5 -kwidgetsaddons5 -kwin -kwindowsystem5 -kxmlgui5 -l-smash -ladspa -lame -lapack -layer-shell-qt -lazygit -lcms2 -ldb -ldns -lensfun -leptonica -less -level-zero-loader -lib2geom -lib32-acl -lib32-alsa-lib -lib32-alsa-plugins -lib32-at-spi2-core -lib32-attr -lib32-brotli -lib32-bzip2 -lib32-cairo -lib32-clang -lib32-curl -lib32-dbus -lib32-e2fsprogs -lib32-expat -lib32-faudio -lib32-flac -lib32-fontconfig -lib32-freetype2 -lib32-fribidi -lib32-gcc-libs -lib32-gdk-pixbuf2 -lib32-gettext -lib32-glib2 -lib32-glibc -lib32-glu -lib32-gmp -lib32-gnutls -lib32-gtk2 -lib32-harfbuzz -lib32-icu -lib32-keyutils -lib32-krb5 -lib32-lcms2 -lib32-libasyncns -lib32-libcap -lib32-libcups -lib32-libdatrie -lib32-libdrm -lib32-libelf -lib32-libffi -lib32-libgcrypt -lib32-libglvnd -lib32-libgpg-error -lib32-libice -lib32-libidn2 -lib32-libjpeg-turbo -lib32-libldap -lib32-libnl -lib32-libogg -lib32-libpcap -lib32-libpciaccess -lib32-libpng -lib32-libpsl -lib32-libpulse -lib32-libsm -lib32-libsndfile -lib32-libssh2 -lib32-libtasn1 -lib32-libthai -lib32-libtiff -lib32-libtirpc -lib32-libunistring -lib32-libunwind -lib32-libvorbis -lib32-libx11 -lib32-libxau -lib32-libxcb -lib32-libxcomposite -lib32-libxcrypt -lib32-libxcrypt-compat -lib32-libxcursor -lib32-libxdamage -lib32-libxdmcp -lib32-libxext -lib32-libxfixes -lib32-libxft -lib32-libxi -lib32-libxinerama -lib32-libxml2 -lib32-libxrandr -lib32-libxrender -lib32-libxshmfence -lib32-libxss -lib32-libxtst -lib32-libxxf86vm -lib32-llvm-libs -lib32-lm_sensors -lib32-mesa -lib32-ncurses -lib32-nettle -lib32-nspr -lib32-nss -lib32-opencl-clover-mesa -lib32-opencl-rusticl-mesa -lib32-openssl -lib32-opus -lib32-p11-kit -lib32-pam -lib32-pango -lib32-pcre2 -lib32-pixman -lib32-sdl2 -lib32-spirv-llvm-translator -lib32-spirv-tools -lib32-sqlite -lib32-systemd -lib32-util-linux -lib32-vulkan-icd-loader -lib32-vulkan-radeon -lib32-wayland -lib32-xcb-util-keysyms -lib32-xz -lib32-zlib -lib32-zstd -libabw -libaccounts-glib -libaccounts-qt -libadwaita -libaec -libaio -libajantv2-debug -libao -libappindicator-gtk3 -libarchive -libass -libassuan -libasyncns -libatasmart -libatomic_ops -libavc1394 -libavif -libavtp -libayatana-appindicator -libayatana-indicator -libb2 -libblockdev -libbluray -libbpf -libbs2b -libbsd -libburn -libbytesize -libc++ -libc++abi -libcaca -libcacard -libcamera -libcamera-ipa -libcanberra -libcap -libcap-ng -libcddb -libcdio -libcdio-paranoia -libcdr -libclc -libcloudproviders -libcmis -libcolord -libconfig -libcpuid -libcue -libcups -libcupsfilters -libdaemon -libdatrie -libdbusmenu-glib -libdbusmenu-gtk3 -libdbusmenu-qt5 -libdc1394 -libdca -libde265 -libdecor -libdeflate -libdex -libdiscid -libdisplay-info -libdmtx -libdovi -libdrm -libdv -libdvbpsi -libdvdcss -libdvdnav -libdvdread -libe-book -libebml -libebur128 -libedit -libei -libelf -libepoxy -libepubgen -libetonyek -libevdev -libevent -libexif -libexttextcat -libfakekey -libfdk-aac -libffi -libfontenc -libfreeaptx -libfreehand -libftdi -libgcrypt -libgdm -libgee -libgexiv2 -libgirepository -libgit2 -libgit2-glib -libglvnd -libgme -libgnomekbd -libgoa -libgoom2 -libgpg-error -libgrss -libgsf -libgssglue -libgtop -libgudev -libgusb -libgweather-4 -libgxps -libhandy -libharu -libheif -libibus -libical -libice -libid3tag -libidn -libidn2 -libiec61883 -libimagequant -libimobiledevice -libindicator-gtk3 -libinih -libinput -libinstpatch -libiptcdata -libisl -libisoburn -libisofs -libixion -libjpeg-turbo -libjxl -libkate -libkdcraw5 -libkexiv2 -libksba -libkscreen -libksysguard -liblangtag -liblc3 -libldac -libldap -libliftoff -liblo -liblqr -liblrdf -liblsp-r3d-glx-lib -libltc -libluv -liblzf -libmad -libmalcontent -libmanette -libmatroska -libmbim -libmd -libmfx -libmicrodns -libmikmod -libmm-glib -libmms -libmng -libmnl -libmodplug -libmpc -libmpcdec -libmpdclient -libmpeg2 -libmspack -libmspub -libmtp -libmupdf -libmwaw -libmypaint -libmysofa -libnautilus-extension -libnbd -libndp -libnet -libnetfilter_conntrack -libnewt -libnfnetlink -libnfs -libnftnl -libnghttp2 -libnice -libnl -libnm -libnma -libnma-common -libnma-gtk4 -libnotify -libnsgif -libnsl -libnumbertext -libnvme -liboauth -libodfgen -libogg -libolm -libomxil-bellagio -libopenmpt -liborcus -libosinfo -libotf -libp11-kit -libpackagekit-glib -libpagemaker -libpanel -libpaper -libpcap -libpciaccess -libpeas -libpeas-2 -libpgm -libpipeline -libpipewire -libplacebo -libplist -libpng -libportal -libportal-gtk3 -libportal-gtk4 -libppd -libproxy -libpsl -libpulse -libpwquality -libqaccessibilityclient-qt5 -libqalculate -libqmi -libqrtr-glib -libqxp -libraqm -libraw -libraw1394 -libreoffice-fresh -librest -librevenge -librist -librsvg -librsync -libsamplerate -libsasl -libsass -libsbsms -libseccomp -libsecret -libshout -libsidplay -libsidplayfp -libsigc++ -libsigc++-3.0 -libslirp -libsm -libsndfile -libsodium -libsoup -libsoup3 -libsoxr -libspecbleach -libspectre -libspeechd -libspiro -libspnav -libsquish -libsrtp -libssh -libssh2 -libstaroffice -libstemmer -libsynctex -libsysprof-capture -libtar -libtasn1 -libteam -libtermkey -libthai -libtheora -libtiff -libtiger -libtirpc -libtommath -libtool -libtorrent -libtpms -libtraceevent -libtracefs -libunibreak -libunistring -libunwind -libupnp -liburcu -liburing -libusb -libusb-compat -libusbmuxd -libutempter -libutf8proc -libuv -libva -libva-mesa-driver -libva-utils -libvarlink -libvdpau -libverto -libvirt -libvirt-glib -libvirt-python -libvisio -libvisual -libvncserver -libvorbis -libvpx -libvterm -libvterm01 -libwacom -libwbclient -libwebp -libwireplumber -libwmf -libwpd -libwpe -libwpg -libwps -libwslay -libx11 -libxau -libxaw -libxcb -libxcomposite -libxcrypt -libxcrypt-compat -libxcursor -libxcvt -libxdamage -libxdg-basedir -libxdmcp -libxext -libxfce4ui -libxfce4util -libxfixes -libxfont2 -libxft -libxi -libxinerama -libxkbcommon -libxkbcommon-x11 -libxkbfile -libxklavier -libxml2 -libxmlb -libxmlrpc -libxmu -libxpm -libxpresent -libxrandr -libxrender -libxres -libxshmfence -libxslt -libxss -libxt -libxtst -libxv -libxxf86vm -libyaml -libyuv -libzip -libzmf -licenses -lilv -linux-api-headers -linux-firmware -linux-firmware-whence -linux-headers -linux-zen -linux-zen-headers -lirc -live-media -lld -lldb -llvm -llvm-libs -llvm15-libs -lm_sensors -lmdb -log4cplus -lowdown -lpsolve -lsb-release -lsd -lsof -lua -lua51 -lua51-lpeg -luajit -lv2 -lvm2 -lxappearance -lz4 -lzo -m17n-db -m17n-lib -m4 -mailcap -make -man-db -materialx -mbedtls -mbedtls2 -md4c -mdadm -media-player-info -mesa -mesa-utils -meson -metis -milou -mimalloc -mingw-w64-binutils -mingw-w64-crt -mingw-w64-gcc -mingw-w64-headers -mingw-w64-winpthreads -miniupnpc -minizip -minizip-ng -mjpegtools -mkinitcpio -mkinitcpio-busybox -mlt -mobile-broadband-provider-info -modemmanager -modemmanager-qt5 -mold -mpc -mpd -mpfr -mpg123 -mpv -msgpack-c -mtdev -mtools -mtpfs -mtxclient -mujs -multipath-tools -mutter -mypaint-brushes1 -nasm -nautilus -nautilus-image-converter -nautilus-sendto -nautilus-share -ncmpcpp -ncurses -ndctl -neofetch -neon -neovide -neovim -net-snmp -netpbm -netstandard-targeting-pack -nettle -network-manager-applet -networkmanager -networkmanager-openconnect -networkmanager-openvpn -nextcloud-client -nheko -ninja -nix -nix-busybox -nlohmann-json -nm-connection-editor -nnn -node-gyp -nodejs -nodejs-nopt -noise-suppression-for-voice -noto-fonts -npm -npth -nspr -nss -ntfs-3g -numactl -nushell -nuspell -oath-toolkit -ocl-icd -onefetch -onetbb -onevpl -oniguruma -openal -opencl-clover-mesa -opencl-headers -opencl-rusticl-mesa -opencollada -opencolorio -openconnect -opencore-amr -openexr -openimagedenoise -openimageio -openjpeg2 -openmpi -openpgl -openpmix -openshadinglanguage -openssh -openssl -opensubdiv -openvdb -openvpn -openvr -openxr -opus -opusfile -orc -osinfo-db -ostree -oxicalc -oxygen-sounds -p11-kit -p7zip -pacman -pacman-contrib -pacman-mirrorlist -pahole -pam -pambase -pango -pangomm -pangomm-2.48 -papirus-icon-theme -parted -pass -patch -pavucontrol -pciutils -pcre -pcre2 -pcsclite -pdf2svg -pdfgrep -pdftk -perl -perl-alien-build -perl-alien-libxml2 -perl-autovivification -perl-b-hooks-endofscope -perl-business-isbn -perl-business-isbn-data -perl-business-ismn -perl-business-issn -perl-capture-tiny -perl-class-accessor -perl-class-data-inheritable -perl-class-inspector -perl-class-load -perl-class-singleton -perl-clone -perl-data-compare -perl-data-dump -perl-data-optlist -perl-data-uniqid -perl-datetime -perl-datetime-calendar-julian -perl-datetime-format-builder -perl-datetime-format-strptime -perl-datetime-locale -perl-datetime-timezone -perl-dbi -perl-devel-stacktrace -perl-dist-checkconflicts -perl-encode-locale -perl-error -perl-eval-closure -perl-exception-class -perl-exporter-tiny -perl-ffi-checklib -perl-file-chdir -perl-file-find-rule -perl-file-homedir -perl-file-listing -perl-file-sharedir -perl-file-sharedir-install -perl-file-slurp-tiny -perl-file-slurper -perl-file-which -perl-html-parser -perl-html-tagset -perl-http-cookiejar -perl-http-cookies -perl-http-daemon -perl-http-date -perl-http-message -perl-http-negotiate -perl-io-html -perl-io-socket-ssl -perl-io-string -perl-ipc-run3 -perl-libwww -perl-lingua-translit -perl-list-allutils -perl-list-moreutils -perl-list-moreutils-xs -perl-list-someutils -perl-list-utilsby -perl-log-log4perl -perl-lwp-mediatypes -perl-lwp-protocol-https -perl-mailtools -perl-math-round -perl-mime-charset -perl-module-implementation -perl-module-runtime -perl-mozilla-ca -perl-mro-compat -perl-namespace-autoclean -perl-namespace-clean -perl-net-http -perl-net-ssleay -perl-number-compare -perl-package-deprecationmanager -perl-package-stash -perl-package-stash-xs -perl-params-util -perl-params-validate -perl-params-validationcompiler -perl-parse-recdescent -perl-parse-yapp -perl-path-tiny -perl-perlio-utf8-strict -perl-regexp-common -perl-role-tiny -perl-sort-key -perl-specio -perl-sub-exporter -perl-sub-exporter-progressive -perl-sub-identify -perl-sub-install -perl-sub-name -perl-test-fatal -perl-text-bibtex -perl-text-csv -perl-text-glob -perl-text-roman -perl-tie-cycle -perl-timedate -perl-try-tiny -perl-unicode-linebreak -perl-uri -perl-variable-magic -perl-www-robotrules -perl-xml-libxml -perl-xml-libxml-simple -perl-xml-libxslt -perl-xml-namespacesupport -perl-xml-sax -perl-xml-sax-base -perl-xml-writer -perl-yaml-tiny -phodav -phonon-qt5 -phonon-qt5-gstreamer -pinentry -pipewire -pipewire-alsa -pipewire-audio -pipewire-jack -pipewire-pulse -pixman -pkcs11-helper -pkgconf -plantuml -plasma-framework5 -plasma-integration -plasma-workspace -playerctl -pnpm -polkit -polkit-gnome -polkit-qt5 -poppler -poppler-data -poppler-glib -poppler-qt5 -popt -portaudio -portmidi -portsmf -postgresql-libs -potrace -ppp -prison5 -procps-ng -projectm -protobuf -psmisc -ptex -pugixml -pulseaudio-qt -purpose5 -pybind11 -pyside2 -pyside6 -pystring -python -python-aiohttp -python-aiosignal -python-annotated-types -python-anytree -python-appdirs -python-argcomplete -python-argon2-cffi-bindings -python-argon2_cffi -python-async-timeout -python-attrs -python-autocommand -python-babel -python-bcrypt -python-beautifulsoup4 -python-cachecontrol -python-cairo -python-certifi -python-cffi -python-chardet -python-charset-normalizer -python-click -python-cmake-build-extension -python-colorama -python-configobj -python-construct -python-coverage -python-cryptography -python-cssselect -python-dacite -python-dateutil -python-decorator -python-distlib -python-distro -python-docopt -python-docutils -python-dotty-dict -python-dulwich -python-evdev -python-fastbencode -python-fastjsonschema -python-filelock -python-frozenlist -python-future -python-gitdb -python-gitpython -python-gobject -python-halo -python-hid -python-hjson -python-idna -python-imagesize -python-inflect -python-jaraco.context -python-jaraco.functools -python-jaraco.text -python-jinja -python-jsonschema -python-jsonschema-specifications -python-lockfile -python-log_symbols -python-lxml -python-mako -python-markdown -python-markupsafe -python-merge3 -python-milc -python-moddb -python-more-itertools -python-msgpack -python-multidict -python-nautilus -python-nspektr -python-numpy -python-opengl -python-ordered-set -python-packaging -python-paramiko -python-patiencediff -python-pillow -python-pip -python-pipenv -python-pipx -python-platformdirs -python-ply -python-psutil -python-pycparser -python-pycryptodomex -python-pycups -python-pycurl -python-pydantic -python-pydantic-core -python-pygments -python-pykeepass -python-pynacl -python-pyotp -python-pyparsing -python-pyrate-limiter -python-pyrsistent -python-pyserial -python-pytz -python-pyusb -python-referencing -python-requests -python-resolvelib -python-rpds-py -python-setuptools -python-setuptools-scm -python-shiboken2 -python-six -python-smmap -python-snowballstemmer -python-soupsieve -python-sphinx -python-sphinx-alabaster-theme -python-sphinxcontrib-applehelp -python-sphinxcontrib-devhelp -python-sphinxcontrib-htmlhelp -python-sphinxcontrib-jsmath -python-sphinxcontrib-qthelp -python-sphinxcontrib-serializinghtml -python-spinners -python-termcolor -python-toml -python-tomli -python-toolz -python-tqdm -python-trove-classifiers -python-typing_extensions -python-urllib3 -python-userpath -python-validate-pyproject -python-validators -python-virtualenv -python-virtualenv-clone -python-wheel -python-xlib -python-yaml -python-yarl -python-zstandard -python-zxcvbn -qca-qt5 -qemu-audio-alsa -qemu-audio-dbus -qemu-audio-jack -qemu-audio-oss -qemu-audio-pa -qemu-audio-pipewire -qemu-audio-sdl -qemu-audio-spice -qemu-base -qemu-block-curl -qemu-block-dmg -qemu-block-nfs -qemu-block-ssh -qemu-chardev-spice -qemu-common -qemu-desktop -qemu-hw-display-qxl -qemu-hw-display-virtio-gpu -qemu-hw-display-virtio-gpu-gl -qemu-hw-display-virtio-gpu-pci -qemu-hw-display-virtio-gpu-pci-gl -qemu-hw-display-virtio-vga -qemu-hw-display-virtio-vga-gl -qemu-hw-s390x-virtio-gpu-ccw -qemu-hw-usb-host -qemu-hw-usb-redirect -qemu-hw-usb-smartcard -qemu-img -qemu-pr-helper -qemu-system-x86 -qemu-system-x86-firmware -qemu-tools -qemu-ui-curses -qemu-ui-dbus -qemu-ui-egl-headless -qemu-ui-gtk -qemu-ui-opengl -qemu-ui-sdl -qemu-ui-spice-app -qemu-ui-spice-core -qemu-vhost-user-gpu -qgnomeplatform-qt5 -qgnomeplatform-qt6 -qmk -qpdf -qqc2-desktop-style5 -qrencode -qt5-3d -qt5-base -qt5-charts -qt5-connectivity -qt5-datavis3d -qt5-declarative -qt5-doc -qt5-examples -qt5-gamepad -qt5-graphicaleffects -qt5-imageformats -qt5-location -qt5-lottie -qt5-multimedia -qt5-networkauth -qt5-purchasing -qt5-quick3d -qt5-quickcontrols -qt5-quickcontrols2 -qt5-quicktimeline -qt5-remoteobjects -qt5-script -qt5-scxml -qt5-sensors -qt5-serialbus -qt5-serialport -qt5-speech -qt5-svg -qt5-tools -qt5-translations -qt5-virtualkeyboard -qt5-wayland -qt5-webchannel -qt5-webengine -qt5-webglplugin -qt5-websockets -qt5-webview -qt5-x11extras -qt5-xmlpatterns -qt5ct -qt6-3d -qt6-5compat -qt6-base -qt6-charts -qt6-connectivity -qt6-datavis3d -qt6-declarative -qt6-doc -qt6-examples -qt6-imageformats -qt6-languageserver -qt6-lottie -qt6-multimedia -qt6-multimedia-ffmpeg -qt6-networkauth -qt6-positioning -qt6-quick3d -qt6-quicktimeline -qt6-remoteobjects -qt6-scxml -qt6-sensors -qt6-serialbus -qt6-serialport -qt6-shadertools -qt6-svg -qt6-tools -qt6-translations -qt6-virtualkeyboard -qt6-wayland -qt6-webchannel -qt6-webengine -qt6-websockets -qt6-webview -qt6ct -qtkeychain-qt5 -qtractor -quazip-qt5 -ragel -rapidjson -rapidyaml -raptor -rasqal -rav1e -re2 -readline -redland -remmina -rest -rhash -ripgrep -rkhunter -rnnoise -rnote -rocm-core -rocm-device-libs -rocm-opencl-runtime -rocm-opencl-sdk -rofi-calc -rofi-lbonn-wayland-git -rpm-tools -rsync -rtkit -rtmpdump -rtorrent -rubberband -run-parts -runc -rustdesk -rustup -s2n-tls -samba -sassc -sbc -scdoc -scour -sdbus-cpp -sdl12-compat -sdl2 -sdl2_image -sdl_image -seabios -seahorse -seatd -sed -semver -sequoia-sq -serd -shaderc -shadow -shared-mime-info -shiboken6 -signon-kwallet-extension -signon-plugin-oauth2 -signon-ui -signond -slang -slurp -smbclient -snapper -snappy -sndio -solid5 -sonnet5 -sord -sound-theme-freedesktop -soundtouch -source-highlight -spandsp -spdlog -speex -speexdsp -spice -spice-gtk -spice-protocol -spirv-llvm-translator -spirv-tools -spotifyd -sqlcipher -sqlite -sratom -srt -starship -startup-notification -steam -stoken -sudo -suil -suitesparse -sushi -svt-av1 -svt-hevc -swappy -sway -swayimg -swaylock -swig -syndication5 -syntax-highlighting5 -sysfsutils -sysprof -system-config-printer -systemd -systemd-libs -systemd-sysvcompat -systemsettings -taglib -talloc -tar -tcl -tdb -tecla -tectonic -template-glib -tesseract -tesseract-data-eng -tesseract-data-osd -testdisk -tevent -texinfo -thin-provisioning-tools -threadweaver5 -thunar -thunderbird -timeshift -tinycompress -tinyxml -totem -totem-pl-parser -tpm2-tss -tracker3 -tracker3-miners -tree -tree-sitter -ts-node -tslib -ttc-iosevka -ttf-hack -ttf-jetbrains-mono -ttf-jetbrains-mono-nerd -ttf-liberation -ttf-linux-libertine -ttf-monofur -ttf-nerd-fonts-symbols -ttf-nerd-fonts-symbols-common -ttf-noto-nerd -twolame -typescript -typescript-language-server -typst -tzdata -uchardet -udisks2 -ufw -unibilium -unoconv -unrar -unzip -upower -usbmuxd -usbredir -usbutils -usd -util-linux -util-linux-libs -uutils-coreutils -uwufetch -v4l-utils -v4l2loopback-dkms -vala -vamp-plugin-sdk -vcdimager -vde2 -vencord-desktop-git -vid.stab -virglrenderer -virt-install -virt-manager -virtiofsd -virtualbox -virtualbox-host-dkms -vlc-luajit -vlc-luajit-debug -vmaf -volume_key -vpnc -vte-common -vte3 -vte4 -vulkan-headers -vulkan-icd-loader -vulkan-radeon -vulkan-validation-layers -wavpack -waybar -wayland -wayland-protocols -wayland-utils -webkit2gtk -webkit2gtk-4.1 -webkitgtk-6.0 -webrtc-audio-processing -webrtc-audio-processing-1 -websocketpp -wget -which -wildmidi -wine -wireplumber -wl-clipboard -wlroots -wlroots0.15 -wlroots0.16 -woff2 -wofi -wolfssl -wpa_supplicant -wpebackend-fdo -wxwidgets-common -wxwidgets-gtk3 -x264 -x265 -xapp -xcb-proto -xcb-util -xcb-util-cursor -xcb-util-errors -xcb-util-image -xcb-util-keysyms -xcb-util-renderutil -xcb-util-wm -xcb-util-xrm -xdg-dbus-proxy -xdg-desktop-portal -xdg-desktop-portal-gtk -xdg-desktop-portal-hyprland -xdg-user-dirs -xdg-utils -xdotool -xf86-input-libinput -xfconf -xfsprogs -xkeyboard-config -xmlsec -xone-dkms-git -xone-dongle-firmware -xorg-fonts-alias-misc -xorg-fonts-encodings -xorg-fonts-misc -xorg-server -xorg-server-common -xorg-setxkbmap -xorg-xhost -xorg-xinput -xorg-xkbcomp -xorg-xmessage -xorg-xprop -xorg-xrandr -xorg-xrdb -xorg-xset -xorg-xsetroot -xorg-xwayland -xorgproto -xosd -xournalpp -xvidcore -xxhash -xz -yajl -yaml-cpp -yarn -yasm -yay -youtube-dl -yt-dlp -zathura -zathura-pdf-mupdf -zbar -zenith -zenity -zeromq -zig -zimg -zip -zita-convolver -zix -zlib -zoxide -zsh -zsh-autosuggestions -zsh-completions -zsh-syntax-highlighting -zsh-theme-powerlevel10k -zstd -zvbi -zxing-cpp -zziplib diff --git a/setup.sh b/setup.sh deleted file mode 100755 index f7ee387..0000000 --- a/setup.sh +++ /dev/null @@ -1,17 +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/hypr_desktop -unlink $HOME/.config/hypr_laptop -unlink $HOME/.config/setup.sh -unlink $HOME/.config/dotFiles - -gsettings set org.gnome.desktop.interface gtk-theme 'adw-gtk3' && gsettings set org.gnome.desktop.interface color-scheme 'default' - -if [ "$1" = "laptop" ]; then - ln -s $PWD/hypr_laptop $HOME/.config/hypr -elif [ "$1" = "desktop" ]; then - ln -s $PWD/hypr_desktop $HOME/.config/hypr -fi 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/tokyonight-vimium b/tokyonight-vimium deleted file mode 100644 index 71f092e..0000000 --- a/tokyonight-vimium +++ /dev/null @@ -1,164 +0,0 @@ -/* -Dracula theme for Vimium -by Trollwut (trollwut@trollwut.org). This code is in the public domain. -changed to tokyonight -To use: - 1. Copy the code. - 2. Go to the Vimium options. - 3. Click Show Advanced Options. - 4. Under Advanced Options, scroll down to CSS for link hints. - 5. Paste the code in the text field. - 6. Click Save Changes. - 7. Go to the website of your choice (or, if you have it open already, reload it) and check out the results. -*/ - -/* Link hint boxes */ -div > .vimiumHintMarker { - background: #1A1B26; - font-size: 12px; - border: 0.25em solid #ffb86c; - border-radius: 0.34em; - box-shadow: 0em 0.1em 0.6em 0.1em rgba(0, 0, 0, 0.4); -} - -/* Link hint text */ -div > .vimiumHintMarker span { - color: #f8f8f2; - font-size: inherit; - text-shadow: none; -} - -/* Link hint matching characters */ -div > .vimiumHintMarker > .matchingCharacter { - color: #2F3240; -} - -/* HUD ("heads-up display") bar */ -div.vimiumHUD { - background: #1A1B26; - border: 1px solid #2F3240; -} - -div.vimiumHUD .vimiumHUDSearchArea { - background: #1A1B26; -} - -div.vimiumHUD .hud-find { - background: #1A1B26; - border: none; - color: #f8f8f2; -} - -div.vimiumHUD span#hud-find-input{ - color: #f8f8f2; /* 'Foreground' color */ -} - -div.vimiumHUD span#hud-match-count { - color: #2F3240; /* 'Comment' color */ -} - -div.vimiumHUD .vimiumHUDSearchAreaInner { - color: #2F3240; /* 'Comment' color */ -} - -#vomnibar{ - background-color: #1A1B26; -} - -#vomnibar input { - color: #f8f8f2; - font: -moz-window; - /*font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;*/ - font-size: 20px; - height: 34px; - margin-bottom: 0; - padding: 4px; - background-color: #1A1B26; - border-radius: 3px; - border: 1px solid #1A1B26; - /* box-shadow: #bd93f9 0px 0px 1px; */ - width: 100%; - outline: none; - box-sizing: border-box; -} - -#vomnibar .vomnibarSearchArea { - display: block; - padding: 10px; - background-color: #2F3240; - border-radius: 4px 4px 0 0; - border-bottom: 0px solid #bd93f9; -} - -#vomnibar ul { - background-color: #1A1B26; - border-radius: 0 0 4px 4px; - list-style: none; - padding-top: 0; - padding-bottom: 0; - margin-block-start: 2px; - margin-block-end: 0px; -} - -#vomnibar li { - border-bottom: 1px solid #2F3240; - line-height: 1.1em; - padding: 7px 10px; - font-size: 16px; - color: #f8f8f2; - position: relative; - display: list-item; - margin: auto; -} - -#vomnibar li .vomnibarBottomHalf { - font-size: 15px; - margin-top: 3px; - padding: 2px 0; -} - -#vomnibar li .vomnibarSource { - color: #bd93f9; - margin-right: 4px; -} -#vomnibar li .vomnibarRelevancy { - position: absolute; - right: 0; - top: 0; - padding: 5px; - background-color: #1A1B26; - color: #f8f8f2; - font-family: monospace; - width: 100px; - overflow: hidden; -} - -#vomnibar li .vomnibarUrl { - white-space: nowrap; - color: #50fa7b; -} - -#vomnibar li .vomnibarMatch { - font-weight: bold; - color: #ffb86c; -} - -#vomnibar li em, #vomnibar li .vomnibarTitle { - color: #f8f8f2; - margin-left: 4px; - font-weight: normal; -} -#vomnibar li em { font-style: italic; } -#vomnibar li em .vomnibarMatch, #vomnibar li .vomnibarTitle .vomnibarMatch { - color: #ffb86c; -} - -#vomnibar li.vomnibarSelected { - background-color: #2F3240; - font-weight: normal; -} - -#vomnibarInput::selection { - background-color: #8be9fd; -} - diff --git a/xdg-desktop-portal/portals.conf b/xdg-desktop-portal/portals.conf deleted file mode 100644 index b0ce21b..0000000 --- a/xdg-desktop-portal/portals.conf +++ /dev/null @@ -1,2 +0,0 @@ -[preferred] -default=hyprland;gtk diff --git a/yazi/keymap.toml b/yazi/keymap.toml deleted file mode 100644 index e3dfe26..0000000 --- a/yazi/keymap.toml +++ /dev/null @@ -1,233 +0,0 @@ -[manager] - -keymap = [ - { on = [ "" ], exec = "escape", desc = "Exit visual mode, clear selected, or cancel search" }, - { on = [ "q" ], exec = "quit", desc = "Exit the process" }, - { on = [ "Q" ], exec = "quit --no-cwd-file", desc = "Exit the process without writing cwd-file" }, - { on = [ "" ], exec = "close", desc = "Close the current tab, or quit if it is last tab" }, - { on = [ "" ], exec = "suspend", desc = "Suspend the process" }, - - # Navigation - { on = [ "l" ], exec = "arrow -1", desc = "Move cursor up" }, - { on = [ "k" ], exec = "arrow 1", desc = "Move cursor down" }, - - { on = [ "L" ], exec = "arrow -5", desc = "Move cursor up 5 lines" }, - { on = [ "K" ], exec = "arrow 5", desc = "Move cursor down 5 lines" }, - - { on = [ "" ], exec = "arrow -50%", desc = "Move cursor up half page" }, - { on = [ "" ], exec = "arrow 50%", desc = "Move cursor down half page" }, - { on = [ "" ], exec = "arrow -100%", desc = "Move cursor up one page" }, - { on = [ "" ], exec = "arrow 100%", desc = "Move cursor down one page" }, - - { on = [ "j" ], exec = "leave", desc = "Go back to the parent directory" }, - { on = [ ";" ], exec = "enter", desc = "Enter the child directory" }, - - { on = [ "J" ], exec = "back", desc = "Go back to the previous directory" }, - { on = [ "P" ], exec = "forward", desc = "Go forward to the next directory" }, - - { on = [ "" ], exec = "peek -5", desc = "Peek up 5 units in the preview" }, - { on = [ "" ], exec = "peek 5", desc = "Peek down 5 units in the preview" }, - - { on = [ "" ], exec = "arrow -1", desc = "Move cursor up" }, - { on = [ "" ], exec = "arrow 1", desc = "Move cursor down" }, - { on = [ "" ], exec = "leave", desc = "Go back to the parent directory" }, - { on = [ "" ], exec = "enter", desc = "Enter the child directory" }, - - { on = [ "g", "g" ], exec = "arrow -99999999", desc = "Move cursor to the top" }, - { on = [ "G" ], exec = "arrow 99999999", desc = "Move cursor to the bottom" }, - - # Selection - { on = [ "" ], exec = [ "select --state=none", "arrow 1" ], desc = "Toggle the current selection state" }, - { on = [ "v" ], exec = "visual_mode", desc = "Enter visual mode (selection mode)" }, - { on = [ "V" ], exec = "visual_mode --unset", desc = "Enter visual mode (unset mode)" }, - { on = [ "" ], exec = "select_all --state=true", desc = "Select all files" }, - { on = [ "" ], exec = "select_all --state=none", desc = "Inverse selection of all files" }, - - # Operation - { on = [ "o" ], exec = "open", desc = "Open the selected files" }, - { on = [ "O" ], exec = "open --interactive", desc = "Open the selected files interactively" }, - { on = [ "" ], exec = "open", desc = "Open the selected files" }, - { on = [ "" ], exec = "open --interactive", desc = "Open the selected files interactively" }, # It's cool if you're using a terminal that supports CSI u - { on = [ "y" ], exec = "yank", desc = "Copy the selected files" }, - { on = [ "x" ], exec = "yank --cut", desc = "Cut the selected files" }, - { on = [ "p" ], exec = "paste", desc = "Paste the files" }, - { on = [ "P" ], exec = "paste --force", desc = "Paste the files (overwrite if the destination exists)" }, - { on = [ "-" ], exec = "link", desc = "Symlink the absolute path of files" }, - { on = [ "_" ], exec = "link --relative", desc = "Symlink the relative path of files" }, - { on = [ "d" ], exec = "remove", desc = "Move the files to the trash" }, - { on = [ "D" ], exec = "remove --permanently", desc = "Permanently delete the files" }, - { on = [ "a" ], exec = "create", desc = "Create a file or directory (ends with / for directories)" }, - { on = [ "r" ], exec = "rename", desc = "Rename a file or directory" }, - { on = [ ";" ], exec = "shell", desc = "Run a shell command" }, - { on = [ ":" ], exec = "shell --block", desc = "Run a shell command (block the UI until the command finishes)" }, - { on = [ "." ], exec = "hidden toggle", desc = "Toggle the visibility of hidden files" }, - { on = [ "s" ], exec = "search fd", desc = "Search files by name using fd" }, - { on = [ "S" ], exec = "search rg", desc = "Search files by content using ripgrep" }, - { on = [ "" ], exec = "search none", desc = "Cancel the ongoing search" }, - { on = [ "z" ], exec = "jump zoxide", desc = "Jump to a directory using zoxide" }, - { on = [ "Z" ], exec = "jump fzf", desc = "Jump to a directory, or reveal a file using fzf" }, - - # Copy - { on = [ "c", "c" ], exec = "copy path", desc = "Copy the absolute path" }, - { on = [ "c", "d" ], exec = "copy dirname", desc = "Copy the path of the parent directory" }, - { on = [ "c", "f" ], exec = "copy filename", desc = "Copy the name of the file" }, - { on = [ "c", "n" ], exec = "copy name_without_ext", desc = "Copy the name of the file without the extension" }, - - # Find - { on = [ "/" ], exec = "find --smart" }, - { on = [ "?" ], exec = "find --previous --smart" }, - { on = [ "n" ], exec = "find_arrow" }, - { on = [ "N" ], exec = "find_arrow --previous" }, - - # Sorting - { on = [ ",", "a" ], exec = "sort alphabetical --dir_first", desc = "Sort alphabetically" }, - { on = [ ",", "A" ], exec = "sort alphabetical --reverse --dir_first", desc = "Sort alphabetically (reverse)" }, - { on = [ ",", "c" ], exec = "sort created --dir_first", desc = "Sort by creation time" }, - { on = [ ",", "C" ], exec = "sort created --reverse --dir_first", desc = "Sort by creation time (reverse)" }, - { on = [ ",", "m" ], exec = "sort modified --dir_first", desc = "Sort by modified time" }, - { on = [ ",", "M" ], exec = "sort modified --reverse --dir_first", desc = "Sort by modified time (reverse)" }, - { on = [ ",", "n" ], exec = "sort natural --dir_first", desc = "Sort naturally" }, - { on = [ ",", "N" ], exec = "sort natural --reverse --dir_first", desc = "Sort naturally (reverse)" }, - { on = [ ",", "s" ], exec = "sort size --dir_first", desc = "Sort by size" }, - { on = [ ",", "S" ], exec = "sort size --reverse --dir_first", desc = "Sort by size (reverse)" }, - - # Tabs - { on = [ "t" ], exec = "tab_create --current", desc = "Create a new tab using the current path" }, - - { on = [ "1" ], exec = "tab_switch 0", desc = "Switch to the first tab" }, - { on = [ "2" ], exec = "tab_switch 1", desc = "Switch to the second tab" }, - { on = [ "3" ], exec = "tab_switch 2", desc = "Switch to the third tab" }, - { on = [ "4" ], exec = "tab_switch 3", desc = "Switch to the fourth tab" }, - { on = [ "5" ], exec = "tab_switch 4", desc = "Switch to the fifth tab" }, - { on = [ "6" ], exec = "tab_switch 5", desc = "Switch to the sixth tab" }, - { on = [ "7" ], exec = "tab_switch 6", desc = "Switch to the seventh tab" }, - { on = [ "8" ], exec = "tab_switch 7", desc = "Switch to the eighth tab" }, - { on = [ "9" ], exec = "tab_switch 8", desc = "Switch to the ninth tab" }, - - { on = [ "[" ], exec = "tab_switch -1 --relative", desc = "Switch to the previous tab" }, - { on = [ "]" ], exec = "tab_switch 1 --relative", desc = "Switch to the next tab" }, - - { on = [ "{" ], exec = "tab_swap -1", desc = "Swap the current tab with the previous tab" }, - { on = [ "}" ], exec = "tab_swap 1", desc = "Swap the current tab with the next tab" }, - - # Tasks - { on = [ "w" ], exec = "tasks_show", desc = "Show the tasks manager" }, - - # Goto - { on = [ "g", "h" ], exec = "cd ~", desc = "Go to the home directory" }, - { on = [ "g", "c" ], exec = "cd ~/.config", desc = "Go to the config directory" }, - { on = [ "g", "d" ], exec = "cd ~/Downloads", desc = "Go to the downloads directory" }, - { on = [ "g", "t" ], exec = "cd /tmp", desc = "Go to the temporary directory" }, - { on = [ "g", "" ], exec = "cd --interactive", desc = "Go to a directory interactively" }, - - # Help - { on = [ "~" ], exec = "help", desc = "Open help" }, -] - -[tasks] - -keymap = [ - { on = [ "" ], exec = "close", desc = "Hide the task manager" }, - { on = [ "" ], exec = "close", desc = "Hide the task manager" }, - { on = [ "w" ], exec = "close", desc = "Hide the task manager" }, - - { on = [ "k" ], exec = "arrow -1", desc = "Move cursor up" }, - { on = [ "j" ], exec = "arrow 1", desc = "Move cursor down" }, - - { on = [ "" ], exec = "arrow -1", desc = "Move cursor up" }, - { on = [ "" ], exec = "arrow 1", desc = "Move cursor down" }, - - { on = [ "" ], exec = "inspect", desc = "Inspect the task" }, - { on = [ "x" ], exec = "cancel", desc = "Cancel the task" }, - - { on = [ "~" ], exec = "help", desc = "Open help" } -] - -[select] - -keymap = [ - { on = [ "" ], exec = "close", desc = "Cancel selection" }, - { on = [ "" ], exec = "close", desc = "Cancel selection" }, - { on = [ "" ], exec = "close --submit", desc = "Submit the selection" }, - - { on = [ "k" ], exec = "arrow -1", desc = "Move cursor up" }, - { on = [ "j" ], exec = "arrow 1", desc = "Move cursor down" }, - - { on = [ "K" ], exec = "arrow -5", desc = "Move cursor up 5 lines" }, - { on = [ "J" ], exec = "arrow 5", desc = "Move cursor down 5 lines" }, - - { on = [ "" ], exec = "arrow -1", desc = "Move cursor up" }, - { on = [ "" ], exec = "arrow 1", desc = "Move cursor down" }, - - { on = [ "~" ], exec = "help", desc = "Open help" } -] - -[input] - -keymap = [ - { on = [ "" ], exec = "close", desc = "Cancel input" }, - { on = [ "" ], exec = "close --submit", desc = "Submit the input" }, - { on = [ "" ], exec = "escape", desc = "Go back the normal mode, or cancel input" }, - - # Mode - { on = [ "i" ], exec = "insert", desc = "Enter insert mode" }, - { on = [ "a" ], exec = "insert --append", desc = "Enter append mode" }, - { on = [ "v" ], exec = "visual", desc = "Enter visual mode" }, - { on = [ "V" ], exec = [ "move -999", "visual", "move 999" ], desc = "Enter visual mode and select all" }, - - # Navigation - { on = [ "h" ], exec = "move -1", desc = "Move cursor left" }, - { on = [ "l" ], exec = "move 1", desc = "Move cursor right" }, - - { on = [ "0" ], exec = "move -999", desc = "Move to the BOL" }, - { on = [ "$" ], exec = "move 999", desc = "Move to the EOL" }, - { on = [ "I" ], exec = [ "move -999", "insert" ], desc = "Move to the BOL, and enter insert mode" }, - { on = [ "A" ], exec = [ "move 999", "insert --append" ], desc = "Move to the EOL, and enter append mode" }, - - { on = [ "" ], exec = "move -1", desc = "Move cursor left" }, - { on = [ "" ], exec = "move 1", desc = "Move cursor right" }, - - { on = [ "b" ], exec = "backward", desc = "Move to the beginning of the previous word" }, - { on = [ "w" ], exec = "forward", desc = "Move to the beginning of the next word" }, - { on = [ "e" ], exec = "forward --end-of-word", desc = "Move to the end of the next word" }, - - # Deletion - { on = [ "d" ], exec = "delete --cut", desc = "Cut the selected characters" }, - { on = [ "D" ], exec = [ "delete --cut", "move 999" ], desc = "Cut until the EOL" }, - { on = [ "c" ], exec = "delete --cut --insert", desc = "Cut the selected characters, and enter insert mode" }, - { on = [ "C" ], exec = [ "delete --cut --insert", "move 999" ], desc = "Cut until the EOL, and enter insert mode" }, - { on = [ "x" ], exec = [ "delete --cut", "move 1 --in-operating" ], desc = "Cut the current character" }, - - # Yank/Paste - { on = [ "y" ], exec = "yank", desc = "Copy the selected characters" }, - { on = [ "p" ], exec = "paste", desc = "Paste the copied characters after the cursor" }, - { on = [ "P" ], exec = "paste --before", desc = "Paste the copied characters before the cursor" }, - - # Undo/Redo - { on = [ "u" ], exec = "undo", desc = "Undo the last operation" }, - { on = [ "" ], exec = "redo", desc = "Redo the last operation" }, - - # Help - { on = [ "~" ], exec = "help", desc = "Open help" } -] - -[help] - -keymap = [ - { on = [ "" ], exec = "escape", desc = "Clear the filter, or hide the help" }, - { on = [ "q" ], exec = "close", desc = "Exit the process" }, - { on = [ "" ], exec = "close", desc = "Hide the help" }, - - # Navigation - { on = [ "k" ], exec = "arrow -1", desc = "Move cursor up" }, - { on = [ "j" ], exec = "arrow 1", desc = "Move cursor down" }, - - { on = [ "K" ], exec = "arrow -5", desc = "Move cursor up 5 lines" }, - { on = [ "J" ], exec = "arrow 5", desc = "Move cursor down 5 lines" }, - - { on = [ "" ], exec = "arrow -1", desc = "Move cursor up" }, - { on = [ "" ], exec = "arrow 1", desc = "Move cursor down" }, - - # Filtering - { on = [ "/" ], exec = "filter", desc = "Apply a filter for the help items" }, -] diff --git a/yazi/yazi.toml b/yazi/yazi.toml deleted file mode 100644 index 239ad44..0000000 --- a/yazi/yazi.toml +++ /dev/null @@ -1,78 +0,0 @@ -[manager] -layout = [ 1, 4, 3 ] -sort_by = "modified" -sort_sensitive = true -sort_reverse = true -sort_dir_first = true -show_hidden = false -show_symlink = true - -[preview] -tab_size = 2 -max_width = 600 -max_height = 900 -cache_dir = "" - -[opener] -folder = [ - { exec = 'open -R "$@"', orphan = true, display_name = "Reveal in Finder" }, - { exec = '$EDITOR "$@"', orphan = true }, -] -archive = [ - { exec = 'unar "$1"', display_name = "Extract here" }, -] -text = [ - { exec = '$EDITOR "$@"', orphan = true }, -] -image = [ - { exec = 'imv "$@"', orphan = true, display_name = "Open" }, - { exec = '''exiftool "$1"; echo "Press enter to exit"; read''', block = true, display_name = "Show EXIF" }, -] -pdf = [ - { exec = 'zathura "$@"', orphan = true, display_name = "Open" }, -] -video = [ - { exec = 'mpv "$@"', orphan = true }, - { exec = '''mediainfo "$1"; echo "Press enter to exit"; read''', block = true, display_name = "Show media info" }, -] -audio = [ - { exec = 'xdg-open "$@"', orphan = true }, - { exec = '''mediainfo "$1"; echo "Press enter to exit"; read''', block = true, display_name = "Show media info" }, -] -fallback = [ - { exec = 'xdg-open "$@"', orphan = true, display_name = "Open" }, - { exec = 'xdg-open -R "$@"', orphan = true, display_name = "Reveal in Finder" }, -] - -[open] -rules = [ - { name = "*/", use = "folder" }, - - { mime = "text/*", use = "text" }, - { mime = "image/*", use = "image" }, - { mime = "application/pdf", use = "pdf" }, - { mime = "video/*", use = "video" }, - { mime = "audio/*", use = "audio" }, - { mime = "inode/x-empty", use = "text" }, - - { mime = "application/json", use = "text" }, - { mime = "*/javascript", use = "text" }, - - { mime = "application/zip", use = "archive" }, - { mime = "application/gzip", use = "archive" }, - { mime = "application/x-tar", use = "archive" }, - { mime = "application/x-bzip", use = "archive" }, - { mime = "application/x-bzip2", use = "archive" }, - { mime = "application/x-7z-compressed", use = "archive" }, - { mime = "application/x-rar", use = "archive" }, - - { mime = "*", use = "fallback" }, -] - -[tasks] -micro_workers = 5 -macro_workers = 10 -bizarre_retry = 5 - -[log] -enabled = false