diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml
new file mode 100644
index 000000000..280d4c9d0
--- /dev/null
+++ b/.github/FUNDING.yml
@@ -0,0 +1,13 @@
+# These are supported funding model platforms
+
+github: Athena-OS
+patreon: # Replace with a single Patreon username
+open_collective: # Replace with a single Open Collective username
+ko_fi: # Replace with a single Ko-fi username
+tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
+community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
+liberapay: # Replace with a single Liberapay username
+issuehunt: # Replace with a single IssueHunt username
+otechie: # Replace with a single Otechie username
+lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry
+custom: ["https://www.paypal.com/donate/?hosted_button_id=MTYRF2NQT2BWA"] # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']
diff --git a/.github/ISSUE_TEMPLATE/--bug_report.yml b/.github/ISSUE_TEMPLATE/--bug_report.yml
new file mode 100644
index 000000000..7cabfbc07
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/--bug_report.yml
@@ -0,0 +1,91 @@
+name: "🐞Bug report"
+description: Report a bug
+title: "[BUG]: "
+labels: ["bug", "triage"]
+body:
+- type: markdown
+ attributes:
+ value: |
+ Please [search for existing issues](https://github.com/Athena-OS/athena-iso/issues) before creating a new one.
+
+- type: input
+ attributes:
+ label: Athena OS version
+ description: |
+ Please run `cat /etc/dev-rel | grep "ISO_RELEASE" | awk -F"=" '{print $2}'` to get the build of Athena OS you are on.
+ You can get additional information about the version where possible, e.g. run `lsb_release -a`
+ placeholder: "Athena OS v[xx.yy.zz]"
+ validations:
+ required: true
+
+- type: checkboxes
+ attributes:
+ label: Which environment or technology are you using?
+ description: |
+ Tell us which environment the issue is affecting.
+ options:
+ - label: "Baremetal"
+ - label: "VirtualBox Virtual Machine"
+ - label: "VMware Virtual Machine"
+ - label: "Hyper-V Virtual Machine"
+ - label: "QEMU/KVM"
+ - label: "Parallels"
+ - label: "UTM"
+ - label: "Container"
+ - label: "WSL"
+
+- type: input
+ attributes:
+ label: Kernel version
+ description: |
+ Please tell us what version of the Linux kernel you are using, or if you are using a custom kernel.
+ You can run `uname -r` if that command is available to you, or by running `cat /proc/version`.
+ placeholder: "6.2.11-lts1-1-lts"
+ validations:
+ required: false
+
+- type: textarea
+ attributes:
+ label: Involved software
+ description: If you're reporting a bug involving Athena OS interaction with other applications, please tell us. What applications? What versions?
+ placeholder: |
+ docker, version 3.2.2
+ traceroute, Version: 1:2.0.21-1
+ codium 1.54.3 with Remote-WSL Extension 0.54.6
+ MyCustomApplication
+ validations:
+ required: false
+
+- type: textarea
+ attributes:
+ label: Repro steps
+ description: Please list out the steps to reproduce your bug.
+ placeholder: Your steps go here. Include relevant environmental variables or any other configuration.
+ validations:
+ required: true
+
+- type: textarea
+ attributes:
+ label: Expected behavior
+ description: What were you expecting to see? Include any relevant examples or documentation links.
+ placeholder: If you want to include screenshots, paste them into the text area or follow up with a separate comment.
+ validations:
+ required: true
+
+- type: textarea
+ attributes:
+ label: Actual behavior
+ description: What happened instead?
+ placeholder: Include the terminal output, straces of the failing command, etc. as necessary.
+ validations:
+ required: true
+
+- type: textarea
+ attributes:
+ label: Diagnostic logs
+ description: |
+ Please provide additional diagnostics if needed.
+ You can run `probe` and `sudo journalctl | tb` to generate link with logs accessible online.
+ placeholder: Your links to logs or other information go here.
+ validations:
+ required: false
diff --git a/.github/ISSUE_TEMPLATE/--feature-request.md b/.github/ISSUE_TEMPLATE/--feature-request.md
new file mode 100644
index 000000000..c9022fc27
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/--feature-request.md
@@ -0,0 +1,20 @@
+---
+name: "\U0001F4A1Feature request"
+about: Suggest an idea for this project
+title: "[ENHANCEMENT]:"
+labels: enhancement
+assignees: ''
+
+---
+
+**Is your feature request related to a problem? Please describe.**
+A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
+
+**Describe the solution you'd like**
+A clear and concise description of what you want to happen.
+
+**Describe alternatives you've considered**
+A clear and concise description of any alternative solutions or features you've considered.
+
+**Additional context**
+Add any other context or screenshots about the feature request here.
diff --git a/.github/ISSUE_TEMPLATE/--submit-theme.yml b/.github/ISSUE_TEMPLATE/--submit-theme.yml
new file mode 100644
index 000000000..62a78a987
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/--submit-theme.yml
@@ -0,0 +1,94 @@
+name: "🖼️Submit theme"
+description: Submit a theme
+title: "[THEME]: "
+labels: ["theme"]
+body:
+- type: markdown
+ attributes:
+ value: |
+ Refer to [Submitting Themes](https://www.athenaos.org/en/community/submitting-themes/) to know how to submit a theme.
+
+- type: checkboxes
+ attributes:
+ label: Which environment the theme is intended for?
+ description: |
+ Tell us which environment the theme is intended for.
+ options:
+ - label: "GNOME"
+ - label: "KDE Plasma"
+ - label: "Cinnamon"
+ - label: "MATE"
+ - label: "XFCE"
+ - label: "Hyprland"
+
+- type: input
+ attributes:
+ label: GTK Theme
+ description: |
+ Type the source of the GTK Theme.
+ placeholder: "https://github.com/EliverLara/Sweet"
+ validations:
+ required: true
+
+- type: input
+ attributes:
+ label: Icon Theme
+ description: |
+ Type the source of the Icon Theme.
+ placeholder: "https://github.com/EliverLara/candy-icons"
+ validations:
+ required: true
+
+- type: input
+ attributes:
+ label: Cursor Theme
+ description: |
+ Type the source of the Cursor Theme.
+ placeholder: "https://github.com/varlesh/oreo-cursors"
+ validations:
+ required: true
+
+- type: input
+ attributes:
+ label: Kitty Theme
+ description: |
+ Type the name of the Kitty Theme.
+ placeholder: "Kitty theme name"
+ validations:
+ required: true
+
+- type: input
+ attributes:
+ label: VSCodium Theme
+ description: |
+ Type the name of the VSCodium Theme.
+ placeholder: "VSCodium theme name"
+ validations:
+ required: true
+
+- type: input
+ attributes:
+ label: Tmux Theme
+ description: |
+ Type the name of the Tmux Theme.
+ placeholder: "Tmux theme name"
+ validations:
+ required: true
+
+- type: textarea
+ attributes:
+ label: Setting Instructions
+ description: Report the instructions for setting the theme correctly.
+ placeholder: |
+ Detailed instructions.
+ validations:
+ required: false
+
+- type: textarea
+ attributes:
+ label: Screenshots
+ description: Show your rice.
+ placeholder: |
+ Paste your images or use ![Image Label](https://link-to-your-image)
+ validations:
+ required: false
diff --git a/.github/ISSUE_TEMPLATE/-question.md b/.github/ISSUE_TEMPLATE/-question.md
new file mode 100644
index 000000000..9e8f247bd
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/-question.md
@@ -0,0 +1,10 @@
+---
+name: "❓Question"
+about: Ask your question
+title: "[QUESTION]:"
+labels: question
+assignees: ''
+
+---
+
+## Question
diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml
new file mode 100644
index 000000000..dd894770d
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/config.yml
@@ -0,0 +1,5 @@
+blank_issues_enabled: false
+contact_links:
+ - name: 🔥Discord
+ url: https://discord.gg/GuDyREsNkj
+ about: Join our Discord server. Feel free to ask for any question about Athena OS, IT or Cyber Security.
diff --git a/.github/workflows/nixiso.yml b/.github/workflows/nixiso.yml
new file mode 100644
index 000000000..a585142a3
--- /dev/null
+++ b/.github/workflows/nixiso.yml
@@ -0,0 +1,83 @@
+name: Build ArchISO Stable
+on:
+ # push:
+ workflow_dispatch:
+ # schedule:
+ # - cron: '0 0 */7 * *'
+
+jobs:
+ build:
+ env:
+ ATHENA_VERSION: 'rolling'
+ ISO_VERSION: 'rolling' # It must be the same on profiledef.sh and installation_script
+ ISO_ARCHITECTURE: 'x86_64'
+ runs-on: ubuntu-latest
+ container:
+ image: athenaos/base-devel:latest
+ options: --privileged
+ steps:
+ - name: Checkout files
+ uses: actions/checkout@v3
+
+ - name: Remove problematic mirrors
+ run: |
+ sed -i "/arch.mirror.constant.com/d" /etc/pacman.d/mirrorlist
+ sed -i "/us.leaseweb.net/d" /etc/pacman.d/mirrorlist
+ sed -i "/america.mirror.pkgbuild.com/d" /etc/pacman.d/mirrorlist
+ sed -i "/geo.mirror.pkgbuild.com/d" /etc/pacman.d/mirrorlist
+ sed -i "/london.mirror.pkgbuild.com/d" /etc/pacman.d/mirrorlist
+ sed -i "/geo-mirror.chaotic.cx/d" /etc/pacman.d/chaotic-mirrorlist
+ sed -i "/iad-us-mirror.silky.network/d" /etc/pacman.d/mirrorlist
+ sed -i "/archlinux.uk.mirror.allworldit.com/d" /etc/pacman.d/mirrorlist
+ sed -i "/mirror.lty.me/d" /etc/pacman.d/mirrorlist
+ sed -i "/archlinux.mailtunnel.eu/d" /etc/pacman.d/mirrorlist
+ sed -i "/pkg.fef.moe/d" /etc/pacman.d/mirrorlist
+ sed -i "/mirror.cyberbits.eu/d" /etc/pacman.d/mirrorlist
+ sed -i "/mirror.fra10.de.leaseweb.net/d" /etc/pacman.d/mirrorlist
+ sed -i "/mirror.ubrco.de/d" /etc/pacman.d/mirrorlist
+ sed -i "/europe.mirror.pkgbuild.com/d" /etc/pacman.d/mirrorlist
+ sed -i "/mirror.sunred.org/d" /etc/pacman.d/mirrorlist
+ sed -i "/mirror.netcologne.de/d" /etc/pacman.d/mirrorlist
+ sed -i "/mirrors.eze.sysarmy.com/d" /etc/pacman.d/mirrorlist
+
+ - name: Init Keys
+ run: |
+ rm -rf /etc/pacman.d/gnupg
+ pacman-key --init
+ pacman-key --populate
+ pacman -Syy
+
+ - name: Install rate-mirrors
+ run: pacman -Syyu --noconfirm rate-mirrors
+
+ - name: Set fastest mirrors
+ run: |
+ rate-mirrors --concurrency 40 --disable-comments --allow-root --save /etc/pacman.d/mirrorlist arch
+ rate-mirrors --concurrency 40 --disable-comments --allow-root --save /etc/pacman.d/chaotic-mirrorlist chaotic-aur
+
+ - name: Install dependencies
+ run: pacman -Syyu --noconfirm archiso git github-cli openssh rsync sshpass wget
+
+ - name: Build ArchISO
+ run: |
+ cd installation-scripts
+ ./30-build-the-iso-the-first-time.sh
+
+ - name: Upload to SourceForge
+ run: |
+ sshpass -p "${{ secrets.SOURCEFORGE_TOKEN }}" rsync -avP -e "ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" $HOME/Athena-Out/athena-${{env.ISO_VERSION}}-${{env.ISO_ARCHITECTURE}}.iso $HOME/Athena-Out/athena-${{env.ISO_VERSION}}-${{env.ISO_ARCHITECTURE}}.iso.md5 $HOME/Athena-Out/athena-${{env.ISO_VERSION}}-${{env.ISO_ARCHITECTURE}}.iso.sha1 $HOME/Athena-Out/athena-${{env.ISO_VERSION}}-${{env.ISO_ARCHITECTURE}}.iso.sha256 $HOME/Athena-Out/athena-${{env.ISO_VERSION}}-${{env.ISO_ARCHITECTURE}}.iso.sha512 ${{ secrets.SOURCEFORGE_USER }}@frs.sourceforge.net:/home/frs/project/athena-iso/${{env.ATHENA_VERSION}}/
+
+ - name: Upload to Athena OS Mirror
+ run: |
+ sshpass -p "${{ secrets.MIRROR_SECRET }}" rsync -avzzlr --delete -e "ssh -p 1027 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" $HOME/Athena-Out/athena-${{env.ISO_VERSION}}-${{env.ISO_ARCHITECTURE}}.iso $HOME/Athena-Out/athena-${{env.ISO_VERSION}}-${{env.ISO_ARCHITECTURE}}.iso.md5 $HOME/Athena-Out/athena-${{env.ISO_VERSION}}-${{env.ISO_ARCHITECTURE}}.iso.sha1 $HOME/Athena-Out/athena-${{env.ISO_VERSION}}-${{env.ISO_ARCHITECTURE}}.iso.sha256 $HOME/Athena-Out/athena-${{env.ISO_VERSION}}-${{env.ISO_ARCHITECTURE}}.iso.sha512 ${{ secrets.MIRROR_USER }}@hub.athenaos.org:/srv/mirrors/athena-images/rolling/
+
+ - name: Upload to GitHub Release
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ run: |
+ cd $GITHUB_WORKSPACE
+ git clone https://github.com/Athena-OS/athena-iso
+ cd athena-iso
+ for f in $(find $HOME/Athena-Out -name '*.iso*'); do
+ gh release upload v23.06.23 $f --clobber
+ done
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 000000000..80275812b
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2023 Athena OS
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/README.md b/README.md
new file mode 100644
index 000000000..32ad1addc
--- /dev/null
+++ b/README.md
@@ -0,0 +1,859 @@
+
+ Dive into a new Pentesting Experience with
+Athena OS
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+![image](https://github.com/Athena-OS/athena-iso/assets/83867734/b130dd25-5e7f-4cc8-bc16-6f384b4210f3)
+
+
+
+
+
+ 🏅Born for InfoSec Professionals, Bug Bounty Hunters, Passionate Students and Spicy Hackers🏅
+
+
+
+
+## Athena Nix
+
+Athena Nix currently provides several configurations (still in test):
+* **runtime**
+* ToDo
+
+A configuration can be deployed in several ways:
+
+#### Remote
+```
+sudo nixos-rebuild switch --flake 'github:Athena-OS/athena-nix#runtime' --impure
+```
+
+#### Local
+Running command inside `athena-nix` directory:
+```
+git clone https://github.com/Athena-OS/athena-nix
+cd athena-nix
+sudo nixos-rebuild switch --flake '.#runtime' --impure
+```
+Running command outside `athena-nix` directory:
+```
+sudo nixos-rebuild switch --flake '/.#runtime' --impure
+```
+`--impure` is used because the deployment can be applied according to your `hardware-configuration.nix`.
+
+The default user and password in the configuration is `athena:athena`. Be sure to change user and password inside `athena-nix/flake.nix` file by editing `username` and `hashed` (or `hashedRoot` for your root account) attributes according to your needs when you deploy this configuration.
+
+Passwords must be set as hash (i.e., SHA-512) instead of cleartext. To create it in a secure way run:
+```
+nix-shell -p openssl
+openssl passwd -6 yourpassword
+```
+Finally, paste the generated hash in `hashed` or `hashedRoot` inside `flake.nix`.
+
+The usage of **nix-shell** is important to create the password in an ephimeral environment, in order to not keep the command history stored in the system.
+
+# Nix Wiki
+
+## A bit of theory about the structure of Nix environment
+
+**nix** is a build system first and foremost, it does not only work for package management.
+[**nixpkgs**](https://github.com/NixOS/nixpkgs) refers to the collection of Nix packages and package definitions that provide a vast array of software packages and configurations. It is the core repository of packages used by the Nix package manager and is a fundamental component of NixOS. It is just a repository on GitHub.
+[**channels**](https://nixos.wiki/wiki/Nix_channels) correspond to identically named branches of said repository.
+**nix-*** are commands that operate on said channels.
+
+In Nix ecosystem, about pkg repositories, there are no mirrors. The package definitions (`default.nix`) are distributed either by **GH+flakes**, or from **Fastly/S3+channels**. The S3 bucket is served through **Fastly**. Fastly is the CDN, there is no inconsistency between CDNs. When you ask your CDN node about a store path, it pulls it from S3. Currently fastly is a non-issue unless you live in India because there, Fastly is slower. **nixpkgs**, instead, is a GitHub repository that gets copied to S3 as a channel.
+
+There is only one official binary cache containing the pkgs. There are no mirrors for anything. Each user can create its custom binary cache with its own packages. [Hydra](https://nixos.wiki/wiki/Hydra) is used to build packages and it pushes to the binary cache every commit constantly.
+
+Channels guarantee you that, whatever is in it is part of a specific revision at least, and doesn't magically move forward in time or has some deps updating but not the others or if it's not in the cache or if ur inputs are not compatible with the channel, Nix will fall back to building the thing locally.
+
+About keyrings and signing key, the official binary cache has only one signing key. Hydra builds and signs the packages. The public key is currently **cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY=** and it is configured by default
+https://nixos.org/manual/nix/stable/command-ref/conf-file.html#conf-trusted-public-keys
+So one public key and Hydra will sign all the packages only with the related private key.
+
+For Athena OS use case, by using Nix, you don't have to worry about syncing mirrors and hoping the mirror is up to date, or if the package is in the cache or it's not. Furthermore, also issues related to keyrings are not a concern anymore.
+
+**How do build and install processes work?**
+
+1. user requests to build a `.drv` (intermediate file describing how to build a derivation)
+2. nix evaluates the drvs input addressed hash
+3. nix asks substitutes if they have the artifact for that hash. A substitute caches the artifacts as built by Hydra*.
+4. If they have it, nix downloads
+5. Nix verifies the artifacts signature agains a list of trusted public keys
+Same happens for all dependencies of course
+
+*Hydra evaluates and builds the entirety of nixpkgs and if all required builds succeeds, it will advance the channel, such that all required artifacts are already cached when you get the expression used to build them. Hydra pushes the built artifacts to a storage that the [cache.nixos.org](https://cache.nixos.org/) reads from.
+
+**Learn Nix fundamentals**
+
+Nix is not only a tool to manage derivations (packages) but it is a language. To study and understand well its fundamentals in a very easy manner, give a look to [Nix Pills](https://nixos.org/guides/nix-pills/) and practice with the proposed examples.
+
+**What about installing packages by Nix**
+
+The advantage that Nix could provide to Athena is interesting as shown in the previous message, but the usage of GUI apps from nixpkgs in a distro different from NixOS could not work well. So, installing and using CLI/TUI apps or also Graphical Qt apps could be fine. The remaining GUI apps could not work well. GUI apps could be rendered bad because they use [**NixGL**](https://github.com/guibou/nixGL), an unofficial project that's badly written. You have to manually use NixGL as a wrapper, if you don't, app may not start. The problem of the GUI apps is that the drivers are not searched in their standard locations. By the way, if you use NixOS instead, you wouldn't need NixGL.
+
+**What about package manager tools?**
+
+Before discussing the provided tools, we must talk about the two kind of package management approaches Nix uses:
+* **imperative package management**
+* **declarative package management**
+
+In NixOS, **imperative package management** refers to the traditional way of managing software packages that most other Linux distributions use. In imperative package management systems, you interact with package managers like apt (used by Debian and Ubuntu), yum (used by Red Hat and CentOS), or pacman (used by Arch Linux) to install, update, and remove software packages on your system. You manually execute package manager commands like apt, yum, or pacman to install, update, or remove packages.
+Package managers maintain their own package databases and dependencies. The state of the system can become complex, with packages and dependencies managed independently.
+
+In contrast, NixOS primarily follows a **declarative package management** approach. Declarative package management is a fundamental concept in Nix and NixOS, and it means that instead of directly instructing the system to perform package operations, you define a desired system configuration, including the list of packages you want, in a declarative manner. The Nix package manager then takes this configuration and ensures that your system matches it. You define your system configuration in a Nix expression, specifying the desired packages, services, and system settings. The Nix package manager ensures that your system configuration is applied consistently. The entire system configuration is described in a single configuration file (typically /etc/nixos/configuration.nix), making it easier to understand and replicate your system's state. With declarative package management in NixOS, you have the benefits of reproducibility and isolation, which means that your system's configuration can be version-controlled, and you can easily replicate your system's state on different machines or across different environments. This approach is especially valuable for server environments and reproducible development setups. Summarizing, in the declarative one, it does not use system configuration environment but the one defined in a configuration file. The declarative package management is not a mere package management but a set of rules that define how the new user environment must be set.
+
+Nix allows you to use different tools to manage packages:
+* **nix-env** (imperative)
+* **nix-shell** (declarative)
+* **home-manager** (declarative)
+* **nix profile** (imperative)
+
+Which one should we use?
+
+**nix-env** is strongly discouraged for reasons explained [here](https://stop-using-nix-env.privatevoid.net/). Furthermore, the existence of `nix-env` in a NixOS ecosystem has no sense for the motivation about the origin of Nix.
+
+The other three could be good.
+
+**nix-shell** is an **ephemeral shell**, so if you need to run a particular command for a one-off thing, but don't want to store it on the system all times, this kind of shell allows you to gain **temporary access** to a command and after you exit out of the shell, it is like the package was never installed. In order to use it, [Flakes](https://nixos.wiki/wiki/Flakes) must be enabled.
+
+**home-manager** could be used if you need to set user profiles in the new environment, since it is declarative. **nix profile** could be used too as imperative. So, the choice depends on the use case to implement.
+
+There is a further way to install packages and configure environment, that is the current standard method to use: editing **/etc/nixos/configuration.nix**
+
+This file contains several nix expressions to define the configuration to deploy. By this file, you can enable services and install packages. Once you finished to edit this file, save it and apply the changes by running:
+```
+sudo nixos-rebuild switch
+```
+
+An experimental way to deploy configuration and install packages is the usage of **flakes** that will be discussed later.
+
+Each rebuild performed on the system creates a **Generation** that is a revision of a user environment, newly created every time the system is updated (with old ones being preserved until manually removed). Nix's environment rollback facilities rely on Generations. Relying on an old Generation means to rollback to one of your old configurations.
+
+Generation is different from snapshot concept. Generations are for config, snapshots for your runtime data. Please be aware that snapshots are not backups, and that the latter should also be taken into consideration. Snapshots help to get better backups, as they avoid some atomicity problems, so you can consider to implement them too.
+
+In practice you can install a package in several ways:
+* by **nix-env**: If you want to install packages directly in your OS and not in a shell sandboxed environment, you can do it by `nix-env -iA nixpkgs.nmap`. I noted that also in this case we dont need to use sudo, and the binaries will be put in `/home/youruser/.nix-profile/bin/nmap`.
+* by **nix-shell**: in my Athena I have FISH shell. When I add the nix-channel to unstable repo and I install nmap by `nix-shell -p nmap`, it creates a new environment with a BASH shell (not more FISH because the colors of my Athena prompt change to BASH one) and it runs nmap in this environment. For the install I didnt have the need to install by sudo. In this environment nmap binary exists in a nix sandboxed dir (test by which nmap) Then, if I type `exit`, I go out from the env and I come back to FISH shell and nmap cannot be called anymore. Maybe it is a secure approach because we dont need to sudo. Note that the new environment is not an isolated or sandboxed environment. It just install and remove the declared package for on-off usage.
+* by **nix profile**: run `nix --experimental-features nix-command profile install nixpkgs#nmap --extra-experimental-features flakes`. To remove it, for first check the `Index` of the application by `nix --experimental-features nix-command profile list`, then one of [these](https://nixos.wiki/wiki/Nix_command/profile_remove#Examples) or simply `nix --experimental-features nix-command profile remove ".*nmap.*"`.
+* by **home-manager**: it is a good choice to deploy packages at user level and to deploy files in user home folder. The [warnings](https://github.com/nix-community/home-manager#words-of-warning) here are just saying that any error caused by the user could be hard to debug, but currently home-manager should be stable, indeed it is also used in production by NixOS devs.
+* by editing **/etc/nixos/configuration.nix** file: it is the current standard method.
+* by **flakes**: experimental, we will talk about them later.
+
+You could ask: "Since declarative approach is based on editing configuration files, it could seem less comfortable than using the imperative approach as `sudo pacman -S pkgname`, so why an average user should use the declarative approach?"
+Answer: on long term, declarative approach is more comfortable because it does not allow only to install packages, but also to configure them. When you reach your final configuration, you can export it in another Nix system. Furthermore, the imperative approach has a lot limitations that have been solved by Nix/declarative approach and that are explained in section 1.3 of [The Purely Functional Software Deployment Model](https://edolstra.github.io/pubs/phd-thesis.pdf).
+
+**Prepare the environment (non-NixOS system only)**
+
+If you want to use a non-root user (multi-user) you need to start the **nix daemon** (Arch Linux only):
+```
+sudo pacman -S nix nix-init
+sudo systemctl enable --now nix-daemon.service
+```
+Edit `/etc/nix/nix.conf` by adding:
+```
+experimental-features = nix-command flakes
+```
+Then:
+```
+nix-channel --add https://nixos.org/channels/nixpkgs-unstable nixpkgs
+nix-channel --add https://github.com/nix-community/home-manager/archive/master.tar.gz home-manager
+nix-channel --update
+```
+Otherwise (not suggested):
+```
+sudo nix-channel --add https://nixos.org/channels/nixpkgs-unstable nixpkgs
+sudo nix-channel --add https://github.com/nix-community/home-manager/archive/master.tar.gz home-manager
+sudo nix-channel --update
+```
+Testing nmap by installing it by nix. After install reboot the system.
+
+In case for some reason you need to delete all Nix environments, run:
+```
+sudo nix --experimental-features nix-command store delete --all --ignore-liveness
+```
+
+## Nix Channels
+
+### Deploy configuration by channels
+
+To deploy your configuration by channels, you need to create or edit `/etc/nixos/configuration.nix` file. Once completed, run:
+```sh
+sudo nixos-rebuild switch
+```
+or
+```sh
+sudo nixos-rebuild switch -I nixos-config=path/to/configuration.nix
+```
+
+## Flakes
+
+### Creation of ISO NixOS-based
+
+To use flakes, add the following code in your `/etc/nixos/configuration.nix`:
+```nix
+ # nix config
+ nix = {
+ package = pkgs.nixUnstable;
+ settings = {
+ extra-experimental-features = [
+ "nix-command"
+ "flakes"
+ ];
+ allowed-users = ["@wheel"]; #locks down access to nix-daemon
+ };
+ };
+```
+
+Instead of use the usual nix approach, it is possible to create an ISO by using flakes. Flakes have several advantages over current nix approach and probably in the future they will be the new standard. I don't know why the usage of flakes is so special but using them for creating an ISO shows a good potential. What I saw until now is that by flakes you can create more ISO configurations that can be invoked by a single file `flake.nix`. If you want to do it by the classic way, you need to have N .nix file to invoke for N ISO configurations you desire.
+
+In order to use flakes, you must create a `flake.nix` file in the root of your repository. Note that it is important to use `git add flake.nix` for each change of `flake.nix`. One of potentials I see by the usage of flakes is that inside this flake nix file you can set more than one configuration. For example, if you need to create a XFCE ISO and maybe a GNOME ISO and somtimes you would like to create a KDE ISO, inside `flake.nix` you can define these different configurations with very small effort, and for each of them you can invoke the dedicated `.nix` file. So you can keep all this inside one single file (that imports your needed custom .nix files). Each of these configurations can be invoked by using `.#nixosConfigurations.`, for example, if I named my ISO configuration as `live-image`, you can create the ISO with this config by running inside the same directory of `flake.nix` the following command:
+```
+nix build .#nixosConfigurations.live-image.config.system.build.isoImage
+```
+Source: https://hoverbear.org/blog/nix-flake-live-media/
+
+In case you would like to change squashfs compression, refers to [Creating_a_NixOS_live_CD](https://nixos.wiki/wiki/Creating_a_NixOS_live_CD#Building_faster). Note that the default compression algorithm is the one with the least resulting size.
+
+In general, flake nix files are composed of two parts: input and output sections. Input section contains the import of repositories or tools by their flake files.
+
+Flake files can be used for different purposes, for example to create ISO files or to retrieve packages or to deploy your configuration. Examples of flake repositories:
+
+https://github.com/erictossell/nixflakes/blob/main/flake.nix
+https://github.com/JoshuaFern/nixos-configuration/blob/master/flake.nix
+https://github.com/hyprwm/Hyprland/blob/main/flake.nix \
+https://github.com/redcode-labs/RedNixOS/blob/master/flake.nix
+https://github.com/bobvanderlinden/nixos-config/blob/master/flake.nix
+https://github.com/NixOS/nixpkgs/blob/master/flake.nix
+
+Flakes docs: \
+https://www.tweag.io/blog/2020-05-25-flakes/ \
+https://nixos.wiki/wiki/Flakes
+
+### Deploy configuration by Flakes
+
+Another advantage of using Flakes is the possibility to deploy your configuration in a flexible manner, instead of using the classic way that consists of editing each time `/etc/nixos/configuration.nix` and running `sudo nixos-rebuild switch` or `sudo nixos-rebuild switch -I nixos-config=path/to/configuration.nix` command. By flakes, we can define N configuration deployments in one single `flakes.nix` file.
+
+Once you created your `flake.nix` (look [athena-nix](https://github.com/Athena-OS/athena-nix) as example), you can deploy your configuration by running:
+```
+sudo nixos-rebuild switch --flake '/.#xfce'
+```
+where `.#xfce` is the configuration inside `flake.nix` we want to deploy.
+
+If your current working directory contains already `flake.nix`, you can run:
+```
+sudo nixos-rebuild switch --flake '.#xfce'
+```
+If your source repository containing `flake.nix` is hosted online, for example on GitHub, you can run:
+```
+sudo nixos-rebuild switch --flake 'github:Athena-OS/athena-nix#xfce'
+```
+
+Unlike flakes used to create ISO, in this case, when you want to deploy your configuration by flakes, you must import `hardware-configuration.nix` as module inside `flake.nix`. You can do it in two main manners:
+* Copying your `/etc/nixos/hardware-configuration.nix` file to your repository
+* Refer directly to the `/etc/nixos/hardware-configuration.nix` (this case requires `--impure` argumento when launching `nixos-rebuild` command because you are specifying an absolute path
+
+What should I use? Since `hardware-configuration.nix` file is generated when the OS is installed (or when you run `nixos-generate-config`), and it is different for different users, if your configuration is distributed to more people, the second option is the right one. If you are using it only for yourself, you can use one of the both options.
+
+Another important requirement is to specify in one of your modules the `filesystem` and the `boot.loader` otherwise it will trigger an error.
+
+Note that when you use Flakes for this purpose, you must not use or import modules related to `nixpkgs/nixos/nodules/installer/cd-dvd/` because these ones are used for ISO creation. Remember also that the flake currently works with a user named `athena` (defined in `home.nix` files).
+
+If you deploy configuration by flakes and get the message:
+```
+File system "/boot" is not a FAT EFI System Partition (ESP) file system.
+systemd-boot not installed in ESP.
+No default/fallback boot loader installed in ESP.
+Traceback (most recent call last):
+ File "/nix/store/jqgdwlxjhyp3znsqylysvnnf74lvd3h1-systemd-boot", line 344, in
+ main()
+ File "/nix/store/jqgdwlxjhyp3znsqylysvnnf74lvd3h1-systemd-boot", line 332, in main
+ install_bootloader(args)
+ File "/nix/store/jqgdwlxjhyp3znsqylysvnnf74lvd3h1-systemd-boot", line 270, in install_bootloader
+ raise Exception("could not find any previously installed systemd-boot")
+Exception: could not find any previously installed systemd-boot
+warning: error(s) occurred while switching to the new configuration
+```
+it is because you are using BIOS/Legacy boot instead of EFI.
+
+### Use inputs to modules in Flakes
+
+In flakes you could need to import and use some stuff, like **home-manager** or a custom stuff, and you need to use it in your flake configuration files.
+
+Let's guess you want to use **home-folder**. You must declare it as **inputs** and then import it and finally you can use it inside your `.nix` module files.
+
+Practically, let's guess you have a `default.nix` in root:
+```nix
+{ home-manager, ... }:
+{
+ imports = [
+ home-manager.nixosModules.home-manager
+ ./hosts
+ ./modules
+ ./users
+ ];
+}
+```
+you can see that this file is expecting `home-manager` and you can give it by `flake.nix`.
+
+In order to pass **home-manager**, you can use different strategies. You know that `flake.nix` file is macrodivided in `inputs` definition and `outputs` parts.
+
+The `inputs` piece of code must be defined as:
+```nix
+{
+ inputs = {
+ nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
+
+ home-manager = {
+ url = "github:nix-community/home-manager";
+ inputs.nixpkgs.follows = "nixpkgs";
+ };
+ };
+...
+```
+This is always the same according to the approach you decide to use to import it. The differences are in the `outputs` part. Indeed here you can use different approaches:
+
+### Pass all inputs as a single set by using specialArgs
+```nix
+ outputs = {self, nixpkgs, home-manager}@inputs:
+ let mkSystem = extraModules:
+ nixpkgs.lib.nixosSystem {
+ system = "x86_64-linux";
+ specialArgs = {
+ username = "athena";
+ hostname = "athenaos";
+ inherit inputs;
+ }; # Using // attrs prevents the error 'infinite recursion due to home-manager usage in root default.nix
+ modules = let
+ modulesPath = "${self}/nixos/modules";
+ #modulesPathNixPkgs = "${nixpkgs}/nixos/modules"; # Accessing remote NixOS/nixpkgs modules
+ in
+ [
+ #"${modulesPath}/iso.nix"
+ "/etc/nixos/hardware-configuration.nix"
+ "${self}/." # It refers to the default.nix at root that imports in chain all the subfolder contents containing default.nix
+ ]
+ ++ extraModules;
+ };
+```
+If you use this approach, note that `default.nix` should ask for `inputs` instead of `home-manager` and then you can access to `home-manager` by dot. So, `default.nix` should appear like:
+```nix
+{ inputs, ... }:
+{
+ imports = [
+ inputs.home-manager.nixosModules.home-manager
+ ./hosts
+ ./modules
+ ./users
+ ];
+}
+```
+
+### Pass all inputs individually by using specialArgs
+```nix
+ outputs = {self, nixpkgs, home-manager}@inputs:
+ let mkSystem = extraModules:
+ nixpkgs.lib.nixosSystem {
+ system = "x86_64-linux";
+ specialArgs = {
+ username = "athena";
+ hostname = "athenaos";
+ inherit (inputs) home-manager;
+ }; # Using // attrs prevents the error 'infinite recursion due to home-manager usage in root default.nix
+ modules = let
+ modulesPath = "${self}/nixos/modules";
+ #modulesPathNixPkgs = "${nixpkgs}/nixos/modules"; # Accessing remote NixOS/nixpkgs modules
+ in
+ [
+ #"${modulesPath}/iso.nix"
+ "/etc/nixos/hardware-configuration.nix"
+ "${self}/." # It refers to the default.nix at root that imports in chain all the subfolder contents containing default.nix
+ ]
+ ++ extraModules;
+ };
+```
+Note that here we use `inherit (inputs) home-manager;` that means we are inheriting inputs.home-manager (it is the same to write `specialArgs.home-manager = inputs.home-manager`).
+
+In this manner, `default.nix` can ask directly for `home-manager`, so it will be:
+```nix
+{ home-manager, ... }:
+{
+ imports = [
+ home-manager.nixosModules.home-manager
+ ./hosts
+ ./modules
+ ./users
+ ];
+}
+```
+
+### Usage of attrs
+```nix
+ outputs = { self, nixpkgs, ... } @ attrs:
+ let mkSystem = extraModules:
+ nixpkgs.lib.nixosSystem {
+ system = "x86_64-linux";
+ specialArgs = {
+ username = "athena";
+ hostname = "athenaos";
+ } // attrs;
+```
+This approach does not need to specify the inheritance of inputs because `attrs` take the elements defined in `inputs` and merges sets (even currently it is not so clear to me).
+
+Additional methods: https://blog.nobbz.dev/2022-12-12-getting-inputs-to-modules-in-a-flake/
+
+## Upgrade
+
+Over time new packages could be added in the stable repository. To make your system aware of these new packages, you need to upgrade your nix channel or your flake (depending on what you are using).
+
+**Nix channel**
+```sh
+nix-channel --update
+sudo nix-channel --update
+```
+
+**Flake**
+```sh
+cd
+nix flake update
+sudo nix flake update
+```
+
+## Home Manager
+
+The deployment of tools by `/etc/nixos/configuration.nix` is used mainly for system-wide scenarios. What if we want to deploy tools or config dotfiles for a specific user? To do this, we must use **home-manager**. So, system-wide and user-level deployments must be managed separately.
+
+To install home-manager, you need to add the following in `/etc/nixos/configuration.nix` inside `import`:
+```nix
+imports =
+ [
+
+ ]
+```
+and install place `home-manager` inside:
+```nix
+packages = with pkgs; [
+ home-manager
+]
+```
+Then, since we edited the system-level configuration file, we need to edit `sudo nano /root/.nix-channels` file and add:
+```
+https://github.com/nix-community/home-manager/archive/release-23.11.tar.gz home-manager
+```
+(note: also nixos channel version should be set as 23.11)
+and run:
+```
+sudo nix-channel --update
+sudo nixos-rebuild switch
+```
+To use home-manager, you need to create a `.nix` file.
+
+In general, when you use it without specifying a file by `home-manager switch`, it will refer to `$HOME/.config/home-manager/home.nix` file that you should create. In case you created `.nix` file in another location, you can run `home-manager switch -f `.
+
+You can create a `home.nix` file referring to the actual derivation to install by the following content:
+```nix
+{ home-manager, ... }:
+{
+ imports = [
+ ./home-manager/desktops/xfce
+ ];
+ home.username = "athena";
+ home.homeDirectory = "/home/athena";
+ home.stateVersion = "23.11";
+ athena.desktops.xfce.refined = true;
+}
+```
+Note that, when you import without specifying a `.nix` file, it will check for an existing `default.nix` file.
+
+**Install a package built locally**
+
+If we use **home-manager**, it is not used as a classic pkg manager where we give as argument the name of the package and it installs it. No. It works in a different manner. **home-manager** should work in this manner:
+* I define a `home.nix` configuration file containing all the packages I want to set in my environment. They could be local or remote packages.
+* Then I run `home-manager switch` and it reads the configuration file above and set any declared env variable and install the declared packages. Though environment variables may need a session logout or reboot.
+
+An example of `home.nix` configuration file is:
+```
+home.packages = [
+ (pkgs.callPackage ./path/to/file.nix {})
+]
+```
+HM usually adds a custom shell script sourced by your shell to set environment variables, so you need to manage your shell via HM with programs.name.enable. This means that env variables only will be visible to child processes of the shell, not graphical applications started from your launcher.
+
+Note that the wiki at https://nixos.wiki is unofficial and has a lot of wrong things, so don't follow it.
+
+The official docs are [here](https://nixos.org/learn).
+
+**Important Note**
+
+The usage of `home-manager switch` command will apply the effect on the current session but if you reboot the system, any changes made by this command will be reverted. It occurs due to the immutability of NixOS. If you want to have permanent change, you must invoke the `.nix` file inside `/etc/nixos/configuration.nix`, by adding as example:
+```nix
+ home-manager.users.athena = { pkgs, ... }: {
+ home.packages = [ pkgs.atool pkgs.httpie ];
+ imports = [ "/home/athena/athena-nix/home.nix" ];
+ programs.bash.enable = true;
+
+ # The state version is required and should stay at the version you
+ # originally installed.
+ home.stateVersion = "23.11";
+ };
+```
+
+**Deploy dotfiles in HOME folder**
+
+What it is not clear is "How can we deploy config dotfiles to a user?".
+
+In order to do this, we can use `home-manager` as explained above. But how the target `.nix` package must be created? Which content it should contain?
+
+The best approach is to check on already existing files:
+https://github.com/bobvanderlinden/nix-home
+https://github.com/siraben/dotfiles/blob/master/home-manager/.config/nixpkgs/home.nix
+https://github.com/yrashk/nix-home/blob/master/home.nix
+
+Useful docs:
+https://www.bekk.christmas/post/2021/16/dotfiles-with-nix-and-home-manager
+
+## NixOS Install
+
+NixOS installation can be performed by using `nixos-install` command that allows you to install a system according to your `configuration.nix` file. You can use a NixOS ISO and follow the [official Nix docs](https://nixos.org/manual/nixos/stable/#sec-installation-installing).
+
+## Nix packages
+
+### Create Nix package
+
+#### nix-init
+
+**nix-init** is a useful tool that can help on Nix package creation.
+Let's suppose we would like to create a tool with source in GitHub like https://github.com/orgname/reponame. Let's run:
+```
+sudo nix run --extra-experimental-features "flakes nix-command" github:nix-community/nix-init --
+```
+Enter url: https://github.com/orgname/reponame
+Check and enter the other information.
+
+Then, let's build the produced `package.nix` file by:
+```
+nix-build -E 'with import {}; callPackage ./package.nix {}'
+```
+If you get some error, fix them. You can use ChatGPT as helper.
+
+Once you built correctly it, you can test it by:
+```
+nix-shell -E 'with import {}; callPackage ./package.nix {}'
+```
+
+Note that if you are creating a Python module (i.e., PyPi), you must use:
+```
+nix-build -E 'with import {}; python3Packages.callPackage ./package.nix {}'
+```
+
+#### Learn by studying example .nix files
+
+Studying existing nix derivatives is the best way to learn how to create a package in Nix.
+
+To learn how to create packages, follow [Packaging Tutorial](https://nix.dev/tutorials/learning-journey/packaging-existing-software#hello-world).
+
+#### Set a license
+
+During the creation of a derivation, you need to specify a license. Licenses strings are stored in `licenses` set. You can access to its list by:
+```
+nix repl -f ''
+```
+Note that `-f ''` will load all variables and libs you need to run nix statements.
+
+Then run:
+```
+nix-repl> builtins.attrNames lib.licenses
+```
+If you don't use `-f ''`, you need to load the needed variables manually, for example by `:l `, then write `lib.` and use TAB completion to find `licenses`.
+
+#### Manage Collisions
+
+If you install two packages (i.e., `_3proxy` and `ligolo-ng`) that will install a binary file with the same name in the same place, you can get the following error:
+```
+error: builder for '/nix/store/gzgn99b4siq286gr4ybcl70zqp2h8y61-home-manager-path.drv' failed with exit code 25;
+ last 1 log lines:
+ > error: collision between `/nix/store/92qf7acxvg6acl4vxji5712n7lhi0q35-ligolo-ng-0.4.4/bin/proxy' and `/nix/store/xz1v4ry2g50jha4gkll9f0didcgbdwnf-3proxy-0.9.4/bin/proxy'
+ For full logs, run 'nix log /nix/store/gzgn99b4siq286gr4ybcl70zqp2h8y61-home-manager-path.drv'.
+error: 1 dependencies of derivation '/nix/store/1vnxv0cs63cpyvr9ihjhd1gg5gdy9xyp-home-manager-generation.drv' failed to build
+error: 1 dependencies of derivation '/nix/store/xxwnh88y46pkcylxgrf0p6q9zf3l1lwc-unit-home-manager-athena.service.drv' failed to build
+error: 1 dependencies of derivation '/nix/store/yikxvsvgmla8j7gjd6mr3f5jzpn7a7cb-system-units.drv' failed to build
+error: 1 dependencies of derivation '/nix/store/8nrmdivjn6aj6k9r5fqswvy8q0mvfy71-etc.drv' failed to build
+error: 1 dependencies of derivation '/nix/store/557gh4yh0cxl3f7vcpnpbpj00a42vk3g-nixos-system-athenaos-24.05.20231219.54aac08.drv' failed to build
+```
+To prevent this, you can try to install packages at system-level, without home-manager, or you can use [prio functions](https://github.com/NixOS/nixpkgs/blob/7daf35532d2d8bf5e6f7f962e6cd13a66d01a71d/lib/meta.nix#L48-L69) from nixpkgs lib, for example:
+```nix
+{ lib, pkgs, ...}: {
+ home.packages = [
+ (lib.highPrio pkgs.ligolo-ng)
+ ];
+}
+```
+if you want to give priority to `ligolo-ng` package.
+
+#### Dependency Binaries
+
+One of the main characteristics of Nix is the dependency isolation. It means that, when a dependency is installed by the installation of a package, any binary of the dependency won't be linked to `/run/current-system/sw/bin` so it is not in `PATH`. In case a program is needed to use a binary of a dependency, you need to wrap the binary. You can do by using:
+* `lib.getExe toolname` or `${toolname}/bin/binaryname`
+* `makeWrapper`
+* `makeBinaryWrapper`
+* `makeShellWrapper`
+* `wrapProgram`
+
+`lib.getExe toolname` is one of the easiest methods. It works only if the `package.nix` file of the tool has `mainProgram` in its metadata information. `mainProgram` contains the binary name of the tool. In case it does not exist, just use `${toolname}/bin/binaryname`.
+
+`makeWrapper` and `wrapProgram` are shell functions in the `makeShellWrapper` and `makeBinaryWrapper` hooks.
+
+So it could be preferred to use `wrapProgram` as it is a bit easier to use (it wraps in-place and doesn't require manual moving around binaries).
+
+Also it could be preferred shell wrappers whereever possible as:
+* They are usually smaller (in file size while the bash in the closure usually is there anyway)
+* They allow for appending quoted arguments
+* They are easier to debug
+
+### Submit a package in nixpkgs repository
+
+Once you are sure that the locally built package works correctly, you are ready to submit the package to [nixpkgs repository](https://github.com/NixOS/nixpkgs).
+
+Below I try to summarize the process but I strongly suggest to study and follow the official [CONTRIBUTING.md](https://github.com/NixOS/nixpkgs/blob/master/CONTRIBUTING.md) guide.
+
+First, if you decide to maintain a package but you are still not a Nixpkgs maintainer, you must create a Pull Request named `maintainers: add ` and add your info in [maintainers/maintainer-list.nix](https://github.com/NixOS/nixpkgs/blob/master/maintainers/maintainer-list.nix). It is good practice this PR is merged before you submit any new package.
+
+Check of course in [nixpkgs/issues](https://github.com/NixOS/nixpkgs/issues) and [nixpkgs/pulls](https://github.com/NixOS/nixpkgs/pulls) if someone has already submitted the tool you want to upload. If not, you can proceed.
+
+To submit a package, according to the new [RFC](https://github.com/nixpkgs-architecture/rfc-140/blob/master/rfcs/0140-simple-package-paths.md), check always if someone has already opened a PR. If yes, try to ask information about that PR and check if it has the latest version of the software to be packaged.
+
+If there are no PR, then you can create your PR. You need to create a Pull Request as **Draft**, named `: init at `, in order to add all needed files (as **package.nix** file, containing the nix code) in [pkgs/by-name/${shard}/${name}](https://github.com/NixOS/nixpkgs/tree/master/pkgs/by-name) where *name* is usually the name of the tool/package and *shard* is the lowercased first two letters of *name*. It's important that you create the PR inside the **NixOS:master** branch.
+
+Note that for Python, Perl, Ruby (and other scripting languages) modules, the current rule to submit is still the old one, that means to create the package file as `default.nix`, submit it in the related directory in [nixpkgs/pkgs/development](https://github.com/NixOS/nixpkgs/tree/master/pkgs/development) and then insert the package entry also in the related directory in [nixpkgs/pkgs/top-level](https://github.com/NixOS/nixpkgs/tree/master/pkgs/top-level). The name of the first commit must be something like `.pkgs.tool-name>: init at `, for example `python3.pkgs.pysqlite3: init at 0.5.2`.
+
+Remember that when you create a new PR, it will create a forked repository in your GitHub account. At this point, in the future, until your PR is not merged, DON'T sync your forked repository with the original one because it will create conflict issues when Nix devs will try to merge the PR or you will try to edit some commit info.
+
+Check always if there is an open issue in nixpkgs repository, link it in your PR message. Remember also to check the boxes shown in the first message of the PR.
+
+If you want that your package should be backported, use **labels** in your PR. After your PR is merged, automatically a backport PR is opened. The backport PRs still needs a committer that merges it even if it does not require approvals by reviewers. But the intent of backport reviews is not so much about code quality (which should be fine since it was already merged into master), but more so about whether or not it is [acceptable to backport](https://github.com/NixOS/nixpkgs/blob/master/CONTRIBUTING.md#changes-acceptable-for-releases). Usually, for a new package, it should fit the criteria without problems.
+
+Not sure if it occurs already in **Draft**, but several checks should start. Be sure noone of the fails. Usually the **EditorConfig** check could fail, just enter in its details and fix your `.nix` file.
+
+Once you applied all the needed changes to this PR, switch it from **Draft** to **Open**. Remember that it is a good practice that there should be only one single commit name `: init at ` in the PR. You can ask people to thumb up it in order to get more attention for review.
+
+To get people to review your PR, you can add the link of your PR in:
+* [Nix/NixOS (unofficial) Discord server - #pr-review-request](https://discord.com/channels/568306982717751326/679366467904471040)
+* [NixOS Discourse](https://discourse.nixos.org/t/prs-ready-for-review/3032/99999) by just pasting the clean PR URL without any code tag, wrapping and similar
+
+One of the reasons useful to submit packages to Nixpkgs repository from the user point of view is about building. If we create a `package.nix` locally and we install it by `configuration.nix` or `flake` by referring the package locally, it will build locally it. In case the package is in the remote Nixpkgs repository, when it is installed by `configuration.nix`` or `flake``, the package will be built before installing?
+
+Hydra builds non-broken, free packages in Nixpkgs for supported systems. If make some override on a package, overlay it or any of its dependency, or disable substitution, or use a marked-broken package, or an unfree package, or an unsupported system, you have to rebuild it yourself, so the building will occur locally in your host because Hydra would not handle those cases.
+
+You can of course set up your own builders and binary cache for convenience, so that you only have to build the thing once and deploy to multiple machines if you are customising packages or such.
+
+#### Track merged Pull Requests
+
+Once a package Pull Request is merged to master or backported, it is possible to track the state of them, in particular if the package has been actually implemented in the Nixpkgs repository or still not. It can be done by the [Nixpkgs Pull Request Tracker](https://nixpk.gs/pr-tracker.html) by typing the Pull Request ID of your merged pull request.
+
+#### Commit issues resolution
+
+**Editing commit messages**
+
+In case you synced the forked repository with the original one, you must restore the git state to the commit before this sync. To do this run `git log` to identify the commit before the merge of original nixpkgs to your forked repository, and then run:
+```
+git clone -b https://github.com//nixpkgs --depth= (try different number values by replacing N (starting from 1) until you don't see the commit of synching between the forked repository and the original one)
+git reset --hard
+git push -f origin
+```
+In this manner, you should not have any conflict issues coming from commits of other users.
+
+In case you wrote the wrong commit message and you need to change it, run:
+```
+git clone -b https://github.com//nixpkgs --depth= (N depends on how many commits you submitted ahead of the one that needs the message to be changed)
+git rebase -i HEAD~
+```
+at this point a text editor will be opened showing several commits. Identify your commit, change `pick` to `reword`, change its message string and save and close the file. Finally:
+```
+git push -f origin
+```
+
+In case you submitted more than one commit on your PR and you need to merge all of them in one, run:
+```
+git clone -b https://github.com//nixpkgs --depth= (N depends on how many commits you submitted ahead of the ones that need to be merged)
+git rebase -i HEAD~
+```
+at this point a text editor will be opened showing several commits. Identify the commits to merge, leave unchanged the main commit to keep and change `pick` to `squash` on all the remaining commits that must merge with the unchanged one. Finally:
+```
+git push -f origin
+```
+
+**Editing code on old commits**
+
+In case you have more commits in a PR that need to deploy (for example different VSCode theme extensions), and you need to edit the code of some or all of them, it is not too late. You can come back to each one of these submitted commits by:
+```
+git rebase -i HEAD~ (where "N" is the number of commits you need to edit the code)
+```
+Change **pick** to **edit** for each one of the N commits. Save it, then you will be reverted to the first of the N commits.
+Open and edit `default.nix`` and edit the needed code to the first commit. After the editing, save the file and:
+```
+git commit --all --amend --no-edit
+git rebase --continue
+```
+Now you will go to the second commit and repeat the steps above. The last `git rebase --continue` should show something like:
+```
+Successfully rebased and updated refs/heads/.
+```
+At the end, once you edited the code of all commits, run:
+```
+git push -f origin
+```
+
+### Test existing packages
+
+If you want to test an existing package in [nixpkgs](https://github.com/NixOS/nixpkgs) repository, for example `OSCAR`, just get its `default.nix` file locally, then run:
+```
+nix-build '' -A OSCAR
+```
+Running simply `nix-build -A OSCAR`, it will look for the `default.nix` file in the current directory and it produces an error because this file has not lib args. For this reason, you must refer to the [default.nix](https://github.com/NixOS/nixpkgs/blob/master/default.nix) file at the root of nixpkgs repository. We can call this .nix file by using `''`. This, upon evaluating, produces an instance of the nixpkgs package set, which then has an attribute called [OSCAR](https://github.com/NixOS/nixpkgs/blob/master/pkgs/top-level/all-packages.nix#L40979), which you select with `-A OSCAR`.
+
+It means that, if you submit a new package on nixpkgs repository, you need also to add the attribute in the [all-packages.nix](https://github.com/NixOS/nixpkgs/blob/master/pkgs/top-level/all-packages.nix) file.
+
+If you edit the local OSCAR `default.nix` and you build by the command above, it won't build this local `default.nix` file, but it'll always use the one from the channel you set. If you want to build the local one, you do the callPackage thing as described in the [nix.dev guide](https://nix.dev/tutorials/learning-journey/packaging-existing-software#hello-world). It occurs because you have a local copy of the repo through the channel and that's what's used here. To find out where it is, you can run `nix-instantiate --eval -E ''`.
+
+Note that if you create a `.nix` file, when you you `install` command to copy files, at InstallPhase, use only `444` or `555` permissions because write permissions cannot exist in Nix store. If you try to provide write permissions, nix flattens the permissions to `444` or `555`. To create directories, instead to use `install -dm`, use `mkdir -p`.
+
+A very useful tool that can help you to create Nix derivations is [nix-init](https://github.com/nix-community/nix-init). Just note that, for anything tricky, it falls back to stdenv.mkderivation.
+
+## Themes, Icons and Cursors
+
+Usually, themes, icons and cursors packages could install different flavors of a specific GTK or icon theme, for example [graphite-gtk-theme](https://github.com/NixOS/nixpkgs/blob/nixos-23.11/pkgs/data/themes/graphite-gtk-theme) could have `Graphite`, `Graphite-Dark` and other themes.
+
+How in Nix you can know the list of all possible themes inside a GTK or icon theme package?
+
+Let's guess we would like to have the list of all icon themes inside [tela-circle-icon-theme](https://github.com/NixOS/nixpkgs/blob/nixos-23.11/pkgs/data/icons/tela-circle-icon-theme). The method is to build the package. Usually we can retrieve its `package.nix` package and all the needed files in the same directory, and then building it by:
+```nix
+sudo nix-build -E 'with import {}; callPackage ./package.nix {}'
+```
+Some packages could return some error because they need to use other modules. In case of our icon theme above, it could return the error:
+```
+error: evaluation aborted with the following error message: 'Function called without required argument "adwaita-icon-theme" at /home/user/tela/default.nix:4'
+```
+To run the correct build command, you need to give a look to [all-packages.nix](https://github.com/NixOS/nixpkgs/blob/nixos-23.11/pkgs/top-level/all-packages.nix) and search for `tela-circle-icon-theme`. You will find the following:
+```nix
+ tela-circle-icon-theme = callPackage ../data/icons/tela-circle-icon-theme {
+ inherit (gnome) adwaita-icon-theme;
+ inherit (libsForQt5) breeze-icons;
+ };
+```
+It means that, in order to be built correctly, our `package.nix` package needs to inherit all the modules specified between `{}`. In this manner, the correct build command will be:
+```
+sudo nix-build -E 'with import {}; callPackage ./package.nix {inherit (gnome) adwaita-icon-theme; inherit (libsForQt5) breeze-icons;}'
+```
+After building the package, check inside the `result` directory to see the directory names of the installed themes. They will be the list of theme names you need.
+
+Note that, if you need to apply a theme tweak different than the default one, you can override the default tweak settings of these themes by a build command like:
+```
+nix-build -E 'with import {}; callPackage ./default.nix { inherit (gnome) adwaita-icon-theme; colorVariants = [ "black" ]; }'
+```
+if you want to have the `black` color variant for your `tela-circle-icon-theme`.
+
+A simpler method to check what are the installed GTK themes or Icon themes from a package is to check the folder `~/.nix-profile/share`.
+
+## User Management
+
+`initialPassword` (and its hashed variants) do only set the password when the user is created the first time. This means it do not exist in the `/etc/passwd`.
+
+`password` and its hashed variants on the other hand side, act the same way as `initialPassword` **if users are mutable**, while it will properly set the password on activation time when users are **not mutable**.
+
+It means that, if you need to change password in a declarative manner by configuration file, you need to use `users.users.${username}.password` (or `users.users.${username}.hashedPassword`) and `users.mutableUsers = false`.
+
+## Clean system
+
+If you massively use building and install a lot of software and you want to check your disk space, consider that Nix is responsible to store data only in `/nix/store`.
+
+You can measure the size of Nix Store by tools like `ncdu`:
+```
+sudo ncdu /nix/store
+```
+To clean Nix Store, it is needed to use the following commands:
+```
+nix-collect-garbage -d
+sudo nix-collect-garbage -d
+```
+Note that `-d` flag will delete the old generations.
+
+If the Nix Store is still occupying a lot of space, probably there could be some resources (probably from your local building processes or due to some bad management from Home Manager) still linked to the Nix Store.
+
+To check what are the roots that are still valid, run:
+```
+sudo nix-store --gc --print-roots | less
+```
+Ignore the `/proc` files.
+
+To check the occupied space by each one of them, just copy the single path and run a command like:
+```
+nix path-info -Sh /run/current-system
+```
+Note: `-S` shows the closure size, `-s` the size of the path, `-h` makes the numbers human readable.
+
+If you are confident, you can delete manually those paths that don't belong to the system and that you don't recognize, and after that, running the Garbage Collector command as explained above.
+
+You can try to optimize the space consumption by enabling **store-optimisation**. It is possible to enable it in your nix configuration. And after enabled it and restarted your daemon, you trigger it once to be sure that everything is optimized.
+
+The setting to enable it is `nix.settings.auto-optimise-store = true;` inside your `configuration.nix` file. The command to optimize the store once to do the "bootstarp" would be:
+```
+nix store optimise
+```
+Is there a performance cost for this optimization? Neglectible. This cost is paid once at path creation time.
+
+## Reporting Issues
+
+When reporting issues for nixpkgs, remember to mention always the maintainers of a package. If they are not specified in the `.nix` file, access to [team-list.nix](https://github.com/NixOS/nixpkgs/blob/master/maintainers/team-list.nix) or [maintainer-list.nix](https://github.com/NixOS/nixpkgs/blob/master/maintainers/maintainer-list.nix) and search for the language used to develop the involved tool.
+
+# Troubleshooting
+
+** Some icons disappeared from menu **
+
+Directories where NixOS searches for icons are specified in `XCURSOR_PATH` env variable. It could happen that, due to bad configuration, the symlinked icons could be duplicated in more than one path. Due to `nix-collection-garbage` command, some of Nix store resources where the symlinked icons were pointing to, could be deleted. If these broken symlinked icons are stored in a path that is checked before the actual path where you store the symlinked icons, then your icons could disappear. To fix it, just identify the broken symlinked icons and delete them. Finally, logout/login.
+
+** Building error due to 'gtk-update-icon-cache: The generated cache was invalid.'
+
+During a system rebuild, if you get a message error like:
+```
+gtk-update-icon-cache: Cache file created successfully.
+gtk-update-icon-cache: Cache file created successfully.
+gtk-update-icon-cache: The generated cache was invalid.
+error: builder for '/nix/store/gf4fp0qf42addb15xpplx472bprrczm9-system-path.drv' failed with exit code 1
+error: 1 dependencies of derivation '/nix/store/is3avirfqcb4a59ml9y2pc5ll66mn975-nixos-system-athenaos-23.11.3640.56911ef3403a.drv' failed to build
+```
+it probably is caused by an icon set you are installing where one or more of its files contain a **space** inside their filename. Just rename them by removing or replacing the space by another character.
diff --git a/docs/nixpkgs.md b/docs/nixpkgs.md
new file mode 100644
index 000000000..af0a06a4c
--- /dev/null
+++ b/docs/nixpkgs.md
@@ -0,0 +1,504 @@
+# Nix Packaging Guidelines
+
+The purpose of this document is to provide guidelines to package tools following Nix best practices.
+
+Official docs related to the rules to consider when creating a Nix package: https://github.com/NixOS/nixpkgs/blob/master/pkgs/README.md
+
+## Build packages
+
+There are several ways to build local packages. What I'm currently using are `nix-build` and `nix-shell`.
+
+### nix-build
+
+Once you created your `package.nix`, you can use `nix-build` command to build your `package.nix` package file. The arguments of `niix-build` command can change according to the type of package we are trying to build.
+
+In general, to build packages based on usual functions (like `mkDerivation`) require the usage of:
+```sh
+nix-build -E 'with import {}; callPackage ./package.nix {}'
+```
+Note that, if you are getting an error reporting `abort` string, probably the invoked `callPackage` command is wrong, so you must use some specific case.
+
+For specific cases, it is required to use a little different command:
+
+For Python3 `buildPythonPackage` function:
+```sh
+nix-build -E 'with import {}; python3Packages.callPackage ./package.nix {}'
+```
+
+For qmake to be used in `mkDerivation` function:
+```sh
+nix-build -E 'with import {}; libsForQt5.callPackage ./package.nix {}'
+```
+In this case, remember to use `wrapQtAppsHook`. If it is not needed to wrap, keep it and add `dontWrapQtApps = true;`.
+
+### Build local packages with local dependencies
+
+Refer to https://summer.nixos.org/blog/callpackage-a-tool-for-the-lazy/#3-benefit-flexible-dependency-injection
+
+Another, more effective, method is to use **niix-shell** because you can create an environment where the package and the related dependencies are actually installed in this environment, so the package will be able to retrieve the related dependencies.
+
+Let's guess our main package to test is `guymager` and the related local dependencies to test with are `libewf-legacy`, `libbfio` and `libguytools`. Let's assume you already packaged both of them and they are stored as:
+```sh
+├── package.nix (guymager)
+├── libewf-legacy
+│ ├── package.nix
+├── libbfio
+│ ├── package.nix
+├── libguytools
+│ ├── package.nix
+```
+Insert these local dependencies inside `package.nix` of `guymager` because we will add them in our nix-shell environment file.
+
+Now create a `shell.nix` file that will deploy your environment:
+```nix
+with import {};
+let
+ libewf-legacy = pkgs.callPackage ./libewf-legacy/package.nix { };
+ libbfio = pkgs.callPackage ./libbfio/package.nix { };
+ libguytools = pkgs.libsForQt5.callPackage ./libguytools/package.nix { };
+ guymager = pkgs.libsForQt5.callPackage ./package.nix { inherit libewf-legacy libbfio libguytools; };
+in
+ stdenv.mkDerivation rec {
+ name = "env";
+
+ buildInputs = [
+ curl
+ git
+ nix
+ perl
+ libewf-legacy
+ libbfio
+ libguytools
+ guymager
+ ];
+ }
+```
+Now, run `nix-shell` and, if `package.nix` files don't produce any errors, you should be inside `nix-shell` environment and you can invoke the program to check if the binary of the main program calls the dependency correctly both at build and run time.
+
+A very interesting use case to use `shell.nix` is to run correctly those applications that try to run non-nix executable, that produce errors.
+
+Indeed, according to [NixOS documentation](https://nix.dev/guides/faq.html#how-to-run-non-nix-executables) NixOS cannot run dynamically linked executables intended for generic Linux environments out of the box.
+
+As example, if you need to build a NodeJS application by Puppeteer, normally it tries to run `$HOME/.cache/puppeteer/chrome/linux-121.0.6167.85/chrome-linux64/chrome` executable that, as said above, does not work.
+
+In these cases, we need always to force the application to use executables that are built for NixOS. In this particular case, for example, if you need to compile a custom [Bibata Cursor](https://github.com/ful1e5/Bibata_Cursor), you need to run:
+```
+npx cbmp -d 'svg/original' -o 'bitmaps/Bibata-Gruvbox' -bc '#282828' -oc '#EBDBB2' -wc '#000000'
+```
+This command uses Puppeteer that produces the error seen above.
+
+To manage this case, just create the following `shell.nix` and set the location where Puppeteer should look for `chromium` executable, and we assign the Nix Chromium executable one:
+```nix
+with import {};
+ stdenv.mkDerivation rec {
+ name = "env";
+ shellHook = ''
+ export PUPPETEER_EXECUTABLE_PATH="${pkgs.chromium.outPath}/bin/chromium"
+ '';
+ buildInputs = [
+ clickgen
+ yarn
+ python3
+ python311Packages.attrs
+ chromium
+ ];
+ }
+```
+Run `nix-shell` and we you run again `npx`, it will work.
+
+### Clean environment
+
+To clean the environment from all the files created by the build process, run `nix-collect-garbage` and remove `result` directories.
+
+## Dependencies
+
+Dependencies can be used by the following expressions:
+* nativeBuildInputs: dependencies that should exist in the build environment
+* buildInputs: dependencies that should exist in the runtime environment
+* propagatedBuildInputs: dependencies that should exist in the runtime environment and also propagated to downstream runtime environments. Usually used in Python packages
+
+All dependencies used in **buildInputs** allow to link header and lib files correctly during the compilation of a tool.
+
+Note that dependencies containing binaries won't install their binaries due to the Nix isolation nature. Maybe, for all the dependencies that the package needs to use their binaries, put these dependencies in `propagatedBuildInputs`.
+
+Another way to install dependencies is by [string context](https://shealevy.com/blog/2018/08/05/understanding-nixs-string-context/) that means to use `${}` to expand the value of a package. An example of this usage is the following:
+```nix
+ postPatch = ''
+ substituteInPlace src/manage.rs \
+ --replace /usr/share/htb-toolkit/icons/ $out/share/htb-toolkit/icons/
+ substituteInPlace src/utils.rs \
+ --replace /usr/bin/bash ${bash} \
+ --replace "\"base64\"" "\"${coreutils}/bin/base64\"" \
+ --replace "\"gunzip\"" "\"${gzip}/bin/gunzip\""
+ substituteInPlace src/appkey.rs \
+ --replace secret-tool ${lib.getExe libsecret}
+ substituteInPlace src/vpn.rs \
+ --replace "arg(\"openvpn\")" "arg(\"${openvpn}/bin/openvpn\")" \
+ --replace "arg(\"killall\")" "arg(\"${killall}/bin/killall\")"
+ '';
+```
+This code will automatically install the needed dependencies specified inside `${}` like `${coreutils}`, `${gzip}`, `${lib.getExe libsecret}`, `${openvpn}` and `${killall}` and you don't need to specify them inside `buildInputs`. Note that, also in this case, the binaries of the dependencies are not installed.
+
+## mkDerivation
+
+This function automatically compiles source files if a **Makefile** exists. It means that we don't need to specify `make` commands in `buildPhase` or `installPhase`. Indeed, often it is not necessary to write any build instructions because the stdenv build system is based on autoconf, which automatically detected the structure of the project directory. We need only to eventually set make flags if needed. Use `makeFlags` to specify flags used on each phase or `buildFlags` to specify flags to be used only during the `buildPhase`.
+
+For example, if `Makefile` is not in the root directory of the project source, you can instruct mkDerivation to find Makefile by:
+```nix
+ makeFlags = [
+ "-C src"
+ ];
+```
+
+Add `enableParallelBuilding = true;` to enable parallel building.
+
+Only in case where the structure of the project does not allow to run autoconf process correctly, then we could be forced to write some code in some of nix phases.
+
+Note that, if you don't need to run C/C++ compiler, replace `stdenv.mkDerivation` by `stdenvNoCC.mkDerivation` and `stdenv` by `stdenvNoCC` on top of the file.
+
+### Usage of hooks
+
+#### autoconf
+
+In case your source project contains **configure** files, you can import **autoreconfHook** and use it as:
+```nix
+nativeBuildInputs = [autoreconfHook];
+```
+In this manner, it simulates the usage of `autoreconf` command and compile and install the tool.
+
+In case the building produces an error due to, for example, obsolete macros that interrupts the autoconf process, try to use **configure** approach described in the next section.
+
+#### configure
+
+In case the **autoconf** method does not work, try to use this approach.
+
+Some source files use **configure** file during compilation. This file can use arguments as `build` for cross-platform building, `host` and `target`.
+
+Instead to write `./configure --build=arm --prefix=$out` in `buildPhase`, you can use:
+```nix
+configurePlatforms = [ "build" ];
+```
+Along with it, `configureFlags` can be used for adding additional flags. In this example we don't add the flag `--prefix=$out` because in Nix the default value of `--prefix` is already `$out`.
+
+### Syntax
+
+When using **mkDerivation** in a `.nix` package file, and its variables need to be used in other elements, instead of using `rec` you can use `finalAttrs`, as the following example:
+```nix
+ stdenv.mkDerivation (finalAttrs: {
+ pname = "maltego";
+ version = "4.6.0";
+
+ src = fetchzip {
+ url = "https://downloads.maltego.com/maltego-v4/linux/Maltego.v${finalAttrs.version}.linux.zip";
+ hash = "sha256-q+1RYToZtBxAIDSiUWf3i/3GBBDwh6NWteHiK4VM1HY=";
+ };
+ ...
+ })
+```
+In this manner, all the declared variables like `pname` or `version` can be accessed by `finalAttrs.`.
+
+## Perl Modules
+
+In case you need to upload a Perl module in Nixpkgs repository, you must not create a `default.nix` in `pkgs/development/perl-modules` (unless the module is not straight forward and needs some core dependency). In most cases, you need only to add in `pkgs/top-level/perl-packages.nix` something like this structure:
+```nix
+ ParseWin32Registry = buildPerlPackage {
+ pname = "ParseWin32Registry";
+ version = "1.1";
+ src = fetchurl {
+ url = "mirror://cpan/authors/id/J/JM/JMACFARLA/Parse-Win32Registry-1.1.tar.gz";
+ hash = "sha256-wWOyAr5q17WPSEZJT/crjJqXloPKmU5DgOmsZWTcBbo=";
+ };
+ meta = with lib; {
+ description = "Module for parsing Windows Registry files";
+ license = with licenses; [ artistic1 gpl1Only ];
+ };
+ };
+```
+
+## Meta information
+
+**meta** allows to specify several information about the package. The needed fields to set are mainly:
+```nix
+ meta = with lib; {
+ homepage = "https://www.packagetool.com";
+ description = "Description of the tool";
+ mainProgram = "";
+ maintainers = with maintainers; [ ];
+ platforms = with platforms; ;
+ sourceProvenance = with sourceTypes; [ ];
+ license = licenses.;
+ };
+```
+You can also use a direct form like `platforms = platforms.unix;`
+
+Note, if you use the pattern with `with` like `sourceProvenance = with sourceTypes;`, the assigned values should be in a list, so between `[ ]`.
+
+Some of these fields accept only specific input values. For each one of these fields, to know what are the possible values to use, refer to the following:
+* maintainers: [maintainer-list.nix](https://github.com/NixOS/nixpkgs/blob/master/maintainers/maintainer-list.nix) and [team-list.nix](https://github.com/NixOS/nixpkgs/blob/master/maintainers/team-list.nix) or running:
+ ```nix
+ nix repl -f ''
+ builtins.attrNames lib.maintainers
+ ```
+* platforms:
+ ```nix
+ nix repl -f ''
+ builtins.attrNames lib.platforms
+ ```
+* sourceProvenance:
+ ```nix
+ nix repl -f ''
+ builtins.attrNames lib.sourceTypes
+ ```
+ note that if nothing is specified, the default value is **fromSource**
+* license:
+ ```nix
+ nix repl -f ''
+ builtins.attrNames lib.licenses
+ ```
+
+ Furthermore, the link at **homepage** must be `https`.
+
+## Misc
+
+### Make binary wrapper
+
+The creation of a binary wrapper is very comfortable since it allows to set environment variables along with it. An example:
+```nix
+ installPhase = ''
+ runHook preInstall
+
+ mkdir -p $out/{bin,share}
+ chmod +x bin/maltego
+
+ cp -aR . "$out/share/maltego/"
+
+ makeWrapper $out/share/maltego/bin/maltego $out/bin/${finalAttrs.meta.mainProgram} \
+ --set JAVA_HOME ${jre} \
+ --prefix PATH : ${lib.makeBinPath [ jre ]}
+
+ runHook postInstall
+ '';
+```
+
+### Make a bash wrapper
+
+Currently, to wrap a program in a bash script, it is possible to use:
+```nix
+ installPhase = ''
+ runHook preInstall
+
+ mkdir -p $out/{bin,share}
+
+ cp -aR . "$out/share/toolname/"
+
+ cat > "$out/bin/${pname}" << EOF
+ #!${runtimeShell}
+ exec ${perl}/bin/perl $out/share/toolname/toolname.pl "\$@"
+ EOF
+
+ chmod u+x "$out/bin/${pname}"
+
+ runHook postInstall
+ '';
+```
+Some packages in other Linux distributions are wrapped by using `cd` command before using `exec` like:
+```nix
+ cat > "$pkgdir/usr/bin/$pkgname" << EOF
+#!/usr/bin/env bash
+cd /usr/share/$pkgname/
+exec perl ./rip.pl "\${@}"
+EOF
+```
+This approach is usually used because some tool scripts call other files that work, as example, as plugins, by "relative" path as i.e. `./plugins/`. If `cd` was removed, the tool script is not able to find `plugins` directory anymore.
+
+In Nix, this usage of `cd` in wrappers must be discouraged because it forces you to land in `$out/share/toolname` that is inside `/nix/store`. At this point, how can we prevent `cd` usage and still access to paths like `plugins`?
+
+A good strategy is to use `postPatch` and `substituteInPlace` to replace `plugins` by `$out/share/toolname/plugins` inside the tool script files that define the plugin path. An example comes from `regripper` nix package file:
+```nix
+ postPatch = ''
+ substituteInPlace rip.pl rr.pl \
+ --replace \"plugins/\" \"$out/share/regripper/plugins/\" \
+ --replace \"plugins\" \"$out/share/regripper/plugins\"
+ '';
+```
+
+### Usage of macros
+
+The usage of macros in some fields of the `.nix` file is discouraged. For example, in:
+```nix
+buildPythonPackage rec {
+ pname = "pysqlite3";
+ version = "0.5.2";
+ src = fetchFromGitHub {
+ owner = "coleifer";
+ repo = pname;
+ ...
+```
+`repo = pname;` must be changed to `repo = "pysqlite3";`. The motivation to avoid the usage of macros/variables on some fiels is explained here: https://github.com/NixOS/nixpkgs/issues/277994
+
+### Source link
+
+If using SourceForge as source, use `mirror://sourceforge/project`.
+
+### Replace code strings
+
+If it is needed to replace code strings inside source files, it is possible to use `substituteInPlace`, usually in `postPatch` for example:
+```nix
+ postPatch = ''
+ substituteInPlace bin/maltego \
+ --replace /usr/bin/awk ${lib.getExe gawk} \
+ --replace "string" "anotherstring"
+ '';
+```
+To intend, the number of spaces is two.
+Note also the usage of `${lib.getExe gawk}`: **lib.getExe** can be used to retrive the path of a binary file.
+
+### Linking libraries
+
+If I'm not wrong, `mkDerivation` should automatically detect `/usr//` at build time and replace `/usr` by `$out`. It occurs when `/usr` as written according to a specific pattern, for example `/usr/local/lib/libguytools.a`.
+
+In case a source file contains something like:
+```cpp
+const QString ThreadScanLibSearchDirs = "/lib,/usr/lib,/usr/lib64,/usr/local/lib"; // Separate directories by commas
+```
+where `ThreadScanLibSearchDirs` will be used as base to find libraries as `libudev` and/or `libparted` at **runtime**, it is needed to change those paths like:
+```nix
+substituteInPlace threadscan.cpp \
+ --replace '/lib,/usr/lib,/usr/lib64,/usr/local/lib' '${builtins.replaceStrings [":"] [","] (lib.makeLibraryPath [ udev parted ])}'
+```
+It will result in something like:
+```cpp
+const QString ThreadScanLibSearchDirs = "/nix/store/2cvhyiblil0vgrcbr4x46pvx9150pqfi-systemd-minimal-libs-254.6/lib,/nix/store/nswzq08675i33c0smqrhyww4r8z3r6v5-parted-3.6/lib"; // Separate directories by commas
+```
+In case you are using a `substituteInPlace` that replaces `/usr` by `$out` to the file containing the code above, be sure that this general `substituteInPlace` is placed after the `substituteInPlace` of those specific libraries.
+
+If you are dealing with a Java project, you can link libraries at runtime as follows:
+```nix
+ installPhase = ''
+ mkdir -p "$out/lib/java" "$out/share/java"
+ cp tool/target/gp.jar "$out/share/java"
+ makeWrapper "${jre8_headless}/bin/java" "$out/bin/gp" \
+ --add-flags "-jar '$out/share/java/gp.jar'" \
+ --prefix LD_LIBRARY_PATH : "${pcsclite.out}/lib"
+ '';
+```
+where `pcsclite` is the dependency package of the needed library.
+
+### Create Desktop file
+
+In a Nix package it is possible to create desktop files by importing `copyDesktopItems` and `makeDesktopItem` and use `desktopItems` as:
+```nix
+ nativeBuildInputs = [
+ copyDesktopItems
+ ];
+```
+and
+```nix
+ desktopItems = [
+ (makeDesktopItem {
+ name = finalAttrs.pname;
+ desktopName = "Maltego";
+ exec = finalAttrs.meta.mainProgram;
+ icon = finalAttrs.pname;
+ comment = "An open source intelligence and forensics application";
+ categories = [ "Network" "Security" ];
+ startupNotify = false;
+ })
+ ];
+```
+
+### Create multiple icons from .ico file
+
+If a source project has a `.ico` file, it is possible to generate icon images in different sizes that could be used in the desktop file of the tool. It can be reached by importing `icoutils` and use the following structure:
+```nix
+ nativeBuildInputs = [
+ icoutils
+ ];
+```
+and
+```nix
+ installPhase = ''
+ runHook preInstall
+
+ mkdir -p $out/{bin,share}
+ chmod +x bin/maltego
+
+ icotool -x bin/maltego.ico
+
+ for size in 16 32 48 256
+ do
+ mkdir -p $out/share/icons/hicolor/$size\x$size/apps
+ cp maltego_*_$size\x$size\x32.png $out/share/icons/hicolor/$size\x$size/apps/maltego.png
+ done
+
+ rm -r *.png
+
+ cp -aR . "$out/share/maltego/"
+ ...
+```
+
+### Patch files
+
+If you need to perform massive change on the code of upstream files, you can create **patch files** that will replace the diff content with respect to the original files. This is useful if a tool works on usual Linux systems but not in NixOS and some changes should be applied to make it working on NixOS.
+
+To create a patch file, you need to create a folder containing the same directory path of the upstream project. For example, if you need to patch `utils.rs` and it is stored in the `src/` folder, you should create:
+```sh
+mkdir -p a/src
+mkdir -p b/src
+```
+in `a/src/` you will store the upstream original `utils.rs` while in `b/src/` you will store the edited `utils.rs`. Then, run:
+```sh
+diff -Naur a/src/utils.rs b/src/utils.rs > utils.patch
+```
+`utils.patch` is the patch file we will use inside our Nix derivative. So, inside the `package.nix` we insert:
+```nix
+ # Patches only relevant for Nixpkgs
+ patches = [
+ ./utils.patch
+ ];
+```
+In case you have multiple patch files that are used for one single purpose, you must merge them in one single patch file by, for example:
+```sh
+cat main.patch manage.patch types.patch utils.patch > disable_shell_prompt_change.patch
+```
+and, inside the `package.nix`:
+```nix
+ # Patches only relevant for Nixpkgs
+ patches = [
+ ./disable-shell-prompt-change.patch
+ ];
+```
+Note that, according to the [naming convention](https://github.com/NixOS/nixpkgs/blob/master/CONTRIBUTING.md#file-naming-and-organisation), filenames should contain dashes if needed, instead of underscores.
+
+### Testing Python programs
+
+Testing Python applications directly in the system is discouraged and the application could not find Python libraries you want to import. This testing should be done in a development environment instead of directly in you system. According to [this guide](https://ayats.org/blog/nix-workflow/#python), you can create your Python development environment by creating a `default.nix` file similar to:
+```nix
+with import {};
+
+pkgs.mkShell {
+ packages = [
+ (pkgs.python3.withPackages (python-pkgs: [
+ python-pkgs.pygobject3
+ ]))
+ ];
+
+ nativeBuildInputs = [
+ gobject-introspection
+ wrapGAppsHook
+ ];
+
+ buildInputs = [
+ gtk3
+ libwnck
+ ];
+
+ # Workaround: make vscode's python extension read the .venv
+ shellHook = ''
+ export PYTHONPATH="$PYTHONPATH:${libwnck}"
+ venv="$(cd $(dirname $(which python)); cd ..; pwd)"
+ ln -Tsf "$venv" .venv
+ '';
+}
+```
+and then, run `nix-shell`. By this method, the application is able to find the imported libraries and it runs in an isolated environment.
\ No newline at end of file
diff --git a/flake.lock b/flake.lock
new file mode 100644
index 000000000..4271a8c80
--- /dev/null
+++ b/flake.lock
@@ -0,0 +1,49 @@
+{
+ "nodes": {
+ "home-manager": {
+ "inputs": {
+ "nixpkgs": [
+ "nixpkgs"
+ ]
+ },
+ "locked": {
+ "lastModified": 1705659542,
+ "narHash": "sha256-WA3xVfAk1AYmFdwghT7mt/erYpsU6JPu9mdTEP/e9HQ=",
+ "owner": "nix-community",
+ "repo": "home-manager",
+ "rev": "10cd9c53115061aa6a0a90aad0b0dde6a999cdb9",
+ "type": "github"
+ },
+ "original": {
+ "owner": "nix-community",
+ "ref": "release-23.11",
+ "repo": "home-manager",
+ "type": "github"
+ }
+ },
+ "nixpkgs": {
+ "locked": {
+ "lastModified": 1706373441,
+ "narHash": "sha256-S1hbgNbVYhuY2L05OANWqmRzj4cElcbLuIkXTb69xkk=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "56911ef3403a9318b7621ce745f5452fb9ef6867",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOS",
+ "ref": "nixos-23.11",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "root": {
+ "inputs": {
+ "home-manager": "home-manager",
+ "nixpkgs": "nixpkgs"
+ }
+ }
+ },
+ "root": "root",
+ "version": 7
+}
diff --git a/flake.nix b/flake.nix
new file mode 100644
index 000000000..3d7e9f8f4
--- /dev/null
+++ b/flake.nix
@@ -0,0 +1,86 @@
+{
+ inputs = {
+ nixpkgs.url = "github:NixOS/nixpkgs/nixos-23.11";
+
+ home-manager = {
+ url = "github:nix-community/home-manager/release-23.11";
+ inputs.nixpkgs.follows = "nixpkgs";
+ };
+ };
+
+ outputs = {self, nixpkgs, home-manager}@inputs:
+ let
+ theme = "graphite";
+ desktop = "mate";
+ dmanager = "lightdm";
+ shell = "bash";
+ terminal = "alacritty";
+ browser = "firefox";
+ bootloader = "systemd";
+ mkSystem = extraModules:
+ nixpkgs.lib.nixosSystem {
+ system = "x86_64-linux";
+ specialArgs = {
+ username = "athena";
+ hostname = "athenaos";
+ hashed = "$6$zjvJDfGSC93t8SIW$AHhNB.vDDPMoiZEG3Mv6UYvgUY6eya2UY5E2XA1lF7mOg6nHXUaaBmJYAMMQhvQcA54HJSLdkJ/zdy8UKX3xL1";
+ hashedRoot = "$6$zjvJDfGSC93t8SIW$AHhNB.vDDPMoiZEG3Mv6UYvgUY6eya2UY5E2XA1lF7mOg6nHXUaaBmJYAMMQhvQcA54HJSLdkJ/zdy8UKX3xL1";
+ inherit (inputs) home-manager;
+ }; # Using // attrs prevents the error 'infinite recursion due to home-manager usage in root default.nix
+ modules = let
+ #modulesPath = "./nixos/installation";
+ #modulesPathNixPkgs = "${nixpkgs}/nixos/modules"; # Accessing remote NixOS/nixpkgs modules
+ in
+ [
+ {
+ _module.args.theme = theme;
+ _module.args.dmanager = dmanager;
+ _module.args.desktop = desktop;
+ _module.args.shell = shell;
+ _module.args.terminal = terminal;
+ _module.args.browser = browser;
+ _module.args.bootloader = bootloader;
+ }
+ ]
+ ++ extraModules;
+ };
+ in {
+ nixosConfigurations = let
+ modulesPath = "./nixos/installation";
+ in {
+ # nix build .#nixosConfigurations.live-image.config.system.build.isoImage
+ "live-image" = mkSystem [
+ # Note that if one of the following modules need to input parameters like 'terminal' and 'shell', these are taken in the code above
+ ./nixos/installation/iso.nix
+ ./nixos/home-manager/desktops/mate
+ ./nixos/home-manager/terminals/alacritty
+ ./nixos/modules/themes/graphite
+ ./nixos/hosts
+ home-manager.nixosModules.home-manager
+ ];
+ "runtime" = mkSystem [
+ "/etc/nixos/hardware-configuration.nix"
+ home-manager.nixosModules.home-manager
+ ./nixos/. # It refers to the default.nix at nixos/ directory that imports in chain all the subfolder contents containing default.nix
+ ./nixos/hosts/software
+ ./nixos/modules/boot/${bootloader}
+ ./nixos/modules/desktops/${desktop}
+ ./nixos/modules/dms/${dmanager}
+ ./nixos/modules/themes/${theme}
+ ./nixos/home-manager/terminals/${terminal}
+ ./nixos/home-manager/browsers/${browser}
+ ./nixos/home-manager/shells/${shell}
+ ];
+ "student" = mkSystem [
+ "/etc/nixos/hardware-configuration.nix"
+ ./nixos/modules/roles/student
+ ];
+ };
+
+ packages."x86_64-linux" =
+ (builtins.mapAttrs (n: v: v.config.system.build.isoImage) self.nixosConfigurations)
+ // {
+ default = self.packages."x86_64-linux"."live-image";
+ };
+ };
+}
diff --git a/nixos/configuration.nix b/nixos/configuration.nix
new file mode 100644
index 000000000..d4dadc43c
--- /dev/null
+++ b/nixos/configuration.nix
@@ -0,0 +1,54 @@
+# Edit this configuration file to define what should be installed on
+# your system. Help is available in the configuration.nix(5) man page
+# and in the NixOS manual (accessible by running ‘nixos-help’).
+
+{ config, pkgs, ... }:
+let
+ # These variable names are used by Aegis backend
+ username = "athena";
+ hashed = "$6$zjvJDfGSC93t8SIW$AHhNB.vDDPMoiZEG3Mv6UYvgUY6eya2UY5E2XA1lF7mOg6nHXUaaBmJYAMMQhvQcA54HJSLdkJ/zdy8UKX3xL1";
+ hashedRoot = "$6$zjvJDfGSC93t8SIW$AHhNB.vDDPMoiZEG3Mv6UYvgUY6eya2UY5E2XA1lF7mOg6nHXUaaBmJYAMMQhvQcA54HJSLdkJ/zdy8UKX3xL1";
+ hostname = "athenaos";
+ theme = "sweet";
+ desktop = "gnome";
+ dmanager = "gdm";
+ shell = "fish";
+ terminal = "kitty";
+ browser = "firefox";
+ bootloader = "systemd";
+ hm-version = "release-23.11"; # Correspond to home-manager GitHub branches
+ home-manager = builtins.fetchTarball "https://github.com/nix-community/home-manager/archive/${hm-version}.tar.gz";
+in
+{
+ imports =
+ [ # Include the results of the hardware scan.
+ {
+ _module.args.username = username;
+ _module.args.hashed = hashed;
+ _module.args.hashedRoot = hashedRoot;
+ _module.args.hostname = hostname;
+ _module.args.theme = theme;
+ _module.args.desktop = desktop;
+ _module.args.dmanager = dmanager;
+ _module.args.shell = shell;
+ _module.args.terminal = terminal;
+ _module.args.browser = browser;
+ _module.args.bootloader = bootloader;
+ }
+ (import "${home-manager}/nixos")
+ /etc/nixos/hardware-configuration.nix
+ ./modules/boot/${bootloader}
+ ./modules/dms/${dmanager}
+ ./modules/themes/${theme}
+ ./home-manager/desktops/${desktop}
+ ./home-manager/terminals/${terminal}
+ ./home-manager/browsers/${browser}
+ ./home-manager/shells/${shell}
+ ./hosts/software
+ ./.
+
+ ];
+
+ networking.enableIPv6 = false;
+ services.flatpak.enable = true;
+}
diff --git a/nixos/default.nix b/nixos/default.nix
new file mode 100644
index 000000000..c6e14441d
--- /dev/null
+++ b/nixos/default.nix
@@ -0,0 +1,11 @@
+# What is specified in the next line are the modules we expect to be here. home-manager here is passed by flake.nix
+{ pkgs, home-manager, ... }:
+{
+ imports = [
+ ./home-manager
+ ./hosts
+ ./modules
+ ./users
+ ./pkgs
+ ];
+}
diff --git a/nixos/home-manager/browsers/bookmarks.nix b/nixos/home-manager/browsers/bookmarks.nix
new file mode 100644
index 000000000..7eed0c843
--- /dev/null
+++ b/nixos/home-manager/browsers/bookmarks.nix
@@ -0,0 +1,1064 @@
+[
+ {
+ name = "Bookmarks Toolbar";
+ toolbar = true;
+ bookmarks = [
+ {
+ name = "Athena OS";
+ bookmarks = [
+ {
+ name = "Official Website";
+ url = "https://athenaos.org/";
+ }
+ {
+ name = "Repository";
+ url = "https://github.com/Athena-OS/athena-nix";
+ }
+ ];
+ }
+ {
+ name = "Awesome";
+ bookmarks = [
+ {
+ name = "AttackerKB";
+ url = "https://attackerkb.com/";
+ }
+ {
+ name = "ChatGPT - OpenAI";
+ url = "https://chat.openai.com/";
+ }
+ {
+ name = "CyberSpace Gitbook - CyberSpace";
+ url = "https://martian1337.gitbook.io/cyberspace/";
+ }
+ ];
+ }
+ {
+ name = "Bug Bounty Hunting";
+ bookmarks = [
+ {
+ name = "CVSS";
+ bookmarks = [
+ {
+ name = "Common Vulnerability Scoring System SIG";
+ url = "https://www.first.org/cvss/";
+ }
+ {
+ name = "Common Vulnerability Scoring System Version 3.1 Calculator";
+ url = "https://www.first.org/cvss/calculator/3.1";
+ }
+ ];
+ }
+ {
+ name = "HackerOne";
+ bookmarks = [
+ {
+ name = "Bug Bounty Program - Complete List | HackerOne";
+ url = "https://hackerone.com/bug-bounty-programs";
+ }
+ {
+ name = "Hacker Mediation | HackerOne Platform Documentation";
+ url = "https://docs.hackerone.com/hackers/hacker-mediation.html";
+ }
+ {
+ name = "HackerOne | #1 Trusted Security Platform and Hacker Program";
+ url = "https://www.hackerone.com/";
+ }
+ {
+ name = "HackerOne Code of Conduct | Hacker101";
+ url = "https://www.hacker101.com/resources/articles/code_of_conduct";
+ }
+ {
+ name = "HackerOne Directory: Report Vulnerabilities to Companies' Security Teams";
+ url = "https://hackerone.com/directory/programs";
+ }
+ {
+ name = "Invitations | HackerOne Platform Documentation";
+ url = "https://docs.hackerone.com/hackers/invitations.html";
+ }
+ {
+ name = "Submitting Reports | HackerOne Platform Documentation";
+ url = "https://docs.hackerone.com/hackers/submitting-reports.html";
+ }
+ ];
+ }
+ {
+ name = "BugBounty.jp - バグバウンティ・プラットフォーム";
+ url = "https://bugbounty.jp/";
+ }
+ {
+ name = "Bugcrowd - Crowdsourced Cybersecurity Platform";
+ url = "https://www.bugcrowd.com/";
+ }
+ {
+ name = "CWE - Common Weakness Enumeration";
+ url = "https://cwe.mitre.org/";
+ }
+ {
+ name = "FireBounty - The Ultimate Vulnerability Disclosure Policy and Bug Bounty List!";
+ url = "https://firebounty.com/";
+ }
+ {
+ name = "HackenProof - Web3 Bug Bounty platform for Crypto Projects";
+ url = "https://hackenproof.com/";
+ }
+ {
+ name = "Intigriti - Bug Bounty & Agile Pentesting Platform";
+ url = "https://www.intigriti.com/";
+ }
+ {
+ name = "Open Bug Bounty - Free Bug Bounty Program and Coordinated Vulnerability Disclosure";
+ url = "https://www.openbugbounty.org/";
+ }
+ {
+ name = "RedStorm - Bug Bounty";
+ url = "https://www.redstorm.io/program";
+ }
+ {
+ name = "Safehats - Bug Bounty Program | Vulnerability Disclosure";
+ url = "https://safehats.com/";
+ }
+ {
+ name = "Synack - Premier Security Testing Platform";
+ url = "https://www.synack.com/";
+ }
+ {
+ name = "Vulnerability Lab - SECURITY VULNERABILITY RESEARCH LABORATORY - Best Bug Bounty Programs, Vulnerability Coordination and Bug Bounty Platform";
+ url = "https://www.vulnerability-lab.com/";
+ }
+ {
+ name = "YesWeHack - Global Bug Bounty platform & VDP platform";
+ url = "https://www.yeswehack.com/";
+ }
+ {
+ name = "Yogosha - VOC / Vulnerability Operations Center";
+ url = "https://yogosha.com/";
+ }
+ ];
+ }
+ {
+ name = "Crypto Tools";
+ bookmarks = [
+ {
+ name = "Brainfuck/Text/Ook! Obfuscator-Deobfuscator";
+ url = "https://www.splitbrain.org/_static/ook/";
+ }
+ {
+ name = "Cipher Identifier";
+ url = "https://www.boxentriq.com/code-breaking/cipher-identifier";
+ }
+ {
+ name = "CrackStation - Online Password Hash Cracking - MD5, SHA1, Linux, Rainbow Tables, etc.";
+ url = "https://crackstation.net/";
+ }
+ {
+ name = "CrackStation's Password Cracking Dictionary (Pay what you want!)";
+ url = "https://crackstation.net/crackstation-wordlist-password-cracking-dictionary.htm";
+ }
+ {
+ name = "CyberChef";
+ url = "https://gchq.github.io/CyberChef/";
+ }
+ {
+ name = "Generate All Hashes - MD5, SHA1, SHA3, CRC32 - Online - Browserling Web Developer Tools";
+ url = "https://www.browserling.com/tools/all-hashes";
+ }
+ {
+ name = "Hash Encoders Online";
+ url = "https://emn178.github.io/online-tools/";
+ }
+ {
+ name = "Hash Encryption and Reverse Decryption";
+ url = "https://md5hashing.net/hash";
+ }
+ {
+ name = "Hash Type Identifier - Check and validate your hash string";
+ url = "https://md5hashing.net/hash_type_checker";
+ }
+ {
+ name = "Hashes - Decrypt MD5, SHA1, MySQL, NTLM, SHA256, SHA512, Wordpress, Bcrypt hashes for free online";
+ url = "https://hashes.com/en/decrypt/hash";
+ }
+ {
+ name = "Hashkiller.io";
+ url = "https://hashkiller.io/";
+ }
+ {
+ name = "rot13.com";
+ url = "https://rot13.com/";
+ }
+ {
+ name = "URL Decoder/Encoder";
+ url = "https://meyerweb.com/eric/tools/dencoder/";
+ }
+ {
+ name = "Vigenère Cipher Online";
+ url = "https://cryptii.com/pipes/vigenere-cipher";
+ }
+ {
+ name = "XOR Calculator Online";
+ url = "https://xor.pw/";
+ }
+ ];
+ }
+ {
+ name = "Events";
+ bookmarks = [
+ {
+ name = "Cybersecurity Conferences [Updated Daily]";
+ url = "https://infosec-conferences.com/";
+ }
+ ];
+ }
+ {
+ name = "Exploit Databases";
+ bookmarks = [
+ {
+ name = "Exploit Database - Exploits for Penetration Testers, Researchers, and Ethical Hackers";
+ url = "https://www.exploit-db.com/";
+ }
+ {
+ name = "Rapid7 - Vulnerability & Exploit Database";
+ url = "https://www.rapid7.com/db/";
+ }
+ {
+ name = "Vulnerability Database 🛡";
+ url = "https://vuldb.com/";
+ }
+ ];
+ }
+ {
+ name = "Hacking Platforms";
+ bookmarks = [
+ {
+ name = "Hack The Box: Hacking Training For The Best | Individuals & Companies";
+ url = "https://www.hackthebox.eu/";
+ }
+ {
+ name = "PentesterLab: Learn Web Penetration Testing: The Right Way";
+ url = "https://pentesterlab.com/";
+ }
+ {
+ name = "PortSwigger Labs | Web Security Academy";
+ url = "https://portswigger.net/web-security/all-labs";
+ }
+ {
+ name = "Proving Grounds | Offensive Security";
+ url = "https://www.offensive-security.com/labs/";
+ }
+ {
+ name = "PWNX";
+ url = "https://pwnx.io/";
+ }
+ {
+ name = "Root Me - Hacking and Information Security learning platform";
+ url = "https://www.root-me.org/?lang=en";
+ }
+ {
+ name = "TryHackMe | Cyber Security Training";
+ url = "https://tryhackme.com/?__cf_chl_jschl_tk__=008a369e804946cbdcf9605278128a2ad8722603-1618185491-0-AcKeu6FM4qTU37_dJ6smPqyEw0Xy53XBmAp_OGNJWVZIOAhJGUVEoYuidpuFDBUzyPPpox9H68OOgJsX-cO1Fj3XE0ZMVBWyaj_d3r8fUiZ8NAL801Rkvl6N42wcWZYgidFfXSPNFgePMxGEm0SgS-WOgxa81nDX7UYXDeqpo0-wLfvbnoVLxkJjmwlmMG4336OwPiNw7c0iMRwXRzlx5VhhIa7BstTc9SEOQdRuRT7ZKo_-YICyb0CG8oUmJyJ-2U3dHh-Glq6OTSR4X1n5kof_yT_1qRRgtCmP5E946_56Rg1qVIcIM5c9cPArHhAWy7iyL23p3kN2S4UQsfz-K1jpKvsCOzQrqn9Fc6YjuJ6Ydsv1k4zIWF5YEhb8zlTd7EBpj_Y7QdsEzvGVIzZwGKJ2VzS_819kXJ22K6oyOWK-B4doHsVMZN79s2ypQtU-kw";
+ }
+ ];
+ }
+ {
+ name = "Hardware";
+ bookmarks = [
+ {
+ name = "Flipper Zero - Portable Multi-tool Device for Geeks";
+ url = "https://flipperzero.one/";
+ }
+ {
+ name = "Hak5 - Hacking Tools & Media";
+ url = "https://hak5.org/";
+ }
+ {
+ name = "Maltronics - Pentesting Products";
+ url = "https://maltronics.com/";
+ }
+ ];
+ }
+ {
+ name = "JavaScript";
+ bookmarks = [
+ {
+ name = "Deobfuscators";
+ bookmarks = [
+ {
+ name = "JS NICE: Statistical renaming, Type inference and Deobfuscation";
+ url = "http://www.jsnice.org/";
+ }
+ ];
+ }
+ {
+ name = "Formatters";
+ bookmarks = [
+ {
+ name = "JavaScript Beautifier";
+ url = "https://beautifier.io/";
+ }
+ {
+ name = "Prettier v2.3.2";
+ url = "https://prettier.io/playground/";
+ }
+ ];
+ }
+ {
+ name = "Obfuscators";
+ bookmarks = [
+ {
+ name = "aaencode - Encode any JavaScript program to Japanese style emoticons (^_^)";
+ url = "https://utf-8.jp/public/aaencode.html";
+ }
+ {
+ name = "Javascript Obfuscator - BeautifyTools.com";
+ url = "https://beautifytools.com/javascript-obfuscator.php";
+ }
+ {
+ name = "JavaScript Obfuscator Tool";
+ url = "https://obfuscator.io/";
+ }
+ {
+ name = "jjencode - Encode any JavaScript program using only symbols";
+ url = "https://utf-8.jp/public/jjencode.html";
+ }
+ {
+ name = "JSFuck - Write any JavaScript with 6 Characters: []()!+";
+ url = "http://www.jsfuck.com/";
+ }
+ ];
+ }
+ {
+ name = "JavaScript Minifier";
+ url = "https://javascript-minifier.com/";
+ }
+ {
+ name = "JSConsole";
+ url = "https://jsconsole.com/";
+ }
+ {
+ name = "JSFiddle - Code Playground";
+ url = "https://jsfiddle.net/";
+ }
+ ];
+ }
+ {
+ name = "Nix";
+ bookmarks = [
+ {
+ name = "Home Manager - Configuration Options";
+ url = "https://nix-community.github.io/home-manager/options.xhtml";
+ }
+ {
+ name = "Nix Matrix";
+ url = "https://matrix.to/#/#community:nixos.org";
+ }
+ {
+ name = "NixOS Search";
+ url = "https://search.nixos.org/packages";
+ }
+ {
+ name = "Nixpkgs PR Tracker";
+ url = "https://nixpk.gs/pr-tracker.html";
+ }
+ {
+ name = "Nixpkgs Repository";
+ url = "https://github.com/NixOS/nixpkgs";
+ }
+ ];
+ }
+ {
+ name = "OSINT";
+ bookmarks = [
+ {
+ name = "Onion Network";
+ bookmarks = [
+ {
+ name = "Onion Search Engine";
+ url = "http://kn3hl4xwon63tc6hpjrwza2npb7d4w5yhbzq7jjewpfzyhsd65tm6dad.onion/";
+ }
+ {
+ name = "Ransomware Group Sites";
+ url = "http://ransomwr3tsydeii4q43vazm7wofla5ujdajquitomtd47cxjtfgwyyd.onion/";
+ }
+ {
+ name = "Torch : The Tor Search Engine";
+ url = "http://torchdeedp3i2jigzjdmfpn5ttjhthh5wbmda2rr3jvqjg5p77c54dqd.onion/";
+ }
+ ];
+ }
+ {
+ name = "Sandbox";
+ bookmarks = [
+ {
+ name = "Any Run - Interactive Online Malware Analysis Sandbox";
+ url = "https://app.any.run/";
+ }
+ {
+ name = "Hybrid Analysis - Free Automated Malware Analysis Service";
+ url = "https://hybrid-analysis.com/";
+ }
+ ];
+ }
+ {
+ name = "Whois";
+ bookmarks = [
+ {
+ name = "Central Ops - Free online network tools - traceroute, nslookup, dig, whois lookup, ping - IPv6";
+ url = "https://centralops.net/co/";
+ }
+ {
+ name = "Whois.com - Domain Names & Identity for Everyone";
+ url = "https://www.whois.com/";
+ }
+ ];
+ }
+ {
+ name = "abuse.ch | Fighting malware and botnets";
+ url = "https://abuse.ch/";
+ }
+ {
+ name = "AsINT_Collection - start.me";
+ url = "https://start.me/p/b5Aow7/asint_collection";
+ }
+ {
+ name = "Censys - Certificates";
+ url = "https://search.censys.io/certificates";
+ }
+ {
+ name = "Censys - Hosts";
+ url = "https://censys.io/ipv4";
+ }
+ {
+ name = "Cisco Talos Intelligence Group - Comprehensive Threat Intelligence";
+ url = "https://talosintelligence.com/";
+ }
+ {
+ name = "CoinBlockerLists - Search";
+ url = "https://malware-research.org/coinblockerlists/";
+ }
+ {
+ name = "commandergirl's suggestions - start.me";
+ url = "https://start.me/p/1kJKR9/commandergirl-s-suggestions?locale=en";
+ }
+ {
+ name = "crt.sh - Certificate Search";
+ url = "https://crt.sh/";
+ }
+ {
+ name = "dark.fail: Which darknet sites are online?";
+ url = "http://darkfailllnkf4vf.onion/";
+ }
+ {
+ name = "darkfeed.io - DeepWeb intelligence Feed";
+ url = "https://darkfeed.io/";
+ }
+ {
+ name = "de🔸digger find public files in Google Drive";
+ url = "https://www.dedigger.com/#gsc.tab=0";
+ }
+ {
+ name = "DeHashed — #FreeThePassword";
+ url = "https://dehashed.com/";
+ }
+ {
+ name = "Diff Checker - Compare the difference between images";
+ url = "https://www.diffchecker.com/image-compare/";
+ }
+ {
+ name = "Forensic Magnifier - free online photo forensics tools - 29a.ch";
+ url = "https://29a.ch/photo-forensics/#forensic-magnifier";
+ }
+ {
+ name = "GreyNoise Visualizer";
+ url = "https://www.greynoise.io/viz/";
+ }
+ {
+ name = "Have I Been Emotet";
+ url = "https://www.haveibeenemotet.com/";
+ }
+ {
+ name = "Have I Been Pwned: Check if your email has been compromised in a data breach";
+ url = "https://haveibeenpwned.com/";
+ }
+ {
+ name = "Hunter (Email Hunter) - Find email addresses in seconds";
+ url = "https://hunter.io/";
+ }
+ {
+ name = "i2OCR - Free Online OCR";
+ url = "https://www.i2ocr.com/";
+ }
+ {
+ name = "ICANN Lookup";
+ url = "https://lookup.icann.org/en";
+ }
+ {
+ name = "Insecam - World biggest online cameras directory";
+ url = "http://insecam.org/";
+ }
+ {
+ name = "Intelligence X";
+ url = "https://intelx.io/";
+ }
+ {
+ name = "Maltiverse";
+ url = "https://maltiverse.com/search";
+ }
+ {
+ name = "MX Lookup Tool - Check your DNS MX Records online - MxToolbox";
+ url = "https://mxtoolbox.com/";
+ }
+ {
+ name = "NerdyData.com - Search The Web's Source Code for Technologies - NerdyData";
+ url = "https://www.nerdydata.com/";
+ }
+ {
+ name = "netograph.io ~ mapping the deep structure of the web.";
+ url = "https://netograph.io/";
+ }
+ {
+ name = "NS.tools: Check DNS domain or IP, test DNS lookup";
+ url = "https://ns.tools/";
+ }
+ {
+ name = "ONYPHE - Cyber Defense Search Engine";
+ url = "https://www.onyphe.io/";
+ }
+ {
+ name = "OSINT Framework";
+ url = "https://osintframework.com/";
+ }
+ {
+ name = "Pipl - Identity Information for Investigation and Research";
+ url = "https://pipl.com/";
+ }
+ {
+ name = "Pulsedive - Threat Intelligence";
+ url = "https://pulsedive.com/";
+ }
+ {
+ name = "Rapid7 Open Data";
+ url = "https://opendata.rapid7.com/";
+ }
+ {
+ name = "Scamalytics";
+ url = "https://scamalytics.com/";
+ }
+ {
+ name = "Shodan";
+ url = "https://shodan.io/";
+ }
+ {
+ name = "Squatm3gator - a complete web solution based on the python tool squatm3, designed to enumerate available domains generated modifying the original domain name through different cybersquatting techniques";
+ url = "https://github.com/david3107/squatm3gator";
+ }
+ {
+ name = "TinEye Reverse Image Search";
+ url = "https://tineye.com/";
+ }
+ {
+ name = "ViewDNS.info - Your one source for DNS related tools!";
+ url = "https://viewdns.info/";
+ }
+ {
+ name = "Vigilante.pw ‐ The Breached Database Directory";
+ url = "https://vigilante.pw/";
+ }
+ {
+ name = "VirusTotal";
+ url = "https://www.virustotal.com/gui/";
+ }
+ {
+ name = "Wappalyzer - Find out what websites are built with";
+ url = "https://www.wappalyzer.com/";
+ }
+ {
+ name = "WiGLE: Wireless Network Mapping";
+ url = "https://www.wigle.net/";
+ }
+ {
+ name = "xResolver • Dashboard";
+ url = "https://xresolver.com/index";
+ }
+ {
+ name = "Yandex Images: search for images online or search by image";
+ url = "https://yandex.com/images/";
+ }
+ {
+ name = "ZoomEye - Cyberspace surveying and mapping, network security, vulnerability analysis, dynamic surveying and mapping, Zhong Kui's eye, spatiotemporal surveying and mapping, cyberspace surveying and Mapping - zoomeye ('Zhong Kui's eye') cyberspace search engine";
+ url = "https://www.zoomeye.org/";
+ }
+ {
+ name = "ZorexEye - The Hacker's Search Engine";
+ url = "http://zorexeye.com/";
+ }
+ ];
+ }
+ {
+ name = "Resources";
+ bookmarks = [
+ {
+ name = "Application References";
+ bookmarks = [
+ {
+ name = "Hashcat";
+ bookmarks = [
+ {
+ name = "example_hashes [hashcat wiki]";
+ url = "https://hashcat.net/wiki/doku.php?id=example_hashes";
+ }
+ {
+ name = "mask_attack [hashcat wiki]";
+ url = "https://hashcat.net/wiki/doku.php?id=mask_attack";
+ }
+ {
+ name = "rejection_rule_based_attack [hashcat wiki]";
+ url = "https://hashcat.net/wiki/doku.php?id=rule_based_attack#rules_used_to_reject_plains";
+ }
+ {
+ name = "rule_based_attack [hashcat wiki]";
+ url = "https://hashcat.net/wiki/doku.php?id=rule_based_attack#implemented_compatible_functions";
+ }
+ ];
+ }
+ {
+ name = "Nessus";
+ bookmarks = [
+ {
+ name = "Nessus Report Downloader script";
+ url = "https://raw.githubusercontent.com/eelsivart/nessus-report-downloader/master/nessus6-report-downloader.rb";
+ }
+ {
+ name = "Plugins (Nessus)";
+ url = "https://docs.tenable.com/nessus/Content/Plugins.htm";
+ }
+ {
+ name = "Plugins | Tenable®";
+ url = "https://www.tenable.com/plugins";
+ }
+ {
+ name = "Scan and Policy Templates (Nessus)";
+ url = "https://docs.tenable.com/nessus/Content/ScanAndPolicyTemplates.htm";
+ }
+ {
+ name = "10. Scanning a System — Greenbone Security Manager (GSM) 6 documentation";
+ url = "https://docs.greenbone.net/GSM-Manual/gos-6/en/scanning.html#vulnerabilitymanagement-create-target";
+ }
+ ];
+ }
+ {
+ name = "OpenVAS";
+ bookmarks = [
+ {
+ name = "OpenVAS Reporting: Convert OpenVAS XML report files to reports";
+ url = "https://github.com/TheGroundZero/openvasreporting";
+ }
+ {
+ name = "Scanning a System — Greenbone Security Manager (GSM) 6 documentation";
+ url = "https://docs.greenbone.net/GSM-Manual/gos-6/en/scanning.html";
+ }
+ ];
+ }
+ {
+ name = "Privilege Escalation";
+ bookmarks = [
+ {
+ name = "Linux";
+ bookmarks = [
+ {
+ name = "Checklist - Linux Privilege Escalation - HackTricks";
+ url = "https://book.hacktricks.xyz/linux-unix/linux-privilege-escalation-checklist";
+ }
+ {
+ name = "GitHub - rebootuser/LinEnum: Scripted Local Linux Enumeration & Privilege Escalation Checks";
+ url = "https://github.com/rebootuser/LinEnum";
+ }
+ {
+ name = "GitHub - sleventyeleven/linuxprivchecker: linuxprivchecker.py -- a Linux Privilege Escalation Check Script";
+ url = "https://github.com/sleventyeleven/linuxprivchecker";
+ }
+ {
+ name = "GTFOBins";
+ url = "https://gtfobins.github.io/";
+ }
+ ];
+ }
+ {
+ name = "Windows";
+ bookmarks = [
+ {
+ name = "Checklist - Local Windows Privilege Escalation - HackTricks";
+ url = "https://book.hacktricks.xyz/windows/checklist-windows-privilege-escalation";
+ }
+ {
+ name = "GitHub - 411Hall/JAWS: JAWS - Just Another Windows (Enum) Script";
+ url = "https://github.com/411Hall/JAWS";
+ }
+ {
+ name = "GitHub - GhostPack/Seatbelt: Seatbelt is a C# project that performs a number of security oriented host-survey safety checks relevant from both offensive and defensive security perspectives.";
+ url = "https://github.com/GhostPack/Seatbelt";
+ }
+ {
+ name = "LOLBAS";
+ url = "https://lolbas-project.github.io/#";
+ }
+ ];
+ }
+ {
+ name = "GitHub - carlospolop/privilege-escalation-awesome-scripts-suite: PEASS - Privilege Escalation Awesome Scripts SUITE (with colors)";
+ url = "https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite";
+ }
+ ];
+ }
+ {
+ name = "SQLMap";
+ bookmarks = [
+ {
+ name = "SQLMap - Boundaries";
+ url = "https://github.com/sqlmapproject/sqlmap/blob/master/data/xml/boundaries.xml";
+ }
+ {
+ name = "SQLMap - Enumeration queries";
+ url = "https://github.com/sqlmapproject/sqlmap/blob/master/data/xml/queries.xml";
+ }
+ {
+ name = "SQLMap - Payloads";
+ url = "https://github.com/sqlmapproject/sqlmap/tree/master/data/xml/payloads";
+ }
+ ];
+ }
+ {
+ name = "A Great Vim Cheat Sheet";
+ url = "https://vimsheet.com/";
+ }
+ {
+ name = "GitHub - swisskyrepo/PayloadsAllTheThings: A list of useful payloads and bypass for Web Application Security and Pentest/CTF";
+ url = "https://github.com/swisskyrepo/PayloadsAllTheThings";
+ }
+ {
+ name = "HackTricks - HackTricks";
+ url = "https://book.hacktricks.xyz/";
+ }
+ {
+ name = "John The Ripper Hash Formats | pentestmonkey";
+ url = "http://pentestmonkey.net/cheat-sheet/john-the-ripper-hash-formats";
+ }
+ {
+ name = "NMAP - Default NSE Category";
+ url = "https://nmap.org/nsedoc/categories/default.html";
+ }
+ {
+ name = "PayloadsAllTheThings/Bind Shell Cheatsheet.md at master · swisskyrepo/PayloadsAllTheThings · GitHub";
+ url = "https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Bind%20Shell%20Cheatsheet.md";
+ }
+ {
+ name = "regex101: build, test, and debug regex";
+ url = "https://regex101.com/";
+ }
+ {
+ name = "Regulex:JavaScript Regular Expression Visualizer";
+ url = "https://jex.im/regulex/#!flags=&re=%5E(%5Ba-zA-Z0-9_.-%5D)%2B%40((%5Ba-zA-Z0-9-%5D)%2B.)%2B(%5Ba-zA-Z0-9%5D%7B2%2C4%7D)%2B%24";
+ }
+ {
+ name = "Special Characters in HTML";
+ url = "https://www.degraeve.com/reference/specialcharacters.php";
+ }
+ {
+ name = "SQL Injection Cheat Sheet | pentestmonkey";
+ url = "https://pentestmonkey.net/cheat-sheet/sql-injection/oracle-sql-injection-cheat-sheet";
+ }
+ {
+ name = "Tmux Cheat Sheet & Quick Reference";
+ url = "https://tmuxcheatsheet.com/";
+ }
+ {
+ name = "Upgrading Simple Shells to Fully Interactive TTYs - ropnop blog";
+ url = "https://blog.ropnop.com/upgrading-simple-shells-to-fully-interactive-ttys/";
+ }
+ ];
+ }
+ {
+ name = "Blogs";
+ bookmarks = [
+ {
+ name = "0xdf hacks stuff | CTF solutions, malware analysis, home lab development";
+ url = "https://0xdf.gitlab.io/";
+ }
+ ];
+ }
+ {
+ name = "Books";
+ bookmarks = [
+ {
+ name = "Hacking Multifactor Authentication | Wiley";
+ url = "https://www.wiley.com/en-us/Hacking+Multifactor+Authentication-p-9781119650799";
+ }
+ ];
+ }
+ {
+ name = "Callback Servers";
+ bookmarks = [
+ {
+ name = "GitHub - projectdiscovery/interactsh: An OOB interaction gathering server and client library";
+ url = "https://github.com/projectdiscovery/interactsh";
+ }
+ {
+ name = "Interact.sh | Web Client";
+ url = "https://app.interactsh.com/";
+ }
+ {
+ name = "pingb.in";
+ url = "http://pingb.in/";
+ }
+ {
+ name = "Webhook.site - Test, process and transform emails and HTTP requests";
+ url = "https://webhook.site/";
+ }
+ {
+ name = "XSS Hunter";
+ url = "https://xsshunter.com/";
+ }
+ ];
+ }
+ {
+ name = "Laboratories";
+ bookmarks = [
+ {
+ name = "GitHub - digininja/DVWA: Damn Vulnerable Web Application (DVWA)";
+ url = "https://github.com/digininja/DVWA";
+ }
+ {
+ name = "GitHub - rapid7/metasploitable3: Metasploitable3 is a VM that is built from the ground up with a large amount of security vulnerabilities.";
+ url = "https://github.com/rapid7/metasploitable3";
+ }
+ {
+ name = "Juice Shop - Insecure Web Application for Training | OWASP";
+ url = "https://owasp.org/www-project-juice-shop/";
+ }
+ {
+ name = "Metasploitable 2 Exploitability Guide | Metasploit Documentation";
+ url = "https://docs.rapid7.com/metasploit/metasploitable-2-exploitability-guide/";
+ }
+ ];
+ }
+ {
+ name = "Network";
+ bookmarks = [
+ {
+ name = "\(Cheat Sheet - Common Ports\) - common-ports.pdf";
+ url = "https://packetlife.net/media/library/23/common-ports.pdf";
+ }
+ {
+ name = "Check ALL open ports, scan open ports online free tool";
+ url = "http://ports.my-addr.com/check-all-open-ports-online.php";
+ }
+ {
+ name = "Common Ports";
+ url = "https://web.mit.edu/rhel-doc/4/RH-DOCS/rhel-sg-en-4/ch-ports.html";
+ }
+ {
+ name = "List of HTTP status codes - Wikipedia";
+ url = "https://en.wikipedia.org/wiki/List_of_HTTP_status_codes";
+ }
+ {
+ name = "Subnet Calculator - NetworkCalc";
+ url = "https://networkcalc.com/subnet-calculator";
+ }
+ {
+ name = "Top 1,000 TCP and UDP ports (nmap default)";
+ url = "https://nullsec.us/top-1-000-tcp-and-udp-ports-nmap-default/";
+ }
+ ];
+ }
+ {
+ name = "Steganography";
+ bookmarks = [
+ {
+ name = "4qrcode - QR Code image reader";
+ url = "https://4qrcode.com/scan-qr-code.php";
+ }
+ ];
+ }
+ {
+ name = "Tutorial Websites";
+ bookmarks = [
+ {
+ name = "OverTheWire: Wargames";
+ url = "https://overthewire.org/wargames/";
+ }
+ {
+ name = "UTW – Under the Wire… PowerShell Training for the People";
+ url = "https://underthewire.tech/";
+ }
+ ];
+ }
+ {
+ name = "Wordlists";
+ bookmarks = [
+ {
+ name = "https://raw.githubusercontent.com/DragonJAR/Security-Wordlist/main/LFI-WordList-Linux";
+ url = "https://raw.githubusercontent.com/DragonJAR/Security-Wordlist/main/LFI-WordList-Linux";
+ }
+ {
+ name = "https://raw.githubusercontent.com/DragonJAR/Security-Wordlist/main/LFI-WordList-Windows";
+ url = "https://raw.githubusercontent.com/DragonJAR/Security-Wordlist/main/LFI-WordList-Windows";
+ }
+ ];
+ }
+ {
+ name = "Youtube";
+ bookmarks = [
+ {
+ name = "IppSec - YouTube";
+ url = "https://www.youtube.com/channel/UCa6eh7gCkpPo5XXUDfygQQA";
+ }
+ {
+ name = "LiveOverflow - YouTube";
+ url = "https://www.youtube.com/channel/UClcE-kVhqyiHCcjYwcpfj9w";
+ }
+ {
+ name = "STÖK - YouTube";
+ url = "https://www.youtube.com/channel/UCQN2DsjnYH60SFBIA6IkNwg";
+ }
+ {
+ name = "VbScrub - YouTube";
+ url = "https://www.youtube.com/channel/UCpoyhjwNIWZmsiKNKpsMAQQ";
+ }
+ ];
+ }
+ {
+ name = "[TUT] Scan networks and perform DoS Attack";
+ url = "https://hackforums.net/showthread.php?tid=6068101";
+ }
+ {
+ name = "[Tutorial] Guide to Cracking using STORM or other Cracking Softwares (NOOB Friendly)";
+ url = "https://hackforums.net/showthread.php?tid=5982826";
+ }
+ {
+ name = "AutoRegex: Convert from English to RegEx with Natural Language Processing";
+ url = "https://www.autoregex.xyz/";
+ }
+ {
+ name = "Best hacking books for aspiring hackers - Real life hacking scenarios";
+ url = "https://www.sparcflow.com/best-hacking-books/";
+ }
+ {
+ name = "Chapter 14. iptables firewall";
+ url = "http://linux-training.be/networking/ch14.html#:~:text=The%20filter%20table%20in%20iptables,(routed)%20through%20the%20system.";
+ }
+ {
+ name = "Darknet Markets Tips";
+ url = "https://hackforums.net/showthread.php?tid=5986598";
+ }
+ {
+ name = "Exploiting the xmlrpc.php on all WordPress versions";
+ url = "https://nitesculucian.github.io/2019/07/01/exploiting-the-xmlrpc-php-on-all-wordpress-versions/";
+ }
+ {
+ name = "File Inclusion/Path traversal - HackTricks";
+ url = "https://book.hacktricks.xyz/pentesting-web/file-inclusion#top-25-parameters";
+ }
+ {
+ name = "Get-CIMInstance - PowerShell - SS64.com";
+ url = "https://ss64.com/ps/get-ciminstance.html";
+ }
+ {
+ name = "GitHub - fastfire/deepdarkCTI: Collection of Cyber Threat Intelligence sources from the deep and dark web";
+ url = "https://github.com/fastfire/deepdarkCTI";
+ }
+ {
+ name = "HackTricks: pentesting-web";
+ url = "https://book.hacktricks.xyz/pentesting-web";
+ }
+ {
+ name = "Helpful free tools and resources.";
+ url = "https://hackforums.net/showthread.php?tid=6088637";
+ }
+ {
+ name = "KMimeMagic";
+ url = "https://opensource.apple.com/source/file/file-23/file/magic/magic.mime";
+ }
+ {
+ name = "List of file signatures - Wikipedia";
+ url = "https://en.wikipedia.org/wiki/List_of_file_signatures";
+ }
+ {
+ name = "Maintaining Privacy and Security Online";
+ url = "https://hackforums.net/showthread.php?tid=5377222";
+ }
+ {
+ name = "Metasploit anonymous question";
+ url = "https://hackforums.net/showthread.php?tid=6128538";
+ }
+ {
+ name = "Recon Everything. Bug Bounty Hunting Tip #1- Always read… | by SACHIN GROVER | InfoSec Write-ups";
+ url = "https://infosecwriteups.com/recon-everything-48aafbb8987";
+ }
+ {
+ name = "Secure-Cookie";
+ url = "https://secure-cookie.io/";
+ }
+ {
+ name = "Telegram: Contact @hacker_resources";
+ url = "https://t.me/hacker_resources";
+ }
+ {
+ name = "The Top 60 Rat Open Source Projects";
+ url = "https://awesomeopensource.com/projects/rat";
+ }
+ {
+ name = "Tutorial for simple bulletproof setup";
+ url = "https://hackforums.net/showthread.php?tid=6048982";
+ }
+ {
+ name = "URL-encoding Reference";
+ url = "https://www.eso.org/~ndelmott/url_encode.html";
+ }
+ {
+ name = "Windows Local Privilege Escalation - HackTricks";
+ url = "https://book.hacktricks.xyz/windows/windows-local-privilege-escalation";
+ }
+ ];
+ }
+ {
+ name = "Reverse Shells";
+ bookmarks = [
+ {
+ name = "PayloadsAllTheThings/Reverse Shell Cheatsheet.md at master · swisskyrepo/PayloadsAllTheThings · GitHub";
+ url = "https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Reverse%20Shell%20Cheatsheet.md";
+ }
+ {
+ name = "PentestMonkey - PHP Reverse Shell";
+ url = "https://github.com/pentestmonkey/php-reverse-shell/blob/master/php-reverse-shell.php";
+ }
+ {
+ name = "PentestMonkey - Reverse Shell Cheat Sheet";
+ url = "https://pentestmonkey.net/cheat-sheet/shells/reverse-shell-cheat-sheet";
+ }
+ {
+ name = "Reverse Shell Cheat Sheet";
+ url = "https://highon.coffee/blog/reverse-shell-cheat-sheet/";
+ }
+ {
+ name = "Reverse Shell Online Generator";
+ url = "https://www.revshells.com/";
+ }
+ ];
+ }
+ {
+ name = "Web Shells";
+ bookmarks = [
+ {
+ name = "Interactive PHP webshell - GitHub";
+ url = "https://gist.github.com/mrpapercut/9e4f511e74fdf3796d0abcc4de182b65";
+ }
+ {
+ name = "Simple-Backdoor-One-Liner.php · GitHub";
+ url = "https://gist.github.com/sente/4dbb2b7bdda2647ba80b";
+ }
+ ];
+ }
+ ];
+ }
+]
+
diff --git a/nixos/home-manager/browsers/firefox/default.nix b/nixos/home-manager/browsers/firefox/default.nix
new file mode 100644
index 000000000..1d36572b8
--- /dev/null
+++ b/nixos/home-manager/browsers/firefox/default.nix
@@ -0,0 +1,233 @@
+{ pkgs, home-manager, username, ... }:
+{
+
+ home-manager.users.${username} = { pkgs, ...}: {
+ programs.firefox = {
+ enable = true;
+ # package = pkgs.firefox.override {cfg.enableTridactylNative = true;};
+ package = pkgs.firefox;
+
+ profiles = {
+ "${username}" = {
+ id = 0;
+ name = "${username}";
+ bookmarks = import ../bookmarks.nix;
+ search = {
+ force = true;
+ default = "DuckDuckGo";
+ engines = {
+ "Nix Packages" = {
+ urls = [{
+ template = "https://search.nixos.org/packages";
+ params = [
+ { name = "type"; value = "packages"; }
+ { name = "query"; value = "{searchTerms}"; }
+ ];
+ }];
+ icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg";
+ definedAliases = [ "@np" ];
+ };
+ "NixOS Wiki" = {
+ urls = [{ template = "https://nixos.wiki/index.php?search={searchTerms}"; }];
+ iconUpdateURL = "https://nixos.wiki/favicon.png";
+ updateInterval = 24 * 60 * 60 * 1000;
+ definedAliases = [ "@nw" ];
+ };
+ "Wikipedia (en)".metaData.alias = "@wiki";
+ "Google".metaData.hidden = true;
+ "Amazon.com".metaData.hidden = true;
+ "Bing".metaData.hidden = true;
+ "eBay".metaData.hidden = true;
+ };
+ };
+ settings = {
+ "browser.places.importBookmarksHTML" = true;
+ "general.smoothScroll" = true;
+ # Re-bind ctrl to super (would interfere with tridactyl otherwise)
+ #"ui.key.accelKey" = 91; # Commented otherwise cannot use shortcuts using CTRL
+ # Hide the "sharing indicator", it's especially annoying
+ # with tiling WMs on wayland
+ "privacy.webrtc.legacyGlobalIndicator" = false;
+ # Actual settings
+ "app.shield.optoutstudies.enabled" = false;
+ "app.update.auto" = true;
+ "browser.bookmarks.restore_default_bookmarks" = false;
+ "browser.contentblocking.category" = "strict";
+ "browser.ctrlTab.recentlyUsedOrder" = false;
+ "browser.discovery.enabled" = false;
+ "browser.laterrun.enabled" = false;
+ "browser.newtabpage.activity-stream.asrouter.userprefs.cfr.addons" =
+ false;
+ "browser.newtabpage.activity-stream.asrouter.userprefs.cfr.features" =
+ false;
+ "browser.newtabpage.activity-stream.feeds.snippets" = false;
+ "browser.newtabpage.activity-stream.improvesearch.topSiteSearchShortcuts.havePinned" = "";
+ "browser.newtabpage.activity-stream.improvesearch.topSiteSearchShortcuts.searchEngines" = "";
+ "browser.newtabpage.activity-stream.section.highlights.includePocket" =
+ false;
+ "browser.newtabpage.activity-stream.showSponsored" = false;
+ "browser.newtabpage.activity-stream.showSponsoredTopSites" = false;
+ "browser.newtabpage.pinned" = false;
+ "browser.protections_panel.infoMessage.seen" = true;
+ "browser.quitShortcut.disabled" = true;
+ "browser.shell.checkDefaultBrowser" = false;
+ "browser.ssb.enabled" = true;
+ "browser.toolbars.bookmarks.visibility" = "always";
+ #"browser.urlbar.placeholderName" = "DuckDuckGo";
+ "browser.urlbar.suggest.openpage" = false;
+ "datareporting.policy.dataSubmissionEnable" = false;
+ "datareporting.policy.dataSubmissionPolicyAcceptedVersion" = 2;
+ "dom.security.https_only_mode" = true;
+ "dom.security.https_only_mode_ever_enabled" = true;
+ "extensions.getAddons.showPane" = false;
+ "extensions.htmlaboutaddons.recommendations.enabled" = false;
+ "extensions.pocket.enabled" = false;
+ "identity.fxaccounts.enabled" = false;
+ "privacy.trackingprotection.enabled" = true;
+ "privacy.trackingprotection.socialtracking.enabled" = true;
+ };
+ extraConfig = ''
+ user_pref("toolkit.legacyUserProfileCustomizations.stylesheets", true);
+ user_pref("full-screen-api.ignore-widgets", true);
+ user_pref("media.ffmpeg.vaapi.enabled", true);
+ user_pref("media.rdd-vpx.enabled", true);
+ user_pref("browser.uiCustomization.state", "{\"placements\":{\"widget-overflow-fixed-list\":[],\"unified-extensions-area\":[],\"nav-bar\":[\"back-button\",\"forward-button\",\"stop-reload-button\",\"home-button\",\"customizableui-special-spring1\",\"urlbar-container\",\"customizableui-special-spring2\",\"save-to-pocket-button\",\"downloads-button\",\"fxa-toolbar-menu-button\",
+ \"_f1423c11-a4e2-4709-a0f8-6d6a68c83d08_-browser-action\",
+ \"foxyproxy_eric_h_jung-browser-action\",
+ \"wappalyzer_crunchlabz_com-browser-action\",
+ \"_1ab3d165-d664-4bf2-adb7-fed77f46116f_-browser-action\",
+ \"_60f82f00-9ad5-4de5-b31c-b16a47c51558_-browser-action\",
+ \"wayback_machine_mozilla_org-browser-action\",
+ \"_74145f27-f039-47ce-a470-a662b129930a_-browser-action\",
+ \"7esoorv3@alefvanoon.anonaddy.me-browser-action\",
+ \"_b86e4813-687a-43e6-ab65-0bde4ab75758_-browser-action\",
+ \"_aecec67f-0d10-4fa7-b7c7-609a2db280cf_-browser-action\",
+ \"jid1-mnnxcxisbpnsxq_jetpack-browser-action\",
+ \"ublock0_raymondhill_net-browser-action\",
+ \"unified-extensions-button\"]}}");
+ '';
+ };
+ };
+ # Here the list of all Firefox policies: https://mozilla.github.io/policy-templates/
+ policies = {
+ DisableTelemetry = true;
+ DisableFirefoxStudies = true;
+ EnableTrackingProtection = {
+ Value= true;
+ Locked = true;
+ Cryptomining = true;
+ Fingerprinting = true;
+ };
+ CaptivePortal = false;
+ #NoDefaultBookmarks = false; # This policy must be removed or set to false, otherwise bookmarks cannot be added or removed by Nix
+ OfferToSaveLogins = false;
+ OfferToSaveLoginsDefault = false;
+ PasswordManagerEnabled = false;
+ FirefoxHome = {
+ Search = true;
+ Pocket = false;
+ Snippets = false;
+ TopSites = false;
+ Highlights = false;
+ };
+ UserMessaging = {
+ ExtensionRecommendations = false;
+ SkipOnboarding = true;
+ };
+ DisablePocket = true;
+ DisableFirefoxAccounts = true;
+ DisableAccounts = true;
+ DisableFirefoxScreenshots = true;
+ OverrideFirstRunPage = "";
+ OverridePostUpdatePage = "";
+ DontCheckDefaultBrowser = true;
+ DisplayBookmarksToolbar = "always"; # alternatives: "never" or "newtab"
+ DisplayMenuBar = "default-off"; # alternatives: "always", "never" or "default-on"
+ SearchBar = "unified"; # alternative: "separate"
+ ExtensionSettings = {
+ "*".installation_mode = "blocked";
+ # uBlock Origin:
+ "uBlock0@raymondhill.net" = {
+ install_url = "https://addons.mozilla.org/firefox/downloads/latest/ublock-origin/latest.xpi";
+ installation_mode = "force_installed";
+ };
+ # Cookie Quick Manager
+ "{60f82f00-9ad5-4de5-b31c-b16a47c51558}" = {
+ install_url = "https://addons.mozilla.org/firefox/downloads/latest/cookie-quick-manager/latest.xpi";
+ installation_mode = "force_installed";
+ };
+ # ClearURLs
+ "{74145f27-f039-47ce-a470-a662b129930a}" = {
+ install_url = "https://addons.mozilla.org/firefox/downloads/latest/clearurls/latest.xpi";
+ installation_mode = "force_installed";
+ };
+ # FoxyProxy
+ "foxyproxy@eric.h.jung" = {
+ install_url = "https://addons.mozilla.org/firefox/downloads/latest/foxyproxy-standard/latest.xpi";
+ installation_mode = "force_installed";
+ };
+ # Hack-Tools
+ "{f1423c11-a4e2-4709-a0f8-6d6a68c83d08}" = {
+ install_url = "https://addons.mozilla.org/firefox/downloads/latest/hacktools/latest.xpi";
+ installation_mode = "force_installed";
+ };
+ # HacKontext
+ "{ed26d465-baef-4e1a-b242-6681b024b941}" = {
+ install_url = "https://addons.mozilla.org/firefox/downloads/latest/hackontext/latest.xpi";
+ installation_mode = "force_installed";
+ };
+ # Lib redirect
+ "7esoorv3@alefvanoon.anonaddy.me" = {
+ install_url = "https://addons.mozilla.org/firefox/downloads/latest/libredirect/latest.xpi";
+ installation_mode = "force_installed";
+ };
+ # LocalCDN
+ "{b86e4813-687a-43e6-ab65-0bde4ab75758}" = {
+ install_url = "https://addons.mozilla.org/firefox/downloads/latest/localcdn-fork-of-decentraleyes/latest.xpi";
+ installation_mode = "force_installed";
+ };
+ # NightTab
+ "{47bf427e-c83d-457d-9b3d-3db4118574bd}" = {
+ install_url = "https://addons.mozilla.org/firefox/downloads/latest/nighttab/latest.xpi";
+ installation_mode = "force_installed";
+ };
+ # OWASP Penetration Testing Kit
+ "{1ab3d165-d664-4bf2-adb7-fed77f46116f}" = {
+ install_url = "https://addons.mozilla.org/firefox/downloads/latest/penetration-testing-kit/latest.xpi";
+ installation_mode = "force_installed";
+ };
+ # Privacy Badger
+ "jid1-MnnxcxisBPnSXQ@jetpack" = {
+ install_url = "https://addons.mozilla.org/firefox/downloads/latest/privacy-badger17/latest.xpi";
+ installation_mode = "force_installed";
+ };
+ # TOS; Didn't read
+ "jid0-3GUEt1r69sQNSrca5p8kx9Ezc3U@jetpack" = {
+ install_url = "https://addons.mozilla.org/firefox/downloads/latest/terms-of-service-didnt-read/latest.xpi";
+ installation_mode = "force_installed";
+ };
+ # UA Switcher and Manager
+ "{a6c4a591-f1b2-4f03-b3ff-767e5bedf4e7}" = {
+ install_url = "https://addons.mozilla.org/firefox/downloads/latest/user-agent-string-switcher/latest.xpi";
+ installation_mode = "force_installed";
+ };
+ # Violentmonkey
+ "{aecec67f-0d10-4fa7-b7c7-609a2db280cf}" = {
+ install_url = "https://addons.mozilla.org/firefox/downloads/latest/violentmonkey/latest.xpi";
+ installation_mode = "force_installed";
+ };
+ # Wappalyzer
+ "wappalyzer@crunchlabz.com" = {
+ install_url = "https://addons.mozilla.org/firefox/downloads/latest/wappalyzer/latest.xpi";
+ installation_mode = "force_installed";
+ };
+ # Wayback machine
+ "wayback_machine@mozilla.org" = {
+ install_url = "https://addons.mozilla.org/firefox/downloads/file/4047136/latest.xpi";
+ installation_mode = "force_installed";
+ };
+ };
+ };
+ };
+ };
+}
\ No newline at end of file
diff --git a/nixos/home-manager/default.nix b/nixos/home-manager/default.nix
new file mode 100644
index 000000000..9a15371e5
--- /dev/null
+++ b/nixos/home-manager/default.nix
@@ -0,0 +1,7 @@
+{ ... }:
+{
+ imports = [
+ ./home
+ ./shells
+ ];
+}
diff --git a/nixos/home-manager/desktops/axyl/alacritty.nix b/nixos/home-manager/desktops/axyl/alacritty.nix
new file mode 100644
index 000000000..0a256a1c0
--- /dev/null
+++ b/nixos/home-manager/desktops/axyl/alacritty.nix
@@ -0,0 +1,88 @@
+{
+
+ env = {
+ TERM = "alacritty";
+ };
+
+ window = {
+ dimensions = {
+ columns = 82;
+ lines = 25;
+ };
+ padding = {
+ x = 12;
+ y = 12;
+ };
+ decorations = "full";
+ startup_mode = "Windowed";
+ dynamic_title = true;
+ ## Background opacity
+ opacity = 1.0;
+ ## scrolling
+ history = 10000;
+ multiplier = 3;
+ };
+
+ cursor = {
+ style = {
+ shape = "Block";
+ blinking = "On";
+ };
+ unfocused_hollow = false;
+ };
+
+ ## Live config reload
+ live_config_reload = true;
+
+ #### Colors ####
+ colors = {
+ # Default colors
+ primary = {
+ background = "#1a1b26";
+ foreground = "#a9b1d6";
+ };
+ # Normal colors
+ normal = {
+ black = "#32344a";
+ red = "#f7768e";
+ green = "#9ece6a";
+ yellow = "#e0af68";
+ blue = "#7aa2f7";
+ magenta = "#ad8ee6";
+ cyan = "#449dab";
+ white = "#787c99";
+ };
+ # Bright colors
+ bright = {
+ black = "#444b6a";
+ red = "#ff7a93";
+ green = "#b9f27c";
+ yellow = "#ff9e64";
+ blue = "#7da6ff";
+ magenta = "#bb9af7";
+ cyan = "#0db9d7";
+ white = "#acb0d0";
+ };
+ };
+
+ #### Fonts ####
+ font = {
+ size = 12;
+ normal = {
+ family = "JetBrainsMono NF";
+ style = "Medium";
+ };
+ bold = {
+ family = "JetBrainsMono NF";
+ style = "Bold";
+ };
+ italic = {
+ family = "JetBrainsMono NF";
+ style = "Italic";
+ };
+ bold_italic = {
+ family = "JetBrainsMono NF";
+ style = "Bold Italic";
+ };
+ };
+}
\ No newline at end of file
diff --git a/nixos/home-manager/desktops/axyl/default.nix b/nixos/home-manager/desktops/axyl/default.nix
new file mode 100644
index 000000000..e1813c95a
--- /dev/null
+++ b/nixos/home-manager/desktops/axyl/default.nix
@@ -0,0 +1,127 @@
+{ pkgs, home-manager, username, ... }:
+let
+ fontList = with pkgs; [
+ noto-fonts-emoji
+ dejavu_fonts
+ liberation_ttf
+ source-code-pro
+ inter
+ (nerdfonts.override { fonts = [ "JetBrainsMono" "NerdFontsSymbolsOnly" "Iosevka" ]; })
+ ];
+ bspwm-packages = with pkgs; [
+ alacritty
+ bat
+ bluez
+ bluez-tools
+ brightnessctl
+ btop
+ dunst
+ feh
+ ffcast
+ ffmpegthumbnailer
+ geany
+ glfw-wayland
+ gnome.libgnome-keyring
+ i3lock-color
+ imagemagick
+ jq
+ libwebp
+ lsd
+ maim
+ mlocate
+ mpc-cli
+ ncmpcpp
+ nettools
+ openvpn
+ pamixer
+ papirus-icon-theme
+ pavucontrol
+ physlock
+ playerctl
+ polkit_gnome
+ polybar
+ powerline
+ libsForQt5.qt5.qtgraphicaleffects
+ libsForQt5.qt5.qtquickcontrols2
+ libsForQt5.qt5.qtsvg
+ libsForQt5.qt5.qtwayland
+ ranger
+ rofi
+ scrot
+ sxhkd
+ tdrop
+ ueberzug
+ vim
+ vimPlugins.vim-airline
+ vimPlugins.vim-airline-themes
+ vimPlugins.Vundle-vim
+ webp-pixbuf-loader
+ xclip
+ xdg-user-dirs
+ xdotool
+ xorg.xinit
+ xorg.xkill
+ xorg.xlsclients
+ xorg.xprop
+ xorg.xrandr
+ xorg.xsetroot
+ xorg.xwininfo
+ xwayland
+ zoxide
+ zsh-powerlevel10k
+ ];
+in
+{
+ # ---- System Configuration ----
+ environment.systemPackages = bspwm-packages ++ fontList;
+ services.xserver = {
+ enable = true;
+ windowManager = {
+ bspwm.enable = true;
+ };
+ };
+ services.picom = {
+ enable = true;
+ settings = import ./picom.nix;
+ };
+
+ # ---- Home Configuration ----
+ home-manager.users.${username} = { pkgs, ...}: {
+ programs.alacritty = {
+ enable = true;
+ settings = import ./alacritty.nix;
+ };
+
+ services.dunst = {
+ enable = true;
+ settings = import ./dunst.nix;
+ };
+
+ services.polybar = {
+ enable = true;
+ script = "";
+ };
+
+ services.sxhkd = {
+ enable = true;
+ keybindings = import ./sxhkd.nix;
+ };
+
+ programs.eww.enable = false;
+
+ # It copies "./config/menus/gnome-applications.menu" source file to the nix store, and then symlinks it to the location.
+ xdg.configFile."bspwm/bspwmrc".source = ./bspwmrc;
+ xdg.configFile."bspwm/.fehbg".source = ./.fehbg;
+ xdg.configFile."bspwm/wallpaper.jpg".source = ./wallpaper.jpg;
+ xdg.configFile."bspwm/polybar/colors".source = ./polybar/colors;
+ xdg.configFile."bspwm/polybar/config".source = ./polybar/config;
+ xdg.configFile."bspwm/polybar/decor".source = ./polybar/decor;
+ xdg.configFile."bspwm/polybar/modules".source = ./polybar/modules;
+ xdg.configFile."bspwm/polybar/system".source = ./polybar/system;
+ xdg.configFile."bspwm/polybar/launch.sh".source = ./polybar/launch.sh;
+ xdg.configFile."bspwm/scripts".source = ./scripts;
+ xdg.configFile."bspwm/assets".source = ./assets;
+ xdg.configFile."rofi".source = ./rofi;
+
+ };
+}
diff --git a/nixos/home-manager/desktops/axyl/dunst.nix b/nixos/home-manager/desktops/axyl/dunst.nix
new file mode 100644
index 000000000..6c2906b2f
--- /dev/null
+++ b/nixos/home-manager/desktops/axyl/dunst.nix
@@ -0,0 +1,60 @@
+{
+ global = {
+ font = "JetBrainsMono Nerd Font 10";
+ markup = "full";
+ format = "%s\n%b";
+ sort = "no";
+ indicate_hidden = "yes";
+ alignment = "left";
+ show_age_threshold = 60;
+ word_wrap = "yes";
+ ignore_newline = "no";
+ stack_duplicates = false;
+ hide_duplicate_count = "yes";
+ geometry = "280x50-10+44";
+ shrink = "no";
+ idle_threshold = 120;
+ monitor = 0;
+ follow = "mouse";
+ sticky_history = "yes";
+ history_length = 20;
+ show_indicators = "no";
+ line_height = 4;
+ separator_height = 4;
+ padding = 20;
+ horizontal_padding = 20;
+ separator_color = "auto";
+ startup_notification = true;
+ browser = "x-www-browser -new-tab";
+ always_run_script = true;
+ title = "Dunst";
+ class = "Dunst";
+ icon_position = "left";
+ max_icon_size = 48;
+ frame_width = 2;
+ };
+
+ shortcuts = {
+ close = "ctrl+shift+space";
+ close_all = "ctrl+shift+space";
+ history = "ctrl+grave";
+ context = "ctrl+shift+period";
+ };
+
+ urgency_low = {
+ frame_color = "#7aa2f7";
+ background = "#1a1b26";
+ foreground = "#7aa2f7";
+ timeout = 5;
+ };
+
+ urgency_normal = {
+ frame_color = "#444b6a";
+ foreground = "#a9b1d6";
+ };
+
+ urgency_critical = {
+ frame_color = "#f7768e";
+ foreground = "#f7768e";
+ };
+}
\ No newline at end of file
diff --git a/nixos/home-manager/desktops/axyl/picom.nix b/nixos/home-manager/desktops/axyl/picom.nix
new file mode 100644
index 000000000..54532c8e1
--- /dev/null
+++ b/nixos/home-manager/desktops/axyl/picom.nix
@@ -0,0 +1,386 @@
+{
+ # Enabled client-side shadows on windows. Note desktop windows
+ # (windows with '_NET_WM_WINDOW_TYPE_DESKTOP') never get shadow,
+ # unless explicitly requested using the wintypes option.
+ #
+ # shadow = false
+ shadow =
+ {
+ self = false;
+ # The blur radius for shadows, in pixels. (defaults to 12)
+ radius = 7;
+ # The offset for shadows, in pixels. (defaults to -15)
+ offset =
+ {
+ x = -7;
+ y = -7;
+ };
+ # Specify a list of conditions of windows that should have no shadow.
+ exclude = [
+ "name = 'Notification'"
+ "class_g = 'Conky'"
+ "class_g ?= 'Notify-osd'"
+ "class_g = 'Cairo-clock'"
+ "_GTK_FRAME_EXTENTS@:c"
+ ];
+ };
+
+ #################################
+ # Fading #
+ #################################
+
+
+ # Fade windows in/out when opening/closing and when opacity changes,
+ # unless no-fading-openclose is used.
+ # fading = false
+ fading = true;
+
+ # Opacity change between steps while fading in. (0.01 - 1.0, defaults to 0.028)
+ # fade-in-step = 0.028
+ fade-in-step = 0.03;
+
+ # Opacity change between steps while fading out. (0.01 - 1.0, defaults to 0.03)
+ # fade-out-step = 0.03
+ fade-out-step = 0.03;
+
+ # The time between steps in fade step, in milliseconds. (> 0, defaults to 10)
+ # fade-delta = 10
+
+ # Specify a list of conditions of windows that should not be faded.
+ fade-exclude = [
+ "class_g = 'slop'"
+ ];
+
+ # Do not fade on window open/close.
+ no-fading-openclose = true;
+
+ # Do not fade destroyed ARGB windows with WM frame. Workaround of bugs in Openbox, Fluxbox, etc.
+ # no-fading-destroyed-argb = false
+
+
+ #################################
+ # Transparency / Opacity #
+ #################################
+
+
+ # Opacity of inactive windows. (0.1 - 1.0, defaults to 1.0)
+ # inactive-opacity = 1
+ inactive-opacity = 0.8;
+
+ # Opacity of window titlebars and borders. (0.1 - 1.0, disabled by default)
+ # frame-opacity = 1.0
+ frame-opacity = 0.7;
+
+ # Default opacity for dropdown menus and popup menus. (0.0 - 1.0, defaults to 1.0)
+ # menu-opacity = 1.0
+
+ popup_menu = { opacity = 0.8; };
+ dropdown_menu = { opacity = 0.8; };
+
+ # Let inactive opacity set by -i override the '_NET_WM_OPACITY' values of windows.
+ # inactive-opacity-override = true
+ inactive-opacity-override = false;
+
+ # Default opacity for active windows. (0.0 - 1.0, defaults to 1.0)
+ active-opacity = 1.0;
+
+ # Dim inactive windows. (0.0 - 1.0, defaults to 0.0)
+ # inactive-dim = 0.0
+
+ # Specify a list of conditions of windows that should always be considered focused.
+ # focus-exclude = []
+ focus-exclude = [
+ "class_g = 'Cairo-clock'"
+ "class_g = 'Bar'"
+ "class_g = 'slop'"
+ ];
+
+ # Use fixed inactive dim value, instead of adjusting according to window opacity.
+ # inactive-dim-fixed = 1.0
+
+ # Specify a list of opacity rules, in the format `PERCENT:PATTERN`,
+ # like `50:name *= "Firefox"`. picom-trans is recommended over this.
+ # Note we don't make any guarantee about possible conflicts with other
+ # programs that set '_NET_WM_WINDOW_OPACITY' on frame or client windows.
+ # example:
+ # opacity-rule = [ "80:class_g = 'URxvt'" ];
+ #
+ opacity-rule = [
+ "80:class_g = 'Bar'"
+ "90:class_g = 'slop'"
+ "100:class_g = 'Alacritty'"
+ "100:class_g = 'Polybar'"
+ "100:class_g = 'firefox'"
+ "100:class_g = 'dmenu'"
+ ];
+
+
+ #################################
+ # Background-Blurring #
+ #################################
+
+
+ # Parameters for background blurring, see the *BLUR* section for more information.
+ # blur-method =
+ # blur-size = 12
+ #
+ # blur-deviation = false
+
+ # Blur background of semi-transparent / ARGB windows.
+ # Bad in performance, with driver-dependent behavior.
+ # The name of the switch may change without prior notifications.
+ #
+ # blur-background = false
+
+ # Blur background of windows when the window frame is not opaque.
+ # Implies:
+ # blur-background
+ # Bad in performance, with driver-dependent behavior. The name may change.
+ #
+ # blur-background-frame = false
+
+
+ # Use fixed blur strength rather than adjusting according to window opacity.
+ # blur-background-fixed = false
+
+
+ # Specify the blur convolution kernel, with the following format:
+ # example:
+ # blur-kern = "5,5,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1";
+ #
+ # blur-kern = ''
+ blur-kern = "3x3box";
+
+ # Exclude conditions for background blur.
+ # blur-background-exclude = []
+ blur-background-exclude = [
+ "window_type = 'dock'"
+ "class_g = 'slop'"
+ #"window_type = 'desktop'"
+ "_GTK_FRAME_EXTENTS@:c"
+ ];
+
+ #################################
+ # General Settings #
+ #################################
+
+ # Daemonize process. Fork to background after initialization. Causes issues with certain (badly-written) drivers.
+ # daemon = false
+
+ # Specify the backend to use: `xrender`, `glx`, or `xr_glx_hybrid`.
+ # `xrender` is the default one.
+ #
+
+ # backend = 'glx'
+ backend = "xrender";
+
+ # Enable/disable VSync.
+ # vsync = false
+ vsync = false;
+
+ # Enable remote control via D-Bus. See the *D-BUS API* section below for more details.
+ # dbus = false
+
+ # Try to detect WM windows (a non-override-redirect window with no
+ # child that has 'WM_STATE') and mark them as active.
+ #
+ # mark-wmwin-focused = false
+ mark-wmwin-focused = true;
+
+ # Mark override-redirect windows that doesn't have a child window with 'WM_STATE' focused.
+ # mark-ovredir-focused = false
+ mark-ovredir-focused = true;
+
+ # Try to detect windows with rounded corners and don't consider them
+ # shaped windows. The accuracy is not very high, unfortunately.
+ #
+ # detect-rounded-corners = false
+ detect-rounded-corners = true;
+
+ # Detect '_NET_WM_OPACITY' on client windows, useful for window managers
+ # not passing '_NET_WM_OPACITY' of client windows to frame windows.
+ #
+ # detect-client-opacity = false
+ detect-client-opacity = true;
+
+ # Specify refresh rate of the screen. If not specified or 0, picom will
+ # try detecting this with X RandR extension.
+ #
+ # refresh-rate = 60
+ refresh-rate = 0;
+
+ # Limit picom to repaint at most once every 1 / 'refresh_rate' second to
+ # boost performance. This should not be used with
+ # vsync drm/opengl/opengl-oml
+ # as they essentially does sw-opti's job already,
+ # unless you wish to specify a lower refresh rate than the actual value.
+ #
+ # sw-opti =
+
+ # Use EWMH '_NET_ACTIVE_WINDOW' to determine currently focused window,
+ # rather than listening to 'FocusIn'/'FocusOut' event. Might have more accuracy,
+ # provided that the WM supports it.
+ #
+ # use-ewmh-active-win = false
+
+ # Unredirect all windows if a full-screen opaque window is detected,
+ # to maximize performance for full-screen windows. Known to cause flickering
+ # when redirecting/unredirecting windows.
+ #
+ # unredir-if-possible = false
+
+ # Delay before unredirecting the window, in milliseconds. Defaults to 0.
+ # unredir-if-possible-delay = 0
+
+ # Conditions of windows that shouldn't be considered full-screen for unredirecting screen.
+ # unredir-if-possible-exclude = []
+
+ # Use 'WM_TRANSIENT_FOR' to group windows, and consider windows
+ # in the same group focused at the same time.
+ #
+ # detect-transient = false
+ detect-transient = true;
+
+ # Use 'WM_CLIENT_LEADER' to group windows, and consider windows in the same
+ # group focused at the same time. 'WM_TRANSIENT_FOR' has higher priority if
+ # detect-transient is enabled, too.
+ #
+ # detect-client-leader = false
+ detect-client-leader = true;
+
+ # Resize damaged region by a specific number of pixels.
+ # A positive value enlarges it while a negative one shrinks it.
+ # If the value is positive, those additional pixels will not be actually painted
+ # to screen, only used in blur calculation, and such. (Due to technical limitations,
+ # with use-damage, those pixels will still be incorrectly painted to screen.)
+ # Primarily used to fix the line corruption issues of blur,
+ # in which case you should use the blur radius value here
+ # (e.g. with a 3x3 kernel, you should use `--resize-damage 1`,
+ # with a 5x5 one you use `--resize-damage 2`, and so on).
+ # May or may not work with *--glx-no-stencil*. Shrinking doesn't function correctly.
+ #
+ # resize-damage = 1
+
+ # Specify a list of conditions of windows that should be painted with inverted color.
+ # Resource-hogging, and is not well tested.
+ #
+ # invert-color-include = []
+
+ # GLX backend: Avoid using stencil buffer, useful if you don't have a stencil buffer.
+ # Might cause incorrect opacity when rendering transparent content (but never
+ # practically happened) and may not work with blur-background.
+ # My tests show a 15% performance boost. Recommended.
+ #
+ # glx-no-stencil = false
+
+ # GLX backend: Avoid rebinding pixmap on window damage.
+ # Probably could improve performance on rapid window content changes,
+ # but is known to break things on some drivers (LLVMpipe, xf86-video-intel, etc.).
+ # Recommended if it works.
+ #
+ # glx-no-rebind-pixmap = false
+
+ # Disable the use of damage information.
+ # This cause the whole screen to be redrawn everytime, instead of the part of the screen
+ # has actually changed. Potentially degrades the performance, but might fix some artifacts.
+ # The opposing option is use-damage
+ #
+ # no-use-damage = false
+ use-damage = false;
+
+ # Use X Sync fence to sync clients' draw calls, to make sure all draw
+ # calls are finished before picom starts drawing. Needed on nvidia-drivers
+ # with GLX backend for some users.
+ #
+ # xrender-sync-fence = false
+
+ # GLX backend: Use specified GLSL fragment shader for rendering window contents.
+ # See `compton-default-fshader-win.glsl` and `compton-fake-transparency-fshader-win.glsl`
+ # in the source tree for examples.
+ #
+ # glx-fshader-win = ''
+
+ # Force all windows to be painted with blending. Useful if you
+ # have a glx-fshader-win that could turn opaque pixels transparent.
+ #
+ # force-win-blend = false
+
+ # Do not use EWMH to detect fullscreen windows.
+ # Reverts to checking if a window is fullscreen based only on its size and coordinates.
+ #
+ # no-ewmh-fullscreen = false
+
+ # Dimming bright windows so their brightness doesn't exceed this set value.
+ # Brightness of a window is estimated by averaging all pixels in the window,
+ # so this could comes with a performance hit.
+ # Setting this to 1.0 disables this behaviour. Requires --use-damage to be disabled. (default: 1.0)
+ #
+ # max-brightness = 1.0
+
+ # Make transparent windows clip other windows like non-transparent windows do,
+ # instead of blending on top of them.
+ #
+ # transparent-clipping = false
+
+ # Set the log level. Possible values are:
+ # "trace", "debug", "info", "warn", "error"
+ # in increasing level of importance. Case doesn't matter.
+ # If using the "TRACE" log level, it's better to log into a file
+ # using *--log-file*, since it can generate a huge stream of logs.
+ #
+ # log-level = "debug"
+ log-level = "warn";
+
+ # Set the log file.
+ # If *--log-file* is never specified, logs will be written to stderr.
+ # Otherwise, logs will to written to the given file, though some of the early
+ # logs might still be written to the stderr.
+ # When setting this option from the config file, it is recommended to use an absolute path.
+ #
+ # log-file = '/path/to/your/log/file'
+
+ # Show all X errors (for debugging)
+ # show-all-xerrors = false
+
+ # Write process ID to a file.
+ # write-pid-path = '/path/to/your/log/file'
+
+ # Window type settings
+ #
+ # 'WINDOW_TYPE' is one of the 15 window types defined in EWMH standard:
+ # "unknown", "desktop", "dock", "toolbar", "menu", "utility",
+ # "splash", "dialog", "normal", "dropdown_menu", "popup_menu",
+ # "tooltip", "notification", "combo", and "dnd".
+ #
+ # Following per window-type options are available: ::
+ #
+ # fade, shadow:::
+ # Controls window-type-specific shadow and fade settings.
+ #
+ # opacity:::
+ # Controls default opacity of the window type.
+ #
+ # focus:::
+ # Controls whether the window of this type is to be always considered focused.
+ # (By default, all window types except "normal" and "dialog" has this on.)
+ #
+ # full-shadow:::
+ # Controls whether shadow is drawn under the parts of the window that you
+ # normally won't be able to see. Useful when the window has parts of it
+ # transparent, and you want shadows in those areas.
+ #
+ # redir-ignore:::
+ # Controls whether this type of windows should cause screen to become
+ # redirected again after been unredirected. If you have unredir-if-possible
+ # set, and doesn't want certain window to cause unnecessary screen redirection,
+ # you can set this to `true`.
+ #
+ wintypes =
+ {
+ tooltip = { fade = true; shadow = true; opacity = 0.75; focus = true; full-shadow = false; };
+ dock = { shadow = false; };
+ dnd = { shadow = false; };
+ popup_menu = { opacity = 1.0; };
+ dropdown_menu = { opacity = 1.0; };
+ };
+}
\ No newline at end of file
diff --git a/nixos/home-manager/desktops/axyl/sxhkd.nix b/nixos/home-manager/desktops/axyl/sxhkd.nix
new file mode 100644
index 000000000..38112681d
--- /dev/null
+++ b/nixos/home-manager/desktops/axyl/sxhkd.nix
@@ -0,0 +1,170 @@
+{
+ "super + shift + {r,c}" = "i3-msg {restart,reload}";
+ "super + {s,w}" = "i3-msg {stacking,tabbed}";
+
+ # Show keybindings help
+ "alt + F1" = "KeybindingsHelp";
+
+ # Open Terminal (alacritty)
+ "super + Return" = "OpenApps --terminal";
+
+ # hackthebox
+ "super + k" = "$HOME/.config/rofi/htb/machine_spawn.sh";
+
+ "super + shift + k" = "$HOME/.config/rofi/htb/machine_details.sh";
+
+ "super + shift + i" = "$HOME/.config/rofi/openvpn/vpn.sh";
+
+ # Open floating Terminal
+ "super + alt + Return" = "OpenApps --floating";
+
+ # Menu aplicaciones
+ "super + @space" = "OpenApps --menu";
+
+ # Scratchpad
+ "super + alt + o" = "tdrop -m -w 70% -h 35% -y 0 -x 15% --class scratch alacritty --class=scratch";
+
+ # Power off, Reboot, Log out, Lockscreen, kill an app
+ "ctrl + super + alt + {p,r,q,l,k}" = "{systemctl poweroff, systemctl reboot,bspc quit,lockscreen -d,xkill}";
+
+ # Apps
+ "shift + alt + {b,g,e,p,r,t,w,m,v,k}" = "{OpenApps --browser, \
+ vscodium, \
+ OpenApps --filemanager, \
+ pavucontrol, \
+ OpenApps --ranger, \
+ telegram-desktop, \
+ OpenApps --athena-welcome, \
+ virt-manager, \
+ OpenApps --nvim, \
+ OpenApps --music}";
+
+ # Hide/Show Bar (Polybar and/or eww)
+ "super + {h,u}" = "HideBar {-h,-u}";
+
+ # Change transparency on focused window
+ "ctrl + alt {plus,minus,t}" = "{picom-trans -c -o +3, picom-trans -c -o -1, picom-trans -c -d}";
+
+ # Screenshot Now
+ "Print" = "$HOME/.config/rofi/screenshot/screenshot";
+
+
+ # Reload sxhkd
+ "super + Escape" = "pkill -USR1 -x sxhkd; dunstify -u low -i ~/.config/bspwm/assets/reload.svg 'sxhkd' 'The configuration file has been reloaded successfully!'";
+
+ # Random wallpaper
+ "super + alt + w" = "feh -z --no-fehbg --bg-fill ~/.config/bspwm/walls/";
+
+ #
+ # bspwm hotkeys
+ #
+
+ # Reload BSPWM
+ "super + alt + r" = "bspc wm -r";
+
+ # close and kill
+ "super + {_,shift + }q" = "bspc node -{c,k}";
+
+ ####
+
+
+ # rotate desktop
+ "super + r" = "bspc node @/ --rotate {90,-90}";
+
+ # Circulate the leaves of the tree
+ "super + c" = "bspc node @/ --circulate {backward,forward}";
+
+ # Make split ratios equal
+ "super + equal" = "bspc node @/ --equalize";
+
+ # Make split ratios balanced
+ "super + minus" = "bspc node @/ --balance";
+
+ # alternate between the tiled and monocle layout
+ "super + m" = "bspc desktop -l next";
+
+ # swap the current node and the biggest node
+ "super + g" = "bspc node -s biggest";
+
+ # set the window state
+ "super + {t,shift + t,s,f}" = "bspc node -t {tiled,pseudo_tiled,floating,fullscreen}";
+
+ # set the node flags
+ "ctrl + alt {m,x,s,p,i}" = "bspc node -g {marked,locked,sticky,private,hidden}";
+
+ # Focused desktop window gaps scroll
+ "super + button{4,5}" = "bspc config -d focused window_gap $((`bspc config -d focused window_gap` {-,+} 5 ))";
+
+ # Global window gaps scroll
+ "super + alt + button{4,5}" = "bspc config window_gap $(( $(bspc config window_gap) {-,+} 5 ))";
+
+ # focus the node in the given direction
+ "super + {_,shift + }{Left,Down,Up,Right}" = "bspc node -{f,s} {west,south,north,east}";
+
+ # focus the node for the given path jump
+ "super + {p,b,comma,period}" = "bspc node -f @{parent,brother,first,second}";
+
+ # focus the next/previous node in the current desktop
+ "alt + {_,shift + }Tab" = "bspc node -f {next,prev}.local";
+
+ # focus the next/previous desktop in the current monitor
+ "super + alt + {Left,Right}" = "bspc desktop -f {prev,next}.local";
+
+ # focus the last node/desktop
+ "super + {grave,Tab}" = "bspc {node,desktop} -f last";
+
+ # focus the older or newer node in the focus history
+ "super + {o,i}" = "bspc wm -h off; bspc node {older,newer} -f; bspc wm -h on";
+
+ # focus or send to the given desktop
+ "super + {_,shift + }{1-9,0}" = "bspc {desktop -f,node -d} '^{1-9,10}'";
+
+ #
+ # preselect
+ #
+
+ # preselect the direction
+ "super + ctrl + {Left,Down,Up,Right}" = "bspc node -p {west,south,north,east}";
+
+ # preselect the ratio
+ "super + ctrl + {1-9}" = "bspc node -o 0.{1-9}";
+
+ # cancel the preselection for the focused node
+ "super + ctrl + space" = "bspc node -p cancel";
+
+ # cancel the preselection for the focused desktop
+ "super + ctrl + shift + space" = "bspc query -N -d | xargs -I id -n 1 bspc node id -p cancel";
+
+ #
+ # move/resize
+ #
+
+ # expand a window by moving one of its side outward
+ "super + alt + {h,j,k,l}" = "bspc node -z {left -10 0,bottom 0 10,top 0 -10,right 10 0}";
+
+ # contract a window by moving one of its side inward
+ "super + alt + shift + {h,j,k,l}" = "bspc node -z {right -10 0,top 0 10,bottom 0 -10,left 10 0}";
+
+ # move a floating window
+ "alt + shift {Left,Down,Up,Right}" = "bspc node -v {-10 0,0 10,0 -10,10 0}";
+
+ # Manage brightness
+ "XF86MonBrightness{Up,Down}" = "sh Brightness {up,down}";
+
+ # Volume control
+ "XF86Audio{RaiseVolume,LowerVolume,Mute}" = "Volume{ --inc, --dec, --toggle}";
+
+ # Music Control
+ "XF86Audio{Next,Prev,Play,Stop}" = "MediaControl {--next,--previous,--toggle,--stop}";
+
+
+ ### Second Monitor
+
+ # Send window to the second monitor
+ "super + alt + shift + {Left,Right}" = "bspc node -m {prev,next} --follow";
+
+
+ ## workspace list
+ "ctrl + shift + w" = "workspace_list";
+
+}
\ No newline at end of file
diff --git a/nixos/home-manager/desktops/bspwm-critical/default.nix b/nixos/home-manager/desktops/bspwm-critical/default.nix
new file mode 100644
index 000000000..3c6839460
--- /dev/null
+++ b/nixos/home-manager/desktops/bspwm-critical/default.nix
@@ -0,0 +1,110 @@
+{ pkgs, home-manager, username, ... }:
+let
+ fontList = with pkgs; [
+ (nerdfonts.override { fonts = [ "JetBrainsMono" "NerdFontsSymbolsOnly" ]; })
+ ];
+ bspwm-packages = with pkgs; [
+ alacritty
+ bat
+ bluez
+ bluez-tools
+ brightnessctl
+ btop
+ dunst
+ feh
+ ffcast
+ ffmpegthumbnailer
+ geany
+ glfw-wayland
+ gnome.libgnome-keyring
+ i3lock-color
+ imagemagick
+ jq
+ libwebp
+ lsd
+ maim
+ mlocate
+ mpc-cli
+ ncmpcpp
+ nettools
+ openvpn
+ pamixer
+ papirus-icon-theme
+ pavucontrol
+ physlock
+ playerctl
+ polkit_gnome
+ polybar
+ powerline
+ libsForQt5.qt5.qtgraphicaleffects
+ libsForQt5.qt5.qtquickcontrols2
+ libsForQt5.qt5.qtsvg
+ libsForQt5.qt5.qtwayland
+ ranger
+ rofi
+ scrot
+ sxhkd
+ tdrop
+ ueberzug
+ vim
+ vimPlugins.vim-airline
+ vimPlugins.vim-airline-themes
+ vimPlugins.Vundle-vim
+ webp-pixbuf-loader
+ xclip
+ xdg-user-dirs
+ xdotool
+ xorg.xinit
+ xorg.xkill
+ xorg.xlsclients
+ xorg.xprop
+ xorg.xrandr
+ xorg.xsetroot
+ xorg.xwininfo
+ xwayland
+ zoxide
+ zsh-powerlevel10k
+ ];
+in
+{
+ # ---- System Configuration ----
+ programs.zsh.ohMyZsh.enable = true;
+ security.polkit.enable = true;
+ services = {
+ mpd.enable = true;
+ picom.enable = true;
+ xserver = {
+ enable = true;
+ windowManager = {
+ bspwm.enable = true;
+ };
+ };
+ };
+ environment.pathsToLink = [
+ "/share/backgrounds" # TODO: https://github.com/NixOS/nixpkgs/issues/47173
+ ];
+ environment.systemPackages = bspwm-packages ++ fontList;
+
+ # ---- Home Configuration ----
+ home-manager.users.${username} = { pkgs, ...}: {
+
+ programs.eww.enable = true;
+
+ # It copies "./config/menus/gnome-applications.menu" source file to the nix store, and then symlinks it to the location.
+ xdg.configFile."bspwm".source = ./config/bspwm;
+ xdg.configFile."btop".source = ./config/btop;
+ xdg.configFile."mpd".source = ./config/mpd;
+ xdg.configFile."ncmpcpp".source = ./config/ncmpcpp;
+ xdg.configFile."ranger".source = ./config/ranger;
+ xdg.configFile."rofi".source = ./config/rofi;
+ home.file.".local/bin/colorscript".source = ./local/bin/colorscript;
+ home.file.".local/bin/sysfetch".source = ./local/bin/sysfetch;
+ xdg.dataFile."applications/nvim.desktop".source = ./local/share/applications/nvim.desktop;
+ xdg.dataFile."applications/ranger.desktop".source = ./local/share/applications/ranger.desktop;
+ xdg.dataFile."applications/zfetch.desktop".source = ./local/share/applications/zfetch.desktop;
+ xdg.dataFile."asciiart".source = ./local/share/asciiart;
+ xdg.dataFile."fonts".source = ./local/share/fonts;
+ home.file.".p10k.zsh".source = ./p10k.zsh;
+
+ };
+}
\ No newline at end of file
diff --git a/nixos/home-manager/desktops/bspwm/alacritty/default.nix b/nixos/home-manager/desktops/bspwm/alacritty/default.nix
new file mode 100644
index 000000000..2dcff804c
--- /dev/null
+++ b/nixos/home-manager/desktops/bspwm/alacritty/default.nix
@@ -0,0 +1,90 @@
+{
+
+ window = {
+ dimensions = {
+ columns = 140;
+ lines = 38;
+ };
+ padding = {
+ x = 10;
+ y = 10;
+ };
+ decorations = "none";
+ startup_mode = "Windowed";
+ dynamic_title = true;
+ ## Background opacity
+ opacity = 0.67;
+ ## scrolling
+ history = 10000;
+ multiplier = 3;
+ };
+
+ cursor = {
+ style = {
+ shape = "Block";
+ blinking = "On";
+ };
+ unfocused_hollow = false;
+ };
+
+ ## Live config reload
+ live_config_reload = true;
+
+ draw_bold_text_with_bright_colors = true;
+
+ #### Colors ####
+ colors = {
+ # Default colors
+ primary = {
+ background = "#000000";
+ foreground = "#c5c8c6";
+ };
+ cursor = {
+ text = "#1d1f21";
+ cursor = "#c5c8c6";
+ };
+ # Normal colors
+ normal = {
+ black = "#1d1f21";
+ red = "#cc6666";
+ green = "#b5bd68";
+ yellow = "#f0c674";
+ blue = "#81a2be";
+ magenta = "#b294bb";
+ cyan = "#8abeb7";
+ white = "#c5c8c6";
+ };
+ # Bright colors
+ bright = {
+ black = "#969896";
+ red = "#de935f";
+ green = "#282a2e";
+ yellow = "#373b41";
+ blue = "#b4b7b4";
+ magenta = "#e0e0e0";
+ cyan = "#a3685a";
+ white = "#ffffff";
+ };
+ };
+
+ #### Fonts ####
+ font = {
+ size = 12;
+ normal = {
+ family = "FiraCode NF";
+ style = "Medium";
+ };
+ bold = {
+ family = "FiraCode NF";
+ style = "Bold";
+ };
+ italic = {
+ family = "FiraCode NF";
+ style = "Italic";
+ };
+ bold_italic = {
+ family = "FiraCode NF";
+ style = "Bold Italic";
+ };
+ };
+}
\ No newline at end of file
diff --git a/nixos/home-manager/desktops/bspwm/default.nix b/nixos/home-manager/desktops/bspwm/default.nix
new file mode 100644
index 000000000..ce85f005c
--- /dev/null
+++ b/nixos/home-manager/desktops/bspwm/default.nix
@@ -0,0 +1,62 @@
+{ pkgs, home-manager, username, ... }:
+let
+ fontList = with pkgs; [
+ (nerdfonts.override { fonts = [ "JetBrainsMono" "NerdFontsSymbolsOnly" "FiraCode" "Hack" ]; })
+ ];
+ bspwm-packages = with pkgs; [
+ pfetch
+ feh
+ sxiv
+ picom-next
+ bspwm
+ sxhkd
+ polybar
+ rofi
+ pipes
+ ranger
+ pavucontrol
+ maim
+ killall
+ mumble
+ xclip
+ ffmpeg
+ mpv
+ gimp
+ lxappearance
+ ];
+in
+{
+ # ---- System Configuration ----
+ services = {
+ mpd.enable = true;
+ picom.enable = true;
+ xserver = {
+ enable = true;
+ windowManager = {
+ bspwm.enable = true;
+ };
+ };
+ };
+ environment.pathsToLink = [
+ "/share/backgrounds" # TODO: https://github.com/NixOS/nixpkgs/issues/47173
+ ];
+ environment.systemPackages = bspwm-packages ++ fontList;
+
+ # ---- Home Configuration ----
+ home-manager.users.${username} = { pkgs, ...}: {
+ programs.alacritty = {
+ enable = true;
+ settings = import ./alacritty;
+ };
+
+ # It copies "./config/menus/gnome-applications.menu" source file to the nix store, and then symlinks it to the location.
+ #xdg.configFile."alacritty".source = ./alacritty;
+ xdg.configFile."bspwm".source = ./bspwm;
+ xdg.configFile."picom".source = ./picom;
+ xdg.configFile."polybar".source = ./polybar;
+ xdg.configFile."ranger".source = ./ranger;
+ xdg.configFile."rofi".source = ./rofi;
+ xdg.configFile."sxhkd".source = ./sxhkd;
+
+ };
+}
\ No newline at end of file
diff --git a/nixos/home-manager/desktops/cinnamon/2.json b/nixos/home-manager/desktops/cinnamon/2.json
new file mode 100644
index 000000000..76d53bf36
--- /dev/null
+++ b/nixos/home-manager/desktops/cinnamon/2.json
@@ -0,0 +1,360 @@
+{
+ "layout": {
+ "type": "layout",
+ "pages": [
+ "generalPage",
+ "panelPage",
+ "thumbnailsPage",
+ "contextMenuPage"
+ ],
+ "generalPage": {
+ "type": "page",
+ "title": "General",
+ "sections": [
+ "generalSection",
+ "hotKeysSection"
+ ]
+ },
+ "panelPage": {
+ "type": "page",
+ "title": "Panel",
+ "sections": [
+ "appButtonsSection"
+ ]
+ },
+ "thumbnailsPage": {
+ "type": "page",
+ "title": "Thumbnails",
+ "sections": [
+ "thumbnailsSection",
+ "hoverPeekSection"
+ ]
+ },
+ "contextMenuPage": {
+ "type": "page",
+ "title": "Context Menu",
+ "sections": [
+ "contextMenuSection"
+ ]
+ },
+ "generalSection": {
+ "type": "section",
+ "title": "Behavior",
+ "keys": [
+ "group-apps",
+ "scroll-behavior",
+ "left-click-action",
+ "middle-click-action",
+ "show-all-workspaces"
+ ]
+ },
+ "appButtonsSection": {
+ "type": "section",
+ "title": "Application Buttons",
+ "keys": [
+ "title-display",
+ "launcher-animation-effect",
+ "number-display",
+ "pinned-apps",
+ "enable-app-button-dragging"
+ ]
+ },
+ "hotKeysSection": {
+ "type": "section",
+ "title": "Hot Keys",
+ "keys": [
+ "cycleMenusHotkey",
+ "show-apps-order-hotkey",
+ "show-apps-order-timeout",
+ "super-num-hotkeys"
+ ]
+ },
+ "thumbnailsSection": {
+ "type": "section",
+ "title": "Thumbnails",
+ "keys": [
+ "thumbnail-scroll-behavior",
+ "show-thumbnails",
+ "animate-thumbnails",
+ "vertical-thumbnails",
+ "sort-thumbnails",
+ "highlight-last-focused-thumbnail",
+ "onclick-thumbnails",
+ "thumbnail-timeout",
+ "thumbnail-size"
+ ]
+ },
+ "hoverPeekSection": {
+ "type": "section",
+ "title": "Hover Peek",
+ "keys": [
+ "enable-hover-peek",
+ "hover-peek-time-in",
+ "hover-peek-time-out",
+ "hover-peek-opacity"
+ ]
+ },
+ "contextMenuSection": {
+ "type": "section",
+ "title": "",
+ "keys": [
+ "show-recent",
+ "autostart-menu-item",
+ "monitor-move-all-windows"
+ ]
+ }
+ },
+ "number-display": {
+ "type": "checkbox",
+ "default": true,
+ "description": "Show window count numbers",
+ "value": true
+ },
+ "title-display": {
+ "type": "combobox",
+ "default": 1,
+ "description": "Button label",
+ "options": {
+ "None": 1,
+ "Application name": 2,
+ "Window title": 3,
+ "Window title (only for the focused window)": 4
+ },
+ "value": 1
+ },
+ "scroll-behavior": {
+ "type": "combobox",
+ "default": 1,
+ "description": "Mouse wheel scroll action",
+ "options": {
+ "None": 1,
+ "Cycle apps": 2,
+ "Cycle windows": 3
+ },
+ "value": 1
+ },
+ "left-click-action": {
+ "type": "combobox",
+ "default": 2,
+ "description": "Left click action",
+ "options": {
+ "None": 1,
+ "Toggle activation of last focused window": 2,
+ "Cycle windows": 3
+ },
+ "value": 2
+ },
+ "middle-click-action": {
+ "type": "combobox",
+ "default": 3,
+ "description": "Middle click action",
+ "options": {
+ "None": 1,
+ "Launch new app instance": 2,
+ "Close last focused window in group": 3
+ },
+ "value": 3
+ },
+ "pinned-apps": {
+ "type": "generic",
+ "default": [
+ "nemo.desktop",
+ "firefox.desktop"
+ ],
+ "value": [
+ "nemo.desktop",
+ "firefox.desktop",
+ "cyberchef.desktop",
+ "org.athenaos.CyberHub.desktop",
+ "shell.desktop",
+ "powershell.desktop",
+ "payloadsallthethings.desktop",
+ "seclists.desktop"
+ ]
+ },
+ "group-apps": {
+ "type": "checkbox",
+ "default": true,
+ "description": "Group windows by application",
+ "value": true
+ },
+ "show-all-workspaces": {
+ "type": "checkbox",
+ "default": false,
+ "description": "Show windows from all workspaces",
+ "value": false
+ },
+ "enable-app-button-dragging": {
+ "type": "checkbox",
+ "default": true,
+ "description": "Enable app button dragging",
+ "value": true
+ },
+ "launcher-animation-effect": {
+ "type": "combobox",
+ "default": 3,
+ "description": "Launcher animation",
+ "options": {
+ "None": 1,
+ "Fade": 2,
+ "Scale": 3
+ },
+ "value": 3
+ },
+ "cycleMenusHotkey": {
+ "type": "keybinding",
+ "default": "",
+ "description": "Global hotkey for cycling through thumbnail menus",
+ "value": ""
+ },
+ "show-apps-order-hotkey": {
+ "type": "keybinding",
+ "default": "grave",
+ "description": "Global hotkey to show the order of apps",
+ "value": "grave"
+ },
+ "show-apps-order-timeout": {
+ "type": "spinbutton",
+ "default": 2500,
+ "min": 100,
+ "max": 10000,
+ "step": 10,
+ "units": "milliseconds",
+ "description": "Duration of the apps order display on hotkey press",
+ "value": 2500
+ },
+ "super-num-hotkeys": {
+ "type": "checkbox",
+ "default": true,
+ "description": "Enable Super+ shortcut to switch/open apps",
+ "value": true
+ },
+ "thumbnail-timeout": {
+ "dependency": "!onclick-thumbnails",
+ "type": "combobox",
+ "default": 250,
+ "description": "Delay before showing thumbnails",
+ "options": {
+ "50 ms": 50,
+ "250 ms": 250,
+ "500 ms": 500
+ },
+ "value": 250
+ },
+ "thumbnail-size": {
+ "type": "combobox",
+ "default": 6,
+ "description": "Thumbnail size",
+ "options": {
+ "Small": 3,
+ "Medium": 6,
+ "Large": 9,
+ "Largest": 12
+ },
+ "value": 6
+ },
+ "thumbnail-scroll-behavior": {
+ "type": "checkbox",
+ "default": false,
+ "description": "Cycle windows on mouse wheel scroll",
+ "value": false
+ },
+ "show-thumbnails": {
+ "type": "checkbox",
+ "default": true,
+ "description": "Show thumbnails",
+ "value": true
+ },
+ "animate-thumbnails": {
+ "type": "checkbox",
+ "default": false,
+ "description": "Animate thumbnails",
+ "value": false
+ },
+ "vertical-thumbnails": {
+ "type": "checkbox",
+ "default": false,
+ "description": "Enable vertical thumbnails",
+ "value": false
+ },
+ "sort-thumbnails": {
+ "type": "checkbox",
+ "default": false,
+ "description": "Sort thumbnails according to the last focused windows",
+ "value": false
+ },
+ "highlight-last-focused-thumbnail": {
+ "type": "checkbox",
+ "default": true,
+ "description": "Highlight the thumbnail of the last focused window",
+ "value": true
+ },
+ "onclick-thumbnails": {
+ "type": "checkbox",
+ "default": false,
+ "description": "Click to show thumbnails",
+ "value": false
+ },
+ "show-recent": {
+ "type": "checkbox",
+ "default": true,
+ "description": "Show recent items",
+ "value": true
+ },
+ "autostart-menu-item": {
+ "type": "checkbox",
+ "default": false,
+ "description": "Show autostart option",
+ "value": false
+ },
+ "monitor-move-all-windows": {
+ "type": "checkbox",
+ "default": true,
+ "description": "Apply the monitor move option to all windows",
+ "tooltip": "When clicking \"Move to monitor\" in the context menu, this option will move all of an app's windows instead of just the last focused window from the app.",
+ "value": true
+ },
+ "enable-hover-peek": {
+ "type": "checkbox",
+ "default": true,
+ "description": "Show the window when hovering its thumbnail",
+ "value": true
+ },
+ "hover-peek-time-in": {
+ "dependency": "enable-hover-peek",
+ "type": "combobox",
+ "default": 300,
+ "description": "Window fade-in time",
+ "options": {
+ "150 ms": 150,
+ "300 ms": 300,
+ "450 ms": 450
+ },
+ "value": 300
+ },
+ "hover-peek-time-out": {
+ "dependency": "enable-hover-peek",
+ "type": "combobox",
+ "default": 0,
+ "description": "Window fade-out time",
+ "options": {
+ "None": 0,
+ "150 ms": 150,
+ "300 ms": 300,
+ "450 ms": 450
+ },
+ "value": 0
+ },
+ "hover-peek-opacity": {
+ "dependency": "enable-hover-peek",
+ "type": "spinbutton",
+ "default": 100,
+ "min": 0,
+ "max": 100,
+ "step": 1,
+ "units": "percent",
+ "description": "Window opacity",
+ "value": 100
+ },
+ "__md5__": "6f73ea938aeb5481595a809eb6cbe8e3"
+}
\ No newline at end of file
diff --git a/nixos/home-manager/desktops/cinnamon/config/menus/applications-merged/cinnamon-applications.menu b/nixos/home-manager/desktops/cinnamon/config/menus/applications-merged/cinnamon-applications.menu
new file mode 100644
index 000000000..83f75e0bd
--- /dev/null
+++ b/nixos/home-manager/desktops/cinnamon/config/menus/applications-merged/cinnamon-applications.menu
@@ -0,0 +1,28 @@
+
+
+
+
+ Applications
+ cinnamon-menu-applications.directory
+
+
+
+
+
+
+
+
+
+ Blue Team
+ 00-blue-team.directory
+ ../blue-applications.menu
+
+
+
+ Red Team
+ 00-red-team.directory
+ ../red-applications.menu
+
+
+
diff --git a/nixos/home-manager/desktops/cinnamon/default.nix b/nixos/home-manager/desktops/cinnamon/default.nix
new file mode 100644
index 000000000..f0a8dc7ef
--- /dev/null
+++ b/nixos/home-manager/desktops/cinnamon/default.nix
@@ -0,0 +1,71 @@
+{ pkgs, home-manager, username, terminal, theme-components, ... }:
+let
+ cinnamon-packages = with pkgs; [
+ ffmpeg
+ gnome.gnome-screenshot
+ xdg-user-dirs
+ xdotool
+ xorg.xdpyinfo
+ xorg.xwininfo
+ ];
+ fontList = with pkgs; [
+ (nerdfonts.override { fonts = [ "JetBrainsMono" "NerdFontsSymbolsOnly" ]; })
+ ];
+ gtkTheme = "${theme-components.gtk-theme}";
+ gtkIconTheme = "${theme-components.icon-theme}";
+ gtkCursorTheme = "${theme-components.cursor-theme}";
+ backgroundTheme = "${theme-components.background}";
+in
+{
+ # ---- System Configuration ----
+ services = {
+ cinnamon.apps.enable = true;
+ xserver = {
+ enable = true;
+ desktopManager = {
+ cinnamon.enable = true;
+ };
+ };
+ };
+ environment.pathsToLink = [
+ "/share/backgrounds" # TODO: https://github.com/NixOS/nixpkgs/issues/47173
+ ];
+ environment.systemPackages = cinnamon-packages;
+
+ # ---- Home Configuration ----
+ home-manager.users.${username} = { pkgs, ...}: {
+ home.packages = fontList;
+
+ dconf.settings = {
+ "org/cinnamon/desktop/background" = {
+ "picture-uri" = "file:///run/current-system/sw/share/backgrounds/athena/"+backgroundTheme;
+ };
+ "org/cinnamon/desktop/background" = {
+ "picture-options" = "stretched";
+ };
+ "org/cinnamon/desktop/interface" = {
+ "gtk-theme" = gtkTheme;
+ };
+ "org/cinnamon/desktop/wm/preferences" = {
+ "theme" = gtkTheme;
+ };
+ "org/cinnamon/desktop/interface" = {
+ "icon-theme" = gtkIconTheme;
+ };
+ "org/cinnamon/desktop/interface" = {
+ "cursor-theme" = gtkCursorTheme;
+ };
+ };
+
+ # It copies "./config/menus/gnome-applications.menu" source file to the nix store, and then symlinks it to the location.
+ xdg.configFile."menus/applications-merged/cinnamon-applications.menu".source = ./config/menus/applications-merged/cinnamon-applications.menu;
+ xdg.configFile."cinnamon/spices/grouped-window-list@cinnamon.org/2.json".source = ./2.json;
+
+ dconf.settings = {
+ "org/cinnamon" = {
+ enabled-applets = [ "panel1:left:0:menu@cinnamon.org:0" "panel1:left:1:separator@cinnamon.org:1" "panel1:left:2:grouped-window-list@cinnamon.org:2" "panel1:right:0:systray@cinnamon.org:3" "panel1:right:1:xapp-status@cinnamon.org:4" "panel1:right:2:notifications@cinnamon.org:5" "panel1:right:3:printers@cinnamon.org:6" "panel1:right:4:removable-drives@cinnamon.org:7" "panel1:right:5:keyboard@cinnamon.org:8" "panel1:right:6:favorites@cinnamon.org:9" "panel1:right:7:network@cinnamon.org:10" "panel1:right:8:sound@cinnamon.org:11" "panel1:right:9:power@cinnamon.org:12" "panel1:right:10:calendar@cinnamon.org:13" "panel1:right:11:cornerbar@cinnamon.org:14" ];
+ next-applet-id = 15;
+ };
+ };
+ };
+}
\ No newline at end of file
diff --git a/nixos/home-manager/desktops/gnome/config/menus/applications-merged/gnome-applications.menu b/nixos/home-manager/desktops/gnome/config/menus/applications-merged/gnome-applications.menu
new file mode 100644
index 000000000..bffdc7a55
--- /dev/null
+++ b/nixos/home-manager/desktops/gnome/config/menus/applications-merged/gnome-applications.menu
@@ -0,0 +1,24 @@
+
+
+
+ Applications
+ /etc/xdg/menus/gnome-applications.menu
+ X-GNOME-Menu-Applications.directory
+
+
+
+
+
+ Blue Team
+ 00-blue-team.directory
+ ../blue-applications.menu
+
+
+
+ Red Team
+ 00-red-team.directory
+ ../red-applications.menu
+
+
+
diff --git a/nixos/home-manager/desktops/gnome/default.nix b/nixos/home-manager/desktops/gnome/default.nix
new file mode 100644
index 000000000..4f3004a56
--- /dev/null
+++ b/nixos/home-manager/desktops/gnome/default.nix
@@ -0,0 +1,280 @@
+{ pkgs, home-manager, username, terminal, theme-components, ... }:
+let
+ gnomeExtensionsList = with pkgs.gnomeExtensions; [
+ appindicator
+ arcmenu
+ dash-to-dock
+ desktop-icons-ng-ding
+ fly-pie
+ hide-activities-button
+ pop-shell
+ top-bar-organizer
+ vitals
+ window-title-is-back
+ ];
+
+ gnomeshellTheme = "${theme-components.gtk-theme}";
+ backgroundTheme = "${theme-components.background}";
+
+ fontList = with pkgs; [
+ (nerdfonts.override { fonts = [ "JetBrainsMono" "NerdFontsSymbolsOnly" ]; })
+ ];
+in
+{
+ # ---- System Configuration ----
+ services.xserver = {
+ enable = true;
+ desktopManager.gnome.enable=true;
+ };
+
+ # Adding this because probably the pathsToLink lines to "share" folder https://github.com/NixOS/nixpkgs/blob/nixos-23.11/nixos/modules/services/x11/desktop-managers/gnome.nix#L369-L371 will be removed because "shared" directory is too broad to link. So, below we link only the needed subdirectories of "share" dir
+ environment.pathsToLink = [
+ "/share/backgrounds" # TODO: https://github.com/NixOS/nixpkgs/issues/47173
+ ];
+
+ services.udev.packages = with pkgs; [ gnome.gnome-settings-daemon ];
+
+ programs.dconf.enable = true;
+
+ services.gnome = {
+ evolution-data-server.enable = true;
+ gnome-keyring.enable = true;
+ };
+
+ gtk.iconCache.enable = true;
+
+ environment.systemPackages = with pkgs; [ gnome.eog gnome.gnome-tweaks gnome.gnome-screenshot ];
+
+ environment.gnome.excludePackages = (with pkgs; [
+ gnome-photos
+ gnome-tour
+ ]) ++ (with pkgs.gnome; [
+ gnome-music
+ epiphany
+ geary
+ evince
+ gnome-characters
+ totem
+ tali
+ iagno
+ hitori
+ atomix
+ ]);
+
+ # ---- Home Configuration ----
+
+ home-manager.users.${username} = { pkgs, ...}: {
+ home.packages = gnomeExtensionsList ++ fontList;
+
+ dconf.settings = {
+ "org/gnome/desktop/background" = {
+ "picture-uri" = "file:///run/current-system/sw/share/backgrounds/athena/"+backgroundTheme;
+ };
+ "org/gnome/desktop/background" = {
+ "picture-uri-dark" = "file:///run/current-system/sw/share/backgrounds/athena/"+backgroundTheme;
+ };
+ "org/gnome/desktop/background" = {
+ "picture-options" = "stretched";
+ };
+ "org/gnome/shell/extensions/user-theme" = {
+ "name" = gnomeshellTheme;
+ };
+ };
+
+ # It copies "./config/menus/gnome-applications.menu" source file to the nix store, and then symlinks it to the location.
+ xdg.configFile."menus/applications-merged/gnome-applications.menu".source = ./config/menus/applications-merged/gnome-applications.menu;
+
+ dconf.settings = {
+ "org/gnome/shell".disable-user-extensions = false;
+ "org/gnome/shell".enabled-extensions = (map (extension: extension.extensionUuid) gnomeExtensionsList)
+ ++
+ [
+ "appindicatorsupport@rgcjonas.gmail.com"
+ "arcmenu@arcmenu.com"
+ "dash-to-dock@micxgx.gmail.com"
+ "ding@rastersoft.com"
+ "flypie@schneegans.github.com"
+ "Hide_Activities@shay.shayel.org"
+ "pop-shell@system76.com"
+ "top-bar-organizer@julian.gse.jsts.xyz"
+ "Vitals@CoreCoding.com"
+ "user-theme@gnome-shell-extensions.gcampax.github.com"
+ "window-title-is-back@fthx"
+ ];
+
+ "org/gnome/shell".disabled-extensions = [
+ "workspace-indicator@gnome-shell-extensions.gcampax.github.com"
+ "places-menu@gnome-shell-extensions.gcampax.github.com"
+ "apps-menu@gnome-shell-extensions.gcampax.github.com"
+ ];
+
+ "org/gnome/shell".favorite-apps = [ "kali-mimikatz.desktop" "kali-powersploit.desktop" "seclists.desktop" "payloadsallthethings.desktop" "shell.desktop" "powershell.desktop" "cyberchef.desktop" "fuzzdb.desktop" "securitywordlist.desktop" "autowordlists.desktop" ];
+
+ # /desktop/applications/terminal
+ "org/gnome/desktop/applications/terminal" = {
+ exec = "${terminal}";
+ };
+
+ # /desktop/interface
+ "org/gnome/desktop/interface" = {
+ document-font-name = "JetBrainsMono Nerd Font Mono 11";
+ enable-hot-corners = false;
+ font-antialiasing = "grayscale";
+ font-hinting = "slight";
+ monospace-font-name = "JetBrainsMono Nerd Font Mono 11";
+ font-name = "JetBrainsMono Nerd Font Mono 11";
+ };
+
+ # /desktop/wm/keybindings
+ "org/gnome/desktop/wm/keybindings" = {
+ show-desktop = ["D"];
+ toggle-message-tray = "disabled";
+ close = ["w"];
+ maximize = "disabled";
+ minimize = "disabled";
+ move-to-monitor-down = "disabled";
+ move-to-monitor-left = "disabled";
+ move-to-monitor-right = "disabled";
+ move-to-monitor-up = "disabled";
+ move-to-workspace-down = "disabled";
+ move-to-workspace-up = "disabled";
+ move-to-corner-nw = "disabled";
+ move-to-corner-ne = "disabled";
+ move-to-corner-sw = "disabled";
+ move-to-corner-se = "disabled";
+ move-to-side-n = "disabled";
+ move-to-side-s = "disabled";
+ move-to-side-e = "disabled";
+ move-to-side-w = "disabled";
+ move-to-center = "disabled";
+ toggle-maximized = "disabled";
+ unmaximize = "disabled";
+ };
+
+ # /desktop/wm/preferences
+ "org/gnome/desktop/wm/preferences" = {
+ action-middle-click-titlebar = "none";
+ button-layout = "appmenu:minimize,maximize,close";
+ num-workspaces = 6;
+ resize-with-right-button = true;
+ titlebar-font = "JetBrains Mono Bold 11";
+ workspace-names = ["🕵️" "📖" "🍒" "🎸" "🎮" "🐝"];
+ };
+
+ # Keybindings
+ "org/gnome/settings-daemon/plugins/media-keys" = {
+ custom-keybindings = [
+ "/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/"
+ "/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1/"
+ ];
+ home = ["E"];
+ };
+
+ "org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0" = {
+ binding = "L";
+ command = "dm-tool lock";
+ name = "Lock Screen";
+ };
+
+ "org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1" = {
+ binding = "T";
+ command = "kitty";
+ name = "Terminal";
+ };
+
+ "org/gnome/mutter" = {
+ dynamic-workspaces = false;
+ };
+
+ # Configure Extensions
+ "org/gnome/shell/extensions/Logo-menu" = {
+ menu-button-icon-click-type = 2;
+ menu-button-icon-image = 6;
+ menu-button-icon-size = 25;
+ show-power-options = false;
+ };
+
+ "org/gnome/shell/extensions/arcmenu" = {
+ arc-menu-icon=69;
+ dash-to-panel-standalone = false;
+ directory-shortcuts-list = [["Home" "user-home-symbolic" "ArcMenu_Home"] ["Documents" ". GThemedIcon folder-documents-symbolic folder-symbolic folder-documents folder" "ArcMenu_Documents"] ["Downloads" ". GThemedIcon folder-download-symbolic folder-symbolic folder-download folder" "ArcMenu_Downloads"] ["Music" ". GThemedIcon folder-music-symbolic folder-symbolic folder-music folder" "ArcMenu_Music"] ["Pictures" ". GThemedIcon folder-pictures-symbolic folder-symbolic folder-pictures folder" "ArcMenu_Pictures"] ["Videos" ". GThemedIcon folder-videos-symbolic folder-symbolic folder-videos folder" "ArcMenu_Videos"]];
+ menu-background-color = "rgba(48,48,49,0.98)";
+ menu-border-color = "rgb(60,60,60)";
+ menu-button-appearance = "Icon";
+ menu-foreground-color = "rgb(223,223,223)";
+ menu-item-active-bg-color = "rgb(25,98,163)";
+ menu-item-active-fg-color = "rgb(255,255,255)";
+ menu-item-hover-bg-color = "rgb(21,83,158)";
+ menu-item-hover-fg-color = "rgb(255,255,255)";
+ menu-layout = "Whisker";
+ menu-separator-color = "rgba(255,255,255,0.1)";
+ multi-monitor = false;
+ #pop-folders-data = { "Library Home" = "Library Home"; "Utilities" = "Utilities"; };
+ prefs-visible-page = 0;
+ recently-installed-apps = ["alacarte-made.desktop" "ettercap.desktop" "guymager.desktop" "autopsy.desktop" "jshell-java11-openjdk.desktop" "jconsole-java11-openjdk.desktop" "minicom.desktop" "org.codeberg.dnkl.footclient.desktop" "nm-connection-editor.desktop" "org.codeberg.dnkl.foot.desktop" "org.codeberg.dnkl.foot-server.desktop" "linguist.desktop" "yad-icon-browser.desktop" "org.kde.klipper.desktop" "yad-settings.desktop" "assistant.desktop" "qdbusviewer.desktop" "designer.desktop" "org.kde.kuserfeedback-console.desktop" "jshell-java17-openjdk.desktop" "jconsole-java17-openjdk.desktop" "kali-assetfinder.desktop" "kali-dcfldd.desktop" "kali-ewfacquire.desktop" "kali-ssdeep.desktop" "kali-xplico-start.desktop" "kali-truecrack.desktop" "kali-xplico-stop.desktop" "kali-grokevt-builddb.desktop" "kali-pasco.desktop" "kali-clamav.desktop" "kali-dc3dd.desktop" "kali-regripper.desktop" "kali-apktool.desktop" "kali-nipper.desktop" "kali-bytecode-viewer.desktop" "kali-rkhunter.desktop" "kali-grokevt-addlog.desktop" "kali-ext3grep.desktop" "kali-rifiuti.desktop" "kali-sentrypeer.desktop" "kali-vinetto.desktop" "kali-unhide.desktop" "kali-fcrackzip.desktop" "kali-ghidra.desktop" "kali-galleta.desktop" "kali-pev.desktop" "kali-grokevt-ripdll.desktop" "kali-reglookup.desktop" "kali-extundelete.desktop" "kali-javasnoop.desktop" "kali-hb-honeypot.desktop" "kali-jadx-gui.desktop" "kali-grokevt-parselog.desktop" "kali-grokevt-findlogs.desktop" "kali-safecopy.desktop" "kali-ddrescue.desktop" "kali-witnessme.desktop" "kali-missidentify.desktop" "kali-affcat.desktop" "kali-readpst.desktop" "kali-osrframework.desktop" "kali-chkrootkit.desktop" "kali-recoverjpeg.desktop" "kali-mdb-sql.desktop" "kali-myrescue.desktop" "thunar-settings.desktop" "thunar.desktop" "kdesystemsettings.desktop" "org.kde.discover.desktop"];
+ show-category-sub-menus = true;
+ };
+
+ "org/gnome/shell/extensions/dash-to-dock" = {
+ apply-custom-theme = true;
+ autohide-in-fullscreen = false;
+ background-opacity = 0.9;
+ custom-theme-shrink = true;
+ dash-max-icon-size = 48;
+ dock-position = "BOTTOM";
+ height-fraction = 0.9;
+ intellihide = true;
+ intellihide-mode = "FOCUS_APPLICATION_WINDOWS";
+ multi-monitor = true;
+ preferred-monitor = -2;
+ preferred-monitor-by-connector = "Virtual-1";
+ preview-size-scale = 0.2;
+ require-pressure-to-show = false;
+ show-trash = false;
+ transparency-mode = "FIXED";
+ };
+
+ "org/gnome/shell/extensions/ding" = {
+ check-x11wayland = true;
+ };
+
+ "org/gnome/shell/extensions/pop-shell" = {
+ show-skip-taskbar = false;
+ };
+
+ "org/gnome/shell/extensions/top-bar-organizer" = {
+ center-box-order = ["Workspace Indicator" "media-player" "Space Bar" "media-player-controls"];
+ left-box-order = ["LogoMenu" "ArcMenu" "menuButton" "appMenu" "Notifications" "places-menu" "apps-menu" "dateMenu" "activities"];
+ right-box-order = ["dash-button" "power-menu" "battery-bar" "vitalsMenu" "pop-shell" "screenRecording" "screenSharing" "dwellClick" "a11y" "keyboard" "quickSettings"];
+ };
+
+ "org/gnome/shell/extensions/window-title-is-back" = {
+ colored-icon = true;
+ show-title = false;
+ };
+
+ "org/gnome/shell/extensions/flypie" = {
+ active-stack-child = "menu-editor-page";
+ center-background-image = "";
+ center-background-image-hover = "";
+ center-icon-crop = 1.0;
+ center-icon-crop-hover = 1.0;
+ center-icon-scale = 0.55000000000000004;
+ center-size = 109.0;
+ child-background-image = "";
+ child-background-image-hover = "";
+ child-color-mode = "fixed";
+ child-color-mode-hover = "auto";
+ child-icon-crop = 1.0;
+ child-icon-crop-hover = 1.0;
+ child-offset = 106.0;
+ child-size = 63.0;
+ global-scale = 1.6000000000000001;
+ grandchild-background-image = "";
+ grandchild-background-image-hover = "";
+ menu-configuration = "[{\"name\":\"Red Team Menu\",\"icon\":\"/run/current-system/sw/share/icons/hicolor/scalable/categories/redteam.svg\",\"shortcut\":\"space\",\"centered\":false,\"id\":0,\"children\":[{\"name\":\"VSCodium\",\"icon\":\"/run/current-system/sw/share/icons/hicolor/scalable/apps/vscode.svg\",\"type\":\"Command\",\"data\":{\"command\":\"codium\"},\"angle\":-1},{\"name\":\"Terminal\",\"icon\":\"/run/current-system/sw/share/icons/hicolor/scalable/apps/terminal.svg\",\"type\":\"Command\",\"data\":{\"command\":\"${terminal}\"},\"angle\":0},{\"name\":\"Firefox\",\"icon\":\"/run/current-system/sw/share/icons/hicolor/scalable/apps/firefox-logo.svg\",\"type\":\"Command\",\"data\":{\"command\":\"firefox\"},\"angle\":-1},{\"name\":\"Information Gathering\",\"icon\":\"/run/current-system/sw/share/icons/hicolor/scalable/categories/athena-info-gathering-trans.svg\",\"type\":\"CustomMenu\",\"children\":[{\"name\":\"dmitry\",\"icon\":\"/run/current-system/sw/share/icons/hicolor/scalable/apps/kali-dmitry.svg\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"nix-shell -p dmitry --command 'dmitry; return'\\\"\"},\"angle\":-1},{\"name\":\"Nmap\",\"icon\":\"/run/current-system/sw/share/icons/hicolor/scalable/apps/kali-nmap.svg\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"nix-shell -p nmap --command 'nmap -h; return'\\\"\"},\"angle\":-1},{\"name\":\"spiderfoot\",\"icon\":\"/run/current-system/sw/share/icons/hicolor/scalable/apps/kali-spiderfoot.svg\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"nix-shell -p spiderfoot --command 'spiderfoot --help; return'\\\"\"},\"angle\":-1},{\"name\":\"TheHarvester\",\"icon\":\"/run/current-system/sw/share/icons/hicolor/scalable/apps/kali-theharvester.svg\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"nix-shell -p theharvester --command 'theharvester -h; return'\\\"\"},\"angle\":-1},{\"name\":\"enum4linux\",\"icon\":\"/run/current-system/sw/share/icons/hicolor/scalable/apps/kali-enum4linux.svg\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"nix-shell -p enum4linux --command 'enum4linux -h; return'\\\"\"},\"angle\":-1},{\"name\":\"wafw00f\",\"icon\":\"/run/current-system/sw/share/icons/hicolor/scalable/apps/kali-wafw00f.svg\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"nix-shell -p wafw00f --command 'wafw00f -h; return'\\\"\"},\"angle\":-1},{\"name\":\"fierce\",\"icon\":\"/run/current-system/sw/share/icons/hicolor/scalable/apps/kali-fierce.svg\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"nix-shell -p fierce --command 'fierce -h; return'\\\"\"},\"angle\":-1}],\"angle\":-1,\"data\":{}},{\"name\":\"Vulnerability Assessment\",\"icon\":\"/run/current-system/sw/share/icons/hicolor/scalable/categories/athena-vuln-assessment-trans.svg\",\"type\":\"CustomMenu\",\"children\":[{\"name\":\"legion\",\"icon\":\"/run/current-system/sw/share/icons/hicolor/scalable/apps/kali-legion.svg\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"nix-shell -p legion --command 'pkexec legion; return'\\\"\"},\"angle\":-1},{\"name\":\"nikto\",\"icon\":\"/run/current-system/sw/share/icons/hicolor/scalable/apps/kali-nikto.svg\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"nix-shell -p nikto --command 'nikto -Help; return'\\\"\"},\"angle\":-1},{\"name\":\"Unix Privesc Check\",\"icon\":\"/run/current-system/sw/share/icons/hicolor/scalable/apps/kali-unix-privesc-check.svg\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"nix-shell -p unix-privesc-check --command 'unix-privesc-check -h; return'\\\"\"},\"angle\":-1}],\"angle\":-1,\"data\":{}},{\"name\":\"Web Application Analysis\",\"icon\":\"/run/current-system/sw/share/icons/hicolor/scalable/categories/athena-web-application-trans.svg\",\"type\":\"CustomMenu\",\"children\":[{\"name\":\"WPScan\",\"icon\":\"/run/current-system/sw/share/icons/hicolor/scalable/apps/kali-wpscan.svg\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"nix-shell -p wpscan --command 'wpscan -h; return'\\\"\"},\"angle\":-1},{\"name\":\"Burpsuite\",\"icon\":\"/run/current-system/sw/share/icons/hicolor/scalable/apps/kali-burpsuite.svg\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"nix-shell -p burpsuite --command 'nohup burpsuite >/dev/null 2>&1; return'\\\"\"},\"angle\":-1},{\"name\":\"dirb\",\"icon\":\"/run/current-system/sw/share/icons/hicolor/scalable/apps/kali-dirb.svg\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"nix-shell -p dirb --command 'dirb; return'\\\"\"},\"angle\":-1},{\"name\":\"dirbuster\",\"icon\":\"/run/current-system/sw/share/icons/hicolor/scalable/apps/kali-dirbuster.svg\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"nix-shell -p dirbuster --command 'nohup dirbuster; return'\\\"\"},\"angle\":-1},{\"name\":\"ffuf\",\"icon\":\"/run/current-system/sw/share/icons/hicolor/scalable/apps/kali-ffuf.svg\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"nix-shell -p ffuf --command 'ffuf -h; return'\\\"\"},\"angle\":-1},{\"name\":\"Wfuzz\",\"icon\":\"/run/current-system/sw/share/icons/hicolor/scalable/apps/kali-wfuzz.svg\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"nix-shell -p wfuzz --command 'wfuzz --help; return'\\\"\"},\"angle\":-1},{\"name\":\"SQLMap\",\"icon\":\"/run/current-system/sw/share/icons/hicolor/scalable/apps/kali-sqlmap.svg\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"nix-shell -p sqlmap --command 'sqlmap -hh; return'\\\"\"},\"angle\":-1}],\"angle\":-1,\"data\":{}},{\"name\":\"Password Attacks\",\"icon\":\"/run/current-system/sw/share/icons/hicolor/scalable/categories/athena-password-attacks-trans.svg\",\"type\":\"CustomMenu\",\"children\":[{\"name\":\"John\",\"icon\":\"/run/current-system/sw/share/icons/hicolor/scalable/apps/kali-john.svg\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"nix-shell -p john --command 'john; return'\\\"\"},\"angle\":-1},{\"name\":\"Hashcat\",\"icon\":\"/run/current-system/sw/share/icons/hicolor/scalable/apps/kali-hashcat.svg\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"nix-shell -p hashcat --command 'hashcat -h; return'\\\"\"},\"angle\":-1},{\"name\":\"Hydra\",\"icon\":\"/run/current-system/sw/share/icons/hicolor/scalable/apps/kali-hydra.svg\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"nix-shell -p hydra --command 'hydra -h; return'\\\"\"},\"angle\":-1},{\"name\":\"CeWL\",\"icon\":\"/run/current-system/sw/share/icons/hicolor/scalable/apps/kali-cewl.svg\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"nix-shell -p cewl --command 'cewl -h; return'\\\"\"},\"angle\":-1},{\"name\":\"Crunch\",\"icon\":\"/run/current-system/sw/share/icons/hicolor/scalable/apps/kali-crunch.svg\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"nix-shell -p crunch --command 'crunch; return'\\\"\"},\"angle\":-1},{\"name\":\"RSMangler\",\"icon\":\"/run/current-system/sw/share/icons/hicolor/scalable/apps/kali-rsmangler.svg\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"nix-shell -p rsmangler --command 'rsmangler -h; return'\\\"\"},\"angle\":-1},{\"name\":\"Medusa\",\"icon\":\"/run/current-system/sw/share/icons/hicolor/scalable/apps/kali-medusa.svg\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"nix-shell -p medusa --command 'medusa; return'\\\"\"},\"angle\":-1}],\"angle\":-1,\"data\":{}},{\"name\":\"Sniffing\",\"icon\":\"/run/current-system/sw/share/icons/hicolor/scalable/categories/athena-sniffing-spoofing-trans.svg\",\"type\":\"CustomMenu\",\"children\":[{\"name\":\"MITM Proxy\",\"icon\":\"/run/current-system/sw/share/icons/hicolor/scalable/apps/kali-mitmproxy.svg\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"nix-shell -p mitmproxy --command 'mitmproxy -h; return'\\\"\"},\"angle\":-1},{\"name\":\"Responder\",\"icon\":\"/run/current-system/sw/share/icons/hicolor/scalable/apps/kali-responder.svg\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"nix-shell -p responder --command 'responder -h; return'\\\"\"},\"angle\":-1},{\"name\":\"Wireshark\",\"icon\":\"/run/current-system/sw/share/icons/hicolor/scalable/apps/kali-wireshark.svg\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"nix-shell -p wireshark --command 'nohup wireshark >/dev/null 2>&1; return'\\\"\"},\"angle\":-1}],\"angle\":-1,\"data\":{}},{\"name\":\"Wireless Attacks\",\"icon\":\"/run/current-system/sw/share/icons/hicolor/scalable/categories/athena-wireless-attacks-trans.svg\",\"type\":\"CustomMenu\",\"children\":[{\"name\":\"Aircrack-ng\",\"icon\":\"/run/current-system/sw/share/icons/hicolor/scalable/apps/kali-aircrack-ng.svg\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"nix-shell -p aircrack-ng --command 'aircrack-ng --help; return'\\\"\"},\"angle\":-1},{\"name\":\"Kismet\",\"icon\":\"/run/current-system/sw/share/icons/hicolor/scalable/apps/kali-kismet.svg\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"nix-shell -p kismet --command 'kismet -h; return'\\\"\"},\"angle\":-1},{\"name\":\"Reaver\",\"icon\":\"/run/current-system/sw/share/icons/hicolor/scalable/apps/kali-reaver.svg\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"nix-shell -p reaver --command 'reaver; return'\\\"\"},\"angle\":-1},{\"name\":\"WiFite\",\"icon\":\"/run/current-system/sw/share/icons/hicolor/scalable/apps/kali-wifite.svg\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"nix-shell -p wifite --command 'wifite -h; return'\\\"\"},\"angle\":-1},{\"name\":\"Fern WiFi Cracker\",\"icon\":\"/run/current-system/sw/share/icons/hicolor/scalable/apps/kali-fern-wifi-cracker.svg\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"nix-shell -p fern-wifi-cracker --command 'nohup sudo fern-wifi-cracker >/dev/null 2>&1; return'\\\"\"},\"angle\":-1},{\"name\":\"spooftooph\",\"icon\":\"/run/current-system/sw/share/icons/hicolor/scalable/apps/kali-spooftooph.svg\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"nix-shell -p spooftooph --command 'spooftooph -h; return'\\\"\"},\"angle\":-1}],\"angle\":-1,\"data\":{}},{\"name\":\"Reverse Engineering\",\"icon\":\"/run/current-system/sw/share/icons/hicolor/scalable/categories/athena-reverse-engineering-trans.svg\",\"type\":\"CustomMenu\",\"children\":[{\"name\":\"NASM\",\"icon\":\"/run/current-system/sw/share/icons/hicolor/scalable/apps/kali-metasploit-framework.svg\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"nix-shell -p nasm --command 'nasm -h; return'\\\"\"},\"angle\":-1},{\"name\":\"radare2\",\"icon\":\"/run/current-system/sw/share/icons/hicolor/scalable/apps/kali-radare2.svg\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"nix-shell -p radare2 --command 'r2 -hh; return'\\\"\"},\"angle\":-1},{\"name\":\"Ghidra\",\"icon\":\"/run/current-system/sw/share/icons/hicolor/scalable/apps/kali-ghidra.svg\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"nix-shell -p ghidra --command 'nohup ghidra >/dev/null 2>&1; return'\\\"\"},\"angle\":-1},{\"name\":\"EDB Debugger\",\"icon\":\"/run/current-system/sw/share/icons/hicolor/scalable/apps/kali-edb-debugger.svg\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"nix-shell -p edb --command 'nohup edb >/dev/null 2>&1; return'\\\"\"},\"angle\":-1}],\"angle\":-1,\"data\":{}},{\"name\":\"Exploitation\",\"icon\":\"/run/current-system/sw/share/icons/hicolor/scalable/categories/athena-exploitation-tools-trans.svg\",\"type\":\"CustomMenu\",\"children\":[{\"name\":\"Searchsploit\",\"icon\":\"/run/current-system/sw/share/icons/hicolor/scalable/apps/kali-exploitdb.svg\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"nix-shell -p exploitdb --command 'searchsploit -h; return'\\\"\"},\"angle\":-1},{\"name\":\"Metasploit\",\"icon\":\"/run/current-system/sw/share/icons/hicolor/scalable/apps/kali-metasploit-framework.svg\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"nix-shell -p metasploit --command 'msfconsole -h; return'\\\"\"},\"angle\":-1},{\"name\":\"SET\",\"icon\":\"/run/current-system/sw/share/icons/hicolor/scalable/apps/kali-set.svg\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"nix-shell -p social-engineer-toolkit --command 'sudo setoolkit; return'\\\"\"},\"angle\":-1}],\"angle\":-1,\"data\":{}},{\"name\":\"Post Exploitation\",\"icon\":\"/run/current-system/sw/share/icons/hicolor/scalable/categories/athena-maintaining-access-trans.svg\",\"type\":\"CustomMenu\",\"children\":[{\"name\":\"Powersploit\",\"icon\":\"/run/current-system/sw/share/icons/hicolor/scalable/apps/kali-powersploit.svg\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"if test -d /run/current-system/sw/share/windows/powersploit;then cd /run/current-system/sw/share/windows/powersploit;$SHELL;else echo \\\\\\\"Powersploit is not installed. I'm retrieving it for you...\\\\\\\";sudo pacman -S powersploit;cd /run/current-system/sw/share/windows/powersploit;$SHELL;fi;\\\"\"},\"angle\":-1},{\"name\":\"Mimikatz\",\"icon\":\"/run/current-system/sw/share/icons/hicolor/scalable/apps/kali-mimikatz.svg\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"if test -d /run/current-system/sw/share/windows/mimikatz;then cd /run/current-system/sw/share/windows/mimikatz;$SHELL;else echo \\\\\\\"Mimikatz is not installed. I'm retrieving it for you...\\\\\\\";sudo pacman -S mimikatz;cd /run/current-system/sw/share/windows/mimikatz;$SHELL;fi;\\\"\"},\"angle\":-1},{\"name\":\"Evil WinRM\",\"icon\":\"/run/current-system/sw/share/icons/hicolor/scalable/apps/kali-evil-winrm.svg\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"nix-shell -p evil-winrm --command 'evil-winrm -h; return'\\\"\"},\"angle\":-1},{\"name\":\"ProxyChains\",\"icon\":\"/run/current-system/sw/share/icons/hicolor/scalable/apps/kali-proxychains.svg\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"nix-shell -p proxychains-ng --command 'proxychains4; return'\\\"\"},\"angle\":-1},{\"name\":\"Weevely\",\"icon\":\"/run/current-system/sw/share/icons/hicolor/scalable/apps/kali-weevely.svg\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"nix-shell -p weevely --command 'weevely -h; return'\\\"\"},\"angle\":-1}],\"angle\":-1,\"data\":{}}],\"type\":\"CustomMenu\",\"data\":{},\"touchButton\":false,\"superRMB\":false},{\"name\":\"PWNage Menu\",\"icon\":\"/run/current-system/sw/share/icons/hicolor/scalable/categories/social.svg\",\"type\":\"CustomMenu\",\"children\":[{\"name\":\"Discurity\",\"icon\":\"/run/current-system/sw/share/pixmaps/discord-logo-icon-transparent.png\",\"type\":\"CustomMenu\",\"children\":[{\"name\":\"ArmCord\",\"icon\":\"/run/current-system/sw/share/pixmaps/discord-app.png\",\"type\":\"Command\",\"data\":{\"command\":\"armcord\"},\"angle\":0},{\"name\":\"CybeeSec\",\"icon\":\"/run/current-system/sw/share/pixmaps/cybee_logo.png\",\"type\":\"Uri\",\"data\":{\"uri\":\"https://discord.gg/AHXqyJHhGc\"},\"angle\":-1},{\"name\":\"Hack The Box\",\"icon\":\"/run/current-system/sw/share/pixmaps/htb.png\",\"type\":\"Uri\",\"data\":{\"uri\":\"https://discord.gg/hackthebox\"},\"angle\":-1},{\"name\":\"PWNX\",\"icon\":\"/run/current-system/sw/share/pixmaps/pwnx.png\",\"type\":\"Uri\",\"data\":{\"uri\":\"https://discord.gg/nXakaZdvwm\"},\"angle\":-1},{\"name\":\"Root Me\",\"icon\":\"/run/current-system/sw/share/pixmaps/rootme.png\",\"type\":\"Uri\",\"data\":{\"uri\":\"https://discord.gg/rootme\"},\"angle\":-1},{\"name\":\"TryHackMe\",\"icon\":\"/run/current-system/sw/share/pixmaps/tryhackme-blue.png\",\"type\":\"Uri\",\"data\":{\"uri\":\"https://discord.gg/bmN49cwrn6\"},\"angle\":-1},{\"name\":\"Offensive Security\",\"icon\":\"/run/current-system/sw/share/pixmaps/offsec-red.png\",\"type\":\"Uri\",\"data\":{\"uri\":\"https://discord.gg/2DRcAhH7Vn\"},\"angle\":-1},{\"name\":\"Security Cert\",\"icon\":\"/run/current-system/sw/share/pixmaps/securitycert.png\",\"type\":\"Uri\",\"data\":{\"uri\":\"https://discord.gg/U3GccWKvzM\"},\"angle\":-1}],\"angle\":-1,\"data\":{}},{\"name\":\"Hack The Box\",\"icon\":\"/run/current-system/sw/share/pixmaps/htb.png\",\"type\":\"CustomMenu\",\"children\":[{\"name\":\"Submit Flag\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/htb-flag.png\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"htb-toolkit -f;$SHELL\\\"\"},\"angle\":0},{\"name\":\"Starting Point Machines\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/startingpoint.svg\",\"type\":\"CustomMenu\",\"children\":[{\"name\":\"Tier 0\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/Tier-0.svg\",\"type\":\"CustomMenu\",\"children\":[],\"angle\":-1,\"data\":{}},{\"name\":\"Tier 1\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/Tier-1.svg\",\"type\":\"CustomMenu\",\"children\":[],\"angle\":-1,\"data\":{}},{\"name\":\"Tier 2\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/Tier-2.svg\",\"type\":\"CustomMenu\",\"children\":[],\"angle\":-1,\"data\":{}}],\"angle\":-1,\"data\":{}},{\"name\":\"Available Machines\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/htb-machines.png\",\"type\":\"CustomMenu\",\"children\":[],\"angle\":-1,\"data\":{}},{\"name\":\"Stop Active Machine\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/htb-stop.png\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"htb-toolkit -s;$SHELL\\\"\"},\"angle\":-1},{\"name\":\"Reset Active Machine\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/htb-reset.png\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"htb-toolkit -r;$SHELL\\\"\"},\"angle\":-1},{\"name\":\"Website\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/htb-website.png\",\"type\":\"Uri\",\"data\":{\"uri\":\"https://app.hackthebox.com\"},\"angle\":-1},{\"name\":\"VPN Connection\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/vpn-icon.png\",\"type\":\"CustomMenu\",\"children\":[{\"name\":\"Disconnect OVPN\",\"icon\":\"network-offline-symbolic\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"echo \\\\\\\"Disconnecting all VPN sessions...\\\\\\\";sudo killall openvpn;htb-toolkit -s;prompt-reset\\\"\"},\"angle\":-1},{\"name\":\"Starting Point\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/startingpoint.svg\",\"type\":\"CustomMenu\",\"children\":[{\"name\":\"EU Starting Point Free 1\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/flags/eu-flag.png\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"htb-toolkit -v EUSPFree1;$SHELL\\\"\"},\"angle\":-1},{\"name\":\"US Starting Point Free 1\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/flags/us-flag.png\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"htb-toolkit -v USSPFree1;$SHELL\\\"\"},\"angle\":-1},{\"name\":\"US Starting Point VIP 1\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/flags/us-flag.png\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"htb-toolkit -v USSPVIP1;$SHELL\\\"\"},\"angle\":-1},{\"name\":\"EU Starting Point VIP 1\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/flags/eu-flag.png\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"htb-toolkit -v EUSPVIP1;$SHELL\\\"\"},\"angle\":-1}],\"angle\":-1,\"data\":{}},{\"name\":\"Machines\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/machines.svg\",\"type\":\"CustomMenu\",\"children\":[{\"name\":\"Free\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/vpnfree.svg\",\"type\":\"CustomMenu\",\"children\":[{\"name\":\"EU Free 1\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/flags/eu-flag.png\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"htb-toolkit -v EUFree1;$SHELL\\\"\"},\"angle\":-1},{\"name\":\"EU Free 2\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/flags/eu-flag.png\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"htb-toolkit -v EUFree2;$SHELL\\\"\"},\"angle\":-1},{\"name\":\"EU Free 3\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/flags/eu-flag.png\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"htb-toolkit -v EUFree3;$SHELL\\\"\"},\"angle\":-1},{\"name\":\"US Free 1\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/flags/us-flag.png\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"htb-toolkit -v USFree1;$SHELL\\\"\"},\"angle\":-1},{\"name\":\"US Free 2\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/flags/us-flag.png\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"htb-toolkit -v USFree2;$SHELL\\\"\"},\"angle\":-1},{\"name\":\"US Free 3\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/flags/us-flag.png\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"htb-toolkit -v USFree3;$SHELL\\\"\"},\"angle\":-1},{\"name\":\"AU Free 1\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/flags/au-flag.png\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"htb-toolkit -v AUFree1;$SHELL\\\"\"},\"angle\":-1},{\"name\":\"SG Free 1\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/flags/sg-flag.png\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"htb-toolkit -v SGFree1;$SHELL\\\"\"},\"angle\":-1}],\"angle\":-1,\"data\":{}},{\"name\":\"VIP+\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/ic-vip+-big.svg\",\"type\":\"CustomMenu\",\"children\":[{\"name\":\"EU VIP+\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/flags/eu-flag.png\",\"type\":\"CustomMenu\",\"children\":[{\"name\":\"EU VIP+ 1\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/flags/eu-flag.png\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"htb-toolkit -v EUVIP+1;$SHELL\\\"\"},\"angle\":-1},{\"name\":\"EU VIP+ 2\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/flags/eu-flag.png\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"htb-toolkit -v EUVIP+2;$SHELL\\\"\"},\"angle\":-1}],\"angle\":-1,\"data\":{}},{\"name\":\"US VIP+ 1\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/flags/us-flag.png\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"htb-toolkit -v USVIP+1;$SHELL\\\"\"},\"angle\":-1},{\"name\":\"SG VIP+ 1\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/flags/sg-flag.png\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"htb-toolkit -v SGVIP+1;$SHELL\\\"\"},\"angle\":-1}],\"angle\":-1,\"data\":{}},{\"name\":\"VIP\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/ic-vip-big.svg\",\"type\":\"CustomMenu\",\"children\":[{\"name\":\"AU VIP\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/flags/au-flag.png\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"htb-toolkit -v AUVIP1;$SHELL\\\"\"},\"angle\":-1},{\"name\":\"EU VIP\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/flags/eu-flag.png\",\"type\":\"CustomMenu\",\"children\":[{\"name\":\"EU VIP 1-10\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/flags/eu-flag.png\",\"type\":\"CustomMenu\",\"children\":[{\"name\":\"EU VIP 2\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/flags/eu-flag.png\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"htb-toolkit -v EUVIP2;$SHELL\\\"\"},\"angle\":-1},{\"name\":\"EU VIP 1\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/flags/eu-flag.png\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"htb-toolkit -v EUVIP1;$SHELL\\\"\"},\"angle\":-1},{\"name\":\"EU VIP 10\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/flags/eu-flag.png\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"htb-toolkit -v EUVIP10;$SHELL\\\"\"},\"angle\":-1},{\"name\":\"EU VIP 9\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/flags/eu-flag.png\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"htb-toolkit -v EUVIP9;$SHELL\\\"\"},\"angle\":-1},{\"name\":\"EU VIP 8\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/flags/eu-flag.png\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"htb-toolkit -v EUVIP8;$SHELL\\\"\"},\"angle\":-1},{\"name\":\"EU VIP 7\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/flags/eu-flag.png\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"htb-toolkit -v EUVIP7;$SHELL\\\"\"},\"angle\":-1},{\"name\":\"EU VIP 6\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/flags/eu-flag.png\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"htb-toolkit -v EUVIP6;$SHELL\\\"\"},\"angle\":-1},{\"name\":\"EU VIP 5\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/flags/eu-flag.png\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"htb-toolkit -v EUVIP5;$SHELL\\\"\"},\"angle\":-1},{\"name\":\"EU VIP 4\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/flags/eu-flag.png\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"htb-toolkit -v EUVIP4;$SHELL\\\"\"},\"angle\":-1},{\"name\":\"EU VIP 3\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/flags/eu-flag.png\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"htb-toolkit -v EUVIP3;$SHELL\\\"\"},\"angle\":-1}],\"angle\":-1,\"data\":{}},{\"name\":\"EU VIP 21-28\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/flags/eu-flag.png\",\"type\":\"CustomMenu\",\"children\":[{\"name\":\"EU VIP 21\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/flags/eu-flag.png\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"htb-toolkit -v EUVIP21;$SHELL\\\"\"},\"angle\":-1},{\"name\":\"EU VIP 22\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/flags/eu-flag.png\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"htb-toolkit -v EUVIP22;$SHELL\\\"\"},\"angle\":-1},{\"name\":\"EU VIP 23\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/flags/eu-flag.png\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"htb-toolkit -v EUVIP23;$SHELL\\\"\"},\"angle\":-1},{\"name\":\"EU VIP 24\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/flags/eu-flag.png\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"htb-toolkit -v EUVIP24;$SHELL\\\"\"},\"angle\":-1},{\"name\":\"EU VIP 25\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/flags/eu-flag.png\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"htb-toolkit -v EUVIP25;$SHELL\\\"\"},\"angle\":-1},{\"name\":\"EU VIP 26\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/flags/eu-flag.png\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"htb-toolkit -v EUVIP26;$SHELL\\\"\"},\"angle\":-1},{\"name\":\"EU VIP 27\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/flags/eu-flag.png\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"htb-toolkit -v EUVIP27;$SHELL\\\"\"},\"angle\":-1},{\"name\":\"EU VIP 28\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/flags/eu-flag.png\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"htb-toolkit -v EUVIP28;$SHELL\\\"\"},\"angle\":-1}],\"angle\":-1,\"data\":{}},{\"name\":\"EU VIP 11-20\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/flags/eu-flag.png\",\"type\":\"CustomMenu\",\"children\":[{\"name\":\"EU VIP 11\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/flags/eu-flag.png\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"htb-toolkit -v EUVIP11;$SHELL\\\"\"},\"angle\":-1},{\"name\":\"EU VIP 12\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/flags/eu-flag.png\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"htb-toolkit -v EUVIP12;$SHELL\\\"\"},\"angle\":-1},{\"name\":\"EU VIP 13\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/flags/eu-flag.png\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"htb-toolkit -v EUVIP13;$SHELL\\\"\"},\"angle\":-1},{\"name\":\"EU VIP 14\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/flags/eu-flag.png\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"htb-toolkit -v EUVIP14;$SHELL\\\"\"},\"angle\":-1},{\"name\":\"EU VIP 15\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/flags/eu-flag.png\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"htb-toolkit -v EUVIP15;$SHELL\\\"\"},\"angle\":-1},{\"name\":\"EU VIP 16\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/flags/eu-flag.png\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"htb-toolkit -v EUVIP16;$SHELL\\\"\"},\"angle\":-1},{\"name\":\"EU VIP 17\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/flags/eu-flag.png\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"htb-toolkit -v EUVIP17;$SHELL\\\"\"},\"angle\":-1},{\"name\":\"EU VIP 18\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/flags/eu-flag.png\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"htb-toolkit -v EUVIP18;$SHELL\\\"\"},\"angle\":-1},{\"name\":\"EU VIP 19\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/flags/eu-flag.png\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"htb-toolkit -v EUVIP19;$SHELL\\\"\"},\"angle\":-1},{\"name\":\"EU VIP 20\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/flags/eu-flag.png\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"htb-toolkit -v EUVIP20;$SHELL\\\"\"},\"angle\":-1}],\"angle\":-1,\"data\":{}}],\"angle\":-1,\"data\":{}},{\"name\":\"US VIP\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/flags/us-flag.png\",\"type\":\"CustomMenu\",\"children\":[{\"name\":\"US VIP 1-10\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/flags/us-flag.png\",\"type\":\"CustomMenu\",\"children\":[{\"name\":\"US VIP 1\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/flags/us-flag.png\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"htb-toolkit -v USVIP1;$SHELL\\\"\"},\"angle\":-1},{\"name\":\"US VIP 2\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/flags/us-flag.png\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"htb-toolkit -v USVIP2;$SHELL\\\"\"},\"angle\":-1},{\"name\":\"US VIP 3\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/flags/us-flag.png\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"htb-toolkit -v USVIP3;$SHELL\\\"\"},\"angle\":-1},{\"name\":\"US VIP 4\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/flags/us-flag.png\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"htb-toolkit -v USVIP4;$SHELL\\\"\"},\"angle\":-1},{\"name\":\"US VIP 5\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/flags/us-flag.png\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"htb-toolkit -v USVIP5;$SHELL\\\"\"},\"angle\":-1},{\"name\":\"US VIP 6\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/flags/us-flag.png\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"htb-toolkit -v USVIP6;$SHELL\\\"\"},\"angle\":-1},{\"name\":\"US VIP 7\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/flags/us-flag.png\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"htb-toolkit -v USVIP7;$SHELL\\\"\"},\"angle\":-1},{\"name\":\"US VIP 8\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/flags/us-flag.png\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"htb-toolkit -v USVIP8;$SHELL\\\"\"},\"angle\":-1},{\"name\":\"US VIP 9\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/flags/us-flag.png\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"htb-toolkit -v USVIP9;$SHELL\\\"\"},\"angle\":-1},{\"name\":\"US VIP 10\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/flags/us-flag.png\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"htb-toolkit -v USVIP10;$SHELL\\\"\"},\"angle\":-1}],\"angle\":-1,\"data\":{}},{\"name\":\"US VIP 21-27\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/flags/us-flag.png\",\"type\":\"CustomMenu\",\"children\":[{\"name\":\"US VIP 21\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/flags/us-flag.png\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"htb-toolkit -v USVIP21;$SHELL\\\"\"},\"angle\":-1},{\"name\":\"US VIP 27\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/flags/us-flag.png\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"htb-toolkit -v USVIP27;$SHELL\\\"\"},\"angle\":-1},{\"name\":\"US VIP 26\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/flags/us-flag.png\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"htb-toolkit -v USVIP26;$SHELL\\\"\"},\"angle\":-1},{\"name\":\"US VIP 25\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/flags/us-flag.png\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"htb-toolkit -v USVIP25;$SHELL\\\"\"},\"angle\":-1},{\"name\":\"US VIP 24\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/flags/us-flag.png\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"htb-toolkit -v USVIP24;$SHELL\\\"\"},\"angle\":-1},{\"name\":\"US VIP 23\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/flags/us-flag.png\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"htb-toolkit -v USVIP23;$SHELL\\\"\"},\"angle\":-1},{\"name\":\"US VIP 22\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/flags/us-flag.png\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"htb-toolkit -v USVIP22;$SHELL\\\"\"},\"angle\":-1}],\"angle\":-1,\"data\":{}},{\"name\":\"US VIP 11-20\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/flags/us-flag.png\",\"type\":\"CustomMenu\",\"children\":[{\"name\":\"US VIP 11\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/flags/us-flag.png\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"htb-toolkit -v USVIP11;$SHELL\\\"\"},\"angle\":-1},{\"name\":\"US VIP 12\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/flags/us-flag.png\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"htb-toolkit -v USVIP12;$SHELL\\\"\"},\"angle\":-1},{\"name\":\"US VIP 13\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/flags/us-flag.png\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"htb-toolkit -v USVIP13;$SHELL\\\"\"},\"angle\":-1},{\"name\":\"US VIP 14\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/flags/us-flag.png\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"htb-toolkit -v USVIP14;$SHELL\\\"\"},\"angle\":-1},{\"name\":\"US VIP 15\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/flags/us-flag.png\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"htb-toolkit -v USVIP15;$SHELL\\\"\"},\"angle\":-1},{\"name\":\"US VIP 16\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/flags/us-flag.png\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"htb-toolkit -v USVIP16;$SHELL\\\"\"},\"angle\":-1},{\"name\":\"US VIP 17\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/flags/us-flag.png\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"htb-toolkit -v USVIP17;$SHELL\\\"\"},\"angle\":-1},{\"name\":\"US VIP 18\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/flags/us-flag.png\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"htb-toolkit -v USVIP18;$SHELL\\\"\"},\"angle\":-1},{\"name\":\"US VIP 19\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/flags/us-flag.png\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"htb-toolkit -v USVIP19;$SHELL\\\"\"},\"angle\":-1},{\"name\":\"US VIP 20\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/flags/us-flag.png\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"htb-toolkit -v USVIP20;$SHELL\\\"\"},\"angle\":-1}],\"angle\":-1,\"data\":{}}],\"angle\":-1,\"data\":{}},{\"name\":\"SG VIP\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/flags/sg-flag.png\",\"type\":\"CustomMenu\",\"children\":[{\"name\":\"SG VIP 1\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/flags/sg-flag.png\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"htb-toolkit -v SGVIP1;$SHELL\\\"\"},\"angle\":-1},{\"name\":\"SG VIP 2\",\"icon\":\"/run/current-system/sw/share/icons/htb-toolkit/flags/sg-flag.png\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"htb-toolkit -v SGVIP2;$SHELL\\\"\"},\"angle\":-1}],\"angle\":-1,\"data\":{}}],\"angle\":-1,\"data\":{}}],\"angle\":-1,\"data\":{}}],\"angle\":-1,\"data\":{}}],\"angle\":-1,\"data\":{}},{\"name\":\"PWNX\",\"icon\":\"/run/current-system/sw/share/pixmaps/pwnx.png\",\"type\":\"Uri\",\"data\":{\"uri\":\"https://pwnx.io\"},\"angle\":-1},{\"name\":\"Proving Grounds\",\"icon\":\"/run/current-system/sw/share/pixmaps/offsec-red.png\",\"type\":\"Uri\",\"data\":{\"uri\":\"https://www.offensive-security.com/labs\"},\"angle\":-1},{\"name\":\"PortSwigger\",\"icon\":\"/run/current-system/sw/share/pixmaps/portswigger.png\",\"type\":\"Uri\",\"data\":{\"uri\":\"https://portswigger.net/web-security/all-labs\"},\"angle\":-1},{\"name\":\"Root Me\",\"icon\":\"/run/current-system/sw/share/pixmaps/rootme.png\",\"type\":\"Uri\",\"data\":{\"uri\":\"https://www.root-me.org/?lang=en\"},\"angle\":-1},{\"name\":\"PentesterLab\",\"icon\":\"/run/current-system/sw/share/pixmaps/pentesterlab.png\",\"type\":\"Uri\",\"data\":{\"uri\":\"https://pentesterlab.com\"},\"angle\":-1},{\"name\":\"TryHackMe\",\"icon\":\"/run/current-system/sw/share/pixmaps/tryhackme-blue.png\",\"type\":\"Uri\",\"data\":{\"uri\":\"https://tryhackme.com\"},\"angle\":-1}],\"id\":1,\"shortcut\":\"space\",\"angle\":-1,\"data\":{},\"centered\":false,\"touchButton\":false,\"superRMB\":false},{\"name\":\"Blue Team Menu\",\"icon\":\"/run/current-system/sw/share/icons/hicolor/scalable/categories/blueteam.svg\",\"type\":\"CustomMenu\",\"children\":[{\"name\":\"Identify\",\"icon\":\"/run/current-system/sw/share/icons/hicolor/scalable/categories/athena-identify-trans.svg\",\"type\":\"CustomMenu\",\"children\":[{\"name\":\"Maltego\",\"icon\":\"/run/current-system/sw/share/icons/hicolor/scalable/apps/kali-maltego.svg\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"nix-shell -p maltego --command 'nohup maltego >/dev/null 2>&1; return'\\\"\"},\"angle\":-1},{\"name\":\"Wapiti\",\"icon\":\"/run/current-system/sw/share/icons/hicolor/scalable/apps/kali-wapiti.svg\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"nix-shell -p wapiti --command 'wapiti -h; return'\\\"\"},\"angle\":-1},{\"name\":\"spiderfoot\",\"icon\":\"/run/current-system/sw/share/icons/hicolor/scalable/apps/kali-spiderfoot.svg\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"nix-shell -p spiderfoot --command 'spiderfoot --help; return'\\\"\"},\"angle\":-1},{\"name\":\"Searchsploit\",\"icon\":\"/run/current-system/sw/share/icons/hicolor/scalable/apps/kali-exploitdb.svg\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"nix-shell -p exploitdb --command 'searchsploit -h; return'\\\"\"},\"angle\":-1},{\"name\":\"OWASP ZAP\",\"icon\":\"/run/current-system/sw/share/icons/hicolor/scalable/apps/kali-zaproxy.svg\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"nix-shell -p zap --command 'nohup zaproxy >/dev/null 2>&1; return'\\\"\"},\"angle\":-1}],\"angle\":-1,\"data\":{},\"showLabels\":false},{\"name\":\"Protect\",\"icon\":\"/run/current-system/sw/share/icons/hicolor/scalable/categories/athena-protect-trans.svg\",\"type\":\"CustomMenu\",\"children\":[{\"name\":\"ClamAV\",\"icon\":\"/run/current-system/sw/share/icons/hicolor/scalable/apps/kali-clamav.svg\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"nix-shell -p clamav --command 'clamav-config; return'\\\"\"},\"angle\":-1},{\"name\":\"Firewall Builder\",\"icon\":\"/run/current-system/sw/share/icons/hicolor/scalable/apps/kali-fwbuilder.svg\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"nix-shell -p fwbuilder --command 'fwbuilder; return'\\\"\"},\"angle\":-1}],\"angle\":-1,\"data\":{},\"showLabels\":false},{\"name\":\"Detect\",\"icon\":\"/run/current-system/sw/share/icons/hicolor/scalable/categories/athena-detect-trans.svg\",\"type\":\"CustomMenu\",\"children\":[{\"name\":\"SentryPeer\",\"icon\":\"/run/current-system/sw/share/icons/hicolor/scalable/apps/kali-sentrypeer.svg\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"nix-shell -p sentrypeer --command 'sentrypeer -h; return'\\\"\"},\"angle\":-1}],\"angle\":-1,\"data\":{},\"showLabels\":false},{\"name\":\"Respond\",\"icon\":\"/run/current-system/sw/share/icons/hicolor/scalable/categories/athena-respond-trans.svg\",\"type\":\"CustomMenu\",\"children\":[{\"name\":\"Foremost\",\"icon\":\"/run/current-system/sw/share/icons/hicolor/scalable/apps/kali-foremost.svg\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"nix-shell -p foremost --command 'foremost -h; return'\\\"\"},\"angle\":-1},{\"name\":\"Galleta\",\"icon\":\"/run/current-system/sw/share/icons/hicolor/scalable/apps/kali-galleta.svg\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"nix-shell -p galleta --command 'galleta; return'\\\"\"},\"angle\":-1},{\"name\":\"Ghidra\",\"icon\":\"/run/current-system/sw/share/icons/hicolor/scalable/apps/kali-ghidra.svg\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"nix-shell -p ghidra --command 'nohup ghidra >/dev/null 2>&1; return'\\\"\"},\"angle\":-1},{\"name\":\"Guymager\",\"icon\":\"/run/current-system/sw/share/icons/hicolor/scalable/apps/kali-guymager.svg\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"nix-shell -p guymager --command 'pkexec guymager >/dev/null 2>&1; return'\\\"\"},\"angle\":-1},{\"name\":\"ICAT\",\"icon\":\"/run/current-system/sw/share/icons/hicolor/scalable/apps/kali-icat.svg\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"nix-shell -p sleuthkit --command 'icat; return'\\\"\"},\"angle\":-1},{\"name\":\"ILS\",\"icon\":\"/run/current-system/sw/share/icons/hicolor/scalable/apps/kali-ils.svg\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"nix-shell -p sleuthkit --command 'ils; return'\\\"\"},\"angle\":-1},{\"name\":\"Mactime\",\"icon\":\"/run/current-system/sw/share/icons/hicolor/scalable/apps/kali-mactime.svg\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"nix-shell -p sleuthkit --command 'mactime; return'\\\"\"},\"angle\":-1},{\"name\":\"netsniff-ng\",\"icon\":\"/run/current-system/sw/share/icons/hicolor/scalable/apps/kali-netsniff-ng.svg\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"nix-shell -p netsniff-ng --command 'netsniff-ng -h; return'\\\"\"},\"angle\":-1},{\"name\":\"OllyDbg\",\"icon\":\"/run/current-system/sw/share/icons/hicolor/scalable/apps/kali-ollydbg.svg\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"nix-shell -p ollydbg --command 'nohup ollydbg >/dev/null 2>&1; return'\\\"\"},\"angle\":-1},{\"name\":\"Wireshark\",\"icon\":\"/run/current-system/sw/share/icons/hicolor/scalable/apps/kali-wireshark.svg\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"nix-shell -p wireshark --command 'nohup wireshark >/dev/null 2>&1; return'\\\"\"},\"angle\":-1}],\"angle\":-1,\"data\":{},\"showLabels\":false},{\"name\":\"Recover\",\"icon\":\"/run/current-system/sw/share/icons/hicolor/scalable/categories/athena-recover-trans.svg\",\"type\":\"CustomMenu\",\"children\":[{\"name\":\"Scrounge NTFS\",\"icon\":\"/run/current-system/sw/share/icons/hicolor/scalable/apps/kali-scrounge-ntfs.svg\",\"type\":\"Command\",\"data\":{\"command\":\"shell-rocket \\\"nix-shell -p scrounge-ntfs --command 'scrounge-ntfs -h; return'\\\"\"},\"angle\":-1}],\"angle\":-1,\"data\":{},\"showLabels\":false}],\"id\":2,\"shortcut\":\"a\",\"angle\":-1,\"data\":{},\"centered\":false,\"touchButton\":false,\"superRMB\":false,\"showLabels\":false}]";
+ trace-color = "rgba(51,0,79,0)";
+ };
+ };
+ };
+}
diff --git a/nixos/home-manager/desktops/kde/config/menus/applications-merged/applications-kmenuedit.menu b/nixos/home-manager/desktops/kde/config/menus/applications-merged/applications-kmenuedit.menu
new file mode 100644
index 000000000..f90a07fbe
--- /dev/null
+++ b/nixos/home-manager/desktops/kde/config/menus/applications-merged/applications-kmenuedit.menu
@@ -0,0 +1,27 @@
+
+
+
+
+ Applications
+
+
+
+
+
+
+
+
+
+ Blue Team
+ 00-blue-team.directory
+ ../blue-applications.menu
+
+
+
+ Red Team
+ 00-red-team.directory
+ ../red-applications.menu
+
+
+
diff --git a/nixos/home-manager/desktops/kde/default.nix b/nixos/home-manager/desktops/kde/default.nix
new file mode 100644
index 000000000..b34b618b5
--- /dev/null
+++ b/nixos/home-manager/desktops/kde/default.nix
@@ -0,0 +1,87 @@
+{ pkgs, home-manager, username, ... }:
+let
+ plasma-packages = with pkgs.libsForQt5; [
+ bluez-qt
+ discover
+ dolphin
+ elisa
+ gwenview
+ kate
+ kcalc
+ kde-gtk-config
+ kdeconnect-kde
+ kdeplasma-addons
+ kfind
+ kinfocenter
+ kmenuedit
+ kpipewire
+ kscreen
+ plasma-browser-integration
+ plasma-desktop
+ plasma-nm
+ plasma-pa
+ plasma-systemmonitor
+ plasma-thunderbolt
+ plasma-vault
+ plasma-welcome
+ plasma-workspace
+ polkit-kde-agent
+ spectacle
+ systemsettings
+ ];
+ fontList = with pkgs; [
+ (nerdfonts.override { fonts = [ "JetBrainsMono" "NerdFontsSymbolsOnly" ]; })
+ ];
+in
+{
+ # ---- System Configuration ----
+ services = {
+ xserver = {
+ enable = true;
+ desktopManager = {
+ plasma5 = {
+ enable = true;
+ kwinrc = {
+ "Plugins" = {
+ blurEnabled = true;
+ contrastEnabled = true;
+ diminactiveEnabled = true;
+ forceblurEnabled = true;
+ invertEnabled = true;
+ magiclampEnabled = true;
+ slidebackEnabled = true;
+ wobblywindowsEnabled = true;
+ };
+ "org.kde.kdecoration2" = {
+ BorderSize = "None";
+ BorderSizeAuto = false;
+ ButtonsOnLeft = "XIA";
+ };
+ };
+ };
+ };
+ };
+ };
+ environment.pathsToLink = [
+ "/share/backgrounds" # TODO: https://github.com/NixOS/nixpkgs/issues/47173
+ ];
+
+ xdg.portal = {
+ enable = true;
+ extraPortals = with pkgs.libsForQt5; [
+ xdg-desktop-portal-kde
+ ];
+ };
+
+ environment.systemPackages = plasma-packages;
+
+ # ---- Home Configuration ----
+ home-manager.users.${username} = { pkgs, ...}: {
+ home.packages = fontList;
+
+ # It copies "./config/menus/gnome-applications.menu" source file to the nix store, and then symlinks it to the location.
+ xdg.configFile."menus/applications-merged/applications-kmenuedit.menu".source = ./config/menus/applications-merged/applications-kmenuedit.menu;
+
+ services.kdeconnect.enable = true;
+ };
+}
diff --git a/nixos/home-manager/desktops/mate/config/menus/applications-merged/mate-applications.menu b/nixos/home-manager/desktops/mate/config/menus/applications-merged/mate-applications.menu
new file mode 100644
index 000000000..a6da49616
--- /dev/null
+++ b/nixos/home-manager/desktops/mate/config/menus/applications-merged/mate-applications.menu
@@ -0,0 +1,30 @@
+
+
+
+
+ Applications
+ /etc/xdg/menus/mate-applications.menu
+ mate-menu-applications.directory
+
+
+
+
+
+
+
+ applications-merged
+
+
+ Blue Team
+ 00-blue-team.directory
+ ../blue-applications.menu
+
+
+
+ Red Team
+ 00-red-team.directory
+ ../red-applications.menu
+
+
+
diff --git a/nixos/home-manager/desktops/mate/default.nix b/nixos/home-manager/desktops/mate/default.nix
new file mode 100644
index 000000000..0b3435efb
--- /dev/null
+++ b/nixos/home-manager/desktops/mate/default.nix
@@ -0,0 +1,199 @@
+{ pkgs, home-manager, username, terminal ? "alacritty", theme-components, ... }:
+let
+ mate-packages = with pkgs.mate; [
+ caja-with-extensions
+ eom
+ marco
+ mate-control-center
+ mate-desktop
+ mate-media
+ mate-netbook
+ mate-panel
+ mate-polkit
+ mate-power-manager
+ mate-session-manager
+ mate-tweak
+ mate-utils
+ ];
+ fontList = with pkgs; [
+ (nerdfonts.override { fonts = [ "JetBrainsMono" "NerdFontsSymbolsOnly" ]; })
+ ];
+ gtkTheme = "${theme-components.gtk-theme}";
+ gtkIconTheme = "${theme-components.icon-theme}";
+ gtkCursorTheme = "${theme-components.cursor-theme}";
+ backgroundTheme = "${theme-components.background}";
+in
+{
+ # ---- System Configuration ----
+ services.xserver = {
+ enable = true;
+ desktopManager = {
+ mate.enable = true;
+ };
+ };
+ environment.pathsToLink = [
+ "/share/backgrounds" # TODO: https://github.com/NixOS/nixpkgs/issues/47173
+ ];
+ environment.systemPackages = mate-packages ++ [
+ pkgs.xdg-user-dirs
+ ];
+
+ # ---- Home Configuration ----
+ home-manager.users.${username} = { pkgs, ...}: {
+ home.packages = fontList;
+
+ xdg.mimeApps = {
+ enable = true;
+ defaultApplications = {
+ "inode/directory" = ["caja.desktop"];
+ };
+ };
+
+ dconf.settings = {
+ "org/mate/desktop/interface" = {
+ "gtk-theme" = gtkTheme;
+ };
+ "org/mate/marco/general" = {
+ "theme" = gtkTheme;
+ };
+ "org/mate/desktop/interface" = {
+ "icon-theme" = gtkIconTheme;
+ };
+ "org/mate/desktop/peripherals/mouse" = {
+ "cursor-theme" = gtkCursorTheme;
+ };
+ "org/mate/desktop/background" = {
+ "picture-filename" = "/run/current-system/sw/share/backgrounds/athena/"+backgroundTheme;
+ };
+ };
+
+ # It copies "./config/menus/gnome-applications.menu" source file to the nix store, and then symlinks it to the location.
+ xdg.configFile."menus/applications-merged/mate-applications.menu".source = ./config/menus/applications-merged/mate-applications.menu;
+
+ dconf.settings = {
+
+ "org/gnome/shell".favorite-apps = [ "kali-mimikatz.desktop" "kali-powersploit.desktop" "seclists.desktop" "payloadsallthethings.desktop" "shell.desktop" "powershell.desktop" "cyberchef.desktop" "fuzzdb.desktop" "securitywordlist.desktop" "autowordlists.desktop" ];
+
+ # /desktop/applications/terminal
+ "org/gnome/desktop/applications/terminal" = {
+ exec = "${terminal}";
+ };
+
+ # /panel
+ "org/mate/panel/general" = {
+ object-id-list = [ "menu-bar" "notification-area" "clock" "show-desktop" "window-list" "workspace-switcher" "object-0" "object-1" "object-2" "object-3" "object-4" "object-5"];
+ toplevel-id-list = ["top" "bottom"];
+ };
+ "org/mate/panel/objects/clock" = {
+ applet-iid = "ClockAppletFactory::ClockApplet";
+ locked = true;
+ object-type = "applet";
+ panel-right-stick = true;
+ position = 0;
+ toplevel-id = "top";
+ };
+ "org/mate/panel/objects/clock/prefs" = {
+ format = "24-hour";
+ };
+ "org/mate/panel/objects/menu-bar" = {
+ locked = true;
+ object-type = "menu-bar";
+ position = 0;
+ toplevel-id = "top";
+ };
+ "org/mate/panel/objects/notification-area" = {
+ applet-iid = "NotificationAreaAppletFactory::NotificationArea";
+ locked = true;
+ object-type = "applet";
+ panel-right-stick = true;
+ position = 10;
+ toplevel-id = "top";
+ };
+ #"org/mate/panel/objects/object-0" = {
+ # launcher-location = "/run/current-system/sw/share/applications/cyberchef.desktop";
+ # object-type = "launcher";
+ # panel-right-stick = false;
+ # position = -1;
+ # toplevel-id = "top";
+ #};
+ #"org/mate/panel/objects/object-1" = {
+ # launcher-location = "/run/current-system/sw/share/applications/org.athenaos.CyberHub.desktop";
+ # object-type = "launcher";
+ # panel-right-stick = false;
+ # position = -1;
+ # toplevel-id = "top";
+ #};
+ "org/mate/panel/objects/object-0" = {
+ launcher-location = "${pkgs.firefox}/share/applications/firefox.desktop";
+ object-type = "launcher";
+ panel-right-stick = false;
+ position = -1;
+ toplevel-id = "top";
+ };
+ "org/mate/panel/objects/object-1" = {
+ launcher-location = "/run/current-system/sw/share/applications/shell.desktop";
+ object-type = "launcher";
+ panel-right-stick = false;
+ position = -1;
+ toplevel-id = "top";
+ };
+ "org/mate/panel/objects/object-2" = {
+ launcher-location = "/run/current-system/sw/share/applications/powershell.desktop";
+ object-type = "launcher";
+ panel-right-stick = false;
+ position = -1;
+ toplevel-id = "top";
+ };
+ "org/mate/panel/objects/object-3" = {
+ launcher-location = "/run/current-system/sw/share/applications/payloadsallthethings.desktop";
+ object-type = "launcher";
+ panel-right-stick = false;
+ position = -1;
+ toplevel-id = "top";
+ };
+ "org/mate/panel/objects/object-4" = {
+ launcher-location = "/run/current-system/sw/share/applications/seclists.desktop";
+ object-type = "launcher";
+ panel-right-stick = false;
+ position = -1;
+ toplevel-id = "top";
+ };
+ "org/mate/panel/objects/show-desktop" = {
+ applet-iid = "WnckletFactory::ShowDesktopApplet";
+ locked = true;
+ object-type = "applet";
+ position = 0;
+ toplevel-id = "bottom";
+ };
+ "org/mate/panel/objects/window-list" = {
+ applet-iid = "WnckletFactory::WindowListApplet";
+ locked = true;
+ object-type = "applet";
+ position = 20;
+ toplevel-id = "bottom";
+ };
+ "org/mate/panel/objects/workspace-switcher" = {
+ applet-iid = "WnckletFactory::WorkspaceSwitcherApplet";
+ locked = true;
+ object-type = "applet";
+ panel-right-stick = true;
+ position = 0;
+ toplevel-id = "bottom";
+ };
+ "org/mate/panel/toplevels/bottom" = {
+ expand = true;
+ orientation = "bottom";
+ screen = 0;
+ size = 24;
+ y = 854;
+ y-bottom = 0;
+ };
+ "org/mate/panel/toplevels/top" = {
+ expand = true;
+ orientation = "top";
+ screen = 0;
+ size = 38;
+ };
+ };
+ };
+}
diff --git a/nixos/home-manager/desktops/xfce/assets/archlinux.svg b/nixos/home-manager/desktops/xfce/assets/archlinux.svg
new file mode 100644
index 000000000..0861cf2fc
--- /dev/null
+++ b/nixos/home-manager/desktops/xfce/assets/archlinux.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/nixos/home-manager/desktops/xfce/assets/scalable/athenaos-shield.svg b/nixos/home-manager/desktops/xfce/assets/scalable/athenaos-shield.svg
new file mode 100644
index 000000000..74d6965f1
--- /dev/null
+++ b/nixos/home-manager/desktops/xfce/assets/scalable/athenaos-shield.svg
@@ -0,0 +1,67 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/nixos/home-manager/desktops/xfce/assets/scalable/clock.svg b/nixos/home-manager/desktops/xfce/assets/scalable/clock.svg
new file mode 100644
index 000000000..49baca0f3
--- /dev/null
+++ b/nixos/home-manager/desktops/xfce/assets/scalable/clock.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/nixos/home-manager/desktops/xfce/assets/scalable/cpu.svg b/nixos/home-manager/desktops/xfce/assets/scalable/cpu.svg
new file mode 100644
index 000000000..96b292a12
--- /dev/null
+++ b/nixos/home-manager/desktops/xfce/assets/scalable/cpu.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/nixos/home-manager/desktops/xfce/assets/scalable/ghost.svg b/nixos/home-manager/desktops/xfce/assets/scalable/ghost.svg
new file mode 100644
index 000000000..f45e5b2e9
--- /dev/null
+++ b/nixos/home-manager/desktops/xfce/assets/scalable/ghost.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/nixos/home-manager/desktops/xfce/assets/scalable/pie-chart.svg b/nixos/home-manager/desktops/xfce/assets/scalable/pie-chart.svg
new file mode 100644
index 000000000..b51b55996
--- /dev/null
+++ b/nixos/home-manager/desktops/xfce/assets/scalable/pie-chart.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/nixos/home-manager/desktops/xfce/assets/scalable/power-button.svg b/nixos/home-manager/desktops/xfce/assets/scalable/power-button.svg
new file mode 100644
index 000000000..8dfb91357
--- /dev/null
+++ b/nixos/home-manager/desktops/xfce/assets/scalable/power-button.svg
@@ -0,0 +1,42 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/nixos/home-manager/desktops/xfce/assets/scalable/shield.svg b/nixos/home-manager/desktops/xfce/assets/scalable/shield.svg
new file mode 100644
index 000000000..2dc819248
--- /dev/null
+++ b/nixos/home-manager/desktops/xfce/assets/scalable/shield.svg
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
diff --git a/nixos/home-manager/desktops/xfce/bin/genmon-cpu b/nixos/home-manager/desktops/xfce/bin/genmon-cpu
new file mode 100644
index 000000000..821ad43b8
--- /dev/null
+++ b/nixos/home-manager/desktops/xfce/bin/genmon-cpu
@@ -0,0 +1,61 @@
+#!/usr/bin/env bash
+readonly FONTICON="\Uf4bc"
+#readonly ICON="/usr/share/icons/assets/scalable/cpu.svg"
+
+## Files and Data
+PREV_TOTAL=0
+PREV_IDLE=0
+cpuFile="/tmp/.cpu_usage"
+
+## Get CPU usage
+get_cpu() {
+ if [[ -f "${cpuFile}" ]]; then
+ fileCont=$(cat "${cpuFile}")
+ PREV_TOTAL=$(echo "${fileCont}" | head -n 1)
+ PREV_IDLE=$(echo "${fileCont}" | tail -n 1)
+ fi
+
+ CPU=(`cat /proc/stat | grep '^cpu '`) # Get the total CPU statistics.
+ unset CPU[0] # Discard the "cpu" prefix.
+ IDLE=${CPU[4]} # Get the idle CPU time.
+
+ # Calculate the total CPU time.
+ TOTAL=0
+
+ for VALUE in "${CPU[@]:0:4}"; do
+ let "TOTAL=$TOTAL+$VALUE"
+ done
+
+ if [[ "${PREV_TOTAL}" != "" ]] && [[ "${PREV_IDLE}" != "" ]]; then
+ # Calculate the CPU usage since we last checked.
+ let "DIFF_IDLE=$IDLE-$PREV_IDLE"
+ let "DIFF_TOTAL=$TOTAL-$PREV_TOTAL"
+ let "DIFF_USAGE=(1000*($DIFF_TOTAL-$DIFF_IDLE)/$DIFF_TOTAL+5)/10"
+ echo "${DIFF_USAGE}"
+ else
+ echo "?"
+ fi
+
+ # Remember the total and idle CPU times for the next check.
+ echo "${TOTAL}" > "${cpuFile}"
+ echo "${IDLE}" >> "${cpuFile}"
+}
+
+CPU=$(get_cpu)
+
+
+# Panel
+#INFO=" ${ICON}"
+#INFO+="${CPU}% "
+INFO="${FONTICON}\n${CPU}% "
+
+# Tooltip
+MORE_INFO=""
+MORE_INFO+="CPU Usage: ${CPU}%"
+MORE_INFO+=" "
+
+# Panel Print
+echo -e "${INFO}"
+
+# Tooltip Print
+echo -e "${MORE_INFO}"
diff --git a/nixos/home-manager/desktops/xfce/bin/genmon-datetime b/nixos/home-manager/desktops/xfce/bin/genmon-datetime
new file mode 100644
index 000000000..7b08e8d3c
--- /dev/null
+++ b/nixos/home-manager/desktops/xfce/bin/genmon-datetime
@@ -0,0 +1,26 @@
+#!/usr/bin/env bash
+
+#genmon script for displaying the time
+#displays date and time on the tooltip
+readonly FONTICON="\Uf43a"
+#readonly ICON="/usr/share/icons/assets/scalable/clock.svg"
+
+TIME=`date '+%H:%M'`
+DATE=$(echo "\uf073 ")
+DATE+=`date '+ %d %B %A %H:%M'`
+
+# Panel
+#INFO=" ${ICON}"
+#INFO+="${TIME} "
+INFO+="${FONTICON}\n${TIME} "
+
+# Tooltip
+MORE_INFO=""
+MORE_INFO+="${DATE}"
+MORE_INFO+=" "
+
+# Panel Print
+echo -e "${INFO}"
+
+# Tooltip Print
+echo -e "${MORE_INFO}"
diff --git a/nixos/home-manager/desktops/xfce/bin/genmon-mem b/nixos/home-manager/desktops/xfce/bin/genmon-mem
new file mode 100644
index 000000000..0757a5a5f
--- /dev/null
+++ b/nixos/home-manager/desktops/xfce/bin/genmon-mem
@@ -0,0 +1,21 @@
+#!/usr/bin/env bash
+
+MEM=$(printf "%.0f\n" $(free -m | grep Mem | awk '{print ($3/$2)*100}'))
+readonly FONTICON="\Uebe4"
+#readonly ICON="/usr/share/icons/assets/scalable/pie-chart.svg"
+
+# Panel
+#INFO=" ${ICON}"
+#INFO+="${MEM}% "
+INFO+="${FONTICON}\n${MEM}% "
+
+# Tooltip
+MORE_INFO=""
+MORE_INFO+="MEM Usage: ${MEM}%"
+MORE_INFO+=" "
+
+# Panel Print
+echo -e "${INFO}"
+
+# Tooltip Print
+echo -e "${MORE_INFO}"
diff --git a/nixos/home-manager/desktops/xfce/bin/i3lock-everblush b/nixos/home-manager/desktops/xfce/bin/i3lock-everblush
new file mode 100644
index 000000000..0e937e849
--- /dev/null
+++ b/nixos/home-manager/desktops/xfce/bin/i3lock-everblush
@@ -0,0 +1,65 @@
+#!/usr/bin/env bash
+# Thanks to: i3lock-solarized (https://github.com/parsiad/i3lock-solarized)
+
+# Colors
+alpha='dd'
+base03='#181f21'
+base02='#22292b'
+base01='#b3b9b8'
+base00='#dadada'
+base0='#b3b9b8'
+base1='#dadada'
+base2='#dfdfdf'
+base3='#e3e3e3'
+yellow='#e5c76b'
+red='#e06e6e'
+magenta='#c47fd5'
+blue='#67b0e8'
+cyan='#6cd0ca'
+green='#8ccf7e'
+
+
+font='Roboto'
+
+
+# Main command
+i3lock \
+ --insidever-color=$base02$alpha \
+ --insidewrong-color=$base02$alpha \
+ --inside-color=$base03$alpha \
+ --ringver-color=$green$alpha \
+ --ringwrong-color=$red$alpha \
+ --ringver-color=$green$alpha \
+ --ringwrong-color=$red$alpha \
+ --ring-color=$base02$alpha \
+ --line-uses-ring \
+ --keyhl-color=$blue$alpha \
+ --bshl-color=$yellow$alpha \
+ --separator-color=$base01$alpha \
+ --verif-color=$green \
+ --wrong-color=$red \
+ --layout-color=$blue \
+ --date-color=$base1 \
+ --time-color=$base1 \
+ --screen 1 \
+ --blur 1 \
+ --clock \
+ --indicator \
+ --keylayout 1 \
+ --time-str="%I:%M %p" \
+ --date-str="%a, %b %e %Y" \
+ --verif-text="Verifying..." \
+ --wrong-text="Auth Failed" \
+ --noinput="No Input" \
+ --lock-text="Locking..." \
+ --lockfailed="Lock Failed" \
+ --time-font=$font \
+ --date-font=$font \
+ --layout-font=$font \
+ --verif-font=$font \
+ --wrong-font=$font \
+ --radius=110 \
+ --ring-width=9 \
+ --pass-media-keys \
+ --pass-screen-keys \
+ --pass-volume-keys \
\ No newline at end of file
diff --git a/nixos/home-manager/desktops/xfce/bin/xfce-init b/nixos/home-manager/desktops/xfce/bin/xfce-init
new file mode 100644
index 000000000..0b9169880
--- /dev/null
+++ b/nixos/home-manager/desktops/xfce/bin/xfce-init
@@ -0,0 +1,81 @@
+#!/usr/bin/env bash
+
+detect_virt=$(systemd-detect-virt)
+
+if ([ ! -z "$DISPLAY" ] && [ "$DISPLAY" != ":0" ]) || ([ "$detect_virt" != "docker" ] && [ "$detect_virt" != "podman" ] && [ "$detect_virt" != "wsl" ]); then
+
+ FLAGFILE="$HOME/.flag-xfce-once"
+ #FLAGNET="$HOME/.flag-xfce-net-once"
+
+ if [ -f "$FLAGFILE" ]; then
+
+ ############################################################
+
+ xdg-mime default org.gnome.Nautilus.desktop inode/directory
+
+ ############################################################
+
+ sh ~/.vim_runtime/install_awesome_parameterized.sh ~/.vim_runtime $USER
+
+ package=athena-akame-theme
+ if pacman -Qq $package > /dev/null ; then
+ theme-switcher AkameGaKill
+ fi
+
+ package=athena-cyborg-theme
+ if pacman -Qq $package > /dev/null ; then
+ theme-switcher Cyborg
+ fi
+
+ package=athena-everblush-theme
+ if pacman -Qq $package > /dev/null ; then
+ theme-switcher Everblush
+ fi
+
+ package=athena-graphite-theme
+ if pacman -Qq $package > /dev/null ; then
+ theme-switcher Graphite
+ fi
+
+ package=athena-htb-theme
+ if pacman -Qq $package > /dev/null ; then
+ theme-switcher HackTheBox
+ fi
+
+ package=athena-samurai-theme
+ if pacman -Qq $package > /dev/null ; then
+ theme-switcher SamuraiGirl
+ fi
+
+ package=athena-sweetdark-theme
+ if pacman -Qq $package > /dev/null ; then
+ theme-switcher SweetDark
+ fi
+
+ package=athena-xxe-theme
+ if pacman -Qq $package > /dev/null ; then
+ theme-switcher XXE
+ fi
+
+ rm -rf "$FLAGFILE"
+
+ systemctl --user enable --now psd
+ ln -s "$HOME/.mozilla/firefox" "$HOME/.mozilla/firefox"
+ fi
+
+ #if ping -q -c 1 -W 1 8.8.8.8 >/dev/null; then
+ # if [ -f "$FLAGNET" ]; then
+ # # Commented for keeping nist-feed disable. The user decides if enable it.
+ # # /usr/local/bin/nist-feed -n -l
+ # rm -rf "$FLAGNET"
+ # fi
+ # /usr/local/bin/htb-update
+ #fi
+
+ #If tun0 is down (i.e., after a reboot), the shell prompt must be updated with the running interfaces
+ #if ! nmcli c show --active | grep -q tun ; then
+
+ # /usr/local/bin/prompt-reset
+
+ #fi
+fi
diff --git a/nixos/home-manager/desktops/xfce/config/Kvantum/Everblush/Everblush.kvconfig b/nixos/home-manager/desktops/xfce/config/Kvantum/Everblush/Everblush.kvconfig
new file mode 100644
index 000000000..ef004833e
--- /dev/null
+++ b/nixos/home-manager/desktops/xfce/config/Kvantum/Everblush/Everblush.kvconfig
@@ -0,0 +1,526 @@
+[%General]
+author=Vinceliuice and modded by [https://github.com/mehedirm6244]
+comment=A minimalistic theme inspired by the Arc GTK theme
+x11drag=menubar_and_primary_toolbar
+alt_mnemonic=true
+left_tabs=true
+attach_active_tab=true
+mirror_doc_tabs=true
+group_toolbar_buttons=false
+toolbar_item_spacing=1
+toolbar_interior_spacing=3
+spread_progressbar=true
+composite=true
+menu_shadow_depth=7
+menu_separator_height=6
+tooltip_shadow_depth=6
+splitter_width=4
+scroll_width=9
+scroll_arrows=false
+scroll_min_extent=60
+slider_width=6
+slider_handle_width=16
+slider_handle_length=16
+center_toolbar_handle=true
+check_size=16
+textless_progressbar=false
+progressbar_thickness=3font
+menubar_mouse_tracking=true
+toolbutton_style=1
+double_click=false
+translucent_windows=true
+blurring=true
+popup_blurring=true
+vertical_spin_indicators=false
+spin_button_width=32
+fill_rubberband=false
+merge_menubar_with_toolbar=true
+small_icon_size=16
+large_icon_size=32
+button_icon_size=16
+toolbar_icon_size=22
+combo_as_lineedit=true
+animate_states=true
+button_contents_shift=false
+combo_menu=true
+hide_combo_checkboxes=true
+combo_focus_rect=true
+groupbox_top_label=true
+inline_spin_indicators=true
+joined_inactive_tabs=false
+layout_spacing=6
+layout_margin=9
+scrollbar_in_view=true
+transient_scrollbar=true
+transient_groove=true
+submenu_overlap=3
+tooltip_delay=-1
+tree_branch_line=true
+contrast=1.00
+dialog_button_layout=0
+intensity=1.00
+no_inactiveness=false
+no_window_pattern=false
+opaque=kaffeine,kmplayer,subtitlecomposer,kdenlive,vlc,smplayer,smplayer2,avidemux,avidemux2_qt4,avidemux3_qt4,avidemux3_qt5,kamoso,QtCreator,VirtualBox,trojita,dragon,digikam,lyx
+reduce_menu_opacity=0
+reduce_window_opacity=0
+respect_DE=true
+saturation=1.00
+scrollable_menu=true
+submenu_delay=250
+shadowless_popup=true
+
+[GeneralColors]
+window.color=#181f21
+base.color=#181f21
+alt.base.color=#181f21
+button.color=#2c3335
+light.color=#22292b
+mid.light.color=#22292b
+dark.color=#131a1c
+mid.color=#131a1c
+highlight.color=#41707e
+inactive.highlight.color=#41707e
+text.color=#d3dae3
+window.text.color=#d3dae3
+button.text.color=#d3dae3
+disabled.text.color=#d3dae378
+tooltip.text.color=#d3dae3
+highlight.text.color=#ed3dae3
+inactive.highlight.text.color=#d3dae3cc
+link.color=#0057AE
+link.visited.color=#452886
+progress.indicator.text.color=white
+
+[Hacks]
+transparent_ktitle_label=true
+transparent_dolphin_view=false
+transparent_pcmanfm_sidepane=true
+blur_translucent=true
+transparent_menutitle=true
+respect_darkness=false
+kcapacitybar_as_progressbar=true
+force_size_grip=true
+iconless_pushbutton=true
+iconless_menu=false
+disabled_icon_opacity=100
+lxqtmainmenu_iconsize=22
+normal_default_pushbutton=true
+single_top_toolbar=true
+tint_on_mouseover=0
+transparent_pcmanfm_view=false
+middle_click_scroll=false
+no_selection_tint=false
+opaque_colors=false
+scroll_jump_workaround=false
+
+[PanelButtonCommand]
+frame=true
+frame.element=button
+frame.top=3
+frame.bottom=3
+frame.left=3
+frame.right=3
+interior=true
+interior.element=button
+indicator.size=9
+text.normal.color=#d3dae3
+text.focus.color=#ffffff
+text.press.color=white
+text.toggle.color=white
+text.shadow=0
+text.margin=1
+text.iconspacing=3
+indicator.element=arrow
+text.margin.top=2
+text.margin.bottom=2
+text.margin.left=2
+text.margin.right=2
+min_width=+0.3font
+min_height=+0.3font
+frame.expansion=0
+
+[PanelButtonTool]
+inherits=PanelButtonCommand
+text.normal.color=#d3dae3
+text.focus.color=#ffffff
+text.press.color=white
+text.toggle.color=white
+text.bold=false
+indicator.element=arrow
+indicator.size=0
+frame.expansion=0
+
+[ToolbarButton]
+frame.element=tbutton
+interior.element=tbutton
+indicator.element=tarrow
+text.normal.color=#d3dae3
+text.focus.color=#ffffff
+text.press.color=white
+text.toggle.color=white
+text.bold=false
+frame.expansion=0
+
+[ToolbarLineEdit]
+frame.element=tlineedit
+interior.element=tlineedit
+text.margin.left=1
+text.margin.right=1
+text.normal.color=#d3dae3
+text.focus.color=#ffffff
+
+[ToolbarComboBox]
+inherits=PanelButtonCommand
+interior.element=tbutton
+frame.element=tbutton
+text.normal.color=#d3dae3
+text.focus.color=#ffffff
+text.press.color=white
+text.toggle.color=white
+indicator.element=carrow
+
+[Dock]
+inherits=PanelButtonCommand
+interior.element=dock
+frame.element=dock
+frame.top=1
+frame.bottom=1
+frame.left=1
+frame.right=1
+text.normal.color=#d3dae3
+
+[DockTitle]
+inherits=PanelButtonCommand
+frame=false
+interior=false
+text.normal.color=#d3dae3
+text.focus.color=#ffffff
+text.bold=false
+
+[IndicatorSpinBox]
+inherits=PanelButtonCommand
+frame=true
+interior=true
+frame.left=1
+indicator.element=spin
+indicator.size=10
+text.normal.color=#d3dae3
+
+[RadioButton]
+inherits=PanelButtonCommand
+frame=false
+interior.element=radio
+text.normal.color=#d3dae3
+text.focus.color=#ffffff
+
+[CheckBox]
+inherits=PanelButtonCommand
+frame=false
+interior.element=checkbox
+text.normal.color=#d3dae3
+text.focus.color=#ffffff
+
+[Focus]
+inherits=PanelButtonCommand
+frame=true
+frame.element=focus
+frame.top=1
+frame.bottom=1
+frame.left=1
+frame.right=1
+frame.patternsize=20
+
+[GenericFrame]
+inherits=PanelButtonCommand
+frame=true
+interior=false
+frame.element=common
+interior.element=common
+frame.top=3
+frame.bottom=3
+frame.left=3
+frame.right=3
+
+[LineEdit]
+inherits=PanelButtonCommand
+frame.element=lineedit
+interior.element=lineedit
+text.margin.left=1
+text.margin.right=1
+
+[DropDownButton]
+inherits=PanelButtonCommand
+indicator.element=arrow-down
+
+[IndicatorArrow]
+indicator.element=arrow
+indicator.size=9
+
+[ToolboxTab]
+inherits=PanelButtonCommand
+text.normal.color=#d3dae3
+text.press.color=#ffffff
+text.focus.color=#ffffff
+
+[Tab]
+inherits=PanelButtonCommand
+interior.element=tab
+text.margin.left=8
+text.margin.right=8
+text.margin.top=2
+text.margin.bottom=2
+frame.element=tab
+indicator.element=tab
+frame.top=2
+frame.bottom=2
+frame.left=2
+frame.right=2
+text.normal.color=#d3dae3
+text.focus.color=#ffffff
+text.toggle.color=#ffffff
+frame.expansion=0
+
+[TabFrame]
+inherits=PanelButtonCommand
+frame.element=tabframe
+interior.element=tabframe
+frame.top=4
+frame.bottom=4
+frame.left=4
+frame.right=4
+
+[TreeExpander]
+inherits=PanelButtonCommand
+indicator.size=12
+indicator.element=tree
+
+[HeaderSection]
+inherits=PanelButtonCommand
+interior.element=header
+frame.element=header
+frame.top=3
+frame.bottom=3
+frame.left=1
+frame.right=1
+text.bold=false
+text.normal.color=#d3dae3
+text.focus.color=#ffffff
+text.toggle.color=#ffffff
+indicator.element=harrow
+frame.expansion=0
+
+[SizeGrip]
+indicator.element=resize-grip
+
+[Toolbar]
+inherits=PanelButtonCommand
+indicator.element=toolbar
+indicator.size=5
+text.margin=0
+interior.element=menubar
+frame.element=menubar
+text.normal.color=#d3dae3
+text.focus.color=#ffffff
+text.press.color=white
+text.toggle.color=white
+frame.left=0
+frame.right=0
+frame.top=0
+frame.bottom=1
+frame.expansion=0
+
+[Slider]
+inherits=PanelButtonCommand
+frame.element=slider
+interior.element=slider
+frame.top=3
+frame.bottom=3
+frame.left=3
+frame.right=3
+
+[SliderCursor]
+inherits=PanelButtonCommand
+frame=false
+interior.element=slidercursor
+
+[Progressbar]
+inherits=PanelButtonCommand
+frame.element=progress
+interior.element=progress
+text.margin=0
+text.normal.color=#d3dae3
+text.focus.color=#ffffff
+text.press.color=white
+text.toggle.color=white
+text.bold=false
+frame.expansion=8
+
+[ProgressbarContents]
+inherits=PanelButtonCommand
+frame=true
+frame.element=progress-pattern
+interior.element=progress-pattern
+
+[ItemView]
+inherits=PanelButtonCommand
+text.margin=0
+frame.element=itemview
+interior.element=itemview
+frame.top=2
+frame.bottom=2
+frame.left=2
+frame.right=2
+text.margin.top=2
+text.margin.bottom=2
+text.margin.left=4
+text.margin.right=4
+text.normal.color=#d3dae3
+text.focus.color=#ffffff
+text.press.color=white
+text.toggle.color=white
+frame.expansion=0
+
+[Splitter]
+indicator.size=48
+
+[Scrollbar]
+inherits=PanelButtonCommand
+indicator.element=arrow
+indicator.size=10
+
+[ScrollbarSlider]
+inherits=PanelButtonCommand
+frame.element=scrollbarslider
+interior=false
+frame.left=6
+frame.right=6
+frame.top=6
+frame.bottom=6
+indicator.element=grip
+indicator.size=13
+frame.expansion=48
+
+[ScrollbarGroove]
+inherits=PanelButtonCommand
+interior=false
+frame=false
+
+[MenuItem]
+inherits=PanelButtonCommand
+frame=true
+frame.element=menuitem
+interior.element=menuitem
+indicator.element=menuitem
+text.normal.color=#d3dae3
+text.focus.color=white
+text.margin.top=1
+text.margin.bottom=1
+text.margin.left=15
+text.margin.right=5
+frame.top=3
+frame.bottom=3
+frame.left=3
+frame.right=3
+frame.expansion=0
+
+[MenuBar]
+inherits=PanelButtonCommand
+frame.element=menubar
+interior.element=menubar
+text.normal.color=#d3dae3
+text.focus.color=#ffffff
+text.press.color=#ffffff
+text.toggle.color=#ffffff
+frame.bottom=0
+frame.expansion=0
+
+[MenuBarItem]
+inherits=PanelButtonCommand
+interior=true
+interior.element=menubaritem
+frame.element=menubaritem
+frame.top=2
+frame.bottom=2
+frame.left=2
+frame.right=2
+text.margin.left=4
+text.margin.right=4
+text.margin.top=0
+text.margin.bottom=0
+text.normal.color=#d3dae3
+text.focus.color=#ffffff
+frame.expansion=0
+
+[TitleBar]
+inherits=PanelButtonCommand
+frame=false
+interior.element=titlebar
+indicator.size=12
+indicator.element=mdi
+text.normal.color=#d3dae3c0
+text.focus.color=#d3dae3
+text.bold=false
+text.italic=true
+frame.expansion=0
+
+[ComboBox]
+inherits=PanelButtonCommand
+interior.element=combo
+frame.element=combo
+text.press.color=#d3dae3
+indicator.element=carrow
+
+[Menu]
+inherits=PanelButtonCommand
+frame.top=0
+frame.bottom=0
+frame.left=0
+frame.right=0
+frame.element=menu
+interior.element=menu
+text.normal.color=#d3dae3
+text.shadow=false
+frame.expansion=0
+
+[GroupBox]
+inherits=GenericFrame
+frame=false
+text.shadow=0
+text.margin=0
+text.normal.color=#d3dae3
+text.focus.color=#ffffff
+text.bold=false
+frame.expansion=0
+
+[TabBarFrame]
+inherits=GenericFrame
+frame=true
+frame.element=tabBarFrame
+interior=false
+frame.top=4
+frame.bottom=4
+frame.left=4
+frame.right=4
+
+[ToolTip]
+inherits=GenericFrame
+frame.top=3
+frame.bottom=3
+frame.left=3
+frame.right=3
+interior=true
+text.shadow=0
+text.margin=0
+interior.element=tooltip
+frame.element=tooltip
+frame.expansion=0
+
+[StatusBar]
+inherits=GenericFrame
+frame=false
+interior=false
+
+[Window]
+interior=true
+interior.element=window
\ No newline at end of file
diff --git a/nixos/home-manager/desktops/xfce/config/Kvantum/Everblush/Everblush.svg b/nixos/home-manager/desktops/xfce/config/Kvantum/Everblush/Everblush.svg
new file mode 100644
index 000000000..81b36ba5d
--- /dev/null
+++ b/nixos/home-manager/desktops/xfce/config/Kvantum/Everblush/Everblush.svg
@@ -0,0 +1,7368 @@
+
+
+
+
+
+ image/svg+xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/nixos/home-manager/desktops/xfce/config/Kvantum/kvantum.kvconfig b/nixos/home-manager/desktops/xfce/config/Kvantum/kvantum.kvconfig
new file mode 100644
index 000000000..9d7d47a65
--- /dev/null
+++ b/nixos/home-manager/desktops/xfce/config/Kvantum/kvantum.kvconfig
@@ -0,0 +1,2 @@
+[General]
+theme=Everblush
diff --git a/nixos/home-manager/desktops/xfce/config/eww/eww.scss b/nixos/home-manager/desktops/xfce/config/eww/eww.scss
new file mode 100644
index 000000000..5d6d30243
--- /dev/null
+++ b/nixos/home-manager/desktops/xfce/config/eww/eww.scss
@@ -0,0 +1,206 @@
+/** Color variables ***********************************/
+
+$background: #21282a;
+$background-alt: #181f21;
+$background-alt-light: #2c3335;
+$foreground: #dadada;
+$accent: #6695a3;
+
+$red: #e06e6e;
+$blue: #67b0e8;
+$green: #8ccf7e;
+$yellow: #E5C76B;
+
+
+/** Global *******************************************/
+
+* {
+ all: unset;
+}
+
+scale trough {
+ background-color: $background-alt-light;
+ border-radius: 3px;
+ min-height: 4px;
+ min-width: 16em;
+}
+trough highlight {
+ border-radius: 3px;
+}
+
+.description {
+ font-family: Roboto Condensed;
+ font-size: 18;
+ margin-top: -2px;
+}
+
+.title {
+ font-family: Roboto Condensed;
+ font-size: 14;
+}
+
+
+/** Generic window ***********************************/
+
+.genwin {
+ background-color: $background;
+ color: $foreground;
+ margin: 6px;
+ padding: 10px 15px;
+ border-radius: 3px;
+ font-family: Roboto Condensed;
+ font-size: 14;
+}
+
+
+/** Container widget *********************************/
+
+.container {
+ background-color: $background-alt;
+ padding: 10px;
+}
+
+
+/** Profile ******************************************/
+.profile {
+ background-color: $background-alt;
+}
+
+.username {
+ font-size: 18px;
+ color: #ececec;
+}
+
+.profile .extra-info {
+ font-size: 14px;
+}
+
+/*background-image is not the icon on menu button of vertical bar. It is specified in xfce4-perchannel config files*/
+.profile-picture {
+ background-image: url('images/athenaos-blue-crest.svg');
+ background-size: cover;
+ border-radius: 50%;
+}
+
+
+/** Battery and RAM circular widget ******************/
+
+.res-circle {
+ background-color: $background-alt-light;
+ border-radius: 100%;
+}
+
+.res-circle-small {
+ padding: 25px;
+ background-color: $background;
+ font-family: "feather";
+ font-size: 20px;
+}
+
+.res-mem {
+ color: $blue;
+}
+
+.res-bat {
+ color: $green;
+}
+
+.res-swap {
+ background-color: $background;
+}
+
+
+/** Weather ******************************************/
+
+.weathicon {
+ font-family: "JetBrainsMono Nerd Font";
+ font-size: 32px;
+ color: $yellow;
+}
+
+.weather .title {
+ font-size: 16px;
+}
+
+.weather .description {
+ font-size: 22px;
+ margin-top: 2px;
+}
+
+.location {
+ font-size: 14px;
+ font-family: Roboto Condensed, "feather";
+}
+
+.reload {
+ font-family: "feather"
+}
+
+
+/** Directories ***************************************/
+
+.dirs {
+ font-size: 16px;
+ padding: 10px 5px;
+ font-family: Roboto Condensed, "feather"
+}
+
+.dirs button {
+ transition: 0.1s;
+ border-radius: 3px;
+ padding: 4px 9px;
+}
+
+.dirs button:hover, .reload:hover {
+ background-color: $background-alt-light;
+}
+.dirs button:active, .reload:active {
+ background-color: $accent;
+}
+
+.disk-usage-box {
+ background-color: rgba(255,255,255,0.07);
+ border-radius: 3px;
+ padding: 20px;
+ margin: 13px;
+ font-size: 18px;
+ font-family: Roboto Condensed, "feather";
+}
+.disk-usage-icon {
+ font-size: 24px;
+}
+
+
+/** System *****************************************/
+
+.system {
+ padding: 20px;
+}
+
+.volume-icon,
+.brightness-icon,
+.mic-icon {
+ font-size: 20px;
+ font-family: "feather";
+}
+
+.volume-icon {
+ color: $green;
+}
+.volbar trough highlight {
+ background-color: $green;
+}
+
+.brightness-icon {
+ color: $yellow;
+}
+.bribar trough highlight {
+ background-color: $yellow;
+}
+
+.mic-icon {
+ color: $blue;
+}
+.micbar trough highlight {
+ background-color: $blue;
+}
diff --git a/nixos/home-manager/desktops/xfce/config/eww/eww.yuck b/nixos/home-manager/desktops/xfce/config/eww/eww.yuck
new file mode 100644
index 000000000..2cd579d02
--- /dev/null
+++ b/nixos/home-manager/desktops/xfce/config/eww/eww.yuck
@@ -0,0 +1,2 @@
+;; Sidebar
+(include "sidebar.yuck")
diff --git a/nixos/home-manager/desktops/xfce/config/eww/images/athenaos-blue-crest.svg b/nixos/home-manager/desktops/xfce/config/eww/images/athenaos-blue-crest.svg
new file mode 100755
index 000000000..793731104
--- /dev/null
+++ b/nixos/home-manager/desktops/xfce/config/eww/images/athenaos-blue-crest.svg
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/nixos/home-manager/desktops/xfce/config/eww/images/avatar-00.png b/nixos/home-manager/desktops/xfce/config/eww/images/avatar-00.png
new file mode 100644
index 000000000..ef2d72567
Binary files /dev/null and b/nixos/home-manager/desktops/xfce/config/eww/images/avatar-00.png differ
diff --git a/nixos/home-manager/desktops/xfce/config/eww/images/avatar.png b/nixos/home-manager/desktops/xfce/config/eww/images/avatar.png
new file mode 100644
index 000000000..a00390a85
Binary files /dev/null and b/nixos/home-manager/desktops/xfce/config/eww/images/avatar.png differ
diff --git a/nixos/home-manager/desktops/xfce/config/eww/scripts/battery b/nixos/home-manager/desktops/xfce/config/eww/scripts/battery
new file mode 100755
index 000000000..da8b6d93b
--- /dev/null
+++ b/nixos/home-manager/desktops/xfce/config/eww/scripts/battery
@@ -0,0 +1,33 @@
+#!/usr/bin/env bash
+
+BAT=`ls /sys/class/power_supply | grep BAT | head -n 1`
+dir="/sys/class/power_supply/${BAT}/status"
+
+# Battery percentage
+bat_perc() {
+ cat /sys/class/power_supply/${BAT}/capacity
+}
+
+# Battery status
+bat_stat() {
+ cat /sys/class/power_supply/${BAT}/status
+}
+
+# Icon indicating if device is charging or not
+# Requires icomoon feather font
+bat_icon() {
+ read -r status < "$dir"
+ if [ $status == "Discharging" ]; then
+ printf "";
+ else
+ printf "";
+ fi
+}
+
+if [[ "$1" == "--perc" ]]; then
+ bat_perc
+elif [[ "$1" == "--stat" ]]; then
+ bat_stat
+elif [[ "$1" == "--icon" ]]; then
+ bat_icon
+fi
\ No newline at end of file
diff --git a/nixos/home-manager/desktops/xfce/config/eww/scripts/blight b/nixos/home-manager/desktops/xfce/config/eww/scripts/blight
new file mode 100755
index 000000000..2619c278b
--- /dev/null
+++ b/nixos/home-manager/desktops/xfce/config/eww/scripts/blight
@@ -0,0 +1,7 @@
+#!/usr/bin/env bash
+
+get_blight() {
+ brightnessctl -m -d intel_backlight | awk -F, '{print substr($4, 0, length($4)-1)}' | tr -d '%'
+}
+
+get_blight
\ No newline at end of file
diff --git a/nixos/home-manager/desktops/xfce/config/eww/scripts/cpu b/nixos/home-manager/desktops/xfce/config/eww/scripts/cpu
new file mode 100755
index 000000000..16ebb3da5
--- /dev/null
+++ b/nixos/home-manager/desktops/xfce/config/eww/scripts/cpu
@@ -0,0 +1,42 @@
+#!/usr/bin/env bash
+
+## Files and Data
+PREV_TOTAL=0
+PREV_IDLE=0
+cpuFile="/tmp/.cpu_usage"
+
+## Get CPU usage
+get_cpu() {
+ if [[ -f "${cpuFile}" ]]; then
+ fileCont=$(cat "${cpuFile}")
+ PREV_TOTAL=$(echo "${fileCont}" | head -n 1)
+ PREV_IDLE=$(echo "${fileCont}" | tail -n 1)
+ fi
+
+ CPU=(`cat /proc/stat | grep '^cpu '`) # Get the total CPU statistics.
+ unset CPU[0] # Discard the "cpu" prefix.
+ IDLE=${CPU[4]} # Get the idle CPU time.
+
+ # Calculate the total CPU time.
+ TOTAL=0
+
+ for VALUE in "${CPU[@]:0:4}"; do
+ let "TOTAL=$TOTAL+$VALUE"
+ done
+
+ if [[ "${PREV_TOTAL}" != "" ]] && [[ "${PREV_IDLE}" != "" ]]; then
+ # Calculate the CPU usage since we last checked.
+ let "DIFF_IDLE=$IDLE-$PREV_IDLE"
+ let "DIFF_TOTAL=$TOTAL-$PREV_TOTAL"
+ let "DIFF_USAGE=(1000*($DIFF_TOTAL-$DIFF_IDLE)/$DIFF_TOTAL+5)/10"
+ echo "${DIFF_USAGE}"
+ else
+ echo "?"
+ fi
+
+ # Remember the total and idle CPU times for the next check.
+ echo "${TOTAL}" > "${cpuFile}"
+ echo "${IDLE}" >> "${cpuFile}"
+}
+
+get_cpu
\ No newline at end of file
diff --git a/nixos/home-manager/desktops/xfce/config/eww/scripts/disk b/nixos/home-manager/desktops/xfce/config/eww/scripts/disk
new file mode 100755
index 000000000..f8170a548
--- /dev/null
+++ b/nixos/home-manager/desktops/xfce/config/eww/scripts/disk
@@ -0,0 +1,9 @@
+#!/usr/bin/env bash
+
+## Get Free Disk Space
+get_disk() {
+ free=$(df -h / | awk '{print $3}' | tail -n 1 | sed 's/G/GB/')
+ echo "$free"
+}
+
+get_disk
\ No newline at end of file
diff --git a/nixos/home-manager/desktops/xfce/config/eww/scripts/mem b/nixos/home-manager/desktops/xfce/config/eww/scripts/mem
new file mode 100755
index 000000000..f838a402e
--- /dev/null
+++ b/nixos/home-manager/desktops/xfce/config/eww/scripts/mem
@@ -0,0 +1,31 @@
+#!/usr/bin/env bash
+
+# Memory used by percentage
+mem_perc() {
+ printf "%.0f\n" $(free -m | grep Mem | awk '{print ($3/$2)*100}')
+}
+
+# Memory used by value
+mem_val() {
+ printf $(free -h --si | grep Mem | awk '{print($3)}')
+}
+
+# Swap
+swap_val() {
+ printf $(free -h --si | grep Swap | awk '{print($3)}')
+}
+
+# Swap (Percentage)
+swap_perc() {
+ printf "%.0f\n" $(free -m | grep Swap | awk '{print ($3/$2)*100}')
+}
+
+if [[ "$1" == "--mem_perc" ]]; then
+ mem_perc
+elif [[ "$1" == "--mem_val" ]]; then
+ mem_val
+elif [[ "$1" == "--swap_perc" ]]; then
+ swap_perc
+elif [[ "$1" == "--swap_val" ]]; then
+ swap_val
+fi
\ No newline at end of file
diff --git a/nixos/home-manager/desktops/xfce/config/eww/scripts/opendir b/nixos/home-manager/desktops/xfce/config/eww/scripts/opendir
new file mode 100755
index 000000000..153598e38
--- /dev/null
+++ b/nixos/home-manager/desktops/xfce/config/eww/scripts/opendir
@@ -0,0 +1,9 @@
+#!/usr/bin/env bash
+
+if [[ "$1" == "--path" ]]; then
+ thunar $2
+else
+ notify-send -i "notification" "No such directory!"
+fi
+
+# vim:ft=bash:nowrap
diff --git a/nixos/home-manager/desktops/xfce/config/eww/scripts/uptime b/nixos/home-manager/desktops/xfce/config/eww/scripts/uptime
new file mode 100755
index 000000000..ed87e686c
--- /dev/null
+++ b/nixos/home-manager/desktops/xfce/config/eww/scripts/uptime
@@ -0,0 +1,28 @@
+#!/usr/bin/env bash
+
+get_uptime() {
+ s=$(< /proc/uptime)
+ s=${s/.*}
+
+ d="$((s / 60 / 60 / 24)) days"
+ h="$((s / 60 / 60 % 24)) hours"
+ m="$((s / 60 % 60)) mins"
+
+ # Remove plural if < 2.
+ ((${d/ *} == 1)) && d=${d/s}
+ ((${h/ *} == 1)) && h=${h/s}
+ ((${m/ *} == 1)) && m=${m/s}
+
+ # Hide empty fields.
+ ((${d/ *} == 0)) && unset d
+ ((${h/ *} == 0)) && unset h
+ ((${m/ *} == 0)) && unset m
+
+ uptime=${d:+$d, }${h:+$h, }$m
+ uptime=${uptime%', '}
+ uptime=${uptime:-$s secs}
+
+ echo ${uptime}
+}
+
+get_uptime
\ No newline at end of file
diff --git a/nixos/home-manager/desktops/xfce/config/eww/scripts/vol b/nixos/home-manager/desktops/xfce/config/eww/scripts/vol
new file mode 100755
index 000000000..72e88ec76
--- /dev/null
+++ b/nixos/home-manager/desktops/xfce/config/eww/scripts/vol
@@ -0,0 +1,17 @@
+#!/usr/bin/env bash
+
+## Get output volume with amixer
+get_vol() {
+ amixer -D pulse sget Master | grep 'Left:' | awk -F'[][]' '{ print $2 }' | tr -d '%'
+}
+
+## Microphone
+get_micro() {
+ amixer -D pulse sget Capture | grep 'Left:' | awk -F'[][]' '{ print $2 }' | tr -d '%'
+}
+
+if [[ "$1" == "--vol" ]]; then
+ get_vol
+elif [[ "$1" == "--micro" ]]; then
+ get_micro
+fi
diff --git a/nixos/home-manager/desktops/xfce/config/eww/scripts/weather b/nixos/home-manager/desktops/xfce/config/eww/scripts/weather
new file mode 100755
index 000000000..0d5835019
--- /dev/null
+++ b/nixos/home-manager/desktops/xfce/config/eww/scripts/weather
@@ -0,0 +1,207 @@
+#!/usr/bin/env bash
+
+# go here to get api and documentation https://openweathermap.org/api
+
+
+# Documentation for weather quote below
+# https://openweathermap.org/weather-conditions#Weather-Condition-Codes-2
+# Documentation of Icons to use for weather
+# https://erikflowers.github.io/weather-icons/api-list.html
+
+updateweather() {
+[ -d /tmp/weather ] || mkdir /tmp/weather
+# Grab your own key from openweathermap
+KEY="60d7b980f7da638967fed7f0aaf80f84"
+ID="4517009"
+UNIT="metric"
+weat=$(curl -sf "https://api.openweathermap.org/data/2.5/weather?id="$ID"&appid="$KEY"&units="$UNIT"")
+
+ID=$(echo "$weat" | jq -r ".weather[].id")
+LOCATION=$(echo "$weat" | jq -r ".name")
+
+desc=""
+icon=""
+
+if [ "$ID" = 200 ]; then
+ desc="Thunderstorm With Light Rain"
+ icon=""
+elif [ "$ID" = 201 ]; then
+ desc="Thunderstorm With Rain"
+ icon=""
+elif [ "$ID" = 202 ]; then
+ desc="Thunderstorm With Heavy Rain"
+ icon=""
+elif [ "$ID" = 210 ]; then
+ desc="Light Thunderstorm"
+ icon=""
+elif [ "$ID" = 211 ]; then
+ desc="Thunderstorm"
+ icon=""
+elif [ "$ID" = 212 ]; then
+ desc="Heavy Thunderstorm"
+ icon=""
+elif [ "$ID" = 221 ]; then
+ desc="Ragged Thunderstorm"
+ icon=""
+elif [ "$ID" = 230 ]; then
+ desc="Thunderstorm With Light Drizzle"
+ icon=""
+elif [ "$ID" = 231 ]; then
+ desc="Thunderstorm With Drizzle"
+ icon=""
+elif [ "$ID" = 232 ]; then
+ desc="Thunderstorm With Heavy Drizzle"
+ icon=""
+elif [ "$ID" = 300 ]; then
+ desc="Light Intensity Drizzle"
+ icon=""
+elif [ "$ID" = 301 ]; then
+ desc="Drizzle"
+ icon=""
+elif [ "$ID" = 302 ]; then
+ desc="Heavy Intensity Drizzle"
+ icon=""
+elif [ "$ID" = 310 ]; then
+ desc="Light Intensity Drizzle Rain"
+ icon=""
+elif [ "$ID" = 311 ]; then
+ desc="Drizzle Rain"
+ icon=""
+elif [ "$ID" = 312 ]; then
+ desc="Heavy Intensity Drizzle Rain"
+ icon=""
+elif [ "$ID" = 313 ]; then
+ desc="Shower Rain And Drizzle"
+ icon=""
+elif [ "$ID" = 314 ]; then
+ desc="Heavy Shower Rain And Drizzle"
+ icon=""
+elif [ "$ID" = 321 ]; then
+ desc="Shower Drizzle"
+ icon=""
+elif [ "$ID" = 500 ]; then
+ desc="Light Rain"
+ icon=""
+elif [ "$ID" = 501 ]; then
+ desc="Moderate Rain"
+ icon=""
+elif [ "$ID" = 502 ]; then
+ desc="Heavy Intensity Rain"
+ icon=""
+elif [ "$ID" = 503 ]; then
+ desc="Very Heavy Rain"
+ icon=""
+elif [ "$ID" = 504 ]; then
+ desc="Extreme Rain"
+ icon=""
+elif [ "$ID" = 511 ]; then
+ desc="Freezing Rain"
+ icon=""
+elif [ "$ID" = 520 ]; then
+ desc="Light Intensity Shower Rain"
+ icon=""
+elif [ "$ID" = 521 ]; then
+ desc="Shower Rain"
+ icon=""
+elif [ "$ID" = 522 ]; then
+ desc="Heavy Intensity Shower Rain"
+ icon=""
+elif [ "$ID" = 531 ]; then
+ desc="Ragged Shower Rain"
+ icon=""
+elif [ "$ID" = 600 ]; then
+ desc="Light Snow"
+ icon=""
+elif [ "$ID" = 601 ]; then
+ desc="Snow"
+ icon=""
+elif [ "$ID" = 602 ]; then
+ desc="Heavy Snow"
+ icon=""
+elif [ "$ID" = 611 ]; then
+ desc="Sleet"
+ icon=""
+elif [ "$ID" = 612 ]; then
+ desc="Light Shower Sleet"
+ icon=""
+elif [ "$ID" = 613 ]; then
+ desc="Shower Sleet"
+ icon=""
+elif [ "$ID" = 615 ]; then
+ desc="Light Rain And Snow"
+ icon=""
+elif [ "$ID" = 616 ]; then
+ desc="Rain And Snow"
+ icon=""
+elif [ "$ID" = 620 ]; then
+ desc="Light Shower Snow"
+ icon=""
+elif [ "$ID" = 621 ]; then
+ desc="Shower Snow"
+ icon=""
+elif [ "$ID" = 622 ]; then
+ desc="Heavy Shower Snow"
+ icon=""
+elif [ "$ID" = 701 ]; then
+ desc="Mist"
+ icon=""
+elif [ "$ID" = 711 ]; then
+ desc="Smoke"
+ icon=""
+elif [ "$ID" = 721 ]; then
+ desc="Haze"
+ icon=""
+elif [ "$ID" = 731 ]; then
+ desc="Sand/ Dust Whirls"
+ icon=""
+elif [ "$ID" = 741 ]; then
+ desc="Fog"
+ icon=""
+elif [ "$ID" = 751 ]; then
+ desc="Sand"
+ icon=""
+elif [ "$ID" = 761 ]; then
+ desc="Dust"
+ icon=""
+elif [ "$ID" = 762 ]; then
+ desc="Volcanic Ash"
+ icon=""
+elif [ "$ID" = 771 ]; then
+ desc="Squalls"
+ icon=""
+elif [ "$ID" = 781 ]; then
+ desc="Tornado"
+ icon=""
+elif [ "$ID" = 800 ]; then
+ desc="Clear Sky"
+ icon=""
+elif [ "$ID" = 801 ]; then
+ desc="Few Clouds"
+ icon=""
+elif [ "$ID" = 802 ]; then
+ desc="Scattered Clouds"
+ icon=""
+elif [ "$ID" = 803 ]; then
+ desc="Broken Clouds"
+ icon=""
+elif [ "$ID" = 804 ]; then
+ desc="Overcast Clouds"
+ icon=""
+fi
+if [ "$desc" = "" ]; then
+ desc="N/A"
+ icon=""
+fi
+echo "$weat" | jq ".main.temp" | cut -d "." -f 1 > /tmp/weather/temp
+echo "$LOCATION" > /tmp/weather/location
+echo "$desc" > /tmp/weather/description
+echo "$icon" > /tmp/weather/icon
+}
+
+case $1 in
+ --icon) cat /tmp/weather/icon ;;
+ --desc) cat /tmp/weather/description ;;
+ --temp) cat /tmp/weather/temp ;;
+ --location) cat /tmp/weather/location ;;
+ *) updateweather ;;
+esac
diff --git a/nixos/home-manager/desktops/xfce/config/eww/scripts/weather_reload b/nixos/home-manager/desktops/xfce/config/eww/scripts/weather_reload
new file mode 100755
index 000000000..cedaf2b52
--- /dev/null
+++ b/nixos/home-manager/desktops/xfce/config/eww/scripts/weather_reload
@@ -0,0 +1,3 @@
+#!/usr/bin/env bash
+# I know this sucks and perhaps I don't have any better idea
+~/.config/eww/scripts/weather & eww reload
\ No newline at end of file
diff --git a/nixos/home-manager/desktops/xfce/config/eww/sidebar.yuck b/nixos/home-manager/desktops/xfce/config/eww/sidebar.yuck
new file mode 100644
index 000000000..77b00eef2
--- /dev/null
+++ b/nixos/home-manager/desktops/xfce/config/eww/sidebar.yuck
@@ -0,0 +1,94 @@
+;; **** Variables ******************************************
+(include "variables.yuck")
+
+
+;; **** Widgets ********************************************
+
+;; Weather
+(include "sidebar/weather.yuck")
+
+;; Memory
+(include "sidebar/memory.yuck")
+
+;; Battery
+(include "sidebar/battery.yuck")
+
+;; Date
+(include "sidebar/date.yuck")
+
+;; Updates
+(include "sidebar/pacman_updates.yuck")
+
+;; Profile
+(include "sidebar/profile.yuck")
+
+;; Disk/Storage
+(include "sidebar/disk.yuck")
+
+;; System stuffs
+(include "sidebar/system.yuck")
+
+;; *********************************************************
+
+
+;; **** Sidebar ********************************************
+
+(defwidget sidebar []
+
+ (box :class "container"
+ :orientation "v"
+ :space-evenly false
+
+ (box :orientation "h"
+ :height 118
+ (profile)
+ )
+
+ (box :orientation "h"
+ :space-evenly false
+ (box :width 170
+ :height 340
+ :orientation "v"
+ :space-evenly false
+ (box :height 170
+ (weather))
+ (box :height 170
+ (memory))
+ )
+
+ (box :width 170
+ :height 340
+ :orientation "v"
+ :space-evenly false
+ (box :height 85
+ (date))
+ (box :height 170
+ (battery))
+ (box :height 85
+ (updates))
+ )
+ )
+
+ (box :orientation "v"
+ (system)
+ )
+
+ (box :orientation "v"
+ (disk)
+ )
+ )
+)
+
+;; **** Sidebar Window ************************************
+
+(defwindow sidebar :stacking "fg"
+ :focusable "false"
+ :screen 1
+ :windowtype "dock"
+ :geometry (geometry :x 0
+ :y 0
+ :anchor "center right")
+ (sidebar)
+)
+
+;; *********************************************************
diff --git a/nixos/home-manager/desktops/xfce/config/eww/sidebar/battery.yuck b/nixos/home-manager/desktops/xfce/config/eww/sidebar/battery.yuck
new file mode 100644
index 000000000..0836bdab1
--- /dev/null
+++ b/nixos/home-manager/desktops/xfce/config/eww/sidebar/battery.yuck
@@ -0,0 +1,27 @@
+(defwidget battery []
+ (box :class "genwin"
+ :space-evenly "true"
+ :orientation "v"
+
+ (box :orientation "v"
+ :space-evenly "false"
+ :valign "center"
+ :halign "center"
+ :spacing 15
+
+ (label :text "${BAT_PERCENTAGE}%, ${BAT_STATUS}"
+ :class "title")
+
+ (box :class "res-circle"
+ :valign "center"
+ :halign "center"
+ (circular-progress :class "res-bat"
+ :value BAT_PERCENTAGE
+ :thickness 4
+ (label :class "res-circle-small"
+ :text "${BAT_ICON}")
+ )
+ )
+ )
+ )
+)
\ No newline at end of file
diff --git a/nixos/home-manager/desktops/xfce/config/eww/sidebar/date.yuck b/nixos/home-manager/desktops/xfce/config/eww/sidebar/date.yuck
new file mode 100644
index 000000000..7512c7ba0
--- /dev/null
+++ b/nixos/home-manager/desktops/xfce/config/eww/sidebar/date.yuck
@@ -0,0 +1,17 @@
+(defwidget date []
+ (box :class "genwin"
+ (box :orientation "v"
+ :space-evenly "false"
+ :halign "start"
+ :valign "center"
+
+ (label :text "${day}"
+ :halign "start"
+ :class "title")
+
+ (label :text "${month} ${date}"
+ :class "description"
+ :halign "start")
+ )
+ )
+)
\ No newline at end of file
diff --git a/nixos/home-manager/desktops/xfce/config/eww/sidebar/disk.yuck b/nixos/home-manager/desktops/xfce/config/eww/sidebar/disk.yuck
new file mode 100644
index 000000000..444f3ef60
--- /dev/null
+++ b/nixos/home-manager/desktops/xfce/config/eww/sidebar/disk.yuck
@@ -0,0 +1,34 @@
+(defwidget disk []
+ (box :class "genwin"
+ :orientation "h"
+ :space-evenly false
+
+ (box :orientation "v"
+ :halign "center"
+ :valign "center"
+ :space-evenly false
+ :class "disk-usage-box"
+ :spacing 5
+ (label :text ""
+ :class "disk-usage-icon")
+ (label :text "${DISK_USAGE} "
+ :class "disk-usage-value")
+ )
+
+ (box :orientation "v"
+ :halign "center"
+ :valign "center"
+ :class "dirs"
+
+ (button :onclick "scripts/opendir --path ~/"
+ (label :text " → ~/Home"
+ :halign "start"))
+ (button :onclick "scripts/opendir --path ~/Downloads"
+ (label :text " → ~/Downloads"
+ :halign "start"))
+ (button :onclick "scripts/opendir --path ~/.config"
+ (label :text " → ~/.config"
+ :halign "start"))
+ )
+ )
+)
diff --git a/nixos/home-manager/desktops/xfce/config/eww/sidebar/memory.yuck b/nixos/home-manager/desktops/xfce/config/eww/sidebar/memory.yuck
new file mode 100644
index 000000000..5a5870925
--- /dev/null
+++ b/nixos/home-manager/desktops/xfce/config/eww/sidebar/memory.yuck
@@ -0,0 +1,26 @@
+(defwidget memory []
+ (box :class "genwin"
+ :space-evenly "true"
+
+ (box :orientation "v"
+ :space-evenly "false"
+ :valign "center"
+ :halign "center"
+ :spacing 15
+
+ (label :text "Mem: ${MEM_USAGE}"
+ :class "title")
+
+ (box :class "res-circle"
+ :valign "center"
+ :halign "center"
+ (circular-progress :class "res-mem"
+ :value MEM_USAGE_PERC
+ :thickness 4
+ (label :class "res-circle-small"
+ :text "")
+ )
+ )
+ )
+ )
+)
\ No newline at end of file
diff --git a/nixos/home-manager/desktops/xfce/config/eww/sidebar/pacman_updates.yuck b/nixos/home-manager/desktops/xfce/config/eww/sidebar/pacman_updates.yuck
new file mode 100644
index 000000000..3742c9a8b
--- /dev/null
+++ b/nixos/home-manager/desktops/xfce/config/eww/sidebar/pacman_updates.yuck
@@ -0,0 +1,15 @@
+(defwidget updates []
+ (box :class "genwin"
+ (box :orientation "v"
+ :space-evenly "false"
+ :halign "start"
+ :valign "center"
+ (label :text "Updates"
+ :halign "start"
+ :class "title")
+ (label :text "${UPDATES} available"
+ :class "description"
+ :halign "start")
+ )
+ )
+)
\ No newline at end of file
diff --git a/nixos/home-manager/desktops/xfce/config/eww/sidebar/profile.yuck b/nixos/home-manager/desktops/xfce/config/eww/sidebar/profile.yuck
new file mode 100644
index 000000000..9b3b35d2d
--- /dev/null
+++ b/nixos/home-manager/desktops/xfce/config/eww/sidebar/profile.yuck
@@ -0,0 +1,30 @@
+(defwidget profile []
+ (box :class "genwin profile"
+ (box :orientation "h"
+ :valign "center"
+ :halign "start"
+ :space-evenly "false"
+ :spacing 17
+
+ (box :class "profile-picture"
+ :height 48
+ :width 48
+ )
+
+ (box :orientation "v"
+ :space-evenly "false"
+ :valign "center"
+
+ (label :text "Hello ${username} !"
+ :class "username"
+ :halign "start"
+ )
+
+ (label :text "Uptime: ${uptime}"
+ :class "extra-info"
+ :halign "start"
+ )
+ )
+ )
+ )
+)
\ No newline at end of file
diff --git a/nixos/home-manager/desktops/xfce/config/eww/sidebar/system.yuck b/nixos/home-manager/desktops/xfce/config/eww/sidebar/system.yuck
new file mode 100644
index 000000000..5c734b175
--- /dev/null
+++ b/nixos/home-manager/desktops/xfce/config/eww/sidebar/system.yuck
@@ -0,0 +1,49 @@
+(defwidget system []
+ (box :class "genwin system"
+
+ (box :orientation "v"
+ :halign "center"
+ :valign "center"
+ :spacing 12
+
+ (box :orientation "h"
+ :space-evenly "false"
+ (label :class "volume-icon"
+ :text " ")
+ (scale :min 0
+ :max 101
+ :value volume
+ :orientation "h"
+ :onchange "amixer -D pulse sset Master {}%"
+ :class "volbar"
+ )
+ )
+
+ (box :orientation "h"
+ :space-evenly "false"
+ (label :class "brightness-icon"
+ :text " ")
+ (scale :min 0
+ :max 101
+ :value brightness
+ :orientation "h"
+ :onchange "brightnessctl set {}%"
+ :class "bribar"
+ )
+ )
+
+ (box :orientation "h"
+ :space-evenly "false"
+ (label :class "mic-icon"
+ :text " ")
+ (scale :min 0
+ :max 101
+ :value micro
+ :orientation "h"
+ :onchange "amixer -D pulse sset Capture {}%"
+ :class "micbar"
+ )
+ )
+ )
+ )
+)
\ No newline at end of file
diff --git a/nixos/home-manager/desktops/xfce/config/eww/sidebar/weather.yuck b/nixos/home-manager/desktops/xfce/config/eww/sidebar/weather.yuck
new file mode 100644
index 000000000..9938fb86b
--- /dev/null
+++ b/nixos/home-manager/desktops/xfce/config/eww/sidebar/weather.yuck
@@ -0,0 +1,40 @@
+(defwidget weather []
+ (box :class "genwin weather"
+ (box :orientation "v"
+ :space-evenly "false"
+
+ (box :orientation "v"
+ :space-evenly "false"
+
+ (button :class "reload"
+ :onclick "scripts/weather_reload"
+ (label :text ""
+ :halign "end"))
+
+ (label :class "location"
+ :wrap "true"
+ :text " ${location}"
+ :halign "start"
+ )
+
+ (label :class "description"
+ :text "${tempt}°C"
+ :halign "start"
+ )
+
+ (label :class "title"
+ :wrap "true"
+ :text descr
+ :halign "start"
+ )
+ )
+
+ (box :halign "end"
+ :valign "end"
+ (label :class "weathicon"
+ :text "${weathericon} "
+ )
+ )
+ )
+ )
+)
\ No newline at end of file
diff --git a/nixos/home-manager/desktops/xfce/config/eww/variables.yuck b/nixos/home-manager/desktops/xfce/config/eww/variables.yuck
new file mode 100644
index 000000000..39edfe4c8
--- /dev/null
+++ b/nixos/home-manager/desktops/xfce/config/eww/variables.yuck
@@ -0,0 +1,45 @@
+;; Resource vars
+
+(defpoll CPU_USAGE :interval "1s" "~/.config/eww/scripts/cpu")
+
+(defpoll MEM_USAGE :interval "1s" "~/.config/eww/scripts/mem --mem_val")
+(defpoll MEM_USAGE_PERC :interval "1s" "~/.config/eww/scripts/mem --mem_perc")
+(defpoll SWAP_USAGE :interval "1s" "~/.config/eww/scripts/mem --swap_val")
+(defpoll SWAP_USAGE_PERC :interval "1s" "~/.config/eww/scripts/mem --swap_perc")
+
+(defpoll DISK_USAGE :interval "1s" "~/.config/eww/scripts/disk")
+
+(defpoll brightness :interval "1s" "~/.config/eww/scripts/blight")
+(defpoll volume :interval "1s" "~/.config/eww/scripts/vol --vol")
+(defpoll micro :interval "1s" "~/.config/eww/scripts/vol --micro")
+
+(defpoll BAT_PERCENTAGE :interval "1s" "~/.config/eww/scripts/battery --perc")
+(defpoll BAT_ICON :interval "1s" "~/.config/eww/scripts/battery --icon")
+(defpoll BAT_STATUS :interval "1s" "~/.config/eww/scripts/battery --stat")
+
+
+
+;; Weather vars
+(defpoll weathericon :interval "1h" "~/.config/eww/scripts/weather --icon")
+(defpoll tempt :interval "1h" "~/.config/eww/scripts/weather --temp" )
+(defpoll descr :interval "1h" "~/.config/eww/scripts/weather --desc")
+(defpoll location :interval "1h" "~/.config/eww/scripts/weather --location")
+
+
+
+;; Date vars
+(defpoll date :interval "1s" "date '+%d'")
+(defpoll month :interval "1s" "date '+%b'")
+(defpoll day :interval "1s" "date '+%A'")
+
+
+
+;; Profile stuffs
+(defpoll username :interval "69420s" `whoami`)
+(defpoll host :interval "69420s" `hostname`)
+(defpoll uptime :interval "1s" `~/.config/eww/scripts/uptime`)
+
+
+
+;; Available updates (FOR PACMAN ONLY)
+(defpoll UPDATES :interval "900s" `checkupdates | wc -l`)
\ No newline at end of file
diff --git a/nixos/home-manager/desktops/xfce/config/gtk-3.0/gtk.css b/nixos/home-manager/desktops/xfce/config/gtk-3.0/gtk.css
new file mode 100644
index 000000000..cc53cc179
--- /dev/null
+++ b/nixos/home-manager/desktops/xfce/config/gtk-3.0/gtk.css
@@ -0,0 +1,243 @@
+/*
+ Buttload of CSS
+ For beauty, probably!
+
+ NOTE:
+ Don't expect everything inside this thing to work out of the box. Why?
+ If you look at the IDs (starting with `#`), you'll see that many of them
+ end with a number (example: `#pager-4`). Well, that number is set by the
+ system and you gotta figure out the number ID of the thing yourself,
+ using gtk inspector:
+
+ GTK_DEBUG=interactive
+*/
+
+
+/**************** xfce4-panel stuffs **********************/
+
+.xfce4-panel button,
+.genmon_plugin,
+#docklike-plugin .group {
+ transition: 0.2s;
+ border-radius: 3px;
+ margin: 5px;
+ box-shadow: none;
+ background-color: rgba(255, 255, 255, 0.04);
+}
+
+.xfce4-panel.background .tasklist button {
+ font-size: 12px;
+}
+
+.xfce4-panel.background button:active,
+.xfce4-panel.background button:hover,
+.xfce4-panel.background button:active:hover,
+.xfce4-panel.background .tasklist button:active,
+.xfce4-panel.background .tasklist button:hover,
+.xfce4-panel.background .tasklist button:active:hover,
+#docklike-plugin .hover_group {
+ background-color: rgba(255, 255, 255, 0.07);
+}
+
+.xfce4-panel button:checked {
+ background-color: rgba(255, 255, 255, 0.1);
+}
+
+/*
+.genmon_plugin {
+ padding: 5px;
+}
+
+.genmon_plugin image {
+ margin-left: 5px;
+}
+
+.genmon_plugin label {
+ margin-left: 0px;
+}
+*/
+
+/* Docklike plugin */
+#docklike-plugin .group {
+ margin: 5px 2.5px;
+}
+
+#docklike-plugin button:first-child {
+ margin-left: 5px;
+}
+
+#docklike-plugin button:last-child {
+ margin-right: 5px;
+}
+
+/* Workspace indicator... */
+#pager-4 grid {
+ background-color: rgba(255, 255, 255, 0.05);
+ margin: 4px;
+ border-radius: 3px;
+}
+
+#pager-4 button {
+ padding: 3px;
+ margin: 5px;
+ background-color: transparent;
+}
+
+#pager-4 button:hover {
+ background-color: rgba(255, 255, 255, 0.05);
+}
+
+#pager-4 button:checked {
+ box-shadow: none;
+ background-color: rgba(255, 255, 255, 0.1);
+ color: #FFF;
+}
+
+/* 2 Separators before and after the genmon applets */
+#separator-12,
+#separator-2 {
+ color: rgba(255, 255, 255, 0.2);
+}
+
+/* Whiskermenu */
+#whiskermenu-8 button {
+ background-color: #67b0e8;
+}
+
+window#whiskermenu-window>frame>border {
+ border: 5px solid transparent;
+}
+
+window#whiskermenu-window scrolledwindow {
+ margin: 2px;
+ border: none;
+}
+
+#whiskermenu-window treeview {
+ padding: 7px 0px 7px 10px;
+}
+
+#whiskermenu-window iconview {
+ font-size: 12px;
+ padding: 5px 0px;
+ border-radius: 3px;
+}
+
+/*********** Power button on the panel **************/
+#launcher-1 button {
+ background-color: #8ccf7e;
+}
+
+/******************* Thunar *************************/
+
+* {
+ -ThunarAbstractIconView-row-spacing: 10px;
+ -ThunarAbstractIconView-column-spacing: 10px;
+}
+
+.thunar .standard-view .view {
+ padding: 5px 14px;
+}
+
+.thunar .sidebar .view {
+ padding-left: 0px;
+}
+
+.thunar .sidebar .view:selected {
+ background-color: rgba(255, 255, 255, 0.1);
+ border-left: 2px solid #6695a3;
+}
+
+
+/************* VTE Terminal (Padding) *******************/
+
+VteTerminal,
+vte-terminal {
+ padding: 15px;
+}
+
+
+/************* Xfsession logout dialog ******************/
+
+.xfsm-logout-dialog {
+ border: 2px solid #181f21;
+}
+
+.xfsm-logout-dialog * {
+ margin: 3px;
+}
+
+
+/**************** Xfce notificaton **********************/
+
+#XfceNotifyWindow {
+ border: 0px;
+ /* Let picom decide the border radius */
+ border-radius: 0px;
+
+}
+
+#XfceNotifyWindow progressbar {
+ border-radius: 5px;
+}
+
+#XfceNotifyWindow progressbar progress,
+#XfceNotifyWindow progressbar trough {
+ min-height: 4px;
+}
+
+#XfceNotifyWindow image {
+ -gtk-icon-transform: scale(0.5);
+ background-color: rgba(255, 255, 255, 0.05);
+ border-radius: 3px;
+}
+
+
+/********* Context menus / Right click menus ***************/
+
+menu,
+.context-menu {
+ border: none;
+}
+
+menu menuitem,
+.menu menuitem,
+.context-menu menuitem {
+ padding: 6px 16px;
+}
+
+menu menuitem:hover,
+.menu menuitem:hover,
+.context-menu menuitem:hover {
+ background-color: rgba(255, 255, 255, 0.07);
+ color: white;
+}
+
+.csd.popup decoration {
+ box-shadow: 0px 3px 6px rgba(0, 0, 0, 0.45), 0px 0px 0px 0px #181f21;
+}
+
+
+/**************** Alt+Tab window **********************/
+
+#xfwm-tabwin {
+ border-radius: 5px;
+ border: none;
+}
+
+#xfwm-tabwin button {
+ padding: 6px 10px;
+}
+
+
+/********************* Misc ***************************/
+
+headerbar label {
+ color: inherit;
+}
+
+calendar {
+ border: none;
+ border-radius: 3px;
+ font-size: 14px;
+}
\ No newline at end of file
diff --git a/nixos/home-manager/desktops/xfce/config/menus/xfce-applications.menu b/nixos/home-manager/desktops/xfce/config/menus/xfce-applications.menu
new file mode 100644
index 000000000..cd123548c
--- /dev/null
+++ b/nixos/home-manager/desktops/xfce/config/menus/xfce-applications.menu
@@ -0,0 +1,183 @@
+
+
+
+ Xfce
+
+
+
+
+
+ X-Xfce-Toplevel
+
+
+
+ xfce4-run.desktop
+
+ xfce4-terminal-emulator.desktop
+ xfce4-file-manager.desktop
+ xfce4-mail-reader.desktop
+ xfce4-web-browser.desktop
+
+ Settings
+
+
+
+ xfce4-about.desktop
+ xfce4-session-logout.desktop
+
+
+
+ Red Team
+ 00-red-team.directory
+ red-applications.menu
+
+
+
+ Blue Team
+ 00-blue-team.directory
+ blue-applications.menu
+
+
+
+ Settings
+ xfce-settings.directory
+
+ Settings
+
+
+
+ xfce-settings-manager.desktop
+
+
+
+
+
+ Screensavers
+ xfce-screensavers.directory
+
+ Screensaver
+
+
+
+
+
+ Accessories
+ xfce-accessories.directory
+
+
+ Accessibility
+ Core
+ Legacy
+ Utility
+
+
+
+
+ xfce4-file-manager.desktop
+ xfce4-terminal-emulator.desktop
+ xfce4-about.desktop
+ xfce4-run.desktop
+
+
+
+
+
+ Development
+ xfce-development.directory
+
+ Development
+
+
+
+
+ Education
+ xfce-education.directory
+
+ Education
+
+
+
+
+ Games
+ xfce-games.directory
+
+ Game
+
+
+
+
+ Graphics
+ xfce-graphics.directory
+
+ Graphics
+
+
+
+
+ Multimedia
+ xfce-multimedia.directory
+
+ Audio
+ Video
+ AudioVideo
+
+
+
+
+ Network
+ xfce-network.directory
+
+ Network
+
+
+
+ xfce4-mail-reader.desktop
+ xfce4-web-browser.desktop
+
+
+
+
+
+ Office
+ xfce-office.directory
+
+ Office
+
+
+
+
+ Science
+ xfce-science.directory
+
+ Science
+
+
+
+
+ System
+ xfce-system.directory
+
+
+ Emulator
+ System
+
+
+
+
+ xfce4-session-logout.desktop
+
+
+
+
+
+ Other
+ xfce-other.directory
+
+
+
+
+
+
+
+
diff --git a/nixos/home-manager/desktops/xfce/config/xfce4-picom/desktop/icons.screen.latest.rc b/nixos/home-manager/desktops/xfce/config/xfce4-picom/desktop/icons.screen.latest.rc
new file mode 100644
index 000000000..e289e0bfd
--- /dev/null
+++ b/nixos/home-manager/desktops/xfce/config/xfce4-picom/desktop/icons.screen.latest.rc
@@ -0,0 +1,39 @@
+[xfdesktop-version-4.10.3+-rcfile_format]
+4.10.3+=true
+
+[523b041b-1418-4174-8c97-4fefec7c570e]
+row=2
+col=0
+
+[389cd00b-93e7-45f3-bb9f-baac69272107]
+row=5
+col=0
+
+[dbeae0ca-f072-4e58-ab65-6cb1b79b3f9b]
+row=1
+col=0
+
+[2c266ed8-b8c4-4487-bb01-8919d9f7748d]
+row=4
+col=0
+
+[031a6f8c-c557-40ff-9fe4-3533a617960a]
+row=0
+col=0
+
+[843d60bb-b1b7-4508-b444-5a720eef7e1d]
+row=3
+col=0
+
+[Trash]
+row=6
+col=0
+
+[/]
+row=0
+col=1
+
+[/home/kali]
+row=1
+col=1
+
diff --git a/nixos/home-manager/desktops/xfce/config/xfce4-picom/desktop/icons.screen0-1904x1064.rc b/nixos/home-manager/desktops/xfce/config/xfce4-picom/desktop/icons.screen0-1904x1064.rc
new file mode 100644
index 000000000..e289e0bfd
--- /dev/null
+++ b/nixos/home-manager/desktops/xfce/config/xfce4-picom/desktop/icons.screen0-1904x1064.rc
@@ -0,0 +1,39 @@
+[xfdesktop-version-4.10.3+-rcfile_format]
+4.10.3+=true
+
+[523b041b-1418-4174-8c97-4fefec7c570e]
+row=2
+col=0
+
+[389cd00b-93e7-45f3-bb9f-baac69272107]
+row=5
+col=0
+
+[dbeae0ca-f072-4e58-ab65-6cb1b79b3f9b]
+row=1
+col=0
+
+[2c266ed8-b8c4-4487-bb01-8919d9f7748d]
+row=4
+col=0
+
+[031a6f8c-c557-40ff-9fe4-3533a617960a]
+row=0
+col=0
+
+[843d60bb-b1b7-4508-b444-5a720eef7e1d]
+row=3
+col=0
+
+[Trash]
+row=6
+col=0
+
+[/]
+row=0
+col=1
+
+[/home/kali]
+row=1
+col=1
+
diff --git a/nixos/home-manager/desktops/xfce/config/xfce4-picom/desktop/icons.screen0-3270x1064.rc b/nixos/home-manager/desktops/xfce/config/xfce4-picom/desktop/icons.screen0-3270x1064.rc
new file mode 100644
index 000000000..e289e0bfd
--- /dev/null
+++ b/nixos/home-manager/desktops/xfce/config/xfce4-picom/desktop/icons.screen0-3270x1064.rc
@@ -0,0 +1,39 @@
+[xfdesktop-version-4.10.3+-rcfile_format]
+4.10.3+=true
+
+[523b041b-1418-4174-8c97-4fefec7c570e]
+row=2
+col=0
+
+[389cd00b-93e7-45f3-bb9f-baac69272107]
+row=5
+col=0
+
+[dbeae0ca-f072-4e58-ab65-6cb1b79b3f9b]
+row=1
+col=0
+
+[2c266ed8-b8c4-4487-bb01-8919d9f7748d]
+row=4
+col=0
+
+[031a6f8c-c557-40ff-9fe4-3533a617960a]
+row=0
+col=0
+
+[843d60bb-b1b7-4508-b444-5a720eef7e1d]
+row=3
+col=0
+
+[Trash]
+row=6
+col=0
+
+[/]
+row=0
+col=1
+
+[/home/kali]
+row=1
+col=1
+
diff --git a/nixos/home-manager/desktops/xfce/config/xfce4-picom/helpers.rc b/nixos/home-manager/desktops/xfce/config/xfce4-picom/helpers.rc
new file mode 100644
index 000000000..12f0d2fd8
--- /dev/null
+++ b/nixos/home-manager/desktops/xfce/config/xfce4-picom/helpers.rc
@@ -0,0 +1,2 @@
+TerminalEmulator=xfce4-terminal
+
diff --git a/nixos/home-manager/desktops/xfce/config/xfce4-picom/panel/cpugraph-13.rc b/nixos/home-manager/desktops/xfce/config/xfce4-picom/panel/cpugraph-13.rc
new file mode 100644
index 000000000..bb043fd03
--- /dev/null
+++ b/nixos/home-manager/desktops/xfce/config/xfce4-picom/panel/cpugraph-13.rc
@@ -0,0 +1,11 @@
+UpdateInterval=0
+TimeScale=0
+Size=128
+Mode=0
+Frame=0
+Border=0
+Bars=1
+ColorMode=1
+Foreground1=rgb(39,119,255)
+Foreground2=rgb(0,255,224)
+BarsColor=rgb(0,255,224)
diff --git a/nixos/home-manager/desktops/xfce/config/xfce4-picom/panel/datetime-5.rc b/nixos/home-manager/desktops/xfce/config/xfce4-picom/panel/datetime-5.rc
new file mode 100644
index 000000000..630214468
--- /dev/null
+++ b/nixos/home-manager/desktops/xfce/config/xfce4-picom/panel/datetime-5.rc
@@ -0,0 +1,6 @@
+layout=3
+date_font=Bitstream Vera Sans 8
+time_font=Bitstream Vera Sans 8
+date_format=%Y-%m-%d
+time_format=%H:%M
+
diff --git a/nixos/home-manager/desktops/xfce/config/xfce4-picom/panel/docklike-3.rc b/nixos/home-manager/desktops/xfce/config/xfce4-picom/panel/docklike-3.rc
new file mode 100644
index 000000000..07f1d6168
--- /dev/null
+++ b/nixos/home-manager/desktops/xfce/config/xfce4-picom/panel/docklike-3.rc
@@ -0,0 +1,12 @@
+[user]
+showWindowCount=true
+forceIconSize=true
+iconSize=24
+indicatorStyle=5
+inactiveIndicatorStyle=5
+showPreviews=true
+indicatorOrientation=1
+pinned=
+indicatorColorFromTheme=true
+keyComboActive=false
+keyAloneActive=false
diff --git a/nixos/home-manager/desktops/xfce/config/xfce4-picom/panel/genmon-15.rc b/nixos/home-manager/desktops/xfce/config/xfce4-picom/panel/genmon-15.rc
new file mode 100644
index 000000000..11ae5c0c3
--- /dev/null
+++ b/nixos/home-manager/desktops/xfce/config/xfce4-picom/panel/genmon-15.rc
@@ -0,0 +1,6 @@
+Command=genmon-cpu
+UseLabel=0
+Text=(genmon)
+UpdatePeriod=1000
+Font=Roboto 10
+
diff --git a/nixos/home-manager/desktops/xfce/config/xfce4-picom/panel/genmon-16.rc b/nixos/home-manager/desktops/xfce/config/xfce4-picom/panel/genmon-16.rc
new file mode 100644
index 000000000..a4cdfc691
--- /dev/null
+++ b/nixos/home-manager/desktops/xfce/config/xfce4-picom/panel/genmon-16.rc
@@ -0,0 +1,6 @@
+Command=genmon-datetime
+UseLabel=0
+Text=(genmon)
+UpdatePeriod=1000
+Font=Roboto 10
+
diff --git a/nixos/home-manager/desktops/xfce/config/xfce4-picom/panel/genmon-17.rc b/nixos/home-manager/desktops/xfce/config/xfce4-picom/panel/genmon-17.rc
new file mode 100644
index 000000000..70cc295d5
--- /dev/null
+++ b/nixos/home-manager/desktops/xfce/config/xfce4-picom/panel/genmon-17.rc
@@ -0,0 +1,6 @@
+Command=genmon-mem
+UseLabel=0
+Text=(genmon)
+UpdatePeriod=750
+Font=Roboto 10
+
diff --git a/nixos/home-manager/desktops/xfce/config/xfce4-picom/panel/launcher-1/16518400331.desktop b/nixos/home-manager/desktops/xfce/config/xfce4-picom/panel/launcher-1/16518400331.desktop
new file mode 100644
index 000000000..fdb13b542
--- /dev/null
+++ b/nixos/home-manager/desktops/xfce/config/xfce4-picom/panel/launcher-1/16518400331.desktop
@@ -0,0 +1,10 @@
+[Desktop Entry]
+Version=1.0
+Type=Application
+Name=Logout
+Comment=
+Exec=xfce4-session-logout
+Icon=power-button
+Path=
+Terminal=false
+StartupNotify=false
diff --git a/nixos/home-manager/desktops/xfce/config/xfce4-picom/panel/script.sh b/nixos/home-manager/desktops/xfce/config/xfce4-picom/panel/script.sh
new file mode 100755
index 000000000..4225bedea
--- /dev/null
+++ b/nixos/home-manager/desktops/xfce/config/xfce4-picom/panel/script.sh
@@ -0,0 +1,102 @@
+#!/usr/bin/env bash
+#
+# Description: Utility shell file to migrate old genmon .rc configuration files
+# to xfconf database entries
+#
+# Notes: This experiemental script has two options: one to show the old rc
+# settings and display the commands that need to be run to migrate to
+# xfconf (NOTE: xfce4-panel must not be running if migrating manually),
+# and one to auto-migrate the settings
+#
+# Script options:
+# show - will show the existing rc entries and the xfconf-query commands that will
+# need to be run
+# doit - will migrte the rc config files to xfconf database entries
+#
+# Additional Notes:
+# config files located at ~/.config/xfce4/panel/genmon-*.rc
+# xfconf keys:
+# - /plugins/plugin-x/command = Command (String)
+# - /plugins/plugin-x/enable-single-row = EnableSingleRow (Boolean)
+# - /plugins/plugin-x/font = Font (String)
+# - /plugins/plugin-x/text = Text (String)
+# - /plugins/plugin-x/update-period = UpdatePeriod (Integer)
+# - /plugins/plugin-x/use-label = UseLabel (Boolean)
+
+# check for arguments and display usage if required
+if [ $# -lt 1 ]; then
+ echo "Usage: $0 [option]"
+ echo "Options:"
+ echo " show - show the existing rc values and the xfconf-query commands"
+ echo " doit - update the xfconf database with the old rc values"
+ exit 1
+fi
+
+# location of existing genmon rc files
+RCLOCATION="$HOME/.config/xfce4/panel"
+
+# loop through each genmon instance
+for f in $(ls $RCLOCATION/genmon*.rc)
+do
+ # get settings
+ ID=$(echo ${f%.*} | sed 's/.*-//')
+ echo "Processing genmon ID $ID"
+ COMMAND=$(grep Command $f | awk -F'=' '{print $2}')
+ ENABLESINGLEROW=$(grep EnableSingleRow $f | awk -F'=' '{print $2}')
+ FONT=$(grep Font $f | awk -F'=' '{print $2}')
+ TEXT=$(grep Text $f | awk -F'=' '{print $2}')
+ UPDATEPERIOD=$(grep UpdatePeriod $f | awk -F'=' '{print $2}')
+ USELABEL=$(grep UseLabel $f | awk -F'=' '{print $2}')
+
+ # additional int to bool processing
+ [[ $ENABLESINGLEROW = "0" ]] && ENABLESINGLEROW=false || ENABLESINGLEROW=true
+ [[ $USELABEL = "0" ]] && USELABEL=false || USELABEL=true
+
+ # show output if "show" paramater used
+ if [ "$1" == "show" ]; then
+ echo
+ echo $f
+ echo -e " ID=\t\t$ID"
+ echo -e " COMMAND=\t$COMMAND"
+ echo -e " SINGLEROW=\t$ENABLESINGLEROW"
+ echo -e " FONT=\t$FONT"
+ echo -e " TEXT=\t$TEXT"
+ echo -e " UPDATEPERIOD=$UPDATEPERIOD"
+ echo -e " USELABEL=\t$USELABEL"
+ echo
+ echo "COMMANDS TO BE RUN:"
+ echo "xfconf-query -c xfce4-panel -p /plugins/plugin-$ID/command -t string -s \"$COMMAND\" --create"
+ echo "xfconf-query -c xfce4-panel -p /plugins/plugin-$ID/enable-single-row -t bool -s $ENABLESINGLEROW --create"
+ echo "xfconf-query -c xfce4-panel -p /plugins/plugin-$ID/font -t string -s \"$FONT\" --create"
+ echo "xfconf-query -c xfce4-panel -p /plugins/plugin-$ID/text -t string -s \"$TEXT\" --create"
+ echo "xfconf-query -c xfce4-panel -p /plugins/plugin-$ID/update-period -t int -s $UPDATEPERIOD --create"
+ echo "xfconf-query -c xfce4-panel -p /plugins/plugin-$ID/use-label -t bool -s $USELABEL --create"
+ fi
+
+ # do the migration if the "doit" parameter is used
+ if [ "$1" == "doit" ]; then
+ # if panel is running, quit it
+ [[ $(pgrep xfce4-panel) ]] && xfce4-panel -q
+ echo -n "...updating xfconf database for genmon-$ID..."
+ xfconf-query -c xfce4-panel -p /plugins/plugin-$ID/command -t string -s "$COMMAND" --create
+ sleep .25
+ xfconf-query -c xfce4-panel -p /plugins/plugin-$ID/enable-single-row -t bool -s $ENABLESINGLEROW --create
+ sleep .25
+ xfconf-query -c xfce4-panel -p /plugins/plugin-$ID/font -t string -s "$FONT" --create
+ sleep .25
+ xfconf-query -c xfce4-panel -p /plugins/plugin-$ID/text -t string -s "$TEXT" --create
+ sleep .25
+ xfconf-query -c xfce4-panel -p /plugins/plugin-$ID/update-period -t int -s $UPDATEPERIOD --create
+ sleep .25
+ xfconf-query -c xfce4-panel -p /plugins/plugin-$ID/use-label -t bool -s $USELABEL --create
+ echo "updated genmon-$ID"
+ echo
+ fi
+done
+
+# if panel is not running, start it
+[[ $(pgrep xfce4-panel) ]] || xfce4-panel &
+
+exit 0
+
+
diff --git a/nixos/home-manager/desktops/xfce/config/xfce4-picom/panel/xfce4-clipman-actions.xml b/nixos/home-manager/desktops/xfce/config/xfce4-picom/panel/xfce4-clipman-actions.xml
new file mode 100644
index 000000000..84ea9b36f
--- /dev/null
+++ b/nixos/home-manager/desktops/xfce/config/xfce4-picom/panel/xfce4-clipman-actions.xml
@@ -0,0 +1,44 @@
+
+
+
+ Bugz
+ bug\s*#?\s*([0-9]+)
+ 0
+
+
+ GNOME Bug
+ exo-open http://bugzilla.gnome.org/show_bug.cgi?id=\1
+
+
+ Xfce Bug
+ exo-open http://bugzilla.xfce.org/show_bug.cgi?id=\1
+
+
+
+
+ Image
+ (http|ftp).+\.(jpg|png|gif)
+ 0
+
+
+ View with Ristretto
+ ristretto "\0"
+
+
+ Edit with Gimp
+ gimp-remote "\0"
+
+
+
+
+ Long URL
+ http://[^\s]{120,}
+ 0
+
+
+ Shrink the URL
+ exo-open http://tinyurl.com/create.php?url=\0
+
+
+
+
\ No newline at end of file
diff --git a/nixos/home-manager/desktops/xfce/config/xfce4-picom/terminal/accels.scm b/nixos/home-manager/desktops/xfce/config/xfce4-picom/terminal/accels.scm
new file mode 100644
index 000000000..673bbea02
--- /dev/null
+++ b/nixos/home-manager/desktops/xfce/config/xfce4-picom/terminal/accels.scm
@@ -0,0 +1,58 @@
+; xfce4-terminal GtkAccelMap rc-file -*- scheme -*-
+; this file is an automated accelerator map dump
+;
+(gtk_accel_path "/terminal-window/goto-tab-2" "2")
+(gtk_accel_path "/terminal-window/goto-tab-6" "6")
+; (gtk_accel_path "/terminal-window/copy-input" "")
+; (gtk_accel_path "/terminal-window/close-other-tabs" "")
+; (gtk_accel_path "/terminal-window/move-tab-right" "Page_Down")
+(gtk_accel_path "/terminal-window/goto-tab-7" "7")
+; (gtk_accel_path "/terminal-window/set-title-color" "")
+; (gtk_accel_path "/terminal-window/edit-menu" "")
+; (gtk_accel_path "/terminal-window/zoom-menu" "")
+(gtk_accel_path "/terminal-window/goto-tab-1" "1")
+; (gtk_accel_path "/terminal-window/fullscreen" "F11")
+; (gtk_accel_path "/terminal-window/read-only" "")
+(gtk_accel_path "/terminal-window/goto-tab-5" "5")
+; (gtk_accel_path "/terminal-window/preferences" "")
+; (gtk_accel_path "/terminal-window/reset-and-clear" "")
+; (gtk_accel_path "/terminal-window/about" "")
+(gtk_accel_path "/terminal-window/goto-tab-4" "4")
+; (gtk_accel_path "/terminal-window/close-window" "q")
+; (gtk_accel_path "/terminal-window/reset" "")
+; (gtk_accel_path "/terminal-window/save-contents" "")
+(gtk_accel_path "/terminal-window/toggle-menubar" "F10")
+; (gtk_accel_path "/terminal-window/copy" "c")
+; (gtk_accel_path "/terminal-window/copy-html" "")
+; (gtk_accel_path "/terminal-window/last-active-tab" "")
+; (gtk_accel_path "/terminal-window/show-borders" "")
+; (gtk_accel_path "/terminal-window/view-menu" "")
+; (gtk_accel_path "/terminal-window/detach-tab" "d")
+; (gtk_accel_path "/terminal-window/scroll-on-output" "")
+; (gtk_accel_path "/terminal-window/show-toolbar" "")
+; (gtk_accel_path "/terminal-window/next-tab" "Page_Down")
+; (gtk_accel_path "/terminal-window/tabs-menu" "")
+; (gtk_accel_path "/terminal-window/search-next" "")
+; (gtk_accel_path "/terminal-window/search-prev" "")
+; (gtk_accel_path "/terminal-window/undo-close-tab" "")
+; (gtk_accel_path "/terminal-window/set-title" "s")
+; (gtk_accel_path "/terminal-window/contents" "F1")
+; (gtk_accel_path "/terminal-window/zoom-reset" "0")
+; (gtk_accel_path "/terminal-window/close-tab" "w")
+; (gtk_accel_path "/terminal-window/new-tab" "t")
+; (gtk_accel_path "/terminal-window/new-window" "n")
+; (gtk_accel_path "/terminal-window/terminal-menu" "")
+; (gtk_accel_path "/terminal-window/show-menubar" "")
+; (gtk_accel_path "/terminal-window/select-all" "a")
+; (gtk_accel_path "/terminal-window/paste" "v")
+(gtk_accel_path "/terminal-window/goto-tab-9" "9")
+; (gtk_accel_path "/terminal-window/move-tab-left" "Page_Up")
+; (gtk_accel_path "/terminal-window/search" "f")
+; (gtk_accel_path "/terminal-window/file-menu" "")
+; (gtk_accel_path "/terminal-window/prev-tab" "Page_Up")
+; (gtk_accel_path "/terminal-window/paste-selection" "")
+; (gtk_accel_path "/terminal-window/zoom-in" "plus")
+; (gtk_accel_path "/terminal-window/zoom-out" "minus")
+(gtk_accel_path "/terminal-window/goto-tab-8" "8")
+; (gtk_accel_path "/terminal-window/help-menu" "")
+(gtk_accel_path "/terminal-window/goto-tab-3" "3")
diff --git a/nixos/home-manager/desktops/xfce/config/xfce4-picom/terminal/terminalrc b/nixos/home-manager/desktops/xfce/config/xfce4-picom/terminal/terminalrc
new file mode 100644
index 000000000..bf72e8656
--- /dev/null
+++ b/nixos/home-manager/desktops/xfce/config/xfce4-picom/terminal/terminalrc
@@ -0,0 +1,41 @@
+[Configuration]
+MiscAlwaysShowTabs=FALSE
+MiscBell=FALSE
+MiscBordersDefault=TRUE
+MiscCursorBlinks=TRUE
+MiscCursorShape=TERMINAL_CURSOR_SHAPE_UNDERLINE
+MiscDefaultGeometry=78x23
+MiscInheritGeometry=FALSE
+MiscMenubarDefault=FALSE
+MiscMouseAutohide=FALSE
+MiscToolbarDefault=FALSE
+MiscConfirmClose=TRUE
+MiscCycleTabs=TRUE
+MiscTabCloseButtons=TRUE
+MiscTabCloseMiddleClick=TRUE
+MiscTabPosition=GTK_POS_TOP
+MiscHighlightUrls=TRUE
+ScrollingLines=999999
+BackgroundMode=TERMINAL_BACKGROUND_TRANSPARENT
+BackgroundDarkness=1.000000
+MiscBellUrgent=FALSE
+MiscMouseWheelZoom=TRUE
+MiscMiddleClickOpensUri=FALSE
+MiscCopyOnSelect=FALSE
+MiscShowRelaunchDialog=TRUE
+MiscRewrapOnResize=TRUE
+MiscUseShiftArrowsToScroll=FALSE
+MiscSlimTabs=FALSE
+MiscNewTabAdjacent=FALSE
+MiscSearchDialogOpacity=100
+MiscShowUnsafePasteDialog=TRUE
+ColorForeground=#dcdcdc
+ColorBackground=#2c2c2c
+ScrollingBar=TERMINAL_SCROLLBAR_NONE
+FontName=JetBrainsMono Nerd Font 10
+ColorCursor=#dcdcdc
+ColorPalette=rgb(34,41,43);rgb(224,110,110);rgb(140,207,126);rgb(229,199,107);rgb(108,208,202);rgb(196,127,213);rgb(103,176,232);rgb(179,185,184);rgb(112,144,128);rgb(220,163,163);rgb(114,213,163);rgb(240,223,175);rgb(148,191,243);rgb(236,147,211);rgb(147,224,227);rgb(255,255,255)
+ColorUseTheme=TRUE
+DefaultWorkingDir=$HOME/Desktop
+MiscRightClickAction=TERMINAL_RIGHT_CLICK_ACTION_CONTEXT_MENU
+
diff --git a/nixos/home-manager/desktops/xfce/config/xfce4-picom/xfce4-screenshooter b/nixos/home-manager/desktops/xfce/config/xfce4-picom/xfce4-screenshooter
new file mode 100644
index 000000000..8055824d3
--- /dev/null
+++ b/nixos/home-manager/desktops/xfce/config/xfce4-picom/xfce4-screenshooter
@@ -0,0 +1,12 @@
+app=ristretto
+last_user=
+last_extension=png
+screenshot_dir=file:/home/kali/Pictures
+enable_imgur_upload=true
+show_in_folder=false
+action=1
+delay=2
+region=1
+show_mouse=1
+show_border=1
+
diff --git a/nixos/home-manager/desktops/xfce/config/xfce4-picom/xfconf/xfce-perchannel-xml/displays.xml b/nixos/home-manager/desktops/xfce/config/xfce4-picom/xfconf/xfce-perchannel-xml/displays.xml
new file mode 100644
index 000000000..a85038d53
--- /dev/null
+++ b/nixos/home-manager/desktops/xfce/config/xfce4-picom/xfconf/xfce-perchannel-xml/displays.xml
@@ -0,0 +1,111 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/nixos/home-manager/desktops/xfce/config/xfce4-picom/xfconf/xfce-perchannel-xml/keyboard-layout.xml b/nixos/home-manager/desktops/xfce/config/xfce4-picom/xfconf/xfce-perchannel-xml/keyboard-layout.xml
new file mode 100644
index 000000000..37b145c66
--- /dev/null
+++ b/nixos/home-manager/desktops/xfce/config/xfce4-picom/xfconf/xfce-perchannel-xml/keyboard-layout.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/nixos/home-manager/desktops/xfce/config/xfce4-picom/xfconf/xfce-perchannel-xml/keyboards.xml b/nixos/home-manager/desktops/xfce/config/xfce4-picom/xfconf/xfce-perchannel-xml/keyboards.xml
new file mode 100644
index 000000000..9ddc44396
--- /dev/null
+++ b/nixos/home-manager/desktops/xfce/config/xfce4-picom/xfconf/xfce-perchannel-xml/keyboards.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/nixos/home-manager/desktops/xfce/config/xfce4-picom/xfconf/xfce-perchannel-xml/ristretto.xml b/nixos/home-manager/desktops/xfce/config/xfce4-picom/xfconf/xfce-perchannel-xml/ristretto.xml
new file mode 100644
index 000000000..781e4e716
--- /dev/null
+++ b/nixos/home-manager/desktops/xfce/config/xfce4-picom/xfconf/xfce-perchannel-xml/ristretto.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/nixos/home-manager/desktops/xfce/config/xfce4-picom/xfconf/xfce-perchannel-xml/thunar.xml b/nixos/home-manager/desktops/xfce/config/xfce4-picom/xfconf/xfce-perchannel-xml/thunar.xml
new file mode 100644
index 000000000..5b474e3e2
--- /dev/null
+++ b/nixos/home-manager/desktops/xfce/config/xfce4-picom/xfconf/xfce-perchannel-xml/thunar.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/nixos/home-manager/desktops/xfce/config/xfce4-picom/xfconf/xfce-perchannel-xml/xfce4-appfinder.xml b/nixos/home-manager/desktops/xfce/config/xfce4-picom/xfconf/xfce-perchannel-xml/xfce4-appfinder.xml
new file mode 100644
index 000000000..055996608
--- /dev/null
+++ b/nixos/home-manager/desktops/xfce/config/xfce4-picom/xfconf/xfce-perchannel-xml/xfce4-appfinder.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/nixos/home-manager/desktops/xfce/config/xfce4-picom/xfconf/xfce-perchannel-xml/xfce4-keyboard-shortcuts.xml b/nixos/home-manager/desktops/xfce/config/xfce4-picom/xfconf/xfce-perchannel-xml/xfce4-keyboard-shortcuts.xml
new file mode 100644
index 000000000..a7f0908cb
--- /dev/null
+++ b/nixos/home-manager/desktops/xfce/config/xfce4-picom/xfconf/xfce-perchannel-xml/xfce4-keyboard-shortcuts.xml
@@ -0,0 +1,186 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/nixos/home-manager/desktops/xfce/config/xfce4-picom/xfconf/xfce-perchannel-xml/xfce4-notifyd.xml b/nixos/home-manager/desktops/xfce/config/xfce4-picom/xfconf/xfce-perchannel-xml/xfce4-notifyd.xml
new file mode 100644
index 000000000..abf60d1ac
--- /dev/null
+++ b/nixos/home-manager/desktops/xfce/config/xfce4-picom/xfconf/xfce-perchannel-xml/xfce4-notifyd.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/nixos/home-manager/desktops/xfce/config/xfce4-picom/xfconf/xfce-perchannel-xml/xfce4-panel.xml b/nixos/home-manager/desktops/xfce/config/xfce4-picom/xfconf/xfce-perchannel-xml/xfce4-panel.xml
new file mode 100644
index 000000000..55f667c76
--- /dev/null
+++ b/nixos/home-manager/desktops/xfce/config/xfce4-picom/xfconf/xfce-perchannel-xml/xfce4-panel.xml
@@ -0,0 +1,143 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/nixos/home-manager/desktops/xfce/config/xfce4-picom/xfconf/xfce-perchannel-xml/xfce4-power-manager.xml b/nixos/home-manager/desktops/xfce/config/xfce4-picom/xfconf/xfce-perchannel-xml/xfce4-power-manager.xml
new file mode 100644
index 000000000..93c0dabab
--- /dev/null
+++ b/nixos/home-manager/desktops/xfce/config/xfce4-picom/xfconf/xfce-perchannel-xml/xfce4-power-manager.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/nixos/home-manager/desktops/xfce/config/xfce4-picom/xfconf/xfce-perchannel-xml/xfce4-session.xml b/nixos/home-manager/desktops/xfce/config/xfce4-picom/xfconf/xfce-perchannel-xml/xfce4-session.xml
new file mode 100644
index 000000000..1a98ea2bb
--- /dev/null
+++ b/nixos/home-manager/desktops/xfce/config/xfce4-picom/xfconf/xfce-perchannel-xml/xfce4-session.xml
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/nixos/home-manager/desktops/xfce/config/xfce4-picom/xfconf/xfce-perchannel-xml/xfce4-settings-editor.xml b/nixos/home-manager/desktops/xfce/config/xfce4-picom/xfconf/xfce-perchannel-xml/xfce4-settings-editor.xml
new file mode 100644
index 000000000..2469cbea7
--- /dev/null
+++ b/nixos/home-manager/desktops/xfce/config/xfce4-picom/xfconf/xfce-perchannel-xml/xfce4-settings-editor.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/nixos/home-manager/desktops/xfce/config/xfce4-picom/xfconf/xfce-perchannel-xml/xfce4-settings-manager.xml b/nixos/home-manager/desktops/xfce/config/xfce4-picom/xfconf/xfce-perchannel-xml/xfce4-settings-manager.xml
new file mode 100644
index 000000000..8372e3809
--- /dev/null
+++ b/nixos/home-manager/desktops/xfce/config/xfce4-picom/xfconf/xfce-perchannel-xml/xfce4-settings-manager.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/nixos/home-manager/desktops/xfce/config/xfce4-picom/xfconf/xfce-perchannel-xml/xfce4-taskmanager.xml b/nixos/home-manager/desktops/xfce/config/xfce4-picom/xfconf/xfce-perchannel-xml/xfce4-taskmanager.xml
new file mode 100644
index 000000000..bf0c48331
--- /dev/null
+++ b/nixos/home-manager/desktops/xfce/config/xfce4-picom/xfconf/xfce-perchannel-xml/xfce4-taskmanager.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/nixos/home-manager/desktops/xfce/config/xfce4-picom/xfconf/xfce-perchannel-xml/xfwm4.xml b/nixos/home-manager/desktops/xfce/config/xfce4-picom/xfconf/xfce-perchannel-xml/xfwm4.xml
new file mode 100644
index 000000000..7e94e9858
--- /dev/null
+++ b/nixos/home-manager/desktops/xfce/config/xfce4-picom/xfconf/xfce-perchannel-xml/xfwm4.xml
@@ -0,0 +1,104 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/nixos/home-manager/desktops/xfce/config/xfce4-picom/xfconf/xfce-perchannel-xml/xsettings.xml b/nixos/home-manager/desktops/xfce/config/xfce4-picom/xfconf/xfce-perchannel-xml/xsettings.xml
new file mode 100644
index 000000000..cb154c420
--- /dev/null
+++ b/nixos/home-manager/desktops/xfce/config/xfce4-picom/xfconf/xfce-perchannel-xml/xsettings.xml
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/nixos/home-manager/desktops/xfce/config/xfce4-refined/panel/launcher-10/16972816226.desktop b/nixos/home-manager/desktops/xfce/config/xfce4-refined/panel/launcher-10/16972816226.desktop
new file mode 100644
index 000000000..a9baec6f7
--- /dev/null
+++ b/nixos/home-manager/desktops/xfce/config/xfce4-refined/panel/launcher-10/16972816226.desktop
@@ -0,0 +1,10 @@
+[Desktop Entry]
+Type=Application
+Encoding=UTF-8
+Name=PayloadsAllTheThings
+Comment=PayloadsAllTheThings
+Icon=kali-commix
+Exec=exo-open --launch TerminalEmulator /usr/bin/bash -c "if test -d /usr/share/payloads/PayloadsAllTheThings;then cd /usr/share/payloads/PayloadsAllTheThings;$SHELL;else echo \\"PayloadsAllTheThings not found. I'm retrieving it for you...\\";sudo pacman -S --noconfirm athena-payloadsallthethings;cd /usr/share/payloads/PayloadsAllTheThings;$SHELL;fi;"
+Terminal=false
+Categories=Tags;Describing;Application
+X-XFCE-Source=file:///usr/share/applications/payloadsallthethings.desktop
diff --git a/nixos/home-manager/desktops/xfce/config/xfce4-refined/panel/launcher-15/16972816125.desktop b/nixos/home-manager/desktops/xfce/config/xfce4-refined/panel/launcher-15/16972816125.desktop
new file mode 100644
index 000000000..d00af07e6
--- /dev/null
+++ b/nixos/home-manager/desktops/xfce/config/xfce4-refined/panel/launcher-15/16972816125.desktop
@@ -0,0 +1,10 @@
+[Desktop Entry]
+Type=Application
+Encoding=UTF-8
+Name=SecLists
+Comment=SecLists
+Icon=kali-bettercap
+Exec=exo-open --launch TerminalEmulator /usr/bin/bash -c "if test -d /usr/share/payloads/SecLists; then cd /usr/share/payloads/SecLists;$SHELL;else echo \\"SecLists not found. I'm retrieving it for you...\\";sudo git clone https://github.com/danielmiessler/SecLists /usr/share/payloads/SecLists;cd /usr/share/payloads/SecLists;$SHELL;fi;"
+Terminal=false
+Categories=Tags;Describing;Application
+X-XFCE-Source=file:///usr/share/applications/seclists.desktop
diff --git a/nixos/home-manager/desktops/xfce/config/xfce4-refined/panel/launcher-16/16972815964.desktop b/nixos/home-manager/desktops/xfce/config/xfce4-refined/panel/launcher-16/16972815964.desktop
new file mode 100644
index 000000000..787e8c4d5
--- /dev/null
+++ b/nixos/home-manager/desktops/xfce/config/xfce4-refined/panel/launcher-16/16972815964.desktop
@@ -0,0 +1,11 @@
+[Desktop Entry]
+Name=powersploit
+Encoding=UTF-8
+Exec=exo-open --launch TerminalEmulator /usr/bin/bash -c "if test -d /usr/share/windows/powersploit;then cd /usr/share/windows/powersploit;$SHELL;else echo \\"Powersploit is not installed. I'm retrieving it for you...\\";sudo pacman -S --noconfirm powersploit;cd /usr/share/windows/powersploit;$SHELL;fi;"
+Icon=kali-powersploit
+StartupNotify=false
+Terminal=false
+Type=Application
+Categories=10-01-os-backdoors;10-maintaining-access;
+X-BlackArch-Package=powersploit
+X-XFCE-Source=file:///usr/share/applications/kali-powersploit.desktop
diff --git a/nixos/home-manager/desktops/xfce/config/xfce4-refined/panel/launcher-17/16972816637.desktop b/nixos/home-manager/desktops/xfce/config/xfce4-refined/panel/launcher-17/16972816637.desktop
new file mode 100644
index 000000000..5410a5d45
--- /dev/null
+++ b/nixos/home-manager/desktops/xfce/config/xfce4-refined/panel/launcher-17/16972816637.desktop
@@ -0,0 +1,12 @@
+[Desktop Entry]
+Type=Application
+Encoding=UTF-8
+Name=Fish Shell
+Comment=Fish Shell
+Icon=shell
+Exec=exo-open --launch TerminalEmulator
+Terminal=false
+Categories=Tags;Describing;Application
+X-XFCE-Source=file:///usr/share/applications/shell.desktop
+Path=
+StartupNotify=false
diff --git a/nixos/home-manager/desktops/xfce/config/xfce4-refined/panel/launcher-18/16972816788.desktop b/nixos/home-manager/desktops/xfce/config/xfce4-refined/panel/launcher-18/16972816788.desktop
new file mode 100644
index 000000000..ad8dae609
--- /dev/null
+++ b/nixos/home-manager/desktops/xfce/config/xfce4-refined/panel/launcher-18/16972816788.desktop
@@ -0,0 +1,10 @@
+[Desktop Entry]
+Type=Application
+Encoding=UTF-8
+Name=PowerShell
+Comment=PowerShell
+Icon=powershell
+Exec=exo-open --launch TerminalEmulator /usr/bin/bash -c 'pwsh'
+Terminal=false
+Categories=Tags;Describing;Application
+X-XFCE-Source=file:///usr/share/applications/powershell.desktop
diff --git a/nixos/home-manager/desktops/xfce/config/xfce4-refined/panel/launcher-19/16972816909.desktop b/nixos/home-manager/desktops/xfce/config/xfce4-refined/panel/launcher-19/16972816909.desktop
new file mode 100644
index 000000000..dc7e235f4
--- /dev/null
+++ b/nixos/home-manager/desktops/xfce/config/xfce4-refined/panel/launcher-19/16972816909.desktop
@@ -0,0 +1,10 @@
+[Desktop Entry]
+Type=Application
+Name=CyberChef
+Comment=The Cyber Swiss Army Knife
+Icon=cyberchef
+Exec=cyberchef
+Terminal=false
+Categories=Utility;Development;
+StartupWMClass=CyberChef
+X-XFCE-Source=file:///usr/share/applications/cyberchef.desktop
diff --git a/nixos/home-manager/desktops/xfce/config/xfce4-refined/panel/launcher-20/169728170410.desktop b/nixos/home-manager/desktops/xfce/config/xfce4-refined/panel/launcher-20/169728170410.desktop
new file mode 100644
index 000000000..5490ba61c
--- /dev/null
+++ b/nixos/home-manager/desktops/xfce/config/xfce4-refined/panel/launcher-20/169728170410.desktop
@@ -0,0 +1,10 @@
+[Desktop Entry]
+Type=Application
+Encoding=UTF-8
+Name=Security Wordlist
+Comment=Security Wordlist
+Icon=kali-golismero
+Exec=exo-open --launch TerminalEmulator /usr/bin/bash -c "if test -d /usr/share/payloads/Security-Wordlist;then cd /usr/share/payloads/Security-Wordlist;$SHELL;else echo \\"Security Wordlist not found. I'm retrieving it for you...\\";sudo git clone https://github.com/DragonJAR/Security-Wordlist /usr/share/payloads/Security-Wordlist;cd /usr/share/payloads/Security-Wordlist;$SHELL;fi;"
+Terminal=false
+Categories=Tags;Describing;Application
+X-XFCE-Source=file:///usr/share/applications/securitywordlist.desktop
diff --git a/nixos/home-manager/desktops/xfce/config/xfce4-refined/panel/launcher-21/169728172411.desktop b/nixos/home-manager/desktops/xfce/config/xfce4-refined/panel/launcher-21/169728172411.desktop
new file mode 100644
index 000000000..ce869c04c
--- /dev/null
+++ b/nixos/home-manager/desktops/xfce/config/xfce4-refined/panel/launcher-21/169728172411.desktop
@@ -0,0 +1,10 @@
+[Desktop Entry]
+Type=Application
+Encoding=UTF-8
+Name=FuzzDB
+Comment=FuzzDB
+Icon=kali-ike-scan
+Exec=exo-open --launch TerminalEmulator /usr/bin/bash -c "if test -d /usr/share/payloads/fuzzdb;then cd /usr/share/payloads/fuzzdb;$SHELL;else echo \\"FuzzDB not found. I'm retrieving it for you...\\";sudo pacman -S --noconfirm athena-fuzzdb;cd /usr/share/payloads/fuzzdb;$SHELL;fi;"
+Terminal=false
+Categories=Tags;Describing;Application
+X-XFCE-Source=file:///usr/share/applications/fuzzdb.desktop
diff --git a/nixos/home-manager/desktops/xfce/config/xfce4-refined/panel/launcher-8/16972815053.desktop b/nixos/home-manager/desktops/xfce/config/xfce4-refined/panel/launcher-8/16972815053.desktop
new file mode 100644
index 000000000..beafc9bce
--- /dev/null
+++ b/nixos/home-manager/desktops/xfce/config/xfce4-refined/panel/launcher-8/16972815053.desktop
@@ -0,0 +1,11 @@
+[Desktop Entry]
+Name=mimikatz
+Encoding=UTF-8
+Exec=exo-open --launch TerminalEmulator /usr/bin/bash -c "if test -d /usr/share/windows/mimikatz;then cd /usr/share/windows/mimikatz;$SHELL;else echo \\"Mimikatz is not installed. I'm retrieving it for you...\\";sudo pacman -S --noconfirm mimikatz;cd /usr/share/windows/mimikatz;$SHELL;fi;"
+Icon=kali-mimikatz
+StartupNotify=false
+Terminal=false
+Type=Application
+Categories=10-maintaining-access;05-04-pass-hash;
+X-BlackArch-Package=mimikatz
+X-XFCE-Source=file:///usr/share/applications/kali-mimikatz.desktop
diff --git a/nixos/home-manager/desktops/xfce/config/xfce4-refined/panel/launcher-9/16972810932.desktop b/nixos/home-manager/desktops/xfce/config/xfce4-refined/panel/launcher-9/16972810932.desktop
new file mode 100644
index 000000000..08d0771dc
--- /dev/null
+++ b/nixos/home-manager/desktops/xfce/config/xfce4-refined/panel/launcher-9/16972810932.desktop
@@ -0,0 +1,10 @@
+[Desktop Entry]
+Type=Application
+Encoding=UTF-8
+Name=Auto Wordlists
+Comment=Auto Wordlists
+Icon=kali-wordlists
+Exec=exo-open --launch TerminalEmulator /usr/bin/bash -c "if test -d /usr/share/payloads/Auto_Wordlists;then cd /usr/share/payloads/Auto_Wordlists;$SHELL;else echo \\"Auto Wordlists not found. I'm retrieving it for you...\\";sudo pacman -S --noconfirm athena-auto-wordlists;cd /usr/share/payloads/Auto_Wordlists;$SHELL;fi;"
+Terminal=false
+Categories=Tags;Describing;Application
+X-XFCE-Source=file:///usr/share/applications/autowordlists.desktop
diff --git a/nixos/home-manager/desktops/xfce/config/xfce4-refined/xfconf/xfce-perchannel-xml/xfce4-keyboard-shortcuts.xml b/nixos/home-manager/desktops/xfce/config/xfce4-refined/xfconf/xfce-perchannel-xml/xfce4-keyboard-shortcuts.xml
new file mode 100644
index 000000000..a7f0908cb
--- /dev/null
+++ b/nixos/home-manager/desktops/xfce/config/xfce4-refined/xfconf/xfce-perchannel-xml/xfce4-keyboard-shortcuts.xml
@@ -0,0 +1,186 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/nixos/home-manager/desktops/xfce/config/xfce4-refined/xfconf/xfce-perchannel-xml/xfce4-panel.xml b/nixos/home-manager/desktops/xfce/config/xfce4-refined/xfconf/xfce-perchannel-xml/xfce4-panel.xml
new file mode 100644
index 000000000..8f2989331
--- /dev/null
+++ b/nixos/home-manager/desktops/xfce/config/xfce4-refined/xfconf/xfce-perchannel-xml/xfce4-panel.xml
@@ -0,0 +1,286 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/nixos/home-manager/desktops/xfce/default.nix b/nixos/home-manager/desktops/xfce/default.nix
new file mode 100644
index 000000000..1c1b6ff0d
--- /dev/null
+++ b/nixos/home-manager/desktops/xfce/default.nix
@@ -0,0 +1,35 @@
+# In XFCE module, home.nix is used to set if implementing xfce.refined or xfce.picom
+{ home-manager, username, theme, ... }:
+{
+ # ---- System Configuration ----
+ services.xserver = {
+ enable = true;
+ desktopManager = {
+ xfce = {
+ enable = true;
+ enableScreensaver = false;
+ };
+ };
+ };
+ environment.pathsToLink = [
+ "/share/backgrounds" # TODO: https://github.com/NixOS/nixpkgs/issues/47173
+ ];
+ programs.xfconf.enable = true;
+ environment.systemPackages = with pkgs.xfce; [
+ xfce4-cpugraph-plugin
+ xfce4-docklike-plugin
+ xfce4-genmon-plugin
+ xfce4-pulseaudio-plugin
+ xfce4-settings
+ xfce4-whiskermenu-plugin
+ ];
+
+ # ---- Home Configuration ----
+ home-manager.users.${username} = { pkgs, ...}: {
+ imports = [
+ ./xfce.nix
+ ];
+ _module.args.theme = theme;
+ athena.desktops.xfce.refined = true;
+ };
+}
diff --git a/nixos/home-manager/desktops/xfce/fonts/feather.ttf b/nixos/home-manager/desktops/xfce/fonts/feather.ttf
new file mode 100644
index 000000000..88bdfd0b0
Binary files /dev/null and b/nixos/home-manager/desktops/xfce/fonts/feather.ttf differ
diff --git a/nixos/home-manager/desktops/xfce/picom.nix b/nixos/home-manager/desktops/xfce/picom.nix
new file mode 100644
index 000000000..8f6f87713
--- /dev/null
+++ b/nixos/home-manager/desktops/xfce/picom.nix
@@ -0,0 +1,191 @@
+{ config, ... }:
+{
+ services.picom.enable = true;
+ services.picom.settings = ''
+ #################################
+ # Corners #
+ #################################
+ # requires: https://github.com/sdhand/compton
+ corner-radius = 3.0;
+ rounded-corners-exclude = [
+ #"window_type = 'normal'",
+ "class_g = 'Xfce4-panel' && window_type = 'dock'"
+ ];
+ round-borders = 0;
+ round-borders-exclude = [
+ #"class_g = 'TelegramDesktop'",
+ ];
+
+ round-borders-rule = [
+ #"3:class_g = 'XTerm'",
+ #"3:class_g = 'URxvt'",
+ #"10:class_g = 'Alacritty'",
+ #"15:class_g = 'Signal'"
+ ];
+
+
+
+ #################################
+ # Shadows #
+ #################################
+
+ shadow = true;
+ shadow-radius = 15;
+ shadow-ignore-shaped = false;
+ shadow-opacity = 0.5;
+ shadow-offset-x = -15;
+ shadow-offset-y = -15;
+
+ shadow-exclude = [
+ "!bounding_shaped && class_g = 'Xfce4-screenshooter'",
+ "name = 'cpt_frame_window'",
+ "class_g = 'Plank' && window_type = 'dock'",
+ "class_g ?= 'Notify-osd'",
+ "class_g = 'Cairo-clock'",
+ "class_g *?= 'slop'",
+ "class_g = 'Polybar'",
+ "class_g = 'conky'",
+ "_GTK_FRAME_EXTENTS@:c",
+ "_NET_WM_WINDOW_TYPE:a *= '_KDE_NET_WM_WINDOW_TYPE_OVERRIDE'"
+ ];
+
+
+
+ #################################
+ # Transparency / Opacity #
+ #################################
+
+ inactive-opacity = 1;
+ frame-opacity = 1.0;
+ inactive-opacity-override = false;
+ active-opacity = 1.0;
+ inactive-dim = 0.1
+
+ focus-exclude = [
+ "class_g = 'Cairo-clock'",
+ "class_g = 'gcolor3'",
+ "class_g = 'Bar'", # lemonbar
+ "class_g = 'slop'" # maim
+ ];
+
+
+
+ #################################
+ # Fading #
+ #################################
+
+ fading = true;
+ fade-in-step = .1;
+ fade-out-step = .1;
+
+
+
+ #################################
+ # General Settings #
+ #################################
+
+ # daemon = false
+ # experimental-backends = true;
+ # backend = "glx";
+ backend = "xrender";
+
+ vsync = true;
+ mark-wmwin-focused = true;
+ mark-ovredir-focused = true;
+ detect-rounded-corners = true;
+ detect-client-opacity = true;
+
+ # Specify refresh rate of the screen. If not specified or 0, picom will
+ # try detecting this with X RandR extension.
+ #
+ # refresh-rate = 60
+ refresh-rate = 0;
+
+ # Use 'WM_TRANSIENT_FOR' to group windows, and consider windows
+ # in the same group focused at the same time.
+ #
+ # detect-transient = false
+ detect-transient = true;
+
+ # Use 'WM_CLIENT_LEADER' to group windows, and consider windows in the same
+ # group focused at the same time. 'WM_TRANSIENT_FOR' has higher priority if
+ # detect-transient is enabled, too.
+ #
+ # detect-client-leader = false
+ detect-client-leader = true;
+
+ # Disable the use of damage information.
+ # This cause the whole screen to be redrawn everytime, instead of the part of the screen
+ # has actually changed. Potentially degrades the performance, but might fix some artifacts.
+ # The opposing option is use-damage
+ #
+ # no-use-damage = false
+ use-damage = true;
+
+ # Set the log level. Possible values are:
+ # "trace", "debug", "info", "warn", "error"
+ # in increasing level of importance. Case doesn't matter.
+ # If using the "TRACE" log level, it's better to log into a file
+ # using *--log-file*, since it can generate a huge stream of logs.
+ #
+ # log-level = "debug"
+ log-level = "info";
+
+ # Set the log file.
+ # If *--log-file* is never specified, logs will be written to stderr.
+ # Otherwise, logs will to written to the given file, though some of the early
+ # logs might still be written to the stderr.
+ # When setting this option from the config file, it is recommended to use an absolute path.
+ #
+ # log-file = "/path/to/your/log/file"
+
+ # Show all X errors (for debugging)
+ # show-all-xerrors = false
+
+ # Write process ID to a file.
+ # write-pid-path = "/path/to/your/log/file"
+
+ # Window type settings
+ #
+ # 'WINDOW_TYPE' is one of the 15 window types defined in EWMH standard:
+ # "unknown", "desktop", "dock", "toolbar", "menu", "utility",
+ # "splash", "dialog", "normal", "dropdown_menu", "popup_menu",
+ # "tooltip", "notification", "combo", and "dnd".
+ #
+ # Following per window-type options are available: ::
+ #
+ # fade, shadow:::
+ # Controls window-type-specific shadow and fade settings.
+ #
+ # opacity:::
+ # Controls default opacity of the window type.
+ #
+ # focus:::
+ # Controls whether the window of this type is to be always considered focused.
+ # (By default, all window types except "normal" and "dialog" has this on.)
+ #
+ # full-shadow:::
+ # Controls whether shadow is drawn under the parts of the window that you
+ # normally won't be able to see. Useful when the window has parts of it
+ # transparent, and you want shadows in those areas.
+ #
+ # redir-ignore:::
+ # Controls whether this type of windows should cause screen to become
+ # redirected again after been unredirected. If you have unredir-if-possible
+ # set, and doesn't want certain window to cause unnecessary screen redirection,
+ # you can set this to `true`.
+ #
+ wintypes:
+ {
+ normal = { }
+ desktop = { }
+ tooltip = { shadow = true; opacity = 1; focus = true; full-shadow = false; corner-radius = 1; };
+ dock = { }
+ dnd = { shadow = false; }
+ splash = { }
+ popup_menu = { opacity = 1; }
+ dropdown_menu = { opacity = 1; }
+ utility = { }
+ };
+ '';
+}
\ No newline at end of file
diff --git a/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/bottom-active.png b/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/bottom-active.png
new file mode 100644
index 000000000..9d9591809
Binary files /dev/null and b/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/bottom-active.png differ
diff --git a/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/bottom-inactive.png b/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/bottom-inactive.png
new file mode 100644
index 000000000..9d9591809
Binary files /dev/null and b/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/bottom-inactive.png differ
diff --git a/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/close-active.png b/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/close-active.png
new file mode 100644
index 000000000..7fc395be1
Binary files /dev/null and b/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/close-active.png differ
diff --git a/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/close-inactive.png b/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/close-inactive.png
new file mode 100644
index 000000000..1d45533ab
Binary files /dev/null and b/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/close-inactive.png differ
diff --git a/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/close-prelight.png b/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/close-prelight.png
new file mode 100644
index 000000000..c254de38b
Binary files /dev/null and b/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/close-prelight.png differ
diff --git a/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/close-pressed.png b/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/close-pressed.png
new file mode 100644
index 000000000..0ecc986b0
Binary files /dev/null and b/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/close-pressed.png differ
diff --git a/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/hide-active.png b/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/hide-active.png
new file mode 100644
index 000000000..02b83c9dc
Binary files /dev/null and b/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/hide-active.png differ
diff --git a/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/hide-inactive.png b/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/hide-inactive.png
new file mode 100644
index 000000000..bd5c7ecac
Binary files /dev/null and b/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/hide-inactive.png differ
diff --git a/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/hide-prelight.png b/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/hide-prelight.png
new file mode 100644
index 000000000..45fef2bd3
Binary files /dev/null and b/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/hide-prelight.png differ
diff --git a/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/hide-pressed.png b/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/hide-pressed.png
new file mode 100644
index 000000000..850971aef
Binary files /dev/null and b/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/hide-pressed.png differ
diff --git a/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/left-active.png b/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/left-active.png
new file mode 100644
index 000000000..9d9591809
Binary files /dev/null and b/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/left-active.png differ
diff --git a/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/left-inactive.png b/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/left-inactive.png
new file mode 100644
index 000000000..9d9591809
Binary files /dev/null and b/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/left-inactive.png differ
diff --git a/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/maximize-active.png b/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/maximize-active.png
new file mode 100644
index 000000000..229e2801d
Binary files /dev/null and b/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/maximize-active.png differ
diff --git a/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/maximize-inactive.png b/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/maximize-inactive.png
new file mode 100644
index 000000000..e8252ec9f
Binary files /dev/null and b/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/maximize-inactive.png differ
diff --git a/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/maximize-prelight.png b/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/maximize-prelight.png
new file mode 100644
index 000000000..971e5f747
Binary files /dev/null and b/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/maximize-prelight.png differ
diff --git a/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/maximize-pressed.png b/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/maximize-pressed.png
new file mode 100644
index 000000000..f39e29729
Binary files /dev/null and b/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/maximize-pressed.png differ
diff --git a/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/maximize-toggled-active.png b/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/maximize-toggled-active.png
new file mode 100644
index 000000000..c6918673d
Binary files /dev/null and b/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/maximize-toggled-active.png differ
diff --git a/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/maximize-toggled-inactive.png b/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/maximize-toggled-inactive.png
new file mode 100644
index 000000000..60ef3a31f
Binary files /dev/null and b/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/maximize-toggled-inactive.png differ
diff --git a/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/maximize-toggled-prelight.png b/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/maximize-toggled-prelight.png
new file mode 100644
index 000000000..1cde3ebb6
Binary files /dev/null and b/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/maximize-toggled-prelight.png differ
diff --git a/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/maximize-toggled-pressed.png b/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/maximize-toggled-pressed.png
new file mode 100644
index 000000000..b0c412274
Binary files /dev/null and b/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/maximize-toggled-pressed.png differ
diff --git a/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/right-active.png b/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/right-active.png
new file mode 100644
index 000000000..9d9591809
Binary files /dev/null and b/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/right-active.png differ
diff --git a/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/right-inactive.png b/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/right-inactive.png
new file mode 100644
index 000000000..9d9591809
Binary files /dev/null and b/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/right-inactive.png differ
diff --git a/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/themerc b/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/themerc
new file mode 100644
index 000000000..4f099f8b4
--- /dev/null
+++ b/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/themerc
@@ -0,0 +1,35 @@
+button_offset=3
+button_spacing=0
+
+show_app_icon=false
+
+full_width_title=true
+
+title_shadow_active=false
+title_shadow_inactive=false
+
+title_horizontal_offset=5
+title_vertical_offset_active=0
+title_vertical_offset_inactive=0
+
+active_text_color=#bbbbbb
+active_text_shadow_color=#bbbbbb
+
+inactive_text_color=#bbbbbb
+inactive_text_shadow_color=#bbbbbb
+
+shadow_delta_height=10
+shadow_delta_width=0
+shadow_delta_x=0
+shadow_delta_y=0
+shadow_opacity=75
+
+# button_layout
+# O = Option menu
+# T = Stick
+# H = hide
+# S = shade
+# M = maximize
+# C = close
+# | = title
+button_layout=|HMC
\ No newline at end of file
diff --git a/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/title-1-active.png b/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/title-1-active.png
new file mode 100644
index 000000000..964021c81
Binary files /dev/null and b/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/title-1-active.png differ
diff --git a/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/title-1-inactive.png b/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/title-1-inactive.png
new file mode 100644
index 000000000..964021c81
Binary files /dev/null and b/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/title-1-inactive.png differ
diff --git a/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/title-2-active.png b/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/title-2-active.png
new file mode 100644
index 000000000..964021c81
Binary files /dev/null and b/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/title-2-active.png differ
diff --git a/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/title-2-inactive.png b/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/title-2-inactive.png
new file mode 100644
index 000000000..964021c81
Binary files /dev/null and b/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/title-2-inactive.png differ
diff --git a/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/title-3-active.png b/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/title-3-active.png
new file mode 100644
index 000000000..964021c81
Binary files /dev/null and b/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/title-3-active.png differ
diff --git a/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/title-3-inactive.png b/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/title-3-inactive.png
new file mode 100644
index 000000000..964021c81
Binary files /dev/null and b/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/title-3-inactive.png differ
diff --git a/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/title-4-active.png b/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/title-4-active.png
new file mode 100644
index 000000000..964021c81
Binary files /dev/null and b/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/title-4-active.png differ
diff --git a/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/title-4-inactive.png b/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/title-4-inactive.png
new file mode 100644
index 000000000..964021c81
Binary files /dev/null and b/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/title-4-inactive.png differ
diff --git a/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/title-5-active.png b/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/title-5-active.png
new file mode 100644
index 000000000..964021c81
Binary files /dev/null and b/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/title-5-active.png differ
diff --git a/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/title-5-inactive.png b/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/title-5-inactive.png
new file mode 100644
index 000000000..964021c81
Binary files /dev/null and b/nixos/home-manager/desktops/xfce/themes/everblush/xfwm4/title-5-inactive.png differ
diff --git a/nixos/home-manager/desktops/xfce/xfce.nix b/nixos/home-manager/desktops/xfce/xfce.nix
new file mode 100644
index 000000000..63e0ab413
--- /dev/null
+++ b/nixos/home-manager/desktops/xfce/xfce.nix
@@ -0,0 +1,217 @@
+{ config, lib, pkgs, theme, ... }:
+with lib;
+let
+ cfg = config.athena.desktops.xfce;
+ bg-path = "/run/current-system/sw/share/backgrounds/athena/${theme.background}";
+ # pkgs.writeShellScriptBin and builtins.readFile are used to take the specified shell script that can be called and installed below by home-manager. There is no a target dir because home-manager will make them inside $PATH in order to be called
+ genmon-cpu = pkgs.writeShellScriptBin "genmon-cpu"
+ (builtins.readFile ./bin/genmon-cpu);
+ genmon-datetime = pkgs.writeShellScriptBin "genmon-datetime"
+ (builtins.readFile ./bin/genmon-datetime);
+ genmon-mem = pkgs.writeShellScriptBin "genmon-mem"
+ (builtins.readFile ./bin/genmon-mem);
+ i3lock-everblush = pkgs.writeShellScriptBin "i3lock-everblush"
+ (builtins.readFile ./bin/i3lock-everblush);
+ #xfce-init = pkgs.writeShellScriptBin "xfce-init"
+ #(builtins.readFile ./bin/xfce-init);
+in
+{
+ options.athena.desktops.xfce = {
+ refined = mkEnableOption (mdDoc "Whether to enable AthenaOS's XFCE Refined desktop");
+ picom = mkEnableOption (mdDoc "Whether to enable AthenaOS's XFCE Picom desktop");
+ };
+
+ config = mkIf (cfg != null) (mkMerge [
+ {
+ home.packages = with pkgs; [
+ (nerdfonts.override { fonts = [ "JetBrainsMono" "NerdFontsSymbolsOnly" ]; })
+ #mugshot
+ networkmanagerapplet # NetworkManager control applet for GNOME
+ xdg-user-dirs # A tool to help manage well known user directories like the desktop folder and the music folder
+ xorg.xrandr
+ ] ++ (with pkgs.xfce; [
+ ristretto # A fast and lightweight picture-viewer for the Xfce desktop environment
+ xfce4-appfinder # Appfinder for the Xfce4 Desktop Environment
+ #xfce4-cpugraph-plugin # CPU graph show for Xfce panel
+ xfce4-panel # Panel for the Xfce desktop environment
+ xfce4-power-manager # A power manager for the Xfce Desktop Environment
+ #xfce4-pulseaudio-plugin # Adjust the audio volume of the PulseAudio sound system
+ xfce4-screenshooter # Screenshot utility for the Xfce desktop
+ xfce4-session # Session manager for Xfce
+ #xfce4-settings # Settings manager for Xfce
+ xfce4-taskmanager # Easy to use task manager for Xfce
+ #xfce4-whiskermenu-plugin # Alternate application launcher for Xfce
+ xfdesktop # Xfce's desktop manager
+ xfwm4 # Window manager for Xfce
+ ]);
+
+ home.sessionVariables = { QT_AUTO_SCREEN_SCALE_FACTOR = 0; };
+
+ qt.style.name = "qt5ct";
+
+ #xdg.desktopEntries."xfce-init" = {
+ # name = "XFCE Initialization";
+ # exec = "xfce-init";
+ # categories = [ "Application" ];
+ # noDisplay = true;
+ #};
+
+ # To understand about env variables of xdg, refer to https://github.com/nix-community/home-manager/blob/master/modules/misc/xdg.nix
+ # xdg.systemDirs.config is used to source /etc/xdg AND ${config.xdg.configHome}/xfce4/xdg, like a $PATH. In practice, the specified dirs are added in $XDG_CONFIG_DIRS
+ xdg.systemDirs.config = [ "/etc/xdg" "${config.xdg.configHome}/xfce4/xdg" ]; # Not working?
+
+ # It copies "./config/menus/xfce-applications.menu" source file to the nix store, and then symlinks it to the location.
+ xdg.configFile."menus/xfce-applications.menu".source = ./config/menus/xfce-applications.menu;
+
+ # Everblush xfwm4 theme
+ # home.file refers to $HOME dir
+ home.file.".themes".source = ./themes;
+
+ /*home.activation.flag-xfce-once = lib.hm.dag.entryAfter [ "writeBoundary" ] ''
+ touch ${config.home.homeDirectory}/.flag-xfce-once
+ '';*/
+
+ # IMPORTANT: if a specified xfconf setting doesn't work, check if there is an hardcoded xfconf setting inside $HOME/xfce4/xfconf/xfce4-perchannel/.xml dir and delete the entry in your the .xml file of your flake repository
+ xfconf.settings = {
+ xsettings = {
+ "Net/ThemeName" = "${theme.gtk-theme}";
+ "Net/IconThemeName" = "${theme.icon-theme}";
+ "Gtk/CursorThemeName" = "${theme.cursor-theme}";
+ };
+ xfce4-desktop = {
+ "backdrop/screen0/monitor0/workspace0/last-image" = "${bg-path}";
+ "backdrop/screen0/monitor0/workspace1/last-image" = "${bg-path}";
+ "backdrop/screen0/monitor0/workspace2/last-image" = "${bg-path}";
+ "backdrop/screen0/monitor0/workspace3/last-image" = "${bg-path}";
+ "backdrop/screen0/monitorLVDS-1/workspace0/last-image" = "${bg-path}";
+ "backdrop/screen0/monitorLVDS-1/workspace1/last-image" = "${bg-path}";
+ "backdrop/screen0/monitorLVDS-1/workspace2/last-image" = "${bg-path}";
+ "backdrop/screen0/monitorLVDS-1/workspace3/last-image" = "${bg-path}";
+ "backdrop/screen0/monitorHDMI-1/workspace0/last-image" = "${bg-path}";
+ "backdrop/screen0/monitorHDMI-1/workspace1/last-image" = "${bg-path}";
+ "backdrop/screen0/monitorHDMI-1/workspace2/last-image" = "${bg-path}";
+ "backdrop/screen0/monitorHDMI-1/workspace3/last-image" = "${bg-path}";
+ "backdrop/screen0/monitorVGA-1-2/workspace0/last-image" = "${bg-path}";
+ "backdrop/screen0/monitorVGA-1-2/workspace1/last-image" = "${bg-path}";
+ "backdrop/screen0/monitorVGA-1-2/workspace2/last-image" = "${bg-path}";
+ "backdrop/screen0/monitorVGA-1-2/workspace3/last-image" = "${bg-path}";
+ "backdrop/screen0/monitoreDP-1/workspace0/last-image" = "${bg-path}";
+ "backdrop/screen0/monitoreDP-1/workspace1/last-image" = "${bg-path}";
+ "backdrop/screen0/monitoreDP-1/workspace2/last-image" = "${bg-path}";
+ "backdrop/screen0/monitoreDP-1/workspace3/last-image" = "${bg-path}";
+ "backdrop/screen0/monitorVirtual1/workspace0/last-image" = "${bg-path}";
+ "backdrop/screen0/monitorVirtual1/workspace1/last-image" = "${bg-path}";
+ "backdrop/screen0/monitorVirtual1/workspace2/last-image" = "${bg-path}";
+ "backdrop/screen0/monitorVirtual1/workspace3/last-image" = "${bg-path}";
+ };
+ };
+ }
+
+ (mkIf cfg.refined rec {
+ # If xfce refined is enabled
+ home.packages = with pkgs; [
+ gnome.nautilus
+ ];
+ xdg.configFile."xfce4" = {
+ source = ./config/xfce4-refined;
+ #recursive = true;
+ };
+ xfconf.settings = {
+ xfwm4 = {
+ "general/workspace_names" = ["🕵️ " "📖 " "🍒 " "🎸 " "🎮 " "🐝 "];
+ };
+ };
+ })
+
+ (mkIf cfg.picom {
+ # If xfce picom is enabled
+ home.packages = with pkgs; [
+ #xfce.xfce4-docklike-plugin
+ findex # Highly customizable application finder written in Rust and uses Gtk3
+ i3lock-color # A simple screen locker like slock, enhanced version with extra configuration options
+ picom # A fork of XCompMgr, a sample compositing manager for X servers
+ qt6Packages.qtstyleplugin-kvantum # SVG-based Qt theme engine plus a config tool and extra themes
+ roboto # The Roboto family of fonts
+ roboto-mono # Google Roboto Mono fonts
+ ] ++ (with pkgs.xfce; [
+ thunar # Xfce file manager
+ ]) ++ [
+ genmon-cpu
+ genmon-datetime
+ genmon-mem
+ i3lock-everblush
+ #xfce-init
+ ];
+
+ # IMPORTANT: if a specified xfconf setting doesn't work, check if there is an hardcoded xfconf setting inside $HOME/xfce4 dir and delete it
+ xfconf.settings = {
+ xfwm4 = {
+ "general/theme" = "everblush";
+ };
+ };
+ # If picom is enabled
+ programs.eww.enable = true;
+ programs.eww.configDir = ./config/eww;
+ systemd.user.services.picom = {
+ Unit = {
+ Description = "Picom X11 compositor";
+ After = [ "graphical-session-pre.target" ];
+ PartOf = [ "graphical-session.target" ];
+ };
+
+ Install = { WantedBy = [ "graphical-session.target" ]; };
+
+ Service = {
+ ExecStart = "${getExe pkgs.picom} --config ${config.xdg.configFile."picom/picom.conf".source}";
+ Restart = "always";
+ RestartSec = 3;
+ };
+ };
+ # xdg.dataFile refers to .local/share dir
+ xdg.dataFile."icons/assets".source = ./assets;
+ xdg.dataFile."fonts/feather.ttf".source = ./fonts/feather.ttf;
+
+ # Kvantum Everblush
+ xdg.configFile."Kvantum".source = ./config/Kvantum;
+ xdg.configFile."gtk-3.0/gtk.css".source = ./config/gtk-3.0/gtk.css;
+ xdg.configFile."xfce4".source = ./config/xfce4-picom;
+ xdg.desktopEntries."Findex" = {
+ name = "Findex";
+ comment = "Highly customizable application finder written in Rust and uses Gtk3";
+ exec = "findex";
+ terminal = false;
+ categories = [ "Application" ];
+ };
+
+ xresources.properties = {
+ # Thanks to https://github.com/Everblush
+ "*background" = "#181f21";
+ "*foreground" = "#dadada";
+ # Black + DarkGrey
+ "*color0" = "#22292b";
+ "*color8" = "#3b4244";
+ # DarkRed + Red
+ "*color1" = "#e06e6e";
+ "*color9" = "#ef7d7d";
+ # DarkGreen + Green
+ "*color2" = "#8ccf7e";
+ "*color10" = "#9bdead";
+ # DarkYellow + Yellow
+ "*color3" = "#e5c76b";
+ "*color11" = "#f4d67a";
+ # DarkBlue + Blue
+ "*color4" = "#67b0e8";
+ "*color12" = "#6cb5ed";
+ # DarkMagenta + Magenta
+ "*color5" = "#c47fd5";
+ "*color13" = "#ce89df";
+ # DarkCyan + Cyan
+ "*color6" = "#6da4cd";
+ "*color14" = "#67cbe7";
+ # LightGrey + White
+ "*color7" = "#b3b9b8";
+ "*color15" = "#bdc3c2";
+ };
+ })
+ ]);
+}
diff --git a/nixos/home-manager/home/config/menus/blue-applications.menu b/nixos/home-manager/home/config/menus/blue-applications.menu
new file mode 100644
index 000000000..c3d2430c1
--- /dev/null
+++ b/nixos/home-manager/home/config/menus/blue-applications.menu
@@ -0,0 +1,145 @@
+
+
+
+ Applications
+
+ Usual Applications
+ Identify
+ Protect
+ Detect
+ Respond
+ Recover
+
+
+
+
+ Usual Applications
+ usual-apps.directory
+
+
+
+
+
+ Identify
+ 001-identify.directory
+
+
+ 001-identify
+
+
+
+
+
+ Protect
+ 002-protect.directory
+
+
+ 002-protect
+
+
+
+
+
+ Detect
+ 003-detect.directory
+
+
+ 003-detect
+
+
+
+
+
+ Respond
+ 004-respond.directory
+
+
+ 004-respond
+
+
+
+
+
+ Recover
+ 005-recover.directory
+
+
+ 005-recover
+
+
+
+
+
+
+ Accessories
+ Usual Applications/Accessories
+
+
+ Universal Access
+ Usual Applications/Universal Access
+
+
+ Electronics
+ Usual Applications/Electronics
+
+
+ Development
+ Usual Applications/Development
+
+
+ Education
+ Usual Applications/Education
+
+
+ Science
+ Usual Applications/Science
+
+
+ Games
+ Usual Applications/Games
+
+
+ Graphics
+ Usual Applications/Graphics
+
+
+ Internet
+ Usual Applications/Internet
+
+
+ Web Applications
+ Usual Applications/Web Applications
+
+
+ Multimedia
+ Usual Applications/Multimedia
+
+
+ Office
+ Usual Applications/Office
+
+
+ Sundry
+ Usual Applications/Sundry
+
+
+ System
+ Usual Applications/System
+
+
+ System Settings
+ Usual Applications/System Settings
+
+
+ Utilities
+ Usual Applications/Utilities
+
+
+ Other
+ Usual Applications/Other
+
+
+ Hamradio
+ Usual Applications/Hamradio
+
+
diff --git a/nixos/home-manager/home/config/menus/red-applications.menu b/nixos/home-manager/home/config/menus/red-applications.menu
new file mode 100644
index 000000000..22de9926b
--- /dev/null
+++ b/nixos/home-manager/home/config/menus/red-applications.menu
@@ -0,0 +1,707 @@
+
+
+
+ Applications
+
+ Usual Applications
+ Information Gathering
+ Vulnerability Analysis
+ Web Application Analysis
+ Database Assessment
+ Password Attacks
+ Wireless Attacks
+ Reverse Engineering
+ Exploit Frameworks
+ Sniffing - Spoofing
+ Maintaining Access
+ Forensic Tools
+ Reporting Tools
+ Social Engineering Tools
+ System Services
+ Athena OS Links
+
+
+
+
+ Usual Applications
+ usual-apps.directory
+
+
+
+
+ Information Gathering
+ 01-info-gathering.directory
+
+
+ 01-info-gathering
+
+
+
+ DNS Analysis
+ 01-01-dns-analysis.directory
+
+
+ 01-01-dns-analysis
+
+
+
+
+ SMTP Analysis
+ 01-11-smtp-analysis.directory
+
+
+ 01-11-smtp-analysis
+
+
+
+
+ OSINT Analysis
+ 01-07-osint-analysis.directory
+
+
+ 01-07-osint-analysis
+
+
+
+
+ SMB Analysis
+ 01-10-smb-analysis.directory
+
+
+ 01-10-smb-analysis
+
+
+
+
+ Route Analysis
+ 01-08-route-analysis.directory
+
+
+ 01-08-route-analysis
+
+
+
+
+ Host Identification
+ 01-02-identify-live-hosts.directory
+
+
+ 01-02-identify-live-hosts
+
+
+
+
+ SSL Analysis
+ 01-13-ssl-analysis.directory
+
+
+ 01-13-ssl-analysis
+
+
+
+
+ Firewall Tools
+ 01-03-ids-ips-identification.directory
+
+
+ 01-03-ids-ips-identification
+
+
+
+
+ SNMP Analysis
+ 01-12-snmp-analysis.directory
+
+
+ 01-12-snmp-analysis
+
+
+
+
+ Network and Port Scanners
+ 01-04-network-scanners.directory
+
+
+ 01-04-network-scanners
+
+
+
+
+
+
+
+ Vulnerability Analysis
+ 02-vulnerability-analysis.directory
+
+
+ 02-vulnerability-analysis
+
+
+
+ Cisco Tools
+ 02-01-cisco-tools.directory
+
+
+ 02-01-cisco-tools
+
+
+
+
+
+ Fuzzing Tools
+ 02-02-fuzzers.directory
+
+
+ 02-02-fuzzers
+
+
+
+
+
+ VoIP Tools
+ 02-03-voip-tools.directory
+
+
+ 02-03-voip-tools
+
+
+
+
+
+ Nessus
+ 02-05-nessus.directory
+
+
+ 02-05-nessus
+
+
+
+
+
+ OpenVAS
+ 02-06-openvas.directory
+
+
+ 02-06-openvas
+
+
+
+
+
+ Stress Testing
+ 02-07-stress-testing.directory
+
+
+ 02-07-stress-testing
+
+
+
+
+
+
+
+
+ Web Application Analysis
+ 03-webapp-analysis.directory
+
+
+ 03-webapp-analysis
+
+
+
+ CMS and Site Identification
+ 03-01-cms-identification.directory
+
+
+ 03-01-cms-identification
+
+
+
+
+ Web Crawlers
+ 03-04-web-crawlers.directory
+
+
+ 03-04-web-crawlers
+
+
+
+
+ WebApp Proxies
+ 03-06-web-application-proxies.directory
+
+
+ 03-06-web-application-proxies
+
+
+
+
+ Web Vulnerability Scanners
+ 03-05-web-vulnerability-scanners.directory
+
+
+ 03-05-web-vulnerability-scanners
+
+
+
+
+
+
+
+ Database Assessment
+ 04-database-assessment.directory
+
+
+ 04-database-assessment
+
+
+
+
+
+
+
+ Password Attacks
+ 05-password-attacks.directory
+
+
+ 05-password-attacks
+
+
+
+ Online Attacks
+ 05-01-online-attacks.directory
+
+
+ 05-01-online-attacks
+
+
+
+
+ Offline Attacks
+ 05-02-offline-attacks.directory
+
+
+ 05-02-offline-attacks
+
+
+
+
+ Passing the Hash
+ 05-04-pass-hash.directory
+
+
+ 05-04-pass-hash
+
+
+
+
+ Password Profiling
+ 05-05-profile.directory
+
+
+ 05-05-profile
+
+
+
+
+
+
+
+ Wireless Attacks
+ 06-wireless-attacks.directory
+
+
+ 06-wireless-attacks
+
+
+
+ 802.11 Wireless Analysis
+ 06-01-wireless-tools.directory
+
+
+ 06-01-wireless-tools
+
+
+
+
+ Bluetooth Tools
+ 06-02-bluetooth-tools.directory
+
+
+ 06-02-bluetooth-tools
+
+
+
+
+ Software Defined Radio
+ 06-05-radio-tools.directory
+
+
+ 06-05-radio-tools
+
+
+
+
+ RFID NFC Tools
+ 06-03-rfid-nfc-tools.directory
+
+
+ 06-03-rfid-nfc-tools
+
+
+
+
+ Other Wireless Tools
+ 06-04-other-wireless.directory
+
+
+ 06-04-other-wireless
+
+
+
+
+
+
+
+ Reverse Engineering
+ 07-reverseengineer.directory
+
+
+ 07-reverseengineer
+
+
+
+
+
+
+ Exploit Frameworks
+ 08-exploitation-tools.directory
+
+
+ 08-exploitation-tools
+
+
+
+
+
+ Sniffing - Spoofing
+ 09-sniffing-spoofing.directory
+
+
+ 09-sniffing-spoofing
+
+
+
+ Network Sniffers
+ 09-01-network-sniffers.directory
+
+
+ 09-01-network-sniffers
+
+
+
+
+ Network Spoofing
+ 09-02-network-spoofing.directory
+
+
+ 09-02-network-spoofing
+
+
+
+
+
+
+ Maintaining Access
+ 10-maintaining-access.directory
+
+
+ 10-maintaining-access
+
+
+
+ OS Backdoors
+ 10-01-os-backdoors.directory
+
+
+ 10-01-os-backdoors
+
+
+
+
+ Web Backdoors
+ 10-03-web-backdoors.directory
+
+
+ 10-03-web-backdoors
+
+
+
+
+ Command and Control
+ 10-04-command-control.directory
+
+
+ 10-04-command-control
+
+
+
+
+ Tunneling
+ 10-02-tunneling.directory
+
+
+ 10-02-tunneling
+
+
+
+
+
+
+
+ Forensic Tools
+ 11-forensics.directory
+
+
+ 11-forensics
+
+
+
+ PDF Forensics Tools
+ 11-11-pdf-forensics-tools.directory
+
+
+ 11-11-pdf-forensics-tools
+
+
+
+
+ Forensics Analysis Suites
+ 11-08-forensic-suites.directory
+
+
+ 11-08-forensic-suites
+
+
+
+
+ Digital Forensics
+ 11-03-digital-forensics.directory
+
+
+ 11-03-digital-forensics
+
+
+
+
+ 11-04-forensic-analysis-tools
+
+
+
+
+ Forensic Carving Tools
+ 11-05-forensic-carving-tools.directory
+
+
+ 11-05-forensic-carving-tools
+
+
+
+
+ Forensic Imaging Tools
+ 11-07-forensic-imaging-tools.directory
+
+
+ 11-07-forensic-imaging-tools
+
+
+
+
+ Forensic Hashing Tools
+ 11-06-forensic-hashing-tools.directory
+
+
+ 11-06-forensic-hashing-tools
+
+
+
+
+
+
+ Reporting Tools
+ 12-reporting.directory
+
+
+ 12-reporting
+
+
+
+
+
+ Social Engineering Tools
+ 13-social-engineering-tools.directory
+
+
+ 13-social-engineering-tools
+
+
+
+
+
+ System Services
+ 14-services.directory
+
+
+ 14-services
+
+
+
+ BEEF XSS Framework
+ 14-08-beef-service.directory
+
+
+ 14-08-beef-service
+
+
+
+
+ Metasploit
+ 14-09-metasploit-service.directory
+
+
+ 14-09-metasploit-service
+
+
+
+
+ Dradis
+ 14-10-dradis-service.directory
+
+
+ 14-10-dradis-service
+
+
+
+
+ OpenVas
+ 14-11-openvas-service.directory
+
+
+ 14-11-openvas-service
+
+
+
+
+ Xplico
+ 14-12-xplico-service.directory
+
+
+ 14-12-xplico-service
+
+
+
+
+ GVM
+ 14-13-gvm-service.directory
+
+
+ 14-13-gvm-service
+
+
+
+
+ Defectdojo
+ 14-16-defectdojo-service.directory
+
+
+ 14-16-defectdojo-service
+
+
+
+
+
+
+
+ Athena OS Links
+ 15-athena-links.directory
+
+
+ 15-athena-offsec-links
+
+
+
+
+
+
+ Accessories
+ Usual Applications/Accessories
+
+
+ Universal Access
+ Usual Applications/Universal Access
+
+
+ Electronics
+ Usual Applications/Electronics
+
+
+ Development
+ Usual Applications/Development
+
+
+ Education
+ Usual Applications/Education
+
+
+ Science
+ Usual Applications/Science
+
+
+ Games
+ Usual Applications/Games
+
+
+ Graphics
+ Usual Applications/Graphics
+
+
+ Internet
+ Usual Applications/Internet
+
+
+ Web Applications
+ Usual Applications/Web Applications
+
+
+ Multimedia
+ Usual Applications/Multimedia
+
+
+ Office
+ Usual Applications/Office
+
+
+ Sundry
+ Usual Applications/Sundry
+
+
+ System
+ Usual Applications/System
+
+
+ System Settings
+ Usual Applications/System Settings
+
+
+ Utilities
+ Usual Applications/Utilities
+
+
+ Other
+ Usual Applications/Other
+
+
+ Hamradio
+ Usual Applications/Hamradio
+
+
diff --git a/nixos/home-manager/home/default.nix b/nixos/home-manager/home/default.nix
new file mode 100644
index 000000000..1750bc8a0
--- /dev/null
+++ b/nixos/home-manager/home/default.nix
@@ -0,0 +1,9 @@
+{ config, lib, pkgs, username, ... }:
+with lib;
+{
+ home-manager.users.${username} = { pkgs, ...}: {
+ # It copies "./config/menus/xfce-applications.menu" source file to the nix store, and then symlinks it to the location.
+ xdg.configFile."menus/blue-applications.menu".source = ./config/menus/blue-applications.menu;
+ xdg.configFile."menus/red-applications.menu".source = ./config/menus/red-applications.menu;
+ };
+}
\ No newline at end of file
diff --git a/nixos/home-manager/shells/bash/bashrc b/nixos/home-manager/shells/bash/bashrc
new file mode 100644
index 000000000..9ff7ecc83
--- /dev/null
+++ b/nixos/home-manager/shells/bash/bashrc
@@ -0,0 +1,242 @@
+# ~/.bashrc
+
+# Append "$1" to $PATH when not already in.
+append_path () {
+ case ":$PATH:" in
+ *:"$1":*)
+ ;;
+ *)
+ PATH="${PATH:+$PATH:}$1"
+ esac
+}
+append_path "$HOME/bin"
+append_path "$HOME/.local/bin"
+
+### EXPORT ### Should be before the change of the shell
+#export EDITOR=/run/current-system/sw/bin/nvim
+#export VISUAL='nano'
+export HISTCONTROL=ignoreboth:erasedups:ignorespace
+HISTSIZE=100000
+HISTFILESIZE=2000000
+shopt -s histappend
+export PAGER='most'
+
+#Ibus settings if you need them
+#type ibus-setup in terminal to change settings and start the daemon
+#delete the hashtags of the next lines and restart
+#export GTK_IM_MODULE=ibus
+#export XMODIFIERS=@im=dbus
+#export QT_IM_MODULE=ibus
+
+# COLOURS! YAAAY!
+export TERM=xterm-256color
+
+#export SHELL=$(which bash)
+
+#export BFETCH_INFO="pfetch"
+#export BFETCH_ART="$HOME/.local/textart/fetch/unix.textart"
+#export PF_INFO="Unix Genius"
+
+#export BFETCH_INFO="curl --silent --location 'wttr.in/rome?0pq'"
+#export BFETCH_ART="printf \"\033[35m\"; figlet -f Bloody Spooky"
+#export BFETCH_COLOR="$HOME/.local/textart/color/icon/ghosts.textart"
+
+#export BFETCH_INFO="exa -la"
+#export BFETCH_ART="$HOME/.local/textart/fetch/pacman-maze.textart"
+#export BFETCH_COLOR="$HOME/.local/textart/color/icon/pacman.textart"
+
+export BFETCH_INFO="pfetch"
+export BFETCH_ART="cowsay '<3 Athena OS'"
+export BFETCH_COLOR="$HOME/.local/textart/color/icon/panes.textart"
+
+export PAYLOADS="/run/current-system/sw/share/payloads"
+export SECLISTS="$PAYLOADS/SecLists"
+export PAYLOADSALLTHETHINGS="$PAYLOADS/PayloadsAllTheThings"
+export FUZZDB="$PAYLOADS/FuzzDB"
+export AUTOWORDLISTS="$PAYLOADS/Auto_Wordlists"
+export SECURITYWORDLIST="$PAYLOADS/Security-Wordlist"
+
+export MIMIKATZ="/run/current-system/sw/share/mimikatz/"
+export POWERSPLOIT="/run/current-system/sw/share/powersploit/"
+
+export ROCKYOU="$SECLISTS/Passwords/Leaked-Databases/rockyou.txt"
+export DIRSMALL="$SECLISTS/Discovery/Web-Content/directory-list-2.3-small.txt"
+export DIRMEDIUM="$SECLISTS/Discovery/Web-Content/directory-list-2.3-medium.txt"
+export DIRBIG="$SECLISTS/Discovery/Web-Content/directory-list-2.3-big.txt"
+export WEBAPI_COMMON="$SECLISTS/Discovery/Web-Content/api/api-endpoints.txt"
+export WEBAPI_MAZEN="$SECLISTS/Discovery/Web-Content/common-api-endpoints-mazen160.txt"
+export WEBCOMMON="$SECLISTS/Discovery/Web-Content/common.txt"
+export WEBPARAM="$SECLISTS/Discovery/Web-Content/burp-parameter-names.txt"
+
+# If not running interactively, don't do anything
+[[ $- != *i* ]] && return
+
+# switch shell
+[[ $(ps --no-header --pid=$PPID --format=comm) != "${SHELL#/run/current-system/sw/bin/}" && -z ${BASH_EXECUTION_STRING} && ${SHELL} != *"bash"* ]] && exec $SHELL
+
+#Configure zoxide for bash
+eval "$(zoxide init bash)"
+
+if [[ $(tty) == */dev/tty* ]]; then
+ PS1="\e[1;32m[HQ:\e[1;31m$(ip -4 addr | grep -v '127.0.0.1' | grep -v 'secondary' | grep -oP '(?<=inet\s)\d+(\.\d+){3}' | sed -z 's/\n/|/g;s/|\$/\n/' | rev | cut -c 2- | rev) | \u\e[1;32m]\n[>]\[\e[1;36m\]\$(pwd) $ \[\e[0m\]"
+else
+ PS1="\e[1;32m┌──[HQ🚀🌐\e[1;31m$(ip -4 addr | grep -v '127.0.0.1' | grep -v 'secondary' | grep -oP '(?<=inet\s)\d+(\.\d+){3}' | sed -z 's/\n/|/g;s/|\$/\n/' | rev | cut -c 2- | rev)🔥\u\e[1;32m]\n└──╼[👾]\[\e[1;36m\]\$(pwd) $ \[\e[0m\]"
+fi
+
+# Use bash-completion, if available
+[[ $PS1 && -f /run/current-system/sw/share/bash-completion/bash_completion ]] && \
+ . /run/current-system/sw/share/bash-completion/bash_completion
+
+# Bash aliases
+if [ -f ~/.bash_aliases ]; then
+ . ~/.bash_aliases
+fi
+
+# Change up a variable number of directories
+# E.g:
+# cu -> cd ../
+# cu 2 -> cd ../../
+# cu 3 -> cd ../../../
+function cu {
+ local count=$1
+ if [ -z "${count}" ]; then
+ count=1
+ fi
+ local path=""
+ for i in $(seq 1 ${count}); do
+ path="${path}../"
+ done
+ cd $path
+}
+
+
+# Open all modified files in vim tabs
+function vimod {
+ vim -p $(git status -suall | awk '{print $2}')
+}
+
+# Open files modified in a git commit in vim tabs; defaults to HEAD. Pop it in your .bashrc
+# Examples:
+# virev 49808d5
+# virev HEAD~3
+function virev {
+ commit=$1
+ if [ -z "${commit}" ]; then
+ commit="HEAD"
+ fi
+ rootdir=$(git rev-parse --show-toplevel)
+ sourceFiles=$(git show --name-only --pretty="format:" ${commit} | grep -v '^$')
+ toOpen=""
+ for file in ${sourceFiles}; do
+ file="${rootdir}/${file}"
+ if [ -e "${file}" ]; then
+ toOpen="${toOpen} ${file}"
+ fi
+ done
+ if [ -z "${toOpen}" ]; then
+ echo "No files were modified in ${commit}"
+ return 1
+ fi
+ vim -p ${toOpen}
+}
+
+# 'Safe' version of __git_ps1 to avoid errors on systems that don't have it
+function gitPrompt {
+ command -v __git_ps1 > /dev/null && __git_ps1 " (%s)"
+}
+
+# Colours have names too. Stolen from Arch wiki
+txtblk='\[\e[0;30m\]' # Black - Regular
+txtred='\[\e[0;31m\]' # Red
+txtgrn='\[\e[0;32m\]' # Green
+txtylw='\[\e[0;33m\]' # Yellow
+txtblu='\[\e[0;34m\]' # Blue
+txtpur='\[\e[0;35m\]' # Purple
+txtcyn='\[\e[0;36m\]' # Cyan
+txtwht='\[\e[0;37m\]' # White
+bldblk='\[\e[1;30m\]' # Black - Bold
+bldred='\[\e[1;31m\]' # Red
+bldgrn='\[\e[1;32m\]' # Green
+bldylw='\[\e[1;33m\]' # Yellow
+bldblu='\[\e[1;34m\]' # Blue
+bldpur='\[\e[1;35m\]' # Purple
+bldcyn='\[\e[1;36m\]' # Cyan
+bldwht='\[\e[1;37m\]' # White
+unkblk='\[\e[4;30m\]' # Black - Underline
+undred='\[\e[4;31m\]' # Red
+undgrn='\[\e[4;32m\]' # Green
+undylw='\[\e[4;33m\]' # Yellow
+undblu='\[\e[4;34m\]' # Blue
+undpur='\[\e[4;35m\]' # Purple
+undcyn='\[\e[4;36m\]' # Cyan
+undwht='\[\e[4;37m\]' # White
+bakblk='\[\e[40m\]' # Black - Background
+bakred='\[\e[41m\]' # Red
+badgrn='\[\e[42m\]' # Green
+bakylw='\[\e[43m\]' # Yellow
+bakblu='\[\e[44m\]' # Blue
+bakpur='\[\e[45m\]' # Purple
+bakcyn='\[\e[46m\]' # Cyan
+bakwht='\[\e[47m\]' # White
+txtrst='\[\e[0m\]' # Text Reset
+
+# Prompt colours
+atC="${txtpur}"
+nameC="${txtpur}"
+hostC="${txtpur}"
+pathC="${txtgrn}"
+gitC="${txtpur}"
+pointerC="${txtgrn}"
+normalC="${txtwht}"
+
+# Red name for root
+if [ "${UID}" -eq "0" ]; then
+ nameC="${txtred}"
+fi
+
+#shopt
+shopt -s autocd # change to named directory
+shopt -s cdspell # autocorrects cd misspellings
+shopt -s cmdhist # save multi-line commands in history as single line
+shopt -s dotglob
+shopt -s histappend # do not overwrite history
+shopt -s expand_aliases # expand aliases
+
+# # ex = EXtractor for all kinds of archives
+# # usage: ex
+ex ()
+{
+ if [ -f $1 ] ; then
+ case $1 in
+ *.tar.bz2) tar xjf $1 ;;
+ *.tar.gz) tar xzf $1 ;;
+ *.bz2) bunzip2 $1 ;;
+ *.rar) unrar x $1 ;;
+ *.gz) gunzip $1 ;;
+ *.tar) tar xf $1 ;;
+ *.tbz2) tar xjf $1 ;;
+ *.tgz) tar xzf $1 ;;
+ *.zip) unzip $1 ;;
+ *.Z) uncompress $1;;
+ *.7z) 7z x $1 ;;
+ *.deb) ar x $1 ;;
+ *.tar.xz) tar xf $1 ;;
+ *.tar.zst) tar xf $1 ;;
+ *) echo "'$1' cannot be extracted via ex()" ;;
+ esac
+ else
+ echo "'$1' is not a valid file"
+ fi
+}
+
+export PROMPT_COMMAND='source ~/.bashrc no-repeat-flag'
+
+buffer_clean(){
+ free -h && sudo sh -c 'echo 1 > /proc/sys/vm/drop_caches' && free -h
+}
+
+#if [[ $1 != no-repeat-flag && -z $NO_REPETITION ]]; then
+# neofetch
+#fi
+
+[[ $1 != no-repeat-flag && -f "$(which blesh-share)" ]] && source "$(blesh-share)"/ble.sh --attach=none
\ No newline at end of file
diff --git a/nixos/home-manager/shells/bash/blerc b/nixos/home-manager/shells/bash/blerc
new file mode 100644
index 000000000..728996c29
--- /dev/null
+++ b/nixos/home-manager/shells/bash/blerc
@@ -0,0 +1,4 @@
+# Set proper background color on the autocomplete
+ble-face auto_complete='fg=242,bg=235'
+ble-face region_insert=''
+bleopt exec_errexit_mark=''
diff --git a/nixos/home-manager/shells/bash/default.nix b/nixos/home-manager/shells/bash/default.nix
new file mode 100644
index 000000000..88a6c9e98
--- /dev/null
+++ b/nixos/home-manager/shells/bash/default.nix
@@ -0,0 +1,263 @@
+{ home-manager, username, ... }:
+{
+ home-manager.users.${username} = { pkgs, ...}: {
+ home.file.".bashrc".source = ./bashrc;
+ home.file.".blerc".source = ./blerc;
+ home.packages = with pkgs; [
+ blesh
+ nanorc
+ neofetch
+ nix-bash-completions
+ zoxide
+ ];
+ programs.bash = {
+ enableCompletion = true;
+ # Below ''$ has been used to escape $ character
+ bashrcExtra = ''
+ append_path () {
+ case ":$PATH:" in
+ *:"$1":*)
+ ;;
+ *)
+ PATH="${PATH:+$PATH:}$1"
+ esac
+ }
+ append_path "$HOME/bin"
+ append_path "$HOME/.local/bin"
+
+ ### EXPORT ### Should be before the change of the shell
+ export HISTCONTROL=ignoreboth:erasedups:ignorespace
+ HISTSIZE=100000
+ HISTFILESIZE=2000000
+ shopt -s histappend
+ export PAGER='most'
+
+ #Ibus settings if you need them
+ #type ibus-setup in terminal to change settings and start the daemon
+ #delete the hashtags of the next lines and restart
+ #export GTK_IM_MODULE=ibus
+ #export XMODIFIERS=@im=dbus
+ #export QT_IM_MODULE=ibus
+
+ # COLOURS! YAAAY!
+ export TERM=xterm-256color
+
+ export BFETCH_INFO="pfetch"
+ export BFETCH_ART="cowsay '<3 Athena OS'"
+ export BFETCH_COLOR="$HOME/.local/textart/color/icon/panes.textart"
+
+ export PAYLOADS="/run/current-system/sw/share/payloads"
+ export SECLISTS="$PAYLOADS/SecLists"
+ export PAYLOADSALLTHETHINGS="$PAYLOADS/PayloadsAllTheThings"
+ export FUZZDB="$PAYLOADS/FuzzDB"
+ export AUTOWORDLISTS="$PAYLOADS/Auto_Wordlists"
+ export SECURITYWORDLIST="$PAYLOADS/Security-Wordlist"
+
+ export MIMIKATZ="/run/current-system/sw/share/mimikatz/"
+ export POWERSPLOIT="/run/current-system/sw/share/powersploit/"
+
+ export ROCKYOU="$SECLISTS/Passwords/Leaked-Databases/rockyou.txt"
+ export DIRSMALL="$SECLISTS/Discovery/Web-Content/directory-list-2.3-small.txt"
+ export DIRMEDIUM="$SECLISTS/Discovery/Web-Content/directory-list-2.3-medium.txt"
+ export DIRBIG="$SECLISTS/Discovery/Web-Content/directory-list-2.3-big.txt"
+ export WEBAPI_COMMON="$SECLISTS/Discovery/Web-Content/api/api-endpoints.txt"
+ export WEBAPI_MAZEN="$SECLISTS/Discovery/Web-Content/common-api-endpoints-mazen160.txt"
+ export WEBCOMMON="$SECLISTS/Discovery/Web-Content/common.txt"
+ export WEBPARAM="$SECLISTS/Discovery/Web-Content/burp-parameter-names.txt"
+
+ # If not running interactively, don't do anything
+ [[ $- != *i* ]] && return
+
+ # switch shell
+ [[ $(ps --no-header --pid=$PPID --format=comm) != "''${SHELL#/run/current-system/sw/bin/}" && -z ''${BASH_EXECUTION_STRING} && ''${SHELL} != *"bash"* ]] && exec $SHELL
+
+ #Configure zoxide for bash
+ eval "$(zoxide init bash)"
+
+ if [[ $(tty) == */dev/tty* ]]; then
+ PS1="\e[1;32m[HQ:\e[1;31m$(ip -4 addr | grep -v '127.0.0.1' | grep -v 'secondary' | grep -oP '(?<=inet\s)\d+(\.\d+){3}' | sed -z 's/\n/|/g;s/|\$/\n/' | rev | cut -c 2- | rev) | \u\e[1;32m]\n[>]\[\e[1;36m\]\$(pwd) $ \[\e[0m\]"
+ else
+ PS1="\e[1;32m┌──[HQ🚀🌐\e[1;31m$(ip -4 addr | grep -v '127.0.0.1' | grep -v 'secondary' | grep -oP '(?<=inet\s)\d+(\.\d+){3}' | sed -z 's/\n/|/g;s/|\$/\n/' | rev | cut -c 2- | rev)🔥\u\e[1;32m]\n└──╼[👾]\[\e[1;36m\]\$(pwd) $ \[\e[0m\]"
+ fi
+
+ # Use bash-completion, if available
+ [[ $PS1 && -f /run/current-system/sw/share/bash-completion/bash_completion ]] && \
+ . /run/current-system/sw/share/bash-completion/bash_completion
+
+ # Bash aliases
+ if [ -f ~/.bash_aliases ]; then
+ . ~/.bash_aliases
+ fi
+
+
+ # Change up a variable number of directories
+ # E.g:
+ # cu -> cd ../
+ # cu 2 -> cd ../../
+ # cu 3 -> cd ../../../
+ function cu {
+ local count=$1
+ if [ -z "''${count}" ]; then
+ count=1
+ fi
+ local path=""
+ for i in $(seq 1 ''${count}); do
+ path="''${path}../"
+ done
+ cd $path
+ }
+
+
+ # Open all modified files in vim tabs
+ function vimod {
+ vim -p $(git status -suall | awk '{print $2}')
+ }
+
+ # Open files modified in a git commit in vim tabs; defaults to HEAD. Pop it in your .bashrc
+ # Examples:
+ # virev 49808d5
+ # virev HEAD~3
+ function virev {
+ commit=$1
+ if [ -z "''${commit}" ]; then
+ commit="HEAD"
+ fi
+ rootdir=$(git rev-parse --show-toplevel)
+ sourceFiles=$(git show --name-only --pretty="format:" ''${commit} | grep -v '^$')
+ toOpen=""
+ for file in ''${sourceFiles}; do
+ file="''${rootdir}/''${file}"
+ if [ -e "''${file}" ]; then
+ toOpen="''${toOpen} ''${file}"
+ fi
+ done
+ if [ -z "''${toOpen}" ]; then
+ echo "No files were modified in ''${commit}"
+ return 1
+ fi
+ vim -p ''${toOpen}
+ }
+
+ # 'Safe' version of __git_ps1 to avoid errors on systems that don't have it
+ function gitPrompt {
+ command -v __git_ps1 > /dev/null && __git_ps1 " (%s)"
+ }
+
+ # Colours have names too. Stolen from Arch wiki
+ txtblk='\[\e[0;30m\]' # Black - Regular
+ txtred='\[\e[0;31m\]' # Red
+ txtgrn='\[\e[0;32m\]' # Green
+ txtylw='\[\e[0;33m\]' # Yellow
+ txtblu='\[\e[0;34m\]' # Blue
+ txtpur='\[\e[0;35m\]' # Purple
+ txtcyn='\[\e[0;36m\]' # Cyan
+ txtwht='\[\e[0;37m\]' # White
+ bldblk='\[\e[1;30m\]' # Black - Bold
+ bldred='\[\e[1;31m\]' # Red
+ bldgrn='\[\e[1;32m\]' # Green
+ bldylw='\[\e[1;33m\]' # Yellow
+ bldblu='\[\e[1;34m\]' # Blue
+ bldpur='\[\e[1;35m\]' # Purple
+ bldcyn='\[\e[1;36m\]' # Cyan
+ bldwht='\[\e[1;37m\]' # White
+ unkblk='\[\e[4;30m\]' # Black - Underline
+ undred='\[\e[4;31m\]' # Red
+ undgrn='\[\e[4;32m\]' # Green
+ undylw='\[\e[4;33m\]' # Yellow
+ undblu='\[\e[4;34m\]' # Blue
+ undpur='\[\e[4;35m\]' # Purple
+ undcyn='\[\e[4;36m\]' # Cyan
+ undwht='\[\e[4;37m\]' # White
+ bakblk='\[\e[40m\]' # Black - Background
+ bakred='\[\e[41m\]' # Red
+ badgrn='\[\e[42m\]' # Green
+ bakylw='\[\e[43m\]' # Yellow
+ bakblu='\[\e[44m\]' # Blue
+ bakpur='\[\e[45m\]' # Purple
+ bakcyn='\[\e[46m\]' # Cyan
+ bakwht='\[\e[47m\]' # White
+ txtrst='\[\e[0m\]' # Text Reset
+
+ # Prompt colours
+ atC="''${txtpur}"
+ nameC="''${txtpur}"
+ hostC="''${txtpur}"
+ pathC="''${txtgrn}"
+ gitC="''${txtpur}"
+ pointerC="''${txtgrn}"
+ normalC="''${txtwht}"
+
+ # Red name for root
+ if [ "''${UID}" -eq "0" ]; then
+ nameC="''${txtred}"
+ fi
+
+ #shopt
+ shopt -s autocd # change to named directory
+ shopt -s cdspell # autocorrects cd misspellings
+ shopt -s cmdhist # save multi-line commands in history as single line
+ shopt -s dotglob
+ shopt -s histappend # do not overwrite history
+ shopt -s expand_aliases # expand aliases
+
+ # # ex = EXtractor for all kinds of archives
+ # # usage: ex
+ ex ()
+ {
+ if [ -f $1 ] ; then
+ case $1 in
+ *.tar.bz2) tar xjf $1 ;;
+ *.tar.gz) tar xzf $1 ;;
+ *.bz2) bunzip2 $1 ;;
+ *.rar) unrar x $1 ;;
+ *.gz) gunzip $1 ;;
+ *.tar) tar xf $1 ;;
+ *.tbz2) tar xjf $1 ;;
+ *.tgz) tar xzf $1 ;;
+ *.zip) unzip $1 ;;
+ *.Z) uncompress $1;;
+ *.7z) 7z x $1 ;;
+ *.deb) ar x $1 ;;
+ *.tar.xz) tar xf $1 ;;
+ *.tar.zst) tar xf $1 ;;
+ *) echo "'$1' cannot be extracted via ex()" ;;
+ esac
+ else
+ echo "'$1' is not a valid file"
+ fi
+ }
+
+ export PROMPT_COMMAND='source ~/.bashrc no-repeat-flag'
+
+ buffer_clean(){
+ free -h && sudo sh -c 'echo 1 > /proc/sys/vm/drop_caches' && free -h
+ }
+
+ if [[ $1 != no-repeat-flag && -z $NO_REPETITION ]]; then
+ neofetch
+ fi
+
+ [[ $1 != no-repeat-flag && -f "$(which blesh-share)" ]] && source "$(blesh-share)"/ble.sh --attach=none
+ '';
+ };
+
+ # Blesh: waiting for https://github.com/nix-community/home-manager/pull/3238 to be merged
+ /*
+ programs.blesh = {
+ enable = true;
+ options = {
+ prompt_ps1_transient = "trim:same-dir";
+ prompt_ruler = "empty-line";
+ };
+ blercExtra = ''
+ function my/complete-load-hook {
+ bleopt complete_auto_history=
+ bleopt complete_ambiguous=
+ bleopt complete_menu_maxlines=10
+ };
+ blehook/eval-after-load complete my/complete-load-hook
+ '';
+ };
+ */
+ };
+}
\ No newline at end of file
diff --git a/nixos/home-manager/shells/bash_aliases b/nixos/home-manager/shells/bash_aliases
new file mode 100644
index 000000000..8ed4bc9a3
--- /dev/null
+++ b/nixos/home-manager/shells/bash_aliases
@@ -0,0 +1,298 @@
+#tmux
+alias tmux='tmux -u'
+
+# Alias's for multiple directory listing commands
+alias ls='lsd --color=auto'
+alias la='lsd -a'
+alias lx='lsd -lXh' # sort by extension
+alias lk='lsd -lSrh' # sort by size
+alias lr='lsd -lRh' # recursive ls
+alias lt='lsd -ltrh' # sort by date
+alias lm='lsd -alh | more' # pipe through 'more'
+alias ll='lsd -alFh' # long listing format
+alias lf="lsd -l | grep -E -v '^d'" # files only
+alias ldir="lsd -l | grep -E '^d' --color=never" # directories only
+alias l='lsd'
+alias l.="lsd -A | grep -E '^\.' --color=never"
+
+# alias ls='eza --color=auto'
+# alias la='eza -a'
+# alias lx='eza -lhs extension' # sort by extension
+# alias lk='eza -lhs size' # sort by size
+# alias lc='eza -lhs changed' # sort by change time
+# alias lu='eza -lhs accessed' # sort by access time
+# alias lr='eza -lRh' # recursive ls
+# alias lt='eza -lhs modified' # sort by modification date
+# alias lz='eza -lhs created' # sort by creation date
+# alias lm='eza -alh | more' # pipe through 'more'
+# alias lw='eza -xGah' # wide listing format
+# alias ll='eza -alFh' # long listing format
+# alias labc='eza -lhs name' #alphabetical sort
+# alias lf="eza -l | grep -E -v '^d'" # files only
+# alias ldir="eza -l | grep -E '^d' --color=never" # directories only
+# alias l='eza'
+# alias l.="eza -a | grep -E '^\.' --color=never"
+
+# alias to show the date
+alias da='date "+%Y-%m-%d %A %T %Z"'
+
+# alias to copy file content to clipboard
+alias cpc='xclip < '
+
+## Colorize the grep command output for ease of use (good for log files)##
+alias grep='grep --color=auto'
+alias egrep='egrep --color=auto'
+alias fgrep='fgrep --color=auto'
+alias gg='git grep -ni'
+alias phpunit='phpunit --colors'
+alias vimpress="VIMENV=talk vim"
+alias c="composer"
+alias v="vagrant"
+alias d="sudo docker"
+alias biggest="du -h --max-depth=1 | sort -h"
+alias :q="exit"
+alias ungron="gron --ungron"
+alias j="jobs"
+alias follow="tail -f -n +1"
+#readable output
+alias df='df -h'
+
+# Alias's to modified commands
+#alias cp='cp -i'
+#alias mv='mv -i'
+#alias rm='rm -iv'
+alias mkdir='mkdir -p'
+alias ping='ping -c 10'
+alias less='less -R'
+alias cls='clear'
+alias apt-get='sudo apt-get'
+alias multitail='multitail --no-repeat -c'
+alias freshclam='sudo freshclam'
+alias svi='sudo vi'
+alias train='sl | lolcat'
+alias vis='vim "+set si"'
+alias devil='fortune | cowsay -f eyes | lolcat'
+alias spotify='spotify --no-zygote'
+
+# Alias's to user support
+alias tb='nc termbin.com 9999'
+alias journalctl-upload='sudo journalctl | tb'
+
+#keyboard
+alias give-me-azerty-be="sudo localectl set-x11-keymap be"
+alias give-me-qwerty-us="sudo localectl set-x11-keymap us"
+
+#free
+#alias free="free -mt"
+
+#python
+alias pyserver='python3 -m http.server'
+
+#continue download
+alias wget="wget -c"
+
+#userlist
+alias userlist="cut -d: -f1 /etc/passwd"
+
+#merge new settings
+alias merge="xrdb -merge ~/.Xresources"
+
+#ps
+alias psa="ps auxf"
+alias psgrep="ps aux | grep -v grep | grep -i -e VSZ -e"
+
+#grub update
+alias update-grub="sudo grub-mkconfig -o /boot/grub/grub.cfg"
+
+#add new fonts
+alias update-fc='sudo fc-cache -fv'
+
+#copy/paste all content of /etc/skel over to home folder - backup of config created - beware
+#skel alias has been replaced with a script at /usr/local/bin/skel
+
+#backup contents of /etc/skel to hidden backup folder in home/user
+alias bupskel='cp -Rf /etc/skel ~/.skel-backup-$(date +%Y.%m.%d-%H.%M.%S)'
+
+#copy shell configs
+alias cb='cp /etc/skel/.bashrc ~/.bashrc && exec bash'
+alias cz='cp /etc/skel/.zshrc ~/.zshrc && echo "Copied."'
+alias cf='cp /etc/skel/.config/fish/config.fish ~/.config/fish/config.fish && echo "Copied."'
+
+#switch between bash and zsh
+alias tobash="sudo chsh $USER -s /bin/bash && echo 'Now log out.'"
+alias tozsh="sudo chsh $USER -s /bin/zsh && echo 'Now log out.'"
+alias tofish="sudo chsh $USER -s /bin/fish && echo 'Now log out.'"
+
+# kill commands
+# quickly kill conkies
+alias kc='killall conky'
+# quickly kill polybar
+alias kp='killall polybar'
+# quickly kill picom
+alias kpi='killall picom'
+
+#hardware info --short
+alias hw="hwinfo --short"
+
+#check vulnerabilities microcode
+alias microcode='grep . /sys/devices/system/cpu/vulnerabilities/*'
+
+#enabling vmware services
+alias start-vmware="sudo systemctl enable --now vmtoolsd.service"
+alias vmware-start="sudo systemctl enable --now vmtoolsd.service"
+alias sv="sudo systemctl enable --now vmtoolsd.service"
+
+#youtube download
+alias yta-aac="yt-dlp --extract-audio --audio-format aac "
+alias yta-best="yt-dlp --extract-audio --audio-format best "
+alias yta-flac="yt-dlp --extract-audio --audio-format flac "
+alias yta-mp3="yt-dlp --extract-audio --audio-format mp3 "
+alias ytv-best="yt-dlp -f 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/bestvideo+bestaudio' --merge-output-format mp4 "
+
+#Recent Installed Packages
+alias rip="expac --timefmt='%Y-%m-%d %T' '%l\t%n %v' | sort | tail -200 | nl"
+alias riplong="expac --timefmt='%Y-%m-%d %T' '%l\t%n %v' | sort | tail -3000 | nl"
+
+#iso and version used to install Athena
+alias iso="cat /etc/dev-rel | awk -F '=' '/ISO/ {print $2}'"
+
+#clear
+alias clean="clear; seq 1 $(tput cols) | sort -R | sparklines | lolcat"
+
+#search content with ripgrep
+alias rg="rg --sort path"
+
+#get the error messages from journalctl
+alias jctl="journalctl -p 3 -xb"
+
+#nano for important configuration files
+#know what you do in these files
+alias nlxdm="sudo $EDITOR /etc/lxdm/lxdm.conf"
+alias nlightdm="sudo $EDITOR /etc/lightdm/lightdm.conf"
+alias ngrub="sudo $EDITOR /etc/default/grub"
+alias nconfgrub="sudo $EDITOR /boot/grub/grub.cfg"
+alias nmkinitcpio="sudo $EDITOR /etc/mkinitcpio.conf"
+alias nsddm="sudo $EDITOR /etc/sddm.conf"
+alias nsddmk="sudo $EDITOR /etc/sddm.conf.d/kde_settings.conf"
+alias nfstab="sudo $EDITOR /etc/fstab"
+alias nnsswitch="sudo $EDITOR /etc/nsswitch.conf"
+alias nsamba="sudo $EDITOR /etc/samba/smb.conf"
+alias nhosts="sudo $EDITOR /etc/hosts"
+alias nhostname="sudo $EDITOR /etc/hostname"
+alias nb="$EDITOR ~/.bashrc"
+alias nz="$EDITOR ~/.zshrc"
+alias nf="$EDITOR ~/.config/fish/config.fish"
+
+#reading logs with bat
+alias laegis="bat /var/log/aegis.log"
+alias lxorg="bat /var/log/Xorg.0.log"
+alias lxorgo="bat /var/log/Xorg.0.log.old"
+
+#gpg
+#verify signature for isos
+alias gpg-check="gpg2 --keyserver-options auto-key-retrieve --verify"
+#receive the key of a developer
+alias gpg-retrieve="gpg2 --keyserver-options auto-key-retrieve --receive-keys"
+
+#fixes
+alias fix-permissions="sudo chown -R $USER:$USER ~/.config ~/.local"
+alias lockreset="faillock --user $USER --reset"
+
+#maintenance
+alias big="expac -H M '%m\t%n' | sort -h | nl"
+
+#hblock (stop tracking with hblock)
+#use unhblock to stop using hblock
+alias unhblock="hblock -S none -D none"
+
+#systeminfo
+#alias probe="sudo -E hw-probe -all -upload"
+alias sysfailed="systemctl list-units --failed"
+
+#shutdown or reboot
+alias ssn="sudo shutdown now"
+alias sr="sudo reboot"
+
+#give the list of all installed desktops - xsessions desktops
+alias xd="ls /usr/share/xsessions"
+
+#btrfs aliases
+alias btrfsfs="sudo btrfs filesystem df /"
+alias btrfsli="sudo btrfs su li / -t"
+
+#snapper aliases
+alias snapcroot="sudo snapper -c root create-config /"
+alias snapchome="sudo snapper -c home create-config /home"
+alias snapli="sudo snapper list"
+alias snapcr="sudo snapper -c root create"
+alias snapch="sudo snapper -c home create"
+
+#Leftwm aliases
+alias lti="leftwm-theme install"
+alias ltu="leftwm-theme uninstall"
+alias lta="leftwm-theme apply"
+alias ltupd="leftwm-theme update"
+alias ltupg="leftwm-theme upgrade"
+
+#remove
+alias rmgitcache="rm -r ~/.cache/git"
+
+# Search running processes
+alias p="ps aux | grep "
+alias topcpu="/bin/ps -eo pcpu,pid,user,args | sort -k 1 -r | head -10"
+
+# Count all files (recursively) in the current folder
+alias countfiles="bash -c \"for t in files links directories; do echo \\\$(find . -type \\\${t:0:1} | wc -l) \\\$t; done 2> /dev/null\""
+
+# Show current network connections to the server
+alias ipview="netstat -anpl | grep :80 | awk {'print \$5'} | cut -d\":\" -f1 | sort | uniq -c | sort -n | sed -e 's/^ *//' -e 's/ *\$//'"
+
+# Show open ports
+alias openports='netstat -nape --inet'
+
+# Alias's for safe and forced reboots
+alias rebootsafe='sudo shutdown -r now'
+alias rebootforce='sudo shutdown -r -n now'
+
+# Alias's to show disk space and space used in a folder
+alias diskspace="du -S | sort -n -r |more"
+alias folders='du -h --max-depth=1'
+alias folderssort='find . -maxdepth 1 -type d -print0 | xargs -0 du -sk | sort -rn'
+alias tree='tree -CAhF --dirsfirst'
+alias treed='tree -CAFd'
+alias mountedinfo='df -hT'
+
+
+#amass config alias
+alias Amass='amass enum -config ~/.config/amass/config.ini -d $1'
+
+
+# Show all logs in /var/log
+alias logs="sudo find /var/log -type f -exec file {} \; | grep 'text' | cut -d' ' -f1 | sed -e's/:\$//g' | grep -v '[0-9]\$' | xargs tail -f"
+
+# SHA1
+alias sha1='openssl sha1'
+
+alias open='xdg-open'
+
+alias reloadbash='source ~/.bashrc'
+alias reloadprofile='source ~/.profile'
+
+alias ebash='subl ~/.bashrc'
+alias eprofile='subl ~/.profile'
+
+alias cats='highlight -O ansi --force'
+
+alias cat='bat -pp --theme OneHalfDark'
+
+alias ..="cd ../"
+alias ...="cd ../../"
+alias ....="cd ../../../"
+
+#fix obvious typo's
+alias cd..='cd ..'
+alias pdw='pwd'
+alias udpate='sudo nix-channel --update'
+alias upate='sudo nix-channel --update'
+alias updte='sudo nix-channel --update'
+alias updqte='sudo nix-channel --update'
\ No newline at end of file
diff --git a/nixos/home-manager/shells/default.nix b/nixos/home-manager/shells/default.nix
new file mode 100644
index 000000000..dbc37fe07
--- /dev/null
+++ b/nixos/home-manager/shells/default.nix
@@ -0,0 +1,23 @@
+{ home-manager, username, terminal, shell, ... }:
+{
+ imports = [
+ ./powershell
+ ];
+
+ home-manager.users.${username} = { pkgs, ...}: {
+ home.file.".bash_aliases".source = ./bash_aliases;
+ #home.packages = with pkgs; [
+ # neofetch
+ # zoxide
+ #];
+ xdg.desktopEntries."shell" = {
+ type = "Application";
+ name = "Shell";
+ comment = "Shell";
+ icon = "shell";
+ exec = "${terminal}";
+ terminal = false;
+ categories = [ "Application" "Utility" ];
+ };
+ };
+}
\ No newline at end of file
diff --git a/nixos/home-manager/shells/fish/default.nix b/nixos/home-manager/shells/fish/default.nix
new file mode 100644
index 000000000..5ced82433
--- /dev/null
+++ b/nixos/home-manager/shells/fish/default.nix
@@ -0,0 +1,96 @@
+{ home-manager, username, ... }:
+{
+ home-manager.users.${username} = { pkgs, ...}: {
+ home.packages = with pkgs; [
+ neofetch
+ zoxide
+ ];
+ programs.fish = {
+ enable = true;
+ functions = {
+ fish_prompt.body = ''
+ set -l var (tty)
+ switch $var
+ case '*/dev/tty*'
+ set_color 00ff00
+ echo -n "[HQ:"
+ set_color ff00d7
+ echo -n "$(ip -4 addr | grep -v '127.0.0.1' | grep -v 'secondary' | grep -oP '(?<=inet\s)\d+(\.\d+){3}' | sed -z 's/\n/|/g;s/|\$/\n/' | rev | cut -c 2- | rev)"
+ echo -n " | $USER"
+ set_color 00ff00
+ echo "]"
+ set_color 00ff00
+ echo -n "[>]"
+ set_color 00ffff
+ echo (pwd) '$' (set_color normal)
+ case '*'
+ set_color 00ff00
+ echo -n "┌──[HQ🚀🌐"
+ set_color ff00d7
+ echo -n "$(ip -4 addr | grep -v '127.0.0.1' | grep -v 'secondary' | grep -oP '(?<=inet\s)\d+(\.\d+){3}' | sed -z 's/\n/|/g;s/|\$/\n/' | rev | cut -c 2- | rev)"
+ echo -n "🔥$USER"
+ set_color 00ff00
+ echo "]"
+ set_color 00ff00
+ echo -n "└──╼[👾]"
+ set_color 00ffff
+ echo (pwd) '$' (set_color normal)
+ end
+ '';
+ };
+ interactiveShellInit = ''
+ set fish_greeting # Disable greeting
+ if status is-interactive
+ # Commands to run in interactive sessions can go here
+ end
+
+ source ~/.bash_aliases
+
+ zoxide init fish | source
+
+ #set -x BFETCH_INFO "pfetch"
+ #set -x BFETCH_ART "$HOME/.local/textart/fetch/unix.textart"
+ #set -x PF_INFO "Unix Genius"
+
+ #set -x BFETCH_INFO "curl --silent --location 'wttr.in/rome?0pq'"
+ #set -x BFETCH_ART "printf \"\033[35m\"; figlet -f Bloody Spooky"
+ #set -x BFETCH_COLOR "$HOME/.local/textart/color/icon/ghosts.textart"
+
+ #set -x BFETCH_INFO "exa -la"
+ #set -x BFETCH_ART "$HOME/.local/textart/fetch/pacman-maze.textart"
+ #set -x BFETCH_COLOR "$HOME/.local/textart/color/icon/pacman.textart"
+
+ set -x BFETCH_INFO "pfetch"
+ set -x BFETCH_ART "cowsay '<3 Athena OS'"
+ set -x BFETCH_COLOR "$HOME/.local/textart/color/icon/panes.textart"
+
+ set -x PAYLOADS "/run/current-system/sw/share/payloads"
+ set -x SECLISTS "$PAYLOADS/SecLists"
+ set -x PAYLOADSALLTHETHINGS "$PAYLOADS/PayloadsAllTheThings"
+ set -x FUZZDB "$PAYLOADS/FuzzDB"
+ set -x AUTOWORDLISTS "$PAYLOADS/Auto_Wordlists"
+ set -x SECURITYWORDLIST "$PAYLOADS/Security-Wordlist"
+
+ set -x MIMIKATZ "/run/current-system/sw/share/mimikatz/"
+ set -x POWERSPLOIT "/run/current-system/sw/share/powersploit/"
+
+ set -x ROCKYOU "$SECLISTS/Passwords/Leaked-Databases/rockyou.txt"
+ set -x DIRSMALL "$SECLISTS/Discovery/Web-Content/directory-list-2.3-small.txt"
+ set -x DIRMEDIUM "$SECLISTS/Discovery/Web-Content/directory-list-2.3-medium.txt"
+ set -x DIRBIG "$SECLISTS/Discovery/Web-Content/directory-list-2.3-big.txt"
+ set -x WEBAPI_COMMON "$SECLISTS/Discovery/Web-Content/api/api-endpoints.txt"
+ set -x WEBAPI_MAZEN "$SECLISTS/Discovery/Web-Content/common-api-endpoints-mazen160.txt"
+ set -x WEBCOMMON "$SECLISTS/Discovery/Web-Content/common.txt"
+ set -x WEBPARAM "$SECLISTS/Discovery/Web-Content/burp-parameter-names.txt"
+
+ set -gx TERM xterm-256color
+ if status is-interactive
+ # Commands to run in interactive sessions can go here
+ #if not set -q NO_REPETITION
+ # neofetch
+ #end
+ end
+ '';
+ };
+ };
+}
\ No newline at end of file
diff --git a/nixos/home-manager/shells/powershell/Microsoft.PowerShell_profile.ps1 b/nixos/home-manager/shells/powershell/Microsoft.PowerShell_profile.ps1
new file mode 100644
index 000000000..49ca54796
--- /dev/null
+++ b/nixos/home-manager/shells/powershell/Microsoft.PowerShell_profile.ps1
@@ -0,0 +1,5 @@
+function prompt()
+{
+ $ESC=$([char]27)
+ "$ESC[1;31m┌──L3ts D0 1t $(whoami)💥$ESC[00m$($executionContext.SessionState.Path.CurrentLocation)$("`r`n$ESC[1;34m└──╼Weaponizing PowerShell...🚀>$ESC[00m" * ($nestedPromptLevel + 1)) ";
+}
\ No newline at end of file
diff --git a/nixos/home-manager/shells/powershell/default.nix b/nixos/home-manager/shells/powershell/default.nix
new file mode 100644
index 000000000..46fd51cbd
--- /dev/null
+++ b/nixos/home-manager/shells/powershell/default.nix
@@ -0,0 +1,10 @@
+{ pkgs, home-manager, username, shell, ... }:
+{
+ # Needed to install at system-level to source their .zsh files in .zshrc
+ environment.systemPackages = with pkgs; [
+ powershell
+ ];
+ home-manager.users.${username} = {
+ xdg.configFile."powershell/Microsoft.PowerShell_profile.ps1".source = ./Microsoft.PowerShell_profile.ps1;
+ };
+}
\ No newline at end of file
diff --git a/nixos/home-manager/shells/zsh/default.nix b/nixos/home-manager/shells/zsh/default.nix
new file mode 100644
index 000000000..17229089b
--- /dev/null
+++ b/nixos/home-manager/shells/zsh/default.nix
@@ -0,0 +1,87 @@
+{ pkgs, lib, home-manager, username, ... }:
+with lib;
+let
+ shopt = pkgs.writeShellScriptBin "shopt"
+ (builtins.readFile ./shopt);
+in
+{
+ # Needed to install at system-level to source their .zsh files in .zshrc
+ environment.systemPackages = with pkgs; [
+ nix-zsh-completions
+ zsh-autosuggestions
+ zsh-syntax-highlighting
+ ];
+ home-manager.users.${username} = { pkgs, ...}: {
+ home.packages = with pkgs; [
+ neofetch
+ shopt
+ ];
+ home.file.".zshrc".source = ./zshrc;
+ programs.zsh = {
+ enable = true;
+ enableAutosuggestions = true;
+ enableCompletion = true;
+ syntaxHighlighting.enable = true;
+ /*shellAliases = {
+ ll = "ls -l";
+ update = "sudo nixos-rebuild switch";
+ };*/
+ #histSize = 10000;
+ #histFile = "${config.xdg.dataHome}/zsh/history";
+ zplug = {
+ enable = true;
+ plugins = [
+ { name = "zsh-users/zsh-autosuggestions"; } # Simple plugin installation
+ { name = "zsh-users/zsh-history-substring-search"; } # Simple plugin installation
+ { name = "zsh-users/zsh-syntax-highlighting"; } # Simple plugin installation
+ { name = "romkatv/powerlevel10k"; tags = [ as:theme depth:1 ]; } # Installations with additional options. For the list of options, please refer to Zplug README.
+ ];
+ };
+ history = {
+ expireDuplicatesFirst = true;
+ save = 1000;
+ size = 10000;
+ path = "~/.zsh_history";
+ };
+ completionInit = ''
+ # The following lines were added by compinstall
+ zstyle :compinstall filename '$HOME/.zshrc'
+
+ alias shopt='/run/current-system/sw/bin/shopt'
+
+ bindkey "^[[1;5C" forward-word
+ bindkey "^[[1;5D" backward-word
+ bindkey "\e[1~" beginning-of-line
+ bindkey "\e[4~" end-of-line
+ bindkey "\e[5~" beginning-of-history
+ bindkey "\e[6~" end-of-history
+ bindkey "\e[7~" beginning-of-line
+ bindkey "\e[3~" delete-char
+ bindkey "\e[2~" quoted-insert
+ bindkey "\e[5C" forward-word
+ bindkey "\e[5D" backward-word
+ bindkey "\e\e[C" forward-word
+ bindkey "\e\e[D" backward-word
+ bindkey "\e[1;5C" forward-word
+ bindkey "\e[1;5D" backward-word
+ bindkey "\e[8~" end-of-line
+ bindkey "\eOH" beginning-of-line
+ bindkey "\eOF" end-of-line
+ bindkey "\e[H" beginning-of-line
+ bindkey "\e[F" end-of-line
+
+ autoload -U +X bashcompinit && bashcompinit
+ autoload -U +X compinit && compinit
+ # End of lines added by compinstall
+ '';
+ envExtra = ''
+ export PROMPT_COMMAND='source ~/.zshrc no-repeat-flag'
+ '';
+ initExtra = ''
+ setopt INC_APPEND_HISTORY
+ bindkey -e
+ precmd() { eval "$PROMPT_COMMAND" }
+ '';
+ };
+ };
+}
\ No newline at end of file
diff --git a/nixos/home-manager/shells/zsh/shopt b/nixos/home-manager/shells/zsh/shopt
new file mode 100644
index 000000000..f9f70332d
--- /dev/null
+++ b/nixos/home-manager/shells/zsh/shopt
@@ -0,0 +1,12 @@
+#!/usr/bin/env bash
+
+###################################
+# https://github.com/larz258/Zshopt
+###################################
+
+args='';
+for item in $@
+ do
+ args="$args $item";
+ done
+shopt $args;
\ No newline at end of file
diff --git a/nixos/home-manager/shells/zsh/zshrc b/nixos/home-manager/shells/zsh/zshrc
new file mode 100644
index 000000000..d5389a105
--- /dev/null
+++ b/nixos/home-manager/shells/zsh/zshrc
@@ -0,0 +1,19 @@
+# Lines configured by zsh-newuser-install
+ZSH_AUTOSUGGEST_STRATEGY=(history match_prev_cmd completion)
+
+# z-shell-colors: https://coderwall.com/p/pb1uzq/z-shell-colors
+ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE='fg=180'
+# End of lines configured by zsh-newuser-install
+
+if [[ $(tty) == */dev/tty* ]]; then
+ export PROMPT="%F{46}[HQ:%F{201}$(ip -4 addr | grep -v '127.0.0.1' | grep -v 'secondary' | grep -oP '(?<=inet\s)\d+(\.\d+){3}' | sed -z 's/\n/|/g;s/|\$/\n/' | rev | cut -c 2- | rev) | %n%F{46}]"$'\n'"[>]%F{44}%~ $%f "
+else
+ export PROMPT="%F{46}┌──[HQ🚀🌐%F{201}$(ip -4 addr | grep -v '127.0.0.1' | grep -v 'secondary' | grep -oP '(?<=inet\s)\d+(\.\d+){3}' | sed -z 's/\n/|/g;s/|\$/\n/' | rev | cut -c 2- | rev)🔥%n%F{46}]"$'\n'"└──╼[👾]%F{44}%~ $%f "
+fi
+
+if [[ $1 != no-repeat-flag && -z $NO_REPETITION ]]; then
+ source ~/.bash_aliases
+ source /run/current-system/sw/share/zsh-autosuggestions/zsh-autosuggestions.zsh
+ source /run/current-system/sw/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
+ #neofetch
+fi
\ No newline at end of file
diff --git a/nixos/home-manager/terminals/alacritty/default.nix b/nixos/home-manager/terminals/alacritty/default.nix
new file mode 100644
index 000000000..f7d68d3cc
--- /dev/null
+++ b/nixos/home-manager/terminals/alacritty/default.nix
@@ -0,0 +1,64 @@
+{ pkgs, home-manager, username, ... }:
+{
+ home-manager.users.${username}.programs.alacritty = {
+ enable = true;
+ settings = {
+
+ draw_bold_text_with_bright_colors = true;
+
+ window = {
+ decorations = "full";
+ decorations_theme_variant = "Dark";
+ opacity = 0.8;
+ };
+
+ font = {
+ size = 12;
+ normal.family = "JetBrainsMono NF";
+ bold = {
+ family = "JetBrainsMono NF";
+ style = "Bold";
+ };
+ italic = {
+ family = "JetBrainsMono NF";
+ style = "Italic";
+ };
+ bold_italic = {
+ family = "JetBrainsMono NF";
+ style = "Bold Italic";
+ };
+ };
+
+ #shell.program = "${pkgs.zsh}/bin/zsh";
+
+ cursor.style = "Beam";
+
+ colors = {
+ primary = {
+ background = "0x000b1e";
+ foreground = "0x0abdc6";
+ };
+ normal = {
+ black = "0x123e7c";
+ red = "0xff0000";
+ green = "0xd300c4";
+ yellow = "0xf57800";
+ blue = "0x123e7c";
+ magenta = "0x711c91";
+ cyan = "0x0abdc6";
+ white = "0xd7d7d5";
+ };
+ dim = {
+ black = "0x1c61c2";
+ red = "0xff0000";
+ green = "0xd300c4";
+ yellow = "0xf57800";
+ blue = "0x123e7c";
+ magenta = "0x711c91";
+ cyan = "0x0abdc6";
+ white = "0xd7d7d5";
+ };
+ };
+ };
+ };
+}
diff --git a/nixos/home-manager/terminals/kitty/default.nix b/nixos/home-manager/terminals/kitty/default.nix
new file mode 100644
index 000000000..f6c6c4bf5
--- /dev/null
+++ b/nixos/home-manager/terminals/kitty/default.nix
@@ -0,0 +1,39 @@
+{ pkgs, home-manager, username, theme, ... }:
+{
+ home-manager.users.${username}.programs.kitty = {
+ enable = true;
+ /*theme = if theme.module-name == "akame"
+ then "Crayon Pony Fish"
+ else if theme.module-name == "cyborg"
+ then "Gruvbox Dark"
+ else if theme.module-name == "everblush"
+ then "Atom"
+ else if theme.module-name == "hackthebox"
+ then "Box"
+ else if theme.module-name == "samurai"
+ then "Tokyo Night Storm"
+ else if theme.module-name == "sweetdark"
+ then "Adventure Time"
+ else if theme.module-name == "xxe"
+ then "Gruvbox Dark"
+ else "Atom";*/
+ settings = {
+ font_family = "JetBrainsMono NF Medium";
+ bold_font = "JetBrainsMono NF Bold";
+ italic_font = "JetBrainsMono NF Italic";
+ bold_italic_font = "JetBrainsMono NF Bold Italic";
+
+ font_size = "12.0";
+
+ adjust_line_height = "92%";
+
+ scrollback_lines = 3000;
+
+ macos_thicken_font = "0.3";
+
+ linux_display_server = "x11";
+
+ confirm_os_window_close = 0;
+ };
+ };
+}
\ No newline at end of file
diff --git a/nixos/hosts/default.nix b/nixos/hosts/default.nix
new file mode 100644
index 000000000..b6b32a3cd
--- /dev/null
+++ b/nixos/hosts/default.nix
@@ -0,0 +1,107 @@
+{ config, options, pkgs, lib, home-manager, username, terminal ? "alacritty", browser, shell ? "bash", ... }:
+with lib;
+let
+ cfg = config.system.nixos;
+ opt = options.system.nixos;
+ needsEscaping = s: null != builtins.match "[a-zA-Z0-9]+" s;
+ escapeIfNecessary = s: if needsEscaping s then s else ''"${lib.escape [ "\$" "\"" "\\" "\`" ] s}"'';
+ attrsToText = attrs:
+ concatStringsSep "\n" (
+ mapAttrsToList (n: v: ''${n}=${escapeIfNecessary (toString v)}'') attrs
+ ) + "\n";
+
+ osReleaseContents = {
+ NAME = "${cfg.distroName}";
+ ID = "${cfg.distroId}";
+ VERSION = "${cfg.release} (${cfg.codeName})";
+ VERSION_CODENAME = toLower cfg.codeName;
+ VERSION_ID = cfg.release;
+ BUILD_ID = cfg.version;
+ PRETTY_NAME = "${cfg.distroName} ${cfg.release} (${cfg.codeName})";
+ LOGO = "nix-snowflake";
+ HOME_URL = lib.optionalString (cfg.distroId == "athena") "https://athenaos.org/";
+ DOCUMENTATION_URL = lib.optionalString (cfg.distroId == "athena") "https://athenaos.org/en/getting-started/athenaos/";
+ SUPPORT_URL = lib.optionalString (cfg.distroId == "athena") "https://athenaos.org/en/community/getting-help/";
+ BUG_REPORT_URL = lib.optionalString (cfg.distroId == "athena") "https://github.com/Athena-OS/athena-nix/issues";
+ } // lib.optionalAttrs (cfg.variant_id != null) {
+ VARIANT_ID = cfg.variant_id;
+ };
+ shellrocket = pkgs.writeShellScriptBin "shell-rocket" ''
+ TERMINAL_EXEC="$TERMINAL -e"
+
+ # Set fallback terminal if needed
+ if [[ "$TERMINAL_EXEC" =~ "terminator" ]] || [[ "$TERMINAL_EXEC" =~ "terminology" ]] || [[ "$TERMINAL_EXEC" =~ "xfce4-terminal" ]]; then
+ TERMINAL_EXEC="$TERMINAL -e"
+ fi
+
+ if [[ -n "$NO_REPETITION" ]]; then
+ "$@"
+ else
+ NO_REPETITION=1 $TERMINAL_EXEC ${lib.getExe pkgs.bash} -c "$@"
+ fi
+ '';
+
+in
+{
+ imports = [
+ ./locale
+ ];
+
+ environment.systemPackages = [
+ shellrocket
+ ];
+
+ programs = {
+ git.enable = true;
+ nano.enable = true;
+ ssh.askPassword = ""; # Preventing OpenSSH popup during 'git push'
+ };
+
+ #It is needed to enable the used shell also at system level because NixOS cannot see home-manager modules. Note: bash does not need to be enabled
+ programs.${shell} = mkIf ("${shell}" != "bash") {
+ enable = true;
+ };
+
+ home-manager.users.${username} = { pkgs, ... }: {
+ /* The home.stateVersion option does not have a default and must be set */
+ home.stateVersion = "23.11";
+ nixpkgs.config.allowUnfree = true;
+ };
+
+ environment.sessionVariables = {
+ EDITOR = "nano";
+ BROWSER = "${browser}";
+ SHELL = "/run/current-system/sw/bin/${shell}";
+ TERMINAL = "${terminal}";
+ TERM = "xterm-256color";
+ };
+
+ system.nixos = {
+ distroName = "Athena OS";
+ distroId = "athena";
+ };
+
+ # Used mkForce to override/merge values in os-release. Needed because "text" attr is lib.types.lines type that is a mergeable type (so it appends values we assign to the attributes) mkForce prevents this appending because overwrites values.
+ environment.etc."os-release" = mkForce {
+ text = attrsToText osReleaseContents;
+ };
+
+ # ----- System Config -----
+ # nix config
+ nix = {
+ package = pkgs.nixStable;
+ settings = {
+ extra-experimental-features = [
+ "nix-command"
+ "flakes"
+ ];
+ allowed-users = ["@wheel"]; #locks down access to nix-daemon
+ };
+ };
+
+ # Allow unfree packages
+ nixpkgs.config.allowUnfree = true;
+
+ # Dont change.
+ system.stateVersion = "23.11"; # Did you read the comment?
+}
diff --git a/nixos/hosts/locale/default.nix b/nixos/hosts/locale/default.nix
new file mode 100644
index 000000000..db910d6ff
--- /dev/null
+++ b/nixos/hosts/locale/default.nix
@@ -0,0 +1,22 @@
+{ pkgs, ... }:
+{
+ # Set your time zone.
+ time.timeZone = "Europe/Zurich";
+
+ # Select internationalisation properties.
+ i18n.defaultLocale = "en_US.UTF-8";
+
+ console = {
+ earlySetup = true;
+ font = "${pkgs.terminus_font}/share/consolefonts/ter-v24n.psf.gz";
+ packages = with pkgs; [ terminus_font ];
+ keyMap = "us";
+ };
+
+ # Configure keymap in X11
+ services.xserver = {
+ exportConfiguration = true;
+ layout = "us";
+ xkbVariant = "";
+ };
+}
diff --git a/nixos/hosts/software/armcord/default.nix b/nixos/hosts/software/armcord/default.nix
new file mode 100644
index 000000000..d18cdcfbd
--- /dev/null
+++ b/nixos/hosts/software/armcord/default.nix
@@ -0,0 +1,21 @@
+{ pkgs, config, nix-std, ... }:
+{
+ # For discord wayland pipewire screensharing
+ nixpkgs.config.ungoogled-chromium.commandLineArgs = "
+ --ozone-platform=auto
+ --disable-features=UseChromeOSDirectVideoDecoder
+ --enable-features=RunVideoCaptureServiceInBrowserProcess
+ --disable-gpu-memory-buffer-compositor-resources
+ --disable-gpu-memory-buffer-video-frames
+ --enable-hardware-overlays
+ ";
+
+ /*nixpkgs.config.permittedInsecurePackages = [
+ "libtiff-4.0.3-opentoonz"
+ "libxls-1.6.2"
+ ];*/
+
+ environment.systemPackages = with pkgs; [
+ armcord
+ ];
+}
\ No newline at end of file
diff --git a/nixos/hosts/software/default.nix b/nixos/hosts/software/default.nix
new file mode 100644
index 000000000..720e33103
--- /dev/null
+++ b/nixos/hosts/software/default.nix
@@ -0,0 +1,50 @@
+{ pkgs, ... }:
+let
+ utilities = with pkgs; [
+ asciinema
+ bat
+ bfetch
+ bless
+ cmatrix
+ cowsay
+ figlet
+ file
+ fortune
+ glxinfo
+ gparted
+ htb-toolkit
+ hw-probe
+ imagemagick
+ lolcat
+ lsd
+ ncdu
+ netcat-openbsd
+ nyancat
+ orca
+ pciutils
+ pfetch
+ sl
+ timeline
+ toilet
+ tree
+ unzip
+ wget
+ xclip
+ xcp
+ zoxide
+ ];
+
+ devel = with pkgs; [
+ # cargo
+ # gcc
+ # jq
+ # killall
+ # python3
+ ];
+in
+{
+ environment.systemPackages = devel ++ utilities;
+ imports = [
+ ./armcord
+ ];
+}
\ No newline at end of file
diff --git a/nixos/installation/installation-cd-base.nix b/nixos/installation/installation-cd-base.nix
new file mode 100644
index 000000000..8e6ec76bf
--- /dev/null
+++ b/nixos/installation/installation-cd-base.nix
@@ -0,0 +1,51 @@
+# This module contains the basic configuration for building a NixOS
+# installation CD.
+
+{ config, lib, options, pkgs, modulesPath, ... }:
+
+with lib;
+
+{
+ imports =
+ [ "${modulesPath}/installer/cd-dvd/iso-image.nix"
+
+ # Profiles of this basic installation CD.
+ "${modulesPath}/profiles/all-hardware.nix"
+ "${modulesPath}/profiles/base.nix"
+ ./installation-device.nix
+ ];
+
+ # Adds terminus_font for people with HiDPI displays
+ console.packages = options.console.packages.default ++ [ pkgs.terminus_font ];
+
+ # ISO naming.
+ #isoImage.isoName = "${config.isoImage.isoBaseName}-${config.system.nixos.label}-${pkgs.stdenv.hostPlatform.system}.iso";
+ isoImage.isoName = "athenaos-${config.system.nixos.label}-${pkgs.stdenv.hostPlatform.system}.iso";
+
+ # EFI booting
+ isoImage.makeEfiBootable = true;
+
+ # USB booting
+ isoImage.makeUsbBootable = true;
+
+ # Add Memtest86+ to the CD.
+ boot.loader.grub.memtest86.enable = true;
+
+ # An installation media cannot tolerate a host config defined file
+ # system layout on a fresh machine, before it has been formatted.
+ swapDevices = mkImageMediaOverride [ ];
+ fileSystems = mkImageMediaOverride config.lib.isoFileSystems;
+
+ boot.postBootCommands = ''
+ for o in $(",
+ chars = { "{", "[", "(", '"', "'" },
+ pattern = string.gsub([[ [%'%"%)%>%]%)%}%,] ]], "%s+", ""),
+ offset = 0, -- Offset from pattern match
+ end_key = "$",
+ keys = "qwertyuiopzxcvbnmasdfghjkl",
+ check_comma = true,
+ highlight = "PmenuSel",
+ highlight_grey = "LineNr",
+ },
+}
+
+local cmp_autopairs = require "nvim-autopairs.completion.cmp"
+local cmp_status_ok, cmp = pcall(require, "cmp")
+if not cmp_status_ok then
+ return
+end
+cmp.event:on("confirm_done", cmp_autopairs.on_confirm_done { map_char = { tex = "" } })
diff --git a/nixos/modules/dev/neovim/lua/user/barbar.lua b/nixos/modules/dev/neovim/lua/user/barbar.lua
new file mode 100644
index 000000000..c8b05a3f1
--- /dev/null
+++ b/nixos/modules/dev/neovim/lua/user/barbar.lua
@@ -0,0 +1,9 @@
+local status_ok, barbar = pcall(require, 'barbar')
+if not status_ok then
+ return
+end
+
+vim.g.barbar_auto_setup = false -- disable auto-setup
+barbar.setup {
+ exclude_ft = {'qf'}
+}
diff --git a/nixos/modules/dev/neovim/lua/user/colorscheme.lua b/nixos/modules/dev/neovim/lua/user/colorscheme.lua
new file mode 100644
index 000000000..27f8c5a20
--- /dev/null
+++ b/nixos/modules/dev/neovim/lua/user/colorscheme.lua
@@ -0,0 +1,64 @@
+theme_name = "tokyonight"
+
+local colorscheme_ok, colorscheme = pcall(require, theme_name)
+if not colorscheme_ok then
+ return
+end
+
+function CreateDAPHighlights()
+ if (theme_name == "tokyonight") then
+ vim.api.nvim_set_hl(0, 'DapBreakpoint', { ctermbg = 0, fg = '#f7768e', bg = '#1a1b26' })
+ vim.api.nvim_set_hl(0, 'DapLogPoint', { ctermbg = 0, fg = '#449dab', bg = '#1a1b26' })
+ vim.api.nvim_set_hl(0, 'DapStopped', { ctermbg = 0, fg = '#e0af68', bg = '#1a1b26' })
+ elseif (theme_name == "rose-pine") then
+ vim.api.nvim_set_hl(0, 'DapBreakpoint', { ctermbg = 0, fg = '#eb6f92', bg = '#191724' })
+ vim.api.nvim_set_hl(0, 'DapLogPoint', { ctermbg = 0, fg = '#9ccfd8', bg = '#191724' })
+ vim.api.nvim_set_hl(0, 'DapStopped', { ctermbg = 0, fg = '#f6c177', bg = '#191724' })
+ end
+end
+
+local function setupTheme()
+ local opts = {}
+ if theme_name == "tokyonight" then
+ opts = {
+ style = "night",
+ on_highlights = function(hl, c)
+ hl.TelescopeBorder = {
+ bg = c.bg_dark,
+ fg = c.bg_dark
+ }
+
+ vim.api.nvim_set_hl(0, 'HarpoonBorder', { fg = c.bg_dark, bg = c.bg_dark })
+ vim.api.nvim_set_hl(0, 'HarpoonWindow', { fg = c.fg, bg = c.bg_dark })
+ vim.api.nvim_set_hl(0, 'HarpoonTitle', { fg = c.purple, bg = c.bg_dark })
+ end
+ }
+ vim.g.tokyonight_style = "night"
+ elseif theme_name == "rose-pine" then
+ local rose_pine_palette_ok, palette = pcall(require, 'rose-pine.palette')
+ if rose_pine_palette_ok then
+ opts = {
+ disable_float_background = true,
+ highlight_groups = {
+ TelescopeBorder = { bg = palette.base, fg = palette.muted },
+ TelescopeTitle = { bg = palette.base, fg = palette.gold },
+ TelescopeResultsNormal = { bg = palette.base, fg = palette.text },
+ }
+ }
+ vim.api.nvim_set_hl(0, 'HarpoonBorder', { fg = palette.muted, bg = palette.base })
+ vim.api.nvim_set_hl(0, 'HarpoonWindow', { fg = palette.text, bg = palette.base })
+ vim.api.nvim_set_hl(0, 'HarpoonTitle', { fg = palette.gold, bg = palette.base })
+ end
+ end
+
+ colorscheme.setup(opts)
+
+ ---@diagnostic disable-next-line: param-type-mismatch
+ local status_ok, _ = pcall(vim.cmd, "colorscheme " .. theme_name)
+ if not status_ok then
+ vim.notify("colorscheme " .. theme_name .. " not found!")
+ return
+ end
+end
+
+setupTheme()
diff --git a/nixos/modules/dev/neovim/lua/user/completion.lua b/nixos/modules/dev/neovim/lua/user/completion.lua
new file mode 100644
index 000000000..fd741a8ec
--- /dev/null
+++ b/nixos/modules/dev/neovim/lua/user/completion.lua
@@ -0,0 +1,142 @@
+local cmp_status_ok, cmp = pcall(require, "cmp")
+if not cmp_status_ok then
+ return
+end
+
+local snip_status_ok, luasnip = pcall(require, "luasnip")
+if not snip_status_ok then
+ return
+end
+
+local lua_vs_code_ok, lua_vscode = pcall(require, "luasnip/loaders/from_vscode")
+if not lua_vs_code_ok then
+ return
+end
+
+lua_vscode.lazy_load()
+
+local check_backspace = function()
+ local col = vim.fn.col "." - 1
+ return col == 0 or vim.fn.getline("."):sub(col, col):match "%s"
+end
+
+local kind_icons = {
+ Text = "",
+ Method = "m",
+ Function = "",
+ Constructor = "",
+ Field = "",
+ Variable = "",
+ Class = "",
+ Interface = "",
+ Module = "",
+ Property = "",
+ Unit = "",
+ Value = "",
+ Enum = "",
+ Keyword = "",
+ Snippet = "",
+ Color = "",
+ File = "",
+ Reference = "",
+ Folder = "",
+ EnumMember = "",
+ Constant = "",
+ Struct = "",
+ Event = "",
+ Operator = "",
+ TypeParameter = "",
+ Copilot = ""
+}
+
+cmp.setup {
+ snippet = {
+ expand = function(args)
+ luasnip.lsp_expand(args.body) -- For `luasnip` users.
+ end,
+ },
+ mapping = {
+ [""] = cmp.mapping.select_prev_item(),
+ [""] = cmp.mapping.select_next_item(),
+ [""] = cmp.mapping(cmp.mapping.scroll_docs( -1), { "i", "c" }),
+ [""] = cmp.mapping(cmp.mapping.scroll_docs(1), { "i", "c" }),
+ [""] = cmp.mapping(cmp.mapping.complete(), { "i", "c" }),
+ [""] = cmp.config.disable, -- Specify `cmp.config.disable` if you want to remove the default `` mapping.
+ [""] = cmp.mapping {
+ i = cmp.mapping.abort(),
+ c = cmp.mapping.close(),
+ },
+ -- Accept currently selected item. If none selected, `select` first item.
+ -- Set `select` to `false` to only confirm explicitly selected items.
+ [""] = cmp.mapping.confirm { select = true },
+ [""] = cmp.mapping(function(fallback)
+ if cmp.visible() then
+ cmp.select_next_item()
+ elseif luasnip.expandable() then
+ luasnip.expand()
+ elseif luasnip.expand_or_jumpable() then
+ luasnip.expand_or_jump()
+ elseif check_backspace() then
+ fallback()
+ else
+ fallback()
+ end
+ end, {
+ "i",
+ "s",
+ }),
+ [""] = cmp.mapping(function(fallback)
+ if cmp.visible() then
+ cmp.select_prev_item()
+ elseif luasnip.jumpable( -1) then
+ luasnip.jump( -1)
+ else
+ fallback()
+ end
+ end, {
+ "i",
+ "s",
+ }),
+ },
+ formatting = {
+ fields = { "kind", "abbr", "menu" },
+ format = function(entry, vim_item)
+ vim_item.kind = string.format("%s", kind_icons[vim_item.kind])
+ vim_item.menu = ({
+ nvim_lsp = "(LSP)",
+ emoji = "(Emoji)",
+ path = "(Path)",
+ calc = "(Calc)",
+ cmp_tabnine = "(Tabnine)",
+ vsnip = "(Snippet)",
+ luasnip = "(Snippet)",
+ buffer = "(Buffer)",
+ tmux = "(TMUX)",
+ copilot = "(Copilot)",
+ treesitter = "(TreeSitter)",
+ })[entry.source.name]
+ return vim_item
+ end,
+ },
+ sources = {
+ {
+ name = "copilot",
+ max_item_count = 3,
+ trigger_characters = {
+ { ".", ":", "(", "'", '"', "[", ",", "#", "*", "@", "|", "=", "-", "{", "/", "\\", "+", "?", " " },
+ },
+ },
+ { name = "nvim_lsp" },
+ { name = "nvim_lua" },
+ { name = "luasnip" },
+ { name = "buffer" },
+ { name = "path" },
+ },
+ confirm_opts = {
+ behavior = cmp.ConfirmBehavior.Replace,
+ select = false,
+ },
+ window = {
+ documentation = cmp.config.window.bordered(),
+ },
+}
diff --git a/nixos/modules/dev/neovim/lua/user/copilot.lua b/nixos/modules/dev/neovim/lua/user/copilot.lua
new file mode 100644
index 000000000..7c997fc0f
--- /dev/null
+++ b/nixos/modules/dev/neovim/lua/user/copilot.lua
@@ -0,0 +1,12 @@
+local status_ok, copilot = pcall(require, "copilot")
+if not status_ok then
+ return
+end
+
+copilot.setup {
+ method = "getCompletionsCycling",
+ cmp = { enabled = true },
+ suggestion = { enabled = false },
+ panel = { enabled = false },
+ ft_disable = { "markdown" },
+}
diff --git a/nixos/modules/dev/neovim/lua/user/dap/dap.lua b/nixos/modules/dev/neovim/lua/user/dap/dap.lua
new file mode 100644
index 000000000..076d7f3a8
--- /dev/null
+++ b/nixos/modules/dev/neovim/lua/user/dap/dap.lua
@@ -0,0 +1,93 @@
+local dap_status_ok, dap = pcall(require, "dap")
+if not dap_status_ok then
+ return
+end
+
+local dap_ui_status_ok, dapui = pcall(require, "dapui")
+if not dap_ui_status_ok then
+ return
+end
+
+local dap_ui_virtual_text_ok, dapuivirtualtext = pcall(require, "nvim-dap-virtual-text")
+if not dap_ui_virtual_text_ok then
+ return
+end
+
+dapuivirtualtext.setup()
+
+dapui.setup {
+ mappings = {
+ -- Use a table to apply multiple mappings
+ expand = { "", "<2-LeftMouse>" },
+ open = "o",
+ remove = "d",
+ edit = "e",
+ repl = "r",
+ toggle = "t",
+ },
+ -- Expand lines larger than the window
+ -- Requires >= 0.7
+ expand_lines = vim.fn.has "nvim-0.7",
+ -- Layouts define sections of the screen to place windows.
+ -- The position can be "left", "right", "top" or "bottom".
+ -- The size specifies the height/width depending on position. It can be an Int
+ -- or a Float. Integer specifies height/width directly (i.e. 20 lines/columns) while
+ -- Float value specifies percentage (i.e. 0.3 - 30% of available lines/columns)
+ -- Elements are the elements shown in the layout (in order).
+ -- Layouts are opened in order so that earlier layouts take priority in window sizing.
+ layouts = {
+ {
+ elements = {
+ -- Elements can be strings or table with id and size keys.
+ { id = "scopes", size = 0.85 },
+ { id = "breakpoints", size = 0.15 },
+ { id = "watches", size = 0.15 },
+ -- "scopes",
+ -- "breakpoints",
+ -- "stacks",
+ -- "watches",
+ },
+ size = 0.25,
+ position = "left",
+ },
+ {
+ elements = {
+ -- "repl",
+ "console",
+ },
+ size = 0.30, -- 30% of total lines
+ position = "bottom",
+ },
+ },
+ 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.
+ },
+}
+
+-- The colorscheme should define Highlight values or manually in this function colorscheme.lua
+CreateDAPHighlights()
+
+vim.fn.sign_define("DapBreakpoint", { text = "", texthl = "DapBreakpoint", linehl = "", numhl = "" })
+vim.fn.sign_define("DapBreakpointRejected", { text = "", texthl = 'DapBreakpoint', linehl = '', numhl = '' })
+vim.fn.sign_define("DapBreakpointCondition", { text = "ﳁ", texthl = "DapBreakpointCondition", linehl = "", numhl = "" })
+vim.fn.sign_define("DapLogPoint", { text = "", texthl = "DapLogPoint", linehl = "", numhl = "" })
+vim.fn.sign_define("DapStopped", { text = "", texthl = "DapStopped", linehl = "DapStopped", numhl = "DapStopped" })
+
+dap.listeners.after.event_initialized["dapui_config"] = function()
+ dapui.open()
+end
+
+-- VSCODE style debugging
+vim.keymap.set("n", "", function() dap.continue() end)
+vim.keymap.set("n", "", function() dap.step_over() end)
+vim.keymap.set("n", "", function() dap.step_into() end)
+vim.keymap.set("n", "", function() dap.step_out() end)
diff --git a/nixos/modules/dev/neovim/lua/user/dap/init.lua b/nixos/modules/dev/neovim/lua/user/dap/init.lua
new file mode 100644
index 000000000..c64560573
--- /dev/null
+++ b/nixos/modules/dev/neovim/lua/user/dap/init.lua
@@ -0,0 +1,2 @@
+require "user.dap.vscode-js"
+require "user.dap.dap"
diff --git a/nixos/modules/dev/neovim/lua/user/dap/vscode-js.lua b/nixos/modules/dev/neovim/lua/user/dap/vscode-js.lua
new file mode 100644
index 000000000..f648fa6d2
--- /dev/null
+++ b/nixos/modules/dev/neovim/lua/user/dap/vscode-js.lua
@@ -0,0 +1,36 @@
+local dap_status_ok, dap = pcall(require, "dap")
+if not dap_status_ok then
+ return
+end
+
+dap.adapters["pwa-node"] = {
+ type = "server",
+ host = "localhost",
+ port = "${port}",
+ executable = {
+ command = vim.fn.exepath "js-debug-adapter",
+ args = { "${port}" },
+ },
+}
+
+for _, language in ipairs({ "typescript", "javascript" }) do
+ dap.configurations[language] = {
+ {
+ name = "Debug watch:node",
+ request = "launch",
+ runtimeArgs = {
+ "watch:node"
+ },
+ runtimeExecutable = "yarn",
+ skipFiles = {
+ "/**"
+ },
+ type = "pwa-node",
+ envFile = "${workspaceFolder}/.env.local",
+ rootPath = "${workspaceFolder}",
+ cwd = "${workspaceFolder}",
+ console = "integratedTerminal",
+ internalConsoleOptions = "neverOpen",
+ },
+ }
+end
diff --git a/nixos/modules/dev/neovim/lua/user/dashboard.lua b/nixos/modules/dev/neovim/lua/user/dashboard.lua
new file mode 100644
index 000000000..53d9ce28c
--- /dev/null
+++ b/nixos/modules/dev/neovim/lua/user/dashboard.lua
@@ -0,0 +1,113 @@
+local status_ok, dashboard = pcall(require, 'dashboard')
+if not status_ok then
+ return
+end
+
+local header = {
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣴⡆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ",
+ " ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣾⣿⣧⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ",
+ " ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣾⣿⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ",
+ " ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡾⠋⠉⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ",
+ " ⠀⠀⠀⠀⠀⠀⠀⠀⠀⣼⠃⠀⠀⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ",
+ " ⠀⠀⠀⠀⠀⠀⠀⠀⢀⡏⠀⠀⠀⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ",
+ " ⠀⠀⠀⠀⠀⠀⠀⠀⢸⠀⠀⠀⠀⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣀⣀⣠⣤⣤⣤⣤⠀⠀ ",
+ " ⠀⠀⠀⠀⠀⠀⠀⠀⡏⠀⠀⠀⠀⢸⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⡤⠴⠒⠊⠉⠉⠀⠀⣿⣿⣿⠿⠋⠀⠀ ",
+ " ⠀⠀⠀⠀⠀⠀⠀⠀⡇⠀⠀⢀⡠⠼⠴⠒⠒⠒⠒⠦⠤⠤⣄⣀⠀⢀⣠⠴⠚⠉⠀⠀⠀⠀⠀⠀⠀⠀⣼⠿⠋⠁⠀⠀⠀⠀ ",
+ " ⠀⠀⠀⠀⠀⠀⠀⠀⣇⠔⠂⠈⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢨⠿⠋⠀⠀⠀⠀⠀⠀⠀⠀⣀⡤⠖⠋⠁⠀⠀⠀⠀⠀⠀⠀ ",
+ " ⠀⠀⠀⠀⠀⠀⠀⢰⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣠⠤⠒⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ",
+ " ⠀⠀⠀⠀⠀⠀⢀⡟⠀⣠⣄⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⢻⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⣤⣤⡤⠤⢴ ",
+ " ⠀⠀⠀⠀⠀⠀⣸⠁⣾⣿⣀⣽⡆⠀⠀⠀⠀⠀⠀⠀⢠⣾⠉⢿⣦⠀⠀⠀⢸⡀⠀⠀⢀⣠⠤⠔⠒⠋⠉⠉⠀⠀⠀⠀⢀⡞ ",
+ " ⠀⠀⠀⠀⠀⢀⡏⠀⠹⠿⠿⠟⠁⠀⠰⠦⠀⠀⠀⠀⠸⣿⣿⣿⡿⠀⠀⠀⢘⡧⠖⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡼⠀ ",
+ " ⠀⠀⠀⠀⠀⣼⠦⣄⠀⠀⢠⣀⣀⣴⠟⠶⣄⡀⠀⠀⡀⠀⠉⠁⠀⠀⠀⠀⢸⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣸⠁⠀ ",
+ " ⠀⠀⠀⠀⢰⡇⠀⠈⡇⠀⠀⠸⡾⠁⠀⠀⠀⠉⠉⡏⠀⠀⠀⣠⠖⠉⠓⢤⢸⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⠃⠀⠀ ",
+ " ⠀⠀⠀⠀⠀⢧⣀⡼⠃⠀⠀⠀⢧⠀⠀⠀⠀⠀⢸⠃⠀⠀⠀⣧⠀⠀⠀⣸⢹⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡰⠃⠀⠀⠀ ",
+ " ⠀⠀⠀⠀⠀⠈⢧⡀⠀⠀⠀⠀⠘⣆⠀⠀⠀⢠⠏⠀⠀⠀⠀⠈⠳⠤⠖⠃⡟⠀⠀⠀⢾⠛⠛⠛⠛⠛⠛⠛⠛⠁⠀⠀⠀⠀ ",
+ " ⠀⠀⠀⠀⠀⠀⠀⠙⣆⠀⠀⠀⠀⠈⠦⣀⡴⠋⠀⠀⠀⠀⠀⠀⠀⠀⢀⣼⠙⢦⠀⠀⠘⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ",
+ " ⠀⠀⠀⠀⠀⠀⠀⢠⡇⠙⠦⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⠴⠋⠸⡇⠈⢳⡀⠀⢹⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ",
+ " ⠀⠀⠀⠀⠀⠀⠀⡼⣀⠀⠀⠈⠙⠂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠀⠀⠀⠀⣷⠴⠚⠁⠀⣀⣷⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ",
+ " ⠀⠀⠀⠀⠀⠀⡴⠁⡏⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⣆⡴⠚⠉⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ",
+ " ⣼⢷⡆⠀⣠⡴⠧⣄⣇⠀⠀⠀⠀⠀⠀⠀⢲⠀⡟⠀⠀⠀⠀⠀⠀⠀⢀⡇⣠⣽⢦⣄⢀⣴⣶⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ",
+ " ⡿⣼⣽⡞⠁⠀⠀⠀⢹⡀⠀⠀⠀⠀⠀⠀⠈⣷⠃⠀⠀⠀⠀⠀⠀⠀⣼⠉⠁⠀⠀⢠⢟⣿⣿⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ",
+ " ⣷⠉⠁⢳⠀⠀⠀⠀⠈⣧⠀⠀⠀⠀⠀⠀⠀⣻⠀⠀⠀⠀⠀⠀⠀⣰⠃⠀⠀⠀⠀⠏⠀⠀⡿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ",
+ " ⠹⡆⠀⠈⡇⠀⠀⠀⠀⠘⣆⠀⠀⠀⠀⠀⠀⡇⠀⠀⠀⠀⠀⠀⣰⠃⠀⠀⠀⠀⠀⠀⠀⣸⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ",
+ " ⠀⢳⡀⠀⠙⠀⠀⠀⠀⠀⠘⣆⠀⠀⠀⠀⠀⡇⠀⠀⠀⠀⠀⣰⠃⠀⠀⠀⠀⢀⡄⠀⢠⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ",
+ " ⠀⠀⢳⡀⣰⣀⣀⣀⠀⠀⠀⠘⣦⣀⠀⠀⠀⡇⠀⠀⠀⢀⡴⠃⠀⠀⠀⠀⠀⢸⡇⢠⠏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ",
+ " ⠀⠀⠀⠉⠉⠀⠀⠈⠉⠉⠉⠙⠻⠿⠾⠾⠻⠓⢦⠦⡶⡶⠿⠛⠛⠓⠒⠒⠚⠛⠛⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ",
+ " ",
+ " ",
+ " ",
+ " N E O V I M ",
+ " ",
+ " ",
+ " ",
+}
+
+-- local header = {
+-- " ",
+-- " ",
+-- " ",
+-- " ",
+-- " :h- Nhy` ",
+-- " -mh. h. `Ndho ",
+-- " hmh+ oNm. oNdhh ",
+-- " `Nmhd` /NNmd /NNhhd ",
+-- " -NNhhy `hMNmmm`+NNdhhh ",
+-- " .NNmhhs ```....`..-:/./mNdhhh+ ",
+-- " mNNdhhh- `.-::///+++////++//:--.`-/sd` ",
+-- " oNNNdhhdo..://++//++++++/+++//++///++/-.` ",
+-- " y. `mNNNmhhhdy+/++++//+/////++//+++///++////-` `/oos: ",
+-- " . Nmy: :NNNNmhhhhdy+/++/+++///:.....--:////+++///:.`:s+ ",
+-- " h- dNmNmy oNNNNNdhhhhy:/+/+++/- ---:/+++//++//.` ",
+-- " hd+` -NNNy`./dNNNNNhhhh+-:///// -+oo:` ::-:+////++///:` ",
+-- " /Nmhs+oss-:++/dNNNmhho:--::/// /mmmmmo ../-///++///////. ",
+-- " oNNdhhhhhhhs//osso/:---:::/// /yyyyso ..o+-//////////:/. ",
+-- " /mNNNmdhhhh/://+///:::////// -:::- ..+sy+:////////::/:/. ",
+-- " /hNNNdhhs--:/+++////++/////. ..-/yhhs-/////////::/::/` ",
+-- " .ooo+/-::::/+///////++++//-/ossyyhhhhs/:///////:::/::::/: ",
+-- " -///:::::::////++///+++/////:/+ooo+/::///////.::://::---+` ",
+-- " /////+//++++/////+////-..//////////::-:::--`.:///:---:::/: ",
+-- " //+++//++++++////+++///::-- .::::-------:: ",
+-- " :/++++///////////++++//////. -:/:----::../- ",
+-- " -/++++//++///+////////////// .::::---:::-.+` ",
+-- " `////////////////////////////:. --::-----...-/ ",
+-- " -///://////////////////////::::-.. :-:-:-..-::.`.+` ",
+-- " :/://///:///::://::://::::::/:::::::-:---::-.-....``/- - ",
+-- " ::::://::://::::::::::::::----------..-:....`.../- -+oo/ ",
+-- " -/:::-:::::---://:-::-::::----::---.-.......`-/. ``",
+-- " s-`::--:::------:////----:---.-:::...-.....`./: ",
+-- " yMNy.`::-.--::..-dmmhhhs-..-.-.......`.....-/:` ",
+-- " oMNNNh. `-::--...:NNNdhhh/.--.`..``.......:/- ",
+-- " :dy+:` .-::-..NNNhhd+``..`...````.-::-` ",
+-- " .-:mNdhh:.......--::::-` ",
+-- " yNh/..------..` ",
+-- " ",
+-- " ",
+-- " ",
+-- " N E O V I M ",
+-- " ",
+-- " ",
+-- " ",
+-- }
+
+dashboard.setup({
+ theme = "doom",
+ config = {
+ header = header,
+ center = {
+ { desc = " Restore Session ", action = "lua require('persistence').load()", key = 'SPC s r', desc_hl = "DashboardCenter" },
+ { desc = " Find File ", action = "Telescope find_files hidden=true theme=dropdown", key = 'SPC f f', desc_hl = "DashboardCenter" },
+ { desc = " Recents ", action = "Telescope oldfiles", key = 'SPC f h' , desc_hl = "DashboardCenter"},
+ { desc = " Find Word ", action = "Telescope live_grep" , key = 'SPC f g' , desc_hl = "DashboardCenter"},
+ { desc = " New Buffer ", action = "enew" , key = 'SPC b n' , desc_hl = "DashboardCenter"},
+ { desc = " Update Plugins ", action = "Lazy sync" , key = 'SPC n u' , desc_hl = "DashboardCenter"},
+ { desc = " Settings ", action = "edit $MYVIMRC" , key = 'SPC n e' , desc_hl = "DashboardCenter"},
+ { desc = " Exit ", action = "exit" , key = 'SPC Q' , desc_hl = "DashboardCenter"}
+ }
+ },
+})
diff --git a/nixos/modules/dev/neovim/lua/user/git.lua b/nixos/modules/dev/neovim/lua/user/git.lua
new file mode 100644
index 000000000..bb5a9865a
--- /dev/null
+++ b/nixos/modules/dev/neovim/lua/user/git.lua
@@ -0,0 +1,23 @@
+local status_ok, gitsigns = pcall(require, "gitsigns")
+if not status_ok then
+ return
+end
+
+local git_blame_status_ok, gitblame = pcall(require, "gitblame")
+if not git_blame_status_ok then
+ return
+end
+
+gitsigns.setup {
+ signs = {
+ add = { hl = 'GitSignsAdd' , text = "▎", numhl='GitSignsAddNr' , linehl='GitSignsAddLn' },
+ change = { hl = 'GitSignsChange', text = "▎", numhl='GitSignsChangeNr', linehl='GitSignsChangeLn' },
+ delete = { hl = 'GitSignsDelete', text = "", numhl='GitSignsDeleteNr', linehl='GitSignsDeleteLn' },
+ topdelete = { hl = 'GitSignsDelete', text = "", numhl='GitSignsDeleteNr', linehl='GitSignsDeleteLn' },
+ changedelete = { hl = 'GitSignsChange', text = "▎", numhl='GitSignsChangeNr', linehl='GitSignsChangeLn' },
+ },
+}
+
+gitblame.setup{
+ enabled = false
+}
diff --git a/nixos/modules/dev/neovim/lua/user/harpoon.lua b/nixos/modules/dev/neovim/lua/user/harpoon.lua
new file mode 100644
index 000000000..0fd5b7b0f
--- /dev/null
+++ b/nixos/modules/dev/neovim/lua/user/harpoon.lua
@@ -0,0 +1,18 @@
+local status_ok, harpoon = pcall(require, "harpoon")
+if not status_ok then
+ return
+end
+
+harpoon:setup({
+ settings = {
+ ui_width_ratio = 0.3,
+ save_on_toggle = true,
+ }
+})
+
+vim.keymap.set("n", "", function() harpoon:list():select(1) end)
+vim.keymap.set("n", "", function() harpoon:list():select(2) end)
+vim.keymap.set("n", "", function() harpoon:list():select(3) end)
+vim.keymap.set("n", "", function() harpoon:list():select(4) end)
+vim.keymap.set("n", "", function() harpoon:list():prev() end)
+vim.keymap.set("n", "", function() harpoon:list():next() end)
diff --git a/nixos/modules/dev/neovim/lua/user/impatient.lua b/nixos/modules/dev/neovim/lua/user/impatient.lua
new file mode 100644
index 000000000..84419e075
--- /dev/null
+++ b/nixos/modules/dev/neovim/lua/user/impatient.lua
@@ -0,0 +1,6 @@
+local status_ok, impatient = pcall(require, "impatient")
+if not status_ok then
+ return
+end
+
+impatient.enable_profile()
diff --git a/nixos/modules/dev/neovim/lua/user/indentline.lua b/nixos/modules/dev/neovim/lua/user/indentline.lua
new file mode 100644
index 000000000..c0eb13f20
--- /dev/null
+++ b/nixos/modules/dev/neovim/lua/user/indentline.lua
@@ -0,0 +1,21 @@
+local status_ok, indent_blankline = pcall(require, "ibl")
+if not status_ok then
+ return
+end
+
+indent_blankline.setup {
+ indent = { char = "▏" },
+ scope = { show_start = false, show_end = false },
+ exclude = {
+ buftypes = {
+ "nofile",
+ "terminal",
+ },
+ filetypes = {
+ "help",
+ "dashboard",
+ "NvimTree",
+ "packer",
+ },
+ }
+}
diff --git a/nixos/modules/dev/neovim/lua/user/keymaps.lua b/nixos/modules/dev/neovim/lua/user/keymaps.lua
new file mode 100644
index 000000000..41bb8a896
--- /dev/null
+++ b/nixos/modules/dev/neovim/lua/user/keymaps.lua
@@ -0,0 +1,82 @@
+local opts = { noremap = true, silent = true }
+
+local term_opts = { silent = true }
+
+-- Shorten function name
+local keymap = vim.api.nvim_set_keymap
+
+--Remap space as leader key
+keymap("", "", "", opts)
+vim.g.mapleader = " "
+vim.g.maplocalleader = " "
+
+-- Modes
+-- normal_mode = "n",
+-- insert_mode = "i",
+-- visual_mode = "v",
+-- visual_block_mode = "x",
+-- term_mode = "t",
+-- command_mode = "c",
+
+-- Normal --
+-- Clean search highlights
+keymap("n", "", ":noh", opts)
+
+-- Better window navigation
+keymap("n", "", "h", opts)
+keymap("n", "", "j", opts)
+keymap("n", "", "k", opts)
+keymap("n", "", "l", opts)
+
+-- Center C-d and C-u
+keymap("n", "", "zz", opts)
+keymap("n", "", "zz", opts)
+
+-- Center search results
+keymap("n", "n", "nzzzv", opts)
+keymap("n", "N", "Nzzzv", opts)
+
+-- The control-shift-z of nvim
+keymap("n", "U", "", opts)
+
+-- Split
+keymap("n", "", ":vsplit", opts)
+keymap("n", "", ":split", opts)
+
+-- Fold
+keymap("n", "fc", ":foldclose", opts)
+keymap("n", "fo", ":foldopen", opts)
+
+-- Resize with arrows
+keymap("n", "", ":resize -2", opts)
+keymap("n", "", ":resize +2", opts)
+keymap("n", "", ":vertical resize -2", opts)
+keymap("n", "", ":vertical resize +2", opts)
+
+-- Insert --
+-- Press jk fast to enter
+keymap("i", "jk", "", opts)
+
+-- Visual --
+-- Stay in indent mode
+keymap("v", "<", "", ">gv", opts)
+
+-- Move text up and down
+keymap("v", "", ":m .+1==", opts)
+keymap("v", "", ":m .-2==", opts)
+keymap("v", "p", '"_dP', opts)
+
+-- Visual Block --
+-- Move text up and down
+keymap("x", "J", ":move '>+1gv-gv", opts)
+keymap("x", "K", ":move '<-2gv-gv", opts)
+keymap("x", "", ":move '>+1gv-gv", opts)
+keymap("x", "", ":move '<-2gv-gv", opts)
+
+-- Terminal --
+-- Better terminal navigation
+keymap('t', '', [[wincmd h]], term_opts)
+keymap('t', '', [[wincmd j]], term_opts)
+keymap('t', '', [[wincmd k]], term_opts)
+keymap('t', '', [[wincmd l