diff --git a/.github/workflows/docs.yaml b/.github/workflows/docs.yaml deleted file mode 100644 index 06dc541..0000000 --- a/.github/workflows/docs.yaml +++ /dev/null @@ -1,34 +0,0 @@ -# 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 deleted file mode 100644 index e92ddfd..0000000 --- a/.github/workflows/pr.yaml +++ /dev/null @@ -1,35 +0,0 @@ -# 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 deleted file mode 100644 index 1984fb1..0000000 --- a/.github/workflows/release.yaml +++ /dev/null @@ -1,29 +0,0 @@ -# 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 f610716..0c69684 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ -result/* -result -flake.lock +/nvim/plugged/* +gtk-3.0/bookmarks +gtk-3.0/servers +/fish/fish_variables +fish/fish_variables diff --git a/.zshrc b/.zshrc new file mode 100644 index 0000000..6bb491d --- /dev/null +++ b/.zshrc @@ -0,0 +1,162 @@ +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 deleted file mode 100644 index 7b6bec5..0000000 --- a/LICENSE +++ /dev/null @@ -1,841 +0,0 @@ - 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 120000 index 95cf2af..0000000 --- a/README.md +++ /dev/null @@ -1 +0,0 @@ -docs/src/README.md \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..13a1458 --- /dev/null +++ b/README.md @@ -0,0 +1,6 @@ +# 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/assets/logo.svg b/assets/logo.svg deleted file mode 100644 index 7ca00e2..0000000 --- a/assets/logo.svg +++ /dev/null @@ -1,228 +0,0 @@ - - - - diff --git a/assets/logo2.png b/assets/logo2.png deleted file mode 100644 index beeac55..0000000 Binary files a/assets/logo2.png and /dev/null differ diff --git a/assets/logo2.svg b/assets/logo2.svg deleted file mode 100644 index 08baa43..0000000 --- a/assets/logo2.svg +++ /dev/null @@ -1,238 +0,0 @@ - - - -DashNixDashNix diff --git a/assets/logo3.svg b/assets/logo3.svg deleted file mode 100644 index 6076a01..0000000 --- a/assets/logo3.svg +++ /dev/null @@ -1,238 +0,0 @@ - - - -DashNixDashNix diff --git a/assets/rainbow.svg b/assets/rainbow.svg deleted file mode 100644 index 9f59c7c..0000000 --- a/assets/rainbow.svg +++ /dev/null @@ -1,141 +0,0 @@ - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - diff --git a/base/black.jpg b/base/black.jpg deleted file mode 100644 index 730b0b6..0000000 Binary files a/base/black.jpg and /dev/null differ diff --git a/base/common_hardware.nix b/base/common_hardware.nix deleted file mode 100644 index 9f7ccf1..0000000 --- a/base/common_hardware.nix +++ /dev/null @@ -1,174 +0,0 @@ -{ - 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 deleted file mode 100644 index eafd8a5..0000000 --- a/base/default.nix +++ /dev/null @@ -1,7 +0,0 @@ -{ - imports = [ - ./env.nix - ./xkb_layout.nix - ./common_hardware.nix - ]; -} diff --git a/base/env.nix b/base/env.nix deleted file mode 100644 index 0eaf068..0000000 --- a/base/env.nix +++ /dev/null @@ -1,24 +0,0 @@ -{ - 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 deleted file mode 100644 index b399693..0000000 --- a/base/xkb_layout.nix +++ /dev/null @@ -1,23 +0,0 @@ -{ - 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 new file mode 100644 index 0000000..6ae5aec --- /dev/null +++ b/copyq/copyq-bak.conf @@ -0,0 +1,216 @@ +[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 new file mode 100644 index 0000000..ae62c0a --- /dev/null +++ b/copyq/copyq-commands.ini @@ -0,0 +1,44 @@ +[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 new file mode 100644 index 0000000..ae62c0a --- /dev/null +++ b/copyq/copyq-commands.ini.bak @@ -0,0 +1,44 @@ +[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 new file mode 100644 index 0000000..50b0ec1 --- /dev/null +++ b/copyq/copyq-filter.ini @@ -0,0 +1,2 @@ +[General] +filter_history=@Invalid() diff --git a/copyq/copyq.conf b/copyq/copyq.conf new file mode 100644 index 0000000..6ae5aec --- /dev/null +++ b/copyq/copyq.conf @@ -0,0 +1,216 @@ +[General] +plugin_priority=itemimage, itemencrypted, itemfakevim, itemnotes, itempinned, itemsync, itemtags, itemtext + +[Options] +activate_closes=true +activate_focuses=true +activate_item_with_single_click=false +activate_pastes=true +always_on_top=false +autocompletion=true +autostart=false +change_clipboard_owner_delay_ms=150 +check_clipboard=true +check_selection=false +clipboard_notification_lines=0 +clipboard_tab=&clipboard +close_on_unfocus=false +close_on_unfocus_delay_ms=500 +command_history_size=100 +confirm_exit=true +copy_clipboard=false +copy_selection=false +disable_tray=false +edit_ctrl_return=true +editor=gedit --standalone -- %1 +expire_tab=0 +filter_case_insensitive=true +filter_regular_expression=false +hide_main_window=true +hide_main_window_in_task_bar=false +hide_tabs=false +hide_toolbar=false +hide_toolbar_labels=true +item_popup_interval=0 +language=en +max_process_manager_rows=1000 +maxitems=200 +move=true +native_menu_bar=true +native_notifications=true +native_tray_menu=false +notification_horizontal_offset=10 +notification_maximum_height=100 +notification_maximum_width=300 +notification_position=3 +notification_vertical_offset=10 +number_search=false +open_windows_on_current_screen=true +restore_geometry=true +row_index_from_one=true +run_selection=true +save_delay_ms_on_item_added=300000 +save_delay_ms_on_item_edited=1000 +save_delay_ms_on_item_modified=300000 +save_delay_ms_on_item_moved=1800000 +save_delay_ms_on_item_removed=600000 +save_filter_history=false +save_on_app_deactivated=true +script_paste_delay_ms=250 +show_advanced_command_settings=false +show_simple_items=false +show_tab_item_count=false +style= +tab_tree=false +tabs=&clipboard +text_tab_width=8 +text_wrap=true +transparency=0 +transparency_focused=0 +tray_commands=true +tray_images=true +tray_item_paste=true +tray_items=5 +tray_menu_open_on_left_click=false +tray_tab= +tray_tab_is_current=true +vi=false +window_key_press_time_ms=50 +window_paste_with_ctrl_v_regex= +window_wait_after_raised_ms=50 +window_wait_before_raise_ms=20 +window_wait_for_modifier_released_ms=2000 +window_wait_raised_ms=150 + +[Plugins] +itemencrypted\enabled=true +itemfakevim\enabled=true +itemimage\enabled=true +itemimage\image_editor= +itemimage\max_image_height=240 +itemimage\max_image_width=320 +itemimage\svg_editor= +itemnotes\enabled=true +itempinned\enabled=true +itemsync\enabled=true +itemtags\enabled=true +itemtext\enabled=true + +[Shortcuts] +about=shift+f1 +change_tab_icon=ctrl+shift+t +commands=f6 +copy_selected_items=ctrl+c +delete_item=del +edit=f2 +edit_notes=shift+f2 +editor=ctrl+e +editor_background= +editor_bold=ctrl+b +editor_cancel=esc +editor_erase_style= +editor_font= +editor_foreground= +editor_italic=ctrl+i +editor_redo=ctrl+shift+z +editor_save=f2 +editor_search=ctrl+f +editor_strikethrough= +editor_underline=ctrl+u +editor_undo=ctrl+z +exit=ctrl+q +export=ctrl+s +find_items=ctrl+g +help=f1 +import=ctrl+i +item-menu=shift+f10 +move_down=ctrl+down +move_to_bottom=ctrl+end +move_to_clipboard= +move_to_top=ctrl+home +move_up=ctrl+up +new=ctrl+n +new_tab=ctrl+t +next_tab=right +paste_selected_items=ctrl+v +preferences=ctrl+p +previous_tab=left +process_manager=ctrl+shift+z +remove_tab=ctrl+w +rename_tab=ctrl+f2 +reverse_selected_items=ctrl+shift+r +show-log=f12 +show_clipboard_content=ctrl+shift+c +show_item_content=f4 +show_item_preview=f7 +sort_selected_items=ctrl+shift+s +system-run=f5 +toggle_clipboard_storing=ctrl+shift+x + +[Tabs] +1\icon= +1\max_item_count=0 +1\name=&clipboard +1\store_items=true +size=1 + +[Theme] +alt_bg=default_alt_bg +alt_item_css= +bg=default_bg +css= +css_template_items=items +css_template_main_window=main_window +css_template_menu=menu +css_template_notification=notification +cur_item_css="\n ;border: 0.1em solid ${sel_bg}" +edit_bg=default_bg +edit_fg=default_text +edit_font= +fg=default_text +find_bg=#ff0 +find_fg=#000 +find_font= +font= +font_antialiasing=true +hover_item_css= +icon_size=16 +item_css= +item_spacing= +menu_bar_css="\n ;background: ${bg}\n ;color: ${fg}" +menu_bar_disabled_css="\n ;color: ${bg - #666}" +menu_bar_selected_css="\n ;background: ${sel_bg}\n ;color: ${sel_fg}" +menu_css="\n ;border: 1px solid ${sel_bg}\n ;background: ${bg}\n ;color: ${fg}" +notes_bg=default_tooltip_bg +notes_css= +notes_fg=default_tooltip_text +notes_font= +notification_bg=#333 +notification_fg=#ddd +notification_font= +num_fg=default_placeholder_text +num_font= +num_margin=2 +search_bar="\n ;background: ${edit_bg}\n ;color: ${edit_fg}\n ;border: 1px solid ${alt_bg}\n ;margin: 2px" +search_bar_focused="\n ;border: 1px solid ${sel_bg}" +sel_bg=default_highlight_bg +sel_fg=default_highlight_text +sel_item_css= +show_number=true +show_scrollbars=true +style_main_window=false +tab_bar_css="\n ;background: ${bg - #222}" +tab_bar_item_counter="\n ;color: ${fg - #044 + #400}\n ;font-size: 6pt" +tab_bar_scroll_buttons_css="\n ;background: ${bg - #222}\n ;color: ${fg}\n ;border: 0" +tab_bar_sel_item_counter="\n ;color: ${sel_bg - #044 + #400}" +tab_bar_tab_selected_css="\n ;padding: 0.5em\n ;background: ${bg}\n ;border: 0.05em solid ${bg}\n ;color: ${fg}" +tab_bar_tab_unselected_css="\n ;border: 0.05em solid ${bg}\n ;padding: 0.5em\n ;background: ${bg - #222}\n ;color: ${fg - #333}" +tab_tree_css="\n ;color: ${fg}\n ;background-color: ${bg}" +tab_tree_item_counter="\n ;color: ${fg - #044 + #400}\n ;font-size: 6pt" +tab_tree_sel_item_counter="\n ;color: ${sel_fg - #044 + #400}" +tab_tree_sel_item_css="\n ;color: ${sel_fg}\n ;background-color: ${sel_bg}\n ;border-radius: 2px" +tool_bar_css="\n ;color: ${fg}\n ;background-color: ${bg}\n ;border: 0" +tool_button_css="\n ;color: ${fg}\n ;background: ${bg}\n ;border: 0\n ;border-radius: 2px" +tool_button_pressed_css="\n ;background: ${sel_bg}" +tool_button_selected_css="\n ;background: ${sel_bg - #222}\n ;color: ${sel_fg}\n ;border: 1px solid ${sel_bg}" +use_system_icons=false diff --git a/copyq/copyq.lock b/copyq/copyq.lock new file mode 100644 index 0000000..448fc6f --- /dev/null +++ b/copyq/copyq.lock @@ -0,0 +1,5 @@ +1263 +copyq +spaceship +a10dc6f271ba47d988a3b282250928e2 +cb602df7-7d2d-4352-8c2d-7847932ab696 diff --git a/copyq/copyq.pub b/copyq/copyq.pub new file mode 100644 index 0000000..a32e7f1 Binary files /dev/null and b/copyq/copyq.pub differ diff --git a/copyq/copyq_geometry.ini b/copyq/copyq_geometry.ini new file mode 100644 index 0000000..7ebdab1 --- /dev/null +++ b/copyq/copyq_geometry.ini @@ -0,0 +1,6 @@ +[Options] +ConfigurationManager_geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\0\0\0\x5\x82\0\0\x3z\0\0\0\0\0\0\0\0\0\0\x2\xa6\0\0\x2l\0\0\0\x2\x2\0\0\0\n\0\0\0\0\0\0\0\0\0\0\0\x5\x82\0\0\x3z) +ConfigurationManager_geometry_screen_2=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\0\0\0\x5\x82\0\0\x3z\0\0\0\0\0\0\0\0\0\0\x2\xa6\0\0\x2l\0\0\0\x2\x2\0\0\0\n\0\0\0\0\0\0\0\0\0\0\0\x5\x82\0\0\x3z) +ConfigurationManager_geometry_screen_2_2560x1440=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\0\0\0\x5\x82\0\0\x3z\0\0\0\0\0\0\0\0\0\0\x2\xa6\0\0\x2l\0\0\0\x2\x2\0\0\0\n\0\0\0\0\0\0\0\0\0\0\0\x5\x82\0\0\x3z) +MainWindow_geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\n\0\0\0\0\0\0\0\xe[\0\0\x2\xf3\0\0\n\0\0\0\0\0\0\0\fG\0\0\x1G\0\0\0\0\x2\0\0\0\rp\0\0\n\0\0\0\0\0\0\0\xe[\0\0\x2\xf3) +MainWindow_geometry_3440x1440=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\n\0\0\0\0\0\0\0\xe[\0\0\x2\xf3\0\0\n\0\0\0\0\0\0\0\fG\0\0\x1G\0\0\0\0\x2\0\0\0\rp\0\0\n\0\0\0\0\0\0\0\xe[\0\0\x2\xf3) diff --git a/docs/src/SUMMARY.md b/copyq/copyq_geometry.ini.lock similarity index 100% rename from docs/src/SUMMARY.md rename to copyq/copyq_geometry.ini.lock diff --git a/docs/src/coding.md b/copyq/copyq_geometry.ini.lock.rmlock similarity index 100% rename from docs/src/coding.md rename to copyq/copyq_geometry.ini.lock.rmlock diff --git a/copyq/copyq_tab_JmNsaXBib2FyZA==.dat b/copyq/copyq_tab_JmNsaXBib2FyZA==.dat new file mode 100644 index 0000000..0db8f4c Binary files /dev/null and b/copyq/copyq_tab_JmNsaXBib2FyZA==.dat differ diff --git a/copyq/copyq_tabs.ini b/copyq/copyq_tabs.ini new file mode 100644 index 0000000..b56ad40 --- /dev/null +++ b/copyq/copyq_tabs.ini @@ -0,0 +1,3 @@ +[TabWidget] +collapsed_tabs=@Invalid() +tab_item_counters=@Variant(\0\0\0\b\0\0\0\x1\0\0\0\x14\0&\0\x63\0l\0i\0p\0\x62\0o\0\x61\0r\0\x64\0\0\0\x2\0\0\0\xc8) diff --git a/docs/default.nix b/docs/default.nix deleted file mode 100644 index 1fd8a1e..0000000 --- a/docs/default.nix +++ /dev/null @@ -1,61 +0,0 @@ -# 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 deleted file mode 100644 index 3658e00..0000000 --- a/docs/src/README.md +++ /dev/null @@ -1,329 +0,0 @@ -
- -![Logo of DashNix](logo.svg) - -
- -An opinionated flake to bootstrap NixOS systems with default configurations for various programs and services from both NixOS and HomeManager which can be enabled, disabled, configured or replaced at will. - -# Usage - -This flake is intended to be used as an input to your own NixOS configuration: - -```nix -dashNix = { - url = "github:Xetibo/DashNix"; - inputs = { - # ensure these are here to update the packages on your own - nixpkgs.follows = "nixpkgs"; - stable.follows = "stable"; - }; -}; -``` - -You can then configure your systems in your flake outputs with a provided library command: - -Please note that overriding inputs will invalidate the cache configuration, this means you will have to add this manually: - -```nix - builders-use-substitutes = true; - - extra-substituters = [ - "https://hyprland.cachix.org" - "https://anyrun.cachix.org" - "https://cache.garnix.io" - "https://oxipaste.cachix.org" - "https://oxinoti.cachix.org" - "https://oxishut.cachix.org" - "https://oxidash.cachix.org" - "https://oxicalc.cachix.org" - "https://hyprdock.cachix.org" - "https://reset.cachix.org" - "https://dashvim.cachix.org" - ]; - - extra-trusted-public-keys = [ - "hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc=" - "anyrun.cachix.org-1:pqBobmOjI7nKlsUMV25u9QHa9btJK65/C8vnO3p346s=" - "cache.garnix.io:CTFPyKSLcx5RMJKfLo5EEPUObbA78b0YQ2DTCJXqr9g=" - "oxipaste.cachix.org-1:n/oA3N3Z+LJP7eIWOwuoLd9QnPyZXqFjLgkahjsdDGc=" - "oxinoti.cachix.org-1:dvSoJl2Pjo5HMaNngdBbSaixK9BSf2N8gzjP2MdGvfc=" - "oxishut.cachix.org-1:axyAGF3XMh1IyMAW4UMbQCdMNovDH0KH6hqLLRJH8jU=" - "oxidash.cachix.org-1:5K2FNHp7AS8VF7LmQkJAUG/dm6UHCz4ngshBVbjFX30=" - "oxicalc.cachix.org-1:qF3krFc20tgSmtR/kt6Ku/T5QiG824z79qU5eRCSBTQ=" - "hyprdock.cachix.org-1:HaROK3fBvFWIMHZau3Vq1TLwUoJE8yRbGLk0lEGzv3Y=" - "reset.cachix.org-1:LfpnUUdG7QM/eOkN7NtA+3+4Ar/UBeYB+3WH+GjP9Xo=" - "dashvim.cachix.org-1:uLRdxp1WOWHnsZZtu3SwUWZRsvC7SXo0Gyk3tIefuL0=" - ]; -``` - -```nix -nixosConfigurations = inputs.dashNix.dashNixLib.buildSystems { root = ./.; }; -``` - -This command will build each system that is placed within the hosts/ directory. -In this directory create one directory for each system you want to configure with DashNix. -This will automatically pick up the hostname for the system and look for 3 different files that are explained below. -(Optionally, you can also change the parameter root (./.) to define a different starting directory than hosts/) - -In order for your configuration to work, you are required to at least provide a single config file with a further config file being optional for custom configuration. -The hardware.nix specifies additional NixOS configuration, while home.nix specifies additional home-manager configuration. (both optional) - -|- flake.nix\ -|- flake.lock\ -|- hosts/\ -|--- system1/\ -|------ configuration.nix (required)\ -|------ hardware.nix (optional)\ -|------ home.nix (optional)\ -|--- system2/\ -|------ configuration.nix (required)\ -|------ hardware.nix (optional)\ -|------ home.nix (optional)\ -|--- system3/\ -|------ configuration.nix (required)\ -|------ hardware.nix (optional)\ -|------ home.nix (optional) - -Here is a minimal required configuration.nix (the TODOs mention a required change): - -```nix -{config, ...}: { - # TODO denote important changes - - # variables for system - conf = { - # TODO your username - username = "YOURNAME"; - # TODO only needed when you use intel -> amd is default - # cpu = "intel"; - # TODO your xkb layout - locale = "something.UTF-8"; - # TODO your timezone - timezone = "CONTINENT/CITY"; - }; - - # modules - mods = { - # default disk config has root home boot and swap partition, overwrite if you want something different - sops.enable = false; - nextcloud.enable = false; - wm.monitors = [ - # Example - # { - # name = "DP-1"; - # resolutionX = 3440; - # resolutionY = 1440; - # refreshrate = 180; - # positionX = 2560; - # positionY = 0; - # scale = 1; - # transform = "0"; - # vrr = false; - # } - ]; - gpu.nvidia.enable = true; - kdeConnect.enable = true; - # login manager: - # default is greetd - # greetd = { }; - # sddm = { }; - # gdm = { }; - drives = { - # default assumes ROOT, BOOT, HOME and SWAP labaled drives exist - # for an example without HOME see below - # defaultDrives.enable = false; - # extraDrives = [ - # { - # name = "boot"; - # drive = { - # device = "/dev/disk/by-label/BOOT"; - # fsType = "vfat"; - # options = [ "rw" "fmask=0022" "dmask=0022" "noatime" ]; - # }; - # } - # { - # name = ""; - # drive = { - # device = "/dev/disk/by-label/ROOT"; - # fsType = "ext4"; - # options = [ "noatime" "nodiratime" "discard" ]; - # }; - # } - # ]; - # You can also use disko to format your disks on installation. - # Please refer to the Documentation about the drives module for an example. - }; - }; -} -``` - -## First Login - -After logging in the first time, your password will be set to "firstlogin", please change this to whatever you like. - -## Configuring pkgs - -While DashNix offers a default pkgs config, you may want to permit an unsecure packages, -add additional modules/inputs, or add an overlay to them. -You can configure both stable and unstable pkgs the following way: - -Please note that modules and inputs are merged together to ensure functionality. - -```nix -currentSystem = "x86_64-linux"; -permittedPackages = [ - "some package" -]; -config = { - system = currentSystem; - config = { - allowUnfree = true; - permittedInsecurePackages = permittedPackages; - }; - inputs = { - # Some inputs - } - mods = { - home = [ - # Some home manager module - ]; - nixos = [ - # Some nixos module - ]; -} -}; -unstableBundle = { - pkgs = inputs.unstable; - inherit config mods; -}; -inputs.dashNix.dashNixLib.buildSystems { - root = ./.; - inherit unstableBundle; -} -``` - -With this you could also change your input to something different should you wish to do so. -Note that overriding inputs via the flake still works, -this way however ensures you can also configure the inputs. - -## Stable/Unstable - -Sometimes you want to differentiate between systems that are stable and unstable, e.g. for servers and desktops/laptops. -This can be done with the overridePkgs flag for the lib function: - -(overridePkgs simply inverts the default bundle that is used for the nix standard library as well as NixOS itself) - -```nix -nixosConfigurations = - inputs.dashNix.dashNixLib.buildSystems { - root = ./stable; - inherit stableBundle; - overridePkgs = true; - } - // inputs.dashNix.dashNixLib.buildSystems { - inherit unstableBundle; - root = ./unstable; - }; -``` - -You can now place your systems in the respective directories. -Keep in mind that the hosts directory will still need to exist in each variant. -E.g. stable/hosts/yourserver and unstable/hosts/yourdesktop - -# Installation via ISO - -You can find a custom ISO in the releases: [Link](https://github.com/Xetibo/DashNix/releases). -With this, you will receive the example config in /iso/example alongside the gnome desktop environment, -as well as a few tools like gnome-disks, Neovim, Vscodium, a browser etc. - -Alternatively, you can use whatever NixOS installer and just install your config from there, just make sure to set the drive configuration before. - -## Commands - -First, copy the read-only config from /iso/example-config to a location of your choice. - -```sh -cp /iso/example-config ~/config -r -``` - -Then configure as you please and choose a command below depending on your disk installation variant. - -Installation via manual configuration: - -```sh -sudo nixos-install --flake # --root --option experimental-features "nix-command flakes pipe-operators" -#example -#nixos-install --flake ~/config#globi --root /mnt --option experimental-features "nix-command flakes pipe-operators" -``` - -Installation via disko: - -```sh -sudo disko-install --flake # --disk --option experimental-features "nix-command flakes pipe-operators" -#example -#disko-install -- --flake ~/config#globi --disk main /dev/nvme0n1 --option experimental-features "nix-command flakes pipe-operators" -``` - -# Installation via flake - -If you already have nix installed, you can instead just copy the default config onto your system and install DashNix with it. -To create the example config for a base to start with, you can just run this flake with the mkFlake command: - -```sh -nix run github:Xetibo/DashNix#mkFlake -``` - -This command will put the default configuration into $HOME/gits/nixos - -# Modules - -This configuration features several modules that can be used as preconfigured "recipies". -These modules attempt to combine the home-manager and nixos packages/options to one single configuration file for each new system. -For package lists, please check the individual modules, as the lists can be long. - -- Hyprland: Installs and configures Hyprland with various additional packages -- Niri: Installs and configures Niri with various additional packages -- acpid : Enables the acpid daemon -- base packages : A list of system packages to be installed by default -- bluetooth : Configures/enables bluetooth and installs tools for bluetooth -- coding packages : A list of coding packages to be installed by default -- drives : A drive configuration module -- firefox: Enables and configures firefox (extensions and settings) -- fish: Enables and configures fish shell -- gaming : Configures gaming related features (launchers, gamemode) -- git : Git key and config module -- gnome_services : Gnome services for minimal enviroments -> Window managers etc -- gpu : GPU settings (AMD) -- greetd : Enables and configures the greetd/regreet login manager with Hyprland -- home packages : A list of home packages to be installed by default -- kde_connect : Enables KDE connect and opens its ports -- keepassxc : Configures keepassxc -- kitty: Enables and configures kitty terminal -- layout : Modules to configure keyboard layout system wide -- media packages : A list of media packages to be installed by default -- mime: Mime type configuration -- nextcloud : Handles synchronization via nextcloud cmd. (requires config.sops.secrets.nextcloud) -- oxi: My own programs, can be selectively disabled, or as a whole -- piper : Installs and enables piper alongside its daemon -- plymouth: enable or disable plymouth -- printing : Enables and configures printing services -- scripts: Various preconfigured scripts with the ability to add more -- sops: Enables sops-nix -- starship : Configures the starship prompt -- stylix : Configures system themes, can also be applied to dashvim if used. -- teams: For the poor souls that have to use this.... -- virtualbox : Enables and configures virtualbox -- xkb: Keyboard layout configuration -- xone : Installs the xone driver -- yazi: Installs yazi and sets custom keybinds - -# Credits - -- [Fufexan](https://github.com/fufexan) for the xdg-mime config: -- [Catppuccin](https://github.com/catppuccin) for base16 colors and zen-browser css -- [Danth](https://github.com/danth) for providing a base for the nix docs -- [chermnyx](https://github.com/chermnyx) for providing a base for zen configuration -- [voronind-com](https://github.com/voronind-com) for providing the darkreader configuration -- [Nix-Artwork](https://github.com/NixOS/nixos-artwork/tree/master/logo) for the Nix/NixOS logo (Tim Cuthbertson (@timbertson)) -- [xddxdd](https://github.com/xddxdd) for the CachyOS-Kernel flake diff --git a/docs/src/conf.md b/docs/src/conf.md deleted file mode 100755 index aa51f0b..0000000 --- a/docs/src/conf.md +++ /dev/null @@ -1 +0,0 @@ -# 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 deleted file mode 100644 index 08baa43..0000000 --- a/docs/src/logo.svg +++ /dev/null @@ -1,238 +0,0 @@ - - - -DashNixDashNix diff --git a/docs/src/mods.md b/docs/src/mods.md deleted file mode 100755 index df7fe4f..0000000 --- a/docs/src/mods.md +++ /dev/null @@ -1 +0,0 @@ -# This file handles configuration of individual modules. diff --git a/dunst/dunstrc b/dunst/dunstrc new file mode 100644 index 0000000..e4b5797 --- /dev/null +++ b/dunst/dunstrc @@ -0,0 +1,456 @@ +# See dunst(5) for all configuration options + +[global] + ### Display ### + + # Which monitor should the notifications be displayed on. + monitor = 2 + + # Display notification on focused monitor. Possible modes are: + # mouse: follow mouse pointer + # keyboard: follow window with keyboard focus + # none: don't follow anything + # + # "keyboard" needs a window manager that exports the + # _NET_ACTIVE_WINDOW property. + # This should be the case for almost all modern window managers. + # + # If this option is set to mouse or keyboard, the monitor option + # will be ignored. + follow = mouse + + ### Geometry ### + + # dynamic width from 0 to 300 + # width = (0, 300) + # constant width of 300 + width = (0, 300) + + # The maximum height of a single notification, excluding the frame. + height = 300 + + # Position the notification in the top right corner + origin = top-right + + # Offset from the origin + offset = 10x10 + + # Scale factor. It is auto-detected if value is 0. + scale = 0 + + # Maximum number of notification (0 means no limit) + notification_limit = 3 + + ### Progress bar ### + + # Turn on the progess bar. It appears when a progress hint is passed with + # for example dunstify -h int:value:12 + progress_bar = true + + # Set the progress bar height. This includes the frame, so make sure + # it's at least twice as big as the frame width. + progress_bar_height = 10 + + # Set the frame width of the progress bar + progress_bar_frame_width = 1 + + # Set the minimum width for the progress bar + progress_bar_min_width = 150 + + # Set the maximum width for the progress bar + progress_bar_max_width = 300 + + + # Show how many messages are currently hidden (because of + # notification_limit). + indicate_hidden = yes + + # The transparency of the window. Range: [0; 100]. + # This option will only work if a compositing window manager is + # present (e.g. xcompmgr, compiz, etc.). (X11 only) + transparency = 0 + + # Draw a line of "separator_height" pixel height between two + # notifications. + # Set to 0 to disable. + # If gap_size is greater than 0, this setting will be ignored. + separator_height = 2 + + # Padding between text and separator. + padding = 8 + + # Horizontal padding. + horizontal_padding = 8 + + # Padding between text and icon. + text_icon_padding = 0 + + # Defines width in pixels of frame around the notification window. + # Set to 0 to disable. + frame_width = 3 + + # Defines color of the frame around the notification window. + frame_color = "#002684" + + # Size of gap to display between notifications - requires a compositor. + # If value is greater than 0, separator_height will be ignored and a border + # of size frame_width will be drawn around each notification instead. + # Click events on gaps do not currently propagate to applications below. + gap_size = 2 + + # Define a color for the separator. + # possible values are: + # * auto: dunst tries to find a color fitting to the background; + # * foreground: use the same color as the foreground; + # * frame: use the same color as the frame; + # * anything else will be interpreted as a X color. + separator_color = frame + + # Sort messages by urgency. + sort = yes + + # Don't remove messages, if the user is idle (no mouse or keyboard input) + # for longer than idle_threshold seconds. + # Set to 0 to disable. + # A client can set the 'transient' hint to bypass this. See the rules + # section for how to disable this if necessary + # idle_threshold = 120 + + ### Text ### + + font = FuraMono Nerd Font 10 + + # The spacing between lines. If the height is smaller than the + # font height, it will get raised to the font height. + line_height = 0 + + # Possible values are: + # full: Allow a small subset of html markup in notifications: + # bold + # italic + # strikethrough + # underline + # + # For a complete reference see + # . + # + # strip: This setting is provided for compatibility with some broken + # clients that send markup even though it's not enabled on the + # server. Dunst will try to strip the markup but the parsing is + # simplistic so using this option outside of matching rules for + # specific applications *IS GREATLY DISCOURAGED*. + # + # no: Disable markup parsing, incoming notifications will be treated as + # plain text. Dunst will not advertise that it has the body-markup + # capability if this is set as a global setting. + # + # It's important to note that markup inside the format option will be parsed + # regardless of what this is set to. + markup = full + + # The format of the message. Possible variables are: + # %a appname + # %s summary + # %b body + # %i iconname (including its path) + # %I iconname (without its path) + # %p progress value if set ([ 0%] to [100%]) or nothing + # %n progress value if set without any extra characters + # %% Literal % + # Markup is allowed + format = "%s\n%b" + + # Alignment of message text. + # Possible values are "left", "center" and "right". + alignment = left + + # Vertical alignment of message text and icon. + # Possible values are "top", "center" and "bottom". + vertical_alignment = center + + # Show age of message if message is older than show_age_threshold + # seconds. + # Set to -1 to disable. + show_age_threshold = 60 + + # Specify where to make an ellipsis in long lines. + # Possible values are "start", "middle" and "end". + ellipsize = middle + + # Ignore newlines '\n' in notifications. + ignore_newline = no + + # Stack together notifications with the same content + stack_duplicates = true + + # Hide the count of stacked notifications with the same content + hide_duplicate_count = false + + # Display indicators for URLs (U) and actions (A). + show_indicators = yes + + ### Icons ### + + # Recursive icon lookup. You can set a single theme, instead of having to + # define all lookup paths. + enable_recursive_icon_lookup = true + + # Set icon theme (only used for recursive icon lookup) + icon_theme = Adwaita + # You can also set multiple icon themes, with the leftmost one being used first. + # icon_theme = "Adwaita, breeze" + + # Align icons left/right/top/off + icon_position = left + + # Scale small icons up to this size, set to 0 to disable. Helpful + # for e.g. small files or high-dpi screens. In case of conflict, + # max_icon_size takes precedence over this. + min_icon_size = 32 + + # Scale larger icons down to this size, set to 0 to disable + max_icon_size = 128 + + # Paths to default icons (only neccesary when not using recursive icon lookup) + icon_path = /usr/share/icons/gnome/16x16/status/:/usr/share/icons/gnome/16x16/devices/ + + ### History ### + + # Should a notification popped up from history be sticky or timeout + # as if it would normally do. + sticky_history = yes + + # Maximum amount of notifications kept in history + history_length = 20 + + ### Misc/Advanced ### + + # dmenu path. + dmenu = /usr/bin/dmenu -p dunst: + + # Browser for opening urls in context menu. + browser = /usr/bin/xdg-open + + # Always run rule-defined scripts, even if the notification is suppressed + always_run_script = true + + # Define the title of the windows spawned by dunst + title = Dunst + + # Define the class of the windows spawned by dunst + class = Dunst + + # Define the corner radius of the notification window + # in pixel size. If the radius is 0, you have no rounded + # corners. + # The radius will be automatically lowered if it exceeds half of the + # notification height to avoid clipping text and/or icons. + corner_radius = 10 + + # Ignore the dbus closeNotification message. + # Useful to enforce the timeout set by dunst configuration. Without this + # parameter, an application may close the notification sent before the + # user defined timeout. + ignore_dbusclose = false + + ### Wayland ### + # These settings are Wayland-specific. They have no effect when using X11 + + # Uncomment this if you want to let notications appear under fullscreen + # applications (default: overlay) + # layer = top + + # Set this to true to use X11 output on Wayland. + force_xwayland = false + + ### Legacy + + # Use the Xinerama extension instead of RandR for multi-monitor support. + # This setting is provided for compatibility with older nVidia drivers that + # do not support RandR and using it on systems that support RandR is highly + # discouraged. + # + # By enabling this setting dunst will not be able to detect when a monitor + # is connected or disconnected which might break follow mode if the screen + # layout changes. + force_xinerama = false + + ### mouse + + # Defines list of actions for each mouse event + # Possible values are: + # * none: Don't do anything. + # * do_action: Invoke the action determined by the action_name rule. If there is no + # such action, open the context menu. + # * open_url: If the notification has exactly one url, open it. If there are multiple + # ones, open the context menu. + # * close_current: Close current notification. + # * close_all: Close all notifications. + # * context: Open context menu for the notification. + # * context_all: Open context menu for all notifications. + # These values can be strung together for each mouse event, and + # will be executed in sequence. + mouse_left_click = close_current + mouse_middle_click = do_action, close_current + mouse_right_click = close_all + +# Experimental features that may or may not work correctly. Do not expect them +# to have a consistent behaviour across releases. +[experimental] + # Calculate the dpi to use on a per-monitor basis. + # If this setting is enabled the Xft.dpi value will be ignored and instead + # dunst will attempt to calculate an appropriate dpi value for each monitor + # using the resolution and physical size. This might be useful in setups + # where there are multiple screens with very different dpi values. + per_monitor_dpi = false + + +[urgency_low] + # IMPORTANT: colors have to be defined in quotation marks. + # Otherwise the "#" and following would be interpreted as a comment. + background = "#222222F0" + foreground = "#888888" + frame_color = "#002684C8" + timeout = 3 + # Icon for notifications with low urgency, uncomment to enable + #default_icon = /path/to/icon + +[urgency_normal] + background = "#222222F0" + foreground = "#888888" + frame_color = "#002684C8" + timeout = 3 + # Icon for notifications with normal urgency, uncomment to enable + #default_icon = /path/to/icon + +[urgency_critical] + background = "#900000F0" + foreground = "#ffffff" + frame_color = "#ff0000C8" + timeout = 0 + # Icon for notifications with critical urgency, uncomment to enable + #default_icon = /path/to/icon + +# Every section that isn't one of the above is interpreted as a rules to +# override settings for certain messages. +# +# Messages can be matched by +# appname (discouraged, see desktop_entry) +# body +# category +# desktop_entry +# icon +# match_transient +# msg_urgency +# stack_tag +# summary +# +# and you can override the +# background +# foreground +# format +# frame_color +# fullscreen +# new_icon +# set_stack_tag +# set_transient +# set_category +# timeout +# urgency +# icon_position +# skip_display +# history_ignore +# action_name +# word_wrap +# ellipsize +# alignment +# hide_text +# +# Shell-like globbing will get expanded. +# +# Instead of the appname filter, it's recommended to use the desktop_entry filter. +# GLib based applications export their desktop-entry name. In comparison to the appname, +# the desktop-entry won't get localized. +# +# SCRIPTING +# You can specify a script that gets run when the rule matches by +# setting the "script" option. +# The script will be called as follows: +# script appname summary body icon urgency +# where urgency can be "LOW", "NORMAL" or "CRITICAL". +# +# NOTE: It might be helpful to run dunst -print in a terminal in order +# to find fitting options for rules. + +# Disable the transient hint so that idle_threshold cannot be bypassed from the +# client +#[transient_disable] +# match_transient = yes +# set_transient = no +# +# Make the handling of transient notifications more strict by making them not +# be placed in history. +#[transient_history_ignore] +# match_transient = yes +# history_ignore = yes + +# fullscreen values +# show: show the notifications, regardless if there is a fullscreen window opened +# delay: displays the new notification, if there is no fullscreen window active +# If the notification is already drawn, it won't get undrawn. +# pushback: same as delay, but when switching into fullscreen, the notification will get +# withdrawn from screen again and will get delayed like a new notification +#[fullscreen_delay_everything] +# fullscreen = delay +#[fullscreen_show_critical] +# msg_urgency = critical +# fullscreen = show + +#[espeak] +# summary = "*" +# script = dunst_espeak.sh + +#[script-test] +# summary = "*script*" +# script = dunst_test.sh + +#[ignore] +# # This notification will not be displayed +# summary = "foobar" +# skip_display = true + +#[history-ignore] +# # This notification will not be saved in history +# summary = "foobar" +# history_ignore = yes + +#[skip-display] +# # This notification will not be displayed, but will be included in the history +# summary = "foobar" +# skip_display = yes + +#[signed_on] +# appname = Pidgin +# summary = "*signed on*" +# urgency = low +# +#[signed_off] +# appname = Pidgin +# summary = *signed off* +# urgency = low +# +#[says] +# appname = Pidgin +# summary = *says* +# urgency = critical +# +#[twitter] +# appname = Pidgin +# summary = *twitter.com* +# urgency = normal +# +#[stack-volumes] +# appname = "some_volume_notifiers" +# set_stack_tag = "volume" +# +# vim: ft=cfg diff --git a/environment.d/envvars.conf b/environment.d/envvars.conf new file mode 100644 index 0000000..eaf16f3 --- /dev/null +++ b/environment.d/envvars.conf @@ -0,0 +1,14 @@ +GTK_CSD=0 +QT_QPA_PLATFORM=wayland +QT_QPA_PLATFORMTHEME=qt5ct +QT_WAYLAND_FORCE_DPI=96 +QT_AUTO_SCREEN_SCALE_FACTOR=0 +QT_WAYLAND_DISABLE_WINDOWDECORATION=1 +QT_SCALE_FACTOR=1 +XCURSOR_SIZE=24 +WAYLAND_DISPLAY=wayland-1 +XDG_CURRENT_DESKTOP=wlr +GPG_TTY=$(tty) +PATH=$PATH:$HOME/.local/bin +TEXMFHOME=$HOME/.texmf +PATH=/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl:$HOME/.local/bin:$HOME/.cargo/bin:$PATH diff --git a/eww_desktop/bar/eww.scss b/eww_desktop/bar/eww.scss new file mode 100644 index 0000000..1036c3a --- /dev/null +++ b/eww_desktop/bar/eww.scss @@ -0,0 +1,447 @@ +/** EWW.SCSS +Created by saimoom **/ +*{ + all: unset; + font-family: feather; + font-family: DaddyTimeMono Nerd Font; +} + +/** General **/ +.bar_class { + background-color: #0f0f17; + border-radius: 16px; +} +.module { + margin: 0px 0px 0px 0px; + border-radius: 10px 16px 0px 10px; +} + +/** tooltip!! **/ +tooltip.background { + background-color: #0f0f17; + font-size: 18; + border-radius: 10px; + color: #bfc9db; +} + +tooltip label { + margin: 6px; +} + + +/** Widgets **/ + +.clock_time_sep { + font-size: 16; + color: #bfc9db; + margin: 0px 4px 1px 4px; +} +.clock_time_class, .clock_minute_class { + font-size: 23; +} +.clock_date_class { + font-size: 18; + margin: 0px 20px 0px -1px; + color: #d7beda; +} +.clock_minute_class { + margin: 0px 20px 0px 3px; + color: #bfc9db; +} + +.clock_time_class { + color: #bfc9db; + font-weight: bold; + margin: 0px 5px 0px 0px; +} + + +.membar { + color: #e0b089; + background-color: #38384d; + border-radius: 10px; +} +.batbar { + color: #afbea2; + background-color: #38384d; + border-radius: 10px; +} +.brightbar trough highlight { + background-image: linear-gradient(to right, #e4c9af 30%, #f2cdcd 50%, #e0b089 100% *50); + border-radius: 10px; +} +.volbar trough highlight { + background-image: linear-gradient(to right, #afcee0 30%, #a1bdce 50%, #77a5bf 100% *50); + border-radius: 10px; +} +.volume_icon { + font-size: 22; + color: #a1bdce; + margin: 0px 10px 0px 10px; +} + + +.module_essid { + font-size: 18; + color: #a1bdce; + margin: 0px 10px 0px 0px; +} +.module-wif { + font-size: 22; + color: #a1bdce; + border-radius: 100%; + margin: 0px 10px 0px 5px; +} + +.iconmem { + color: #e0b089; +} +.iconbat { + color: #afbea2; +} +.iconbat, .iconmem { + font-size: 15; + margin: 10px; +} +.bright_icon { + font-size: 22; + color: #e4c9af; + margin: 0px 10px 0px 10px; +} + + +.separ { + color: #3e424f; + font-weight: bold; + font-size: 22px; + margin: 0px 8px 0px 8px; + } + +.mem_module { + background-color: #0f0f17; + border-radius: 16px; + margin: 0px 10px 0px 3px; + } +.bat_module { + background-color: #0f0f17; + border-radius: 16px; + margin: 0px 10px 0px 10px; + } + + +scale trough { + all: unset; + background-color: #22242b; + box-shadow: 0 2px 3px 2px #06060b; + border-radius: 16px; + min-height: 10px; + min-width: 70px; + margin: 0px 10px 0px 0px; +} + +.works { +font-size: 27px; +font-weight: normal; +margin: 5px 0px 0px 20px; +background-color: #0f0f17; +} + +.0 , .01, .02, .03, .04, .05, .06, +.011, .022, .033, .044, .055, .066{ + margin: 0px 10px 0px 0px; +} + +/* Unoccupied */ +.0 { +color: #3e424f; +} + +/* Occupied */ +.01, .02, .03, .04, .05, .06 { + color: #bfc9db; +} + +/* Focused */ +.011, .022, .033, .044, .055, .066 { + color: #a1bdce; +} + + +.song_cover_art { + background-size: cover; + background-position: center; + min-height: 24px; + min-width: 24px; + margin: 10px; + border-radius: 100px; +} + +.song { + color: #a1bdce; + font-size : 18px; + font-weight : bold; + margin : 3px 5px 0px 0px; +} + +.song_btn_play { + color: #a1bdce; + font-size : 28px; + margin : 3px 0px 0px 5px; + +} + + +.song_btn_prev, .song_btn_next { + color: #bfc9db; + font-size : 24px; + margin : 3px 0px 0px 5px; + +} +// Calendar +.cal { + background-color: #0f0f17; + font-family: JetBrainsMono Nerd Font; + font-size: 18px; + font-weight: normal; + +.cal-in { + padding: 0px 10px 0px 10px; + color: #bfc9db; + +.cal { + &.highlight { + padding: 20px; + } + + padding: 5px 5px 5px 5px; + margin-left: 10px; + } + } +} + +calender { + color: #bfc9db; +} +calendar:selected { + color: #a1bdce; +} + +calendar.header { +color: #a1bdce; +font-weight: bold; +} + +calendar.button { +color: #afbea2; +} + +calendar.highlight { +color: #a1bdce; +font-weight: bold; +} + +calendar:indeterminate { +color: #bfc9db; +} + + + + + + + +.sys_sep { + color: #38384d; + font-size: 18; + margin: 0px 10px 0px 10px; +} +.sys_text_bat_sub, .sys_text_mem_sub { + font-size: 16; + color: #bbc5d7; + margin: 5px 0px 0px 25px; +} +.sys_text_bat, .sys_text_mem { + font-size: 21; + font-weight: bold; + margin: 14px 0px 0px 25px; +} +.sys_icon_bat, .sys_icon_mem { + font-size: 30; + margin: 30px; +} +.sys_win { + background-color: #0f0f17; +} +.sys_bat { + color: #afbea2; + background-color: #38384d; + border-radius: 10px; +} +.sys_mem { + color: #e4c9af; + background-color: #38384d; + border-radius: 10px; +} +.sys_icon_bat, .sys_text_bat { + color: #afbea2; +} +.sys_icon_mem, .sys_text_mem { + color: #e4c9af; +} +.sys_bat_box { + border-radius: 16px; + margin: 15px 10px 10px 20px; + } +.sys_mem_box { + border-radius: 16px; + margin: 10px 10px 15px 20px; + } + + + + + + + +.music_pop { + background-color: #0f0f17; + border-radius: 16px; +} + .music_cover_art { + background-size: cover; + background-position: center; + min-height: 100px; + box-shadow: 5px 5px 5px 5px #06060b; + min-width: 170px; + margin: 20px; + border-radius: 20px; +} + +.music { + color: #a1bdce; + font-size : 20px; + font-weight : bold; + margin : 20px 0px 0px -15px; +} + +.music_artist { + color: #bbc5d7; + font-size : 16px; + font-weight : normal; + margin : 0px 0px 0px 0px; +} + +.music_btn_prev, .music_btn_play, .music_btn_next { + font-family: Iosevka Nerd Font; +} +.music_btn_prev { + color: #bbc5d7; + font-size : 32px; + font-weight : normal; + margin: 0px 0px 0px 0px; +} +.music_btn_play { + color: #a1bdce; + font-size : 48px; + font-weight : normal; + margin: 0px 0px 0px 0px; +} +.music_btn_next { + color: #bbc5d7; + font-size : 32px; + font-weight : normal; + margin: 0px 0px 0px 0px; +} + +.music_bar scale trough highlight { + all: unset; + background-image: linear-gradient(to right, #afcee0 30%, #a1bdce 50%, #77a5bf 100% *50); + border-radius: 24px; +} +.music_bar scale trough { + all: unset; + background-color: #232232; + box-shadow: 0 6px 5px 2px #06060b; + border-radius: 24px; + min-height: 13px; + min-width: 190px; + margin : -10px 10px 20px 0px; +} + +.audio-box { + background-color: #0f0f17; + border-radius: 16px; +} +.speaker_icon { + background-size: cover; + background-image: url('images/speaker.png'); + background-position: center; + min-height: 70px; + min-width: 75px; + margin: 10px 20px 5px 20px; + border-radius: 12px; +} + +.speaker_text { + color: #a1bdce; + font-size : 26px; + font-weight : bold; + margin: 20px 0px 0px 0px; +} + +.speaker_bar scale trough highlight { + all: unset; + background-image: linear-gradient(to right, #afcee0 30%, #a1bdce 50%, #77a5bf 100% *50); + border-radius: 24px; +} +.speaker_bar scale trough { + all: unset; + background-color: #232232; + box-shadow: 0 6px 5px 2px #06060b; + border-radius: 24px; + min-height: 13px; + min-width: 120px; + margin : 0px 0px 5px 0px; +} + + + + +.mic_icon { + background-size: cover; + background-image: url('images/mic.png'); + background-position: center; + min-height: 70px; + min-width: 75px; + margin: 5px 20px 20px 20px; + border-radius: 12px; +} + +.mic_text { + color: #a1bdce; + font-size : 26px; + font-weight : bold; + margin: 0px 0px 0px 0px; +} + +.mic_bar scale trough highlight { + all: unset; + background-image: linear-gradient(to right, #afcee0 30%, #a1bdce 50%, #77a5bf 100% *50); + border-radius: 24px; +} +.mic_bar scale trough { + all: unset; + box-shadow: 0 6px 5px 2px #06060b; + background-color: #232232; + border-radius: 24px; + min-height: 13px; + min-width: 120px; + margin : 0px 0px 20px 0px; +} + +.audio_sep { + color: #38384d; + font-size: 18; + margin : 0px 0px 0px 0px; +} + diff --git a/eww_desktop/bar/eww.yuck b/eww_desktop/bar/eww.yuck new file mode 100644 index 0000000..c0663b5 --- /dev/null +++ b/eww_desktop/bar/eww.yuck @@ -0,0 +1,352 @@ +;; Variables +(defpoll clock_time :interval "5m" "date +\%I") +(defpoll clock_minute :interval "5s" "date +\%M") +(defpoll clock_date :interval "10h" "date '+%d/%m'") +(defpoll volume_percent :interval "3s" "amixer -D pulse sget Master | grep 'Left:' | awk -F'[][]' '{ print $2 }' | tr -d '%'") +(defpoll mic_percent :interval "3s" "amixer -D pulse sget Capture | grep 'Left:' | awk -F'[][]' '{ print $2 }' | tr -d '%'") +(defpoll brightness_percent :interval "5s" "brightnessctl -m -d intel_backlight | awk -F, '{print substr($4, 0, length($4)-1)}' | tr -d '%'") +(defpoll battery :interval "15s" "./scripts/battery --bat") +(defpoll battery_status :interval "1m" "./scripts/battery --bat-st") +(defpoll memory :interval "15s" "scripts/memory") +(defpoll memory_used_mb :interval "2m" "scripts/mem-ad used") +(defpoll memory_total_mb :interval "2m" "scripts/mem-ad total") +(defpoll memory_free_mb :interval "2m" "scripts/mem-ad free") +(defvar vol_reveal false) +(defvar br_reveal false) +(defvar music_reveal false) +(defvar wifi_rev false) +(defvar time_rev false) +(deflisten workspace "scripts/workspace") + +(defvar eww "$HOME/.local/bin/eww/eww -c $HOME/.config/eww/bar") + + +(defpoll COL_WLAN :interval "1m" "~/.config/eww/bar/scripts/wifi --COL") +(defpoll ESSID_WLAN :interval "1m" "~/.config/eww/bar/scripts/wifi --ESSID") +(defpoll WLAN_ICON :interval "1m" "~/.config/eww/bar/scripts/wifi --ICON") + + +(defpoll song :interval "2s" "~/.config/eww/bar/scripts/music_info --song") +(defpoll song_artist :interval "2s" "~/.config/eww/bar/scripts/music_info --artist") +(defpoll current_status :interval "1s" "~/.config/eww/bar/scripts/music_info --time") +(defpoll song_status :interval "2s" "~/.config/eww/bar/scripts/music_info --status") +(defpoll cover_art :interval "2s" "~/.config/eww/bar/scripts/music_info --cover") + +(defpoll calendar_day :interval "20h" "date '+%d'") +(defpoll calendar_year :interval "20h" "date '+%Y'") + +;; widgets + +(defwidget wifi [] + (eventbox :onhover "${eww} update wifi_rev=true" + :onhoverlost "${eww} update wifi_rev=false" + (box :vexpand "false" :hexpand "false" :space-evenly "false" + (button :class "module-wif" :onclick "networkmanager_dmenu" :wrap "false" :limit-width 12 :style "color: ${COL_WLAN};" WLAN_ICON) + (revealer :transition "slideright" + :reveal wifi_rev + :duration "350ms" + (label :class "module_essid" + :text ESSID_WLAN + :orientation "h" + ))))) + + +(defwidget workspaces [] + (literal :content workspace)) + + +(defwidget bat [] + (box :class "bat_module" :vexpand "false" :hexpand "false" + (circular-progress :value battery + :class "batbar" + :thickness 4 + (button + :class "iconbat" + :limit-width 2 + :tooltip "battery on ${battery}%" + :show_truncated false + :onclick "$HOME/.config/eww/bar/scripts/pop system" + :wrap false + "")))) + + +(defwidget mem [] + (box :class "mem_module" :vexpand "false" :hexpand "false" + (circular-progress :value memory + :class "membar" + :thickness 4 + (button + :class "iconmem" + :limit-width 2 + :tooltip "using ${memory}% ram" + :onclick "$HOME/.config/eww/bar/scripts/pop system" + :show_truncated false + :wrap false + "")))) + + + +(defwidget sep [] + (box :class "module-2" :vexpand "false" :hexpand "false" + (label :class "separ" :text "|"))) + +(defwidget clock_module [] + (eventbox :onhover "${eww} update time_rev=true" + :onhoverlost "${eww} update time_rev=false" + (box :class "module" :space-evenly "false" :orientation "h" :spacing "3" + (label :text clock_time :class "clock_time_class" ) + (label :text "" :class "clock_time_sep" ) + (label :text clock_minute :class "clock_minute_class") + (revealer :transition "slideleft" + :reveal time_rev + :duration "350ms" + (button :class "clock_date_class" + :onclick "$HOME/.config/eww/bar/scripts/pop calendar" clock_date + ) + )))) + +(defwidget volume [] + (eventbox :onhover "${eww} update vol_reveal=true" + :onhoverlost "${eww} update vol_reveal=false" + (box :class "module-2" :space-evenly "false" :orientation "h" :spacing "3" + (button :onclick "scripts/pop audio" :class "volume_icon" "") + (revealer :transition "slideleft" + :reveal vol_reveal + :duration "350ms" + (scale :class "volbar" + :value volume_percent + :orientation "h" + :tooltip "${volume_percent}%" + :max 100 + :min 0 + :onchange "amixer -D pulse sset Master {}%" ))))) + +(defwidget bright [] + (eventbox :onhover "${eww} update br_reveal=true" :onhoverlost "${eww} update br_reveal=false" + (box :class "module-2" :space-evenly "false" :orientation "h" :spacing "3" + (label :text "" :class "bright_icon" :tooltip "brightness") + (revealer :transition "slideleft" + :reveal br_reveal + :duration "350ms" + (scale :class "brightbar" + :value brightness_percent + :orientation "h" + :tooltip "${brightness_percent}%" + :max 100 + :min 0 + :onchange "brightnessctl set {}%" ))))) + + + + ;; Music +(defwidget music [] + (eventbox :onhover "${eww} update music_reveal=true" + :onhoverlost "${eww} update music_reveal=false" + (box :class "module-2" :orientation "h" :space-evenly "false" :vexpand "false" :hexpand "false" + (box :class "song_cover_art" :vexpand "false" :hexpand "false" :style "background-image: url('${cover_art}');") + (button :class "song" :wrap "true" :onclick "~/.config/eww/bar/scripts/pop music" song) + (revealer :transition "slideright" + :reveal music_reveal + :duration "350ms" + (box :vexpand "false" :hexpand "false" :oreintation "h" + (button :class "song_btn_prev" :onclick "~/.config/eww/bar/scripts/music_info --prev" "") + (button :class "song_btn_play" :onclick "~/.config/eww/bar/scripts/music_info --toggle" song_status) + (button :class "song_btn_next" :onclick "~/.config/eww/bar/scripts/music_info --next" "")))))) + + + +(defwidget left [] + (box :orientation "h" + :space-evenly false + :halign "end" + :class "left_modules" +(bright) +(volume) +(wifi) +(sep) +(bat) +(mem) +(sep) +(clock_module))) + + +(defwidget right [] + (box :orientation "h" + :space-evenly false + :halign "start" + :class "right_modules" +(workspaces))) + + +(defwidget center [] + (box :orientation "h" + :space-evenly false + :halign "center" + :class "center_modules" +(music))) + +(defwidget bar_1 [] + (box :class "bar_class" + :orientation "h" + (right) + (center) + (left) + )) + +(defwindow bar + :monitor 0 + :geometry (geometry :x "0%" + :y "9px" + :width "98%" + :height "30px" + :anchor "top center") + :stacking "fg" + :wm-ignore true + :windowtype "dock" + (bar_1)) + +(defwidget system [] + (box :class "sys_win" :orientation "v" :space-evenly "false" :hexpand "false" :vexpand "false" :spacing 0 + (box :class "sys_bat_box" :orientation "h" :space-evenly "false" + (circular-progress :value battery + :class "sys_bat" + :thickness 9 + (label :text "" + :class "sys_icon_bat" + :limit-width 2 + :show_truncated false + :wrap false)) + (box :orientation "v" :space-evenly "false" :spacing 0 :hexpand "false" :vexpand "false" + (label :text "battery" + :halign "start" + :class "sys_text_bat" + :limit-width 9 + :show_truncated false + :wrap false) + (label :text "${battery}%" + :halign "start" + :class "sys_text_bat_sub" + :limit-width 22 + :show_truncated false + :wrap false) + (label :text "${battery_status}" + :halign "start" + :class "sys_text_bat_sub" + :limit-width 22 + :show_truncated false + :wrap false))) + (label :text "" :class "sys_sep" :halign "center") + (box :class "sys_mem_box" :orientation "h" :space-evenly "false" :halign "start" + (circular-progress :value memory + :class "sys_mem" + :thickness 9 + (label :text "" + :class "sys_icon_mem" + :limit-width 2 + :show_truncated false + :wrap false + :angle 0.0)) + (box :orientation "v" :space-evenly "false" :spacing 0 :hexpand "false" :vexpand "false" + (label :text "memory" + :halign "start" + :class "sys_text_mem" + :limit-width 9 + :show_truncated false + :wrap false) + (label :text "${memory_used_mb} | ${memory_total_mb}mb " + :halign "start" + :class "sys_text_mem_sub" + :limit-width 22 + :show_truncated false + :wrap false) + (label :text "${memory_free_mb}mb free" + :halign "start" + :class "sys_text_mem_sub" + :limit-width 22 + :show_truncated false + :wrap false))))) + +(defwidget cal [] + (box :class "cal" :orientation "v" + (box :class "cal-in" + (calendar :class "cal" + :day calendar_day + :year calendar_year)))) + +(defwindow calendar + :geometry (geometry :x "-20px" + :y "7%" + :anchor "top right" + :width "270px" + :height "60px") +(cal)) + + + +(defwidget audio [] + (box :class "audio-box" :orientation "v" :space-evenly "false" :vexpand "false" :hexpand "false" + (box :halign "v" :space-evenly "false" :hexpand "false" :vexpand "false" + (box :class "speaker_icon" :orientation "v") + (box :orientation "v" :halign "center" :vexpand "false" :hexpand "false" + (label :class "speaker_text" :text "speaker" :valign "center" :halign "left" ) + (box :class "speaker_bar" :halign "center" :vexpand "false" :hexpand "false" + (scale :value volume_percent + :space-evenly "false" + :orientation "h" + :onchange "amixer -D pulse sset Master {}%" + :tooltip "volume on ${volume_percent}%" + :max 100 + :min 0)))) + (label :text "" :class "audio_sep" :halign "center") + (box :halign "v" :space-evenly "false" :hexpand "false" :vexpand "false" + (box :class "mic_icon" :orientation "v") + (box :orientation "v" :halign "center" :vexpand "false" :hexpand "false" + (label :class "mic_text" :text "mic" :valign "center" :halign "left" ) + (box :class "mic_bar" :halign "center" :vexpand "false" :hexpand "false" + (scale :value mic_percent + :space-evenly "false" + :orientation "h" + :tooltip "mic on ${mic_percent}%" + :onchange "amixer -D pulse sset Capture {}%" + :max 100 + :min 0)))))) + +(defwindow audio_ctl + :geometry (geometry :x "-20px" + :y "7%" + :anchor "top right" + :width "280px" + :height "60px") +(audio)) + + +(defwindow system + :geometry (geometry :x "-20px" + :y "7%" + :anchor "top right" + :width "290px" + :height "120px") +(system)) + + + +;; Music +(defwidget music_pop [] + (box :class "music_pop" :orientation "h" :space-evenly "false" :vexpand "false" :hexpand "false" + (box :class "music_cover_art" :vexpand "false" :hexpand "false" :style "background-image: url('${cover_art}');") + (box :orientation "v" :spacing 20 :space-evenly "false" :vexpand "false" :hexpand "false" + (label :halign "center" :class "music" :wrap "true" :limit-width 13 :text song) + (label :halign "center" :class "music_artist" :wrap "true" :limit-width 15 :text song_artist) + (box :orientation "h" :spacing 15 :halign "center" :space-evenly "false" :vexpand "false" :hexpand "false" + (button :class "music_btn_prev" :onclick "~/.config/eww/bar/scripts/music_info --prev" "") + (button :class "music_btn_play" :onclick "~/.config/eww/bar/scripts/music_info --toggle" song_status) + (button :class "music_btn_next" :onclick "~/.config/eww/bar/scripts/music_info --next" "")) + (box :class "music_bar" :halign "center" :vexpand "false" :hexpand "false" :space-evenly "false" + (scale :onscroll "mpc -q seek {}" :min 0 :active "true" :max 100 :value current_status))))) + + +;; music + (defwindow music_win :stacking "fg" :focusable "false" :screen 1 + :geometry (geometry :x "0" :y "7%" :width 428 :height 104 :anchor "top center") + (music_pop)) + diff --git a/eww_desktop/bar/images/mic.png b/eww_desktop/bar/images/mic.png new file mode 100644 index 0000000..d77f315 Binary files /dev/null and b/eww_desktop/bar/images/mic.png differ diff --git a/eww_desktop/bar/images/music.png b/eww_desktop/bar/images/music.png new file mode 100644 index 0000000..11804f5 Binary files /dev/null and b/eww_desktop/bar/images/music.png differ diff --git a/eww_desktop/bar/images/profile.png b/eww_desktop/bar/images/profile.png new file mode 100644 index 0000000..0190a36 Binary files /dev/null and b/eww_desktop/bar/images/profile.png differ diff --git a/eww_desktop/bar/images/speaker.png b/eww_desktop/bar/images/speaker.png new file mode 100644 index 0000000..79e005b Binary files /dev/null and b/eww_desktop/bar/images/speaker.png differ diff --git a/eww_desktop/bar/launch_bar b/eww_desktop/bar/launch_bar new file mode 100755 index 0000000..51f2a1d --- /dev/null +++ b/eww_desktop/bar/launch_bar @@ -0,0 +1,27 @@ +#!/bin/bash + +## Files and cmd +FILE="$HOME/.cache/eww_launch.xyz" +EWW="$HOME/.local/bin/eww/eww -c $HOME/.config/eww/bar" + +## Run eww daemon if not running already +if [[ ! `pidof eww` ]]; then + ${EWW} daemon + sleep 1 +fi + +## Open widgets +run_eww() { + ${EWW} open-many \ + bar + +} + +## Launch or close widgets accordingly +if [[ ! -f "$FILE" ]]; then + touch "$FILE" + run_eww && bspc config -m LVDS-1 top_padding 49 +else + ${EWW} close-all && killall eww + rm "$FILE" +fi diff --git a/eww_desktop/bar/scripts/battery b/eww_desktop/bar/scripts/battery new file mode 100755 index 0000000..0540a1b --- /dev/null +++ b/eww_desktop/bar/scripts/battery @@ -0,0 +1,17 @@ +#!/bin/bash + +battery() { + BAT=`ls /sys/class/power_supply | grep BAT | head -n 1` + cat /sys/class/power_supply/${BAT}/capacity +} +battery_stat() { + BAT=`ls /sys/class/power_supply | grep BAT | head -n 1` + cat /sys/class/power_supply/${BAT}/status +} + +if [[ "$1" == "--bat" ]]; then + battery +elif [[ "$1" == "--bat-st" ]]; then + battery_stat +fi + diff --git a/eww_desktop/bar/scripts/mem-ad b/eww_desktop/bar/scripts/mem-ad new file mode 100755 index 0000000..1e4cf89 --- /dev/null +++ b/eww_desktop/bar/scripts/mem-ad @@ -0,0 +1,15 @@ +#!/bin/sh + + +total="$(free -m | grep Mem: | awk '{ print $2 }')" +used="$(free -m | grep Mem: | awk '{ print $3 }')" + +free=$(expr $total - $used) + +if [ "$1" = "total" ]; then + echo $total +elif [ "$1" = "used" ]; then + echo $used +elif [ "$1" = "free" ]; then + echo $free +fi diff --git a/eww_desktop/bar/scripts/memory b/eww_desktop/bar/scripts/memory new file mode 100755 index 0000000..217c834 --- /dev/null +++ b/eww_desktop/bar/scripts/memory @@ -0,0 +1,3 @@ +#!/bin/sh + +printf "%.0f\n" $(free -m | grep Mem | awk '{print ($3/$2)*100}') diff --git a/eww_desktop/bar/scripts/music_info b/eww_desktop/bar/scripts/music_info new file mode 100755 index 0000000..ffafe87 --- /dev/null +++ b/eww_desktop/bar/scripts/music_info @@ -0,0 +1,98 @@ +#!/bin/bash +# scripts by adi1090x + +## Get data +STATUS="$(mpc status)" +COVER="/tmp/.music_cover.png" +MUSIC_DIR="$HOME/Music" + +## Get status +get_status() { + if [[ $STATUS == *"[playing]"* ]]; then + echo "" + else + echo "奈" + fi +} + +## Get song +get_song() { + song=`mpc -f %title% current` + if [[ -z "$song" ]]; then + echo "Offline" + else + echo "$song" + fi +} + +## Get artist +get_artist() { + artist=`mpc -f %artist% current` + if [[ -z "$artist" ]]; then + echo "" + else + echo "$artist" + fi +} + +## Get time +get_time() { + time=`mpc status | grep "%)" | awk '{print $4}' | tr -d '(%)'` + if [[ -z "$time" ]]; then + echo "0" + else + echo "$time" + fi +} +get_ctime() { + ctime=`mpc status | grep "#" | awk '{print $3}' | sed 's|/.*||g'` + if [[ -z "$ctime" ]]; then + echo "0:00" + else + echo "$ctime" + fi +} +get_ttime() { + ttime=`mpc -f %time% current` + if [[ -z "$ttime" ]]; then + echo "0:00" + else + echo "$ttime" + fi +} + +## Get cover +get_cover() { + ffmpeg -i "${MUSIC_DIR}/$(mpc current -f %file%)" "${COVER}" -y &> /dev/null + STATUS=$? + + # Check if the file has a embbeded album art + if [ "$STATUS" -eq 0 ];then + echo "$COVER" + else + echo "images/music.png" + fi +} + +## Execute accordingly +if [[ "$1" == "--song" ]]; then + get_song +elif [[ "$1" == "--artist" ]]; then + get_artist +elif [[ "$1" == "--status" ]]; then + get_status +elif [[ "$1" == "--time" ]]; then + get_time +elif [[ "$1" == "--ctime" ]]; then + get_ctime +elif [[ "$1" == "--ttime" ]]; then + get_ttime +elif [[ "$1" == "--cover" ]]; then + get_cover +elif [[ "$1" == "--toggle" ]]; then + mpc -q toggle +elif [[ "$1" == "--next" ]]; then + { mpc -q next; get_cover; } +elif [[ "$1" == "--prev" ]]; then + { mpc -q prev; get_cover; } +fi diff --git a/eww_desktop/bar/scripts/pop b/eww_desktop/bar/scripts/pop new file mode 100755 index 0000000..aef82e8 --- /dev/null +++ b/eww_desktop/bar/scripts/pop @@ -0,0 +1,92 @@ +#!/bin/bash + +calendar() { +LOCK_FILE="$HOME/.cache/eww-calendar.lock" +EWW_BIN="$HOME/.local/bin/eww/eww" + +run() { + ${EWW_BIN} -c $HOME/.config/eww/bar open calendar +} + +# Open widgets +if [[ ! -f "$LOCK_FILE" ]]; then + ${EWW_BIN} -c $HOME/.config/eww/bar close system music_win audio_ctl + touch "$LOCK_FILE" + run && echo "ok good!" +else + ${EWW_BIN} -c $HOME/.config/eww/bar close calendar + rm "$LOCK_FILE" && echo "closed" +fi +} + + +system() { +LOCK_FILE_MEM="$HOME/.cache/eww-system.lock" +EWW_BIN="$HOME/.local/bin/eww/eww" + +run() { + ${EWW_BIN} -c $HOME/.config/eww/bar open system +} + +# Open widgets +if [[ ! -f "$LOCK_FILE_MEM" ]]; then + ${EWW_BIN} -c $HOME/.config/eww/bar close calendar music_win audio_ctl + touch "$LOCK_FILE_MEM" + run && echo "ok good!" +else + ${EWW_BIN} -c $HOME/.config/eww/bar close system + rm "$LOCK_FILE_MEM" && echo "closed" +fi +} + + +music() { +LOCK_FILE_SONG="$HOME/.cache/eww-song.lock" +EWW_BIN="$HOME/.local/bin/eww/eww" + +run() { + ${EWW_BIN} -c $HOME/.config/eww/bar open music_win +} + +# Open widgets +if [[ ! -f "$LOCK_FILE_SONG" ]]; then + ${EWW_BIN} -c $HOME/.config/eww/bar close system calendar + touch "$LOCK_FILE_SONG" + run && echo "ok good!" +else + ${EWW_BIN} -c $HOME/.config/eww/bar close music_win + rm "$LOCK_FILE_SONG" && echo "closed" +fi +} + + + +audio() { +LOCK_FILE_AUDIO="$HOME/.cache/eww-audio.lock" +EWW_BIN="$HOME/.local/bin/eww/eww" + +run() { + ${EWW_BIN} -c $HOME/.config/eww/bar open audio_ctl +} + +# Open widgets +if [[ ! -f "$LOCK_FILE_AUDIO" ]]; then + ${EWW_BIN} -c $HOME/.config/eww/bar close system calendar music + touch "$LOCK_FILE_AUDIO" + run && echo "ok good!" +else + ${EWW_BIN} -c $HOME/.config/eww/bar close audio_ctl + rm "$LOCK_FILE_AUDIO" && echo "closed" +fi +} + + +if [ "$1" = "calendar" ]; then +calendar +elif [ "$1" = "system" ]; then +system +elif [ "$1" = "music" ]; then +music +elif [ "$1" = "audio" ]; then +audio +fi diff --git a/eww_desktop/bar/scripts/wifi b/eww_desktop/bar/scripts/wifi new file mode 100755 index 0000000..5d7cc59 --- /dev/null +++ b/eww_desktop/bar/scripts/wifi @@ -0,0 +1,26 @@ +#!/bin/bash + +status=$(nmcli g | grep -oE "disconnected") +essid=$(nmcli c | grep wlp2s0 | awk '{print ($1)}') + +if [ $status ] ; then + icon="" + text="" + col="#575268" + +else + icon="" + text="${essid}" + col="#a1bdce" +fi + + + +if [[ "$1" == "--COL" ]]; then + echo $col +elif [[ "$1" == "--ESSID" ]]; then + echo $text +elif [[ "$1" == "--ICON" ]]; then + echo $icon +fi + diff --git a/eww_desktop/bar/scripts/workspace b/eww_desktop/bar/scripts/workspace new file mode 100755 index 0000000..f202ef1 --- /dev/null +++ b/eww_desktop/bar/scripts/workspace @@ -0,0 +1,56 @@ +#!/bin/sh +workspaces() { + +ws1="1" +ws2="2" +ws3="3" +ws4="4" +ws5="5" +ws6="6" + +# Unoccupied +un="0" + +# check if Occupied +o1=$(bspc query -D -d .occupied --names | grep "$ws1" ) +o2=$(bspc query -D -d .occupied --names | grep "$ws2" ) +o3=$(bspc query -D -d .occupied --names | grep "$ws3" ) +o4=$(bspc query -D -d .occupied --names | grep "$ws4" ) +o5=$(bspc query -D -d .occupied --names | grep "$ws5" ) +o6=$(bspc query -D -d .occupied --names | grep "$ws6" ) + +# check if Focused +f1=$(bspc query -D -d focused --names | grep "$ws1" ) +f2=$(bspc query -D -d focused --names | grep "$ws2" ) +f3=$(bspc query -D -d focused --names | grep "$ws3" ) +f4=$(bspc query -D -d focused --names | grep "$ws4" ) +f5=$(bspc query -D -d focused --names | grep "$ws5" ) +f6=$(bspc query -D -d focused --names | grep "$ws6" ) + +ic_1="" +ic_2="" +ic_3="" +ic_4="" +ic_5="" +ic_6="" +if [ $f1 ]; then + ic_1="" +elif [ $f2 ]; then + ic_2="" +elif [ $f3 ]; then + ic_3="" +elif [ $f4 ]; then + ic_4="" +elif [ $f5 ]; then + ic_5="" +elif [ $f6 ]; then + ic_6="" +fi + +echo "(box :class \"works\" :orientation \"h\" :spacing 5 :space-evenly \"false\" (button :onclick \"bspc desktop -f $ws1\" :class \"$un$o1$f1\" \"$ic_1\") (button :onclick \"bspc desktop -f $ws2\" :class \"$un$o2$f2\" \"$ic_2\") (button :onclick \"bspc desktop -f $ws3\" :class \"$un$o3$f3\" \"$ic_3\") (button :onclick \"bspc desktop -f $ws4\" :class \"$un$o4$f4\" \"$ic_4\") (button :onclick \"bspc desktop -f $ws5\" :class \"$un$o5$f5\" \"$ic_5\") (button :onclick \"bspc desktop -f $ws6\" :class \"$un$o6$f6\" \"$ic_6\"))" + +} +workspaces +bspc subscribe desktop node_transfer | while read -r _ ; do +workspaces +done diff --git a/eww_desktop/eww.scss b/eww_desktop/eww.scss new file mode 100644 index 0000000..5e15c2f --- /dev/null +++ b/eww_desktop/eww.scss @@ -0,0 +1,510 @@ +* { + all: unset; + font-family: feather; + font-family: DaddyTimeMono Nerd Font; +} + +/** General **/ +.bar_class { + background-color: #111017; /** #111017 old **/ + border-radius: 10px; +} +.module { + margin: 0px 0px 0px 0px; + border-radius: 10px 10px 0px 10px; +} + +/** tooltip!! **/ +tooltip.background { + background-color: #0f0f17; + font-size: 14; + border-radius: 10px; + color: #bfc9db; +} + +tooltip label { + margin: 3px; +} + +/** Widgets **/ + +.clock_time_sep { + font-size: 20; + color: #bfc9db; + margin: 0px 0px 1px 0px; +} +.clock_time_class, +.clock_minute_class { + font-size: 24; +} +.clock_date_class { + font-size: 21; + margin: 0px 5px 0px 5px; + color: #d7beda; +} +.clock_minute_class { + margin: 0px 5px 0px 2px; + color: #bfc9db; +} +.clock_time_class { + color: #bfc9db; + font-weight: bold; + margin: 0px 0px 0px 8px; +} + +.membar { + color: #e0b089; + background-color: #38384d; + border-radius: 10px; +} + +.module_app_text { + font-size: 23; + margin: 2px 0px 0px 0px; +} + +.bright_icon_overlay { + font-size: 28; + color: #e4c9af; + background-size: cover; + background-position: center; + margin: 0px 27px 0px 3px; +} +.volume_icon { + font-size: 22; + color: #a1bdce; + margin: 0px 5px 0px 0px; +} +.module-blu { + font-size: 22; + color: #a1bdce; + border-radius: 100%; + margin: 0px 10px 0px 0px; +} + +.iconmem { + font-size: 23; + margin: 0px -3px 4px 8px; + color: #e0b089; +} + +.mem_padding { + margin: 10px; +} + +.separ { + color: #3e424f; + font-weight: bold; + font-size: 22px; + margin: 0px 0px 0px 0px; +} + +.mem_module { + background-color: #111017; + border-radius: 16px; + margin: 0px 10px 0px 0px; +} + +scale trough { + all: unset; + background-color: #22242b; + box-shadow: 0 2px 3px 2px #06060b; + border-radius: 16px; + min-height: 10px; + min-width: 70px; + margin: 0px 10px 0px 0px; +} + +.works { + font-size: 27px; + font-weight: normal; + margin: 0px 0px 0px 15px; + background-color: #111017; +} + +.0, +.01, +.02, +.03, +.04, +.05, +.06, +.011, +.022, +.033, +.044, +.055, +.066 { + margin: 0px 10px 0px 0px; +} + +/* Unoccupied */ +.0 { + color: #3e424f; +} + +/* Occupied */ +.01, +.02, +.03, +.04, +.05, +.06 { + color: #bfc9db; +} + +/* Focused */ +.011, +.022, +.033, +.044, +.055, +.066 { + color: #a1bdce; +} + +.song_cover_art { + background-size: cover; + background-position: center; + min-height: 24px; + min-width: 24px; + margin: 10px; + border-radius: 100px; +} + +// Calendar +.cal { + border-radius: 10px; + background-color: #0f0f17; + font-family: JetBrainsMono Nerd Font; + font-size: 18px; + font-weight: normal; + + .cal-in { + padding: 0px 10px 0px 10px; + color: #bfc9db; + + .cal { + &.highlight { + padding: 20px; + } + + padding: 5px 5px 5px 5px; + margin-left: 10px; + } + } +} + +calender { + color: #bfc9db; +} +calendar:selected { + color: #a1bdce; +} + +calendar.header { + color: #a1bdce; + font-weight: bold; +} + +calendar.button { + color: #afbea2; +} + +calendar.highlight { + color: #a1bdce; + font-weight: bold; +} + +calendar:indeterminate { + color: #bfc9db; +} + +.sys_sep { + color: #38384d; + font-size: 18; + margin: 0px 10px 0px 10px; +} +.sys_text_mem_sub { + font-size: 16; + color: #bbc5d7; + margin: 5px 0px 0px 25px; +} +.sys_text_mem { + font-size: 21; + font-weight: bold; + margin: 14px 0px 0px 25px; +} +.sys_icon_mem { + font-size: 30; + margin: 30px; +} +.sys_win { + border-radius: 10px; + background-color: #0f0f17; +} + +.sys_mem { + color: #e4c9af; + background-color: #38384d; + border-radius: 10px; +} + +.sys_icon_mem, +.sys_text_mem { + color: #e4c9af; +} + +.sys_mem_box { + border-radius: 16px; + margin: 10px 10px 15px 20px; +} + +.audio-box { + background-color: #0f0f17; + border-radius: 16px; +} +.speaker_icon { + background-size: cover; + background-image: url("images/speaker.png"); + background-position: center; + min-height: 40px; + min-width: 45px; + margin: 10px 10px 5px 20px; + border-radius: 12px; +} + +.speaker_text { + color: #a1bdce; + font-size: 22px; + font-weight: bold; + margin: 5px 15px 0px 15px; +} +.bright_text { + color: #a1bdce; + font-size: 22px; + font-weight: bold; + margin: 5px 15px 0px 25px; +} + +.change_audio_box { + margin: 0px 0px 0px 10px; +} + +.change_audio { + color: #a1bdce; + margin: 0px 50px 0px 50px; + font-size: 30px; + font-weight: bold; +} + +.speaker_bar scale trough highlight { + all: unset; + background-image: linear-gradient( + to right, + #afcee0 30%, + #a1bdce 50%, + #77a5bf 100% * 50 + ); + border-radius: 24px; +} +.speaker_bar scale trough { + all: unset; + background-color: #232232; + box-shadow: 0 6px 5px 2px #06060b; + border-radius: 24px; + min-height: 10px; + min-width: 100px; + margin: 0px 0px 5px 0px; +} + +.mic_icon { + background-size: cover; + background-image: url("images/mic.png"); + background-position: center; + min-height: 40px; + min-width: 45px; + margin: 5px 20px 20px 10px; + border-radius: 12px; +} + +.mic_text { + color: #a1bdce; + font-size: 26px; + font-weight: bold; + margin: 0px 0px 0px 0px; +} + +.mic_bar scale trough highlight { + all: unset; + background-image: linear-gradient( + to right, + #afcee0 30%, + #a1bdce 50%, + #77a5bf 100% * 50 + ); + border-radius: 24px; +} +.mic_bar scale trough { + all: unset; + box-shadow: 0 6px 5px 2px #06060b; + background-color: #232232; + border-radius: 24px; + min-height: 10px; + min-width: 100px; + margin: 6px 0px 20px 0px; +} + +.audio_sep { + color: #38384d; + font-size: 18; + margin: 0px 0px 0px 0px; +} + +//cockpit stuff + +.cockpit_class { + all: unset; +} + +.cockpit_clock { + padding: 0px 30px 0px 30px; +} + +.cockpit_box { + background-color: #06060b; + border-radius: 10px; + margin: 5px; + padding: 0px 5px 0px 5px; + opacity: 0.85; +} + +.cockpit_button_shutdown { + color: red; + font-size: 40px; + margin: 0px 5px -30px 5px; +} + +.cockpit_button_sleep { + color: blue; + font-size: 40px; + margin: 0px 5px -30px 5px; +} + +.cockpit_button_restart { + color: green; + font-size: 40px; + margin: 0px 5px -30px 5px; +} + +.song_info { + margin: -50px 0px 0px 0px; + font-size: 20px; + color: grey; +} + +.album_cover { + margin: -60px 10px 20px 10px; + padding: 0px; + background-size: cover; + background-repeat: no-repeat; + background-position: center; + border-radius: 10px; +} + +.cockpit_button_settings { + color: #d35d6e; + font-size: 35px; + margin: -30px 5px 0px 5px; +} + +.weather-icon { + font-size: 80px; + margin: 10px 0px 5px 10px; + font-family: Iosevka; +} + +.weather-stat { + font-size: 30px; + font-weight: bold; + color: #d35d6e; + margin: -5px 0px 10px 50px; +} + +.temperature { + color: grey; + font-size: 48px; + font-weight: 900; + margin: 0px 0px 0px 20px; +} +.weather-quote { + margin: 20px 10px 1000px 10px; + font-size: 20px; +} +.weather-quote-head, +.weather-quote-tail { + color: grey; + font-size: 18px; + margin: 0px 0px 10px 0px; +} + +.cockpit_clock_left { + font-size: 50px; + font-weight: bold; + color: #d35d6e; + margin: 5px -20px -30px 0px; +} + +.cockpit_clock_right { + font-size: 50px; + font-weight: bold; + color: #d35d6e; + margin: 5px 0px -30px -20px; +} + +.cockpit_date { + font-size: 50px; + font-weight: bold; + color: #d35d6e; + margin: -30px -20px 0px -20px; +} + +.cockpit_clock_sep { + font-size: 40px; + font-weight: bold; + color: #d35d6e; + margin: 0px -20px -30px -20px; +} + +.cockpit_docs { + color: red; + font-size: 30px; + margin: 10px 0px -10px 0px; +} + +.cockpit_pics { + color: green; + font-size: 30px; + margin: 0px 0px 0px 0px; + padding: 0px; +} + +.cockpit_gits { + color: blue; + font-size: 30px; + margin: -20px 0px 10px 0px; +} + +.cockpit_sep_bottom { + color: #38384d; + font-size: 18; + margin: -10px 0px 0px 0px; + padding: 0px; +} + +.cockpit_sep_top { + color: #38384d; + font-size: 18; + margin: 0px 0px -10px 0px; + padding: 0px; +} diff --git a/eww_desktop/eww.yuck b/eww_desktop/eww.yuck new file mode 100644 index 0000000..81080a2 --- /dev/null +++ b/eww_desktop/eww.yuck @@ -0,0 +1,354 @@ +;; date definitions ;; +(defpoll clock_time :interval "1m" "date +\%I") +(defpoll clock_minute :interval "5s" "date +\%M") +(defpoll clock_date :interval "1h" "date '+%d/%m'") + +;; volume definitions ;; +(defpoll volume_percent :interval "1s" "pactl get-sink-volume @DEFAULT_SINK@ | awk -F '/' ' { print $2 } ' | tr -d ' %'") +(defpoll mic_percent :interval "1s" "pactl get-source-volume @DEFAULT_SOURCE@ | awk -F'/' '{ print $2 }' | tr -d ' %'") + +;; memory definitions ;; +(defpoll memory :interval "15s" "scripts/memory") +(defpoll memory_used_mb :interval "2m" "scripts/mem-ad used") +(defpoll memory_total_mb :interval "2m" "scripts/mem-ad total") +(defpoll memory_free_mb :interval "2m" "scripts/mem-ad free") + +;; music definitions ;; +(defpoll Song_info :interval "2s" "scripts/music_control") +(defpoll Thumbnail :interval "2s" "scripts/music_control2") + +;; calendar definitions ;; +(defpoll calendar_day :interval "20h" "date '+%d'") +(defpoll calendar_year :interval "20h" "date '+%Y'") + +;; Weather vars +(defpoll weather-icon :interval "21m" "cat ~/.cache/weather/weather-icon") +(defpoll temperature :interval "21m" "cat ~/.cache/weather/weather-degree") +(defpoll weather-hex :interval "21m" "cat ~/.cache/weather/weather-hex") +(defpoll weather-stat :interval "21m" "cat ~/.cache/weather/weather-stat") +(defpoll weather-stat-side :interval "21m" "~/.config/eww/scripts/weather-trimmer") +(defpoll weather-quote :interval "21m" "~/.config/eww/scripts/getwethquote") +(defpoll weather-quote2 :interval "21m" "~/.config/eww/scripts/getwethquote2") + +;; simple variables ;; +(defvar eww "$HOME/.local/bin/eww -c $HOME/.config/eww") +(defvar vol_reveal false) +(defvar br_reveal false) +(defvar music_reveal false) +(defvar wifi_rev false) +(defvar time_rev false) +(defvar current_monitor 0) +(deflisten workspace "scripts/workspace") +(deflisten currentName "scripts/current_name") + + +;; widgets +(defwidget bluetooth [] + (box :vexpand "false" :hexpand "false" :space-evenly "false" + (button :class "module-blu" :onclick "hyprctl dispatch exec 'blueman-manager'" :wrap "false" :limit-width 12 "") + )) + +;; workspaces ;; +(defwidget workspaces [] + (literal :content workspace)) + +;; memory ;; +(defwidget mem [] + (box :class "mem_module" :vexpand "false" :hexpand "false" + (button :class "iconmem" + :onclick "$HOME/.config/eww/scripts/pop system" + (circular-progress :value memory + :class "membar" + :thickness 4 + :tooltip "using ${memory}% ram" + :show_truncated false + :wrap false + (label :class "mem_padding" :text "") + )))) + +;; seperator ;; +(defwidget sep [] + (box :class "module-2" :vexpand "false" :hexpand "false" + (label :class "separ" :text "|"))) + +;; clock ;; +(defwidget clock_module [] + (eventbox :onhover "${eww} update time_rev=true" + :onhoverlost "${eww} update time_rev=false" + (button :onclick "scripts/pop calendar" + (box :class "module" :space-evenly "false" :orientation "h" :spacing "3" + (label :text clock_time :class "clock_time_class" ) + (label :text "" :class "clock_time_sep" ) + (label :text clock_minute :class "clock_minute_class") + (revealer :class "clock_date_class" + :transition "slideleft" + :reveal time_rev + :duration "350ms" + clock_date + ))))) + +;; speaker volume ;; +(defwidget volume [] + (box :class "module-2" :space-evenly "false" :orientation "h" :spacing "3" + (button :onclick "scripts/pop audio" :class "volume_icon" ""))) + +;; audio volume widget ;; +(defwidget audio [] + (eventbox :onhover "scripts/pop hoverCreate" + :onhoverlost "scripts/pop hoverGet audio_ctl" + (box :class "audio-box" :orientation "v" :space-evenly "false" :vexpand "false" :hexpand "false" + (box :halign "center" :space-evenly "false" :hexpand "false" :vexpand "false" + (box :class "speaker_icon" :orientation "v") + (box :orientation "v" :halign "center" :vexpand "false" :hexpand "false" + (label :class "speaker_text" :text "speaker" :valign "center" :halign "left" ) + (box :class "speaker_bar" :halign "center" :vexpand "false" :hexpand "false" + (scale :value volume_percent + :space-evenly "false" + :orientation "h" + :onchange "pactl set-sink-volume @DEFAULT_SINK@ {}%" + :tooltip "volume on ${volume_percent}%" + :max 100 + :min 0)))) + (label :text "" :class "audio_sep" :halign "center") + (box :halign "center" :space-evenly "false" :hexpand "false" :vexpand "false" + (box :class "mic_icon" :orientation "v") + (box :orientation "v" :halign "center" :vexpand "false" :hexpand "false" + (label :class "speaker_text" :text "mic" :valign "center" :halign "left" ) + (box :class "mic_bar" :halign "center" :vexpand "false" :hexpand "false" + (scale :value mic_percent + :space-evenly "false" + :orientation "h" + :tooltip "mic on ${mic_percent}%" + :onchange "pactl set-source-volume @DEFAULT_SOURCE@ {}%" + :max 100 + :min 0)))) + (label :text "" :class "audio_sep" :halign "center") + (box :class "change_audio_box" :halign "center" :spac`e-evenly "false" :hexpand "false" :vexpand "false" + (box :class "change_audio" :orientation "v" :halign "left" + (button :onclick "scripts/change-audio internal" "")) + (box :class "change_audio" :orientation "v" :halign "right" + (button :onclick "scripts/change-audio bluetooth" "")) + )))) + +(defwidget cname [] + (literal :content currentName)) + +;; calendar ;; +(defwidget cal [] + (eventbox :onhover "scripts/pop hoverCreate" + :onhoverlost "scripts/pop hoverGet calendar" + (box :class "cal" :orientation "v" + (box :class "cal-in" + (calendar :class "cal" + :day calendar_day + :year calendar_year))))) + +(defwidget system [] + (eventbox :onhover "scripts/pop hoverCreate" + :onhoverlost "scripts/pop hoverGet system" + (box :class "sys_win" :orientation "v" :space-evenly "false" :hexpand "false" :vexpand "false" :spacing 0 + (box :class "sys_mem_box" :orientation "h" :space-evenly "false" :halign "start" + (circular-progress :value memory + :class "sys_mem" + :thickness 9 + (label :text "" + :class "sys_icon_mem" + :limit-width 2 + :show_truncated false + :wrap false + :angle 0.0)) + (box :orientation "v" :space-evenly "false" :spacing 0 :hexpand "false" :vexpand "false" + (label :text "memory" + :halign "start" + :class "sys_text_mem" + :limit-width 9 + :show_truncated false + :wrap false) + (label :text "${memory_used_mb} | ${memory_total_mb}mb " + :halign "start" + :class "sys_text_mem_sub" + :limit-width 22 + :show_truncated false + :wrap false) + (label :text "${memory_free_mb}mb free" + :halign "start" + :class "sys_text_mem_sub" + :limit-width 22 + :show_truncated false + :wrap false)))))) + +;; cockpit widget ;; +(defwidget cockpit [] + (box :orientation "h" + (box :class "cockpit_class" + :orientation "h" + (box :orientation "v" + (box :class "cockpit_box" :orientation "v" + (box + (button :class "cockpit_button_shutdown" :onclick "hyprctl dispatch exec 'shutdown now'" "") + (button :class "cockpit_button_restart" :onclick "hyprctl dispatch exec reboot" "") + (button :class "cockpit_button_sleep" :onclick "hyprctl dispatch exec 'playerctl -a pause & swaylock -c 000000 & systemctl suspend'" "")) + (label :text "" :class "audio_sep" :halign "center") + (box + (button :class "cockpit_button_settings" :onclick "hyprctl dispatch exec 'pavucontrol'" "") + (button :class "cockpit_button_settings" :onclick "scripts/change-audio bluetooth" ""))) + (box :class "cockpit_box" :orientation "v" + (button :class "cockpit_docs" :onclick "hyprctl dispatch exec nautilus $HOME/Documents" "Documents ") + (label :text "" :class "cockpit_sep_top" :halign "center") + (button :class "cockpit_pics" :onclick "hyprctl dispatch exec nautilus $HOME/Pictures" "Pictures ") + (label :text "" :class "cockpit_sep_bottom" :halign "center") + (button :class "cockpit_gits" :onclick "hyprctl dispatch exec 'alacritty --working-directory $HOME/gits'" "gits "))) + (box :orientation "v" + (box :class "cockpit_box" :orientation "v" + (box :class "cockpit_clock" + (label :text clock_time :class "cockpit_clock_left" ) + (label :text "" :class "cockpit_clock_sep" ) + (label :text clock_minute :class "cockpit_clock_right")) + (label :text "" :class "audio_sep" :halign "center") + (box :class "cockpit_clock" + (label :text clock_date :class "cockpit_date") + )) + (box :class "cockpit_box" (weather))) + (box :width 300 :height 200 :class "cockpit_box" :orientation "v" + (box :class "song_info" + (label :wrap true :text "${Song_info}")) + (box :class "album_cover" :style 'background-image: url("${Thumbnail}")') + ))) +) + +;; weather ;; + (defwidget weather [] + (box :orientation "v" :space-evenly "false" + (box :orientation "h" :space-evenly "false" + (box :class "weather-icon" :style "color: ${weather-hex}" {weather-icon}) + (box :class "temperature" "${temperature}")) + (box :orientation "v" :space-evenly "false" + (box :class "weather-stat" {weather-stat})) + (box :class "weather-quote-head" + (label :wrap true :text {weather-quote})))) + +;; left side but displayed right? ;; +(defwidget left [] + (box :orientation "h" + :space-evenly false + :halign "end" + :class "left_modules" +(volume) +(bluetooth) +(sep) +(mem) +(sep) +(clock_module))) + +;; right side but displayed left? ;; +(defwidget right [] + (box :orientation "h" + :space-evenly false + :halign "start" + :class "right_modules" +(workspaces))) + +;; center widget ;; +(defwidget center [] + (box :orientation "h" + :space-evenly false + :halign "center" + :class "center_modules" +(cname))) + +;; bar as widget;; +(defwidget bar_1 [] + (box :class "bar_class" + :orientation "h" + (right) + (center) + (left) + )) + + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Drawing Windows ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(defwindow calendar + :monitor 0 + :geometry (geometry :x "20px" + :y "2px" + :anchor "top right" + :width "270px" + :height "60px") + :stacking "overlay" +(cal)) + +(defwindow audio_ctl + :monitor 0 + :geometry (geometry :x "120px" + :y "2px" + :anchor "top right" + :width "250px" + :height "230px") + :stacking "overlay" +(audio)) + +(defwindow system + :monitor 0 + :geometry (geometry :x "50px" + :y "2px" + :anchor "top right" + :width "290px" + :height "120px") + :stacking "overlay" +(system)) + +;; draw the bar ;; +(defwindow bar + :monitor 0 + :geometry (geometry :x "0%" + :y "1px" + :width "3417px" + :height "20px" + :anchor "top center") + :stacking "bottom" + :wm-ignore false + :exclusive true + (bar_1)) + +;; draw the cockpit monitor 0 ;; +(defwindow cockpit_window_0 + :monitor 0 + :geometry (geometry :x "1470px" + :y "420px" + :width "600px" + :height "400px" + :anchor "center") + :stacking "overlay" + :wm-ignore false + :exclusive true + (cockpit)) + + +;; draw the cockpit monitor 1 ;; +(defwindow cockpit_window_1 + :monitor 1 + :geometry (geometry + :width "600px" + :height "400px" + :anchor "center") + :stacking "overlay" + :wm-ignore false + :exclusive true + (cockpit)) + + +;; draw the cockpit monitor 2 ;; +(defwindow cockpit_window_2 + :monitor 2 + :geometry (geometry + :width "600px" + :height "400px" + :anchor "center") + :stacking "overlay" + :wm-ignore false + :exclusive true + (cockpit)) diff --git a/eww_desktop/images/mic.png b/eww_desktop/images/mic.png new file mode 100644 index 0000000..d77f315 Binary files /dev/null and b/eww_desktop/images/mic.png differ diff --git a/eww_desktop/images/music.png b/eww_desktop/images/music.png new file mode 100644 index 0000000..11804f5 Binary files /dev/null and b/eww_desktop/images/music.png differ diff --git a/eww_desktop/images/profile.png b/eww_desktop/images/profile.png new file mode 100644 index 0000000..0190a36 Binary files /dev/null and b/eww_desktop/images/profile.png differ diff --git a/eww_desktop/images/speaker.png b/eww_desktop/images/speaker.png new file mode 100644 index 0000000..79e005b Binary files /dev/null and b/eww_desktop/images/speaker.png differ diff --git a/eww_desktop/launch_bar b/eww_desktop/launch_bar new file mode 100755 index 0000000..205cd60 --- /dev/null +++ b/eww_desktop/launch_bar @@ -0,0 +1,27 @@ +#!/bin/bash + +## Files and cmd +FILE="$HOME/.cache/eww_launch.xyz" +EWW="$HOME/.local/bin/eww -c $HOME/.config/eww" + +## Run eww daemon if not running already +if [[ ! `pidof eww` ]]; then + ${EWW} daemon + sleep 1 +fi + +## Open widgets +run_eww() { + ${EWW} open-many \ + bar + +} + +## Launch or close widgets accordingly +if [[ ! -f "$FILE" ]]; then + touch "$FILE" + run_eww && bspc config -m LVDS-1 top_padding 49 +else + ${EWW} close-all && killall eww + rm "$FILE" +fi diff --git a/eww_desktop/scripts/audio_devices b/eww_desktop/scripts/audio_devices new file mode 100755 index 0000000..1548cfd --- /dev/null +++ b/eww_desktop/scripts/audio_devices @@ -0,0 +1,31 @@ +#!/bin/bash +CLIENTS=$(pactl list sink-inputs | grep "application.process.binary" | awk -F '= ' ' { print $2 } ' | tr -d '"') + +readarray -t lines <<<"$CLIENTS" + +printf "%s\n" "${lines[@]}" +echo ${lines[2]} + + +#echo "(box :class \"works\" :orientation \"h\" :spacing 5 :space-evenly \"false\" (button :onclick \"hyprctl dispatch workspace 1\" :class \"$un$o1$f1\" \"$ic_1\") (button :onclick \"hyprctl dispatch workspace 2\" :class \"$un$o2$f2\" \"$ic_2\") (button :onclick \"hyprctl dispatch workspace 3\" :class \"$un$o3$f3\" \"$ic_3\") (button :onclick \"hyprctl dispatch workspace 4\" :class \"$un$o4$f4\" \"$ic_4\") (button :onclick \"hyprctl dispatch workspace 5\" :class \"$un$o5$f5\" \"$ic_5\") (button :onclick \"hyprctl dispatch workspace 6\" :class \"$un$o6$f6\" \"$ic_6\") (button :onclick \"hyprctl dispatch workspace 7\" :class \"$un$o7$f7\" \"$ic_7\") (button :onclick \"hyprctl dispatch workspace 8\" :class \"$un$o8$f8\" \"$ic_8\"))" + + # (eventbox :onhover "scripts/pop hoverCreate" + # :onhoverlost "scripts/pop hoverGet audio_ctl" + # (box :class "audio-box" :orientation "v" :space-evenly "false" :vexpand "false" :hexpand "false" + + # (box :halign "center" :space-evenly "false" :hexpand "false" :vexpand "false" + # (box :class "speaker_icon" :orientation "v") + # (box :orientation "v" :halign "center" :vexpand "false" :hexpand "false" + # (label :class "speaker_text" :text "speaker" :valign "center" :halign "left" ) + # (box :class "speaker_bar" :halign "center" :vexpand "false" :hexpand "false" + # (scale :value volume_percent + # :space-evenly "false" + # :orientation "h" + # :onchange "pactl set-sink-volume @DEFAULT_SINK@ {}%" + # :tooltip "volume on ${volume_percent}%" + # :max 100 + # :min 0)))) + + # (label :text "" :class "audio_sep" :halign "center") + + # )))) diff --git a/eww_desktop/scripts/battery b/eww_desktop/scripts/battery new file mode 100755 index 0000000..091e715 --- /dev/null +++ b/eww_desktop/scripts/battery @@ -0,0 +1,77 @@ +#!/bin/bash + +bat=/sys/class/power_supply/BAT0/ +per="$(cat "$bat/capacity")" +char="$(cat "$bat/status")" + +icon() { + +#[ $(cat "$bat/status") = Charging ] && echo "" && exit + +if [ "$char" == "Charging" ]; then + if [ "$per" -gt "90" ]; then + icon="" + elif [ "$per" -gt "80" ]; then + icon="" + elif [ "$per" -gt "70" ]; then + icon="" + elif [ "$per" -gt "60" ]; then + icon="" + elif [ "$per" -gt "50" ]; then + icon="" + elif [ "$per" -gt "40" ]; then + icon="" + elif [ "$per" -gt "30" ]; then + icon="" + elif [ "$per" -gt "20" ]; then + icon="" + elif [ "$per" -gt "10" ]; then + icon="" + elif [ "$per" -gt "0" ]; then + icon="" + else + echo  && exit + fi +else + if [ "$per" -gt "90" ]; then + icon="" + elif [ "$per" -gt "80" ]; then + icon="" + elif [ "$per" -gt "70" ]; then + icon="" + elif [ "$per" -gt "60" ]; then + icon="" + elif [ "$per" -gt "50" ]; then + icon="" + elif [ "$per" -gt "40" ]; then + icon="" + elif [ "$per" -gt "30" ]; then + icon="" + elif [ "$per" -gt "20" ]; then + icon="" + elif [ "$per" -gt "10" ]; then + icon="" + notify-send -u critical "Battery Low" "Connect Charger" + elif [ "$per" -gt "0" ]; then + icon="" + notify-send -u critical "Battery Low" "Connect Charger" + else + echo  && exit + fi +fi + echo "$icon" +} + +percent() { + echo $per +} + +stat() { + echo $char +} + +[ "$1" = "icon" ] && icon && exit +[ "$1" = "percent" ] && percent && exit +[ "$1" = 'stat' ] && stat && exit +exit + diff --git a/eww_desktop/scripts/change-audio b/eww_desktop/scripts/change-audio new file mode 100755 index 0000000..a003eb0 --- /dev/null +++ b/eww_desktop/scripts/change-audio @@ -0,0 +1,37 @@ +#! /bin/bash + +internal() { + SPEAKER=$(pactl list sinks | grep "Name" | grep "alsa" | awk -F ': ' '{ print $2 }') + if [ "$SPEAKER" != "" ]; then + pactl set-default-sink "$SPEAKER" + pactl set-sink-mute "$SPEAKER" false + DEVICE=$( echo "$SPEAKER" | awk -F '.' ' { print $4 } ') + notify-send "changed audio to "$DEVICE" " + else + notify-send "failed, not available!" + fi +} + +bluetooth() { + SPEAKER=$(pactl list sinks | grep "Name" | grep "blue" | awk -F ': ' '{ print $2 }') + if [ "$SPEAKER" != "" ]; then + pactl set-default-sink "$SPEAKER" + pactl set-sink-mute "$SPEAKER" false + DEVICE=$(echo "$SPEAKER" | awk -F '.' ' { print $4 } ') + notify-send "changed audio to "$DEVICE" " + else + notify-send "failed, not available!" + fi +} + + +if [ "$1" == "internal" ]; then + internal +elif [ "$1" == "bluetooth" ]; then + bluetooth +else + SPEAKER=$(pactl info | grep "Default Sink" | awk -F ': ' ' { print $2 } ') + pactl set-sink-mute "$SPEAKER" false +fi + + diff --git a/eww_desktop/scripts/change-brightness b/eww_desktop/scripts/change-brightness new file mode 100755 index 0000000..198dc44 --- /dev/null +++ b/eww_desktop/scripts/change-brightness @@ -0,0 +1,12 @@ +#! /bin/bash + +set_brightness() { +brightnessctl set "$1" +CURRENT=$(brightnessctl -m -d intel_backlight | awk -F, '{print substr($4, 0, length($4)-1)}') +dunstify -a "changeBrightness" -r 3 -u low -i brightness-high -h int:value:"$CURRENT" "Brightness: ${CURRENT}%" +} + +if [ "$1" == "brightness" ]; then + set_brightness "$2" +fi + diff --git a/eww_desktop/scripts/change-volume b/eww_desktop/scripts/change-volume new file mode 100755 index 0000000..094ed43 --- /dev/null +++ b/eww_desktop/scripts/change-volume @@ -0,0 +1,20 @@ +#! /bin/bash + +set_volume_sink() { +pactl set-sink-volume @DEFAULT_SINK@ "$1" +CURRENT=$(pactl get-sink-volume @DEFAULT_SINK@ | awk -F'/' '{ print $2 }' | tr -d ' %') +dunstify -a "changeVolume" -r 2 -u low -i audio-volume-high -h int:value:"$CURRENT" "Output Volume: ${CURRENT}%" +} + +set_volume_source() { +pactl set-source-volume @DEFAULT_SOURCE@ "$1" +CURRENT=$(pactl get-source-volume @DEFAULT_SOURCE@ | awk -F'/' '{ print $2 }' | tr -d ' %') +dunstify -a "changeMicVolume" -r 2 -u low -i audio-volume-high -h int:value:"$CURRENT" "Input Volume: ${CURRENT}%" +} + + +if [ "$1" == "sink" ]; then + set_volume_sink "$2" +elif [ "$1" == "source" ]; then + set_volume_source "$2" +fi diff --git a/eww_desktop/scripts/cockpit_toggle b/eww_desktop/scripts/cockpit_toggle new file mode 100755 index 0000000..80dfd97 --- /dev/null +++ b/eww_desktop/scripts/cockpit_toggle @@ -0,0 +1,11 @@ +#! /bin/bash + +ISOPEN=$(eww windows | grep "*cockpit" | tr -d '*') + + +if [ "$ISOPEN" = "" ]; then +MONITOR=$(hyprctl monitors | grep -B 10 "focused: yes" | grep "ID" | awk -F '(' ' { print $2 } ' | tr -d 'ID ):') + eww open cockpit_window_"$MONITOR" +else + eww close "$ISOPEN" +fi diff --git a/eww_desktop/scripts/current_name b/eww_desktop/scripts/current_name new file mode 100755 index 0000000..224bfac --- /dev/null +++ b/eww_desktop/scripts/current_name @@ -0,0 +1,9 @@ +#!/bin/bash +currentName() { + win=$(hyprctl activewindow | grep class | awk -F ':' '{print $2}' | tr -d ' ') + echo "(box :class \"module_app_text\" :space-evenly \"false\" :orientation \"h\" :spacing \"3\" (label :text \"$win\"))" +} +currentName +tail -f /tmp/hypr/$HYPRLAND_INSTANCE_SIGNATURE/hyprland.log | grep -E --line-buffered "focus to surface" | while read -r; do +currentName +done diff --git a/eww_desktop/scripts/firefox_control.sh b/eww_desktop/scripts/firefox_control.sh new file mode 100755 index 0000000..32d818e --- /dev/null +++ b/eww_desktop/scripts/firefox_control.sh @@ -0,0 +1,5 @@ +#! /bin/bash + +NUM=$(pactl list clients short | grep "firefox" | awk -F 'PipeWire' ' { print $1 } ' | tr -d ' \t\n') +CLIENT=$(pactl list sink-inputs short | grep "$NUM" | awk -F ' ' ' { print $1 }' | tr -d ' \t\n') +pactl set-sink-input-volume "$CLIENT" "$1" diff --git a/eww_desktop/scripts/getwethquote b/eww_desktop/scripts/getwethquote new file mode 100755 index 0000000..7bfaf34 --- /dev/null +++ b/eww_desktop/scripts/getwethquote @@ -0,0 +1,2 @@ +#!/bin/bash +echo -e $(cat $HOME/.cache/weather/weather-quote) | head -n1 diff --git a/eww_desktop/scripts/getwethquote2 b/eww_desktop/scripts/getwethquote2 new file mode 100755 index 0000000..a34afa9 --- /dev/null +++ b/eww_desktop/scripts/getwethquote2 @@ -0,0 +1,2 @@ +#!/bin/bash +echo -e $(cat $HOME/.cache/weather/weather-quote) | tail -n1 diff --git a/eww_desktop/scripts/home/dashie/.cache/weather/weather-degree b/eww_desktop/scripts/home/dashie/.cache/weather/weather-degree new file mode 100644 index 0000000..b9dd641 --- /dev/null +++ b/eww_desktop/scripts/home/dashie/.cache/weather/weather-degree @@ -0,0 +1 @@ +8°C diff --git a/eww_desktop/scripts/home/dashie/.cache/weather/weather-hex b/eww_desktop/scripts/home/dashie/.cache/weather/weather-hex new file mode 100644 index 0000000..4473fae --- /dev/null +++ b/eww_desktop/scripts/home/dashie/.cache/weather/weather-hex @@ -0,0 +1 @@ +#adadff diff --git a/eww_desktop/scripts/home/dashie/.cache/weather/weather-icon b/eww_desktop/scripts/home/dashie/.cache/weather/weather-icon new file mode 100644 index 0000000..e93d772 --- /dev/null +++ b/eww_desktop/scripts/home/dashie/.cache/weather/weather-icon @@ -0,0 +1 @@ + diff --git a/eww_desktop/scripts/home/dashie/.cache/weather/weather-quote b/eww_desktop/scripts/home/dashie/.cache/weather/weather-quote new file mode 100644 index 0000000..1033f21 --- /dev/null +++ b/eww_desktop/scripts/home/dashie/.cache/weather/weather-quote @@ -0,0 +1 @@ +It's cloudy, sort of gloomy \nYou'd better get a book to read... diff --git a/eww_desktop/scripts/home/dashie/.cache/weather/weather-stat b/eww_desktop/scripts/home/dashie/.cache/weather/weather-stat new file mode 100644 index 0000000..c3806e2 --- /dev/null +++ b/eww_desktop/scripts/home/dashie/.cache/weather/weather-stat @@ -0,0 +1 @@ +Overcast Clouds diff --git a/eww_desktop/scripts/mem-ad b/eww_desktop/scripts/mem-ad new file mode 100755 index 0000000..0495e00 --- /dev/null +++ b/eww_desktop/scripts/mem-ad @@ -0,0 +1,15 @@ +#!/bin/bash + + +total="$(free -m | grep Mem: | awk '{ print $2 }')" +used="$(free -m | grep Mem: | awk '{ print $3 }')" + +free=$(expr $total - $used) + +if [ "$1" = "total" ]; then + echo $total +elif [ "$1" = "used" ]; then + echo $used +elif [ "$1" = "free" ]; then + echo $free +fi diff --git a/eww_desktop/scripts/memory b/eww_desktop/scripts/memory new file mode 100755 index 0000000..da37c1d --- /dev/null +++ b/eww_desktop/scripts/memory @@ -0,0 +1,3 @@ +#!/bin/bash + +printf "%.0f\n" $(free -m | grep Mem | awk '{print ($3/$2)*100}') diff --git a/eww_desktop/scripts/music_control b/eww_desktop/scripts/music_control new file mode 100755 index 0000000..70a1483 --- /dev/null +++ b/eww_desktop/scripts/music_control @@ -0,0 +1,2 @@ +#!/bin/bash +echo $(playerctl metadata -p ncspot,%any --format "{{ artist }}\n{{ album }}\n{{ title }}") diff --git a/eww_desktop/scripts/music_control2 b/eww_desktop/scripts/music_control2 new file mode 100755 index 0000000..42dca7f --- /dev/null +++ b/eww_desktop/scripts/music_control2 @@ -0,0 +1,3 @@ +#!/bin/bash +echo $(playerctl -p ncspot,%any metadata mpris:artUrl) + diff --git a/eww_desktop/scripts/music_info b/eww_desktop/scripts/music_info new file mode 100755 index 0000000..ffafe87 --- /dev/null +++ b/eww_desktop/scripts/music_info @@ -0,0 +1,98 @@ +#!/bin/bash +# scripts by adi1090x + +## Get data +STATUS="$(mpc status)" +COVER="/tmp/.music_cover.png" +MUSIC_DIR="$HOME/Music" + +## Get status +get_status() { + if [[ $STATUS == *"[playing]"* ]]; then + echo "" + else + echo "奈" + fi +} + +## Get song +get_song() { + song=`mpc -f %title% current` + if [[ -z "$song" ]]; then + echo "Offline" + else + echo "$song" + fi +} + +## Get artist +get_artist() { + artist=`mpc -f %artist% current` + if [[ -z "$artist" ]]; then + echo "" + else + echo "$artist" + fi +} + +## Get time +get_time() { + time=`mpc status | grep "%)" | awk '{print $4}' | tr -d '(%)'` + if [[ -z "$time" ]]; then + echo "0" + else + echo "$time" + fi +} +get_ctime() { + ctime=`mpc status | grep "#" | awk '{print $3}' | sed 's|/.*||g'` + if [[ -z "$ctime" ]]; then + echo "0:00" + else + echo "$ctime" + fi +} +get_ttime() { + ttime=`mpc -f %time% current` + if [[ -z "$ttime" ]]; then + echo "0:00" + else + echo "$ttime" + fi +} + +## Get cover +get_cover() { + ffmpeg -i "${MUSIC_DIR}/$(mpc current -f %file%)" "${COVER}" -y &> /dev/null + STATUS=$? + + # Check if the file has a embbeded album art + if [ "$STATUS" -eq 0 ];then + echo "$COVER" + else + echo "images/music.png" + fi +} + +## Execute accordingly +if [[ "$1" == "--song" ]]; then + get_song +elif [[ "$1" == "--artist" ]]; then + get_artist +elif [[ "$1" == "--status" ]]; then + get_status +elif [[ "$1" == "--time" ]]; then + get_time +elif [[ "$1" == "--ctime" ]]; then + get_ctime +elif [[ "$1" == "--ttime" ]]; then + get_ttime +elif [[ "$1" == "--cover" ]]; then + get_cover +elif [[ "$1" == "--toggle" ]]; then + mpc -q toggle +elif [[ "$1" == "--next" ]]; then + { mpc -q next; get_cover; } +elif [[ "$1" == "--prev" ]]; then + { mpc -q prev; get_cover; } +fi diff --git a/eww_desktop/scripts/ncspot_control.sh b/eww_desktop/scripts/ncspot_control.sh new file mode 100755 index 0000000..cca2764 --- /dev/null +++ b/eww_desktop/scripts/ncspot_control.sh @@ -0,0 +1,7 @@ +#! /bin/bash + +NUM=$(pactl list clients short | rg "spotify_player" | awk -F 'PipeWire' ' { print $1 } ' | tr -d ' \t\n') +CHANGE=$(pactl list sink-inputs short | rg "$NUM" | awk -F ' ' ' { print $1 }' | tr -d ' \t\n') +pactl set-sink-input-volume "$CHANGE" "$1" +VOLUME=$(pactl list sink-inputs | rg "$NUM" -A7 | rg "Volume:" | awk -F ' ' ' { print $5 }' | tr -d '%') +dunstify -a "changeVolume" -r 2 -u low -i audio-volume-high -h int:value:"$VOLUME" "Spotify Volume: ${VOLUME}%" diff --git a/eww_desktop/scripts/pop b/eww_desktop/scripts/pop new file mode 100755 index 0000000..0a39794 --- /dev/null +++ b/eww_desktop/scripts/pop @@ -0,0 +1,134 @@ +#!/bin/bash + + +calendar() { +LOCK_FILE="$HOME/.cache/eww-calendar.lock" +EWW_BIN="$HOME/.local/bin/eww" + +run() { + ${EWW_BIN} -c $HOME/.config/eww open calendar +} + +# Open widgets +if [[ ! -f "$LOCK_FILE" ]]; then + ${EWW_BIN} -c $HOME/.config/eww close system music_win audio_ctl brightness + touch "$LOCK_FILE" + run && echo "ok good!" +else + ${EWW_BIN} -c $HOME/.config/eww close calendar + rm "$LOCK_FILE" && echo "closed" +fi +} + + +system() { +LOCK_FILE_MEM="$HOME/.cache/eww-system.lock" +EWW_BIN="$HOME/.local/bin/eww" + +run() { + ${EWW_BIN} -c $HOME/.config/eww open system +} + +# Open system +if [[ ! -f "$LOCK_FILE_MEM" ]]; then + ${EWW_BIN} -c $HOME/.config/eww close calendar music_win audio_ctl brightness + touch "$LOCK_FILE_MEM" + run && echo "ok good!" +else + ${EWW_BIN} -c $HOME/.config/eww close system + rm "$LOCK_FILE_MEM" && echo "closed" +fi +} + + +music() { +LOCK_FILE_SONG="$HOME/.cache/eww-song.lock" +EWW_BIN="$HOME/.local/bin/eww" + +run() { + ${EWW_BIN} -c $HOME/.config/eww open music_win +} + +# Open widgets +if [[ ! -f "$LOCK_FILE_SONG" ]]; then + ${EWW_BIN} -c $HOME/.config/eww close system calendar brightness + touch "$LOCK_FILE_SONG" + run && echo "ok good!" +else + ${EWW_BIN} -c $HOME/.config/eww close music_win + rm "$LOCK_FILE_SONG" && echo "closed" +fi +} + + + +audio() { +LOCK_FILE_AUDIO="$HOME/.cache/eww-audio.lock" +EWW_BIN="$HOME/.local/bin/eww" + +run() { + ${EWW_BIN} -c $HOME/.config/eww open audio_ctl +} + +# Open widgets +if [[ ! -f "$LOCK_FILE_AUDIO" ]]; then + ${EWW_BIN} -c $HOME/.config/eww close system calendar music brightness + touch "$LOCK_FILE_AUDIO" + run && echo "ok good!" +else + ${EWW_BIN} -c $HOME/.config/eww close audio_ctl + rm "$LOCK_FILE_AUDIO" && echo "closed" +fi +} + +brightness() { +LOCK_FILE_AUDIO="$HOME/.cache/eww-brightness.lock" +EWW_BIN="$HOME/.local/bin/eww" + +run() { + ${EWW_BIN} -c $HOME/.config/eww open brightness_window +} + +# Open widgets +if [[ ! -f "$LOCK_FILE_AUDIO" ]]; then + ${EWW_BIN} -c $HOME/.config/eww close system calendar music audio_ctl + touch "$LOCK_FILE_AUDIO" + run && echo "ok good!" +else + ${EWW_BIN} -c $HOME/.config/eww close brightness_window + rm "$LOCK_FILE_AUDIO" && echo "closed" +fi +} + +hoverGet() { +NAME="$1" +EWW_BIN="$HOME/.local/bin/eww" +if [[ -f "$STORE" ]]; then + rm "$STORE" + ${EWW_BIN} -c $HOME/.config/eww close "$NAME" +fi +} + +hoverCreate() { +if [[ ! -f "$STORE" ]]; then + touch "$STORE" +else + echo "failure!" +fi +} +STORE=true +if [ "$1" = "calendar" ]; then + calendar +elif [ "$1" = "system" ]; then + system +#elif [ "$1" = "music" ]; then +#music +elif [ "$1" = "audio" ]; then + audio +elif [ "$1" = "brightness" ]; then + brightness +elif [ "$1" = "hoverGet" ]; then + hoverGet "$2" +elif [ "$1" = "hoverCreate" ]; then + hoverCreate +fi diff --git a/eww_desktop/scripts/weather b/eww_desktop/scripts/weather new file mode 100755 index 0000000..a835246 --- /dev/null +++ b/eww_desktop/scripts/weather @@ -0,0 +1,125 @@ +#!/bin/bash + +tmp_weather="$HOME/.cache/weather" +tmp_weather_stat=$tmp_weather/weather-stat +tmp_weather_degree=$tmp_weather/weather-degree +tmp_weather_quote=$tmp_weather/weather-quote +tmp_weather_hex=$tmp_weather/weather-hex +tmp_weather_icon=$tmp_weather/weather-icon + +if [ ! -d $tmp_weather ]; then + mkdir -p $tmp_weather +fi +#notify-send -u critical "weather ping" "pangping" +# Put in your api and stuff link here +# If you dunno, head to openweathermap.org, and make and account +#(completely free I swear, and then get your API Key and your City ID) +# I wish I was smart enough to do it like Elena, but this is the top I could do lol +KEY=$(cat $HOME/.ssh/weather-key) +ID=$(cat $HOME/.ssh/location) +UNIT="{metric}" #Options are 'metric' and 'imperial' +weather=$(curl -sf "http://api.openweathermap.org/data/2.5/weather?APPID="$KEY"&q="$ID"&units="$UNIT"") +#echo $weather +if [ ! -z "$weather" ]; then + weather_temp=$(echo "$weather" | jq ".main.temp" | cut -d "." -f 1) + weather_icon_code=$(echo "$weather" | jq -r ".weather[].icon" | head -1) + weather_description=$(echo "$weather" | jq -r ".weather[].description" | head -1 | sed -e "s/\b\(.\)/\u\1/g") + + #Big long if statement of doom + if [ "$weather_icon_code" == "50d" ]; then + weather_icon=" " + weather_quote="Forecast says it's misty \nMake sure you don't get lost on your way..." + weather_hex="#84afdb" #a7b8b2 + elif [ "$weather_icon_code" == "50n" ]; then + weather_icon=" " + weather_quote="Forecast says it's a misty night \nDon't go anywhere tonight or you might get lost..." + weather_hex="#84afdb" + elif [ "$weather_icon_code" == "01d" ]; then + weather_icon=" " + weather_quote="It's a sunny day, gonna be fun! \nDon't go wandering all by yourself though..." + weather_hex="#ffd86b" + elif [ "$weather_icon_code" == "01n" ]; then + weather_icon=" " + weather_quote="It's a clear night \nYou might want to take a evening stroll to relax..." + weather_hex="#fcdcf6" + elif [ "$weather_icon_code" == "02d" ]; then + weather_icon=" " + weather_quote="It's cloudy, sort of gloomy \nYou'd better get a book to read..." + weather_hex="#adadff" + elif [ "$weather_icon_code" == "02n" ]; then + weather_icon=" " + weather_quote="It's a cloudy night \nHow about some hot chocolate and a warm bed?" + weather_hex="#adadff" + elif [ "$weather_icon_code" == "03d" ]; then + weather_icon=" " + weather_quote="It's cloudy, sort of gloomy \nYou'd better get a book to read..." + weather_hex="#adadff" + elif [ "$weather_icon_code" == "03n" ]; then + weather_icon=" " + weather_quote="It's a cloudy night \nHow about some hot chocolate and a warm bed?" + weather_hex="#adadff" + elif [ "$weather_icon_code" == "04d" ]; then + weather_icon=" " + weather_quote="It's cloudy, sort of gloomy \nYou'd better get a book to read..." + weather_hex="#adadff" + elif [ "$weather_icon_code" == "04n" ]; then + weather_icon=" " + weather_quote="It's a cloudy night \nHow about some hot chocolate and a warm bed?" + weather_hex="#adadff" + elif [ "$weather_icon_code" == "09d" ]; then + weather_icon=" " + weather_quote="It's rainy, it's a great day! \nGet some ramen and watch as the rain falls..." + weather_hex="#6b95ff" + elif [ "$weather_icon_code" == "09n" ]; then + weather_icon=" " + weather_quote=" It's gonna rain tonight it seems \nMake sure your clothes aren't still outside..." + weather_hex="#6b95ff" + elif [ "$weather_icon_code" == "10d" ]; then + weather_icon=" " + weather_quote="It's rainy, it's a great day! \nGet some ramen and watch as the rain falls..." + weather_hex="#6b95ff" + elif [ "$weather_icon_code" == "10n" ]; then + weather_icon=" " + weather_quote=" It's gonna rain tonight it seems \nMake sure your clothes aren't still outside..." + weather_hex="#6b95ff" + elif [ "$weather_icon_code" == "11d" ]; then + weather_icon="" + weather_quote="There's storm for forecast today \nMake sure you don't get blown away..." + weather_hex="#ffeb57" + elif [ "$weather_icon_code" == "11n" ]; then + weather_icon="" + weather_quote="There's gonna be storms tonight \nMake sure you're warm in bed and the windows are shut..." + weather_hex="#ffeb57" + elif [ "$weather_icon_code" == "13d" ]; then + weather_icon=" " + weather_quote="It's gonna snow today \nYou'd better wear thick clothes and make a snowman as well!" + weather_hex="#e3e6fc" + elif [ "$weather_icon_code" == "13n" ]; then + weather_icon=" " + weather_quote="It's gonna snow tonight \nMake sure you get up early tomorrow to see the sights..." + weather_hex="#e3e6fc" + elif [ "$weather_icon_code" == "40d" ]; then + weather_icon=" " + weather_quote="Forecast says it's misty \nMake sure you don't get lost on your way..." + weather_hex="#84afdb" + elif [ "$weather_icon_code" == "40n" ]; then + weather_icon=" " + weather_quote="Forecast says it's a misty night \nDon't go anywhere tonight or you might get lost..." + weather_hex="#84afdb" + else + weather_icon=" " + weather_quote="Sort of odd, I don't know what to forecast \nMake sure you have a good time!" + weather_hex="#adadff" + fi + echo "$weather_icon" > $tmp_weather_icon + echo "$weather_description" > $tmp_weather_stat + echo "$weather_temp""°C" > $tmp_weather_degree + echo "$weather_quote" > $tmp_weather_quote + echo "$weather_hex" > $tmp_weather_hex + else + echo "Weather Unavailable" > $tmp_weather_stat + echo " " > $tmp_weather_icon + echo "Ah well, no weather huh? \nEven if there's no weather, it's gonna be a great day!" > $tmp_weather_quote + echo "-" > $tmp_weather_degree + echo "#adadff" > $tmp_weather_hex +fi diff --git a/eww_desktop/scripts/weather-trimmer b/eww_desktop/scripts/weather-trimmer new file mode 100755 index 0000000..8ddeaa1 --- /dev/null +++ b/eww_desktop/scripts/weather-trimmer @@ -0,0 +1,9 @@ +#!/bin/bash +weather=$(cat $HOME/.cache/weather/weather-stat) +weather_count=$(cat $HOME/.cache/weather/weather-stat | wc -c) + +if [ "$weather_count" -lt 10 ]; then + echo $weather; +else + echo $(cat $HOME/.cache/weather/weather-stat | cut -c1-6)... +fi diff --git a/eww_desktop/scripts/wifi b/eww_desktop/scripts/wifi new file mode 100755 index 0000000..9de7f23 --- /dev/null +++ b/eww_desktop/scripts/wifi @@ -0,0 +1,26 @@ +#!/bin/bash + +status=$(nmcli g | grep -oE "disconnected") +essid=$(nmcli c | grep wlp2s0 | awk '{print ($1)}') + +if [ $status ] ; then + icon="" + text="" + col="#575268" + +else + icon="" + text="${essid}" + col="#a1bdce" +fi + + + +if [[ "$1" == "--COL" ]]; then + echo $col +elif [[ "$1" == "--ESSID" ]]; then + echo $text +elif [[ "$1" == "--ICON" ]]; then + echo $icon +fi + diff --git a/eww_desktop/scripts/workspace b/eww_desktop/scripts/workspace new file mode 100755 index 0000000..a42ec58 --- /dev/null +++ b/eww_desktop/scripts/workspace @@ -0,0 +1,120 @@ +#!/bin/bash +workspaces() { + +ws1="ID 1 " +ws2="ID 2 " +ws3="ID 3 " +ws4="ID 4 " +ws5="ID 5 " +ws6="ID 6 " +ws7="ID 7 " +ws8="ID 8 " +ws9="ID 9 " +ws0="ID 10" + +# check if Occupied +o1=$(hyprctl workspaces | grep "$ws1" ) +o2=$(hyprctl workspaces | grep "$ws2" ) +o3=$(hyprctl workspaces | grep "$ws3" ) +o4=$(hyprctl workspaces | grep "$ws4" ) +o5=$(hyprctl workspaces | grep "$ws5" ) +o6=$(hyprctl workspaces | grep "$ws6" ) +o7=$(hyprctl workspaces | grep "$ws7" ) +o8=$(hyprctl workspaces | grep "$ws8" ) +o9=$(hyprctl workspaces | grep "$ws9" ) +o0=$(hyprctl workspaces | grep "$ws0" ) + +# check if Focused +f1=$(hyprctl monitors | grep "workspace: 1 " -A 4 | grep "focused: yes" ) +f2=$(hyprctl monitors | grep "workspace: 2 " -A 4 | grep "focused: yes" ) +f3=$(hyprctl monitors | grep "workspace: 3 " -A 4 | grep "focused: yes" ) +f4=$(hyprctl monitors | grep "workspace: 4 " -A 4 | grep "focused: yes" ) +f5=$(hyprctl monitors | grep "workspace: 5 " -A 4 | grep "focused: yes" ) +f6=$(hyprctl monitors | grep "workspace: 6 " -A 4 | grep "focused: yes" ) +f7=$(hyprctl monitors | grep "workspace: 7 " -A 4 | grep "focused: yes" ) +f8=$(hyprctl monitors | grep "workspace: 8 " -A 4 | grep "focused: yes" ) +f9=$(hyprctl monitors | grep "workspace: 9 " -A 4 | grep "focused: yes" ) +f0=$(hyprctl monitors | grep "workspace: 10" -A 4 | grep "focused: yes" ) + +if [ "$o1" != "" ]; then + ic_1="①" + else + ic_1="" +fi +if [ "$o2" != "" ]; then + ic_2="②" + else + ic_2="" +fi +if [ "$o3" != "" ]; then + ic_3="③" + else + ic_3="" +fi +if [ "$o4" != "" ]; then + ic_4="④" + else + ic_4="" +fi +if [ "$o5" != "" ]; then + ic_5="⑤" + else + ic_5="" +fi +if [ "$o6" != "" ]; then + ic_6="⑥" + else + ic_6="" +fi +if [ "$o7" != "" ]; then + ic_7="⑦" + else + ic_7="" +fi +if [ "$o8" != "" ]; then + ic_8="⑧" + else + ic_8="" +fi +if [ "$o9" != "" ]; then + ic_9="⑨" + else + ic_9="" +fi +if [ "$o0" != "" ]; then + ic_0="⑩" + else + ic_0="" +fi + +if [ "$f1" != "" ]; then + ic_1="➊" +elif [ "$f2" != "" ]; then + ic_2="➋" +elif [ "$f3" != "" ]; then + ic_3="➌" +elif [ "$f4" != "" ]; then + ic_4="➍" +elif [ "$f5" != "" ]; then + ic_5="➎" +elif [ "$f6" != "" ]; then + ic_6="➏" +elif [ "$f7" != "" ]; then + ic_7="➐" +elif [ "$f8" != "" ]; then + ic_8="➑" +elif [ "$f9" != "" ]; then + ic_9="➒" +elif [ "$f0" != "" ]; then + ic_0="➓" +fi + + +#ic_1=$(hyprctl workspaces) +#ic_2="t" +echo "(box :class \"works\" :orientation \"h\" :spacing 5 :space-evenly \"false\" (button :onclick \"hyprctl dispatch workspace 1\" :class \"$un$o1$f1\" \"$ic_1\") (button :onclick \"hyprctl dispatch workspace 2\" :class \"$un$o2$f2\" \"$ic_2\") (button :onclick \"hyprctl dispatch workspace 3\" :class \"$un$o3$f3\" \"$ic_3\") (button :onclick \"hyprctl dispatch workspace 4\" :class \"$un$o4$f4\" \"$ic_4\") (button :onclick \"hyprctl dispatch workspace 5\" :class \"$un$o5$f5\" \"$ic_5\") (button :onclick \"hyprctl dispatch workspace 6\" :class \"$un$o6$f6\" \"$ic_6\") (button :onclick \"hyprctl dispatch workspace 7\" :class \"$un$o7$f7\" \"$ic_7\") (button :onclick \"hyprctl dispatch workspace 8\" :class \"$un$o8$f8\" \"$ic_8\") (button :onclick \"hyprctl dispatch workspace 9\" :class \"$un$o9$f9\" \"$ic_9\") (button :onclick \"hyprctl dispatch workspace 10\" :class \"$un$o0$f0\" \"$ic_0\"))" +} +workspaces +tail -f /tmp/hypr/$HYPRLAND_INSTANCE_SIGNATURE/hyprland.log | grep -E --line-buffered "Changed to workspace|focus to surface" | while read -r; do +workspaces +done diff --git a/eww_laptop/bar/eww.scss b/eww_laptop/bar/eww.scss new file mode 100644 index 0000000..1036c3a --- /dev/null +++ b/eww_laptop/bar/eww.scss @@ -0,0 +1,447 @@ +/** EWW.SCSS +Created by saimoom **/ +*{ + all: unset; + font-family: feather; + font-family: DaddyTimeMono Nerd Font; +} + +/** General **/ +.bar_class { + background-color: #0f0f17; + border-radius: 16px; +} +.module { + margin: 0px 0px 0px 0px; + border-radius: 10px 16px 0px 10px; +} + +/** tooltip!! **/ +tooltip.background { + background-color: #0f0f17; + font-size: 18; + border-radius: 10px; + color: #bfc9db; +} + +tooltip label { + margin: 6px; +} + + +/** Widgets **/ + +.clock_time_sep { + font-size: 16; + color: #bfc9db; + margin: 0px 4px 1px 4px; +} +.clock_time_class, .clock_minute_class { + font-size: 23; +} +.clock_date_class { + font-size: 18; + margin: 0px 20px 0px -1px; + color: #d7beda; +} +.clock_minute_class { + margin: 0px 20px 0px 3px; + color: #bfc9db; +} + +.clock_time_class { + color: #bfc9db; + font-weight: bold; + margin: 0px 5px 0px 0px; +} + + +.membar { + color: #e0b089; + background-color: #38384d; + border-radius: 10px; +} +.batbar { + color: #afbea2; + background-color: #38384d; + border-radius: 10px; +} +.brightbar trough highlight { + background-image: linear-gradient(to right, #e4c9af 30%, #f2cdcd 50%, #e0b089 100% *50); + border-radius: 10px; +} +.volbar trough highlight { + background-image: linear-gradient(to right, #afcee0 30%, #a1bdce 50%, #77a5bf 100% *50); + border-radius: 10px; +} +.volume_icon { + font-size: 22; + color: #a1bdce; + margin: 0px 10px 0px 10px; +} + + +.module_essid { + font-size: 18; + color: #a1bdce; + margin: 0px 10px 0px 0px; +} +.module-wif { + font-size: 22; + color: #a1bdce; + border-radius: 100%; + margin: 0px 10px 0px 5px; +} + +.iconmem { + color: #e0b089; +} +.iconbat { + color: #afbea2; +} +.iconbat, .iconmem { + font-size: 15; + margin: 10px; +} +.bright_icon { + font-size: 22; + color: #e4c9af; + margin: 0px 10px 0px 10px; +} + + +.separ { + color: #3e424f; + font-weight: bold; + font-size: 22px; + margin: 0px 8px 0px 8px; + } + +.mem_module { + background-color: #0f0f17; + border-radius: 16px; + margin: 0px 10px 0px 3px; + } +.bat_module { + background-color: #0f0f17; + border-radius: 16px; + margin: 0px 10px 0px 10px; + } + + +scale trough { + all: unset; + background-color: #22242b; + box-shadow: 0 2px 3px 2px #06060b; + border-radius: 16px; + min-height: 10px; + min-width: 70px; + margin: 0px 10px 0px 0px; +} + +.works { +font-size: 27px; +font-weight: normal; +margin: 5px 0px 0px 20px; +background-color: #0f0f17; +} + +.0 , .01, .02, .03, .04, .05, .06, +.011, .022, .033, .044, .055, .066{ + margin: 0px 10px 0px 0px; +} + +/* Unoccupied */ +.0 { +color: #3e424f; +} + +/* Occupied */ +.01, .02, .03, .04, .05, .06 { + color: #bfc9db; +} + +/* Focused */ +.011, .022, .033, .044, .055, .066 { + color: #a1bdce; +} + + +.song_cover_art { + background-size: cover; + background-position: center; + min-height: 24px; + min-width: 24px; + margin: 10px; + border-radius: 100px; +} + +.song { + color: #a1bdce; + font-size : 18px; + font-weight : bold; + margin : 3px 5px 0px 0px; +} + +.song_btn_play { + color: #a1bdce; + font-size : 28px; + margin : 3px 0px 0px 5px; + +} + + +.song_btn_prev, .song_btn_next { + color: #bfc9db; + font-size : 24px; + margin : 3px 0px 0px 5px; + +} +// Calendar +.cal { + background-color: #0f0f17; + font-family: JetBrainsMono Nerd Font; + font-size: 18px; + font-weight: normal; + +.cal-in { + padding: 0px 10px 0px 10px; + color: #bfc9db; + +.cal { + &.highlight { + padding: 20px; + } + + padding: 5px 5px 5px 5px; + margin-left: 10px; + } + } +} + +calender { + color: #bfc9db; +} +calendar:selected { + color: #a1bdce; +} + +calendar.header { +color: #a1bdce; +font-weight: bold; +} + +calendar.button { +color: #afbea2; +} + +calendar.highlight { +color: #a1bdce; +font-weight: bold; +} + +calendar:indeterminate { +color: #bfc9db; +} + + + + + + + +.sys_sep { + color: #38384d; + font-size: 18; + margin: 0px 10px 0px 10px; +} +.sys_text_bat_sub, .sys_text_mem_sub { + font-size: 16; + color: #bbc5d7; + margin: 5px 0px 0px 25px; +} +.sys_text_bat, .sys_text_mem { + font-size: 21; + font-weight: bold; + margin: 14px 0px 0px 25px; +} +.sys_icon_bat, .sys_icon_mem { + font-size: 30; + margin: 30px; +} +.sys_win { + background-color: #0f0f17; +} +.sys_bat { + color: #afbea2; + background-color: #38384d; + border-radius: 10px; +} +.sys_mem { + color: #e4c9af; + background-color: #38384d; + border-radius: 10px; +} +.sys_icon_bat, .sys_text_bat { + color: #afbea2; +} +.sys_icon_mem, .sys_text_mem { + color: #e4c9af; +} +.sys_bat_box { + border-radius: 16px; + margin: 15px 10px 10px 20px; + } +.sys_mem_box { + border-radius: 16px; + margin: 10px 10px 15px 20px; + } + + + + + + + +.music_pop { + background-color: #0f0f17; + border-radius: 16px; +} + .music_cover_art { + background-size: cover; + background-position: center; + min-height: 100px; + box-shadow: 5px 5px 5px 5px #06060b; + min-width: 170px; + margin: 20px; + border-radius: 20px; +} + +.music { + color: #a1bdce; + font-size : 20px; + font-weight : bold; + margin : 20px 0px 0px -15px; +} + +.music_artist { + color: #bbc5d7; + font-size : 16px; + font-weight : normal; + margin : 0px 0px 0px 0px; +} + +.music_btn_prev, .music_btn_play, .music_btn_next { + font-family: Iosevka Nerd Font; +} +.music_btn_prev { + color: #bbc5d7; + font-size : 32px; + font-weight : normal; + margin: 0px 0px 0px 0px; +} +.music_btn_play { + color: #a1bdce; + font-size : 48px; + font-weight : normal; + margin: 0px 0px 0px 0px; +} +.music_btn_next { + color: #bbc5d7; + font-size : 32px; + font-weight : normal; + margin: 0px 0px 0px 0px; +} + +.music_bar scale trough highlight { + all: unset; + background-image: linear-gradient(to right, #afcee0 30%, #a1bdce 50%, #77a5bf 100% *50); + border-radius: 24px; +} +.music_bar scale trough { + all: unset; + background-color: #232232; + box-shadow: 0 6px 5px 2px #06060b; + border-radius: 24px; + min-height: 13px; + min-width: 190px; + margin : -10px 10px 20px 0px; +} + +.audio-box { + background-color: #0f0f17; + border-radius: 16px; +} +.speaker_icon { + background-size: cover; + background-image: url('images/speaker.png'); + background-position: center; + min-height: 70px; + min-width: 75px; + margin: 10px 20px 5px 20px; + border-radius: 12px; +} + +.speaker_text { + color: #a1bdce; + font-size : 26px; + font-weight : bold; + margin: 20px 0px 0px 0px; +} + +.speaker_bar scale trough highlight { + all: unset; + background-image: linear-gradient(to right, #afcee0 30%, #a1bdce 50%, #77a5bf 100% *50); + border-radius: 24px; +} +.speaker_bar scale trough { + all: unset; + background-color: #232232; + box-shadow: 0 6px 5px 2px #06060b; + border-radius: 24px; + min-height: 13px; + min-width: 120px; + margin : 0px 0px 5px 0px; +} + + + + +.mic_icon { + background-size: cover; + background-image: url('images/mic.png'); + background-position: center; + min-height: 70px; + min-width: 75px; + margin: 5px 20px 20px 20px; + border-radius: 12px; +} + +.mic_text { + color: #a1bdce; + font-size : 26px; + font-weight : bold; + margin: 0px 0px 0px 0px; +} + +.mic_bar scale trough highlight { + all: unset; + background-image: linear-gradient(to right, #afcee0 30%, #a1bdce 50%, #77a5bf 100% *50); + border-radius: 24px; +} +.mic_bar scale trough { + all: unset; + box-shadow: 0 6px 5px 2px #06060b; + background-color: #232232; + border-radius: 24px; + min-height: 13px; + min-width: 120px; + margin : 0px 0px 20px 0px; +} + +.audio_sep { + color: #38384d; + font-size: 18; + margin : 0px 0px 0px 0px; +} + diff --git a/eww_laptop/bar/eww.yuck b/eww_laptop/bar/eww.yuck new file mode 100644 index 0000000..c0663b5 --- /dev/null +++ b/eww_laptop/bar/eww.yuck @@ -0,0 +1,352 @@ +;; Variables +(defpoll clock_time :interval "5m" "date +\%I") +(defpoll clock_minute :interval "5s" "date +\%M") +(defpoll clock_date :interval "10h" "date '+%d/%m'") +(defpoll volume_percent :interval "3s" "amixer -D pulse sget Master | grep 'Left:' | awk -F'[][]' '{ print $2 }' | tr -d '%'") +(defpoll mic_percent :interval "3s" "amixer -D pulse sget Capture | grep 'Left:' | awk -F'[][]' '{ print $2 }' | tr -d '%'") +(defpoll brightness_percent :interval "5s" "brightnessctl -m -d intel_backlight | awk -F, '{print substr($4, 0, length($4)-1)}' | tr -d '%'") +(defpoll battery :interval "15s" "./scripts/battery --bat") +(defpoll battery_status :interval "1m" "./scripts/battery --bat-st") +(defpoll memory :interval "15s" "scripts/memory") +(defpoll memory_used_mb :interval "2m" "scripts/mem-ad used") +(defpoll memory_total_mb :interval "2m" "scripts/mem-ad total") +(defpoll memory_free_mb :interval "2m" "scripts/mem-ad free") +(defvar vol_reveal false) +(defvar br_reveal false) +(defvar music_reveal false) +(defvar wifi_rev false) +(defvar time_rev false) +(deflisten workspace "scripts/workspace") + +(defvar eww "$HOME/.local/bin/eww/eww -c $HOME/.config/eww/bar") + + +(defpoll COL_WLAN :interval "1m" "~/.config/eww/bar/scripts/wifi --COL") +(defpoll ESSID_WLAN :interval "1m" "~/.config/eww/bar/scripts/wifi --ESSID") +(defpoll WLAN_ICON :interval "1m" "~/.config/eww/bar/scripts/wifi --ICON") + + +(defpoll song :interval "2s" "~/.config/eww/bar/scripts/music_info --song") +(defpoll song_artist :interval "2s" "~/.config/eww/bar/scripts/music_info --artist") +(defpoll current_status :interval "1s" "~/.config/eww/bar/scripts/music_info --time") +(defpoll song_status :interval "2s" "~/.config/eww/bar/scripts/music_info --status") +(defpoll cover_art :interval "2s" "~/.config/eww/bar/scripts/music_info --cover") + +(defpoll calendar_day :interval "20h" "date '+%d'") +(defpoll calendar_year :interval "20h" "date '+%Y'") + +;; widgets + +(defwidget wifi [] + (eventbox :onhover "${eww} update wifi_rev=true" + :onhoverlost "${eww} update wifi_rev=false" + (box :vexpand "false" :hexpand "false" :space-evenly "false" + (button :class "module-wif" :onclick "networkmanager_dmenu" :wrap "false" :limit-width 12 :style "color: ${COL_WLAN};" WLAN_ICON) + (revealer :transition "slideright" + :reveal wifi_rev + :duration "350ms" + (label :class "module_essid" + :text ESSID_WLAN + :orientation "h" + ))))) + + +(defwidget workspaces [] + (literal :content workspace)) + + +(defwidget bat [] + (box :class "bat_module" :vexpand "false" :hexpand "false" + (circular-progress :value battery + :class "batbar" + :thickness 4 + (button + :class "iconbat" + :limit-width 2 + :tooltip "battery on ${battery}%" + :show_truncated false + :onclick "$HOME/.config/eww/bar/scripts/pop system" + :wrap false + "")))) + + +(defwidget mem [] + (box :class "mem_module" :vexpand "false" :hexpand "false" + (circular-progress :value memory + :class "membar" + :thickness 4 + (button + :class "iconmem" + :limit-width 2 + :tooltip "using ${memory}% ram" + :onclick "$HOME/.config/eww/bar/scripts/pop system" + :show_truncated false + :wrap false + "")))) + + + +(defwidget sep [] + (box :class "module-2" :vexpand "false" :hexpand "false" + (label :class "separ" :text "|"))) + +(defwidget clock_module [] + (eventbox :onhover "${eww} update time_rev=true" + :onhoverlost "${eww} update time_rev=false" + (box :class "module" :space-evenly "false" :orientation "h" :spacing "3" + (label :text clock_time :class "clock_time_class" ) + (label :text "" :class "clock_time_sep" ) + (label :text clock_minute :class "clock_minute_class") + (revealer :transition "slideleft" + :reveal time_rev + :duration "350ms" + (button :class "clock_date_class" + :onclick "$HOME/.config/eww/bar/scripts/pop calendar" clock_date + ) + )))) + +(defwidget volume [] + (eventbox :onhover "${eww} update vol_reveal=true" + :onhoverlost "${eww} update vol_reveal=false" + (box :class "module-2" :space-evenly "false" :orientation "h" :spacing "3" + (button :onclick "scripts/pop audio" :class "volume_icon" "") + (revealer :transition "slideleft" + :reveal vol_reveal + :duration "350ms" + (scale :class "volbar" + :value volume_percent + :orientation "h" + :tooltip "${volume_percent}%" + :max 100 + :min 0 + :onchange "amixer -D pulse sset Master {}%" ))))) + +(defwidget bright [] + (eventbox :onhover "${eww} update br_reveal=true" :onhoverlost "${eww} update br_reveal=false" + (box :class "module-2" :space-evenly "false" :orientation "h" :spacing "3" + (label :text "" :class "bright_icon" :tooltip "brightness") + (revealer :transition "slideleft" + :reveal br_reveal + :duration "350ms" + (scale :class "brightbar" + :value brightness_percent + :orientation "h" + :tooltip "${brightness_percent}%" + :max 100 + :min 0 + :onchange "brightnessctl set {}%" ))))) + + + + ;; Music +(defwidget music [] + (eventbox :onhover "${eww} update music_reveal=true" + :onhoverlost "${eww} update music_reveal=false" + (box :class "module-2" :orientation "h" :space-evenly "false" :vexpand "false" :hexpand "false" + (box :class "song_cover_art" :vexpand "false" :hexpand "false" :style "background-image: url('${cover_art}');") + (button :class "song" :wrap "true" :onclick "~/.config/eww/bar/scripts/pop music" song) + (revealer :transition "slideright" + :reveal music_reveal + :duration "350ms" + (box :vexpand "false" :hexpand "false" :oreintation "h" + (button :class "song_btn_prev" :onclick "~/.config/eww/bar/scripts/music_info --prev" "") + (button :class "song_btn_play" :onclick "~/.config/eww/bar/scripts/music_info --toggle" song_status) + (button :class "song_btn_next" :onclick "~/.config/eww/bar/scripts/music_info --next" "")))))) + + + +(defwidget left [] + (box :orientation "h" + :space-evenly false + :halign "end" + :class "left_modules" +(bright) +(volume) +(wifi) +(sep) +(bat) +(mem) +(sep) +(clock_module))) + + +(defwidget right [] + (box :orientation "h" + :space-evenly false + :halign "start" + :class "right_modules" +(workspaces))) + + +(defwidget center [] + (box :orientation "h" + :space-evenly false + :halign "center" + :class "center_modules" +(music))) + +(defwidget bar_1 [] + (box :class "bar_class" + :orientation "h" + (right) + (center) + (left) + )) + +(defwindow bar + :monitor 0 + :geometry (geometry :x "0%" + :y "9px" + :width "98%" + :height "30px" + :anchor "top center") + :stacking "fg" + :wm-ignore true + :windowtype "dock" + (bar_1)) + +(defwidget system [] + (box :class "sys_win" :orientation "v" :space-evenly "false" :hexpand "false" :vexpand "false" :spacing 0 + (box :class "sys_bat_box" :orientation "h" :space-evenly "false" + (circular-progress :value battery + :class "sys_bat" + :thickness 9 + (label :text "" + :class "sys_icon_bat" + :limit-width 2 + :show_truncated false + :wrap false)) + (box :orientation "v" :space-evenly "false" :spacing 0 :hexpand "false" :vexpand "false" + (label :text "battery" + :halign "start" + :class "sys_text_bat" + :limit-width 9 + :show_truncated false + :wrap false) + (label :text "${battery}%" + :halign "start" + :class "sys_text_bat_sub" + :limit-width 22 + :show_truncated false + :wrap false) + (label :text "${battery_status}" + :halign "start" + :class "sys_text_bat_sub" + :limit-width 22 + :show_truncated false + :wrap false))) + (label :text "" :class "sys_sep" :halign "center") + (box :class "sys_mem_box" :orientation "h" :space-evenly "false" :halign "start" + (circular-progress :value memory + :class "sys_mem" + :thickness 9 + (label :text "" + :class "sys_icon_mem" + :limit-width 2 + :show_truncated false + :wrap false + :angle 0.0)) + (box :orientation "v" :space-evenly "false" :spacing 0 :hexpand "false" :vexpand "false" + (label :text "memory" + :halign "start" + :class "sys_text_mem" + :limit-width 9 + :show_truncated false + :wrap false) + (label :text "${memory_used_mb} | ${memory_total_mb}mb " + :halign "start" + :class "sys_text_mem_sub" + :limit-width 22 + :show_truncated false + :wrap false) + (label :text "${memory_free_mb}mb free" + :halign "start" + :class "sys_text_mem_sub" + :limit-width 22 + :show_truncated false + :wrap false))))) + +(defwidget cal [] + (box :class "cal" :orientation "v" + (box :class "cal-in" + (calendar :class "cal" + :day calendar_day + :year calendar_year)))) + +(defwindow calendar + :geometry (geometry :x "-20px" + :y "7%" + :anchor "top right" + :width "270px" + :height "60px") +(cal)) + + + +(defwidget audio [] + (box :class "audio-box" :orientation "v" :space-evenly "false" :vexpand "false" :hexpand "false" + (box :halign "v" :space-evenly "false" :hexpand "false" :vexpand "false" + (box :class "speaker_icon" :orientation "v") + (box :orientation "v" :halign "center" :vexpand "false" :hexpand "false" + (label :class "speaker_text" :text "speaker" :valign "center" :halign "left" ) + (box :class "speaker_bar" :halign "center" :vexpand "false" :hexpand "false" + (scale :value volume_percent + :space-evenly "false" + :orientation "h" + :onchange "amixer -D pulse sset Master {}%" + :tooltip "volume on ${volume_percent}%" + :max 100 + :min 0)))) + (label :text "" :class "audio_sep" :halign "center") + (box :halign "v" :space-evenly "false" :hexpand "false" :vexpand "false" + (box :class "mic_icon" :orientation "v") + (box :orientation "v" :halign "center" :vexpand "false" :hexpand "false" + (label :class "mic_text" :text "mic" :valign "center" :halign "left" ) + (box :class "mic_bar" :halign "center" :vexpand "false" :hexpand "false" + (scale :value mic_percent + :space-evenly "false" + :orientation "h" + :tooltip "mic on ${mic_percent}%" + :onchange "amixer -D pulse sset Capture {}%" + :max 100 + :min 0)))))) + +(defwindow audio_ctl + :geometry (geometry :x "-20px" + :y "7%" + :anchor "top right" + :width "280px" + :height "60px") +(audio)) + + +(defwindow system + :geometry (geometry :x "-20px" + :y "7%" + :anchor "top right" + :width "290px" + :height "120px") +(system)) + + + +;; Music +(defwidget music_pop [] + (box :class "music_pop" :orientation "h" :space-evenly "false" :vexpand "false" :hexpand "false" + (box :class "music_cover_art" :vexpand "false" :hexpand "false" :style "background-image: url('${cover_art}');") + (box :orientation "v" :spacing 20 :space-evenly "false" :vexpand "false" :hexpand "false" + (label :halign "center" :class "music" :wrap "true" :limit-width 13 :text song) + (label :halign "center" :class "music_artist" :wrap "true" :limit-width 15 :text song_artist) + (box :orientation "h" :spacing 15 :halign "center" :space-evenly "false" :vexpand "false" :hexpand "false" + (button :class "music_btn_prev" :onclick "~/.config/eww/bar/scripts/music_info --prev" "") + (button :class "music_btn_play" :onclick "~/.config/eww/bar/scripts/music_info --toggle" song_status) + (button :class "music_btn_next" :onclick "~/.config/eww/bar/scripts/music_info --next" "")) + (box :class "music_bar" :halign "center" :vexpand "false" :hexpand "false" :space-evenly "false" + (scale :onscroll "mpc -q seek {}" :min 0 :active "true" :max 100 :value current_status))))) + + +;; music + (defwindow music_win :stacking "fg" :focusable "false" :screen 1 + :geometry (geometry :x "0" :y "7%" :width 428 :height 104 :anchor "top center") + (music_pop)) + diff --git a/eww_laptop/bar/images/mic.png b/eww_laptop/bar/images/mic.png new file mode 100644 index 0000000..d77f315 Binary files /dev/null and b/eww_laptop/bar/images/mic.png differ diff --git a/eww_laptop/bar/images/music.png b/eww_laptop/bar/images/music.png new file mode 100644 index 0000000..11804f5 Binary files /dev/null and b/eww_laptop/bar/images/music.png differ diff --git a/eww_laptop/bar/images/profile.png b/eww_laptop/bar/images/profile.png new file mode 100644 index 0000000..0190a36 Binary files /dev/null and b/eww_laptop/bar/images/profile.png differ diff --git a/eww_laptop/bar/images/speaker.png b/eww_laptop/bar/images/speaker.png new file mode 100644 index 0000000..79e005b Binary files /dev/null and b/eww_laptop/bar/images/speaker.png differ diff --git a/eww_laptop/bar/launch_bar b/eww_laptop/bar/launch_bar new file mode 100755 index 0000000..51f2a1d --- /dev/null +++ b/eww_laptop/bar/launch_bar @@ -0,0 +1,27 @@ +#!/bin/bash + +## Files and cmd +FILE="$HOME/.cache/eww_launch.xyz" +EWW="$HOME/.local/bin/eww/eww -c $HOME/.config/eww/bar" + +## Run eww daemon if not running already +if [[ ! `pidof eww` ]]; then + ${EWW} daemon + sleep 1 +fi + +## Open widgets +run_eww() { + ${EWW} open-many \ + bar + +} + +## Launch or close widgets accordingly +if [[ ! -f "$FILE" ]]; then + touch "$FILE" + run_eww && bspc config -m LVDS-1 top_padding 49 +else + ${EWW} close-all && killall eww + rm "$FILE" +fi diff --git a/eww_laptop/bar/scripts/battery b/eww_laptop/bar/scripts/battery new file mode 100755 index 0000000..0540a1b --- /dev/null +++ b/eww_laptop/bar/scripts/battery @@ -0,0 +1,17 @@ +#!/bin/bash + +battery() { + BAT=`ls /sys/class/power_supply | grep BAT | head -n 1` + cat /sys/class/power_supply/${BAT}/capacity +} +battery_stat() { + BAT=`ls /sys/class/power_supply | grep BAT | head -n 1` + cat /sys/class/power_supply/${BAT}/status +} + +if [[ "$1" == "--bat" ]]; then + battery +elif [[ "$1" == "--bat-st" ]]; then + battery_stat +fi + diff --git a/eww_laptop/bar/scripts/mem-ad b/eww_laptop/bar/scripts/mem-ad new file mode 100755 index 0000000..1e4cf89 --- /dev/null +++ b/eww_laptop/bar/scripts/mem-ad @@ -0,0 +1,15 @@ +#!/bin/sh + + +total="$(free -m | grep Mem: | awk '{ print $2 }')" +used="$(free -m | grep Mem: | awk '{ print $3 }')" + +free=$(expr $total - $used) + +if [ "$1" = "total" ]; then + echo $total +elif [ "$1" = "used" ]; then + echo $used +elif [ "$1" = "free" ]; then + echo $free +fi diff --git a/eww_laptop/bar/scripts/memory b/eww_laptop/bar/scripts/memory new file mode 100755 index 0000000..217c834 --- /dev/null +++ b/eww_laptop/bar/scripts/memory @@ -0,0 +1,3 @@ +#!/bin/sh + +printf "%.0f\n" $(free -m | grep Mem | awk '{print ($3/$2)*100}') diff --git a/eww_laptop/bar/scripts/music_info b/eww_laptop/bar/scripts/music_info new file mode 100755 index 0000000..ffafe87 --- /dev/null +++ b/eww_laptop/bar/scripts/music_info @@ -0,0 +1,98 @@ +#!/bin/bash +# scripts by adi1090x + +## Get data +STATUS="$(mpc status)" +COVER="/tmp/.music_cover.png" +MUSIC_DIR="$HOME/Music" + +## Get status +get_status() { + if [[ $STATUS == *"[playing]"* ]]; then + echo "" + else + echo "奈" + fi +} + +## Get song +get_song() { + song=`mpc -f %title% current` + if [[ -z "$song" ]]; then + echo "Offline" + else + echo "$song" + fi +} + +## Get artist +get_artist() { + artist=`mpc -f %artist% current` + if [[ -z "$artist" ]]; then + echo "" + else + echo "$artist" + fi +} + +## Get time +get_time() { + time=`mpc status | grep "%)" | awk '{print $4}' | tr -d '(%)'` + if [[ -z "$time" ]]; then + echo "0" + else + echo "$time" + fi +} +get_ctime() { + ctime=`mpc status | grep "#" | awk '{print $3}' | sed 's|/.*||g'` + if [[ -z "$ctime" ]]; then + echo "0:00" + else + echo "$ctime" + fi +} +get_ttime() { + ttime=`mpc -f %time% current` + if [[ -z "$ttime" ]]; then + echo "0:00" + else + echo "$ttime" + fi +} + +## Get cover +get_cover() { + ffmpeg -i "${MUSIC_DIR}/$(mpc current -f %file%)" "${COVER}" -y &> /dev/null + STATUS=$? + + # Check if the file has a embbeded album art + if [ "$STATUS" -eq 0 ];then + echo "$COVER" + else + echo "images/music.png" + fi +} + +## Execute accordingly +if [[ "$1" == "--song" ]]; then + get_song +elif [[ "$1" == "--artist" ]]; then + get_artist +elif [[ "$1" == "--status" ]]; then + get_status +elif [[ "$1" == "--time" ]]; then + get_time +elif [[ "$1" == "--ctime" ]]; then + get_ctime +elif [[ "$1" == "--ttime" ]]; then + get_ttime +elif [[ "$1" == "--cover" ]]; then + get_cover +elif [[ "$1" == "--toggle" ]]; then + mpc -q toggle +elif [[ "$1" == "--next" ]]; then + { mpc -q next; get_cover; } +elif [[ "$1" == "--prev" ]]; then + { mpc -q prev; get_cover; } +fi diff --git a/eww_laptop/bar/scripts/pop b/eww_laptop/bar/scripts/pop new file mode 100755 index 0000000..aef82e8 --- /dev/null +++ b/eww_laptop/bar/scripts/pop @@ -0,0 +1,92 @@ +#!/bin/bash + +calendar() { +LOCK_FILE="$HOME/.cache/eww-calendar.lock" +EWW_BIN="$HOME/.local/bin/eww/eww" + +run() { + ${EWW_BIN} -c $HOME/.config/eww/bar open calendar +} + +# Open widgets +if [[ ! -f "$LOCK_FILE" ]]; then + ${EWW_BIN} -c $HOME/.config/eww/bar close system music_win audio_ctl + touch "$LOCK_FILE" + run && echo "ok good!" +else + ${EWW_BIN} -c $HOME/.config/eww/bar close calendar + rm "$LOCK_FILE" && echo "closed" +fi +} + + +system() { +LOCK_FILE_MEM="$HOME/.cache/eww-system.lock" +EWW_BIN="$HOME/.local/bin/eww/eww" + +run() { + ${EWW_BIN} -c $HOME/.config/eww/bar open system +} + +# Open widgets +if [[ ! -f "$LOCK_FILE_MEM" ]]; then + ${EWW_BIN} -c $HOME/.config/eww/bar close calendar music_win audio_ctl + touch "$LOCK_FILE_MEM" + run && echo "ok good!" +else + ${EWW_BIN} -c $HOME/.config/eww/bar close system + rm "$LOCK_FILE_MEM" && echo "closed" +fi +} + + +music() { +LOCK_FILE_SONG="$HOME/.cache/eww-song.lock" +EWW_BIN="$HOME/.local/bin/eww/eww" + +run() { + ${EWW_BIN} -c $HOME/.config/eww/bar open music_win +} + +# Open widgets +if [[ ! -f "$LOCK_FILE_SONG" ]]; then + ${EWW_BIN} -c $HOME/.config/eww/bar close system calendar + touch "$LOCK_FILE_SONG" + run && echo "ok good!" +else + ${EWW_BIN} -c $HOME/.config/eww/bar close music_win + rm "$LOCK_FILE_SONG" && echo "closed" +fi +} + + + +audio() { +LOCK_FILE_AUDIO="$HOME/.cache/eww-audio.lock" +EWW_BIN="$HOME/.local/bin/eww/eww" + +run() { + ${EWW_BIN} -c $HOME/.config/eww/bar open audio_ctl +} + +# Open widgets +if [[ ! -f "$LOCK_FILE_AUDIO" ]]; then + ${EWW_BIN} -c $HOME/.config/eww/bar close system calendar music + touch "$LOCK_FILE_AUDIO" + run && echo "ok good!" +else + ${EWW_BIN} -c $HOME/.config/eww/bar close audio_ctl + rm "$LOCK_FILE_AUDIO" && echo "closed" +fi +} + + +if [ "$1" = "calendar" ]; then +calendar +elif [ "$1" = "system" ]; then +system +elif [ "$1" = "music" ]; then +music +elif [ "$1" = "audio" ]; then +audio +fi diff --git a/eww_laptop/bar/scripts/wifi b/eww_laptop/bar/scripts/wifi new file mode 100755 index 0000000..5d7cc59 --- /dev/null +++ b/eww_laptop/bar/scripts/wifi @@ -0,0 +1,26 @@ +#!/bin/bash + +status=$(nmcli g | grep -oE "disconnected") +essid=$(nmcli c | grep wlp2s0 | awk '{print ($1)}') + +if [ $status ] ; then + icon="" + text="" + col="#575268" + +else + icon="" + text="${essid}" + col="#a1bdce" +fi + + + +if [[ "$1" == "--COL" ]]; then + echo $col +elif [[ "$1" == "--ESSID" ]]; then + echo $text +elif [[ "$1" == "--ICON" ]]; then + echo $icon +fi + diff --git a/eww_laptop/bar/scripts/workspace b/eww_laptop/bar/scripts/workspace new file mode 100755 index 0000000..f202ef1 --- /dev/null +++ b/eww_laptop/bar/scripts/workspace @@ -0,0 +1,56 @@ +#!/bin/sh +workspaces() { + +ws1="1" +ws2="2" +ws3="3" +ws4="4" +ws5="5" +ws6="6" + +# Unoccupied +un="0" + +# check if Occupied +o1=$(bspc query -D -d .occupied --names | grep "$ws1" ) +o2=$(bspc query -D -d .occupied --names | grep "$ws2" ) +o3=$(bspc query -D -d .occupied --names | grep "$ws3" ) +o4=$(bspc query -D -d .occupied --names | grep "$ws4" ) +o5=$(bspc query -D -d .occupied --names | grep "$ws5" ) +o6=$(bspc query -D -d .occupied --names | grep "$ws6" ) + +# check if Focused +f1=$(bspc query -D -d focused --names | grep "$ws1" ) +f2=$(bspc query -D -d focused --names | grep "$ws2" ) +f3=$(bspc query -D -d focused --names | grep "$ws3" ) +f4=$(bspc query -D -d focused --names | grep "$ws4" ) +f5=$(bspc query -D -d focused --names | grep "$ws5" ) +f6=$(bspc query -D -d focused --names | grep "$ws6" ) + +ic_1="" +ic_2="" +ic_3="" +ic_4="" +ic_5="" +ic_6="" +if [ $f1 ]; then + ic_1="" +elif [ $f2 ]; then + ic_2="" +elif [ $f3 ]; then + ic_3="" +elif [ $f4 ]; then + ic_4="" +elif [ $f5 ]; then + ic_5="" +elif [ $f6 ]; then + ic_6="" +fi + +echo "(box :class \"works\" :orientation \"h\" :spacing 5 :space-evenly \"false\" (button :onclick \"bspc desktop -f $ws1\" :class \"$un$o1$f1\" \"$ic_1\") (button :onclick \"bspc desktop -f $ws2\" :class \"$un$o2$f2\" \"$ic_2\") (button :onclick \"bspc desktop -f $ws3\" :class \"$un$o3$f3\" \"$ic_3\") (button :onclick \"bspc desktop -f $ws4\" :class \"$un$o4$f4\" \"$ic_4\") (button :onclick \"bspc desktop -f $ws5\" :class \"$un$o5$f5\" \"$ic_5\") (button :onclick \"bspc desktop -f $ws6\" :class \"$un$o6$f6\" \"$ic_6\"))" + +} +workspaces +bspc subscribe desktop node_transfer | while read -r _ ; do +workspaces +done diff --git a/eww_laptop/eww.scss b/eww_laptop/eww.scss new file mode 100644 index 0000000..3d4bda8 --- /dev/null +++ b/eww_laptop/eww.scss @@ -0,0 +1,665 @@ +/** EWW.SCSS +Created by saimoom **/ +* { + all: unset; + font-family: feather; + font-family: DaddyTimeMono Nerd Font; +} + +/** General **/ +.bar_class { + background-color:#000000 ; /*#282828#111017;*/ + border-radius: 10px; +} +.module { + margin: 0px 0px 0px 0px; + border-radius: 10px 10px 0px 10px; +} + +/** tooltip!! **/ +tooltip.background { + background-color: #0f0f17; + font-size: 14; + border-radius: 10px; + color: #bfc9db; +} + +tooltip label { + margin: 3px; +} + +/** Widgets **/ + +.clock_time_sep { + font-size: 20; + color: #bfc9db; + margin: 0px 0px 1px 0px; +} +.clock_time_class, +.clock_minute_class { + font-size: 24; +} +.clock_date_class { + font-size: 21; + margin: 0px 5px 0px 5px; + color: #d7beda; +} +.clock_minute_class { + margin: 0px 5px 0px 2px; + color: #bfc9db; +} +.clock_time_class { + color: #bfc9db; + font-weight: bold; + margin: 0px 0px 0px 8px; +} + +.membar { + color: #e0b089; + background-color: #38384d; + border-radius: 10px; +} +.batbar { + color: #afbea2; + background-color: #38384d; + border-radius: 10px; +} +.brightbar trough highlight { + background-image: linear-gradient( + to right, + #e4c9af 30%, + #f2cdcd 50%, + #e0b089 100% * 50 + ); + border-radius: 10px; +} +.brightbar scale trough { + all: unset; + box-shadow: 0 6px 5px 2px #06060b; + background-color: #232232; + border-radius: 24px; + min-height: 10px; + min-width: 100px; + margin: 0px -15px 5px 0px; +} +.volbar trough highlight { + background-image: linear-gradient( + to right, + #afcee0 30%, + #a1bdce 50%, + #77a5bf 100% * 50 + ); + border-radius: 10px; +} + +.module_app_text { + font-size: 23; + margin: 2px 0px 0px 0px; +} +.bright_icon { + font-size: 22; + color: #e4c9af; + margin: 0px 10px 0px -10px; +} +.bright_icon_overlay { + font-size: 28; + color: #e4c9af; + background-size: cover; + background-position: center; + margin: 0px 27px 0px 3px; +} +.volume_icon { + font-size: 22; + color: #a1bdce; + margin: 0px 5px 0px 0px; +} +.module-wif { + font-size: 22; + color: #a1bdce; + border-radius: 100%; + margin: 0px 10px 0px 0px; +} +.module_essid { + font-size: 18; + color: #a1bdce; + margin: 0px 5px 0px -1px; +} + +.iconmem { + font-size: 23; + margin: 4px -3px 4px 0px; + color: #e0b089; +} +.mem_padding { + margin: 10px; +} +.iconbat { + font-size: 23; + color: #afbea2; +} + +.separ { + color: #3e424f; + font-weight: bold; + font-size: 22px; + margin: 0px 0px 0px 0px; +} + +.mem_module { + background-color: #111017; + border-radius: 16px; + margin: 0px 10px 0px 0px; +} +.bat_module { + background-color: #111017; + border-radius: 16px; + margin: 0px 10px 0px 10px; +} + +scale trough { + all: unset; + background-color: #22242b; + box-shadow: 0 2px 3px 2px #06060b; + border-radius: 16px; + min-height: 10px; + min-width: 70px; + margin: 0px 10px 0px 0px; +} + +.works { + font-size: 27px; + font-weight: normal; + margin: 0px 0px 0px 15px; + background-color: #000000; +} + +.0, +.01, +.02, +.03, +.04, +.05, +.06, +.011, +.022, +.033, +.044, +.055, +.066 { + margin: 0px 10px 0px 0px; +} + +/* Unoccupied */ +.0 { + color: #3e424f; +} + +/* Occupied */ +.01, +.02, +.03, +.04, +.05, +.06 { + color: #bfc9db; +} + +/* Focused */ +.011, +.022, +.033, +.044, +.055, +.066 { + color: #a1bdce; +} + +.song_cover_art { + background-size: cover; + background-position: center; + min-height: 24px; + min-width: 24px; + margin: 10px; + border-radius: 100px; +} + +.song { + color: #a1bdce; + font-size: 18px; + font-weight: bold; + margin: 3px 5px 0px 0px; +} + +.song_btn_play { + color: #a1bdce; + font-size: 28px; + margin: 3px 0px 0px 5px; +} + +.song_btn_prev, +.song_btn_next { + color: #bfc9db; + font-size: 24px; + margin: 3px 0px 0px 5px; +} +// Calendar +.cal { + border-radius: 10px; + background-color: #0f0f17; + font-family: JetBrainsMono Nerd Font; + font-size: 18px; + font-weight: normal; + + .cal-in { + padding: 0px 10px 0px 10px; + color: #bfc9db; + + .cal { + &.highlight { + padding: 20px; + } + + padding: 5px 5px 5px 5px; + margin-left: 10px; + } + } +} + +calender { + color: #bfc9db; +} +calendar:selected { + color: #a1bdce; +} + +calendar.header { + color: #a1bdce; + font-weight: bold; +} + +calendar.button { + color: #afbea2; +} + +calendar.highlight { + color: #a1bdce; + font-weight: bold; +} + +calendar:indeterminate { + color: #bfc9db; +} + +.sys_sep { + color: #38384d; + font-size: 18; + margin: 0px 10px 0px 10px; +} +.sys_text_bat_sub, +.sys_text_mem_sub { + font-size: 16; + color: #bbc5d7; + margin: 5px 0px 0px 25px; +} +.sys_text_bat, +.sys_text_mem { + font-size: 21; + font-weight: bold; + margin: 14px 0px 0px 25px; +} +.sys_icon_bat, +.sys_icon_mem { + font-size: 30; + margin: 30px; +} +.sys_win { + border-radius: 10px; + background-color: #0f0f17; +} +.sys_bat { + color: #afbea2; + background-color: #38384d; + border-radius: 10px; +} +.sys_mem { + color: #e4c9af; + background-color: #38384d; + border-radius: 10px; +} +.sys_icon_bat, +.sys_text_bat { + color: #afbea2; +} +.sys_icon_mem, +.sys_text_mem { + color: #e4c9af; +} +.sys_bat_box { + border-radius: 16px; + margin: 15px 10px 10px 20px; +} +.sys_mem_box { + border-radius: 16px; + margin: 10px 10px 15px 20px; +} + +.music_pop { + background-color: #0f0f17; + border-radius: 16px; +} +.music_cover_art { + background-size: cover; + background-position: center; + min-height: 100px; + box-shadow: 5px 5px 5px 5px #06060b; + min-width: 170px; + margin: 20px; + border-radius: 20px; +} + +.music { + color: #a1bdce; + font-size: 20px; + font-weight: bold; + margin: 20px 0px 0px -15px; +} + +.music_artist { + color: #bbc5d7; + font-size: 16px; + font-weight: normal; + margin: 0px 0px 0px 0px; +} + +.music_btn_prev, +.music_btn_play, +.music_btn_next { + font-family: Iosevka Nerd Font; +} +.music_btn_prev { + color: #bbc5d7; + font-size: 32px; + font-weight: normal; + margin: 0px 0px 0px 0px; +} +.music_btn_play { + color: #a1bdce; + font-size: 48px; + font-weight: normal; + margin: 0px 0px 0px 0px; +} +.music_btn_next { + color: #bbc5d7; + font-size: 32px; + font-weight: normal; + margin: 0px 0px 0px 0px; +} + +.music_bar scale trough highlight { + all: unset; + background-image: linear-gradient( + to right, + #afcee0 30%, + #a1bdce 50%, + #77a5bf 100% * 50 + ); + border-radius: 24px; +} +.music_bar scale trough { + all: unset; + background-color: #232232; + box-shadow: 0 6px 5px 2px #06060b; + border-radius: 24px; + min-height: 13px; + min-width: 190px; + margin: -10px 10px 20px 0px; +} + +.audio-box { + background-color: #0f0f17; + border-radius: 16px; +} +.speaker_icon { + background-size: cover; + background-image: url("images/speaker.png"); + background-position: center; + min-height: 40px; + min-width: 45px; + margin: 10px 10px 5px 20px; + border-radius: 12px; +} + +.speaker_text { + color: #a1bdce; + font-size: 22px; + font-weight: bold; + margin: 5px 15px 0px 15px; +} +.bright_text { + color: #a1bdce; + font-size: 22px; + font-weight: bold; + margin: 5px 15px 0px 25px; +} + +.change_audio_box { + margin: 0px 0px 0px 10px; +} + +.change_audio { + color: #a1bdce; + margin: 0px 50px 0px 50px; + font-size: 30px; + font-weight: bold; +} + +.speaker_bar scale trough highlight { + all: unset; + background-image: linear-gradient( + to right, + #afcee0 30%, + #a1bdce 50%, + #77a5bf 100% * 50 + ); + border-radius: 24px; +} +.speaker_bar scale trough { + all: unset; + background-color: #232232; + box-shadow: 0 6px 5px 2px #06060b; + border-radius: 24px; + min-height: 10px; + min-width: 100px; + margin: 0px 0px 5px 0px; +} + +.mic_icon { + background-size: cover; + background-image: url("images/mic.png"); + background-position: center; + min-height: 40px; + min-width: 45px; + margin: 5px 20px 20px 10px; + border-radius: 12px; +} + +.mic_text { + color: #a1bdce; + font-size: 26px; + font-weight: bold; + margin: 0px 0px 0px 0px; +} + +.mic_bar scale trough highlight { + all: unset; + background-image: linear-gradient( + to right, + #afcee0 30%, + #a1bdce 50%, + #77a5bf 100% * 50 + ); + border-radius: 24px; +} +.mic_bar scale trough { + all: unset; + box-shadow: 0 6px 5px 2px #06060b; + background-color: #232232; + border-radius: 24px; + min-height: 10px; + min-width: 100px; + margin: 6px 0px 20px 0px; +} + +.audio_sep { + color: #38384d; + font-size: 18; + margin: 0px 0px 0px 0px; +} + +//cockpit stuff + +.cockpit_class { + all: unset; +} + +.cockpit_clock { + padding: 0px 30px 0px 30px; +} + +.cockpit_box { + background-color: #06060b; + border-radius: 10px; + margin: 5px; + padding: 0px 5px 0px 5px; + opacity: 0.85; +} + +.cockpit_button_shutdown { + color: #FF1111; + font-size: 40px; + margin: 0px 5px -30px 5px; +} + +.cockpit_button_sleep { + color: #0055FF; + font-size: 40px; + margin: 0px 5px -30px 5px; +} + +.cockpit_button_restart { + color: #11FF11; + font-size: 40px; + margin: 0px 5px -30px 5px; +} + +.song_info { + margin: -50px 0px 0px 0px; + font-size: 20px; + color: grey; +} + +.album_cover { + margin: -60px 10px 20px 10px; + padding: 0px; + background-size: cover; + background-repeat: no-repeat; + background-position: center; + border-radius: 10px; +} + +.cockpit_button_settings { + color: #d35d6e; + font-size: 35px; + margin: -30px 5px 0px 5px; +} + +.weather-icon { + font-size: 80px; + margin: 10px 0px 35px 25px; + font-family: Iosevka; +} + +.weather-stat { + font-size: 30px; + font-weight: bold; + color: #d35d6e; + margin: -20px 0px 10px 0px; +} + +.temperature { + color: grey; + font-size: 48px; + font-weight: 900; + margin: 0px 0px 0px 20px; +} +.weather-quote { + margin: 30px -5px 0px 20px; + font-size: 20px; +} +.weather-quote-head, +.weather-quote-tail { + color: grey; + font-size: 18px; + margin: 10px 0px 10px 10px; +} + +.cockpit_clock_left { + font-size: 50px; + font-weight: bold; + color: #d35d6e; + margin: 5px -20px -30px 0px; +} + +.cockpit_clock_right { + font-size: 50px; + font-weight: bold; + color: #d35d6e; + margin: 5px 0px -30px -20px; +} + +.cockpit_date { + font-size: 50px; + font-weight: bold; + color: #d35d6e; + margin: -30px -20px 0px -20px; +} + +.cockpit_clock_sep { + font-size: 40px; + font-weight: bold; + color: #d35d6e; + margin: 0px -20px -30px -20px; +} + +.cockpit_docs { + color: #FF1111; + font-size: 30px; + margin: 10px 0px -10px 0px; +} + +.cockpit_pics { + color: #11FF11; + font-size: 30px; + margin: 0px 0px 0px 0px; + padding: 0px; +} + +.cockpit_gits { + color: #0055FF; + font-size: 30px; + margin: -20px 0px 10px 0px; +} + +.cockpit_sep_bottom { + color: #38384d; + font-size: 18; + margin: -10px 0px 0px 0px; + padding: 0px; +} + +.cockpit_sep_top { + color: #38384d; + font-size: 18; + margin: 0px 0px -10px 0px; + padding: 0px; +} diff --git a/eww_laptop/eww.yuck b/eww_laptop/eww.yuck new file mode 100644 index 0000000..c7dc8e0 --- /dev/null +++ b/eww_laptop/eww.yuck @@ -0,0 +1,513 @@ +;; date definitions ;; +(defpoll clock_time :interval "1m" "date +\%I") +(defpoll clock_minute :interval "5s" "date +\%M") +(defpoll clock_date :interval "10h" "date '+%d/%m'") + +;; volume definitions ;; +(defpoll volume_percent :interval "1s" "pactl get-sink-volume @DEFAULT_SINK@ | awk -F '/' ' { print $2 } ' | tr -d ' %'") +(defpoll mic_percent :interval "1s" "pactl get-source-volume @DEFAULT_SOURCE@ | awk -F'/' '{ print $2 }' | tr -d ' %'") +(defpoll brightness_percent :interval "5s" "brightnessctl -m -d intel_backlight | awk -F, '{print substr($4, 0, length($4)-1)}' | tr -d '%'") + +;; battery definitions ;; +(defpoll battery_status :interval "5s" "./scripts/battery stat") +(defpoll battery-capacity :interval "5s" "scripts/battery percent") +(defpoll battery :interval "5s" "scripts/battery icon") + +;; memory definitions ;; +(defpoll memory :interval "15s" "scripts/memory") +(defpoll memory_used_mb :interval "2m" "scripts/mem-ad used") +(defpoll memory_total_mb :interval "2m" "scripts/mem-ad total") +(defpoll memory_free_mb :interval "2m" "scripts/mem-ad free") + +;; wifi definitions ;; +(defpoll COL_WLAN :interval "1m" "~/.config/eww/scripts/wifi --COL") +(defpoll ESSID_WLAN :interval "1m" "~/.config/eww/scripts/wifi --ESSID") +(defpoll WLAN_ICON :interval "1m" "~/.config/eww/scripts/wifi --ICON") + +;; music definitions ;; +(defpoll Song_info :interval "2s" "scripts/music_control") +(defpoll Thumbnail :interval "2s" "scripts/music_control2") + +;; current window ;; +;;(defpoll currentWindow :interval "100ms" "hyprctl activewindow | grep class | awk -F ':' '{ print $2 }'") + +;; calendar definitions ;; +(defpoll calendar_day :interval "20h" "date '+%d'") +(defpoll calendar_year :interval "20h" "date '+%Y'") + +;; Weather vars + (defpoll weather-icon :interval "20m" "cat ~/.cache/weather/weather-icon") + (defpoll temperature :interval "20m" "cat ~/.cache/weather/weather-degree") + (defpoll weather-hex :interval "20m" "cat ~/.cache/weather/weather-hex") + (defpoll weather-stat :interval "20m" "cat ~/.cache/weather/weather-stat") + (defpoll weather-stat-side :interval "20m" "~/.config/eww/scripts/weather-trimmer") + (defpoll weather-quote :interval "20m" "~/.config/eww/scripts/getwethquote") + +;; simple variables ;; +(defvar eww "$HOME/.local/bin/eww -c $HOME/.config/eww") +(defvar vol_reveal false) +(defvar br_reveal false) +(defvar music_reveal false) +(defvar wifi_rev false) +(defvar time_rev false) +(deflisten workspace "scripts/workspace") +(deflisten currentName "scripts/current_name") + + +;; widgets + + +;; wifi ;; +(defwidget wifi [] + (eventbox :onhover "${eww} update wifi_rev=true" + :onhoverlost "${eww} update wifi_rev=false" + (box :vexpand "false" :hexpand "false" :space-evenly "false" + (button :class "module-wif" :onclick "hyprctl dispatch exec 'alacritty -e nmtui' && ${eww} update wifi_rev=false" :wrap "false" :limit-width 12 :style "color: ${COL_WLAN};" WLAN_ICON) + (revealer :transition "slideright" + :reveal wifi_rev + :duration "350ms" + (button :class "module_essid" :onclick "hyprctl dispatch exec 'alacritty -e nmtui' && ${eww} update wifi_rev=false" :wrap "false" :limit-width 12 :style "color: ${COL_WLAN};" ESSID_WLAN))))) + +(defwidget bluetooth [] + (box :vexpand "false" :hexpand "false" :space-evenly "false" + (button :class "module-wif" :onclick "hyprctl dispatch exec 'blueman-manager'" :wrap "false" :limit-width 12 :style "color: ${COL_WLAN};" "") + )) + +;; workspaces ;; +(defwidget workspaces [] + (literal :content workspace)) + + +;; Battery ;; +(defwidget bat [] + (box :class "bat_module" :vexpand "false" :hexpand "false" + (button + :class "iconbat" + :tooltip "Battery: ${battery-capacity}%" + :show_truncated false + :onclick "$HOME/.config/eww/scripts/pop system" + :wrap false + "${battery}"))) + +;; memory ;; +(defwidget mem [] + (box :class "mem_module" :vexpand "false" :hexpand "false" + (button :class "iconmem" + :onclick "$HOME/.config/eww/scripts/pop system" + (circular-progress :value memory + :class "membar" + :thickness 4 + :tooltip "using ${memory}% ram" + :show_truncated false + :wrap false + (label :class "mem_padding" :text "") + )))) + + +;; seperator ;; +(defwidget sep [] + (box :class "module-2" :vexpand "false" :hexpand "false" + (label :class "separ" :text "|"))) + +;; clock ;; +(defwidget clock_module [] + (eventbox :onhover "${eww} update time_rev=true" + :onhoverlost "${eww} update time_rev=false" + (button :onclick "scripts/pop calendar" + (box :class "module" :space-evenly "false" :orientation "h" :spacing "3" + (label :text clock_time :class "clock_time_class" ) + (label :text "" :class "clock_time_sep" ) + (label :text clock_minute :class "clock_minute_class") + (revealer :class "clock_date_class" + :transition "slideleft" + :reveal time_rev + :duration "350ms" + clock_date + ))))) + +;; speaker volume ;; +(defwidget volume [] + (box :class "module-2" :space-evenly "false" :orientation "h" :spacing "3" + (button :onclick "scripts/pop audio" :class "volume_icon" ""))) + +;; screen brightness ;; +(defwidget bright [] + (box :class "module-2" :space-evenly "false" :orientation "h" :spacing "3" + (button :onclick "scripts/pop brightness" :class "bright_icon" ""))) + +;; brightness widget ;; +(defwidget brightness_overlay [] + (eventbox :onhover "scripts/pop hoverCreate" + :onhoverlost "scripts/pop hoverGet brightness_window" + (box :class "audio-box" :halign "center" :orientation "v" :vexpand "false" :hexpand "false" + (label :class "speaker_text" :text "brightness" :halign "left" ) + (box :class "brightbar" :halign "center" :vexpand "false" :hexpand "false" + (label :class "bright_icon_overlay" :text "") + (scale :value brightness_percent + :space-evenly "false" + :orientation "h" + :onchange "brightnessctl set {}%" + :tooltip "brightness on ${brightness_percent}%" + :max 100 + :min 0))))) + +;; audio volume widget ;; +(defwidget audio [] + (eventbox :onhover "scripts/pop hoverCreate" + :onhoverlost "scripts/pop hoverGet audio_ctl" + (box :class "audio-box" :orientation "v" :space-evenly "false" :vexpand "false" :hexpand "false" + (box :halign "center" :space-evenly "false" :hexpand "false" :vexpand "false" + (box :class "speaker_icon" :orientation "v") + (box :orientation "v" :halign "center" :vexpand "false" :hexpand "false" + (label :class "speaker_text" :text "speaker" :valign "center" :halign "left" ) + (box :class "speaker_bar" :halign "center" :vexpand "false" :hexpand "false" + (scale :value volume_percent + :space-evenly "false" + :orientation "h" + :onchange "pactl set-sink-volume @DEFAULT_SINK@ {}%" + :tooltip "volume on ${volume_percent}%" + :max 100 + :min 0)))) + (label :text "" :class "audio_sep" :halign "center") + (box :halign "center" :space-evenly "false" :hexpand "false" :vexpand "false" + (box :class "mic_icon" :orientation "v") + (box :orientation "v" :halign "center" :vexpand "false" :hexpand "false" + (label :class "speaker_text" :text "mic" :valign "center" :halign "left" ) + (box :class "mic_bar" :halign "center" :vexpand "false" :hexpand "false" + (scale :value mic_percent + :space-evenly "false" + :orientation "h" + :tooltip "mic on ${mic_percent}%" + :onchange "pactl set-source-volume @DEFAULT_SOURCE@ {}%" + :max 100 + :min 0)))) + (label :text "" :class "audio_sep" :halign "center") + (box :halign "center" :space-evenly "false" :hexpand "false" :vexpand "false" + (label :class "bright_icon_overlay" :orientation "v" :text "") + (box :orientation "v" :halign "center" :vexpand "false" :hexpand "false" + (label :class "bright_text" :text "lux" :valign "center" :halign "right" ) + (box :class "brightbar" :halign "center" :vexpand "false" :hexpand "false" + (scale :value brightness_percent + :space-evenly "false" + :orientation "h" + :tooltip "brightness ${brightness_percent}%" + :onchange "brightnessctl set {}%" + :max 100 + :min 0)))) + (label :text "" :class "audio_sep" :halign "center") + (box :class "change_audio_box" :halign "center" :spac`e-evenly "false" :hexpand "false" :vexpand "false" + (box :class "change_audio" :orientation "v" :halign "left" + (button :onclick "scripts/change-audio internal" "")) + (box :class "change_audio" :orientation "v" :halign "right" + (button :onclick "scripts/change-audio bluetooth" "")) + )))) + +(defwidget cname [] + (literal :content currentName)) + +;; calendar ;; +(defwidget cal [] + (eventbox :onhover "scripts/pop hoverCreate" + :onhoverlost "scripts/pop hoverGet calendar" + (box :class "cal" :orientation "v" + (box :class "cal-in" + (calendar :class "cal" + :day calendar_day + :year calendar_year))))) + +(defwidget system [] + (eventbox :onhover "scripts/pop hoverCreate" + :onhoverlost "scripts/pop hoverGet system" + (box :class "sys_win" :orientation "v" :space-evenly "false" :hexpand "false" :vexpand "false" :spacing 0 + (box :class "sys_bat_box" :orientation "h" :space-evenly "false" + (circular-progress :value battery-capacity + :class "sys_bat" + :thickness 9 + (label :text "" + :class "sys_icon_bat" + :limit-width 2 + :show_truncated false + :wrap false)) + (box :orientation "v" :space-evenly "false" :spacing 0 :hexpand "false" :vexpand "false" + (label :text "battery" + :halign "start" + :class "sys_text_bat" + :limit-width 9 + :show_truncated false + :wrap false) + (label :text "${battery-capacity}%" + :halign "start" + :class "sys_text_bat_sub" + :limit-width 22 + :show_truncated false + :wrap false) + (label :text "${battery_status}" + :halign "start" + :class "sys_text_bat_sub" + :limit-width 22 + :show_truncated false + :wrap false))) + (label :text "" :class "sys_sep" :halign "center") + (box :class "sys_mem_box" :orientation "h" :space-evenly "false" :halign "start" + (circular-progress :value memory + :class "sys_mem" + :thickness 9 + (label :text "" + :class "sys_icon_mem" + :limit-width 2 + :show_truncated false + :wrap false + :angle 0.0)) + (box :orientation "v" :space-evenly "false" :spacing 0 :hexpand "false" :vexpand "false" + (label :text "memory" + :halign "start" + :class "sys_text_mem" + :limit-width 9 + :show_truncated false + :wrap false) + (label :text "${memory_used_mb} | ${memory_total_mb}mb " + :halign "start" + :class "sys_text_mem_sub" + :limit-width 22 + :show_truncated false + :wrap false) + (label :text "${memory_free_mb}mb free" + :halign "start" + :class "sys_text_mem_sub" + :limit-width 22 + :show_truncated false + :wrap false)))))) + +;; cockpit widget ;; +(defwidget cockpit [] + (box :orientation "h" + (box :class "cockpit_class" + :orientation "h" + (box :orientation "v" + (box :class "cockpit_box" :orientation "v" + (box + (button :class "cockpit_button_shutdown" :onclick "hyprctl dispatch exec 'shutdown now'" "") + (button :class "cockpit_button_restart" :onclick "hyprctl dispatch exec reboot" "") + (button :class "cockpit_button_sleep" :onclick "hyprctl dispatch exec 'playerctl -a pause & swaylock -c 000000 & systemctl suspend'" "")) + (label :text "" :class "audio_sep" :halign "center") + (box + (button :class "cockpit_button_settings" :onclick "hyprctl dispatch exec 'pavucontrol'" "") + (button :class "cockpit_button_settings" :onclick "scripts/change-audio bluetooth" ""))) + (box :class "cockpit_box" :orientation "v" + (button :class "cockpit_docs" :onclick "hyprctl dispatch exec nautilus $HOME/Documents" "Documents ") + (label :text "" :class "cockpit_sep_top" :halign "center") + (button :class "cockpit_pics" :onclick "hyprctl dispatch exec nautilus $HOME/Pictures" "Pictures ") + (label :text "" :class "cockpit_sep_bottom" :halign "center") + (button :class "cockpit_gits" :onclick "hyprctl dispatch exec 'alacritty --working-directory $HOME/gits'" "gits "))) + (box :orientation "v" + (box :class "cockpit_box" :orientation "v" + (box :class "cockpit_clock" + (label :text clock_time :class "cockpit_clock_left" ) + (label :text "" :class "cockpit_clock_sep" ) + (label :text clock_minute :class "cockpit_clock_right")) + (label :text "" :class "audio_sep" :halign "center") + (box :class "cockpit_clock" + (label :text clock_date :class "cockpit_date") + )) + (box :class "cockpit_box" (weather))) + (box :width 300 :height 200 :class "cockpit_box" :orientation "v" + (box :class "song_info" + (label :wrap true :text "${Song_info}")) + (box :class "album_cover" :style 'background-image: url("${Thumbnail}")') + ))) +) + +;; weather ;; + (defwidget weather [] + (box :orientation "v" :space-evenly "false" + (box :orientation "h" :space-evenly "false" + (box :class "weather-icon" :style "color: ${weather-hex}" {weather-icon}) + (box :class "temperature" "${temperature}")) + (box :orientation "v" :space-evenly "false" + (box :class "weather-stat" {weather-stat})) + (box :class "weather-quote-head" + (label :wrap true :text {weather-quote})))) + +;; left side but displayed right? ;; +(defwidget left [] + (box :orientation "h" + :space-evenly false + :halign "end" + :class "left_modules" +(volume) +(wifi) +(bluetooth) +(sep) +(bat) +(mem) +(sep) +(clock_module))) + +;; right side but displayed left? ;; +(defwidget right [] + (box :orientation "h" + :space-evenly false + :halign "start" + :class "right_modules" +(workspaces))) + +;; center widget ;; +(defwidget center [] + (box :orientation "h" + :space-evenly false + :halign "center" + :class "center_modules" +(cname))) + +;; bar as widget;; +(defwidget bar_1 [] + (box :class "bar_class" + :orientation "h" + (right) + (center) + (left) + )) +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Drawing Windows ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(defwindow calendar + :monitor 0 + :geometry (geometry :x "20px" + :y "2px" + :anchor "top right" + :width "270px" + :height "60px") + :stacking "overlay" +(cal)) + +(defwindow audio_ctl + :monitor 0 + :geometry (geometry :x "120px" + :y "2px" + :anchor "top right" + :width "250px" + :height "330px") + :stacking "overlay" +(audio)) + +(defwindow brightness_window + :monitor 0 + :geometry (geometry :x "250px" + :y "2px" + :anchor "top right" + :width "280px" + :height "60px") + :stacking "overlay" +(brightness_overlay)) + +;; music again .. ;; +;; (defwindow music_win :stacking "fg" :focusable "false" :screen 1 +;; :geometry (geometry :x "0" :y "7%" :width 428 :height 104 :anchor "top center") +;; (music_pop)) + +(defwindow system + :monitor 0 + :geometry (geometry :x "50px" + :y "2px" + :anchor "top right" + :width "290px" + :height "120px") + :stacking "overlay" +(system)) + +;; draw the bar ;; +(defwindow bar + :monitor 0 + :geometry (geometry :x "0%" + :y "1px" + :width "99%" + :height "20px" + :anchor "top center") + :stacking "bg" + :wm-ignore false + :exclusive true + (bar_1)) + +;; draw the bar ;; +(defwindow cockpit_window_0 + :monitor 0 + :geometry (geometry + :width "600px" + :height "500px" + :anchor "center") + :stacking "overlay" + :wm-ignore false + :exclusive true + (cockpit)) + +(defwindow calendar1 + :monitor 1 + :geometry (geometry :x "20px" + :y "2px" + :anchor "top right" + :width "270px" + :height "60px") + :stacking "overlay" +(cal)) + +(defwindow audio_ctl1 + :monitor 1 + :geometry (geometry :x "120px" + :y "2px" + :anchor "top right" + :width "250px" + :height "330px") + :stacking "overlay" +(audio)) + +(defwindow brightness_window1 + :monitor 1 + :geometry (geometry :x "250px" + :y "2px" + :anchor "top right" + :width "280px" + :height "60px") + :stacking "overlay" +(brightness_overlay)) + +;; music again .. ;; +;; (defwindow music_win1 :stacking "fg" :focusable "false" :screen 1 +;; :geometry (geometry :x "0" :y "7%" :width 428 :height 104 :anchor "top center") +;; (music_pop)) + +(defwindow system1 + :monitor 1 + :geometry (geometry :x "50px" + :y "2px" + :anchor "top right" + :width "290px" + :height "120px") + :stacking "overlay" +(system)) + +;; draw the bar ;; +(defwindow bar1 + :monitor 1 + :geometry (geometry :x "0%" + :y "1px" + :width "99%" + :height "15px" + :anchor "top center") + :stacking "bg" + :wm-ignore false + :exclusive true + (bar_1)) + +;; draw the bar ;; +(defwindow cockpit_window_1 + :monitor 1 + :geometry (geometry + :width "600px" + :height "500px" + :anchor "center") + :stacking "overlay" + :wm-ignore false + :exclusive true + (cockpit)) + diff --git a/eww_laptop/images/mic.png b/eww_laptop/images/mic.png new file mode 100644 index 0000000..d77f315 Binary files /dev/null and b/eww_laptop/images/mic.png differ diff --git a/eww_laptop/images/music.png b/eww_laptop/images/music.png new file mode 100644 index 0000000..11804f5 Binary files /dev/null and b/eww_laptop/images/music.png differ diff --git a/eww_laptop/images/profile.png b/eww_laptop/images/profile.png new file mode 100644 index 0000000..0190a36 Binary files /dev/null and b/eww_laptop/images/profile.png differ diff --git a/eww_laptop/images/speaker.png b/eww_laptop/images/speaker.png new file mode 100644 index 0000000..79e005b Binary files /dev/null and b/eww_laptop/images/speaker.png differ diff --git a/eww_laptop/launch_bar b/eww_laptop/launch_bar new file mode 100755 index 0000000..205cd60 --- /dev/null +++ b/eww_laptop/launch_bar @@ -0,0 +1,27 @@ +#!/bin/bash + +## Files and cmd +FILE="$HOME/.cache/eww_launch.xyz" +EWW="$HOME/.local/bin/eww -c $HOME/.config/eww" + +## Run eww daemon if not running already +if [[ ! `pidof eww` ]]; then + ${EWW} daemon + sleep 1 +fi + +## Open widgets +run_eww() { + ${EWW} open-many \ + bar + +} + +## Launch or close widgets accordingly +if [[ ! -f "$FILE" ]]; then + touch "$FILE" + run_eww && bspc config -m LVDS-1 top_padding 49 +else + ${EWW} close-all && killall eww + rm "$FILE" +fi diff --git a/eww_laptop/scripts/audio_devices b/eww_laptop/scripts/audio_devices new file mode 100755 index 0000000..1548cfd --- /dev/null +++ b/eww_laptop/scripts/audio_devices @@ -0,0 +1,31 @@ +#!/bin/bash +CLIENTS=$(pactl list sink-inputs | grep "application.process.binary" | awk -F '= ' ' { print $2 } ' | tr -d '"') + +readarray -t lines <<<"$CLIENTS" + +printf "%s\n" "${lines[@]}" +echo ${lines[2]} + + +#echo "(box :class \"works\" :orientation \"h\" :spacing 5 :space-evenly \"false\" (button :onclick \"hyprctl dispatch workspace 1\" :class \"$un$o1$f1\" \"$ic_1\") (button :onclick \"hyprctl dispatch workspace 2\" :class \"$un$o2$f2\" \"$ic_2\") (button :onclick \"hyprctl dispatch workspace 3\" :class \"$un$o3$f3\" \"$ic_3\") (button :onclick \"hyprctl dispatch workspace 4\" :class \"$un$o4$f4\" \"$ic_4\") (button :onclick \"hyprctl dispatch workspace 5\" :class \"$un$o5$f5\" \"$ic_5\") (button :onclick \"hyprctl dispatch workspace 6\" :class \"$un$o6$f6\" \"$ic_6\") (button :onclick \"hyprctl dispatch workspace 7\" :class \"$un$o7$f7\" \"$ic_7\") (button :onclick \"hyprctl dispatch workspace 8\" :class \"$un$o8$f8\" \"$ic_8\"))" + + # (eventbox :onhover "scripts/pop hoverCreate" + # :onhoverlost "scripts/pop hoverGet audio_ctl" + # (box :class "audio-box" :orientation "v" :space-evenly "false" :vexpand "false" :hexpand "false" + + # (box :halign "center" :space-evenly "false" :hexpand "false" :vexpand "false" + # (box :class "speaker_icon" :orientation "v") + # (box :orientation "v" :halign "center" :vexpand "false" :hexpand "false" + # (label :class "speaker_text" :text "speaker" :valign "center" :halign "left" ) + # (box :class "speaker_bar" :halign "center" :vexpand "false" :hexpand "false" + # (scale :value volume_percent + # :space-evenly "false" + # :orientation "h" + # :onchange "pactl set-sink-volume @DEFAULT_SINK@ {}%" + # :tooltip "volume on ${volume_percent}%" + # :max 100 + # :min 0)))) + + # (label :text "" :class "audio_sep" :halign "center") + + # )))) diff --git a/eww_laptop/scripts/battery b/eww_laptop/scripts/battery new file mode 100755 index 0000000..d42c0e7 --- /dev/null +++ b/eww_laptop/scripts/battery @@ -0,0 +1,76 @@ +#!/bin/bash + +bat=/sys/class/power_supply/BAT0/ +per="$(cat "$bat/capacity")" +char="$(cat "$bat/status")" + +icon() { + +#[ $(cat "$bat/status") = Charging ] && echo "" && exit + +if [ "$char" == "Charging" ]; then + if [ "$per" -gt "90" ]; then + icon="" + elif [ "$per" -gt "80" ]; then + icon="" + elif [ "$per" -gt "70" ]; then + icon="" + elif [ "$per" -gt "60" ]; then + icon="" + elif [ "$per" -gt "50" ]; then + icon="" + elif [ "$per" -gt "40" ]; then + icon="" + elif [ "$per" -gt "30" ]; then + icon="" + elif [ "$per" -gt "20" ]; then + icon="" + elif [ "$per" -gt "10" ]; then + icon="" + elif [ "$per" -gt "0" ]; then + icon="" + else + echo  && exit + fi +else + if [ "$per" -gt "90" ]; then + icon="" + elif [ "$per" -gt "80" ]; then + icon="" + elif [ "$per" -gt "70" ]; then + icon="" + elif [ "$per" -gt "60" ]; then + icon="" + elif [ "$per" -gt "50" ]; then + icon="" + elif [ "$per" -gt "40" ]; then + icon="" + elif [ "$per" -gt "30" ]; then + icon="" + elif [ "$per" -gt "20" ]; then + icon="" + elif [ "$per" -gt "10" ]; then + icon="" + elif [ "$per" -gt "0" ]; then + icon="" + notify-send -u critical "Battery Low" "Connect Charger" + else + echo  && exit + fi +fi + echo "$icon" +} + +percent() { + echo $per +} + +stat() { + echo $char +} + +[ "$1" = "icon" ] && icon && exit +[ "$1" = "percent" ] && percent && exit +[ "$1" = 'stat' ] && stat && exit +exit + diff --git a/eww_laptop/scripts/change-audio b/eww_laptop/scripts/change-audio new file mode 100755 index 0000000..99702c3 --- /dev/null +++ b/eww_laptop/scripts/change-audio @@ -0,0 +1,35 @@ +#! /bin/bash + +internal() { + SPEAKER=$(pactl list sinks | grep "Name" | grep "alsa" | awk -F ': ' '{ print $2 }') + if [ "$SPEAKER" != "" ]; then + pactl set-default-sink "$SPEAKER" + pactl set-sink-mute "$SPEAKER" false + notify-send "changed audio to internal speakers " + else + notify-send "failed, not available!" + fi +} + +bluetooth() { + SPEAKER=$(pactl list sinks | grep "Name" | grep "blue" | awk -F ': ' '{ print $2 }') + if [ "$SPEAKER" != "" ]; then + pactl set-default-sink "$SPEAKER" + pactl set-sink-mute "$SPEAKER" false + notify-send "changed audio to Bluetooth" + else + notify-send "failed, not available!" + fi +} + + +if [ "$1" == "internal" ]; then + internal +elif [ "$1" == "bluetooth" ]; then + bluetooth +else + SPEAKER=$(pactl info | grep "Default Sink" | awk -F ': ' ' { print $2 } ') + pactl set-sink-mute "$SPEAKER" false +fi + + diff --git a/eww_laptop/scripts/change-brightness b/eww_laptop/scripts/change-brightness new file mode 100755 index 0000000..198dc44 --- /dev/null +++ b/eww_laptop/scripts/change-brightness @@ -0,0 +1,12 @@ +#! /bin/bash + +set_brightness() { +brightnessctl set "$1" +CURRENT=$(brightnessctl -m -d intel_backlight | awk -F, '{print substr($4, 0, length($4)-1)}') +dunstify -a "changeBrightness" -r 3 -u low -i brightness-high -h int:value:"$CURRENT" "Brightness: ${CURRENT}%" +} + +if [ "$1" == "brightness" ]; then + set_brightness "$2" +fi + diff --git a/eww_laptop/scripts/change-volume b/eww_laptop/scripts/change-volume new file mode 100755 index 0000000..094ed43 --- /dev/null +++ b/eww_laptop/scripts/change-volume @@ -0,0 +1,20 @@ +#! /bin/bash + +set_volume_sink() { +pactl set-sink-volume @DEFAULT_SINK@ "$1" +CURRENT=$(pactl get-sink-volume @DEFAULT_SINK@ | awk -F'/' '{ print $2 }' | tr -d ' %') +dunstify -a "changeVolume" -r 2 -u low -i audio-volume-high -h int:value:"$CURRENT" "Output Volume: ${CURRENT}%" +} + +set_volume_source() { +pactl set-source-volume @DEFAULT_SOURCE@ "$1" +CURRENT=$(pactl get-source-volume @DEFAULT_SOURCE@ | awk -F'/' '{ print $2 }' | tr -d ' %') +dunstify -a "changeMicVolume" -r 2 -u low -i audio-volume-high -h int:value:"$CURRENT" "Input Volume: ${CURRENT}%" +} + + +if [ "$1" == "sink" ]; then + set_volume_sink "$2" +elif [ "$1" == "source" ]; then + set_volume_source "$2" +fi diff --git a/eww_laptop/scripts/cockpit_toggle b/eww_laptop/scripts/cockpit_toggle new file mode 100755 index 0000000..80dfd97 --- /dev/null +++ b/eww_laptop/scripts/cockpit_toggle @@ -0,0 +1,11 @@ +#! /bin/bash + +ISOPEN=$(eww windows | grep "*cockpit" | tr -d '*') + + +if [ "$ISOPEN" = "" ]; then +MONITOR=$(hyprctl monitors | grep -B 10 "focused: yes" | grep "ID" | awk -F '(' ' { print $2 } ' | tr -d 'ID ):') + eww open cockpit_window_"$MONITOR" +else + eww close "$ISOPEN" +fi diff --git a/eww_laptop/scripts/current_name b/eww_laptop/scripts/current_name new file mode 100755 index 0000000..224bfac --- /dev/null +++ b/eww_laptop/scripts/current_name @@ -0,0 +1,9 @@ +#!/bin/bash +currentName() { + win=$(hyprctl activewindow | grep class | awk -F ':' '{print $2}' | tr -d ' ') + echo "(box :class \"module_app_text\" :space-evenly \"false\" :orientation \"h\" :spacing \"3\" (label :text \"$win\"))" +} +currentName +tail -f /tmp/hypr/$HYPRLAND_INSTANCE_SIGNATURE/hyprland.log | grep -E --line-buffered "focus to surface" | while read -r; do +currentName +done diff --git a/eww_laptop/scripts/firefox_control.sh b/eww_laptop/scripts/firefox_control.sh new file mode 100755 index 0000000..32d818e --- /dev/null +++ b/eww_laptop/scripts/firefox_control.sh @@ -0,0 +1,5 @@ +#! /bin/bash + +NUM=$(pactl list clients short | grep "firefox" | awk -F 'PipeWire' ' { print $1 } ' | tr -d ' \t\n') +CLIENT=$(pactl list sink-inputs short | grep "$NUM" | awk -F ' ' ' { print $1 }' | tr -d ' \t\n') +pactl set-sink-input-volume "$CLIENT" "$1" diff --git a/eww_laptop/scripts/getwethquote b/eww_laptop/scripts/getwethquote new file mode 100755 index 0000000..7bfaf34 --- /dev/null +++ b/eww_laptop/scripts/getwethquote @@ -0,0 +1,2 @@ +#!/bin/bash +echo -e $(cat $HOME/.cache/weather/weather-quote) | head -n1 diff --git a/eww_laptop/scripts/getwethquote2 b/eww_laptop/scripts/getwethquote2 new file mode 100755 index 0000000..a34afa9 --- /dev/null +++ b/eww_laptop/scripts/getwethquote2 @@ -0,0 +1,2 @@ +#!/bin/bash +echo -e $(cat $HOME/.cache/weather/weather-quote) | tail -n1 diff --git a/eww_laptop/scripts/mem-ad b/eww_laptop/scripts/mem-ad new file mode 100755 index 0000000..0495e00 --- /dev/null +++ b/eww_laptop/scripts/mem-ad @@ -0,0 +1,15 @@ +#!/bin/bash + + +total="$(free -m | grep Mem: | awk '{ print $2 }')" +used="$(free -m | grep Mem: | awk '{ print $3 }')" + +free=$(expr $total - $used) + +if [ "$1" = "total" ]; then + echo $total +elif [ "$1" = "used" ]; then + echo $used +elif [ "$1" = "free" ]; then + echo $free +fi diff --git a/eww_laptop/scripts/memory b/eww_laptop/scripts/memory new file mode 100755 index 0000000..da37c1d --- /dev/null +++ b/eww_laptop/scripts/memory @@ -0,0 +1,3 @@ +#!/bin/bash + +printf "%.0f\n" $(free -m | grep Mem | awk '{print ($3/$2)*100}') diff --git a/eww_laptop/scripts/music_control b/eww_laptop/scripts/music_control new file mode 100755 index 0000000..70a1483 --- /dev/null +++ b/eww_laptop/scripts/music_control @@ -0,0 +1,2 @@ +#!/bin/bash +echo $(playerctl metadata -p ncspot,%any --format "{{ artist }}\n{{ album }}\n{{ title }}") diff --git a/eww_laptop/scripts/music_control2 b/eww_laptop/scripts/music_control2 new file mode 100755 index 0000000..42dca7f --- /dev/null +++ b/eww_laptop/scripts/music_control2 @@ -0,0 +1,3 @@ +#!/bin/bash +echo $(playerctl -p ncspot,%any metadata mpris:artUrl) + diff --git a/eww_laptop/scripts/music_info b/eww_laptop/scripts/music_info new file mode 100755 index 0000000..ffafe87 --- /dev/null +++ b/eww_laptop/scripts/music_info @@ -0,0 +1,98 @@ +#!/bin/bash +# scripts by adi1090x + +## Get data +STATUS="$(mpc status)" +COVER="/tmp/.music_cover.png" +MUSIC_DIR="$HOME/Music" + +## Get status +get_status() { + if [[ $STATUS == *"[playing]"* ]]; then + echo "" + else + echo "奈" + fi +} + +## Get song +get_song() { + song=`mpc -f %title% current` + if [[ -z "$song" ]]; then + echo "Offline" + else + echo "$song" + fi +} + +## Get artist +get_artist() { + artist=`mpc -f %artist% current` + if [[ -z "$artist" ]]; then + echo "" + else + echo "$artist" + fi +} + +## Get time +get_time() { + time=`mpc status | grep "%)" | awk '{print $4}' | tr -d '(%)'` + if [[ -z "$time" ]]; then + echo "0" + else + echo "$time" + fi +} +get_ctime() { + ctime=`mpc status | grep "#" | awk '{print $3}' | sed 's|/.*||g'` + if [[ -z "$ctime" ]]; then + echo "0:00" + else + echo "$ctime" + fi +} +get_ttime() { + ttime=`mpc -f %time% current` + if [[ -z "$ttime" ]]; then + echo "0:00" + else + echo "$ttime" + fi +} + +## Get cover +get_cover() { + ffmpeg -i "${MUSIC_DIR}/$(mpc current -f %file%)" "${COVER}" -y &> /dev/null + STATUS=$? + + # Check if the file has a embbeded album art + if [ "$STATUS" -eq 0 ];then + echo "$COVER" + else + echo "images/music.png" + fi +} + +## Execute accordingly +if [[ "$1" == "--song" ]]; then + get_song +elif [[ "$1" == "--artist" ]]; then + get_artist +elif [[ "$1" == "--status" ]]; then + get_status +elif [[ "$1" == "--time" ]]; then + get_time +elif [[ "$1" == "--ctime" ]]; then + get_ctime +elif [[ "$1" == "--ttime" ]]; then + get_ttime +elif [[ "$1" == "--cover" ]]; then + get_cover +elif [[ "$1" == "--toggle" ]]; then + mpc -q toggle +elif [[ "$1" == "--next" ]]; then + { mpc -q next; get_cover; } +elif [[ "$1" == "--prev" ]]; then + { mpc -q prev; get_cover; } +fi diff --git a/eww_laptop/scripts/ncspot_control.sh b/eww_laptop/scripts/ncspot_control.sh new file mode 100755 index 0000000..477625c --- /dev/null +++ b/eww_laptop/scripts/ncspot_control.sh @@ -0,0 +1,5 @@ +#! /bin/bash + +NUM=$(pactl list clients short | grep "ncspot" | awk -F 'PipeWire' ' { print $1 } ' | tr -d ' \t\n') +CLIENT=$(pactl list sink-inputs short | grep "$NUM" | awk -F ' ' ' { print $1 }' | tr -d ' \t\n') +pactl set-sink-input-volume "$CLIENT" "$1" diff --git a/eww_laptop/scripts/pop b/eww_laptop/scripts/pop new file mode 100755 index 0000000..133b55c --- /dev/null +++ b/eww_laptop/scripts/pop @@ -0,0 +1,134 @@ +#!/bin/bash + + +calendar() { +LOCK_FILE="$HOME/.cache/eww-calendar.lock" +EWW_BIN="$HOME/.local/bin/eww" + +run() { + ${EWW_BIN} -c $HOME/.config/eww open calendar +} + +# Open widgets +if [[ ! -f "$LOCK_FILE" ]]; then + ${EWW_BIN} -c $HOME/.config/eww close system music_win audio_ctl brightness + touch "$LOCK_FILE" + run && echo "ok good!" +else + ${EWW_BIN} -c $HOME/.config/eww close calendar + rm "$LOCK_FILE" && echo "closed" +fi +} + + +system() { +LOCK_FILE_MEM="$HOME/.cache/eww-system.lock" +EWW_BIN="$HOME/.local/bin/eww" + +run() { + ${EWW_BIN} -c $HOME/.config/eww open system +} + +# Open widgets +if [[ ! -f "$LOCK_FILE_MEM" ]]; then + ${EWW_BIN} -c $HOME/.config/eww close calendar music_win audio_ctl brightness + touch "$LOCK_FILE_MEM" + run && echo "ok good!" +else + ${EWW_BIN} -c $HOME/.config/eww close system + rm "$LOCK_FILE_MEM" && echo "closed" +fi +} + + +music() { +LOCK_FILE_SONG="$HOME/.cache/eww-song.lock" +EWW_BIN="$HOME/.local/bin/eww" + +run() { + ${EWW_BIN} -c $HOME/.config/eww open music_win +} + +# Open widgets +if [[ ! -f "$LOCK_FILE_SONG" ]]; then + ${EWW_BIN} -c $HOME/.config/eww close system calendar brightness + touch "$LOCK_FILE_SONG" + run && echo "ok good!" +else + ${EWW_BIN} -c $HOME/.config/eww close music_win + rm "$LOCK_FILE_SONG" && echo "closed" +fi +} + + + +audio() { +LOCK_FILE_AUDIO="$HOME/.cache/eww-audio.lock" +EWW_BIN="$HOME/.local/bin/eww" + +run() { + ${EWW_BIN} -c $HOME/.config/eww open audio_ctl +} + +# Open widgets +if [[ ! -f "$LOCK_FILE_AUDIO" ]]; then + ${EWW_BIN} -c $HOME/.config/eww close system calendar music brightness + touch "$LOCK_FILE_AUDIO" + run && echo "ok good!" +else + ${EWW_BIN} -c $HOME/.config/eww close audio_ctl + rm "$LOCK_FILE_AUDIO" && echo "closed" +fi +} + +brightness() { +LOCK_FILE_AUDIO="$HOME/.cache/eww-brightness.lock" +EWW_BIN="$HOME/.local/bin/eww" + +run() { + ${EWW_BIN} -c $HOME/.config/eww open brightness_window +} + +# Open widgets +if [[ ! -f "$LOCK_FILE_AUDIO" ]]; then + ${EWW_BIN} -c $HOME/.config/eww close system calendar music audio_ctl + touch "$LOCK_FILE_AUDIO" + run && echo "ok good!" +else + ${EWW_BIN} -c $HOME/.config/eww close brightness_window + rm "$LOCK_FILE_AUDIO" && echo "closed" +fi +} + +hoverGet() { +NAME="$1" +EWW_BIN="$HOME/.local/bin/eww" +if [[ -f "$STORE" ]]; then + rm "$STORE" + ${EWW_BIN} -c $HOME/.config/eww close "$NAME" +fi +} + +hoverCreate() { +if [[ ! -f "$STORE" ]]; then + touch "$STORE" +else + echo "failure!" +fi +} +STORE=true +if [ "$1" = "calendar" ]; then + calendar +elif [ "$1" = "system" ]; then + system +#elif [ "$1" = "music" ]; then +#music +elif [ "$1" = "audio" ]; then + audio +elif [ "$1" = "brightness" ]; then + brightness +elif [ "$1" = "hoverGet" ]; then + hoverGet "$2" +elif [ "$1" = "hoverCreate" ]; then + hoverCreate +fi diff --git a/eww_laptop/scripts/spotifyd b/eww_laptop/scripts/spotifyd new file mode 100755 index 0000000..fc35a11 --- /dev/null +++ b/eww_laptop/scripts/spotifyd @@ -0,0 +1,10 @@ +#!/bin/bash + +#if [ "$PLAYER_EVENT" = "start" ] || [ "$PLAYER_EVENT" = "change" ]; +#then + trackName=$(playerctl -p spotifyd,%any metadata title) + artistAndAlbumName=$(playerctl -p spotifyd,%any metadata --format "{{ artist }} ({{ album }})") + Thumbnail_url=$(playerctl -p spotifyd,%any metadata mpris:artUrl) + Thumbnail=$(curl "$Thumbnail_url") + notify-send -u low "$trackName" "$artistAndAlbumName " -i "$Thumbnail" +#fi diff --git a/eww_laptop/scripts/spotifyd.sh b/eww_laptop/scripts/spotifyd.sh new file mode 100755 index 0000000..86d89f3 --- /dev/null +++ b/eww_laptop/scripts/spotifyd.sh @@ -0,0 +1,10 @@ +#!/bin/bash +if [ "$PLAYER_EVENT" = "start" ] || [ "$PLAYER_EVENT" = "change" ]; +then + song=$(playerctl metadata -p spotifyd --format "{{ title }}\n{{ artist }}\n{{ album }}") + if [ ! -f "/home/dashie/.cache/icons/$song" ]; then + thumb=$(playerctl metadata -p spotifyd --format '{{lc(mpris:artUrl)}}') + convert "$thumb" -flatten -thumbnail 256x256 /home/dashie/.cache/icons/"$song" + fi + dunstify -I /home/dashie/.cache/icons/"$song" -t 3000 "Spotify" "$song" +fi diff --git a/eww_laptop/scripts/toggle-mute b/eww_laptop/scripts/toggle-mute new file mode 100755 index 0000000..7fcd17e --- /dev/null +++ b/eww_laptop/scripts/toggle-mute @@ -0,0 +1,12 @@ +#! /bin/bash + +SINK=$(pactl info | grep "Default Sink"| awk -F 'Default Sink: ' ' { print $2 } ') +pactl set-sink-mute $SINK toggle +MUTE=$(pactl list sinks | grep -A 6 "$SINK" | grep "Mute: yes" | tr -d '\t') + +if [ "$MUTE" = "Mute: yes" ]; then + dunstify -a "toggleMute" -r 2 -u low "Muted" +else + dunstify -a "toggleMute" -r 2 -u low "Unmuted" +fi + diff --git a/eww_laptop/scripts/weather b/eww_laptop/scripts/weather new file mode 100755 index 0000000..69c277d --- /dev/null +++ b/eww_laptop/scripts/weather @@ -0,0 +1,125 @@ +#!/bin/bash + +tmp_weather="$HOME/.cache/weather" +tmp_weather_stat=$tmp_weather/weather-stat +tmp_weather_degree=$tmp_weather/weather-degree +tmp_weather_quote=$tmp_weather/weather-quote +tmp_weather_hex=$tmp_weather/weather-hex +tmp_weather_icon=$tmp_weather/weather-icon + +if [ ! -d $tmp_weather ]; then + mkdir -p $tmp_weather +fi + +# Put in your api and stuff link here +# If you dunno, head to openweathermap.org, and make and account +#(completely free I swear, and then get your API Key and your City ID) +# I wish I was smart enough to do it like Elena, but this is the top I could do lol +KEY=$(cat $HOME/.ssh/weather-key) +ID=$(cat $HOME/.ssh/location) +UNIT="{metric}" #Options are 'metric' and 'imperial' +weather=$(curl -sf "http://api.openweathermap.org/data/2.5/weather?APPID="$KEY"&id="$ID"&units="$UNIT"") +echo $weather +if [ ! -z "$weather" ]; then + weather_temp=$(echo "$weather" | jq ".main.temp" | cut -d "." -f 1) + weather_icon_code=$(echo "$weather" | jq -r ".weather[].icon" | head -1) + weather_description=$(echo "$weather" | jq -r ".weather[].description" | head -1 | sed -e "s/\b\(.\)/\u\1/g") + + #Big long if statement of doom + if [ "$weather_icon_code" == "50d" ]; then + weather_icon=" " + weather_quote="Forecast says it's misty \nMake sure you don't get lost on your way..." + weather_hex="#84afdb" #a7b8b2 + elif [ "$weather_icon_code" == "50n" ]; then + weather_icon=" " + weather_quote="Forecast says it's a misty night \nDon't go anywhere tonight or you might get lost..." + weather_hex="#84afdb" + elif [ "$weather_icon_code" == "01d" ]; then + weather_icon=" " + weather_quote="It's a sunny day, gonna be fun! \nDon't go wandering all by yourself though..." + weather_hex="#ffd86b" + elif [ "$weather_icon_code" == "01n" ]; then + weather_icon=" " + weather_quote="It's a clear night \nYou might want to take a evening stroll to relax..." + weather_hex="#fcdcf6" + elif [ "$weather_icon_code" == "02d" ]; then + weather_icon=" " + weather_quote="It's cloudy, sort of gloomy \nYou'd better get a book to read..." + weather_hex="#adadff" + elif [ "$weather_icon_code" == "02n" ]; then + weather_icon=" " + weather_quote="It's a cloudy night \nHow about some hot chocolate and a warm bed?" + weather_hex="#adadff" + elif [ "$weather_icon_code" == "03d" ]; then + weather_icon=" " + weather_quote="It's cloudy, sort of gloomy \nYou'd better get a book to read..." + weather_hex="#adadff" + elif [ "$weather_icon_code" == "03n" ]; then + weather_icon=" " + weather_quote="It's a cloudy night \nHow about some hot chocolate and a warm bed?" + weather_hex="#adadff" + elif [ "$weather_icon_code" == "04d" ]; then + weather_icon=" " + weather_quote="It's cloudy, sort of gloomy \nYou'd better get a book to read..." + weather_hex="#adadff" + elif [ "$weather_icon_code" == "04n" ]; then + weather_icon=" " + weather_quote="It's a cloudy night \nHow about some hot chocolate and a warm bed?" + weather_hex="#adadff" + elif [ "$weather_icon_code" == "09d" ]; then + weather_icon=" " + weather_quote="It's rainy, it's a great day! \nGet some ramen and watch as the rain falls..." + weather_hex="#6b95ff" + elif [ "$weather_icon_code" == "09n" ]; then + weather_icon=" " + weather_quote=" It's gonna rain tonight it seems \nMake sure your clothes aren't still outside..." + weather_hex="#6b95ff" + elif [ "$weather_icon_code" == "10d" ]; then + weather_icon=" " + weather_quote="It's rainy, it's a great day! \nGet some ramen and watch as the rain falls..." + weather_hex="#6b95ff" + elif [ "$weather_icon_code" == "10n" ]; then + weather_icon=" " + weather_quote=" It's gonna rain tonight it seems \nMake sure your clothes aren't still outside..." + weather_hex="#6b95ff" + elif [ "$weather_icon_code" == "11d" ]; then + weather_icon="" + weather_quote="There's storm for forecast today \nMake sure you don't get blown away..." + weather_hex="#ffeb57" + elif [ "$weather_icon_code" == "11n" ]; then + weather_icon="" + weather_quote="There's gonna be storms tonight \nMake sure you're warm in bed and the windows are shut..." + weather_hex="#ffeb57" + elif [ "$weather_icon_code" == "13d" ]; then + weather_icon=" " + weather_quote="It's gonna snow today \nYou'd better wear thick clothes and make a snowman as well!" + weather_hex="#e3e6fc" + elif [ "$weather_icon_code" == "13n" ]; then + weather_icon=" " + weather_quote="It's gonna snow tonight \nMake sure you get up early tomorrow to see the sights..." + weather_hex="#e3e6fc" + elif [ "$weather_icon_code" == "40d" ]; then + weather_icon=" " + weather_quote="Forecast says it's misty \nMake sure you don't get lost on your way..." + weather_hex="#84afdb" + elif [ "$weather_icon_code" == "40n" ]; then + weather_icon=" " + weather_quote="Forecast says it's a misty night \nDon't go anywhere tonight or you might get lost..." + weather_hex="#84afdb" + else + weather_icon=" " + weather_quote="Sort of odd, I don't know what to forecast \nMake sure you have a good time!" + weather_hex="#adadff" + fi + echo "$weather_icon" > $tmp_weather_icon + echo "$weather_description" > $tmp_weather_stat + echo "$weather_temp""°C" > $tmp_weather_degree + echo "$weather_quote" > $tmp_weather_quote + echo "$weather_hex" > $tmp_weather_hex + else + echo "Weather Unavailable" > $tmp_weather_stat + echo " " > $tmp_weather_icon + echo "Ah well, no weather huh? \nEven if there's no weather, it's gonna be a great day!" > $tmp_weather_quote + echo "-" > $tmp_weather_degree + echo "#adadff" > $tmp_weather_hex +fi diff --git a/eww_laptop/scripts/weather-trimmer b/eww_laptop/scripts/weather-trimmer new file mode 100755 index 0000000..8ddeaa1 --- /dev/null +++ b/eww_laptop/scripts/weather-trimmer @@ -0,0 +1,9 @@ +#!/bin/bash +weather=$(cat $HOME/.cache/weather/weather-stat) +weather_count=$(cat $HOME/.cache/weather/weather-stat | wc -c) + +if [ "$weather_count" -lt 10 ]; then + echo $weather; +else + echo $(cat $HOME/.cache/weather/weather-stat | cut -c1-6)... +fi diff --git a/eww_laptop/scripts/wifi b/eww_laptop/scripts/wifi new file mode 100755 index 0000000..9de7f23 --- /dev/null +++ b/eww_laptop/scripts/wifi @@ -0,0 +1,26 @@ +#!/bin/bash + +status=$(nmcli g | grep -oE "disconnected") +essid=$(nmcli c | grep wlp2s0 | awk '{print ($1)}') + +if [ $status ] ; then + icon="" + text="" + col="#575268" + +else + icon="" + text="${essid}" + col="#a1bdce" +fi + + + +if [[ "$1" == "--COL" ]]; then + echo $col +elif [[ "$1" == "--ESSID" ]]; then + echo $text +elif [[ "$1" == "--ICON" ]]; then + echo $icon +fi + diff --git a/eww_laptop/scripts/workspace b/eww_laptop/scripts/workspace new file mode 100755 index 0000000..a42ec58 --- /dev/null +++ b/eww_laptop/scripts/workspace @@ -0,0 +1,120 @@ +#!/bin/bash +workspaces() { + +ws1="ID 1 " +ws2="ID 2 " +ws3="ID 3 " +ws4="ID 4 " +ws5="ID 5 " +ws6="ID 6 " +ws7="ID 7 " +ws8="ID 8 " +ws9="ID 9 " +ws0="ID 10" + +# check if Occupied +o1=$(hyprctl workspaces | grep "$ws1" ) +o2=$(hyprctl workspaces | grep "$ws2" ) +o3=$(hyprctl workspaces | grep "$ws3" ) +o4=$(hyprctl workspaces | grep "$ws4" ) +o5=$(hyprctl workspaces | grep "$ws5" ) +o6=$(hyprctl workspaces | grep "$ws6" ) +o7=$(hyprctl workspaces | grep "$ws7" ) +o8=$(hyprctl workspaces | grep "$ws8" ) +o9=$(hyprctl workspaces | grep "$ws9" ) +o0=$(hyprctl workspaces | grep "$ws0" ) + +# check if Focused +f1=$(hyprctl monitors | grep "workspace: 1 " -A 4 | grep "focused: yes" ) +f2=$(hyprctl monitors | grep "workspace: 2 " -A 4 | grep "focused: yes" ) +f3=$(hyprctl monitors | grep "workspace: 3 " -A 4 | grep "focused: yes" ) +f4=$(hyprctl monitors | grep "workspace: 4 " -A 4 | grep "focused: yes" ) +f5=$(hyprctl monitors | grep "workspace: 5 " -A 4 | grep "focused: yes" ) +f6=$(hyprctl monitors | grep "workspace: 6 " -A 4 | grep "focused: yes" ) +f7=$(hyprctl monitors | grep "workspace: 7 " -A 4 | grep "focused: yes" ) +f8=$(hyprctl monitors | grep "workspace: 8 " -A 4 | grep "focused: yes" ) +f9=$(hyprctl monitors | grep "workspace: 9 " -A 4 | grep "focused: yes" ) +f0=$(hyprctl monitors | grep "workspace: 10" -A 4 | grep "focused: yes" ) + +if [ "$o1" != "" ]; then + ic_1="①" + else + ic_1="" +fi +if [ "$o2" != "" ]; then + ic_2="②" + else + ic_2="" +fi +if [ "$o3" != "" ]; then + ic_3="③" + else + ic_3="" +fi +if [ "$o4" != "" ]; then + ic_4="④" + else + ic_4="" +fi +if [ "$o5" != "" ]; then + ic_5="⑤" + else + ic_5="" +fi +if [ "$o6" != "" ]; then + ic_6="⑥" + else + ic_6="" +fi +if [ "$o7" != "" ]; then + ic_7="⑦" + else + ic_7="" +fi +if [ "$o8" != "" ]; then + ic_8="⑧" + else + ic_8="" +fi +if [ "$o9" != "" ]; then + ic_9="⑨" + else + ic_9="" +fi +if [ "$o0" != "" ]; then + ic_0="⑩" + else + ic_0="" +fi + +if [ "$f1" != "" ]; then + ic_1="➊" +elif [ "$f2" != "" ]; then + ic_2="➋" +elif [ "$f3" != "" ]; then + ic_3="➌" +elif [ "$f4" != "" ]; then + ic_4="➍" +elif [ "$f5" != "" ]; then + ic_5="➎" +elif [ "$f6" != "" ]; then + ic_6="➏" +elif [ "$f7" != "" ]; then + ic_7="➐" +elif [ "$f8" != "" ]; then + ic_8="➑" +elif [ "$f9" != "" ]; then + ic_9="➒" +elif [ "$f0" != "" ]; then + ic_0="➓" +fi + + +#ic_1=$(hyprctl workspaces) +#ic_2="t" +echo "(box :class \"works\" :orientation \"h\" :spacing 5 :space-evenly \"false\" (button :onclick \"hyprctl dispatch workspace 1\" :class \"$un$o1$f1\" \"$ic_1\") (button :onclick \"hyprctl dispatch workspace 2\" :class \"$un$o2$f2\" \"$ic_2\") (button :onclick \"hyprctl dispatch workspace 3\" :class \"$un$o3$f3\" \"$ic_3\") (button :onclick \"hyprctl dispatch workspace 4\" :class \"$un$o4$f4\" \"$ic_4\") (button :onclick \"hyprctl dispatch workspace 5\" :class \"$un$o5$f5\" \"$ic_5\") (button :onclick \"hyprctl dispatch workspace 6\" :class \"$un$o6$f6\" \"$ic_6\") (button :onclick \"hyprctl dispatch workspace 7\" :class \"$un$o7$f7\" \"$ic_7\") (button :onclick \"hyprctl dispatch workspace 8\" :class \"$un$o8$f8\" \"$ic_8\") (button :onclick \"hyprctl dispatch workspace 9\" :class \"$un$o9$f9\" \"$ic_9\") (button :onclick \"hyprctl dispatch workspace 10\" :class \"$un$o0$f0\" \"$ic_0\"))" +} +workspaces +tail -f /tmp/hypr/$HYPRLAND_INSTANCE_SIGNATURE/hyprland.log | grep -E --line-buffered "Changed to workspace|focus to surface" | while read -r; do +workspaces +done diff --git a/example/flake.nix b/example/flake.nix deleted file mode 100644 index 01ec944..0000000 --- a/example/flake.nix +++ /dev/null @@ -1,51 +0,0 @@ -{ - 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 deleted file mode 100644 index dbe8cd0..0000000 --- a/example/hosts/example/configuration.nix +++ /dev/null @@ -1,68 +0,0 @@ -{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 deleted file mode 100644 index 855cafb..0000000 --- a/example/hosts/example/hardware.nix +++ /dev/null @@ -1,3 +0,0 @@ -{ - # this file adds custom NixOS configuration -} diff --git a/example/hosts/example/home.nix b/example/hosts/example/home.nix deleted file mode 100644 index e011ea7..0000000 --- a/example/hosts/example/home.nix +++ /dev/null @@ -1,3 +0,0 @@ -{ - # this file adds custom home-manager configuration -} diff --git a/example/secrets/secrets.md b/example/secrets/secrets.md deleted file mode 100644 index 86d99c6..0000000 --- a/example/secrets/secrets.md +++ /dev/null @@ -1,3 +0,0 @@ -# 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 deleted file mode 100644 index e69de29..0000000 diff --git a/fish/completions/tide.fish b/fish/completions/tide.fish new file mode 100644 index 0000000..2d3784d --- /dev/null +++ b/fish/completions/tide.fish @@ -0,0 +1,12 @@ +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 new file mode 100644 index 0000000..939f17c --- /dev/null +++ b/fish/conf.d/_tide_init.fish @@ -0,0 +1,41 @@ +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 new file mode 100644 index 0000000..e8fe466 --- /dev/null +++ b/fish/config.fish @@ -0,0 +1,134 @@ +if status is-interactive + # Commands to run in interactive sessions can go here +end +# ============================================================================= +# +# Utility functions for zoxide. +# +set fish_greeting +function sudo --description "Replacement for Bash 'sudo !!' command to run last command using sudo." + if test "$argv" = !! + echo sudo $history[1] + eval command sudo $history[1] + else + command sudo $argv + end +end +alias ls='lsd' +alias :q='exit' +alias gh='git push origin' +alias gl='git pull origin' +alias gm='git commit -m' +alias ga="git add -A" +alias g+='bear -- g++ -Wextra -Werror -std=c++20' +alias s="kitty +kitten ssh" +alias zl='z "" ' +alias jo='joshuto' + +# pwd based on the value of _ZO_RESOLVE_SYMLINKS. +function __zoxide_pwd + builtin pwd -L +end + +# A copy of fish's internal cd function. This makes it possible to use +# `alias cd=z` without causing an infinite loop. +if ! builtin functions -q __zoxide_cd_internal + if builtin functions -q cd + builtin functions -c cd __zoxide_cd_internal + else + alias __zoxide_cd_internal='builtin cd' + end +end + +# cd + custom logic based on the value of _ZO_ECHO. +function __zoxide_cd + __zoxide_cd_internal $argv +end + +# ============================================================================= +# +# Hook configuration for zoxide. +# + +# Initialize hook to add new entries to the database. +function __zoxide_hook --on-variable PWD + test -z "$fish_private_mode" + and command zoxide add -- (__zoxide_pwd) +end + +# ============================================================================= +# +# When using zoxide with --no-cmd, alias these internal functions as desired. +# + +set __zoxide_z_prefix 'z!' + +# Jump to a directory using only keywords. +function __zoxide_z + set -l argc (count $argv) + set -l completion_regex '^'(string escape --style=regex $__zoxide_z_prefix)'(.*)$' + + if test $argc -eq 0 + __zoxide_cd $HOME + else if test "$argv" = - + __zoxide_cd - + else if test $argc -eq 1 -a -d $argv[1] + __zoxide_cd $argv[1] + else if set -l result (string match --groups-only --regex $completion_regex $argv[-1]) + __zoxide_cd $result + else + set -l result (command zoxide query --exclude (__zoxide_pwd) -- $argv) + and __zoxide_cd $result + end +end + +# Completions for `z`. +function __zoxide_z_complete + set -l tokens (commandline --current-process --tokenize) + set -l curr_tokens (commandline --cut-at-cursor --current-process --tokenize) + + if test (count $tokens) -le 2 -a (count $curr_tokens) -eq 1 + # If there are < 2 arguments, use `cd` completions. + __fish_complete_directories "$tokens[2]" '' + else if test (count $tokens) -eq (count $curr_tokens) + # If the last argument is empty, use interactive selection. + set -l query $tokens[2..-1] + set -l result (zoxide query --exclude (__zoxide_pwd) -i -- $query) + and echo $__zoxide_z_prefix$result + commandline --function repaint + end +end + +# Jump to a directory using interactive search. +function __zoxide_zi + set -l result (command zoxide query -i -- $argv) + and __zoxide_cd $result +end + +# ============================================================================= +# +# Commands for zoxide. Disable these using --no-cmd. +# + +abbr --erase z &>/dev/null +complete --command z --erase +function z + __zoxide_z $argv +end +complete --command z --no-files --arguments '(__zoxide_z_complete)' + +abbr --erase zi &>/dev/null +complete --command zi --erase +function zi + __zoxide_zi $argv +end + +# ============================================================================= +# +# To initialize zoxide, add this to your configuration (usually +# ~/.config/fish/config.fish): +# +# zoxide init fish | source +# +# Note: zoxide only supports fish v3.4.0 and above. +# diff --git a/fish/fish_plugins b/fish/fish_plugins new file mode 100644 index 0000000..b2d5f77 --- /dev/null +++ b/fish/fish_plugins @@ -0,0 +1 @@ +ilancosman/tide@v5 diff --git a/fish/functions/_tide_1_line_prompt.fish b/fish/functions/_tide_1_line_prompt.fish new file mode 100644 index 0000000..5772223 --- /dev/null +++ b/fish/functions/_tide_1_line_prompt.fish @@ -0,0 +1,19 @@ +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 new file mode 100644 index 0000000..e9017af --- /dev/null +++ b/fish/functions/_tide_2_line_prompt.fish @@ -0,0 +1,31 @@ +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 new file mode 100644 index 0000000..31e3850 --- /dev/null +++ b/fish/functions/_tide_cache_variables.fish @@ -0,0 +1,17 @@ +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 new file mode 100644 index 0000000..5d96053 --- /dev/null +++ b/fish/functions/_tide_detect_os.fish @@ -0,0 +1,75 @@ +# 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 new file mode 100644 index 0000000..29f2180 --- /dev/null +++ b/fish/functions/_tide_find_and_remove.fish @@ -0,0 +1,3 @@ +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 new file mode 100644 index 0000000..7cb6338 --- /dev/null +++ b/fish/functions/_tide_item_aws.fish @@ -0,0 +1,11 @@ +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 new file mode 100644 index 0000000..10bb324 --- /dev/null +++ b/fish/functions/_tide_item_character.fish @@ -0,0 +1,17 @@ +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 new file mode 100644 index 0000000..02d5fbd --- /dev/null +++ b/fish/functions/_tide_item_chruby.fish @@ -0,0 +1,3 @@ +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 new file mode 100644 index 0000000..bc48bac --- /dev/null +++ b/fish/functions/_tide_item_cmd_duration.fish @@ -0,0 +1,12 @@ +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 new file mode 100644 index 0000000..575c438 --- /dev/null +++ b/fish/functions/_tide_item_context.fish @@ -0,0 +1,15 @@ +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 new file mode 100644 index 0000000..cec9752 --- /dev/null +++ b/fish/functions/_tide_item_crystal.fish @@ -0,0 +1,4 @@ +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 new file mode 100644 index 0000000..4eec0bf --- /dev/null +++ b/fish/functions/_tide_item_docker.fish @@ -0,0 +1,5 @@ +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 new file mode 100644 index 0000000..43d46cb --- /dev/null +++ b/fish/functions/_tide_item_git.fish @@ -0,0 +1,67 @@ +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 new file mode 100644 index 0000000..7c5919f --- /dev/null +++ b/fish/functions/_tide_item_go.fish @@ -0,0 +1,4 @@ +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 new file mode 100644 index 0000000..6105acc --- /dev/null +++ b/fish/functions/_tide_item_java.fish @@ -0,0 +1,4 @@ +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 new file mode 100644 index 0000000..96cf902 --- /dev/null +++ b/fish/functions/_tide_item_jobs.fish @@ -0,0 +1,3 @@ +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 new file mode 100644 index 0000000..ab044b3 --- /dev/null +++ b/fish/functions/_tide_item_kubectl.fish @@ -0,0 +1,4 @@ +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 new file mode 100644 index 0000000..647f606 --- /dev/null +++ b/fish/functions/_tide_item_nix_shell.fish @@ -0,0 +1,3 @@ +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 new file mode 100644 index 0000000..0588051 --- /dev/null +++ b/fish/functions/_tide_item_node.fish @@ -0,0 +1,4 @@ +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 new file mode 100644 index 0000000..8a6208c --- /dev/null +++ b/fish/functions/_tide_item_os.fish @@ -0,0 +1,3 @@ +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 new file mode 100644 index 0000000..abc104e --- /dev/null +++ b/fish/functions/_tide_item_php.fish @@ -0,0 +1,4 @@ +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 new file mode 100644 index 0000000..4eb4684 --- /dev/null +++ b/fish/functions/_tide_item_private_mode.fish @@ -0,0 +1,3 @@ +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 new file mode 100644 index 0000000..2e71645 --- /dev/null +++ b/fish/functions/_tide_item_rustc.fish @@ -0,0 +1,4 @@ +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 new file mode 100644 index 0000000..95dd5ff --- /dev/null +++ b/fish/functions/_tide_item_shlvl.fish @@ -0,0 +1,4 @@ +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 new file mode 100644 index 0000000..3a040fd --- /dev/null +++ b/fish/functions/_tide_item_status.fish @@ -0,0 +1,15 @@ +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 new file mode 100644 index 0000000..8d99fb7 --- /dev/null +++ b/fish/functions/_tide_item_terraform.fish @@ -0,0 +1,6 @@ +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 new file mode 100644 index 0000000..b8522bc --- /dev/null +++ b/fish/functions/_tide_item_time.fish @@ -0,0 +1,3 @@ +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 new file mode 100644 index 0000000..28975d3 --- /dev/null +++ b/fish/functions/_tide_item_toolbox.fish @@ -0,0 +1,3 @@ +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 new file mode 100644 index 0000000..582855d --- /dev/null +++ b/fish/functions/_tide_item_vi_mode.fish @@ -0,0 +1,16 @@ +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 new file mode 100644 index 0000000..0f20cee --- /dev/null +++ b/fish/functions/_tide_item_virtual_env.fish @@ -0,0 +1,11 @@ +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 new file mode 100644 index 0000000..9f31b04 --- /dev/null +++ b/fish/functions/_tide_parent_dirs.fish @@ -0,0 +1,7 @@ +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 new file mode 100644 index 0000000..db5c98b --- /dev/null +++ b/fish/functions/_tide_print_item.fish @@ -0,0 +1,22 @@ +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 new file mode 100644 index 0000000..3bd53b0 --- /dev/null +++ b/fish/functions/_tide_pwd.fish @@ -0,0 +1,37 @@ +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 new file mode 100644 index 0000000..f1111cb --- /dev/null +++ b/fish/functions/_tide_remove_unusable_items.fish @@ -0,0 +1,21 @@ +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 new file mode 100644 index 0000000..5f087c8 --- /dev/null +++ b/fish/functions/_tide_sub_bug-report.fish @@ -0,0 +1,73 @@ +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 new file mode 100644 index 0000000..cb87290 --- /dev/null +++ b/fish/functions/_tide_sub_configure.fish @@ -0,0 +1,95 @@ +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 new file mode 100644 index 0000000..f37cf7d --- /dev/null +++ b/fish/functions/fish_mode_prompt.fish @@ -0,0 +1 @@ +# Disable default vi prompt diff --git a/fish/functions/fish_prompt.fish b/fish/functions/fish_prompt.fish new file mode 100644 index 0000000..3e820c4 --- /dev/null +++ b/fish/functions/fish_prompt.fish @@ -0,0 +1,90 @@ +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 new file mode 100644 index 0000000..78672b0 --- /dev/null +++ b/fish/functions/nheko.fish @@ -0,0 +1,4 @@ +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 new file mode 100644 index 0000000..1a58f40 --- /dev/null +++ b/fish/functions/tide.fish @@ -0,0 +1,27 @@ +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 new file mode 100644 index 0000000..f60a128 --- /dev/null +++ b/fish/functions/tide/configure/choices/all/finish.fish @@ -0,0 +1,33 @@ +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 new file mode 100644 index 0000000..e53bffa --- /dev/null +++ b/fish/functions/tide/configure/choices/all/icons.fish @@ -0,0 +1,33 @@ +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 new file mode 100644 index 0000000..90b1a9d --- /dev/null +++ b/fish/functions/tide/configure/choices/all/prompt_colors.fish @@ -0,0 +1,26 @@ +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 new file mode 100644 index 0000000..ae31ef3 --- /dev/null +++ b/fish/functions/tide/configure/choices/all/prompt_connection.fish @@ -0,0 +1,28 @@ +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 new file mode 100644 index 0000000..b8803b4 --- /dev/null +++ b/fish/functions/tide/configure/choices/all/prompt_connection_andor_frame_color.fish @@ -0,0 +1,36 @@ +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 new file mode 100644 index 0000000..a5bb98b --- /dev/null +++ b/fish/functions/tide/configure/choices/all/prompt_spacing.fish @@ -0,0 +1,21 @@ +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 new file mode 100644 index 0000000..8cf1843 --- /dev/null +++ b/fish/functions/tide/configure/choices/all/show_time.fish @@ -0,0 +1,31 @@ +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 new file mode 100644 index 0000000..ae52bc5 --- /dev/null +++ b/fish/functions/tide/configure/choices/all/style.fish @@ -0,0 +1,57 @@ +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 new file mode 100644 index 0000000..2189f36 --- /dev/null +++ b/fish/functions/tide/configure/choices/classic/classic_prompt_color.fish @@ -0,0 +1,38 @@ +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 new file mode 100644 index 0000000..17b88e4 --- /dev/null +++ b/fish/functions/tide/configure/choices/classic/classic_prompt_separators.fish @@ -0,0 +1,40 @@ +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 new file mode 100644 index 0000000..4db04a8 --- /dev/null +++ b/fish/functions/tide/configure/choices/lean/lean_prompt_height.fish @@ -0,0 +1,26 @@ +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 new file mode 100644 index 0000000..19b3588 --- /dev/null +++ b/fish/functions/tide/configure/choices/powerline/powerline_prompt_frame.fish @@ -0,0 +1,46 @@ +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 new file mode 100644 index 0000000..ac187c9 --- /dev/null +++ b/fish/functions/tide/configure/choices/powerline/powerline_prompt_heads.fish @@ -0,0 +1,40 @@ +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 new file mode 100644 index 0000000..83fef05 --- /dev/null +++ b/fish/functions/tide/configure/choices/powerline/powerline_prompt_height.fish @@ -0,0 +1,30 @@ +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 new file mode 100644 index 0000000..02f4609 --- /dev/null +++ b/fish/functions/tide/configure/choices/powerline/powerline_prompt_tails.fish @@ -0,0 +1,48 @@ +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 new file mode 100644 index 0000000..29f6ccc --- /dev/null +++ b/fish/functions/tide/configure/choices/rainbow/rainbow_prompt_separators.fish @@ -0,0 +1,40 @@ +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 new file mode 100644 index 0000000..9b23f37 --- /dev/null +++ b/fish/functions/tide/configure/configs/classic.fish @@ -0,0 +1,133 @@ +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 new file mode 100644 index 0000000..acdc411 --- /dev/null +++ b/fish/functions/tide/configure/configs/classic_16color.fish @@ -0,0 +1,75 @@ +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 new file mode 100644 index 0000000..2565e0a --- /dev/null +++ b/fish/functions/tide/configure/configs/lean.fish @@ -0,0 +1,133 @@ +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 new file mode 100644 index 0000000..49a8606 --- /dev/null +++ b/fish/functions/tide/configure/configs/lean_16color.fish @@ -0,0 +1,75 @@ +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 new file mode 100644 index 0000000..39ce7bb --- /dev/null +++ b/fish/functions/tide/configure/configs/rainbow.fish @@ -0,0 +1,133 @@ +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 new file mode 100644 index 0000000..c102e2f --- /dev/null +++ b/fish/functions/tide/configure/configs/rainbow_16color.fish @@ -0,0 +1,79 @@ +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 new file mode 100644 index 0000000..4661ab1 --- /dev/null +++ b/fish/functions/tide/configure/functions/_fake_tide_cache_variables.fish @@ -0,0 +1,41 @@ +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 new file mode 100644 index 0000000..73ae055 --- /dev/null +++ b/fish/functions/tide/configure/functions/_fake_tide_item_character.fish @@ -0,0 +1,5 @@ +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 new file mode 100644 index 0000000..5aa13b2 --- /dev/null +++ b/fish/functions/tide/configure/functions/_fake_tide_item_cmd_duration.fish @@ -0,0 +1,3 @@ +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 new file mode 100644 index 0000000..fb5b957 --- /dev/null +++ b/fish/functions/tide/configure/functions/_fake_tide_item_git.fish @@ -0,0 +1,3 @@ +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 new file mode 100644 index 0000000..c614bab --- /dev/null +++ b/fish/functions/tide/configure/functions/_fake_tide_item_newline.fish @@ -0,0 +1,5 @@ +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 new file mode 100644 index 0000000..5255721 --- /dev/null +++ b/fish/functions/tide/configure/functions/_fake_tide_item_os.fish @@ -0,0 +1,3 @@ +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 new file mode 100644 index 0000000..bbce0b5 --- /dev/null +++ b/fish/functions/tide/configure/functions/_fake_tide_item_time.fish @@ -0,0 +1,3 @@ +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 new file mode 100644 index 0000000..30cd024 --- /dev/null +++ b/fish/functions/tide/configure/functions/_fake_tide_print_item.fish @@ -0,0 +1,22 @@ +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 new file mode 100644 index 0000000..11f20ca --- /dev/null +++ b/fish/functions/tide/configure/functions/_fake_tide_prompt.fish @@ -0,0 +1,42 @@ +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 new file mode 100644 index 0000000..433eafa --- /dev/null +++ b/fish/functions/tide/configure/functions/_fake_tide_pwd.fish @@ -0,0 +1,11 @@ +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 new file mode 100644 index 0000000..2c33869 --- /dev/null +++ b/fish/themes/tokyonight_night.theme @@ -0,0 +1,25 @@ + + # 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 new file mode 100644 index 0000000..f79979f --- /dev/null +++ b/fish/tokyonight_night.fish @@ -0,0 +1,34 @@ + # 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 deleted file mode 100644 index be1d5c2..0000000 --- a/flake.nix +++ /dev/null @@ -1,113 +0,0 @@ -{ - 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 new file mode 100644 index 0000000..b22732e --- /dev/null +++ b/fontconfig/fonts.conf @@ -0,0 +1,27 @@ + + + + + + true + + + true + + + hintnone + + + none + + + true + + + lcdnone + + + 102 + + + diff --git a/gtk-3.0/bookmarks b/gtk-3.0/bookmarks new file mode 100644 index 0000000..0b15c6d --- /dev/null +++ b/gtk-3.0/bookmarks @@ -0,0 +1,6 @@ +file:///home/dashie/Pictures +file:///home/dashie/Documents +file:///home/dashie/Downloads +file:///home/dashie/gits +file:///home/dashie/gits/ost-4semester +file:///home/dashie/gits/ost-3semester diff --git a/gtk-3.0/gtk.css b/gtk-3.0/gtk.css new file mode 100644 index 0000000..6f0341d --- /dev/null +++ b/gtk-3.0/gtk.css @@ -0,0 +1,78 @@ +@define-color accent_color #a9b1d6; +@define-color accent_bg_color #a9b1d6; +@define-color accent_fg_color rgba(0, 0, 0, 0.87); +@define-color destructive_color #F28B82; +@define-color destructive_bg_color #F28B82; +@define-color destructive_fg_color rgba(0, 0, 0, 0.87); +@define-color success_color #81C995; +@define-color success_bg_color #81C995; +@define-color success_fg_color rgba(0, 0, 0, 0.87); +@define-color warning_color #FDD633; +@define-color warning_bg_color #FDD633; +@define-color warning_fg_color rgba(0, 0, 0, 0.87); +@define-color error_color #F28B82; +@define-color error_bg_color #F28B82; +@define-color error_fg_color rgba(0, 0, 0, 0.87); +@define-color window_bg_color #1a1b26; +@define-color window_fg_color #c0caf5; +@define-color view_bg_color #1a1b26; +@define-color view_fg_color #c0caf5; +@define-color headerbar_bg_color #1a1b26; +@define-color headerbar_fg_color #c0caf5; +@define-color headerbar_border_color rgba(192, 202, 245, 0.12); +@define-color headerbar_backdrop_color @window_bg_color; +@define-color headerbar_shade_color rgba(0, 0, 0, 0.36); +@define-color card_bg_color #1a1b26; +@define-color card_fg_color #c0caf5; +@define-color card_shade_color rgba(0, 0, 0, 0.36); +@define-color dialog_bg_color #1a1b26; +@define-color dialog_fg_color #c0caf5; +@define-color popover_bg_color #1a1b26; +@define-color popover_fg_color #c0caf5; +@define-color shade_color rgba(0, 0, 0, 0.36); +@define-color scrollbar_outline_color rgba(0, 0, 0, 0.5); +@define-color blue_1 #99c1f1; +@define-color blue_2 #62a0ea; +@define-color blue_3 #3584e4; +@define-color blue_4 #1c71d8; +@define-color blue_5 #1a5fb4; +@define-color green_1 #8ff0a4; +@define-color green_2 #57e389; +@define-color green_3 #33d17a; +@define-color green_4 #2ec27e; +@define-color green_5 #26a269; +@define-color yellow_1 #f9f06b; +@define-color yellow_2 #f8e45c; +@define-color yellow_3 #f6d32d; +@define-color yellow_4 #f5c211; +@define-color yellow_5 #e5a50a; +@define-color orange_1 #ffbe6f; +@define-color orange_2 #ffa348; +@define-color orange_3 #ff7800; +@define-color orange_4 #e66100; +@define-color orange_5 #c64600; +@define-color red_1 #f66151; +@define-color red_2 #ed333b; +@define-color red_3 #e01b24; +@define-color red_4 #c01c28; +@define-color red_5 #a51d2d; +@define-color purple_1 #dc8add; +@define-color purple_2 #c061cb; +@define-color purple_3 #9141ac; +@define-color purple_4 #813d9c; +@define-color purple_5 #613583; +@define-color brown_1 #cdab8f; +@define-color brown_2 #b5835a; +@define-color brown_3 #986a44; +@define-color brown_4 #865e3c; +@define-color brown_5 #63452c; +@define-color light_1 #ffffff; +@define-color light_2 #f6f5f4; +@define-color light_3 #deddda; +@define-color light_4 #c0bfbc; +@define-color light_5 #9a9996; +@define-color dark_1 #77767b; +@define-color dark_2 #5e5c64; +@define-color dark_3 #3d3846; +@define-color dark_4 #241f31; +@define-color dark_5 #000000; diff --git a/gtk-3.0/gtk.css.bak b/gtk-3.0/gtk.css.bak new file mode 100644 index 0000000..6f0341d --- /dev/null +++ b/gtk-3.0/gtk.css.bak @@ -0,0 +1,78 @@ +@define-color accent_color #a9b1d6; +@define-color accent_bg_color #a9b1d6; +@define-color accent_fg_color rgba(0, 0, 0, 0.87); +@define-color destructive_color #F28B82; +@define-color destructive_bg_color #F28B82; +@define-color destructive_fg_color rgba(0, 0, 0, 0.87); +@define-color success_color #81C995; +@define-color success_bg_color #81C995; +@define-color success_fg_color rgba(0, 0, 0, 0.87); +@define-color warning_color #FDD633; +@define-color warning_bg_color #FDD633; +@define-color warning_fg_color rgba(0, 0, 0, 0.87); +@define-color error_color #F28B82; +@define-color error_bg_color #F28B82; +@define-color error_fg_color rgba(0, 0, 0, 0.87); +@define-color window_bg_color #1a1b26; +@define-color window_fg_color #c0caf5; +@define-color view_bg_color #1a1b26; +@define-color view_fg_color #c0caf5; +@define-color headerbar_bg_color #1a1b26; +@define-color headerbar_fg_color #c0caf5; +@define-color headerbar_border_color rgba(192, 202, 245, 0.12); +@define-color headerbar_backdrop_color @window_bg_color; +@define-color headerbar_shade_color rgba(0, 0, 0, 0.36); +@define-color card_bg_color #1a1b26; +@define-color card_fg_color #c0caf5; +@define-color card_shade_color rgba(0, 0, 0, 0.36); +@define-color dialog_bg_color #1a1b26; +@define-color dialog_fg_color #c0caf5; +@define-color popover_bg_color #1a1b26; +@define-color popover_fg_color #c0caf5; +@define-color shade_color rgba(0, 0, 0, 0.36); +@define-color scrollbar_outline_color rgba(0, 0, 0, 0.5); +@define-color blue_1 #99c1f1; +@define-color blue_2 #62a0ea; +@define-color blue_3 #3584e4; +@define-color blue_4 #1c71d8; +@define-color blue_5 #1a5fb4; +@define-color green_1 #8ff0a4; +@define-color green_2 #57e389; +@define-color green_3 #33d17a; +@define-color green_4 #2ec27e; +@define-color green_5 #26a269; +@define-color yellow_1 #f9f06b; +@define-color yellow_2 #f8e45c; +@define-color yellow_3 #f6d32d; +@define-color yellow_4 #f5c211; +@define-color yellow_5 #e5a50a; +@define-color orange_1 #ffbe6f; +@define-color orange_2 #ffa348; +@define-color orange_3 #ff7800; +@define-color orange_4 #e66100; +@define-color orange_5 #c64600; +@define-color red_1 #f66151; +@define-color red_2 #ed333b; +@define-color red_3 #e01b24; +@define-color red_4 #c01c28; +@define-color red_5 #a51d2d; +@define-color purple_1 #dc8add; +@define-color purple_2 #c061cb; +@define-color purple_3 #9141ac; +@define-color purple_4 #813d9c; +@define-color purple_5 #613583; +@define-color brown_1 #cdab8f; +@define-color brown_2 #b5835a; +@define-color brown_3 #986a44; +@define-color brown_4 #865e3c; +@define-color brown_5 #63452c; +@define-color light_1 #ffffff; +@define-color light_2 #f6f5f4; +@define-color light_3 #deddda; +@define-color light_4 #c0bfbc; +@define-color light_5 #9a9996; +@define-color dark_1 #77767b; +@define-color dark_2 #5e5c64; +@define-color dark_3 #3d3846; +@define-color dark_4 #241f31; +@define-color dark_5 #000000; diff --git a/gtk-3.0/settings.ini b/gtk-3.0/settings.ini new file mode 100644 index 0000000..efb1803 --- /dev/null +++ b/gtk-3.0/settings.ini @@ -0,0 +1 @@ +gtk-icon-theme-name = Papirus diff --git a/gtk-4.0/gtk.css b/gtk-4.0/gtk.css new file mode 100644 index 0000000..6f0341d --- /dev/null +++ b/gtk-4.0/gtk.css @@ -0,0 +1,78 @@ +@define-color accent_color #a9b1d6; +@define-color accent_bg_color #a9b1d6; +@define-color accent_fg_color rgba(0, 0, 0, 0.87); +@define-color destructive_color #F28B82; +@define-color destructive_bg_color #F28B82; +@define-color destructive_fg_color rgba(0, 0, 0, 0.87); +@define-color success_color #81C995; +@define-color success_bg_color #81C995; +@define-color success_fg_color rgba(0, 0, 0, 0.87); +@define-color warning_color #FDD633; +@define-color warning_bg_color #FDD633; +@define-color warning_fg_color rgba(0, 0, 0, 0.87); +@define-color error_color #F28B82; +@define-color error_bg_color #F28B82; +@define-color error_fg_color rgba(0, 0, 0, 0.87); +@define-color window_bg_color #1a1b26; +@define-color window_fg_color #c0caf5; +@define-color view_bg_color #1a1b26; +@define-color view_fg_color #c0caf5; +@define-color headerbar_bg_color #1a1b26; +@define-color headerbar_fg_color #c0caf5; +@define-color headerbar_border_color rgba(192, 202, 245, 0.12); +@define-color headerbar_backdrop_color @window_bg_color; +@define-color headerbar_shade_color rgba(0, 0, 0, 0.36); +@define-color card_bg_color #1a1b26; +@define-color card_fg_color #c0caf5; +@define-color card_shade_color rgba(0, 0, 0, 0.36); +@define-color dialog_bg_color #1a1b26; +@define-color dialog_fg_color #c0caf5; +@define-color popover_bg_color #1a1b26; +@define-color popover_fg_color #c0caf5; +@define-color shade_color rgba(0, 0, 0, 0.36); +@define-color scrollbar_outline_color rgba(0, 0, 0, 0.5); +@define-color blue_1 #99c1f1; +@define-color blue_2 #62a0ea; +@define-color blue_3 #3584e4; +@define-color blue_4 #1c71d8; +@define-color blue_5 #1a5fb4; +@define-color green_1 #8ff0a4; +@define-color green_2 #57e389; +@define-color green_3 #33d17a; +@define-color green_4 #2ec27e; +@define-color green_5 #26a269; +@define-color yellow_1 #f9f06b; +@define-color yellow_2 #f8e45c; +@define-color yellow_3 #f6d32d; +@define-color yellow_4 #f5c211; +@define-color yellow_5 #e5a50a; +@define-color orange_1 #ffbe6f; +@define-color orange_2 #ffa348; +@define-color orange_3 #ff7800; +@define-color orange_4 #e66100; +@define-color orange_5 #c64600; +@define-color red_1 #f66151; +@define-color red_2 #ed333b; +@define-color red_3 #e01b24; +@define-color red_4 #c01c28; +@define-color red_5 #a51d2d; +@define-color purple_1 #dc8add; +@define-color purple_2 #c061cb; +@define-color purple_3 #9141ac; +@define-color purple_4 #813d9c; +@define-color purple_5 #613583; +@define-color brown_1 #cdab8f; +@define-color brown_2 #b5835a; +@define-color brown_3 #986a44; +@define-color brown_4 #865e3c; +@define-color brown_5 #63452c; +@define-color light_1 #ffffff; +@define-color light_2 #f6f5f4; +@define-color light_3 #deddda; +@define-color light_4 #c0bfbc; +@define-color light_5 #9a9996; +@define-color dark_1 #77767b; +@define-color dark_2 #5e5c64; +@define-color dark_3 #3d3846; +@define-color dark_4 #241f31; +@define-color dark_5 #000000; diff --git a/gtk-4.0/gtk.css.bak b/gtk-4.0/gtk.css.bak new file mode 100644 index 0000000..6f0341d --- /dev/null +++ b/gtk-4.0/gtk.css.bak @@ -0,0 +1,78 @@ +@define-color accent_color #a9b1d6; +@define-color accent_bg_color #a9b1d6; +@define-color accent_fg_color rgba(0, 0, 0, 0.87); +@define-color destructive_color #F28B82; +@define-color destructive_bg_color #F28B82; +@define-color destructive_fg_color rgba(0, 0, 0, 0.87); +@define-color success_color #81C995; +@define-color success_bg_color #81C995; +@define-color success_fg_color rgba(0, 0, 0, 0.87); +@define-color warning_color #FDD633; +@define-color warning_bg_color #FDD633; +@define-color warning_fg_color rgba(0, 0, 0, 0.87); +@define-color error_color #F28B82; +@define-color error_bg_color #F28B82; +@define-color error_fg_color rgba(0, 0, 0, 0.87); +@define-color window_bg_color #1a1b26; +@define-color window_fg_color #c0caf5; +@define-color view_bg_color #1a1b26; +@define-color view_fg_color #c0caf5; +@define-color headerbar_bg_color #1a1b26; +@define-color headerbar_fg_color #c0caf5; +@define-color headerbar_border_color rgba(192, 202, 245, 0.12); +@define-color headerbar_backdrop_color @window_bg_color; +@define-color headerbar_shade_color rgba(0, 0, 0, 0.36); +@define-color card_bg_color #1a1b26; +@define-color card_fg_color #c0caf5; +@define-color card_shade_color rgba(0, 0, 0, 0.36); +@define-color dialog_bg_color #1a1b26; +@define-color dialog_fg_color #c0caf5; +@define-color popover_bg_color #1a1b26; +@define-color popover_fg_color #c0caf5; +@define-color shade_color rgba(0, 0, 0, 0.36); +@define-color scrollbar_outline_color rgba(0, 0, 0, 0.5); +@define-color blue_1 #99c1f1; +@define-color blue_2 #62a0ea; +@define-color blue_3 #3584e4; +@define-color blue_4 #1c71d8; +@define-color blue_5 #1a5fb4; +@define-color green_1 #8ff0a4; +@define-color green_2 #57e389; +@define-color green_3 #33d17a; +@define-color green_4 #2ec27e; +@define-color green_5 #26a269; +@define-color yellow_1 #f9f06b; +@define-color yellow_2 #f8e45c; +@define-color yellow_3 #f6d32d; +@define-color yellow_4 #f5c211; +@define-color yellow_5 #e5a50a; +@define-color orange_1 #ffbe6f; +@define-color orange_2 #ffa348; +@define-color orange_3 #ff7800; +@define-color orange_4 #e66100; +@define-color orange_5 #c64600; +@define-color red_1 #f66151; +@define-color red_2 #ed333b; +@define-color red_3 #e01b24; +@define-color red_4 #c01c28; +@define-color red_5 #a51d2d; +@define-color purple_1 #dc8add; +@define-color purple_2 #c061cb; +@define-color purple_3 #9141ac; +@define-color purple_4 #813d9c; +@define-color purple_5 #613583; +@define-color brown_1 #cdab8f; +@define-color brown_2 #b5835a; +@define-color brown_3 #986a44; +@define-color brown_4 #865e3c; +@define-color brown_5 #63452c; +@define-color light_1 #ffffff; +@define-color light_2 #f6f5f4; +@define-color light_3 #deddda; +@define-color light_4 #c0bfbc; +@define-color light_5 #9a9996; +@define-color dark_1 #77767b; +@define-color dark_2 #5e5c64; +@define-color dark_3 #3d3846; +@define-color dark_4 #241f31; +@define-color dark_5 #000000; diff --git a/gtk-4.0/servers b/gtk-4.0/servers new file mode 100644 index 0000000..45a22c7 --- /dev/null +++ b/gtk-4.0/servers @@ -0,0 +1,16 @@ + + + + Windows shares on 192.168.1.4 + + + + + + + + + \ No newline at end of file diff --git a/home/common.nix b/home/common.nix deleted file mode 100644 index fe2fa53..0000000 --- a/home/common.nix +++ /dev/null @@ -1,42 +0,0 @@ -{ - 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 deleted file mode 100644 index afc0ab3..0000000 --- a/home/default.nix +++ /dev/null @@ -1,66 +0,0 @@ -{ - 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 deleted file mode 100644 index 38dceea..0000000 --- a/home/sync.nix +++ /dev/null @@ -1,55 +0,0 @@ -# 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 deleted file mode 100644 index 9976455..0000000 --- a/home/themes/default.nix +++ /dev/null @@ -1,8 +0,0 @@ -{ - imports = [ - ./qt.nix - ./kdeglobals.nix - ./oxiced.nix - ./firefoxTheme.nix - ]; -} diff --git a/home/themes/firefoxTheme.nix b/home/themes/firefoxTheme.nix deleted file mode 100644 index 0de46f6..0000000 --- a/home/themes/firefoxTheme.nix +++ /dev/null @@ -1,327 +0,0 @@ -# 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 deleted file mode 100644 index 8fa5003..0000000 --- a/home/themes/kdeglobals.nix +++ /dev/null @@ -1,252 +0,0 @@ -# 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 deleted file mode 100644 index 8a9e7dc..0000000 --- a/home/themes/oxiced.nix +++ /dev/null @@ -1,86 +0,0 @@ -{ - 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 deleted file mode 100644 index 21dc324..0000000 --- a/home/themes/qt.nix +++ /dev/null @@ -1,124 +0,0 @@ -{ - config, - inputs, - pkgs, - lib, - ... -}: let - username = config.conf.username; - # at time of using this here, stylix might not be evaluated yet - # hence ensure it is by using base16 mkSchemeAttrs - base16 = pkgs.callPackage inputs.base16.lib {}; - scheme = base16.mkSchemeAttrs config.stylix.base16Scheme; - # active_colors=#ffc0caf5, #${scheme.base00}, #ff373949, #ff2b2c3b, #ff1a1b26, #ff2b2c3b, #ffc0caf5, #ffc0caf5, #ffc0caf5, #ff1a1b26, #ff1a1b26, #19000000, #ff2b2c3b, #ffc0caf5, #ff3584e4, #ff1b6acb, #ff1a1b26, #ff242530, #ff1a1b26, #ffc0caf5, #ffc0caf5 - # disabled_colors=#ff6d728d, #${scheme.base00}, #ff373949, #ff2b2c3b, #ff1a1b26, #ff2b2c3b, #ff6d728d, #ff6d728d, #ff6d728d, #ff1a1b26, #ff1a1b26, #19000000, #ff2b2c3b, #ff6d728d, #ff3584e4, #ff1b6acb, #ff1a1b26, #ff242530, #ff1a1b26, #ff6d728d, #ff6d728d - # inactive_colors=#ff6d728d, #${scheme.base00}, #ff373949, #ff2b2c3b, #ff1a1b26, #ff2b2c3b, #ff6d728d, #ff6d728d, #ff6d728d, #ff1a1b26, #ff1a1b26, #19000000, #ff2b2c3b, #ff6d728d, #ff3584e4, #ff1b6acb, #ff1a1b26, #ff242530, #ff1a1b26, #ff6d728d, #ff6d728d - color = '' - - - [ColorScheme] - active_colors=#ff${scheme.base05}, #ff${scheme.base01}, #ff${scheme.base01}, #ff${scheme.base01}, #ff${scheme.base00}, #ff${scheme.base00}, #ff${scheme.base05}, #ff${scheme.base04}, #ff${scheme.base05}, #ff${scheme.base00}, #ff${scheme.base00}, #00${scheme.base01}, #ff${scheme.base02}, #ff${scheme.base04}, #ff${scheme.base08}, #ff${scheme.base04}, #ff${scheme.base01}, #ff${scheme.base00}, #ff${scheme.base01}, #ff${scheme.base05}, #ff${scheme.base04} - disabled_colors=#ff${scheme.base05}, #ff${scheme.base01}, #ff${scheme.base01}, #ff${scheme.base01}, #ff${scheme.base00}, #ff${scheme.base00}, #ff${scheme.base05}, #ff${scheme.base04}, #ff${scheme.base05}, #ff${scheme.base00}, #ff${scheme.base00}, #00${scheme.base01}, #ff${scheme.base02}, #ff${scheme.base04}, #ff${scheme.base08}, #ff${scheme.base04}, #ff${scheme.base01}, #ff${scheme.base00}, #ff${scheme.base01}, #ff${scheme.base05}, #ff${scheme.base04} - inactive_colors=#ff${scheme.base05}, #ff${scheme.base01}, #ff${scheme.base01}, #ff${scheme.base01}, #ff${scheme.base00}, #ff${scheme.base00}, #ff${scheme.base05}, #ff${scheme.base04}, #ff${scheme.base05}, #ff${scheme.base00}, #ff${scheme.base00}, #00${scheme.base01}, #ff${scheme.base02}, #ff${scheme.base04}, #ff${scheme.base08}, #ff${scheme.base04}, #ff${scheme.base01}, #ff${scheme.base00}, #ff${scheme.base01}, #ff${scheme.base05}, #ff${scheme.base04} - ''; - qss = '' - - QTabBar::tab:selected { - color: palette(highlight); - } - QMenuBar, QMenu, QToolBar, QStatusBar, QFrame, QScrollBar { - border: none; - } - ''; -in { - stylix.targets.qt = { - enable = false; - }; - qt = { - enable = true; - style.package = pkgs.kdePackages.breeze; - style.name = lib.mkForce "breeze-dark"; - }; - - xdg.configFile = { - "qt5ct/colors/tokyonight.conf" = { - text = "${color}"; - }; - "qt6ct/colors/tokyonight.conf" = { - text = "${color}"; - }; - "qt5ct/qss/tab.qss" = { - text = "${qss}"; - }; - "qt5ct/qt5ct.conf" = { - text = '' - - [Appearance] - color_scheme_path=/home/${username}/.config/qt5ct/colors/tokyonight.conf - custom_palette=true - icon_theme=MoreWaita - standard_dialogs=xdgdesktopportal - style=Breeze - - [Fonts] - fixed="Noto Sans,12,-1,5,50,0,0,0,0,0" - general="Noto Sans,12,-1,5,50,0,0,0,0,0" - - [Interface] - activate_item_on_single_click=2 - buttonbox_layout=3 - cursor_flash_time=1000 - dialog_buttons_have_icons=0 - double_click_interval=400 - gui_effects=General, AnimateMenu, AnimateCombo, AnimateTooltip, AnimateToolBox - keyboard_scheme=4 - menus_have_icons=true - show_shortcuts_in_context_menus=true - stylesheets=/home/${username}/.config/qt5ct/qss/tab.qss, /nix/store/5713p1pv913a6fsn8j7z6ndikcwikbcd-qt5ct-1.8/share/qt5ct/qss/fusion-fixes.qss, /nix/store/5713p1pv913a6fsn8j7z6ndikcwikbcd-qt5ct-1.8/share/qt5ct/qss/scrollbar-simple.qss, /nix/store/5713p1pv913a6fsn8j7z6ndikcwikbcd-qt5ct-1.8/share/qt5ct/qss/sliders-simple.qss, /nix/store/5713p1pv913a6fsn8j7z6ndikcwikbcd-qt5ct-1.8/share/qt5ct/qss/tooltip-simple.qss, /nix/store/5713p1pv913a6fsn8j7z6ndikcwikbcd-qt5ct-1.8/share/qt5ct/qss/traynotification-simple.qss - toolbutton_style=4 - underline_shortcut=0 - wheel_scroll_lines=3 - - [SettingsWindow] - geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\n\0\0\0\0\0\0\0\rK\0\0\x5q\0\0\n\0\0\0\0\0\0\0\r[\0\0\x5\x7f\0\0\0\0\x2\0\0\0\rp\0\0\n\0\0\0\0\0\0\0\rK\0\0\x5q) - - [Troubleshooting] - force_raster_widgets=1 - ignored_applications=@Invalid() - ''; - }; - "qt6ct/qt6ct.conf" = { - text = '' - - [Appearance] - color_scheme_path=/home/${username}/.config/qt6ct/colors/tokyonight.conf - custom_palette=true - standard_dialogs=xdgdesktopportal - style=Breeze - - [Fonts] - fixed="DejaVu LGC Sans,12,-1,5,400,0,0,0,0,0,0,0,0,0,0,1" - general="DejaVu LGC Sans,12,-1,5,400,0,0,0,0,0,0,0,0,0,0,1" - - [Interface] - activate_item_on_single_click=2 - buttonbox_layout=3 - cursor_flash_time=1000 - dialog_buttons_have_icons=0 - double_click_interval=400 - gui_effects=General, AnimateMenu, AnimateCombo, AnimateTooltip, AnimateToolBox - keyboard_scheme=4 - menus_have_icons=true - show_shortcuts_in_context_menus=true - stylesheets=@Invalid() - toolbutton_style=4 - underline_shortcut=1 - wheel_scroll_lines=3 - - [Troubleshooting] - force_raster_widgets=1 - ignored_applications=@Invalid() - ''; - }; - }; -} diff --git a/hypr_desktop/hyprland.conf b/hypr_desktop/hyprland.conf new file mode 100644 index 0000000..e9cb021 --- /dev/null +++ b/hypr_desktop/hyprland.conf @@ -0,0 +1,210 @@ + +# +#fix the fucking portal +exec-once=systemctl --user import-environment +exec-once=dbus-update-activation-environment --all +# +# + +monitor=DP-3,2560x1440@165,0x0,1 +monitor=DP-1,3440x1440@180,2560x0,1 +monitor=DP-2,1920x1200@60,6000x0,1 +monitor=DP-2,transform,1 + +monitor=,highrr,auto,1 + +workspace=DP-3,1 +workspace=DP-1,2 +workspace=DP-2,3 + +input { + kb_file=/home/dashie/.config/keymap.xkb #us with dead_diaeresis on shift + ' to get ä ö ü + kb_layout= + kb_variant= + kb_model= + kb_options= + kb_rules= + repeat_delay=200 + natural_scroll=false + follow_mouse=1 + force_no_accel=true + + touchpad { + natural_scroll=yes + tap-to-click=yes + } +} + +general { + sensitivity=1.0 # for mouse cursor + + gaps_in=5 + gaps_out=10 + border_size=3 + col.active_border=0xFFFF0000 0xFF00FF00 0xFF0000FF 45deg + col.inactive_border=0x66333333 + + apply_sens_to_raw=0 # whether to apply the sensitivity to raw input (e.g. used by games where you aim using your mouse) + +} + +decoration { + rounding=10 + blur=1 + blur_size=3 # minimum 1 + blur_passes=1 # minimum 1 + blur_new_optimizations=true +} + +animations { + enabled=1 + animation=windowsMove,1,5,default + animation=windows,1,7,default + animation=border,1,10,default + animation=fade,1,10,default + animation=workspaces,1,6,default +} + +dwindle { + preserve_split=true + pseudotile=0 # enable pseudotiling on dwindle +} + +gestures { + workspace_swipe=yes +} + +misc { + + vfr=true + vrr = 1 + # animate_manual_resizes=1 + # enable_swallow=true + # swallow_regex=^(.*)(Alacritty)(.*)$ + + } + +#reserve place for bar +#monitor=eDP-1,addreserved,45,0,0,0 + +# example window rules +# for windows named/classed as abc and xyz +windowrule=tile,^(.*)(Spotify)(.*)$ +windowrule=float,^(.*)(Steam)(.*)$ +windowrule=float,^(.*)(Calculator)(.*)$ +windowrule=float,^(.*)(winecfg.exe)(.*)$ +windowrule=float,^(.*)(speed.exe)(.*)$ +windowrule=float,^(.*)(copyq)(.*)$ +windowrule=center,^(.*)(gnome)(.*)$ +# windowrule=windowdance,^(.*)(ota)(.*)$ +windowrule=forceinput,^(.*)(ota)(.*)$ +windowrule=size 1200 800,^(org.gnome.NautilusPreviewer)$ +windowrule=center,^(.*)(swappy)(.*)$ +windowrule=opacity 80,^(.*)(dunst)(.*)$ +windowrule=float,title:^(.*)(Spirit)(.*)$ +#windowrule=tile,xyz +#windowrule=float,abc +#windowrule=pseudo,abc +#windowrule=monitor 0,xyz + +# example binds +bind=SUPER,S,exec,grim -g "$(slurp)" - | wl-copy +bind=SUPERSHIFTALT,S,exec, grim -g "$(slurp)" $HOME/gits/ost-4semester/Screenshots/$(date +'%Y_%m_%d_%I_%M_%S.png') && (date +'%Y_%m_%d_%I_%M_%S.png') | wl-copy +bind=SUPERSHIFT,S,exec,grim -g "$(slurp)" - | swappy -f - +bind=SUPER,F,exec,firefox +bind=SUPER,T,exec,kitty +bind=SUPER,Q,killactive, +bind=SUPER,M,exit, +bind=SUPER,E,exec,nautilus --new-window +bind=SUPER,V,togglefloating, +bind=SUPER,B,fullscreen, +bind=SUPER,R,exec,rofi -show drun -theme tokyonight +bind=SUPERSHIFT,R,exec,rofi -show run -theme tokyonight +bind=SUPER,C,togglesplit +bind=SUPER,G,exec,calculator --gui +bind=SUPERSHIFT,L,exec, playerctl -a pause & swaylock -c 000000 & systemctl suspend +bind=,XF86AudioMute,exec,pactl set-sink-mute @DEFAULT_SINK@ toggle +bind=,XF86AudioLowerVolume,exec, $HOME/.config/eww/scripts/change-volume sink -5% +bind=,XF86AudioRaiseVolume,exec, $HOME/.config/eww/scripts/change-volume sink +5% +bind=,XF86AudioPlay,exec, playerctl play-pause +bind=,XF86AudioNext,exec, playerctl next +bind=,XF86AudioPrev,exec, playerctl previous +bind=,XF86MonBrightnessDown,exec, $HOME/.config/eww/scripts/change-brightness brightness 10%- +bind=,XF86MonBrightnessUp,exec, $HOME/.config/eww/scripts/change-brightness brightness +10% +bind=SUPER,D,exec,$HOME/.config/eww/scripts/cockpit_toggle +bind=SUPER,A,exec,copyq toggle + + +binde=SUPER,bracketleft,movefocus,l +binde=SUPER,bracketright,movefocus,r +binde=SUPER,semicolon,movefocus,u +binde=SUPER,apostrophe,movefocus,d + +bind=SUPER,left,movewindow,l +bind=SUPER,right,movewindow,r +bind=SUPER,up,movewindow,u +bind=SUPER,down,movewindow,d + +bind=SUPER,1,workspace,1 +bind=SUPER,2,workspace,2 +bind=SUPER,3,workspace,3 +bind=SUPER,4,workspace,4 +bind=SUPER,5,workspace,5 +bind=SUPER,6,workspace,6 +bind=SUPER,7,workspace,7 +bind=SUPER,8,workspace,8 +bind=SUPER,9,workspace,9 +bind=SUPER,0,workspace,10 + +bind=SUPERSHIFT,1,movetoworkspace,1 +bind=SUPERSHIFT,2,movetoworkspace,2 +bind=SUPERSHIFT,3,movetoworkspace,3 +bind=SUPERSHIFT,4,movetoworkspace,4 +bind=SUPERSHIFT,5,movetoworkspace,5 +bind=SUPERSHIFT,6,movetoworkspace,6 +bind=SUPERSHIFT,7,movetoworkspace,7 +bind=SUPERSHIFT,8,movetoworkspace,8 +bind=SUPERSHIFT,9,movetoworkspace,9 +bind=SUPERSHIFT,0,movetoworkspace,10 + +bind=SUPERSHIFTALT,1,movetoworkspacesilent,1 +bind=SUPERSHIFTALT,2,movetoworkspacesilent,2 +bind=SUPERSHIFTALT,3,movetoworkspacesilent,3 +bind=SUPERSHIFTALT,4,movetoworkspacesilent,4 +bind=SUPERSHIFTALT,5,movetoworkspacesilent,5 +bind=SUPERSHIFTALT,6,movetoworkspacesilent,6 +bind=SUPERSHIFTALT,7,movetoworkspacesilent,7 +bind=SUPERSHIFTALT,8,movetoworkspacesilent,8 +bind=SUPERSHIFTALT,9,movetoworkspacesilent,9 +bind=SUPERSHIFTALT,0,movetoworkspacesilent,10 + +bindm=SUPER,mouse:272,movewindow +bindm=SUPER,mouse:273,resizewindow + +binde=SUPER,O,resizeactive,-20 0 +binde=SUPER,P,resizeactive,20 0 +binde=SUPER,K,resizeactive,0 -20 +binde=SUPER,L,resizeactive,0 20 + +#binds for debug testing + +bind=SUPERALT,H,pass,^(wlroots)$ +bind=SUPERALT,J,pass,^(wlroots)$ + +bind=SUPERALT,left,pass,^(wlroots)$ +bind=SUPERALT,right,pass,^(wlroots)$ +bind=SUPERALT,up,pass,^(wlroots)$ +bind=SUPERALT,down,pass,^(wlroots)$ +bind=CTRLALT,P,pass,^(parcellite)$ + + +#autostart programs +#exec=~/Documents/scripts/hyprstart.sh +#exec=hyprstart.sh +exec-once=hyprpaper +exec-once=eww daemon +exec-once=eww open bar +exec-once=element-desktop +exec-once=firefox +exec-once=streamdeck -n +exec-once = copyq --start-server diff --git a/hypr_desktop/hyprlandd.conf b/hypr_desktop/hyprlandd.conf new file mode 100644 index 0000000..eaef5ca --- /dev/null +++ b/hypr_desktop/hyprlandd.conf @@ -0,0 +1,66 @@ + + +input { + repeat_delay=200 + natural_scroll=false + follow_mouse=1 + force_no_accel=true + + touchpad { + natural_scroll=yes + tap-to-click=yes + } +} + +general { + sensitivity=1.0 + + gaps_in=5 + gaps_out=10 + border_size=3 + col.active_border=0x66ee1111 + col.inactive_border=0x66333333 + + apply_sens_to_raw=0 + +} + +decoration { + rounding=10 + blur=1 + blur_size=3 + blur_passes=1 + blur_new_optimizations=true +} + +animations { + enabled=1 +} + +dwindle { + preserve_split=true + pseudotile=0 +} + +gestures { +} + +misc { + animate_manual_resizes = 1 + } + +bind=SUPERALT,H,exec,alacritty + +bind=SUPERALT,left,movewindow,l +bind=SUPERALT,right,movewindow,r +bind=SUPERALT,up,movewindow,u +bind=SUPERALT,down,movewindow,d +bind=SUPERALT,J,fullscreen + +bindm=SUPER,mouse:272,movewindow +bindm=SUPER,mouse:273,resizewindow +binde=SUPER,O,resizeactive,-20 0 +binde=SUPER,P,resizeactive,20 0 +binde=SUPER,K,resizeactive,0 -20 +binde=SUPER,L,resizeactive,0 20 + diff --git a/hypr_desktop/hyprpaper.conf b/hypr_desktop/hyprpaper.conf new file mode 100644 index 0000000..2137dc8 --- /dev/null +++ b/hypr_desktop/hyprpaper.conf @@ -0,0 +1,8 @@ + +# wallpaper +preload = /home/dashie/Pictures/backgrounds/arch-chan2.jpg +preload = /home/dashie/Pictures/backgrounds/Arch_chan.png +preload = /home/dashie/Pictures/backgrounds/arch-chan3-2560.png +wallpaper = DP-2,/home/dashie/Pictures/backgrounds/arch-chan2.jpg +wallpaper = DP-1,/home/dashie/Pictures/backgrounds/Arch_chan.png +wallpaper = DP-3,/home/dashie/Pictures/backgrounds/arch-chan3-2560.png diff --git a/hypr_laptop/hyprland.conf b/hypr_laptop/hyprland.conf new file mode 100644 index 0000000..f06a7fb --- /dev/null +++ b/hypr_laptop/hyprland.conf @@ -0,0 +1,188 @@ +# +#fix the fucking portal +exec-once=systemctl --user import-environment +exec-once=dbus-update-activation-environment --all +# + +monitor=eDP-1,1920x1080@144,0x0,1 +monitor=,highrr,1920x0,1 +input { + kb_file=/home/dashie/.config/keymap.xkb #us with dead_diaeresis on shift + ' to get ä ö ü + repeat_delay=200 + repeat_rate=35 + natural_scroll=false + follow_mouse=1 + force_no_accel=true + + touchpad { + natural_scroll=yes + tap-to-click=yes + } +} + +general { + sensitivity=1.0 # for mouse cursor + + gaps_in=5 + gaps_out=10 + border_size=3 + col.active_border=0xFFFF0000 0xFF00FF00 0xFF0000FF 60deg + col.inactive_border=0x66333333 + + apply_sens_to_raw=0 # whether to apply the sensitivity to raw input (e.g. used by games where you aim using your mouse) + +} + +decoration { + rounding=10 + blur=yes + blur=0 + blur_size=3 # minimum 1 + blur_passes=1 # minimum 1 + blur_new_optimizations=true +} +animations { + enabled=1 + animation=windowsMove,1,5,default + animation=windows,1,5,default + animation=border,1,10,default + animation=fade,1,10,default + animation=workspaces,1,3,default +} + +dwindle { + preserve_split=true + pseudotile=0 # enable pseudotiling on dwindle +} + +gestures { + workspace_swipe=yes +} + +misc { + vfr=true + vrr=1 + # enable_swallow=true + # swallow_regex=^(.*)(kitty)(.*)$ + } + +# debug { +# overlay=true +# } + +#reserve place for bar +#monitor=eDP-1,addreserved,45,0,0,0 + +# example window rules +# for windows named/classed as abc and xyz +windowrule=opacity 80,^(.*)(dunst)(.*)$ +windowrule=float,^(.*)(Calculator)(.*)$ +windowrule=float,^(.*)(copyq)(.*)$ +windowrule=dimaround,^(.*)(onagre)(.*)$ +windowrule=noborder,^(.*)(onagre)(.*)$ +#windowrule=tile,xyz +#windowrule=float,abc +#windowrule=pseudo,abc +#windowrule=monitor 0,xyz + +# example binds +bind=SUPER,S,exec,grim -g "$(slurp)" - | wl-copy +bind=SUPER,F,exec,firefox +bind=SUPER,T,exec,kitty +bind=SUPER,Q,killactive, +bind=SUPER,M,exit, +bind=SUPER,E,exec,nautilus --new-window +bind=SUPER,V,togglefloating, +bind=SUPER,R,exec,rofi -show drun -theme tokyonight +bind=SUPERSHIFT,R,exec,rofi -show run -theme tokyonight +bind=SUPER,C,togglesplit +bind=SUPER,B,fullscreen +bind=SUPER,G,exec,calculator --gui +bind=SUPERSHIFT,L,exec, playerctl --all-players -a pause & swaylock -c 000000 & systemctl suspend +bind=,XF86AudioMute,exec, $HOME/.config/eww/scripts/toggle-mute +bind=,XF86AudioLowerVolume,exec, $HOME/.config/eww/scripts/change-volume sink -5% +bind=,XF86AudioRaiseVolume,exec, $HOME/.config/eww/scripts/change-volume sink +5% +bind=,XF86AudioPlay,exec, playerctl --player=ncspot,firefox play-pause +bind=,XF86AudioNext,exec, playerctl --player=ncspot,firefox next +bind=,XF86AudioPrev,exec, playerctl --player=ncspot,firefox previous +bind=,XF86MonBrightnessDown,exec, $HOME/.config/eww/scripts/change-brightness brightness 10%- +bind=,XF86MonBrightnessUp,exec, $HOME/.config/eww/scripts/change-brightness brightness +10% +bind=SUPERSHIFT,S,exec, grim -g "$(slurp)" - | swappy -f - +bind=SUPERSHIFTALT,S,exec, grim -g "$(slurp)" $HOME/gits/ost-4semester/Screenshots/$(date +'%Y_%m_%d_%I_%M_%S.png') && (date +'%Y_%m_%d_%I_%M_%S.png') | wl-copy +bind=SUPER,D,exec, $HOME/.config/eww/scripts/cockpit_toggle +bind=,Print,exec, grim - | wl-copy +bind=SUPER,A,exec,copyq toggle +# bind=SUPERALT,H,pass,^(wlroots)$ +# bind=SUPERALT,left,pass,^(wlroots)$ +# bind=SUPERALT,right,pass,^(wlroots)$ +# bind=SUPERALT,up,pass,^(wlroots)$ +# bind=SUPERALT,down,pass,^(wlroots)$ + +bind=SUPER,bracketleft,movefocus,l +bind=SUPER,bracketright,movefocus,r +bind=SUPER,semicolon,movefocus,u +bind=SUPER,apostrophe,movefocus,d + +bind=SUPER,left,movewindow,l +bind=SUPER,right,movewindow,r +bind=SUPER,up,movewindow,u +bind=SUPER,down,movewindow,d + +# bind=SUPERALT,left,movecursortocorner,2 +# bind=SUPERALT,left,exec, hyprctl dispatch movewindow && hyprctl dispatch moveactive -1000 300 && sleep 0.5 && hyprctl dispatch togglefloating + +bind=SUPER,1,workspace,1 +bind=SUPER,2,workspace,2 +bind=SUPER,3,workspace,3 +bind=SUPER,4,workspace,4 +bind=SUPER,5,workspace,5 +bind=SUPER,6,workspace,6 +bind=SUPER,7,workspace,7 +bind=SUPER,8,workspace,8 +bind=SUPER,9,workspace,9 +bind=SUPER,0,workspace,10 + +bind=SUPERSHIFT,1,movetoworkspace,1 +bind=SUPERSHIFT,2,movetoworkspace,2 +bind=SUPERSHIFT,3,movetoworkspace,3 +bind=SUPERSHIFT,4,movetoworkspace,4 +bind=SUPERSHIFT,5,movetoworkspace,5 +bind=SUPERSHIFT,6,movetoworkspace,6 +bind=SUPERSHIFT,7,movetoworkspace,7 +bind=SUPERSHIFT,8,movetoworkspace,8 +bind=SUPERSHIFT,9,movetoworkspace,9 +bind=SUPERSHIFT,0,movetoworkspace,10 + +bind=SUPERSHIFTALT,1,movetoworkspacesilent,1 +bind=SUPERSHIFTALT,2,movetoworkspacesilent,2 +bind=SUPERSHIFTALT,3,movetoworkspacesilent,3 +bind=SUPERSHIFTALT,4,movetoworkspacesilent,4 +bind=SUPERSHIFTALT,5,movetoworkspacesilent,5 +bind=SUPERSHIFTALT,6,movetoworkspacesilent,6 +bind=SUPERSHIFTALT,7,movetoworkspacesilent,7 +bind=SUPERSHIFTALT,8,movetoworkspacesilent,8 +bind=SUPERSHIFTALT,9,movetoworkspacesilent,9 +bind=SUPERSHIFTALT,0,movetoworkspacesilent,10 + +bind=SUPER,mouse_down,workspace,e+1 +bind=SUPER,mouse_up,workspace,e-1 +bindm=SUPER,mouse:272,movewindow +bindm=SUPER,mouse:273,resizewindow + +binde=SUPER,O,resizeactive,-20 0 +binde=SUPER,P,resizeactive,20 0 +binde=SUPER,K,resizeactive,0 -20 +binde=SUPER,L,resizeactive,0 20 + +#autostart programs +#exec=~/Documents/scripts/hyprstart.sh +#exec=hyprstart.sh +exec-once=hyprpaper +exec-once=eww daemon +exec-once=eww open bar +exec-once=nheko +# exec-once=flatpak run --branch=stable --arch=x86_64 --command=/app/bin/schildichat-desktop --file-forwarding chat.schildi.desktop --enable-features=ozonePlatform,WebRTCPipeWireCapturer --ozone-platform=wayland +exec-once=firefox +exec-once=nextcloud +exec-once=kitty -e ncspot +exec-once = copyq --start-server diff --git a/hypr_laptop/hyprlandd.conf b/hypr_laptop/hyprlandd.conf new file mode 100644 index 0000000..1bbaaa7 --- /dev/null +++ b/hypr_laptop/hyprlandd.conf @@ -0,0 +1,128 @@ +monitor=,1920x1080@144,0x0,1 +input { + repeat_delay=200 + natural_scroll=false + follow_mouse=1 + force_no_accel=true + + touchpad { + natural_scroll=yes + tap-to-click=yes + } +} + +general { + sensitivity=1.0 # for mouse cursor + + gaps_in=5 + gaps_out=10 + border_size=3 + col.active_border=0x66ee1111 + col.inactive_border=0x66333333 + + apply_sens_to_raw=0 # whether to apply the sensitivity to raw input (e.g. used by games where you aim using your mouse) + +} + +decoration { + rounding=10 + blur=yes + blur=1 + blur_size=3 # minimum 1 + blur_passes=1 # minimum 1 + blur_new_optimizations=true + + drop_shadow=false +} + +animations { + bezier=test,0.5,0.5,0.5,0.5 + enabled=1 + animation=windowsMove,1,1,default + animation=windows,1,5,default + animation=border,1,10,default + animation=fade,1,10,default + animation=workspaces,1,3,default +} + +dwindle { + preserve_split=true + pseudotile=0 # enable pseudotiling on dwindle +} + +gestures { + workspace_swipe=yes +} + +misc { + animate_manual_resizes=true + animate_mouse_windowdragging=true + enable_swallow=true + swallow_regex=^(.*)(Alacritty)(.*)$ + } + +# debug { +# overlay=true +# } + +#reserve place for bar +#monitor=eDP-1,addreserved,45,0,0,0 + +# example window rules +# for windows named/classed as abc and xyz +#windowrule=tile,xyz +#windowrule=float,abc +#windowrule=pseudo,abc +#windowrule=monitor 0,xyz + +# example binds +bind=SUPER,T,exec,alacritty +bind=SUPER,Q,killactive, +bind=SUPER,M,exit, +bind=SUPER,V,togglefloating, +bind=SUPER,C,togglesplit +bind=SUPER,B,fullscreen +bind=SUPER,H,exec,alacritty + +bind=SUPER,bracketleft,movefocus,l +bind=SUPER,bracketright,movefocus,r +bind=SUPER,semicolon,movefocus,u +bind=SUPER,apostrophe,movefocus,d + +bind=SUPERALT,left,movewindow,l +bind=SUPERALT,right,movewindow,r +bind=SUPERALT,up,movewindow,u +bind=SUPERALT,down,movewindow,d + +bind=SUPER,1,workspace,1 +bind=SUPER,2,workspace,2 +bind=SUPER,3,workspace,3 +bind=SUPER,4,workspace,4 +bind=SUPER,5,workspace,5 +bind=SUPER,6,workspace,6 +bind=SUPER,7,workspace,7 +bind=SUPER,8,workspace,8 +bind=SUPER,9,workspace,9 +bind=SUPER,0,workspace,10 + +bind=SUPERSHIFT,1,movetoworkspace,1 +bind=SUPERSHIFT,2,movetoworkspace,2 +bind=SUPERSHIFT,3,movetoworkspace,3 +bind=SUPERSHIFT,4,movetoworkspace,4 +bind=SUPERSHIFT,5,movetoworkspace,5 +bind=SUPERSHIFT,6,movetoworkspace,6 +bind=SUPERSHIFT,7,movetoworkspace,7 +bind=SUPERSHIFT,8,movetoworkspace,8 +bind=SUPERSHIFT,9,movetoworkspace,9 +bind=SUPERSHIFT,0,movetoworkspace,10 + +bind=SUPER,mouse_down,workspace,e+1 +bind=SUPER,mouse_up,workspace,e-1 +bindm=SUPER,mouse:272,movewindow +bindm=SUPER,mouse:273,resizewindow + +binde=SUPER,O,resizeactive,-20 0 +binde=SUPER,P,resizeactive,20 0 +binde=SUPER,K,resizeactive,0 -20 +binde=SUPER,L,resizeactive,0 20 + diff --git a/hypr_laptop/hyprpaper.conf b/hypr_laptop/hyprpaper.conf new file mode 100644 index 0000000..199e59a --- /dev/null +++ b/hypr_laptop/hyprpaper.conf @@ -0,0 +1,5 @@ + +# wallpaper +preload = /home/dashie/Pictures/backgrounds/arch-chan3-1920.png +wallpaper = eDP-1,/home/dashie/Pictures/backgrounds/arch-chan3-1920.png +ipc = off diff --git a/iso/configuration.nix b/iso/configuration.nix deleted file mode 100644 index 9272a65..0000000 --- a/iso/configuration.nix +++ /dev/null @@ -1,86 +0,0 @@ -{ - pkgs, - modulesPath, - lib, - self, - inputs, - ... -}: let - system = "x86_64-linux"; -in { - imports = ["${modulesPath}/installer/cd-dvd/iso-image.nix"]; - nixpkgs.hostPlatform = { - inherit system; - }; - - environment.systemPackages = with pkgs; [ - inputs.dashvim.packages.${system}.minimal - disko - git - firefox - kitty - gnome-disk-utility - inputs.disko.packages.${system}.disko-install - ]; - - networking = { - wireless.enable = false; - networkmanager.enable = true; - }; - - nix.settings.experimental-features = [ - "nix-command" - "flakes" - "pipe-operators" - ]; - - users.users.nixos = { - isNormalUser = true; - password = "nixos"; - extraGroups = ["wheel"]; - }; - - image.baseName = lib.mkForce "DashNix"; - - programs = { - hyprland = { - enable = true; - withUWSM = true; - xwayland.enable = false; - }; - uwsm.enable = true; - }; - - fonts.packages = [pkgs.adwaita-fonts]; - i18n.defaultLocale = "en_US.UTF-8"; - - services = { - displayManager.autoLogin = { - enable = true; - user = "nixos"; - }; - greetd = { - enable = true; - settings = { - terminal.vt = 1; - default_session = { - command = "${lib.getExe pkgs.hyprland}"; - user = "nixos"; - }; - }; - }; - }; - - isoImage = { - makeEfiBootable = true; - makeUsbBootable = true; - contents = [ - { - source = "${self}/example"; - target = "example-config"; - } - ]; - }; - - system.stateVersion = "25.11"; -} diff --git a/joshuto/joshuto.toml b/joshuto/joshuto.toml new file mode 100644 index 0000000..160e4a8 --- /dev/null +++ b/joshuto/joshuto.toml @@ -0,0 +1,5 @@ +xdg_open = true +[preview] +max_preview_size = 50000097152 +preview_shown_hook_script = "~/.config/joshuto/on_preview_shown" +preview_removed_hook_script = "~/.config/joshuto/on_preview_removed" diff --git a/joshuto/on_preview_removed.sh b/joshuto/on_preview_removed.sh new file mode 100755 index 0000000..bd66564 --- /dev/null +++ b/joshuto/on_preview_removed.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash + +kitty +kitten icat \ + --transfer-mode=file \ + --clear 2>/dev/null diff --git a/joshuto/on_preview_shown b/joshuto/on_preview_shown new file mode 100755 index 0000000..c1f6a9d --- /dev/null +++ b/joshuto/on_preview_shown @@ -0,0 +1,32 @@ +#!/usr/bin/env bash + +FILE_PATH="$1" # Full path of the previewed file +PREVIEW_X_COORD="$2" # x coordinate of upper left cell of preview area +PREVIEW_Y_COORD="$3" # y coordinate of upper left cell of preview area +PREVIEW_WIDTH="$4" # Width of the preview pane (number of fitting characters) +PREVIEW_HEIGHT="$5" # Height of the preview pane (number of fitting characters) + +TMP_FILE="$HOME/.cache/joshuto/thumbcache.png" + +mimetype=$(file --mime-type -Lb "$FILE_PATH") + +function image { + kitty +kitten icat \ + --transfer-mode=file \ + --clear 2>/dev/null + kitty +kitten icat \ + --transfer-mode=file \ + --place "${PREVIEW_WIDTH}x${PREVIEW_HEIGHT}@${PREVIEW_X_COORD}x${PREVIEW_Y_COORD}" \ + "$1" 2>/dev/null +} + +case "$mimetype" in + image/*) + image "${FILE_PATH}" + ;; + *) + kitty +kitten icat \ + --transfer-mode=file \ + --clear 2>/dev/null + ;; +esac diff --git a/joshuto/preview.sh b/joshuto/preview.sh new file mode 100755 index 0000000..8b91cb9 --- /dev/null +++ b/joshuto/preview.sh @@ -0,0 +1,202 @@ +#!/usr/bin/env bash +# ranger supports enhanced previews. If the option "use_preview_script" +# is set to True and this file exists, this script will be called and its +# output is displayed in ranger. ANSI color codes are supported. + +# NOTES: This script is considered a configuration file. If you upgrade +# ranger, it will be left untouched. (You must update it yourself.) +# Also, ranger disables STDIN here, so interactive scripts won't work properly + +# Meanings of exit codes: +# code | meaning | action of ranger +# -----+------------+------------------------------------------- +# 0 | success | success. display stdout as preview +# 1 | no preview | failure. display no preview at all +# 2 | plain text | display the plain content of the file +# 3 | fix width | success. Don't reload when width changes +# 4 | fix height | success. Don't reload when height changes +# 5 | fix both | success. Don't ever reload +# 6 | image | success. display the image $cached points to as an image preview +# 7 | image | success. display the file directly as an image + +# Meaningful aliases for arguments: +path="$1" # Full path of the selected file +width="$2" # Width of the preview pane (number of fitting characters) +height="$3" # Height of the preview pane (number of fitting characters) +cached="$4" # Path that should be used to cache image previews +preview_images="$5" # "True" if image previews are enabled, "False" otherwise. +x_coord=0 +y_coord=0 +cache_path="" + +while [ "$#" -gt 0 ]; do + case "$1" in + "--path") + shift + path="$1" + ;; + "--preview-width") + shift + width="$1" + ;; + "--preview-height") + shift + height="$1" + ;; + "--x-coord") + shift + x_coord="$1" + ;; + "--y-coord") + shift + y_coord="$1" + ;; + "--preview-images") + shift + preview_images="$1" + ;; + "--image-cache") + shift + cache_path="$1" + ;; + esac + shift +done + + +maxln=200 # Stop after $maxln lines. Can be used like ls | head -n $maxln + +# Find out something about the file: +mimetype=$(file --mime-type -Lb "$path") +extension=$(/bin/echo "${path##*.}" | awk '{print tolower($0)}') +realpath=$(realpath "$path") + +# Functions: +# runs a command and saves its output into $output. Useful if you need +# the return value AND want to use the output in a pipe +try() { output=$(eval '"$@"'); } + +# writes the output of the previously used "try" command +dump() { /bin/echo "$output"; } + +# a common post-processing function used after most commands +trim() { head -n "$maxln"; } + +# wraps highlight to treat exit code 141 (killed by SIGPIPE) as success +safepipe() { "$@"; test $? = 0 -o $? = 141; } + +tmsu_tag_list() { + taglist=`tmsu tags -n never -1 "$path"` + result=$? + if [ $result -eq 0 ]; then + if [ -z "$taglist" ]; then + echo "No Tags" + else + taglist=`echo "$taglist" | sed 's/^/ • /'` + echo "Tags:" + echo "$taglist" + fi + fi +} + + + +# case "$mimetype" in +# image/* | video/* | audio/*) +# image_output="Tags:\n `tmsu tags -n never -1 "$path" | sed 's/^/ • /'`" +# echo -e "$image_output" +# esac + +# Image previews, if enabled in ranger. +if [ "$preview_images" = "True" ]; then + case "$mimetype" in + # Image previews for SVG files, disabled by default. + ###image/svg+xml) + ### convert "$path" "$cached" && exit 6 || exit 1;; + # Image previews for image files. w3mimgdisplay will be called for all + # image files (unless overriden as above), but might fail for + # unsupported types. + image/*) + exit 7;; + # Image preview for video, disabled by default.: + ###video/*) + ### ffmpegthumbnailer -i "$path" -o "$cached" -s 0 && exit 6 || exit 1;; + esac +fi + +case "$extension" in + # Archive extensions: + a|ace|alz|arc|arj|bz|bz2|cab|cpio|deb|gz|jar|lha|lz|lzh|lzma|lzo|\ + rpm|rz|t7z|tar|tbz|tbz2|tgz|tlz|txz|tZ|tzo|war|xpi|xz|Z|zip) + try als "$path" && { dump | trim; exit 0; } + try acat "$path" && { dump | trim; exit 3; } + try bsdtar -lf "$path" && { dump | trim; exit 0; } + exit 1;; + rar) + # avoid password prompt by providing empty password + try unrar -p- lt "$path" && { dump | trim; exit 0; } || exit 1;; + 7z) + # avoid password prompt by providing empty password + try 7z -p l "$path" && { dump | trim; exit 0; } || exit 1;; + # PDF documents: + pdf) + try pdftotext -l 10 -nopgbrk -q "$path" - && \ + { dump | trim | fmt -s -w $width; exit 0; } || exit 1;; + # BitTorrent Files + torrent) + try transmission-show "$path" && { dump | trim; exit 5; } || exit 1;; + # ODT Files + odt|ods|odp|sxw) + try odt2txt "$path" && { dump | trim; exit 5; } || exit 1;; + # HTML Pages: + htm|html|xhtml) + try w3m -dump "$path" && { dump | trim | fmt -s -w $width; exit 4; } + try lynx -dump "$path" && { dump | trim | fmt -s -w $width; exit 4; } + try elinks -dump "$path" && { dump | trim | fmt -s -w $width; exit 4; } + ;; # fall back to highlight/cat if the text browsers fail +esac + +case "$mimetype" in + # Syntax highlight for text files: + text/* | */xml | */json) + if [ "$(tput colors)" -ge 256 ]; then + pygmentize_format=terminal256 + highlight_format=xterm256 + else + pygmentize_format=terminal + highlight_format=ansi + fi + #try safepipe highlight --out-format=${highlight_format} "$path" && { dump | trim; exit 5; } + #try safepipe pygmentize -f ${pygmentize_format} "$path" && { dump | trim; exit 5; } + try safepipe bat -pp --color always "$path" && { dump | trim; exit 5; } + cat "$path" + exit 2;; + image/png | image/jpeg | image/gif) + dimension="Size `exiftool "$path" | grep '^Image Size' | awk '{print $4}'`" + tags=$(tmsu_tag_list) + echo "$realpath" + echo "$dimension" + echo "$tags" + meta_file="$(get_preview_meta_file $path)" + let y_offset=`printf "${tags}" | sed -n '=' | wc -l`+3 + echo "y-offset $y_offset" > "$meta_file" + exit 4 + ;; + image/*) + tags=$(tmsu_tag_list) + echo "$tags" + echo "$realpath" + exit 4 + #img2txt --gamma=0.6 --width="$width" "$path" && exit 4 || exit 1 + ;; + # Display information about media files: + video/* | audio/*) + tags=$(tmsu_tag_list) + echo "$tags" + echo "$realpath" + exiftool "$path" && exit 5 + # Use sed to remove spaces so the output fits into the narrow window + try mediainfo "$path" && { dump | trim | sed 's/ \+:/: /;'; exit 5; } || exit 1;; +esac + +exit 1 diff --git a/keymap.xkb b/keymap.xkb new file mode 100644 index 0000000..d772778 --- /dev/null +++ b/keymap.xkb @@ -0,0 +1,1581 @@ +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 new file mode 100644 index 0000000..5f7abbf --- /dev/null +++ b/kitty/kitty.conf @@ -0,0 +1,55 @@ +enable_audio_bell no +window_alert_on_bell no +background_opacity 0.8 +cursor_blink_interval 0 +window_padding_width 1 +shell_integration yes + +background #1a1b25 +foreground #c5c8c6 + +selection_background #b2ceee +selection_foreground #080808 + +selection_background #33467c +selection_foreground #c0caf5 +url_color #73daca +cursor #c0caf5 +cursor_text_color #1a1b25 + +# Tabs +active_tab_background #7aa2f7 +active_tab_foreground #16161e +inactive_tab_background #292e42 +inactive_tab_foreground #545c7e +#tab_bar_background #15161e + +# Windows +active_border_color #7aa2f7 +inactive_border_color #292e42 + +# normal +color0 #15161e +color1 #c94448 +color2 #9ece6a +color3 #e0af68 +color4 #7aa2f7 +color5 #bb9af7 +color6 #7dcfff +color7 #a9b1d6 + +# bright +color8 #414868 +color9 #f2201f +color10 #9ece6a +color11 #e0af68 +color12 #7aa2f7 +color13 #bb9af7 +color14 #7dcfff +color15 #c0caf5 + +# extended colors +color16 #ff9e64 +color17 #db4b4b + +shell fish diff --git a/lib/default.nix b/lib/default.nix deleted file mode 100644 index d8a7402..0000000 --- a/lib/default.nix +++ /dev/null @@ -1,292 +0,0 @@ -{ - 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 deleted file mode 100644 index d2360ad..0000000 --- a/lib/foxextensions.nix +++ /dev/null @@ -1,59 +0,0 @@ -{ - 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 deleted file mode 100644 index e5c39a7..0000000 --- a/lib/foxwrappers.nix +++ /dev/null @@ -1,43 +0,0 @@ -# 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 deleted file mode 100644 index cfcd413..0000000 --- a/lib/importPkgs.nix +++ /dev/null @@ -1,17 +0,0 @@ -{ - 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 deleted file mode 100644 index 4d222f8..0000000 --- a/lib/override.nix +++ /dev/null @@ -1 +0,0 @@ -{lib, ...}: value: lib.mkOverride 999 value diff --git a/lib/wm.nix b/lib/wm.nix deleted file mode 100644 index 416956a..0000000 --- a/lib/wm.nix +++ /dev/null @@ -1,446 +0,0 @@ -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 deleted file mode 100644 index 8c9526c..0000000 --- a/logo.svg +++ /dev/null @@ -1,293 +0,0 @@ - - - -DashNixDashNix diff --git a/modules/conf.nix b/modules/conf.nix deleted file mode 100644 index 0e3a166..0000000 --- a/modules/conf.nix +++ /dev/null @@ -1,170 +0,0 @@ -{ - 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 deleted file mode 100644 index 683596a..0000000 --- a/modules/default.nix +++ /dev/null @@ -1,6 +0,0 @@ -{ - imports = [ - ./programs - ./conf.nix - ]; -} diff --git a/modules/programs/acpid.nix b/modules/programs/acpid.nix deleted file mode 100644 index 228c402..0000000 --- a/modules/programs/acpid.nix +++ /dev/null @@ -1,21 +0,0 @@ -{ - 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 deleted file mode 100644 index b1b7922..0000000 --- a/modules/programs/anyrun.nix +++ /dev/null @@ -1,145 +0,0 @@ -{ - 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 deleted file mode 100644 index 1d1b2b9..0000000 --- a/modules/programs/basePackages.nix +++ /dev/null @@ -1,132 +0,0 @@ -{ - 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 deleted file mode 100644 index f0e2ef1..0000000 --- a/modules/programs/bluetooth.nix +++ /dev/null @@ -1,27 +0,0 @@ -{ - 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 deleted file mode 100644 index 404fddd..0000000 --- a/modules/programs/browser/brave.nix +++ /dev/null @@ -1,22 +0,0 @@ -{ - 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 deleted file mode 100644 index 5d48046..0000000 --- a/modules/programs/browser/chromium.nix +++ /dev/null @@ -1,22 +0,0 @@ -{ - 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 deleted file mode 100644 index ade4ecf..0000000 --- a/modules/programs/browser/default.nix +++ /dev/null @@ -1,9 +0,0 @@ -{ - 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 deleted file mode 100644 index d93ac58..0000000 --- a/modules/programs/browser/firefox.nix +++ /dev/null @@ -1,125 +0,0 @@ -{ - 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 deleted file mode 100644 index fc74bf3..0000000 --- a/modules/programs/browser/librewolf.nix +++ /dev/null @@ -1,119 +0,0 @@ -{ - 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 deleted file mode 100644 index db32900..0000000 --- a/modules/programs/browser/zen.nix +++ /dev/null @@ -1,157 +0,0 @@ -# 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 deleted file mode 100644 index e212529..0000000 --- a/modules/programs/clam.nix +++ /dev/null @@ -1,60 +0,0 @@ -{ - 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 deleted file mode 100644 index 5a22205..0000000 --- a/modules/programs/coding.nix +++ /dev/null @@ -1,575 +0,0 @@ -{ - 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 deleted file mode 100644 index b62ee25..0000000 --- a/modules/programs/containers.nix +++ /dev/null @@ -1,79 +0,0 @@ -{ - 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 deleted file mode 100644 index 08a4a2d..0000000 --- a/modules/programs/default.nix +++ /dev/null @@ -1,56 +0,0 @@ -{ - 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 deleted file mode 100644 index a631802..0000000 --- a/modules/programs/drives.nix +++ /dev/null @@ -1,312 +0,0 @@ -{ - 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 deleted file mode 100644 index 8abf24d..0000000 --- a/modules/programs/fancontrol.nix +++ /dev/null @@ -1,37 +0,0 @@ -{ - 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 deleted file mode 100644 index 9953d84..0000000 --- a/modules/programs/fastfetch.nix +++ /dev/null @@ -1,75 +0,0 @@ -{ - 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 deleted file mode 100644 index 1d8c8c8..0000000 --- a/modules/programs/fish.nix +++ /dev/null @@ -1,190 +0,0 @@ -{ - 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 deleted file mode 100644 index 68ec2da..0000000 --- a/modules/programs/flatpak.nix +++ /dev/null @@ -1,21 +0,0 @@ -{ - 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 deleted file mode 100644 index 6c3eb0a..0000000 --- a/modules/programs/gaming.nix +++ /dev/null @@ -1,149 +0,0 @@ -{ - 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 deleted file mode 100644 index 343c6cd..0000000 --- a/modules/programs/gdm.nix +++ /dev/null @@ -1,33 +0,0 @@ -{ - 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 deleted file mode 100644 index 57c1623..0000000 --- a/modules/programs/git.nix +++ /dev/null @@ -1,64 +0,0 @@ -{ - 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 deleted file mode 100644 index faf2b1e..0000000 --- a/modules/programs/gnome.nix +++ /dev/null @@ -1,77 +0,0 @@ -{ - 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 deleted file mode 100644 index 29bdea8..0000000 --- a/modules/programs/gnomeServices.nix +++ /dev/null @@ -1,81 +0,0 @@ -{ - 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 deleted file mode 100644 index 023b462..0000000 --- a/modules/programs/gpu.nix +++ /dev/null @@ -1,111 +0,0 @@ -{ - 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 deleted file mode 100644 index fe3e455..0000000 --- a/modules/programs/greetd.nix +++ /dev/null @@ -1,164 +0,0 @@ -{ - 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 deleted file mode 100644 index 6a995f0..0000000 --- a/modules/programs/homePackages.nix +++ /dev/null @@ -1,154 +0,0 @@ -{ - 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 deleted file mode 100644 index 68b88ea..0000000 --- a/modules/programs/hypr/default.nix +++ /dev/null @@ -1,7 +0,0 @@ -{ - imports = [ - ./hyprland.nix - ./hyprlock.nix - ./hyprpaper.nix - ]; -} diff --git a/modules/programs/hypr/hyprland.nix b/modules/programs/hypr/hyprland.nix deleted file mode 100644 index 442b964..0000000 --- a/modules/programs/hypr/hyprland.nix +++ /dev/null @@ -1,357 +0,0 @@ -{ - 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 deleted file mode 100644 index c152b22..0000000 --- a/modules/programs/hypr/hyprlock.nix +++ /dev/null @@ -1,69 +0,0 @@ -{ - 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 deleted file mode 100644 index b392b54..0000000 --- a/modules/programs/hypr/hyprpaper.nix +++ /dev/null @@ -1,36 +0,0 @@ -{ - 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 deleted file mode 100644 index b955d51..0000000 --- a/modules/programs/ironbar.nix +++ /dev/null @@ -1,552 +0,0 @@ -{ - 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 deleted file mode 100644 index f81194d..0000000 --- a/modules/programs/kde.nix +++ /dev/null @@ -1,22 +0,0 @@ -{ - 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 deleted file mode 100644 index 46b12e8..0000000 --- a/modules/programs/kdeConnect.nix +++ /dev/null @@ -1,42 +0,0 @@ -{ - 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 deleted file mode 100644 index d8c0c6a..0000000 --- a/modules/programs/keepassxc.nix +++ /dev/null @@ -1,75 +0,0 @@ -{ - 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 deleted file mode 100644 index ab2ae5a..0000000 --- a/modules/programs/kitty.nix +++ /dev/null @@ -1,129 +0,0 @@ -{ - 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 deleted file mode 100644 index c37d62b..0000000 --- a/modules/programs/media.nix +++ /dev/null @@ -1,123 +0,0 @@ -{ - 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 deleted file mode 100644 index 4da7aff..0000000 --- a/modules/programs/mime.nix +++ /dev/null @@ -1,161 +0,0 @@ -# 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 deleted file mode 100644 index b998942..0000000 --- a/modules/programs/ncspot.nix +++ /dev/null @@ -1,64 +0,0 @@ -{ - 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 deleted file mode 100644 index 31216ee..0000000 --- a/modules/programs/nextcloud.nix +++ /dev/null @@ -1,38 +0,0 @@ -{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 deleted file mode 100644 index 0531829..0000000 --- a/modules/programs/niri.nix +++ /dev/null @@ -1,392 +0,0 @@ -{ - 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 deleted file mode 100644 index 56bd79d..0000000 --- a/modules/programs/onedrive.nix +++ /dev/null @@ -1,24 +0,0 @@ -{ - 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 deleted file mode 100644 index 83c4f23..0000000 --- a/modules/programs/oxi/default.nix +++ /dev/null @@ -1,81 +0,0 @@ -{ - 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 deleted file mode 100644 index 9ea519e..0000000 --- a/modules/programs/oxi/oxidash.nix +++ /dev/null @@ -1,79 +0,0 @@ -{ - 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 deleted file mode 100644 index d265af3..0000000 --- a/modules/programs/oxi/oxinoti.nix +++ /dev/null @@ -1,129 +0,0 @@ -{ - 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 deleted file mode 100644 index 4ec7b1d..0000000 --- a/modules/programs/oxi/oxipaste.nix +++ /dev/null @@ -1,48 +0,0 @@ -{ - 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 deleted file mode 100644 index 55f4d75..0000000 --- a/modules/programs/oxi/oxirun.nix +++ /dev/null @@ -1,20 +0,0 @@ -{ - 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 deleted file mode 100644 index 25ebe0b..0000000 --- a/modules/programs/oxi/oxishut.nix +++ /dev/null @@ -1,42 +0,0 @@ -{ - 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 deleted file mode 100644 index 24beced..0000000 --- a/modules/programs/piper.nix +++ /dev/null @@ -1,20 +0,0 @@ -{ - 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 deleted file mode 100644 index af9c615..0000000 --- a/modules/programs/plymouth.nix +++ /dev/null @@ -1,18 +0,0 @@ -{ - 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 deleted file mode 100644 index 98bbe4f..0000000 --- a/modules/programs/printing.nix +++ /dev/null @@ -1,38 +0,0 @@ -{ - 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 deleted file mode 100644 index 98eb26b..0000000 --- a/modules/programs/scripts.nix +++ /dev/null @@ -1,123 +0,0 @@ -{ - 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 deleted file mode 100644 index 57328d4..0000000 --- a/modules/programs/sddm.nix +++ /dev/null @@ -1,43 +0,0 @@ -{ - 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 deleted file mode 100644 index 5897eaa..0000000 --- a/modules/programs/sops.nix +++ /dev/null @@ -1,61 +0,0 @@ -{ - 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 deleted file mode 100644 index de86504..0000000 --- a/modules/programs/starship.nix +++ /dev/null @@ -1,175 +0,0 @@ -{ - 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 deleted file mode 100644 index 544367f..0000000 --- a/modules/programs/streamcontroller.nix +++ /dev/null @@ -1,39 +0,0 @@ -{ - 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 deleted file mode 100644 index dd11e8c..0000000 --- a/modules/programs/stylix.nix +++ /dev/null @@ -1,131 +0,0 @@ -{ - 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 deleted file mode 100644 index f031e2f..0000000 --- a/modules/programs/superfreq.nix +++ /dev/null @@ -1,28 +0,0 @@ -{ - 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 deleted file mode 100644 index 3b732df..0000000 --- a/modules/programs/supersonic.nix +++ /dev/null @@ -1,73 +0,0 @@ -{ - 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 deleted file mode 100644 index eef6025..0000000 --- a/modules/programs/sway.nix +++ /dev/null @@ -1,30 +0,0 @@ -{ - 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 deleted file mode 100644 index e9d843a..0000000 --- a/modules/programs/teams.nix +++ /dev/null @@ -1,38 +0,0 @@ -{ - 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 deleted file mode 100644 index de38848..0000000 --- a/modules/programs/virtmanager.nix +++ /dev/null @@ -1,67 +0,0 @@ -{ - 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 deleted file mode 100644 index 0f794d3..0000000 --- a/modules/programs/wm.nix +++ /dev/null @@ -1,403 +0,0 @@ -{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 deleted file mode 100644 index ebb1bda..0000000 --- a/modules/programs/xkb.nix +++ /dev/null @@ -1,28 +0,0 @@ -{ - 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 deleted file mode 100644 index 84ecd48..0000000 --- a/modules/programs/xone.nix +++ /dev/null @@ -1,19 +0,0 @@ -{ - 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 deleted file mode 100644 index d890a81..0000000 --- a/modules/programs/yazi/default.nix +++ /dev/null @@ -1,62 +0,0 @@ -{ - 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 deleted file mode 100644 index 22e3169..0000000 --- a/modules/programs/yazi/yazi.nix +++ /dev/null @@ -1,1016 +0,0 @@ -{ - # don't ask.... - enable = true; - settings = { - log = { - enabled = false; - }; - opener = { - folder = [ - { - run = ''open - R "$@"''; - orphan = true; - display_name = "Reveal in Finder"; - } - { - run = ''$EDITOR "$@"''; - orphan = true; - } - ]; - archive = [ - { - run = ''unar "$1"''; - display_name = "Extract here"; - } - ]; - text = [ - { - run = ''$EDITOR "$@"''; - orphan = true; - } - ]; - image = [ - { - run = ''eog "$@"''; - orphan = true; - display_name = "Open"; - } - { - run = ''exiftool "$1"; echo "Press enter to exit"; read''; - block = true; - display_name = "Show EXIF"; - } - ]; - pdf = [ - { - run = ''zathura "$@"''; - orphan = true; - display_name = "Open"; - } - ]; - video = [ - { - run = ''mpv "$@"''; - orphan = true; - } - { - run = ''mediainfo "$1"; echo "Press enter to exit"; read''; - block = true; - display_name = "Show media info"; - } - ]; - audio = [ - { - run = ''xdg-open "$@"''; - orphan = true; - } - { - run = ''mediainfo "$1"; echo "Press enter to exit"; read''; - block = true; - display_name = "Show media info"; - } - ]; - fallback = [ - { - run = ''xdg-open "$@"''; - orphan = true; - display_name = "Open"; - } - { - run = ''xdg-open - R "$@"''; - orphan = true; - display_name = "Reveal in Finder"; - } - ]; - }; - plugin = { - prepend_previewers = [ - { - name = "*.tar"; - run = ''piper --format=url -- tar tf "$1"''; - } - { - name = "*.md"; - run = ''piper -- CLICOLOR_FORCE=1 glow -w=$w -s=dark "$1"''; - } - { - mime = "text/csv"; - run = ''piper -- bat -p --color=always "$1"''; - } - ]; - }; - }; - keymap = { - mgr.keymap = [ - { - on = ""; - run = "backspace"; - desc = "Delete the character before the cursor"; - } - { - on = [""]; - run = "escape"; - desc = "Exit visual mode clear selected or cancel search"; - } - { - on = ["q"]; - run = "quit"; - desc = "Exit the process"; - } - { - on = ["Q"]; - run = "quit --no-cwd-file"; - desc = "Exit the process without writing cwd-file"; - } - { - on = [""]; - run = "close"; - desc = "Close the current tab or quit if it is last tab"; - } - { - on = [""]; - run = "suspend"; - desc = "Suspend the process"; - } - - # Navigation - { - on = ["l"]; - run = "arrow -1"; - desc = "Move cursor up"; - } - { - on = ["k"]; - run = "arrow 1"; - desc = "Move cursor down"; - } - - { - on = ["L"]; - run = "arrow -5"; - desc = "Move cursor up 5 lines"; - } - { - on = ["K"]; - run = "arrow 5"; - desc = "Move cursor down 5 lines"; - } - - { - on = [""]; - run = "arrow -50%"; - desc = "Move cursor up half page"; - } - { - on = [""]; - run = "arrow 50%"; - desc = "Move cursor down half page"; - } - { - on = [""]; - run = "arrow -100%"; - desc = "Move cursor up one page"; - } - { - on = [""]; - run = "arrow 100%"; - desc = "Move cursor down one page"; - } - - { - on = ["j"]; - run = "leave"; - desc = "Go back to the parent directory"; - } - { - on = [";"]; - run = "enter"; - desc = "Enter the child directory"; - } - - { - on = ["J"]; - run = "back"; - desc = "Go back to the previous directory"; - } - { - on = ["P"]; - run = "forward"; - desc = "Go forward to the next directory"; - } - - { - on = [""]; - run = "peek -5"; - desc = "Peek up 5 units in the preview"; - } - { - on = [""]; - run = "peek 5"; - desc = "Peek down 5 units in the preview"; - } - - { - on = [""]; - run = "arrow -1"; - desc = "Move cursor up"; - } - { - on = [""]; - run = "arrow 1"; - desc = "Move cursor down"; - } - { - on = [""]; - run = "leave"; - desc = "Go back to the parent directory"; - } - { - on = [""]; - run = "enter"; - desc = "Enter the child directory"; - } - - { - on = [ - "g" - "g" - ]; - run = "arrow -99999999"; - desc = "Move cursor to the top"; - } - { - on = ["G"]; - run = "arrow 99999999"; - desc = "Move cursor to the bottom"; - } - - # Selection - { - on = ["v"]; - run = "visual_mode"; - desc = "Enter visual mode (selection mode)"; - } - { - on = ["V"]; - run = "visual_mode --unset"; - desc = "Enter visual mode (unset mode)"; - } - { - on = [""]; - run = "select_all --state=true"; - desc = "Select all files"; - } - { - on = [""]; - run = "select_all --state=none"; - desc = "Inverse selection of all files"; - } - - # Operation - { - on = ["o"]; - run = "open"; - desc = "Open the selected files"; - } - { - on = ["O"]; - run = "open --interactive"; - desc = "Open the selected files interactively"; - } - { - on = [""]; - run = "open"; - desc = "Open the selected files"; - } - { - on = [""]; - run = "open --interactive"; - desc = "Open the selected files interactively"; - } # It's cool if you're using a terminal that supports CSI u - { - on = ["y"]; - run = "yank"; - desc = "Copy the selected files"; - } - { - on = ["x"]; - run = "yank --cut"; - desc = "Cut the selected files"; - } - { - on = ["p"]; - run = "paste"; - desc = "Paste the files"; - } - { - on = ["P"]; - run = "paste --force"; - desc = "Paste the files (overwrite if the destination exists)"; - } - { - on = ["-"]; - run = "link"; - desc = "Symlink the absolute path of files"; - } - { - on = ["_"]; - run = "link --relative"; - desc = "Symlink the relative path of files"; - } - { - on = ["d"]; - run = "remove"; - desc = "Move the files to the trash"; - } - { - on = ["D"]; - run = "remove --permanently"; - desc = "Permanently delete the files"; - } - { - on = ["a"]; - run = "create"; - desc = "Create a file or directory (ends with / for directories)"; - } - { - on = ["r"]; - run = "rename"; - desc = "Rename a file or directory"; - } - { - on = [";"]; - run = "shell"; - desc = "Run a shell command"; - } - { - on = [":"]; - run = "shell --block"; - desc = "Run a shell command (block the UI until the command finishes)"; - } - { - on = ["."]; - run = "hidden toggle"; - desc = "Toggle the visibility of hidden files"; - } - { - on = [ - "" - "f" - "g>" - ]; - run = "search fd"; - desc = "Search files by name using fd"; - } - { - on = [ - "" - "f" - "G>" - ]; - run = "search rg"; - desc = "Search files by content using ripgrep"; - } - { - on = [""]; - run = "search none"; - desc = "Cancel the ongoing search"; - } - { - on = ["Z"]; - run = "plugin zoxide"; - desc = "Jump to a directory using zoxide"; - } - { - on = ["z"]; - run = "plugin fzf"; - desc = "Jump to a directory or reveal a file using fzf"; - } - - # Copy - { - on = [ - "c" - "c" - ]; - run = "copy path"; - desc = "Copy the absolute path"; - } - { - on = [ - "c" - "d" - ]; - run = "copy dirname"; - desc = "Copy the path of the parent directory"; - } - { - on = [ - "c" - "f" - ]; - run = "copy filename"; - desc = "Copy the name of the file"; - } - { - on = [ - "c" - "n" - ]; - run = "copy name_without_ext"; - desc = "Copy the name of the file without the extension"; - } - - # Find - { - on = ["/"]; - run = "find --smart"; - } - { - on = ["?"]; - run = "find --previous --smart"; - } - { - on = ["n"]; - run = "find_arrow"; - } - { - on = ["N"]; - run = "find_arrow --previous"; - } - - # Sorting - { - on = [ - "," - "a" - ]; - run = "sort alphabetical --dir_first"; - desc = "Sort alphabetically"; - } - { - on = [ - "," - "A" - ]; - run = "sort alphabetical --reverse --dir_first"; - desc = "Sort alphabetically (reverse)"; - } - { - on = [ - "," - "c" - ]; - run = "sort created --dir_first"; - desc = "Sort by creation time"; - } - { - on = [ - "," - "C" - ]; - run = "sort created --reverse --dir_first"; - desc = "Sort by creation time (reverse)"; - } - { - on = [ - "," - "m" - ]; - run = "sort modified --dir_first"; - desc = "Sort by modified time"; - } - { - on = [ - "," - "M" - ]; - run = "sort modified --reverse --dir_first"; - desc = "Sort by modified time (reverse)"; - } - { - on = [ - "," - "n" - ]; - run = "sort natural --dir_first"; - desc = "Sort naturally"; - } - { - on = [ - "," - "N" - ]; - run = "sort natural --reverse --dir_first"; - desc = "Sort naturally (reverse)"; - } - { - on = [ - "," - "s" - ]; - run = "sort size --dir_first"; - desc = "Sort by size"; - } - { - on = [ - "," - "S" - ]; - run = "sort size --reverse --dir_first"; - desc = "Sort by size (reverse)"; - } - - # Tabs - { - on = ["t"]; - run = "tab_create --current"; - desc = "Create a new tab using the current path"; - } - - { - on = ["1"]; - run = "tab_switch 0"; - desc = "Switch to the first tab"; - } - { - on = ["2"]; - run = "tab_switch 1"; - desc = "Switch to the second tab"; - } - { - on = ["3"]; - run = "tab_switch 2"; - desc = "Switch to the third tab"; - } - { - on = ["4"]; - run = "tab_switch 3"; - desc = "Switch to the fourth tab"; - } - { - on = ["5"]; - run = "tab_switch 4"; - desc = "Switch to the fifth tab"; - } - { - on = ["6"]; - run = "tab_switch 5"; - desc = "Switch to the sixth tab"; - } - { - on = ["7"]; - run = "tab_switch 6"; - desc = "Switch to the seventh tab"; - } - { - on = ["8"]; - run = "tab_switch 7"; - desc = "Switch to the eighth tab"; - } - { - on = ["9"]; - run = "tab_switch 8"; - desc = "Switch to the ninth tab"; - } - - { - on = ["["]; - run = "tab_switch -1 --relative"; - desc = "Switch to the previous tab"; - } - { - on = ["]"]; - run = "tab_switch 1 --relative"; - desc = "Switch to the next tab"; - } - - { - on = ["{"]; - run = "tab_swap -1"; - desc = "Swap the current tab with the previous tab"; - } - { - on = ["}"]; - run = "tab_swap 1"; - desc = "Swap the current tab with the next tab"; - } - - # Tasks - { - on = ["w"]; - run = "tasks_show"; - desc = "Show the tasks manager"; - } - - # Goto - { - on = [ - "g" - "h" - ]; - run = "cd ~"; - desc = "Go to the home directory"; - } - { - on = [ - "g" - "c" - ]; - run = "cd ~/.config"; - desc = "Go to the config directory"; - } - { - on = [ - "g" - "d" - ]; - run = "cd ~/Downloads"; - desc = "Go to the downloads directory"; - } - { - on = [ - "g" - "t" - ]; - run = "cd /tmp"; - desc = "Go to the temporary directory"; - } - { - on = [ - "g" - "" - ]; - run = "cd --interactive"; - desc = "Go to a directory interactively"; - } - - # Help - { - on = ["~"]; - run = "help"; - desc = "Open help"; - } - ]; - - tasks.keymap = [ - { - on = [""]; - run = "close"; - desc = "Hide the task manager"; - } - { - on = [""]; - run = "close"; - desc = "Hide the task manager"; - } - { - on = ["w"]; - run = "close"; - desc = "Hide the task manager"; - } - - { - on = ["k"]; - run = "arrow -1"; - desc = "Move cursor up"; - } - { - on = ["j"]; - run = "arrow 1"; - desc = "Move cursor down"; - } - - { - on = [""]; - run = "arrow -1"; - desc = "Move cursor up"; - } - { - on = [""]; - run = "arrow 1"; - desc = "Move cursor down"; - } - - { - on = [""]; - run = "inspect"; - desc = "Inspect the task"; - } - { - on = ["x"]; - run = "cancel"; - desc = "Cancel the task"; - } - - { - on = ["~"]; - run = "help"; - desc = "Open help"; - } - ]; - - select.keymap = [ - { - on = [""]; - run = "close"; - desc = "Cancel selection"; - } - { - on = [""]; - run = "close"; - desc = "Cancel selection"; - } - { - on = [""]; - run = "close --submit"; - desc = "Submit the selection"; - } - - { - on = ["k"]; - run = "arrow -1"; - desc = "Move cursor up"; - } - { - on = ["j"]; - run = "arrow 1"; - desc = "Move cursor down"; - } - - { - on = ["K"]; - run = "arrow -5"; - desc = "Move cursor up 5 lines"; - } - { - on = ["J"]; - run = "arrow 5"; - desc = "Move cursor down 5 lines"; - } - - { - on = [""]; - run = "arrow -1"; - desc = "Move cursor up"; - } - { - on = [""]; - run = "arrow 1"; - desc = "Move cursor down"; - } - - { - on = ["~"]; - run = "help"; - desc = "Open help"; - } - ]; - - input.keymap = [ - { - on = ""; - run = "backspace"; - desc = "Delete the character before the cursor"; - } - { - on = [""]; - run = "close"; - desc = "Cancel input"; - } - { - on = [""]; - run = "close --submit"; - desc = "Submit the input"; - } - { - on = [""]; - run = "escape"; - desc = "Go back the normal mode or cancel input"; - } - - # Mode - { - on = ["i"]; - run = "insert"; - desc = "Enter insert mode"; - } - { - on = ["a"]; - run = "insert --append"; - desc = "Enter append mode"; - } - { - on = ["v"]; - run = "visual"; - desc = "Enter visual mode"; - } - { - on = ["V"]; - run = [ - "move -999" - "visual" - "move 999" - ]; - desc = "Enter visual mode and select all"; - } - - # Navigation - { - on = ["h"]; - run = "move -1"; - desc = "Move cursor left"; - } - { - on = ["l"]; - run = "move 1"; - desc = "Move cursor right"; - } - - { - on = ["0"]; - run = "move -999"; - desc = "Move to the BOL"; - } - { - on = ["$"]; - run = "move 999"; - desc = "Move to the EOL"; - } - { - on = ["I"]; - run = [ - "move -999" - "insert" - ]; - desc = "Move to the BOL and enter insert mode"; - } - { - on = ["A"]; - run = [ - "move 999" - "insert --append" - ]; - desc = "Move to the EOL and enter append mode"; - } - - { - on = [""]; - run = "move -1"; - desc = "Move cursor left"; - } - { - on = [""]; - run = "move 1"; - desc = "Move cursor right"; - } - - { - on = ["b"]; - run = "backward"; - desc = "Move to the beginning of the previous word"; - } - { - on = ["w"]; - run = "forward"; - desc = "Move to the beginning of the next word"; - } - { - on = ["e"]; - run = "forward --end-of-word"; - desc = "Move to the end of the next word"; - } - - # Deletion - { - on = ["d"]; - run = "delete --cut"; - desc = "Cut the selected characters"; - } - { - on = ["D"]; - run = [ - "delete --cut" - "move 999" - ]; - desc = "Cut until the EOL"; - } - { - on = ["c"]; - run = "delete --cut --insert"; - desc = "Cut the selected characters and enter insert mode"; - } - { - on = ["C"]; - run = [ - "delete --cut --insert" - "move 999" - ]; - desc = "Cut until the EOL and enter insert mode"; - } - { - on = ["x"]; - run = [ - "delete --cut" - "move 1 --in-operating" - ]; - desc = "Cut the current character"; - } - - # Yank/Paste - { - on = ["y"]; - run = "yank"; - desc = "Copy the selected characters"; - } - { - on = ["p"]; - run = "paste"; - desc = "Paste the copied characters after the cursor"; - } - { - on = ["P"]; - run = "paste --before"; - desc = "Paste the copied characters before the cursor"; - } - - # Undo/Redo - { - on = ["u"]; - run = "undo"; - desc = "Undo the last operation"; - } - { - on = [""]; - run = "redo"; - desc = "Redo the last operation"; - } - - # Help - { - on = ["~"]; - run = "help"; - desc = "Open help"; - } - ]; - - help.keymap = [ - { - on = [""]; - run = "escape"; - desc = "Clear the filter or hide the help"; - } - { - on = ["q"]; - run = "close"; - desc = "Exit the process"; - } - { - on = [""]; - run = "close"; - desc = "Hide the help"; - } - - # Navigation - { - on = ["k"]; - run = "arrow -1"; - desc = "Move cursor up"; - } - { - on = ["j"]; - run = "arrow 1"; - desc = "Move cursor down"; - } - - { - on = ["K"]; - run = "arrow -5"; - desc = "Move cursor up 5 lines"; - } - { - on = ["J"]; - run = "arrow 5"; - desc = "Move cursor down 5 lines"; - } - - { - on = [""]; - run = "arrow -1"; - desc = "Move cursor up"; - } - { - on = [""]; - run = "arrow 1"; - desc = "Move cursor down"; - } - - # Filtering - { - on = ["/"]; - run = "filter"; - desc = "Apply a filter for the help items"; - } - ]; - }; -} diff --git a/nvim/.gitignore b/nvim/.gitignore new file mode 100644 index 0000000..cc5457a --- /dev/null +++ b/nvim/.gitignore @@ -0,0 +1,8 @@ +tt.* +.tests +doc/tags +debug +.repro +foo.* +*.log +data diff --git a/nvim/.neoconf.json b/nvim/.neoconf.json new file mode 100644 index 0000000..aa1b504 --- /dev/null +++ b/nvim/.neoconf.json @@ -0,0 +1,15 @@ +{ + "neodev": { + "library": { + "enabled": true, + "plugins": true + } + }, + "neoconf": { + "plugins": { + "sumneko_lua": { + "enabled": true + } + } + } +} diff --git a/nvim/LICENSE b/nvim/LICENSE new file mode 100644 index 0000000..261eeb9 --- /dev/null +++ b/nvim/LICENSE @@ -0,0 +1,201 @@ + 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 new file mode 100644 index 0000000..ad6d1a3 --- /dev/null +++ b/nvim/README.md @@ -0,0 +1,141 @@ +# List of keymaps + +## Space as leader + +## Debugging +| key | Description | +| --- | ------------------------- | +| F5 | toggle breakpoint | +| F6 | step over breakpoint | +| F7 | step into breakpoint | +| F8 | start debugging | +| F9 | continue from breakpoint | +| F10 | close debug UI | + +## Neo-Tree +| key | Description | +| --- | ------------------------- | +| f |toggle open | +| a |create new file | +| d |remove file | +| r |rename file | +| y |copy name | +| Y |copy path | +| x |cut file | +| c |copy file | +| p |paste file | +| f |filter (inside nvim tree) | +| E |expand all folders | +| W |collapse all folders | + +## buffer switching +| key | Description | +| --- | ------------------------- | +| F1 | next buffer (cycles) | +| F2 | previous buffer (cycles) | + +## formatting +| key | Description | +| --- | ------------------------- | +| F4 | format this file | + +## telescope +| key | Description | +| --- | ------------------------- | +| ff | find files | +| fg | live ripgrep | +| fb | find buffers | +| fh | help for functions etc | +| fp | find projects | +| fb | file browser | + +### telescope git +| key | Description | +| ---------- | ------------------------- | +| gq | show commits | +| gw | show commits with diff | +| ge | show branches | +| gr | show git status | +| ga | show git stash | + +### project telescope + +
normal mode insert mode
+ +| key | Description | +| --- | --------------------------------- | +| d | delete project | +| r | rename project | +| c | create project | +| s | search files in project | +| b | browse files in project | +| w | change directory to project | +| R | recently opened files in project | +| f | find file within project | + + +| key | Description | +| -------- | --------------------------------- | +| Ctrl + d | delete project | +| Ctrl + v | rename project | +| Ctrl + a | create project | +| Ctrl + s | search files in project | +| Ctrl + b | browse files in project | +| Ctrl + l | change directory to project | +| Ctrl + r | recently opened files in project | +| Ctrl + f | find file within project | + +
+ + +## toggletrouble +| key | Description | +| -------- | ------------------------- | +| Ctrl + f | show errors and warnings | + +## cmp +Note, these require the cmp list view to be open to do anything! +| key | Description | +| ----------- | --------------------------------------------------------- | +| Ctrl + b | scroll docs up | +| Ctrl + f | scroll docs down | +| Ctrl + e | cancel cmp | +| Enter | write selected suggestion (does nothing if not selected) | +| Tab |scroll down through suggestion list | +| Shift + Tab | scroll up through suggestion list | + +## LSP +| key | Description | +| ----------- | ---------------------- | +| Leader + a | go to declaration | +| Leader + s | go to definition | +| Leader + d | go to type definitions | +| Leader + f | go to references | +| Leader + q | execute code actions | +| Leader + w | signature help | +| Leader + e | hover | +| Leader + r | rename | + +## snippets +These require you to be inside a snippet! +| key | Description | +| -------- | ------------------------- | +| Ctrl + j | jump to next entry | +| Ctrl + k | jump to previous entry | + +## Leap +| key | Description | +| -------- | ------------------------------------------------------ | +| s | followed by 2 other characters and the marker to jump | + +## Dashboard +only available on dashboard +| key | Description | +| --- | ------------------------- | +| f | file | +| e | new file | +| p | find project | +| r | recently used files | +| t | find text | +| c | open config | +| q | quit | diff --git a/nvim/ftplugin/java.lua b/nvim/ftplugin/java.lua new file mode 100644 index 0000000..a94c6af --- /dev/null +++ b/nvim/ftplugin/java.lua @@ -0,0 +1,46 @@ +local jdtls = require("jdtls") + +jdtls.start_or_attach({ + cmd = { "jdtls" }, + root_dir = vim.fs.dirname(vim.fs.find({ "settings.gradle", ".git", "pom.xml" }, { upward = true })[1]), + init_options = { + bundles = vim.list_extend( + { + -- Mason: java-debug-adapter + -- stylua: ignore + vim.fn.glob( "~/.local/share/nvim/mason/packages/java-debug-adapter/extension/server/com.microsoft.java.debug.plugin-*.jar", 1), + }, + -- Mason: java-test + -- stylua: ignore + vim.split(vim.fn.glob("~/.local/share/nvim/mason/packages/java-test/extension/server/*.jar", 1), "\n") + ), + }, + on_attach = function() + jdtls.setup_dap() -- Create new dap adapter for java + + -- nvim-jdtls specific mappings + vim.keymap.set("n", "", jdtls.organize_imports, {}) + vim.keymap.set("n", "crv", jdtls.extract_variable, {}) + vim.keymap.set("v", "crv", jdtls.extract_variable, {}) + vim.keymap.set("n", "crc", jdtls.extract_constant, {}) + vim.keymap.set("v", "crc", jdtls.extract_constant, {}) + vim.keymap.set("v", "crm", jdtls.extract_method, {}) + + vim.keymap.set("n", "df", jdtls.test_class, {}) + vim.keymap.set("n", "dn", jdtls.test_nearest_method, {}) + end, +}) + +local dap_status, dap = pcall(require, "dap") +if not dap_status then + return +end + +dap.configurations.java = { + { + name = "Launch current file", + type = "java", + request = "launch", + program = "${file}", + }, +} diff --git a/nvim/init.lua b/nvim/init.lua new file mode 100644 index 0000000..2514f9e --- /dev/null +++ b/nvim/init.lua @@ -0,0 +1,2 @@ +-- bootstrap lazy.nvim, LazyVim and your plugins +require("config.lazy") diff --git a/nvim/lazy-lock.json b/nvim/lazy-lock.json new file mode 100644 index 0000000..8ae0848 --- /dev/null +++ b/nvim/lazy-lock.json @@ -0,0 +1,67 @@ +{ + "LazyVim": { "branch": "main", "commit": "3c6357815c354ee2bb82b4162a484c1de6d575dc" }, + "LuaSnip": { "branch": "master", "commit": "9b5be5e9b460fad7134991d3fd0434466959db08" }, + "alpha-nvim": { "branch": "main", "commit": "4b0ba68022d8612b04b26844f1ce5e708c0d23b0" }, + "bufferline.nvim": { "branch": "main", "commit": "3677aceb9a72630b0613e56516c8f7151b86f95c" }, + "catppuccin": { "branch": "main", "commit": "5e2c9cf8277c42fb634007126c36d765fd176f4a" }, + "cmp-buffer": { "branch": "main", "commit": "3022dbc9166796b644a841a02de8dd1cc1d311fa" }, + "cmp-nvim-lsp": { "branch": "main", "commit": "0e6b2ed705ddcff9738ec4ea838141654f12eeef" }, + "cmp-path": { "branch": "main", "commit": "91ff86cd9c29299a64f968ebb45846c485725f23" }, + "cmp_luasnip": { "branch": "master", "commit": "18095520391186d634a0045dacaa346291096566" }, + "dressing.nvim": { "branch": "master", "commit": "5f44f829481640be0f96759c965ae22a3bcaf7ce" }, + "editorconfig.nvim": { "branch": "master", "commit": "5b9e303e1d6f7abfe616ce4cc8d3fffc554790bf" }, + "flit.nvim": { "branch": "main", "commit": "4c1739137acd3e7f03e2065a7be8a4dc41c7e461" }, + "friendly-snippets": { "branch": "main", "commit": "009887b76f15d16f69ae1341f86a7862f61cf2a1" }, + "gitsigns.nvim": { "branch": "main", "commit": "3b6c0a6412b31b91eb26bb8f712562cf7bb1d3be" }, + "harpoon": { "branch": "master", "commit": "f7040fd0c44e7a4010369136547de5604b9c22a1" }, + "indent-blankline.nvim": { "branch": "master", "commit": "018bd04d80c9a73d399c1061fa0c3b14a7614399" }, + "lazy.nvim": { "branch": "main", "commit": "14075657131b9a19883a8845c47f1ab65461cd6f" }, + "leap.nvim": { "branch": "main", "commit": "d34680b16af977928228e57c68e5a162f1649e3c" }, + "lsp-inlayhints.nvim": { "branch": "main", "commit": "84ca3abe8aaecbb5b30ad89e4701d4a9c821b72c" }, + "lualine.nvim": { "branch": "master", "commit": "e99d733e0213ceb8f548ae6551b04ae32e590c80" }, + "markdown-preview.nvim": { "branch": "master", "commit": "02cc3874738bc0f86e4b91f09b8a0ac88aef8e96" }, + "mason-lspconfig.nvim": { "branch": "main", "commit": "e4badf7984f7a5f0ac7dc10657dbedbd99a82f94" }, + "mason-nvim-dap.nvim": { "branch": "main", "commit": "07fd5396c17eec6d5857039f232d0a03a2b28a5a" }, + "mason.nvim": { "branch": "main", "commit": "c400270804059087e2d0041893a95c6bab4df3c1" }, + "mini.bufremove": { "branch": "main", "commit": "8464390c932556dbb298ccf8a7587d6ef765e94f" }, + "mini.comment": { "branch": "main", "commit": "5e8c7f75c48d958ef84ed75772b0263284c8621d" }, + "mini.indentscope": { "branch": "main", "commit": "7998edc970610c05598c7aea3d21ece8dd87ed52" }, + "mini.pairs": { "branch": "main", "commit": "0256717c9364ad6b5384c37b4f96fb4f7cc74867" }, + "mini.surround": { "branch": "main", "commit": "b7c2f4bea1f60af8dfee71f696319d045d986ce6" }, + "neo-tree.nvim": { "branch": "v2.x", "commit": "aec592bb1f0cf67f7e1123053d1eb17700aa9ed4" }, + "neoconf.nvim": { "branch": "main", "commit": "c2604560ea764ad5f72e52f38c52ef7fc2d1be98" }, + "neodev.nvim": { "branch": "main", "commit": "c6b8ff8f0d261c8fb99a55ec7cc5dcf9cb928293" }, + "noice.nvim": { "branch": "main", "commit": "c22651651da01239fc4afac4cdb7261797d5f02e" }, + "nui.nvim": { "branch": "main", "commit": "0dc148c6ec06577fcf06cbab3b7dac96d48ba6be" }, + "null-ls.nvim": { "branch": "main", "commit": "456cd2754c56c991c5e4df60a807d054c1bc7148" }, + "nvim-cmp": { "branch": "main", "commit": "feed47fd1da7a1bad2c7dca456ea19c8a5a9823a" }, + "nvim-dap": { "branch": "master", "commit": "c1bfcd89ef440a44d02ade7e71befb1e5aa358ca" }, + "nvim-dap-ui": { "branch": "master", "commit": "bdb94e3853d11b5ce98ec182e5a3719d5c0ef6fd" }, + "nvim-dap-virtual-text": { "branch": "master", "commit": "8db23ea51203b5f00ad107a0cef7e0b2d7a0476c" }, + "nvim-highlight-colors": { "branch": "main", "commit": "af051bfe2971fc888d21cdfc59f5444904353b43" }, + "nvim-jdtls": { "branch": "master", "commit": "db08bfb87300fca2db91d15b64ca88a62970fb58" }, + "nvim-lspconfig": { "branch": "master", "commit": "1a2d5f5224c65b0709bf5da0ccd9cad29272083a" }, + "nvim-navic": { "branch": "master", "commit": "cdd24539bcf114a499827e9b32869fe74836efe7" }, + "nvim-notify": { "branch": "master", "commit": "281e4d793c550c866bea3fb85d39de1f0188fb50" }, + "nvim-spectre": { "branch": "master", "commit": "b71b64afe9fedbfdd25a8abec897ff4af3bd553a" }, + "nvim-treesitter": { "branch": "master", "commit": "980f0816cc28c20e45715687a0a21b5b39af59eb" }, + "nvim-treesitter-textobjects": { "branch": "master", "commit": "4b30081d2736e09f90c890a8a7adfe4df36f5b36" }, + "nvim-ts-context-commentstring": { "branch": "main", "commit": "729d83ecb990dc2b30272833c213cc6d49ed5214" }, + "nvim-web-devicons": { "branch": "master", "commit": "b2060eac2fbc84e0637ea706378ff66451e7c424" }, + "persistence.nvim": { "branch": "main", "commit": "adcf6913693a0434665d162ee45a186230496f8a" }, + "plenary.nvim": { "branch": "master", "commit": "253d34830709d690f013daf2853a9d21ad7accab" }, + "tailwindcss-colorizer-cmp.nvim": { "branch": "main", "commit": "f044050da3ec6e1cdb31985beecec6810cc27f0b" }, + "telescope-file-browser.nvim": { "branch": "master", "commit": "61b3769065131129716974f7fb63f82ee409bd80" }, + "telescope-project.nvim": { "branch": "master", "commit": "8e8ee37b7210761502cdf2c3a82b5ba8fb5b2972" }, + "telescope-zoxide": { "branch": "main", "commit": "68966349aa1b8e9ade403e18479ecf79447389a7" }, + "telescope.nvim": { "branch": "master", "commit": "a3f17d3baf70df58b9d3544ea30abe52a7a832c2" }, + "todo-comments.nvim": { "branch": "main", "commit": "74c7d28cb50b0713c881ef69bcb6cdd77d8907d1" }, + "toggleterm.nvim": { "branch": "main", "commit": "31d38d11390bcd35a568fcc65a79b7d6ec89de62" }, + "tokyonight.nvim": { "branch": "main", "commit": "a310c1ddb3a7d8b940834238f79f7bfd494ba76a" }, + "trouble.nvim": { "branch": "main", "commit": "67337644e38144b444d026b0df2dc5fa0038930f" }, + "vim-illuminate": { "branch": "master", "commit": "49062ab1dd8fec91833a69f0a1344223dd59d643" }, + "vim-repeat": { "branch": "master", "commit": "24afe922e6a05891756ecf331f39a1f6743d3d5a" }, + "vim-startuptime": { "branch": "master", "commit": "6580cf539c33a212f4f5542068a3b4dd2b3ad834" }, + "vimtex": { "branch": "master", "commit": "6f7e507ed1c397838798e43a8249612864c929ba" }, + "which-key.nvim": { "branch": "main", "commit": "fb027738340502b556c3f43051f113bcaa7e8e63" } +} \ No newline at end of file diff --git a/nvim/lua/config/autocmds.lua b/nvim/lua/config/autocmds.lua new file mode 100644 index 0000000..e45d3ac --- /dev/null +++ b/nvim/lua/config/autocmds.lua @@ -0,0 +1,12 @@ +-- Autocmds are automatically loaded on the VeryLazy event +-- Default autocmds that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/autocmds.lua +-- Add any additional autocmds here +local function augroup(name) + return vim.api.nvim_create_augroup("lazyvim_" .. name, { clear = true }) +end +vim.api.nvim_create_autocmd("TextYankPost", { + group = augroup("toggle_relative_group"), + callback = function(_) + vim.cmd("set norelativenumber") + end, +}) diff --git a/nvim/lua/config/keymaps.lua b/nvim/lua/config/keymaps.lua new file mode 100644 index 0000000..60d09c6 --- /dev/null +++ b/nvim/lua/config/keymaps.lua @@ -0,0 +1,104 @@ +-- maps are automatically loaded on the VeryLazy event +-- Default maps that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/maps.lua +-- Add any additional maps here + +local Util = require("lazyvim.util") + +local function map(mode, lhs, rhs, opts) + local keys = require("lazy.core.handler").handlers.keys + ---@cast keys LazyKeysHandler + -- do not create the map if a lazy keys handler exists + if not keys.active[keys.parse({ lhs, mode = mode }).id] then + opts = opts or {} + opts.silent = opts.silent ~= false + vim.keymap.set(mode, lhs, rhs, opts) + end +end +local opts = { noremap = true, silent = true } +local term_opts = { silent = true } + +map("n", "d", ':set relativenumberd', opts) +map("n", "y", ':set relativenumbery', opts) +map("n", "", ':set norelativenumber', opts) + +-- debug +map("n", "", ':lua require("dap").toggle_breakpoint()', opts) +map("n", "", ':lua require("dap").step_over()', opts) +map("n", "", ':lua require("dap").step_into()', opts) +map("n", "", ':lua require("dapui").toggle() :lua require("dap").continue() ', opts) +map("n", "", ':lua require("dap").continue()', opts) +map("n", "", ':lua require("dap").close() :lua require("dapui").toggle()', opts) + +-- file tree +map("n", "f", ":Neotree action=focus toggle=true", opts) + +-- toggle terminal +map("n", "", ":lua require('toggleterm').toggle(1)", opts) + +-- tab switching +map("n", "", ":BufferLineCyclePrev", opts) +map("n", "", ":BufferLineCycleNext", opts) + +-- formatting +map("n", "", ":lua vim.lsp.buf.format { async = true }", opts) +map("n", "a", ":Telescope lsp_definitions", opts) +map("n", "s", ":Telescope lsp_references", opts) +map("n", "d", ":Telescope lsp_type_definitions", opts) +map("n", "f", ":Telescope lsp_implementations", opts) +map("n", "q", ":lua vim.lsp.buf.code_action()", opts) +map("n", "w", ":lua vim.lsp.buf.signature_help()", opts) +map("n", "e", ":lua vim.lsp.buf.hover()", opts) +map("n", "r", ":lua vim.lsp.buf.rename()", opts) +map("n", "gq", ":lua require('telescope.builtin').git_commits()", opts) +map("n", "gw", ":lua require('telescope.builtin').git_bcommits()", opts) +map("n", "ge", ":lua require('telescope.builtin').git_branches()", opts) +map("n", "gr", ":lua require('telescope.builtin').git_status()", opts) +map("n", "ga", ":lua require('telescope.builtin').git_stash()", opts) + +-- window switching +function _G.set_terminal_maps() + local opts = { buffer = 0 } + vim.keymap.set("t", "", [[]], opts) + vim.keymap.set("t", "jk", [[]], opts) + vim.keymap.set("t", "", [[wincmd h]], opts) + vim.keymap.set("t", "", [[wincmd j]], opts) + vim.keymap.set("t", "", [[wincmd k]], opts) + vim.keymap.set("t", "", [[wincmd l]], opts) +end + +-- if you only want these mappings for toggle term use term://*toggleterm#* instead +vim.cmd("autocmd! TermOpen term://* lua set_terminal_maps()") +map("n", "", ":wincmd h", opts) +map("n", "", ":wincmd j", opts) +map("n", "", ":wincmd k", opts) +map("n", "", ":wincmd l", opts) + +-- harpoon man + +map("n", "", ":lua require('harpoon.ui').nav_file(1)", opts) +map("n", "", ":lua require('harpoon.ui').nav_file(2)", opts) +map("n", "", ":lua require('harpoon.ui').nav_file(3)", opts) +map("n", "fma", ":lua require('harpoon.mark').add_file()", opts) +map("n", "fmd", ":lua require('harpoon.mark').remove_file()", opts) + +-- telescope +map("n", "fb", ":Telescope file_browser", {}) +map("n", "fc", ":Cheatsheet", {}) +map("n", "ff", ":lua require('telescope.builtin').find_files()", {}) +map("n", "fg", ":lua require('telescope.builtin').live_grep()", {}) +map("n", "fh", ":lua require('telescope.builtin').help_tags()", {}) +map("n", "fp", ":lua require'telescope'.extensions.project.project{}", { noremap = true, silent = true }) +map("n", "fm", ":Telescope harpoon marks", { noremap = true, silent = true }) + +vim.keymap.set("n", "z", ":lua require('telescope').extensions.zoxide.list{}") + +-- trouble +map("n", "", "TroubleToggle", term_opts) + +-- gitui +map("n", "gg", function() + Util.float_term({ "gitui" }, { cwd = Util.get_root() }) +end, { desc = "gitui (root dir)" }) +map("n", "gG", function() + Util.float_term({ "gitui" }) +end, { desc = "gitui (cwd)" }) diff --git a/nvim/lua/config/lazy.lua b/nvim/lua/config/lazy.lua new file mode 100644 index 0000000..3416a6b --- /dev/null +++ b/nvim/lua/config/lazy.lua @@ -0,0 +1,48 @@ +local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" +if not vim.loop.fs_stat(lazypath) then + -- bootstrap lazy.nvim + -- stylua: ignore + vim.fn.system({ "git", "clone", "--filter=blob:none", "https://github.com/folke/lazy.nvim.git", "--branch=stable", + lazypath }) +end +vim.opt.rtp:prepend(vim.env.LAZY or lazypath) + +require("lazy").setup({ + spec = { + -- add LazyVim and import its plugins + { "LazyVim/LazyVim", import = "lazyvim.plugins" }, + -- import any extras modules here + -- { import = "lazyvim.plugins.extras.lang.typescript" }, + -- { import = "lazyvim.plugins.extras.lang.json" }, + -- { import = "lazyvim.plugins.extras.ui.mini-animate" }, + -- import/override with your plugins + { import = "plugins" }, + }, + defaults = { + -- By default, only LazyVim plugins will be lazy-loaded. Your custom plugins will load during startup. + -- If you + lazy = false, + -- It's recommended to leave version=false for now, since a lot the plugin that support versioning, + -- have outdated releases, which may break your Neovim install. + version = false, -- always use the latest git commit + -- version = "*", -- try installing the latest stable version for plugins that support semver + }, + install = { colorscheme = { "tokyonight", "habamax" } }, + checker = { enabled = true, notify = false }, + change_detection = { enabled = true, notify = false }, --know what you're doing, you can set this to `true` to have all your custom plugins lazy-loaded by default. + performance = { + rtp = { + -- disable some rtp plugins + disabled_plugins = { + "gzip", + -- "matchit", + -- "matchparen", + -- "netrwPlugin", + "tarPlugin", + "tohtml", + "tutor", + "zipPlugin", + }, + }, + }, +}) diff --git a/nvim/lua/config/options.lua b/nvim/lua/config/options.lua new file mode 100644 index 0000000..7b0412f --- /dev/null +++ b/nvim/lua/config/options.lua @@ -0,0 +1,21 @@ +-- Options are automatically loaded before lazy.nvim startup +-- Default options that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/options.lua +-- Add any additional options here +local options = { + clipboard = "unnamedplus", + mouse = "n", + fileencoding = "utf-8", + number = true, + showmode = true, + termguicolors = true, + spelllang = "en_us", + shell = "/usr/bin/zsh", + autochdir = true, + relativenumber = false, +} + +vim.g.mkdp_browser = "/usr/bin/firefox" +vim.g.mkdp_auto_start = 1 +for k, v in pairs(options) do + vim.opt[k] = v +end diff --git a/nvim/lua/plugins/cmp.lua b/nvim/lua/plugins/cmp.lua new file mode 100644 index 0000000..201405c --- /dev/null +++ b/nvim/lua/plugins/cmp.lua @@ -0,0 +1,123 @@ +return { + { + "L3MON4D3/LuaSnip", + build = (not jit.os:find("Windows")) + and "echo -e 'NOTE: jsregexp is optional, so not a big deal if it fails to build\n'; make install_jsregexp" + or nil, + dependencies = { + "rafamadriz/friendly-snippets", + config = function() + require("luasnip.loaders.from_vscode").lazy_load() + end, + }, + opts = { + history = true, + delete_check_events = "TextChanged", + updateevents = "TextChanged,TextChangedI", + enable_autosnippets = true, + }, + keys = function() + return {} + end, + config = function(_, opts) + require("luasnip").setup(opts) + end, + }, + { + "hrsh7th/nvim-cmp", + event = "InsertEnter", + dependencies = { + "hrsh7th/cmp-nvim-lsp", + "hrsh7th/cmp-buffer", + "hrsh7th/cmp-path", + "saadparwaiz1/cmp_luasnip", + { "roobert/tailwindcss-colorizer-cmp.nvim", config = true }, + }, + opts = function() + local cmp = require("cmp") + local luasnip = require("luasnip") + return { + preselect = cmp.PreselectMode.None, + completion = { + completeopt = "menu,menuone,noinsert", + }, + snippet = { + expand = function(args) + luasnip.lsp_expand(args.body) + end, + }, + mapping = { + [""] = cmp.mapping.scroll_docs(-4), + [""] = cmp.mapping.scroll_docs(4), + [""] = cmp.mapping.complete(), + [""] = cmp.mapping.abort(), + [""] = cmp.mapping.confirm({ select = false }), -- Accept currently selected item. Set `select` to `false` to only confirm explicitly selected items. + [""] = cmp.mapping(function(fallback) + if cmp.visible() then + cmp.select_next_item() + else + fallback() + end + end, { "i", "s" }), + [""] = cmp.mapping(function(fallback) + if cmp.visible() then + cmp.select_prev_item() + else + fallback() + end + end, { + "i", + "s", + }), + [""] = cmp.mapping(function(fallback) + if luasnip.expandable() then + luasnip.expand() + elseif luasnip.expand_or_jumpable() then + luasnip.expand_or_jump() + else + fallback() + end + end, { + "i", + "s", + }), + [""] = cmp.mapping(function(fallback) + if luasnip.expand_or_jumpable(-1) then + luasnip.jump(-1) + else + fallback() + end + end, { + "i", + "s", + }), + }, + sources = cmp.config.sources({ + { name = "nvim_lsp" }, + { name = "luasnip" }, + { name = "buffer" }, + { name = "path" }, + }), + formatting = { + format = function(entry, item) + local icons = require("lazyvim.config").icons.kinds + if icons[item.kind] then + item.kind = icons[item.kind] .. item.kind + end + return require("tailwindcss-colorizer-cmp").formatter(entry, item) + end, + }, + experimental = { + ghost_text = { + hl_group = "LspCodeLens", + }, + }, + } + end, + config = function(_, opts) + local cmp = require("cmp") + require("luasnip.loaders.from_lua").load({ paths = "~/.config/nvim/snippets" }) + cmp.setup(opts) + end, + }, +} diff --git a/nvim/lua/plugins/dap.lua b/nvim/lua/plugins/dap.lua new file mode 100644 index 0000000..667b92b --- /dev/null +++ b/nvim/lua/plugins/dap.lua @@ -0,0 +1,255 @@ +return { + { + "mfussenegger/nvim-dap", + lazy = true, + dependencies = { + "rcarriga/nvim-dap-ui", + "theHamsta/nvim-dap-virtual-text", + { + "jay-babu/mason-nvim-dap.nvim", + opts = { + ensure_installed = { + "node2", + "python", + "javadbg", + "javatest", + "codelldb", + "firefox", + "bash", + "delve", + "coreclr", + }, + automatic_installation = true, + automatic_setup = true, + }, + config = function(_, opts) + require("mason-nvim-dap").setup(opts) + require("mason-nvim-dap").setup_handlers({ + javadbg = function() end, + }) + end, + }, + }, + config = function() + local dap = require("dap") + dap.adapters.lldb = { + type = "executable", + command = "/usr/bin/lldb-vscode", + name = "lldb", + } + dap.adapters.nlua = function(callback, config) + callback({ type = "server", host = config.host or "127.0.0.1", port = config.port or 8086 }) + end + dap.adapters.bashdb = { + type = "executable", + command = vim.fn.stdpath("data") .. "/mason/packages/bash-debug-adapter/bash-debug-adapter", + name = "bashdb", + } + + local rust_dap = vim.fn.getcwd() + local filename = "" + for w in rust_dap:gmatch("([^/]+)") do + filename = w + end + + dap.configurations.rust = { + { + type = "lldb", + request = "launch", + program = function() + return rust_dap .. "/target/debug/" .. filename + end, + --program = '${fileDirname}/${fileBasenameNoExtension}', + cwd = "${workspaceFolder}", + stopOnEntry = true, + terminal = "integrated", + }, + } + + dap.configurations.cpp = { + { + name = "debug cpp", + type = "lldb", + request = "launch", + program = function() + return vim.fn.input("Path to executable: ", vim.fn.getcwd() .. "/build/", "file") + end, + cwd = "${workspaceFolder}", + stopOnEntry = true, + terminal = "integrated", + }, + } + dap.configurations.c = dap.configurations.cpp + + dap.configurations.python = { + { + type = "python", -- the type here established the link to the adapter definition: `dap.adapters.python` + request = "launch", + name = "Launch file", + program = "${file}", -- This configuration will launch the current file if used. + pythonPath = function() + local cwd = vim.fn.getcwd() + if vim.fn.executable(cwd .. "/venv/bin/python") == 1 then + return cwd .. "/venv/bin/python" + elseif vim.fn.executable(cwd .. "/.venv/bin/python") == 1 then + return cwd .. "/.venv/bin/python" + else + return "/usr/bin/python" + end + end, + }, + } + dap.configurations.java = { + { + request = "attach", + name = "Debug (Attach) - Remote", + hostName = "127.0.0.1", + port = 5005, + }, + } + dap.configurations.go = { + { + type = "delve", + name = "Debug", + request = "launch", + program = "${file}", + }, + { + type = "delve", + name = "Debug test", -- configuration for debugging test files + request = "launch", + mode = "test", + program = "${file}", + }, + { + type = "delve", + name = "Debug test (go.mod)", + request = "launch", + mode = "test", + program = "./${relativeFileDirname}", + }, + } + dap.configurations.javascript = { + { + name = "Launch", + type = "js", + request = "launch", + program = "${file}", + cwd = vim.fn.getcwd(), + sourceMaps = true, + protocol = "inspector", + console = "integratedTerminal", + }, + } + dap.configurations.typescript = { + { + name = "Debug with Firefox", + type = "firefox", + request = "launch", + reAttach = true, + url = "http://localhost:3000", + webRoot = "${workspaceFolder}", + firefoxExecutable = "/usr/bin/firefox", + }, + } + dap.configurations.lua = { + { + type = "nlua", + request = "attach", + name = "Attach to running Neovim instance", + }, + } + dap.configurations.cs = { + { + type = "coreclr", + name = "launch - netcoredbg", + request = "launch", + program = function() + return vim.fn.input("Path to dll", vim.fn.getcwd() .. "/bin/Debug/", "file") + end, + }, + } + dap.configurations.sh = { + { + type = "bashdb", + request = "launch", + name = "Launch file", + showDebugOutput = true, + pathBashdb = vim.fn.stdpath("data") .. "/mason/packages/bash-debug-adapter/extension/bashdb_dir/bashdb", + pathBashdbLib = vim.fn.stdpath("data") .. "/mason/packages/bash-debug-adapter/extension/bashdb_dir", + trace = true, + file = "${file}", + program = "${file}", + cwd = "${workspaceFolder}", + pathCat = "cat", + pathBash = "/bin/bash", + pathMkfifo = "mkfifo", + pathPkill = "pkill", + args = {}, + env = {}, + terminalKind = "integrated", + }, + } + require("dapui").setup({ + icons = { expanded = "▾", collapsed = "▸", current_frame = "▸" }, + mappings = { + expand = { "", "<2-LeftMouse>" }, + open = "o", + remove = "d", + edit = "e", + repl = "r", + toggle = "t", + }, + expand_lines = vim.fn.has("nvim-0.7") == 1, + layouts = { + { + elements = { + { id = "scopes", size = 0.25 }, + "breakpoints", + "stacks", + "watches", + }, + size = 40, -- 40 columns + position = "left", + }, + { + elements = { + "repl", + "console", + }, + size = 0.25, -- 25% of total lines + position = "bottom", + }, + }, + controls = { + enabled = true, + element = "repl", + icons = { + pause = "", + play = "", + step_into = "", + step_over = "", + step_out = "", + step_back = "", + run_last = "↻", + terminate = "□", + }, + }, + floating = { + max_height = nil, -- These can be integers or a float between 0 and 1. + max_width = nil, -- Floats will be treated as percentage of your screen. + border = "single", -- Border style. Can be "single", "double" or "rounded" + mappings = { + close = { "q", "" }, + }, + }, + windows = { indent = 1 }, + render = { + max_type_length = nil, -- Can be integer or nil. + max_value_lines = 100, -- Can be integer or nil. + }, + }) + require("nvim-dap-virtual-text").setup() + end, + }, +} diff --git a/nvim/lua/plugins/dashboard.lua b/nvim/lua/plugins/dashboard.lua new file mode 100644 index 0000000..958da04 --- /dev/null +++ b/nvim/lua/plugins/dashboard.lua @@ -0,0 +1,69 @@ +return { + { + "goolord/alpha-nvim", + event = "VimEnter", + opts = function() + local alpha = require("alpha") + local dashboard = require("alpha.themes.dashboard") + dashboard.section.header.val = { + [[ _______ ___ _______. __ __ __ _______ ]], + [[| \ / \ / || | | | | | | ____|]], + [[| .--. | / ^ \ | (----`| |__| | | | | |__ ]], + [[| | | | / /_\ \ \ \ | __ | | | | __| ]], + [[| '--' | / _____ \ .----) | | | | | | | | |____ ]], + [[|_______/ /__/ \__\ |_______/ |__| |__| |__| |_______|]], + } + dashboard.section.buttons.val = { + dashboard.button("f", " Find file", ":lua require('telescope.builtin').find_files()"), + dashboard.button( + "b", + " Open File Browser", + ":lua require('telescope').extensions.file_browser.file_browser{}" + ), + dashboard.button("e", " New file", ":ene startinsert "), + dashboard.button("p", " Find project", ":lua require('telescope').extensions.project.project{}"), + dashboard.button("r", " Recently used files", ":lua require('telescope.builtin').oldfiles() "), + dashboard.button("t", " Zoxide", ":lua require('telescope').extensions.zoxide.list{}"), + dashboard.button("c", " Configuration", ":e ~/.config/nvim/init.lua "), + dashboard.button("q", " Quit Neovim", ":qa"), + } + + local function footer() + return "dashie@dashie.org" + end + + dashboard.section.footer.val = footer() + + dashboard.section.footer.opts.hl = "Type" + dashboard.section.header.opts.hl = "Include" + dashboard.section.buttons.opts.hl = "Keyword" + + dashboard.opts.opts.noautocmd = true + alpha.setup(dashboard.opts) + end, + config = function(_, dashboard) + -- close Lazy and re-open when the dashboard is ready + if vim.o.filetype == "lazy" then + vim.cmd.close() + vim.api.nvim_create_autocmd("User", { + pattern = "AlphaReady", + callback = function() + require("lazy").show() + end, + }) + end + + require("alpha").setup(dashboard.opts) + + vim.api.nvim_create_autocmd("User", { + pattern = "LazyVimStarted", + callback = function() + local stats = require("lazy").stats() + local ms = (math.floor(stats.startuptime * 100 + 0.5) / 100) + dashboard.section.footer.val = "⚡ Neovim loaded " .. stats.count .. " plugins in " .. ms .. "ms" + pcall(vim.cmd.AlphaRedraw) + end, + }) + end, + }, +} diff --git a/nvim/lua/plugins/disabled.lua b/nvim/lua/plugins/disabled.lua new file mode 100644 index 0000000..0e680b8 --- /dev/null +++ b/nvim/lua/plugins/disabled.lua @@ -0,0 +1,4 @@ +return { + -- { "L3MON4D3/LuaSnip", enabled = false }, + -- { "hrsh7th/nvim-cmp", enabled = false }, +} diff --git a/nvim/lua/plugins/java.lua b/nvim/lua/plugins/java.lua new file mode 100644 index 0000000..5044d6f --- /dev/null +++ b/nvim/lua/plugins/java.lua @@ -0,0 +1,3 @@ +local M = {} + +return M diff --git a/nvim/lua/plugins/lsp.lua b/nvim/lua/plugins/lsp.lua new file mode 100644 index 0000000..483681e --- /dev/null +++ b/nvim/lua/plugins/lsp.lua @@ -0,0 +1,188 @@ +return { + { + "neovim/nvim-lspconfig", + lazy = true, + event = { "BufReadPre", "BufNewFile" }, + dependencies = { + { "folke/neoconf.nvim", cmd = "Neoconf", config = true }, + { "folke/neodev.nvim", opts = { experimental = { pathStrict = true } } }, + "mason.nvim", + "williamboman/mason-lspconfig.nvim", + "lvimuser/lsp-inlayhints.nvim", + "mfussenegger/nvim-jdtls", + { + "hrsh7th/cmp-nvim-lsp", + cond = function() + return require("lazyvim.util").has("nvim-cmp") + end, + }, + }, + ---@class PluginLspOpts + opts = { + -- options for vim.diagnostic.config() + diagnostics = { + underline = true, + update_in_insert = false, + virtual_text = { spacing = 4, prefix = "●" }, + severity_sort = true, + }, + -- Automatically format on save + autoformat = false, + -- options for vim.lsp.buf.format + -- `bufnr` and `filter` is handled by the LazyVim formatter, + -- but can be also overridden when specified + format = { + formatting_options = nil, + timeout_ms = nil, + }, + -- LSP Server Settings + ---@type lspconfig.options + servers = { + jsonls = {}, + tailwindcss = {}, + cssls = {}, + html = {}, + clangd = {}, + pyright = {}, + cmake = {}, + bashls = {}, + ansiblels = {}, + marksman = {}, + asm_lsp = {}, + tsserver = { + settings = { + typescript = { + inlayHints = { + includeInlayParameterNameHints = "all", + includeInlayParameterNameHintsWhenArgumentMatchesName = true, + includeInlayFunctionParameterTypeHints = true, + includeInlayVariableTypeHints = true, + includeInlayPropertyDeclarationTypeHints = true, + includeInlayFunctionLikeReturnTypeHints = true, + includeInlayEnumMemberValueHints = true, + }, + }, + javascript = { + inlayHints = { + includeInlayParameterNameHints = "all", + includeInlayParameterNameHintsWhenArgumentMatchesName = true, + includeInlayFunctionParameterTypeHints = true, + includeInlayVariableTypeHints = true, + includeInlayPropertyDeclarationTypeHints = true, + includeInlayFunctionLikeReturnTypeHints = true, + includeInlayEnumMemberValueHints = true, + }, + }, + }, + }, + ltex = { + settings = { + ltex = { + checkFrequency = "save", + }, + }, + }, + texlab = {}, + gopls = {}, + sqls = {}, + taplo = {}, + lemminx = {}, + yamlls = {}, + lua_ls = { + -- mason = false, -- set to false if you don't want this server to be installed with mason + settings = { + Lua = { + workspace = { + checkThirdParty = false, + }, + completion = { + callSnippet = "Replace", + }, + }, + }, + }, + }, + setup = { + jdtls = function() + return true + end, + }, + }, + config = function(plugin, opts) + -- setup autoformat + require("lazyvim.plugins.lsp.format").autoformat = opts.autoformat + -- setup formatting and keymaps + require("lazyvim.util").on_attach(function(client, buffer) + require("lazyvim.plugins.lsp.format").on_attach(client, buffer) + require("lazyvim.plugins.lsp.keymaps").on_attach(client, buffer) + end) + + -- diagnostics + for name, icon in pairs(require("lazyvim.config").icons.diagnostics) do + name = "DiagnosticSign" .. name + vim.fn.sign_define(name, { text = icon, texthl = name, numhl = "" }) + end + vim.diagnostic.config(opts.diagnostics) + + require("lsp-inlayhints").setup({}) + local servers = opts.servers + local capabilities = require("cmp_nvim_lsp").default_capabilities(vim.lsp.protocol.make_client_capabilities()) + local on_attach = function(client, bufnr) + vim.api.nvim_buf_set_option(bufnr, "omnifunc", "v:lua.vim.lsp.omnifunc") + local optslsp = { noremap = false, silent = true, buffer = bufnr } + require("lsp-inlayhints").on_attach(client, bufnr) + end + + local function setup(server) + local server_opts = vim.tbl_deep_extend("force", { + capabilities = vim.deepcopy(capabilities), + on_attach = on_attach, + vim.lsp.diagnostic.on_publish_diagnostics, + { + -- Disable virtual_text + virtual_text = true, + }, + }, servers[server] or {}) + + if opts.setup[server] then + if opts.setup[server](server, server_opts) then + return + end + elseif opts.setup["*"] then + if opts.setup["*"](server, server_opts) then + return + end + end + require("lspconfig")[server].setup(server_opts) + end + + -- temp fix for lspconfig rename + -- https://github.com/neovim/nvim-lspconfig/pull/2439 + local mappings = require("mason-lspconfig.mappings.server") + if not mappings.lspconfig_to_package.lua_ls then + mappings.lspconfig_to_package.lua_ls = "lua-language-server" + mappings.package_to_lspconfig["lua-language-server"] = "lua_ls" + end + + local mlsp = require("mason-lspconfig") + local available = mlsp.get_available_servers() + + local ensure_installed = {} ---@type string[] + for server, server_opts in pairs(servers) do + if server_opts then + server_opts = server_opts == true and {} or server_opts + -- run manual setup if mason=false or if this is a server that cannot be installed with mason-lspconfig + if server_opts.mason == false or not vim.tbl_contains(available, server) then + setup(server) + else + ensure_installed[#ensure_installed + 1] = server + end + end + end + + require("mason-lspconfig").setup({ ensure_installed = ensure_installed }) + require("mason-lspconfig").setup_handlers({ setup }) + vim.cmd([[highlight LspInlayHint guibg=#1A1B26]]) + end, + }, +} diff --git a/nvim/lua/plugins/plugins.lua b/nvim/lua/plugins/plugins.lua new file mode 100644 index 0000000..3cef678 --- /dev/null +++ b/nvim/lua/plugins/plugins.lua @@ -0,0 +1,129 @@ +return { + { + "LazyVim/LazyVim", + opts = { + colorscheme = "tokyonight-night", + }, + }, + { + "akinsho/toggleterm.nvim", + lazy = true, + opts = { + autochdir = true, + }, + }, + { + "brenoprata10/nvim-highlight-colors", + lazy = true, + event = { "BufReadPre", "BufNewFile" }, + config = function(_, _) + require("nvim-highlight-colors").setup({ + enable_tailwind = true, + }) + vim.cmd(":hi clear CursorLine") + vim.cmd(":hi clear CursorLineFold") + vim.cmd(":hi clear CursorLineSign") + end, + }, + { + "gpanders/editorconfig.nvim", + event = { "BufReadPre", "BufNewFile" }, + lazy = true, + }, + { + "lvimuser/lsp-inlayhints.nvim", + event = { "BufReadPre", "BufNewFile" }, + lazy = true, + }, + { + "ThePrimeagen/harpoon", + lazy = true, + config = function() + require("telescope").load_extension("harpoon") + end, + }, + { + "iamcco/markdown-preview.nvim", + lazy = true, + event = "FileType markdown", + build = "cd app && yarn install", + }, + { + "nvim-telescope/telescope-project.nvim", + lazy = true, + }, + { + "nvim-telescope/telescope-file-browser.nvim", + lazy = true, + config = function() + require("telescope").load_extension("file_browser") + end, + }, + { + "jvgrootveld/telescope-zoxide", + lazy = true, + config = function() + local z_utils = require("telescope._extensions.zoxide.utils") + local t = require("telescope") + -- Configure the extension + t.setup({ + extensions = { + zoxide = { + prompt_title = "[ Queries ]", + mappings = { + default = { + after_action = function(selection) + print("Update to (" .. selection.z_score .. ") " .. selection.path) + end, + }, + [""] = { + before_action = function(selection) + print("before C-s") + end, + action = function(selection) + vim.cmd("edit " .. selection.path) + end, + }, + [""] = { action = z_utils.create_basic_command("split") }, + }, + }, + }, + }) + + -- Load the extension + t.load_extension("zoxide") + end, + }, + { + "lervag/vimtex", + config = function() + -- require("vimtex").setup() + vim.cmd("let g:vimtex_quickfix_mode=0") + vim.cmd("let g:vimtex_view_general_viewer = 'evince'") + vim.cmd("let g:vimtex_compiler_method = 'tectonic'") + vim.cmd( + "let g:vimtex_compiler_latexmk = {'options': ['-pdf', '-shell-escape', '-file-line-error', '--extra-mem-bot=10000000', '-synctex=1', '-interaction=nonstopmode',],}" + ) + end, + }, + { + "nvim-neo-tree/neo-tree.nvim", + opts = { + close_if_last_window = true, + filesystem = { + group_empty_dirs = true, + }, + window = { + mappings = { + ["f"] = "close_window", + }, + position = "right", + scan_mode = "deep", + }, + }, + }, + { + "echasnovski/mini.ai", + enabled = false, + }, +} diff --git a/nvim/snippets/.texsnippetsold b/nvim/snippets/.texsnippetsold new file mode 100644 index 0000000..6a23f7e --- /dev/null +++ b/nvim/snippets/.texsnippetsold @@ -0,0 +1,55 @@ + +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 new file mode 100644 index 0000000..38317b9 --- /dev/null +++ b/nvim/snippets/tex.lua @@ -0,0 +1,210 @@ +local ls = require("luasnip") +-- some shorthands... +local s = ls.s +local i = ls.i +local t = ls.t +local d = ls.dynamic_node +local c = ls.choice_node +local f = ls.function_node +local sn = ls.snippet_node + +local fmt = require("luasnip.extras.fmt").fmt +local rep = require("luasnip.extras").rep + +local snippets, autosnippets = {}, {} +local group = vim.api.nvim_create_augroup("Tex Snippets", { clear = true }) +local file_pattern = "*.tex" +------------------------------------------------- boilerplate end +-- snippers go here: + +local formSnippet = s( + "form-", + fmt( + [[ +\, \newline +\large \textcolor{{purple}}{{\( {1} \)}}\newline +\, \newline +\normalsize Legend: \newline +\begin{{itemize}} +\item {2} +\item {3} +\item {4} +\item {5} +\end{{itemize}} + ]], + { + i(1, "formula"), + i(2, "item 1"), + i(3, "item 2"), + i(4, "item 3"), + i(5, "item 4"), + } + ) +) +table.insert(snippets, formSnippet) + +local listSnippet = s( + "list-", + fmt( + [[ +\begin{{itemize}} +\item \textcolor{{{1}}}{{{5}}} +\item \textcolor{{{2}}}{{{6}}} +\item \textcolor{{{3}}}{{{7}}} +\item \textcolor{{{4}}}{{{8}}} +\end{{itemize}} + ]], + { + i(1, "color"), + rep(1), + rep(1), + rep(1), + i(2, "item 1"), + i(3, "item 2"), + i(4, "item 3"), + i(5, "item 4"), + } + ) +) +table.insert(snippets, listSnippet) + +local enumerateSnippet = s( + "enum-", + fmt( + [[ +\begin{{enumerate}} +\item \textcolor{{{1}}}{{{5}}} +\item \textcolor{{{2}}}{{{6}}} +\item \textcolor{{{3}}}{{{7}}} +\item \textcolor{{{4}}}{{{8}}} +\end{{enumerate}} + ]], + { + i(1, "color"), + rep(1), + rep(1), + rep(1), + i(2, "item 1"), + i(3, "item 2"), + i(4, "item 3"), + i(5, "item 4"), + } + ) +) +table.insert(snippets, enumerateSnippet) + +local tableSnippet = s( + "table-", + fmt( + [[ +\begin{{table}}[ht!] +\section{{{}}} +\begin{{tabular}}{{|m{{0.2\linewidth}}|m{{0.755\linewidth}}|}} +\hline +{} +\hline +\end{{tabular}} +\end{{table}} + ]], + { + i(1, "Section Name"), + i(2, "data....."), + } + ) +) +table.insert(snippets, tableSnippet) + +local tabularSnippet = s( + "tabular-", + fmt( + [[ +\begin{{tabular}}{{|m{{0.2\linewidth}}|m{{0.755\linewidth}}|}} +\hline +{} +\hline +\end{{tabular}} + ]], + { + i(1, "data....."), + } + ) +) +table.insert(snippets, tabularSnippet) + +local textcolorSnippet = s( + "tx-", + fmt( + [[ +\textcolor{{{1}}}{{{2}}} + ]], + { + i(1, "color"), + i(2, "text..."), + } + ) +) +table.insert(snippets, textcolorSnippet) + +local boldSnippet = s( + "bold-", + fmt( + [[ +\textbf{{{1}}} + ]], + { + i(1, "text..."), + } + ) +) +table.insert(snippets, boldSnippet) + +local minipgSnippet = s( + "mini-", + fmt( + [[ +\minipg{{ +{1} +}}{{ +{2} +}}[{3}] + ]], + { + i(1, "data..."), + i(2, "data..."), + i(3, "0.25,0.25"), + } + ) +) +table.insert(snippets, minipgSnippet) + +local graphicSnippet = s( + "graph-", + fmt( + [[ +\includegraphics[scale={1}]{{{2}}} + ]], + { + i(1, "0.4"), + i(2, "something.png"), + } + ) +) +table.insert(snippets, graphicSnippet) + +local lstSnippet = s( + "code-", + fmt( + [[ +\begin{{lstlisting}} +{} +\end{{lstlisting}} + ]], + { + i(1, "data"), + } + ) +) +table.insert(snippets, lstSnippet) + +------------------------------------------------- snippets end +return snippets, autosnippets diff --git a/nvim/stylua.toml b/nvim/stylua.toml new file mode 100644 index 0000000..5d6c50d --- /dev/null +++ b/nvim/stylua.toml @@ -0,0 +1,3 @@ +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 deleted file mode 100644 index 7d4f454..0000000 --- a/override/teams.nix +++ /dev/null @@ -1,35 +0,0 @@ -{ - stdenv, - lib, - copyDesktopItems, - makeDesktopItem, - chromium, - ... -}: -stdenv.mkDerivation (final: { - pname = "teams-pwa"; - name = final.pname; - nativeBuildInputs = [copyDesktopItems]; - dontUnpack = true; - - desktopItems = [ - (makeDesktopItem { - name = final.pname; - icon = final.pname; - exec = "${chromium}/bin/${ - chromium.meta.mainProgram or chromium.pname - } --app=https://teams.microsoft.com"; - desktopName = "Microsoft Teams PWA"; - genericName = "Progressive Web App for Microsoft Teams"; - categories = ["Network"]; - mimeTypes = ["x-scheme-handler/msteams"]; - }) - ]; - - meta = with lib; { - description = "Microsoft Teams PWA"; - homepage = "https://teams.microsoft.com"; - maintainers = with maintainers; [ners]; - platforms = chromium.meta.platforms; - }; -}) diff --git a/patches/darkeader.patch b/patches/darkeader.patch deleted file mode 100644 index f1663df..0000000 --- a/patches/darkeader.patch +++ /dev/null @@ -1,456 +0,0 @@ -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 deleted file mode 100644 index ef2c19f..0000000 --- a/patches/darkreader.nix +++ /dev/null @@ -1,25 +0,0 @@ -# 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 new file mode 100644 index 0000000..93b37d5 --- /dev/null +++ b/qt5ct/colors/Dracula.conf @@ -0,0 +1,4 @@ +[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 new file mode 100644 index 0000000..9c04d1f --- /dev/null +++ b/qt5ct/colors/Gradience.conf @@ -0,0 +1,4 @@ +[ColorScheme] +active_colors=#ffc0caf5, #ff1a1b26, #ff373949, #ff2b2c3b, #ff1a1b26, #ff2b2c3b, #ffc0caf5, #ffc0caf5, #ffc0caf5, #ff1a1b26, #ff1a1b26, #19000000, #ff2b2c3b, #ffc0caf5, #ff3584e4, #ff1b6acb, #ff1a1b26, #ff242530, #ff1a1b26, #ffc0caf5, #ffc0caf5 +disabled_colors=#ff6d728d, #ff1a1b26, #ff373949, #ff2b2c3b, #ff1a1b26, #ff2b2c3b, #ff6d728d, #ff6d728d, #ff6d728d, #ff1a1b26, #ff1a1b26, #19000000, #ff2b2c3b, #ff6d728d, #ff3584e4, #ff1b6acb, #ff1a1b26, #ff242530, #ff1a1b26, #ff6d728d, #ff6d728d +inactive_colors=#ff6d728d, #ff1a1b26, #ff373949, #ff2b2c3b, #ff1a1b26, #ff2b2c3b, #ff6d728d, #ff6d728d, #ff6d728d, #ff1a1b26, #ff1a1b26, #19000000, #ff2b2c3b, #ff6d728d, #ff3584e4, #ff1b6acb, #ff1a1b26, #ff242530, #ff1a1b26, #ff6d728d, #ff6d728d diff --git a/qt5ct/colors/mocha (copy).conf b/qt5ct/colors/mocha (copy).conf new file mode 100644 index 0000000..b71eead --- /dev/null +++ b/qt5ct/colors/mocha (copy).conf @@ -0,0 +1,4 @@ +[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 new file mode 100644 index 0000000..4bc0e2c --- /dev/null +++ b/qt5ct/colors/mocha.conf @@ -0,0 +1,5 @@ +[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 new file mode 100644 index 0000000..9c04d1f --- /dev/null +++ b/qt5ct/colors/tokyonight.conf @@ -0,0 +1,4 @@ +[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 new file mode 100644 index 0000000..ab3a216 --- /dev/null +++ b/qt5ct/qss/tab.qss @@ -0,0 +1,6 @@ +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 new file mode 100644 index 0000000..8ff023c --- /dev/null +++ b/qt5ct/qt5ct.conf @@ -0,0 +1,38 @@ +[Appearance] +color_scheme_path=/home/dashie/.config/qt5ct/colors/tokyonight.conf +custom_palette=true +icon_theme=breeze-dark +standard_dialogs=default +style=Breeze + +[Fonts] +fixed="Noto Sans,12,-1,5,50,0,0,0,0,0" +general="Noto Sans,12,-1,5,50,0,0,0,0,0" + +[Interface] +activate_item_on_single_click=0 +buttonbox_layout=3 +cursor_flash_time=1000 +dialog_buttons_have_icons=0 +double_click_interval=400 +gui_effects=General, AnimateMenu, AnimateCombo, AnimateTooltip, AnimateToolBox +keyboard_scheme=4 +menus_have_icons=true +show_shortcuts_in_context_menus=true +stylesheets=/home/dashie/.config/qt5ct/qss/tab.qss, /usr/share/qt5ct/qss/scrollbar-simple.qss, /usr/share/qt5ct/qss/sliders-simple.qss, /usr/share/qt5ct/qss/tooltip-simple.qss, /usr/share/qt5ct/qss/traynotification-simple.qss +toolbutton_style=4 +underline_shortcut=0 +wheel_scroll_lines=3 + +[PaletteEditor] +geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\0\0\0\x2v\0\0\x2\x10\0\0\0\0\0\0\0\0\0\0\x2v\0\0\x2\x10\0\0\0\x2\x2\0\0\0\n\0\0\0\0\0\0\0\0\0\0\0\x2v\0\0\x2\x10) + +[QSSEditor] +geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\0\0\0\x2\x82\0\0\x1\xf2\0\0\0\0\0\0\0\0\0\0\x2\x82\0\0\x1\xf2\0\0\0\x2\x2\0\0\0\n\0\0\0\0\0\0\0\0\0\0\0\x2\x82\0\0\x1\xf2) + +[SettingsWindow] +geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\0\0\0\x4\xea\0\0\x2\xd9\0\0\0\0\0\0\0\0\0\0\x4\xea\0\0\x2\xd9\0\0\0\x2\x2\0\0\0\n\0\0\0\0\0\0\0\0\0\0\0\x4\xea\0\0\x2\xd9) + +[Troubleshooting] +force_raster_widgets=1 +ignored_applications=@Invalid() diff --git a/qt6ct/colors/Dracula.conf b/qt6ct/colors/Dracula.conf new file mode 100644 index 0000000..93b37d5 --- /dev/null +++ b/qt6ct/colors/Dracula.conf @@ -0,0 +1,4 @@ +[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 new file mode 100644 index 0000000..f3a8882 --- /dev/null +++ b/qt6ct/colors/gg.conf @@ -0,0 +1,4 @@ +[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 new file mode 100644 index 0000000..598d4a9 --- /dev/null +++ b/qt6ct/colors/mocha (copy).conf @@ -0,0 +1,4 @@ +[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 new file mode 100644 index 0000000..598d4a9 --- /dev/null +++ b/qt6ct/colors/mocha.conf @@ -0,0 +1,4 @@ +[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 new file mode 100644 index 0000000..9c04d1f --- /dev/null +++ b/qt6ct/colors/toykonight.conf @@ -0,0 +1,4 @@ +[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 new file mode 100644 index 0000000..4f338f0 --- /dev/null +++ b/qt6ct/qt6ct.conf @@ -0,0 +1,34 @@ +[Appearance] +color_scheme_path=/home/dashie/.config/qt6ct/colors/toykonight.conf +custom_palette=true +standard_dialogs=default +style=Adwaita-Dark + +[Fonts] +fixed="DejaVu LGC Sans,12,-1,5,400,0,0,0,0,0,0,0,0,0,0,1" +general="DejaVu LGC Sans,12,-1,5,400,0,0,0,0,0,0,0,0,0,0,1" + +[Interface] +activate_item_on_single_click=2 +buttonbox_layout=3 +cursor_flash_time=1000 +dialog_buttons_have_icons=0 +double_click_interval=400 +gui_effects=General, AnimateMenu, AnimateCombo, AnimateTooltip, AnimateToolBox +keyboard_scheme=4 +menus_have_icons=true +show_shortcuts_in_context_menus=true +stylesheets=@Invalid() +toolbutton_style=4 +underline_shortcut=1 +wheel_scroll_lines=3 + +[PaletteEditor] +geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\0\0\0\x2\x30\0\0\x1\xf4\0\0\0\0\0\0\0\0\0\0\x2\x30\0\0\x1\xf4\0\0\0\0\0\0\0\0\a\x80\0\0\0\0\0\0\0\0\0\0\x2\x30\0\0\x1\xf4) + +[SettingsWindow] +geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\0\0\0\x3#\0\0\x2\xe9\0\0\0\0\0\0\0\0\0\0\x3#\0\0\x2\xe9\0\0\0\x2\0\0\0\0\n\0\0\0\0\0\0\0\0\0\0\0\x3#\0\0\x2\xe9) + +[Troubleshooting] +force_raster_widgets=1 +ignored_applications=@Invalid() diff --git a/rofi/config.rasi b/rofi/config.rasi new file mode 100644 index 0000000..4d57f97 --- /dev/null +++ b/rofi/config.rasi @@ -0,0 +1,19 @@ +configuration { + matching: "prefix"; + show-icons: true; + icon-theme: "Papirus"; + sort: true; + sorting-method: "fzf"; + modes: "drun,window,calc,run,filebrowser"; + steal-focus: true; + drun-match-fields: "exec,name,categories,keywords,generic"; + hover-select: true; + window-thumbnail: true; + drun-use-desktop-cache: true; + application-fallback-icon: ""; + display-window: "Open Applications"; + display-drun: "Desktop Applications"; + display-run: "Terminal Applications"; + display-calc: "Calculator"; + display-filebrowser: "Filebrowser"; + } diff --git a/rofi/themes/tokyonight.rasi b/rofi/themes/tokyonight.rasi new file mode 100644 index 0000000..65c63fd --- /dev/null +++ b/rofi/themes/tokyonight.rasi @@ -0,0 +1,117 @@ +/* + * ROFI color theme + * + * Based on Something Found in the Internet + * + * User: Contributors + * Copyright: *! + */ + +configuration { + font: "Noto Sans 12"; + + drun { + display-name: ""; + } + + run { + display-name: ""; + } + + window { + display-name: ""; + hide-active-window: true; + } + + timeout { + delay: 10; + action: "kb-cancel"; + } +} + +* { + bg: #1a1b26FF; + bg-alt: #232433FF; + fg-alt-dim: #ffffff22; + fg: #6a6f87; + fg-alt: #a9b1d6; + width: 100%; + height: 100%; + border: 0; + margin: 0; + padding: 30% 40% 30% 40%; + spacing: 0; +} + +window { + /* transparency: "real"; */ + /* width: 700px; */ + background-color: @fg-alt-dim; +} + +mainbox { + border-radius: 15px; + padding: 0; + children: [inputbar, listview]; + background-color: @bg; +} + + + +inputbar { + padding: 0; + background-color: @bg-alt; + children: [prompt, entry]; + text-color: @fg; +} + +entry { + padding: 0; + background-color: inherit; + padding: 12px 3px; + background-color: @bg; + text-color: @fg; +} + +prompt { + padding: 0; + background-color: inherit; + padding: 12px; + background-color: @bg; + text-color: @fg; +} + +listview { + padding: 0; + lines: 8; + background-color: @bg; + text-color: @fg; +} + +element { + padding: 0; + children: [element-icon, element-text]; + background-color: @bg; +} + +element-icon { + padding: 0; + padding: 10px 10px; + size: 25px; + background-color: @bg; + text-color: @fg; +} + +element-text { + padding: 0; + padding: 10px 0; + background-color: @bg; + text-color: @fg; +} + +element-text selected { + padding: 0; + text-color: @fg-alt; + background-color: @bg-alt; +} + diff --git a/setup.sh b/setup.sh new file mode 100755 index 0000000..216051e --- /dev/null +++ b/setup.sh @@ -0,0 +1,20 @@ +find $PWD -maxdepth 1 -mindepth 0 -exec ln -s '{}' $HOME/.config/ \; +mv $HOME/.config/.zshrc ../.zshrc +unlink $HOME/.config/.git +unlink $HOME/.config/.gitignore +unlink $HOME/.config/README.md +unlink $HOME/.config/eww_desktop +unlink $HOME/.config/hypr_desktop +unlink $HOME/.config/eww_laptop +unlink $HOME/.config/hypr_laptop +unlink $HOME/.config/setup.sh +unlink $HOME/.config/dotFiles +gsettings set org.gnome.desktop.interface color-scheme 'prefer-dark' + +if [ "$1" = "laptop" ]; then + ln -s $PWD/eww_laptop $HOME/.config/eww + ln -s $PWD/hypr_laptop $HOME/.config/hypr +elif [ "$1" = "desktop" ]; then + ln -s $PWD/eww_desktop $HOME/.config/eww + ln -s $PWD/hypr_desktop $HOME/.config/hypr +fi diff --git a/spotify-player/app.toml b/spotify-player/app.toml new file mode 100644 index 0000000..9edea94 --- /dev/null +++ b/spotify-player/app.toml @@ -0,0 +1,4 @@ +enable_media_control = true +[device] +volume = 100 +audio_cache = true diff --git a/swappy/config b/swappy/config new file mode 100644 index 0000000..da88eb2 --- /dev/null +++ b/swappy/config @@ -0,0 +1,10 @@ +[Default] +save_dir=$HOME/Pictures/Screenshots +save_filename_format=swappy-%Y%m%d-%H%M%S.png +show_panel=false +line_size=5 +text_size=20 +text_font=sans-serif +paint_mode=brush +early_exit=false +fill_shape=false diff --git a/wofi/style.css b/wofi/style.css new file mode 100644 index 0000000..381dbdd --- /dev/null +++ b/wofi/style.css @@ -0,0 +1,20 @@ +window { + margin: 0px; + background-color: #0f0f17; + border-radius: 10px; + opacity: 0.8; +} + +#inner-box { + background-color: #1a1b26; + margin: 5px; + border: none; + border-radius: 10px; +} + +#outer-box { + background-color: #0f0f17; + margin: 5px; + border: none; + border-radius: 10px; +}