bitscoper.dev

My NixOS

The /etc/nixos/configuration.nix file of my life.
# By Abdullah As-Sadeed

{ config
, pkgs
, lib
, ...
}:
let
  home-manager = builtins.fetchTarball "https://github.com/nix-community/home-manager/archive/refs/heads/master.tar.gz";

  font_name = {
    mono = "NotoMono Nerd Font";
    sans_serif = "NotoSans Nerd Font";
    serif = "NotoSerif Nerd Font";
    emoji = "Noto Color Emoji";
  };

  dracula_theme = {
    hex = {
      background = "#282A36";
      current_line = "#44475A";
      foreground = "#F8F8F2";
      comment = "#6272A4";
      cyan = "#8BE9FD";
      green = "#50FA7B";
      orange = "#FFB86C";
      pink = "#FF79C6";
      purple = "#BD93F9";
      red = "#FF5555";
      yellow = "#F1FA8C";
    };

    rgba = {
      background = "rgba(40, 42, 54, 1.0)";
      current_line = "rgba(68, 71, 90, 1.0)";
      foreground = "rgba(248, 248, 242, 1.0)";
      comment = "rgba(98, 114, 164, 1.0)";
      cyan = "rgba(139, 233, 253, 1.0)";
      green = "rgba(80, 250, 123, 1.0)";
      orange = "rgba(255, 184, 108, 1.0)";
      pink = "rgba(255, 121, 198, 1.0)";
      purple = "rgba(189, 147, 249, 1.0)";
      red = "rgba(255, 85, 85, 1.0)";
      yellow = "rgba(241, 250, 140, 1.0)";
    };
  };

  cursor = {
    theme = {
      name = "Bibata-Modern-Classic";
      package = pkgs.bibata-cursors;
    };

    size = 24;
  };

  wallpaper = builtins.fetchurl {
    url = "https://raw.githubusercontent.com/JaKooLit/Wallpaper-Bank/refs/heads/main/wallpapers/Dark_Nature.png";
  };

  secrets = import ./secrets.nix;
in
{
  imports = [
    (import "${home-manager}/nixos")

    ./hardware-configuration.nix
  ];

  boot = {
    loader = {
      efi.canTouchEfiVariables = true;
      timeout = 2;

      systemd-boot = {
        enable = true;
        consoleMode = "max";
        configurationLimit = null;

        memtest86.enable = true;
      };
    };

    initrd = {
      enable = true;

      kernelModules = config.boot.kernelModules;

      systemd = {
        enable = true;
      };

      network.ssh.enable = true;

      verbose = true;
    };

    kernelPackages = pkgs.linuxPackages_zen;

    extraModulePackages = with config.boot.kernelPackages; [
      xpadneo
    ];

    kernelModules = [
      "at24"
      "ee1004"
      "kvm-intel"
      "spd5118"
    ];

    extraModprobeConfig = "options kvm_intel nested=1";

    kernelParams = [
      "intel_iommu=on"
      "iommu=pt"
      "kvm.ignore_msrs=1"
      "boot.shell_on_fail"
      "rd.systemd.show_status=true"
      "rd.udev.log_level=err"
      "udev.log_level=err"
      "udev.log_priority=err"
    ];

    consoleLogLevel = 4; # 4 = KERN_WARNING

    tmp.cleanOnBoot = true;

    plymouth = {
      enable = true;

      themePackages = [
        pkgs.nixos-bgrt-plymouth
      ];
      theme = "nixos-bgrt";

      extraConfig = ''
        UseFirmwareBackground=true
      '';
    };
  };

  time = {
    timeZone = "Asia/Dhaka";
    hardwareClockInLocalTime = true;
  };

  system = {
    copySystemConfiguration = true;

    switch.enable = true;
    tools = {
      nixos-build-vms.enable = true;
      nixos-enter.enable = true;
      nixos-generate-config.enable = true;
      nixos-install.enable = true;
      nixos-option.enable = true;
      nixos-rebuild.enable = true;
      nixos-version.enable = true;
    };

    autoUpgrade = {
      enable = false;
      channel = "https://nixos.org/channels/nixos-unstable";
      operation = "boot";
      allowReboot = false;
    };

    activationScripts = { };

    userActivationScripts = { };

    stateVersion = "24.11";
  };

  nix = {
    enable = true;
    channel.enable = true;

    settings = {
      experimental-features = [
        "flakes"
        "nix-command"
      ];

      require-sigs = true;
      sandbox = true;
      auto-optimise-store = true;

      cores = 0; # 0 = All
      # max-jobs = 1;
    };

    gc = {
      automatic = true;
      dates = "weekly";
      persistent = true;
    };
  };

  nixpkgs = {
    hostPlatform = "x86_64-linux";

    config = {
      allowUnfree = true;
    };

    # overlays = [
    #
    # ];
  };

  appstream.enable = true;

  i18n = {
    defaultLocale = "en_US.UTF-8";
    extraLocaleSettings = {
      LC_ADDRESS = config.i18n.defaultLocale;
      LC_IDENTIFICATION = config.i18n.defaultLocale;
      LC_MEASUREMENT = config.i18n.defaultLocale;
      LC_MONETARY = config.i18n.defaultLocale;
      LC_NAME = config.i18n.defaultLocale;
      LC_NUMERIC = config.i18n.defaultLocale;
      LC_PAPER = config.i18n.defaultLocale;
      LC_TELEPHONE = config.i18n.defaultLocale;
      LC_TIME = config.i18n.defaultLocale;
    };
    supportedLocales = [
      "all"
    ];

    inputMethod = {
      enable = true;
      type = "fcitx5";

      fcitx5 = {
        waylandFrontend = true;

        addons = with pkgs; [
          fcitx5-openbangla-keyboard
        ];
      };
    };
  };

  networking = {
    hostName = "Bitscoper-WorkStation";

    wireless = {
      dbusControlled = true;
      userControlled.enable = true;
    };

    networkmanager = {
      enable = true;

      ethernet.macAddress = "permanent";

      wifi = {
        backend = "wpa_supplicant";

        powersave = false;

        scanRandMacAddress = true;
        macAddress = "permanent";
      };

      logLevel = "WARN";
    };

    firewall = {
      enable = false;

      allowPing = true;

      allowedTCPPorts = [
        5060
      ];
      allowedUDPPorts = [
        5060
      ];
    };

    nameservers = [
      "1.1.1.3#one.one.one.one"
      "1.0.0.3#one.one.one.one"
    ];
  };

  security = {
    allowSimultaneousMultithreading = true;

    tpm2.enable = true;

    lockKernelModules = false;

    pam = {
      mount = {
        enable = true;

        createMountPoints = true;
        removeCreatedMountPoints = true;

        logoutHup = true;
        logoutTerm = false;
        logoutKill = false;

        logoutWait = 0;
      };

      services = {
        login = {
          unixAuth = true;
          nodelay = false;

          fprintAuth = true;

          logFailures = true;

          enableGnomeKeyring = true;

          gnupg = {
            enable = true;
            storeOnly = false;
            noAutostart = false;
          };
        };

        sddm = {
          unixAuth = true;
          nodelay = false;

          fprintAuth = true;

          logFailures = true;

          enableGnomeKeyring = true;

          gnupg = {
            enable = true;
            storeOnly = false;
            noAutostart = false;
          };
        };

        hyprlock = {
          unixAuth = true;
          nodelay = false;

          fprintAuth = true;

          logFailures = true;

          enableGnomeKeyring = true;

          gnupg = {
            enable = true;
            storeOnly = false;
            noAutostart = false;
          };
        };

        sudo = {
          unixAuth = true;
          nodelay = false;

          fprintAuth = true;

          logFailures = true;
        };

        polkit-1 = {
          unixAuth = true;
          nodelay = false;

          fprintAuth = true;

          logFailures = true;
        };
      };
    };

    sudo = {
      enable = true;

      execWheelOnly = true;
      wheelNeedsPassword = true;
    };

    polkit = {
      enable = true;
    };

    rtkit.enable = true;

    wrappers = {
      spice-client-glib-usb-acl-helper.source = "${pkgs.spice-gtk}/bin/spice-client-glib-usb-acl-helper";
    };

    audit = {
      enable = true;
    };
  };

  hardware = {
    enableAllFirmware = true;
    enableRedistributableFirmware = true;

    cpu = {
      intel = {
        updateMicrocode = true;
      };
    };

    graphics = {
      enable = true;
      enable32Bit = true;

      extraPackages = with pkgs; [
        intel-media-driver
        intel-compute-runtime
      ];
    };

    sensor = {
      hddtemp = {
        enable = true;
        unit = "C";
        drives = [
          "/dev/disk/by-path/*"
        ];
      };
    };

    bluetooth = {
      enable = true;
      package = pkgs.bluez;

      hsphfpd.enable = false; # Conflicts wwth WirePlumber

      powerOnBoot = true;

      input.General = {
        IdleTimeout = 0; # 0 = Disabled
        LEAutoSecurity = true;
        ClassicBondedOnly = true;
        UserspaceHID = true;
      };

      network.General = {
        DisableSecurity = false;
      };

      settings = {
        General = {
          MaxControllers = 0; # 0 = Unlimited
          ControllerMode = "dual";

          Name = config.networking.hostName;

          DiscoverableTimeout = 0; # 0 = Disabled
          PairableTimeout = 0; # 0 = Disabled
          AlwaysPairable = true;
          FastConnectable = true;

          ReverseServiceDiscovery = true;
          NameResolving = true;
          RemoteNameRequestRetryDelay = 60; # Seconds
          RefreshDiscovery = true;
          TemporaryTimeout = 0; # 0 = Disabled

          SecureConnections = "on";
          Privacy = "off";

          Experimental = true;
          KernelExperimental = true;
        };

        Policy = {
          AutoEnable = true;

          ResumeDelay = 2; # Seconds
          ReconnectAttempts = 7;
          ReconnectIntervals = "1, 2, 4, 8, 16, 32, 64";
        };

        GATT = {
          Cache = "always";
        };

        CSIS = {
          Encryption = true;
        };

        AVRCP = {
          VolumeCategory = true;
          VolumeWithoutTarget = false;
        };

        AVDTP = {
          SessionMode = "ertm";
        };

        AdvMon = {
          RSSISamplingPeriod = "0x00";
        };
      };
    };

    rtl-sdr.enable = true;

    sane = {
      enable = true;
      openFirewall = true;
    };

    steam-hardware.enable = true;
    xone.enable = true;
    xpadneo.enable = true;
  };

  virtualisation = {
    libvirtd = {
      enable = true;

      qemu = {
        package = pkgs.qemu_kvm;

        swtpm.enable = true;

        ovmf = {
          enable = true;
          packages = [
            (pkgs.OVMFFull.override {
              secureBoot = true;
              tpmSupport = true;
            }).fd
          ];
        };

        runAsRoot = true;
      };
    };
    spiceUSBRedirection.enable = true;

    containers.enable = true;

    podman = {
      enable = true;
      dockerCompat = true;
      defaultNetwork.settings.dns_enabled = true;
    };

    oci-containers.backend = "podman";

    waydroid.enable = true;
  };

  systemd = {
    packages = with pkgs; [
      cloudflare-warp
      hardinfo2
    ];

    globalEnvironment = { };

    targets = {
      multi-user.wants = [
        "warp-svc.service"
      ];
    };
  };

  services = {
    dbus = {
      enable = true;
      implementation = "broker";
    };

    btrfs.autoScrub = {
      enable = true;

      interval = "weekly";
      fileSystems = [
        "/"
      ];
    };

    fwupd.enable = true;

    flatpak.enable = true;

    acpid = {
      enable = true;

      powerEventCommands = '''';
      acEventCommands = '''';
      lidEventCommands = '''';

      logEvents = false;
    };

    power-profiles-daemon.enable = true;

    logind = {
      killUserProcesses = true;

      lidSwitch = "ignore";
      lidSwitchDocked = "ignore";
      lidSwitchExternalPower = "ignore";

      powerKey = "poweroff";
      powerKeyLongPress = "poweroff";

      rebootKey = "reboot";
      rebootKeyLongPress = "reboot";

      suspendKey = "ignore";
      suspendKeyLongPress = "ignore";

      hibernateKey = "ignore";
      hibernateKeyLongPress = "ignore";
    };

    fprintd = {
      enable = true;
      # tod = {
      #   enable = true;
      #   driver = ;
      # };
    };

    displayManager = {
      enable = true;
      preStart = '''';

      sddm = {
        enable = true;
        package = pkgs.kdePackages.sddm; # Qt 6

        extraPackages = with pkgs; [
          kdePackages.qtmultimedia
        ];

        wayland = {
          enable = true;
          compositor = "weston";
        };

        enableHidpi = true;
        theme = "sddm-astronaut-theme";

        autoNumlock = true;

        autoLogin.relogin = false;

        settings = {
          Theme = {
            CursorTheme = cursor.theme.name;
            CursorSize = cursor.size;

            Font = font_name.sans_serif;
          };
        };

        stopScript = '''';
      };

      defaultSession = "hyprland-uwsm";

      autoLogin = {
        enable = false;
        user = null;
      };

      logToJournal = true;
      logToFile = true;
    };

    gnome.gnome-keyring.enable = true;

    udev = {
      enable = true;
      packages = with pkgs; [
        android-udev-rules
        game-devices-udev-rules
        libmtp.out
        rtl-sdr
        steam-devices-udev-rules
        usb-blaster-udev-rules
      ];
    };

    gvfs = {
      enable = true;
      package = pkgs.gvfs;
    };

    udisks2 = {
      enable = true;
      mountOnMedia = false;
    };

    libinput = {
      enable = true;

      mouse = {
        leftHanded = false;
        disableWhileTyping = false;
        tapping = true;
        middleEmulation = true;
        clickMethod = "buttonareas";
        scrollMethod = "twofinger";
        naturalScrolling = true;
        horizontalScrolling = true;
        tappingDragLock = true;
        sendEventsMode = "enabled";
      };

      touchpad = {
        leftHanded = false;
        disableWhileTyping = false;
        tapping = true;
        middleEmulation = true;
        clickMethod = "buttonareas";
        scrollMethod = "twofinger";
        naturalScrolling = true;
        horizontalScrolling = true;
        tappingDragLock = true;
        sendEventsMode = "enabled";
      };
    };

    pipewire = {
      enable = true;
      systemWide = false;
      socketActivation = true;
      audio.enable = true;

      alsa.enable = true;
      alsa.support32Bit = true;
      pulse.enable = true;
      jack.enable = true;

      wireplumber = {
        enable = true;

        extraConfig.bluetoothEnhancements = {
          "monitor.bluez.properties" = {
            "bluez5.enable-hw-volume" = true;

            "bluez5.enable-sbc-xq" = true;
            "bluez5.enable-msbc" = true;

            "bluez5.roles" = [
              "a2dp_sink"
              "a2dp_source"
              "bap_sink"
              "bap_source"
              "hfp_ag"
              "hfp_hf"
              "hsp_ag"
              "hsp_hs"
            ];

            "bluez5.codecs" = [
              "aac"
              "aptx"
              "aptx_hd"
              "aptx_ll"
              "aptx_ll_duplex"
              "faststream"
              "faststream_duplex"
              "lc3"
              "lc3plus_h3"
              "ldac"
              "opus_05"
              "opus_05_51"
              "opus_05_71"
              "opus_05_duplex"
              "opus_05_pro"
              "sbc"
              "sbc_xq"
            ];
          };
        };
      };

      raopOpenFirewall = true;
    };

    pulseaudio.enable = false;

    blueman.enable = true;

    printing = {
      enable = true;

      listenAddresses = [
        "*:631"
      ];
      browsing = true;
      webInterface = true;
      allowFrom = [
        "all"
      ];
      defaultShared = true;

      cups-pdf.enable = true;
      drivers = with pkgs; [
        gutenprint
      ];

      startWhenNeeded = true;

      extraConf = ''
        DefaultLanguage en
        ServerName ${config.networking.hostName}
        ServerAlias *
        ServerTokens Full
        ServerAdmin bitscoper@${config.networking.hostName}
        BrowseLocalProtocols all
        BrowseWebIF On
        HostNameLookups On
        AccessLogLevel config
        AutoPurgeJobs Yes
        PreserveJobHistory Off
        PreserveJobFiles Off
        DirtyCleanInterval 30
        LogTimeFormat standard
      '';

      logLevel = "warn";

      openFirewall = true;
    };
    ipp-usb.enable = true;

    system-config-printer.enable = true;

    avahi = {
      enable = true;

      ipv4 = true;
      ipv6 = true;

      nssmdns4 = true;
      nssmdns6 = true;

      wideArea = true;

      publish = {
        enable = true;
        domain = true;
        addresses = true;
        workstation = true;
        hinfo = true;
        userServices = true;
      };

      domainName = config.networking.hostName;
      hostName = config.networking.hostName;

      openFirewall = true;
    };

    bind = {
      enable = false;
      listenOn = [
        "any"
      ];
      ipv4Only = false;
      listenOnIpv6 = [
        "any"
      ];
      cacheNetworks = [
        "127.0.0.0/24"
        "::1/128"
      ];
      extraOptions = ''
        recursion no;
      '';
    };

    openssh = {
      enable = true;

      listenAddresses = [
        {
          addr = "0.0.0.0";
        }
      ];
      ports = [
        22
      ];
      allowSFTP = true;

      banner = config.networking.hostName;

      authorizedKeysInHomedir = true;

      settings = {
        PermitRootLogin = "yes";
        PasswordAuthentication = true;
        X11Forwarding = false;
        StrictModes = true;
        UseDns = true;
        LogLevel = "ERROR";
      };

      openFirewall = true;
    };
    sshd.enable = true;

    cockpit = {
      enable = true;
      port = 9090;
      openFirewall = true;
    };

    phpfpm = {
      settings = { };

      phpOptions = ''
        default_charset = "UTF-8"
        error_reporting = E_ALL
        display_errors = Off
        log_errors = On
        cgi.force_redirect = 1
        expose_php = On
        file_uploads = On
        session.cookie_lifetime = 0
        session.use_cookies = 1
        session.use_only_cookies = 1
        session.use_strict_mode = 1
        session.cookie_httponly = 1
        session.cookie_secure = 1
        session.cookie_samesite = "Strict"
        session.gc_maxlifetime = 43200
        session.use_trans_sid = O
        session.cache_limiter = nocache
        session.sid_length = 248
      '';
    };

    postgresql = {
      enable = true;
      package = pkgs.postgresql;

      enableTCPIP = true;

      settings = pkgs.lib.mkForce {
        listen_addresses = "*";
        port = 5432;
        jit = true;
      };

      authentication = pkgs.lib.mkOverride 10 ''
        local all all trust
        host all all 0.0.0.0/0 md5
        host all all ::/0 md5
        local replication all trust
        host replication all 0.0.0.0/0 md5
        host replication all ::/0 md5
      '';

      checkConfig = true;

      initialScript = pkgs.writeText "initScript" ''
        ALTER USER postgres WITH PASSWORD '${secrets.password_1_of_bitscoper}';
      '';
    };

    mysql = {
      enable = true;
      package = pkgs.mariadb;

      settings = {
        mysqld = {
          bind-address = "0.0.0.0";
          port = 3306;

          sql_mode = "";
        };
      };

      initialScript = pkgs.writeText "initScript" ''
        grant all privileges on *.* to 'root'@'%' identified by password '${secrets.hashed_password_1_of_bitscoper}' with grant option;
        DELETE FROM mysql.user WHERE `Host`='localhost' AND `User`='root';
        flush privileges;
      '';
    };

    memcached = {
      enable = true;
      listen = "0.0.0.0";
      port = 11211;
      enableUnixSocket = false;
      maxMemory = 64; # Megabytes
      maxConnections = 256;
    };

    postfix = {
      enable = true;

      enableSmtp = true;
      enableSubmission = true;
      enableSubmissions = true;

      domain = config.networking.hostName;
      hostname = config.networking.hostName;
      origin = config.networking.hostName;

      virtualMapType = "pcre";
      aliasMapType = "pcre";
      enableHeaderChecks = true;

      setSendmail = true;

      config = { };
    };

    opendkim = {
      enable = true;

      domains = "csl:${config.networking.hostName}";
      selector = "default";

      settings = { };
    };

    dovecot2 = {
      enable = true;
      modules = with pkgs; [

      ];

      enableImap = true;
      enablePop3 = true;
      enableLmtp = true;
      protocols = [
        "imap"
        "pop3"
        "lmtp"
      ];

      enableQuota = true;
      quotaPort = "12340";

      enableDHE = true;

      createMailUser = true;

      enablePAM = true;
      showPAMFailure = true;

      pluginSettings = { };

      extraConfig = '''';
    };

    icecast = {
      enable = true;

      hostname = config.networking.hostName;
      listen = {
        address = "0.0.0.0";
        port = 17101;
      };

      admin = {
        user = "bitscoper";
        password = secrets.password_1_of_bitscoper;
      };

      extraConf = ''
        <location>${config.networking.hostName}</location>
        <admin>bitscoper@${config.networking.hostName}</admin>
        <authentication>
          <source-password>${secrets.password_2_of_bitscoper}</source-password>
          <relay-password>${secrets.password_2_of_bitscoper}</relay-password>
        </authentication>
        <directory>
          <yp-url-timeout>15</yp-url-timeout>
          <yp-url>http://dir.xiph.org/cgi-bin/yp-cgi</yp-url>
        </directory>
        <logging>
          <loglevel>2</loglevel>
        </logging>
        <server-id>${config.networking.hostName}</server-id>
      ''; # <loglevel>2</loglevel> = Warn
    };

    jellyfin = {
      enable = true;
      openFirewall = true;
    };

    ollama = {
      enable = true;
      host = "0.0.0.0";
      port = 11434;
      openFirewall = true;
    };

    open-webui = {
      enable = true;

      host = "0.0.0.0";
      port = 11111;

      environment = {
        ANONYMIZED_TELEMETRY = "False";
        DO_NOT_TRACK = "True";

        DEFAULT_LOCALE = "en";

        ENABLE_ADMIN_CHAT_ACCESS = "True";
        ENABLE_ADMIN_EXPORT = "True";
        SHOW_ADMIN_DETAILS = "True";
        ADMIN_EMAIL = "bitscoper@${config.networking.hostName}";

        USER_PERMISSIONS_WORKSPACE_MODELS_ACCESS = "True";
        USER_PERMISSIONS_WORKSPACE_KNOWLEDGE_ACCESS = "True";
        USER_PERMISSIONS_WORKSPACE_PROMPTS_ACCESS = "True";
        USER_PERMISSIONS_WORKSPACE_TOOLS_ACCESS = "True";

        USER_PERMISSIONS_CHAT_TEMPORARY = "True";
        USER_PERMISSIONS_CHAT_FILE_UPLOAD = "True";
        USER_PERMISSIONS_CHAT_EDIT = "True";
        USER_PERMISSIONS_CHAT_DELETE = "True";

        ENABLE_CHANNELS = "True";

        ENABLE_REALTIME_CHAT_SAVE = "True";

        ENABLE_AUTOCOMPLETE_GENERATION = "True";
        AUTOCOMPLETE_GENERATION_INPUT_MAX_LENGTH = "-1";

        ENABLE_RAG_WEB_SEARCH = "True";
        ENABLE_SEARCH_QUERY_GENERATION = "True";

        ENABLE_TAGS_GENERATION = "True";

        ENABLE_IMAGE_GENERATION = "True";

        YOUTUBE_LOADER_LANGUAGE = "en";

        ENABLE_MESSAGE_RATING = "True";

        ENABLE_COMMUNITY_SHARING = "True";

        ENABLE_RAG_WEB_LOADER_SSL_VERIFICATION = "True";
        WEBUI_SESSION_COOKIE_SAME_SITE = "strict";
        WEBUI_SESSION_COOKIE_SECURE = "True";
        WEBUI_AUTH = "False";

        ENABLE_OLLAMA_API = "True";
        OLLAMA_BASE_URL = "http://127.0.0.1:11434";
      };

      openFirewall = true;
    };

    wordpress = { };

    asterisk = {
      enable = true;

      confFiles = {
        "pjsip.conf" = ''
          [transport-tcp]
          type = transport
          protocol = tcp
          bind = 0.0.0.0

          [transport-udp]
          type = transport
          protocol = udp
          bind = 0.0.0.0

          [transport-tcp6]
          type = transport
          protocol = tcp
          bind = ::

          [transport-udp6]
          type = transport
          protocol = udp
          bind = ::

          [endpoint_internal](!)
          type = endpoint
          context = from-internal
          disallow = all
          allow = ulaw

          [auth_userpass](!)
          type = auth
          auth_type = userpass

          [aor_dynamic](!)
          type = aor
          max_contacts = 1

          ; Account 1
          [bitscoper_1](endpoint_internal)
          auth = bitscoper_1
          aors = bitscoper_1
          [bitscoper_1](auth_userpass)
          password = ${secrets.password_2_of_bitscoper}
          username = bitscoper_1
          [bitscoper_1](aor_dynamic)

          ; Account 2
          [bitscoper_2](endpoint_internal)
          auth = bitscoper_2
          aors = bitscoper_2
          [bitscoper_2](auth_userpass)
          password = ${secrets.password_2_of_bitscoper}
          username = bitscoper_2
          [bitscoper_2](aor_dynamic)

          ; Account 3
          [bitscoper_3](endpoint_internal)
          auth = bitscoper_3
          aors = bitscoper_3
          [bitscoper_3](auth_userpass)
          password = ${secrets.password_2_of_bitscoper}
          username = bitscoper_3
          [bitscoper_3](aor_dynamic)

          ; Account 4
          [bitscoper_4](endpoint_internal)
          auth = bitscoper_4
          aors = bitscoper_4
          [bitscoper_4](auth_userpass)
          password = ${secrets.password_2_of_bitscoper}
          username = bitscoper_4
          [bitscoper_4](aor_dynamic)
        '';

        "extensions.conf" = ''
          [from-internal]
            exten => 1, 1, Dial(PJSIP/bitscoper_1, 60)
            exten => 2, 1, Dial(PJSIP/bitscoper_2, 60)
            exten => 3, 1, Dial(PJSIP/bitscoper_3, 60)
            exten => 4, 1, Dial(PJSIP/bitscoper_4, 60)

            exten => 17, 1, Answer()
            same  =>     n, Wait(1)
            same  =>     n, Playback(hello-world)
            same  =>     n, Hangup()
        '';
      };

      extraConfig = '''';

      extraArguments = [

      ];
    };

    tailscale = {
      enable = true;
      disableTaildrop = false;

      port = 0; # 0 = Automatic
      openFirewall = true;
    };

    tor = {
      enable = false;

      relay = {
        enable = false;

        # role = ;
      };

      client = {
        enable = false;

        dns.enable = true;

        onionServices = { };
      };

      torsocks = {
        enable = config.services.tor.client.enable;
        allowInbound = true;
      };

      controlSocket.enable = false;

      enableGeoIP = true;

      settings = {
        Nickname = config.networking.hostName;
        ContactInfo = "bitscoper@${config.networking.hostName}";

        IPv6Exit = true;
        ClientUseIPv4 = true;
        ClientUseIPv6 = true;

        ExtendAllowPrivateAddresses = false;
        RefuseUnknownExits = true;
        ServerDNSDetectHijacking = true;
        ServerDNSRandomizeCase = true;

        FetchServerDescriptors = true;
        FetchHidServDescriptors = true;
        FetchUselessDescriptors = false;
        DownloadExtraInfo = false;

        CellStatistics = false;
        ConnDirectionStatistics = false;
        DirReqStatistics = false;
        EntryStatistics = false;
        ExitPortStatistics = false;
        ExtraInfoStatistics = false;
        HiddenServiceStatistics = false;
        MainloopStats = false;
        PaddingStatistics = false;

        LogMessageDomains = false;
      };

      openFirewall = true;
    };

    logrotate = {
      enable = true;
      checkConfig = true;
      allowNetworking = true;
    };
  };

  programs = {
    command-not-found.enable = true;

    nix-ld = {
      enable = true;
      libraries = with pkgs; [
        # libepoxy
        glib.out
        libGL
        llvmPackages.stdenv.cc.cc.lib
        stdenv.cc.cc.lib
      ];
    };

    appimage = {
      enable = true;
      binfmt = true;
    };

    uwsm.enable = true;

    hyprland = {
      enable = true;
      withUWSM = true;
      portalPackage = pkgs.xdg-desktop-portal-hyprland;
      xwayland.enable = true;
    };

    xwayland.enable = true;

    bash = {
      completion.enable = true;
      enableLsColors = true;

      shellAliases = { };

      loginShellInit = '''';

      shellInit = '''';

      interactiveShellInit = ''
        PROMPT_COMMAND="history -a"
      '';
    };

    fish = {
      enable = true;

      vendor = {
        config.enable = true;
        functions.enable = true;
        completions.enable = true;
      };

      shellAbbrs = { };
      shellAliases = { };

      promptInit = '''';

      loginShellInit = '''';

      shellInit = '''';

      interactiveShellInit = '''';
    };

    direnv = {
      enable = true;

      nix-direnv.enable = true;
      loadInNixShell = true;

      enableBashIntegration = true;
      enableFishIntegration = true;

      direnvrcExtra = '''';

      silent = false;
    };

    nix-index = {
      enableBashIntegration = true;
      enableFishIntegration = true;
    };

    java = {
      enable = true;
      package = pkgs.jdk23;
      binfmt = true;
    };

    ssh = {
      startAgent = true;
      agentTimeout = null;
    };

    gnupg = {
      agent = {
        enable = true;

        enableBrowserSocket = true;
        enableExtraSocket = true;
        enableSSHSupport = false;

        pinentryPackage = (pkgs.pinentry-rofi.override {
          rofi = pkgs.rofi-wayland;
        });
      };

      dirmngr.enable = true;
    };

    nm-applet = {
      enable = true;
      indicator = true;
    };

    seahorse.enable = true;

    git = {
      enable = true;
      package = pkgs.gitFull;

      lfs = {
        enable = true;
        enablePureSSHTransfer = true;
      };

      prompt.enable = true;

      config = {
        init.defaultBranch = "main";

        credential.helper = "${pkgs.gitFull}/bin/git-credential-libsecret";

        user = {
          name = "Abdullah As-Sadeed";
          email = "bitscoper@gmail.com";
        };
      };
    };

    adb.enable = true;

    usbtop.enable = true;

    system-config-printer.enable = true;

    virt-manager.enable = true;

    nano = {
      enable = true;
      nanorc = ''
        set linenumbers
        set softwrap
        set indicator
        set autoindent
      '';
    };

    neovim = {
      enable = true;

      viAlias = true;
      vimAlias = true;

      withPython3 = true;

      configure = {
        # customRC = '''';
      };

      defaultEditor = false;
    };

    firefox = {
      enable = true;
      package = pkgs.firefox-devedition;
      languagePacks = [
        "bn"
        "en-US"
      ];

      preferences = { };
    };

    thunderbird = {
      enable = true;
      package = pkgs.thunderbird-latest;

      preferences = { };
    };

    wireshark.enable = true;

    steam = {
      enable = true;
      extraCompatPackages = with pkgs; [
        proton-ge-bin
        steam-play-none
      ];
      protontricks.enable = true;

      localNetworkGameTransfers.openFirewall = true;
      remotePlay.openFirewall = true;
      dedicatedServer.openFirewall = true;
    };

    localsend = {
      enable = true;
      openFirewall = true;
    };

    dconf = {
      enable = true;
      profiles.user.databases = [
        {
          lockAll = true;

          settings = {
            "system/locale" = {
              region = config.i18n.defaultLocale;
            };

            "org/gtk/gtk4/settings/file-chooser" = {
              sort-directories-first = true;
            };
            "org/gnome/nautilus/preferences" = {
              click-policy = "double";
              recursive-search = "always";
              show-create-link = true;
              show-delete-permanently = true;
              show-directory-item-counts = "always";
              show-image-thumbnails = "always";
              date-time-format = "simple";
            };
            "org/gnome/nautilus/icon-view" = {
              captions = [
                "size"
                "date_modified"
                "none"
              ];
            };

            "org/virt-manager/virt-manager" = {
              xmleditor-enabled = true;
            };
            "org/virt-manager/virt-manager/connections" = {
              autoconnect = [
                "qemu:///system"
              ];
              uris = [
                "qemu:///system"
              ];
            };
            "org/virt-manager/virt-manager/new-vm" = {
              cpu-default = "host-passthrough";
            };
            "org/virt-manager/virt-manager/console" = {
              auto-redirect = false;
              autoconnect = true;
            };
            "org/virt-manager/virt-manager/stats" = {
              enable-cpu-poll = true;
              enable-disk-poll = true;
              enable-memory-poll = true;
              enable-net-poll = true;
            };
            "org/virt-manager/virt-manager/vmlist-fields" = {
              cpu-usage = true;
              disk-usage = true;
              host-cpu-usage = true;
              memory-usage = true;
              network-traffic = true;
            };
            "org/virt-manager/virt-manager/confirm" = {
              delete-storage = true;
              forcepoweroff = true;
              pause = true;
              poweroff = true;
              removedev = true;
              unapplied-dev = true;
            };

            "com/github/huluti/Curtail" = {
              file-attributes = true;
              metadata = false;
              new-file = true;
              recursive = true;
            };

            "org/gnome/meld" = {
              enable-space-drawer = true;
              highlight-current-line = true;
              highlight-syntax = true;
              prefer-dark-theme = true;
              show-line-numbers = true;
              show-overview-map = true;
              wrap-mode = "word";
            };
          };
        }
      ];
    };
  };

  fonts = {
    enableDefaultPackages = false;
    packages = with pkgs; [
      corefonts
      nerd-fonts.noto
      noto-fonts
      noto-fonts-cjk-sans
      noto-fonts-cjk-serif
      noto-fonts-color-emoji
      noto-fonts-lgc-plus
    ];

    fontconfig = {
      enable = true;

      allowBitmaps = true;
      allowType1 = false;
      cache32Bit = true;

      defaultFonts = {
        monospace = [
          font_name.mono
        ];

        sansSerif = [
          font_name.sans_serif
        ];

        serif = [
          font_name.serif
        ];

        emoji = [
          font_name.emoji
        ];
      };

      includeUserConf = true;
    };
  };

  environment = {
    enableDebugInfo = false;

    enableAllTerminfo = true;

    wordlist = {
      enable = true;
      # lists = ;
    };

    homeBinInPath = true;
    localBinInPath = true;

    stub-ld.enable = true;

    variables = { };

    sessionVariables = {
      NIXOS_OZONE_WL = "1";
      CHROME_EXECUTABLE = "chromium";
    };

    shellAliases = {
      clean_build = "sudo nix-channel --update && sudo nix-env -u --always && sudo rm -rf /nix/var/nix/gcroots/auto/* && sudo nix-collect-garbage -d && nix-collect-garbage -d && sudo nix-store --gc && sudo nixos-rebuild switch --install-bootloader --upgrade-all";
    };

    extraInit = '''';

    loginShellInit = '''';

    shellInit = '''';

    interactiveShellInit = '''';

    systemPackages = with pkgs; [
      # amrnb
      # amrwb
      # appimagekit
      # binwalk
      # blender
      # certbot-full
      # cewl
      # ciscoPacketTracer8
      # dmitry
      # john
      # johnny
      # mdk3-master
      # medusa
      # mitmproxy
      # ncrack
      # netexec
      # p0f
      # reiser4progs
      # scrounge-ntfs
      # theharvester
      # wapiti
      # wifite2
      above
      acl
      agi
      aircrack-ng
      alac
      amass
      android-backup-extractor
      android-studio
      android-studio-tools
      android-tools
      anydesk
      apktool
      appimage-run
      aribb24
      aribb25
      arj
      armitage
      arping
      audacity
      audit
      autopsy
      avrdude
      awscli2
      bat
      bettercap
      bfcal
      bleachbit
      bloodhound
      bluez-tools
      bottles
      brightnessctl
      btop
      btrfs-progs
      bulk_extractor
      bully
      burpsuite
      butt
      bzip2
      bzip3
      cabextract
      celt
      chmlib
      chntpw
      clang
      clang-analyzer
      clang-manpages
      clang-tools
      clinfo
      cliphist
      cloudflare-warp
      cmake
      codec2
      commix
      coreutils-full
      cpio
      crowbar
      crunch
      cryptsetup
      cups
      cups-filters
      cups-pdf-to-pdf
      cups-printers
      curlFull
      curtail
      d-spy
      dart
      davtest
      dbd
      dbeaver-bin
      dconf-editor
      debase
      dejsonlz4
      dirb
      dirbuster
      dmg2img
      dmidecode
      dns2tcp
      dnschef
      dnsenum
      dnsmap
      dnsrecon
      dosfstools
      driftnet
      dsniff
      e2fsprogs
      efibootmgr
      enum4linux
      esptool
      ettercap
      evil-winrm
      evtest
      evtest-qt
      exe2hex
      exfatprogs
      f2fs-tools
      faac
      faad2
      fastfetch
      fcrackzip
      fd
      fdk_aac
      ffmpeg-full
      ffmpegthumbnailer
      ffuf
      fh
      fierce
      file
      flutter
      foremost
      fping
      fritzing
      fwupd-efi
      gcc
      gdb
      gdk-pixbuf
      gh
      ghidra
      gimp-with-plugins
      git-doc
      glib
      glibc
      gnome-font-viewer
      gnugrep
      gnulib
      gnumake
      gnused
      gnutar
      gnutls
      gobuster
      gophish
      gource
      gparted
      gpredict
      grim
      gsm
      gtk-vnc
      guestfs-tools
      guymager
      gzip
      hardinfo2
      hash-identifier
      hashcat
      hashdeep
      hashid
      hdparm
      hfsprogs
      hw-probe
      hwloc
      hydra-check
      hyprcursor
      hyprls
      hyprpicker
      hyprpolkitagent
      i2c-tools
      iaito
      ideviceinstaller
      idevicerestore
      iftop
      image-roll
      inkscape
      inotify-tools
      jellyfin-media-player
      jfsutils
      jq
      jxrlib
      keepassxc
      kernelshark
      kind
      kismet
      kubectl
      kubectl-graph
      kubectl-tree
      kubectl-view-allocations
      kubectl-view-secret
      kubernetes
      laudanum
      lbd
      lha
      lhasa
      libGL
      libGLU
      libaom
      libappimage
      libde265
      libdvdcss
      libdvdnav
      libdvdread
      libepoxy
      libfprint
      libfprint-tod
      libfreeaptx
      libftdi1
      libgcc
      libgpg-error
      libguestfs
      libheif
      libideviceactivation
      libilbc
      libimobiledevice
      liblc3
      libnotify
      libogg
      libopenraw
      libopus
      libosinfo
      libportal
      libqalculate
      libreoffice-fresh
      libusb1
      libuuid
      libva-utils
      libvirt
      libvncserver
      libvpx
      libwebp
      libxfs
      libzip
      ligolo-ng
      linuxConsoleTools
      lrzip
      lshw
      lsof
      lsscsi
      lua-language-server
      lvm2
      lynis
      lz4
      lzham
      lzip
      lzlib
      lzop
      macchanger
      magicrescue
      maltego
      masscan
      massdns
      mattermost-desktop
      meld
      mesa-demos
      metasploit
      mimikatz
      minicom
      miredo
      mixxx
      monkeysAudio
      motrix
      mozlz4a
      msfpc
      mtools
      nautilus
      nautilus-open-any-terminal
      nbtscan
      neovim-remote
      netcat-gnu
      netdiscover
      netmask
      netsniff-ng
      networkmanagerapplet
      nikto
      nilfs-utils
      ninja
      nix-bash-completions
      nix-diff
      nix-index
      nix-info
      nixos-icons
      nixpkgs-fmt
      nixpkgs-lint
      nixpkgs-review
      nmap
      ntfs3g
      nuclei
      obs-studio
      onedrive
      onesixtyone
      onionshare-gui
      opencore-amr
      openh264
      openjpeg
      openssl
      ophcrack
      ophcrack-cli
      p7zip
      papirus-folders
      parsero
      patchelf
      pavucontrol
      pciutils
      pcre
      pdf-parser
      pdfid
      pgadmin4-desktopmode
      php84
      pixiewps
      pjsip
      pkg-config
      platformio
      platformio-core
      playerctl
      podman-compose
      podman-desktop
      postman
      powersploit
      proxychains
      ptunnel
      pwnat
      python313Full
      qalculate-gtk
      qbittorrent
      qemu-utils
      qpwgraph
      radare2
      rar
      readline
      reaverwps-t6x
      reiserfsprogs
      remmina
      responder
      ripgrep
      rpPPPoE
      rpmextract
      rsmangler
      rtl-sdr-librtlsdr
      rzip
      samdump2
      sane-backends
      sbc
      scalpel
      schroedinger
      scrcpy
      screen
      sdrangel
      sdrpp
      serial-studio
      shared-mime-info
      sherlock
      sipvicious
      sleuthkit
      slurp
      smartmontools
      smbmap
      snmpcheck
      snort
      social-engineer-toolkit
      spice
      spice-gtk
      spice-protocol
      spooftooph
      sqlmap
      ssldump
      sslh
      sslscan
      sslsplit
      steghide
      subfinder
      sushi
      swaks
      tcpdump
      tcpreplay
      telegram-desktop
      texliveFull
      thc-hydra
      thermald
      tor-browser
      tree
      tree-sitter
      trufflehog
      udftools
      udiskie
      udptunnel
      unar
      undollar
      ungoogled-chromium
      unicode-emoji
      universal-android-debloater
      unix-privesc-check
      unrar
      unzip
      usbutils
      util-linux
      virt-viewer
      virtio-win
      virtiofsd
      vlc
      vlc-bittorrent
      vscode-js-debug
      vulkan-tools
      wafw00f
      wavpack
      waybar-mpris
      waycheck
      wayland
      wayland-protocols
      wayland-utils
      waylevel
      weevely
      wev
      wfuzz
      wget
      whatsie
      whatweb
      which
      whois
      win-spice
      wireshark
      wl-clipboard
      woff2
      wordlists
      wordpress
      wpscan
      x264
      x265
      xarchiver
      xdg-user-dirs
      xdg-utils
      xfsdump
      xfsprogs
      xfstests
      xorg.xhost
      xoscope
      xvidcore
      xz
      yaml-language-server
      yara
      yersinia
      yt-dlp
      ytdownloader
      zip
      zlib
      zpaq
      zstd
      (sddm-astronaut.override {
        embeddedTheme = "astronaut";

        themeConfig = {
          # ScreenWidth = 1920;
          # ScreenHeight = 1080;
          ScreenPadding = 0;

          BackgroundColor = dracula_theme.hex.background;
          BackgroundHorizontalAlignment = "center";
          BackgroundVerticalAlignment = "center";
          Background = wallpaper;
          CropBackground = false;
          DimBackgroundImage = "0.0";

          FullBlur = false;
          PartialBlur = false;

          HaveFormBackground = false;
          FormPosition = "center";

          HideLoginButton = false;
          HideSystemButtons = false;
          HideVirtualKeyboard = false;
          VirtualKeyboardPosition = "center";

          # MainColor = ; # TODO
          # AccentColor = ; # TODO

          # HighlightBorderColor= ; # TODO
          # HighlightBackgroundColor= ; # TODO
          # HighlightTextColor= ; # TODO

          HeaderTextColor = dracula_theme.hex.foreground;
          TimeTextColor = dracula_theme.hex.foreground;
          DateTextColor = dracula_theme.hex.foreground;

          IconColor = dracula_theme.hex.foreground;
          PlaceholderTextColor = dracula_theme.hex.foreground;
          WarningColor = dracula_theme.hex.red;

          # LoginFieldBackgroundColor = ; # TODO
          # LoginFieldTextColor = ; # TODO
          # UserIconColor = ; # TODO
          # HoverUserIconColor = ; # TODO

          # PasswordFieldBackgroundColor = ; # TODO
          # PasswordFieldTextColor = ; # TODO
          # PasswordIconColor = ; # TODO
          # HoverPasswordIconColor = ; # TODO

          # LoginButtonBackgroundColor = ; # TODO
          LoginButtonTextColor = dracula_theme.hex.foreground;

          SystemButtonsIconsColor = dracula_theme.hex.foreground;
          # HoverSystemButtonsIconsColor = ; # TODO

          SessionButtonTextColor = dracula_theme.hex.foreground;
          # HoverSessionButtonTextColor = ; # TODO

          VirtualKeyboardButtonTextColor = dracula_theme.hex.foreground;
          # HoverVirtualKeyboardButtonTextColor = ; # TODO

          DropdownBackgroundColor = dracula_theme.hex.background;
          DropdownSelectedBackgroundColor = dracula_theme.hex.current_line;
          DropdownTextColor = dracula_theme.hex.foreground;

          HeaderText = "Welcome";

          HourFormat = "\"hh:mm A\"";
          DateFormat = "\"MMMM dd, yyyy\"";

          PasswordFocus = true;
          AllowEmptyPassword = false;
        };
      })
      (vscode-with-extensions.override {
        # vscode = vscodium;
        vscodeExtensions = with vscode-extensions; [
          aaron-bond.better-comments
          adpyke.codesnap
          albymor.increment-selection
          alefragnani.bookmarks
          bierner.github-markdown-preview
          bierner.markdown-mermaid
          christian-kohler.path-intellisense
          codezombiech.gitignore
          coolbear.systemd-unit-file
          dart-code.dart-code
          dart-code.flutter
          davidanson.vscode-markdownlint
          davidlday.languagetool-linter
          devsense.phptools-vscode
          devsense.profiler-php-vscode
          dracula-theme.theme-dracula
          ecmel.vscode-html-css
          esbenp.prettier-vscode
          firefox-devtools.vscode-firefox-debug
          formulahendry.auto-close-tag
          formulahendry.auto-rename-tag
          foxundermoon.shell-format
          github.copilot
          github.copilot-chat
          github.vscode-github-actions
          github.vscode-pull-request-github
          grapecity.gc-excelviewer
          gruntfuggly.todo-tree
          ibm.output-colorizer
          irongeek.vscode-env
          james-yu.latex-workshop
          jnoortheen.nix-ide
          jock.svg
          kamikillerto.vscode-colorize
          mads-hartmann.bash-ide-vscode
          mechatroner.rainbow-csv
          mishkinf.goto-next-previous-member
          moshfeu.compare-folders
          ms-azuretools.vscode-docker
          ms-python.black-formatter
          ms-python.debugpy
          ms-python.python
          ms-toolsai.datawrangler
          ms-vscode-remote.remote-containers
          ms-vscode-remote.remote-ssh
          ms-vscode-remote.remote-ssh-edit
          ms-vscode.cpptools
          ms-vscode.hexeditor
          ms-vscode.live-server
          ms-vscode.makefile-tools
          oderwat.indent-rainbow
          redhat.vscode-xml
          redhat.vscode-yaml
          ryu1kn.partial-diff
          shardulm94.trailing-spaces
          spywhere.guides
          tamasfe.even-better-toml
          timonwong.shellcheck
          tyriar.sort-lines
          vincaslt.highlight-matching-tag
          visualstudioexptteam.intellicode-api-usage-examples
          visualstudioexptteam.vscodeintellicode
          vscjava.vscode-gradle
          wmaurer.change-case
          xdebug.php-debug
          zainchen.json
        ]
        ++
        pkgs.vscode-utils.extensionsFromVscodeMarketplace [
          {
            name = "platformio-ide";
            publisher = "platformio";
            version = "3.3.4";
            sha256 = "qfNz4IYjCmCMFLtAkbGTW5xnsVT8iDnFWjrgkmr2Slk=";
          }
          {
            name = "vscode-serial-monitor";
            publisher = "ms-vscode";
            version = "0.13.250120001";
            sha256 = "sZ5ybbl1gxt41Eirp88JmS30WNHeM4SslhzBlLXyRsM=";
          }
          {
            name = "unique-lines";
            publisher = "bibhasdn";
            version = "1.0.0";
            sha256 = "W0ZpZ6+vjkfNfOtekx5NWOFTyxfWAiB0XYcIwHabFPQ=";
          }
          {
            name = "pubspec-assist";
            publisher = "jeroen-meijer";
            version = "2.3.2";
            sha256 = "+Mkcbeq7b+vkuf2/LYT10mj46sULixLNKGpCEk1Eu/0=";
          }
          {
            name = "vscode-sort-json";
            publisher = "richie5um2";
            version = "1.20.0";
            sha256 = "Jobx5Pf4SYQVR2I4207RSSP9I85qtVY6/2Nvs/Vvi/0=";
          }
          {
            name = "postman-for-vscode";
            publisher = "postman";
            version = "1.7.0";
            sha256 = "JZ5zaA2r7kc3KJg+dbimA/2mVaOILiEIwD/6w/36ebU=";
          }
          {
            name = "remote-repositories";
            publisher = "ms-vscode";
            version = "0.42.0";
            sha256 = "cYbkCcNsoTO6E5befw/ZN3yTW262APTCxyCJ/3z84dc=";
          }
          {
            name = "remotehub";
            publisher = "github";
            version = "0.64.0";
            sha256 = "Nh4PxYVdgdDb8iwHHUbXwJ5ZbMruFB6juL4Yg/wdKMY=";
          }
          {
            name = "errorlens";
            publisher = "usernamehw";
            version = "3.23.0";
            sha256 = "mz3JU4+/P6nM/SEJcVG5gq5K1Ym9L8N2pXbfw8a5DoA=";
          }
        ];
      })
    ]
    ++
    (with unixtools; [
      arp
      fdisk
      ifconfig
      netstat
      nettools
      ping
      route
      util-linux
      whereis
    ])
    ++
    (with fishPlugins; [
      async-prompt
      autopair
      done
      fish-you-should-use
    ])
    ++
    (with gst_all_1; [
      gst-libav
      gst-plugins-bad
      gst-plugins-base
      gst-plugins-good
      gst-plugins-ugly
      gst-vaapi
      gstreamer
    ])
    ++
    (with php84Extensions; [
      bz2
      calendar
      ctype
      curl
      dba
      dom
      exif
      ffi
      fileinfo
      filter
      ftp
      gd
      iconv
      imagick
      imap
      mailparse
      memcached
      mysqli
      mysqlnd
      opcache
      openssl
      pcntl
      pdo
      pdo_mysql
      pdo_pgsql
      pgsql
      posix
      readline
      session
      sockets
      sodium
      xdebug
      xml
      xmlreader
      xmlwriter
      xsl
      zip
      zlib
    ])
    ++
    (with php84Packages; [

    ])
    ++
    (with python313Packages; [
      bangla
      black
      datetime
      matplotlib
      numpy
      pandas
      pillow
      pip
      pyserial
      requests
      seaborn
      tkinter
    ])
    ++
    (with texlivePackages; [
      bangla
      latexmk
      quran
      quran-bn
      quran-en
    ])
    ++
    (with lua51Packages; [
      # Old Version Pinned for Neovim
      lua
      luarocks
    ])
    ++
    (with tree-sitter-grammars; [
      tree-sitter-bash
      tree-sitter-c
      tree-sitter-cmake
      tree-sitter-comment
      tree-sitter-cpp
      tree-sitter-css
      tree-sitter-dart
      tree-sitter-devicetree
      tree-sitter-dockerfile
      tree-sitter-fish
      tree-sitter-html
      tree-sitter-http
      tree-sitter-hyprlang
      tree-sitter-javascript
      tree-sitter-jsdoc
      tree-sitter-json
      tree-sitter-json5
      tree-sitter-latex
      tree-sitter-lua
      tree-sitter-make
      tree-sitter-markdown
      tree-sitter-markdown-inline
      tree-sitter-nix
      tree-sitter-org-nvim
      tree-sitter-php
      tree-sitter-python
      tree-sitter-query
      tree-sitter-regex
      tree-sitter-scheme
      tree-sitter-sql
      tree-sitter-toml
      tree-sitter-vim
      tree-sitter-yaml
    ])
    ++
    (with ghidra-extensions; [
      findcrypt
      ghidra-delinker-extension
      ghidra-golanganalyzerextension
      ghidraninja-ghidra-scripts
      gnudisassembler
      lightkeeper
      machinelearning
      ret-sync
      sleighdevtools
      wasm
    ])
    ++
    (with inkscape-extensions; [
      applytransforms
      textext
    ])
    ++
    (with obs-studio-plugins; [
      # droidcam-obs
      # obs-color-monitor
      # obs-replay-source
      input-overlay
      obs-3d-effect
      obs-backgroundremoval
      obs-composite-blur
      obs-freeze-filter
      obs-gradient-source
      obs-gstreamer
      obs-move-transition
      obs-multi-rtmp
      obs-mute-filter
      obs-pipewire-audio-capture
      obs-rgb-levels-filter
      obs-scale-to-sound
      obs-shaderfilter
      obs-source-clone
      obs-source-record
      obs-source-switcher
      obs-text-pthread
      obs-transition-table
      obs-tuna
      obs-vaapi
      obs-vertical-canvas
      obs-vintage-filter
      obs-vkcapture
      waveform
    ]);
  };

  xdg = {
    mime = {
      enable = true;

      addedAssociations = config.xdg.mime.defaultApplications;

      removedAssociations = { };

      # https://www.iana.org/assignments/media-types/media-types.xhtml # Excluding "application/x-*" and "x-scheme-handler/*"
      defaultApplications = {
        "inode/directory" = "nautilus.desktop";

        "text/1d-interleaved-parityfec" = "code.desktop";
        "text/RED" = "code.desktop";
        "text/SGML" = "code.desktop";
        "text/cache-manifest" = "code.desktop";
        "text/calendar" = "code.desktop";
        "text/cql" = "code.desktop";
        "text/cql-expression" = "code.desktop";
        "text/cql-identifier" = "code.desktop";
        "text/css" = "code.desktop";
        "text/csv" = "code.desktop";
        "text/csv-schema" = "code.desktop";
        "text/directory" = "code.desktop";
        "text/dns" = "code.desktop";
        "text/ecmascript" = "code.desktop";
        "text/encaprtp" = "code.desktop";
        "text/enriched" = "code.desktop";
        "text/fhirpath" = "code.desktop";
        "text/flexfec" = "code.desktop";
        "text/fwdred" = "code.desktop";
        "text/gff3" = "code.desktop";
        "text/grammar-ref-list" = "code.desktop";
        "text/hl7v2" = "code.desktop";
        "text/html" = "code.desktop";
        "text/javascript" = "code.desktop";
        "text/jcr-cnd" = "code.desktop";
        "text/markdown" = "code.desktop";
        "text/mizar" = "code.desktop";
        "text/n3" = "code.desktop";
        "text/parameters" = "code.desktop";
        "text/parityfec" = "code.desktop";
        "text/plain" = "code.desktop";
        "text/provenance-notation" = "code.desktop";
        "text/prs.fallenstein.rst" = "code.desktop";
        "text/prs.lines.tag" = "code.desktop";
        "text/prs.prop.logic" = "code.desktop";
        "text/prs.texi" = "code.desktop";
        "text/raptorfec" = "code.desktop";
        "text/rfc822-headers" = "code.desktop";
        "text/richtext" = "code.desktop";
        "text/rtf" = "code.desktop";
        "text/rtp-enc-aescm128" = "code.desktop";
        "text/rtploopback" = "code.desktop";
        "text/rtx" = "code.desktop";
        "text/shaclc" = "code.desktop";
        "text/shex" = "code.desktop";
        "text/spdx" = "code.desktop";
        "text/strings" = "code.desktop";
        "text/t140" = "code.desktop";
        "text/tab-separated-values" = "code.desktop";
        "text/troff" = "code.desktop";
        "text/turtle" = "code.desktop";
        "text/ulpfec" = "code.desktop";
        "text/uri-list" = "code.desktop";
        "text/vcard" = "code.desktop";
        "text/vnd.DMClientScript" = "code.desktop";
        "text/vnd.IPTC.NITF" = "code.desktop";
        "text/vnd.IPTC.NewsML" = "code.desktop";
        "text/vnd.a" = "code.desktop";
        "text/vnd.abc" = "code.desktop";
        "text/vnd.ascii-art" = "code.desktop";
        "text/vnd.curl" = "code.desktop";
        "text/vnd.debian.copyright" = "code.desktop";
        "text/vnd.dvb.subtitle" = "code.desktop";
        "text/vnd.esmertec.theme-descriptor" = "code.desktop";
        "text/vnd.exchangeable" = "code.desktop";
        "text/vnd.familysearch.gedcom" = "code.desktop";
        "text/vnd.ficlab.flt" = "code.desktop";
        "text/vnd.fly" = "code.desktop";
        "text/vnd.fmi.flexstor" = "code.desktop";
        "text/vnd.gml" = "code.desktop";
        "text/vnd.graphviz" = "code.desktop";
        "text/vnd.hans" = "code.desktop";
        "text/vnd.hgl" = "code.desktop";
        "text/vnd.in3d.3dml" = "code.desktop";
        "text/vnd.in3d.spot" = "code.desktop";
        "text/vnd.latex-z" = "code.desktop";
        "text/vnd.motorola.reflex" = "code.desktop";
        "text/vnd.ms-mediapackage" = "code.desktop";
        "text/vnd.net2phone.commcenter.command" = "code.desktop";
        "text/vnd.radisys.msml-basic-layout" = "code.desktop";
        "text/vnd.senx.warpscript" = "code.desktop";
        "text/vnd.si.uricatalogue" = "code.desktop";
        "text/vnd.sosi" = "code.desktop";
        "text/vnd.sun.j2me.app-descriptor" = "code.desktop";
        "text/vnd.trolltech.linguist" = "code.desktop";
        "text/vnd.vcf" = "code.desktop";
        "text/vnd.wap.si" = "code.desktop";
        "text/vnd.wap.sl" = "code.desktop";
        "text/vnd.wap.wml" = "code.desktop";
        "text/vnd.wap.wmlscript" = "code.desktop";
        "text/vnd.zoo.kcl" = "code.desktop";
        "text/vtt" = "code.desktop";
        "text/wgsl" = "code.desktop";
        "text/xml" = "code.desktop";
        "text/xml-external-parsed-entity" = "code.desktop";

        "image/aces" = "com.github.weclaw1.ImageRoll.desktop";
        "image/apng" = "com.github.weclaw1.ImageRoll.desktop";
        "image/avci" = "com.github.weclaw1.ImageRoll.desktop";
        "image/avcs" = "com.github.weclaw1.ImageRoll.desktop";
        "image/avif" = "com.github.weclaw1.ImageRoll.desktop";
        "image/bmp" = "com.github.weclaw1.ImageRoll.desktop";
        "image/cgm" = "com.github.weclaw1.ImageRoll.desktop";
        "image/dicom-rle" = "com.github.weclaw1.ImageRoll.desktop";
        "image/dpx" = "com.github.weclaw1.ImageRoll.desktop";
        "image/emf" = "com.github.weclaw1.ImageRoll.desktop";
        "image/fits" = "com.github.weclaw1.ImageRoll.desktop";
        "image/g3fax" = "com.github.weclaw1.ImageRoll.desktop";
        "image/gif" = "com.github.weclaw1.ImageRoll.desktop";
        "image/heic" = "com.github.weclaw1.ImageRoll.desktop";
        "image/heic-sequence" = "com.github.weclaw1.ImageRoll.desktop";
        "image/heif" = "com.github.weclaw1.ImageRoll.desktop";
        "image/heif-sequence" = "com.github.weclaw1.ImageRoll.desktop";
        "image/hej2k" = "com.github.weclaw1.ImageRoll.desktop";
        "image/hsj2" = "com.github.weclaw1.ImageRoll.desktop";
        "image/ief" = "com.github.weclaw1.ImageRoll.desktop";
        "image/j2c" = "com.github.weclaw1.ImageRoll.desktop";
        "image/jaii" = "com.github.weclaw1.ImageRoll.desktop";
        "image/jais" = "com.github.weclaw1.ImageRoll.desktop";
        "image/jls" = "com.github.weclaw1.ImageRoll.desktop";
        "image/jp2" = "com.github.weclaw1.ImageRoll.desktop";
        "image/jpeg" = "com.github.weclaw1.ImageRoll.desktop";
        "image/jph" = "com.github.weclaw1.ImageRoll.desktop";
        "image/jphc" = "com.github.weclaw1.ImageRoll.desktop";
        "image/jpm" = "com.github.weclaw1.ImageRoll.desktop";
        "image/jpx" = "com.github.weclaw1.ImageRoll.desktop";
        "image/jxl" = "com.github.weclaw1.ImageRoll.desktop";
        "image/jxr" = "com.github.weclaw1.ImageRoll.desktop";
        "image/jxrA" = "com.github.weclaw1.ImageRoll.desktop";
        "image/jxrS" = "com.github.weclaw1.ImageRoll.desktop";
        "image/jxs" = "com.github.weclaw1.ImageRoll.desktop";
        "image/jxsc" = "com.github.weclaw1.ImageRoll.desktop";
        "image/jxsi" = "com.github.weclaw1.ImageRoll.desktop";
        "image/jxss" = "com.github.weclaw1.ImageRoll.desktop";
        "image/ktx" = "com.github.weclaw1.ImageRoll.desktop";
        "image/ktx2" = "com.github.weclaw1.ImageRoll.desktop";
        "image/naplps" = "com.github.weclaw1.ImageRoll.desktop";
        "image/png" = "com.github.weclaw1.ImageRoll.desktop";
        "image/prs.btif" = "com.github.weclaw1.ImageRoll.desktop";
        "image/prs.pti" = "com.github.weclaw1.ImageRoll.desktop";
        "image/pwg-raster" = "com.github.weclaw1.ImageRoll.desktop";
        "image/svg+xml" = "com.github.weclaw1.ImageRoll.desktop";
        "image/t38" = "com.github.weclaw1.ImageRoll.desktop";
        "image/tiff" = "com.github.weclaw1.ImageRoll.desktop";
        "image/tiff-fx" = "com.github.weclaw1.ImageRoll.desktop";
        "image/vnd.adobe.photoshop" = "com.github.weclaw1.ImageRoll.desktop";
        "image/vnd.airzip.accelerator.azv" = "com.github.weclaw1.ImageRoll.desktop";
        "image/vnd.cns.inf2" = "com.github.weclaw1.ImageRoll.desktop";
        "image/vnd.dece.graphic" = "com.github.weclaw1.ImageRoll.desktop";
        "image/vnd.djvu" = "com.github.weclaw1.ImageRoll.desktop";
        "image/vnd.dvb.subtitle" = "com.github.weclaw1.ImageRoll.desktop";
        "image/vnd.dwg" = "com.github.weclaw1.ImageRoll.desktop";
        "image/vnd.dxf" = "com.github.weclaw1.ImageRoll.desktop";
        "image/vnd.fastbidsheet" = "com.github.weclaw1.ImageRoll.desktop";
        "image/vnd.fpx" = "com.github.weclaw1.ImageRoll.desktop";
        "image/vnd.fst" = "com.github.weclaw1.ImageRoll.desktop";
        "image/vnd.fujixerox.edmics-mmr" = "com.github.weclaw1.ImageRoll.desktop";
        "image/vnd.fujixerox.edmics-rlc" = "com.github.weclaw1.ImageRoll.desktop";
        "image/vnd.globalgraphics.pgb" = "com.github.weclaw1.ImageRoll.desktop";
        "image/vnd.microsoft.icon" = "com.github.weclaw1.ImageRoll.desktop";
        "image/vnd.mix" = "com.github.weclaw1.ImageRoll.desktop";
        "image/vnd.mozilla.apng" = "com.github.weclaw1.ImageRoll.desktop";
        "image/vnd.ms-modi" = "com.github.weclaw1.ImageRoll.desktop";
        "image/vnd.net-fpx" = "com.github.weclaw1.ImageRoll.desktop";
        "image/vnd.pco.b16" = "com.github.weclaw1.ImageRoll.desktop";
        "image/vnd.radiance" = "com.github.weclaw1.ImageRoll.desktop";
        "image/vnd.sealed.png" = "com.github.weclaw1.ImageRoll.desktop";
        "image/vnd.sealedmedia.softseal.gif" = "com.github.weclaw1.ImageRoll.desktop";
        "image/vnd.sealedmedia.softseal.jpg" = "com.github.weclaw1.ImageRoll.desktop";
        "image/vnd.svf" = "com.github.weclaw1.ImageRoll.desktop";
        "image/vnd.tencent.tap" = "com.github.weclaw1.ImageRoll.desktop";
        "image/vnd.valve.source.texture" = "com.github.weclaw1.ImageRoll.desktop";
        "image/vnd.wap.wbmp" = "com.github.weclaw1.ImageRoll.desktop";
        "image/vnd.xiff" = "com.github.weclaw1.ImageRoll.desktop";
        "image/vnd.zbrush.pcx" = "com.github.weclaw1.ImageRoll.desktop";
        "image/webp" = "com.github.weclaw1.ImageRoll.desktop";
        "image/wmf" = "com.github.weclaw1.ImageRoll.desktop";
        "image/x-emf" = "com.github.weclaw1.ImageRoll.desktop";
        "image/x-wmf" = "com.github.weclaw1.ImageRoll.desktop";

        "audio/1d-interleaved-parityfec" = "vlc.desktop";
        "audio/32kadpcm" = "vlc.desktop";
        "audio/3gpp" = "vlc.desktop";
        "audio/3gpp2" = "vlc.desktop";
        "audio/AMR" = "vlc.desktop";
        "audio/AMR-WB" = "vlc.desktop";
        "audio/ATRAC-ADVANCED-LOSSLESS" = "vlc.desktop";
        "audio/ATRAC-X" = "vlc.desktop";
        "audio/ATRAC3" = "vlc.desktop";
        "audio/BV16" = "vlc.desktop";
        "audio/BV32" = "vlc.desktop";
        "audio/CN" = "vlc.desktop";
        "audio/DAT12" = "vlc.desktop";
        "audio/DV" = "vlc.desktop";
        "audio/DVI4" = "vlc.desktop";
        "audio/EVRC" = "vlc.desktop";
        "audio/EVRC-QCP" = "vlc.desktop";
        "audio/EVRC0" = "vlc.desktop";
        "audio/EVRC1" = "vlc.desktop";
        "audio/EVRCB" = "vlc.desktop";
        "audio/EVRCB0" = "vlc.desktop";
        "audio/EVRCB1" = "vlc.desktop";
        "audio/EVRCNW" = "vlc.desktop";
        "audio/EVRCNW0" = "vlc.desktop";
        "audio/EVRCNW1" = "vlc.desktop";
        "audio/EVRCWB" = "vlc.desktop";
        "audio/EVRCWB0" = "vlc.desktop";
        "audio/EVRCWB1" = "vlc.desktop";
        "audio/EVS" = "vlc.desktop";
        "audio/G711-0" = "vlc.desktop";
        "audio/G719" = "vlc.desktop";
        "audio/G722" = "vlc.desktop";
        "audio/G7221" = "vlc.desktop";
        "audio/G723" = "vlc.desktop";
        "audio/G726-16" = "vlc.desktop";
        "audio/G726-24" = "vlc.desktop";
        "audio/G726-32" = "vlc.desktop";
        "audio/G726-40" = "vlc.desktop";
        "audio/G728" = "vlc.desktop";
        "audio/G729" = "vlc.desktop";
        "audio/G7291" = "vlc.desktop";
        "audio/G729D" = "vlc.desktop";
        "audio/G729E" = "vlc.desktop";
        "audio/GSM" = "vlc.desktop";
        "audio/GSM-EFR" = "vlc.desktop";
        "audio/GSM-HR-08" = "vlc.desktop";
        "audio/L16" = "vlc.desktop";
        "audio/L20" = "vlc.desktop";
        "audio/L24" = "vlc.desktop";
        "audio/L8" = "vlc.desktop";
        "audio/LPC" = "vlc.desktop";
        "audio/MELP" = "vlc.desktop";
        "audio/MELP1200" = "vlc.desktop";
        "audio/MELP2400" = "vlc.desktop";
        "audio/MELP600" = "vlc.desktop";
        "audio/MP4A-LATM" = "vlc.desktop";
        "audio/MPA" = "vlc.desktop";
        "audio/PCMA" = "vlc.desktop";
        "audio/PCMA-WB" = "vlc.desktop";
        "audio/PCMU" = "vlc.desktop";
        "audio/PCMU-WB" = "vlc.desktop";
        "audio/QCELP" = "vlc.desktop";
        "audio/RED" = "vlc.desktop";
        "audio/SMV" = "vlc.desktop";
        "audio/SMV-QCP" = "vlc.desktop";
        "audio/SMV0" = "vlc.desktop";
        "audio/TETRA_ACELP" = "vlc.desktop";
        "audio/TETRA_ACELP_BB" = "vlc.desktop";
        "audio/TSVCIS" = "vlc.desktop";
        "audio/UEMCLIP" = "vlc.desktop";
        "audio/VDVI" = "vlc.desktop";
        "audio/VMR-WB" = "vlc.desktop";
        "audio/aac" = "vlc.desktop";
        "audio/ac3" = "vlc.desktop";
        "audio/amr-wb+" = "vlc.desktop";
        "audio/aptx" = "vlc.desktop";
        "audio/asc" = "vlc.desktop";
        "audio/basic" = "vlc.desktop";
        "audio/clearmode" = "vlc.desktop";
        "audio/dls" = "vlc.desktop";
        "audio/dsr-es201108" = "vlc.desktop";
        "audio/dsr-es202050" = "vlc.desktop";
        "audio/dsr-es202211" = "vlc.desktop";
        "audio/dsr-es202212" = "vlc.desktop";
        "audio/eac3" = "vlc.desktop";
        "audio/encaprtp" = "vlc.desktop";
        "audio/flac" = "vlc.desktop";
        "audio/flexfec" = "vlc.desktop";
        "audio/fwdred" = "vlc.desktop";
        "audio/iLBC" = "vlc.desktop";
        "audio/ip-mr_v2.5" = "vlc.desktop";
        "audio/matroska" = "vlc.desktop";
        "audio/mhas" = "vlc.desktop";
        "audio/midi-clip" = "vlc.desktop";
        "audio/mobile-xmf" = "vlc.desktop";
        "audio/mp4" = "vlc.desktop";
        "audio/mpa-robust" = "vlc.desktop";
        "audio/mpeg" = "vlc.desktop";
        "audio/mpeg4-generic" = "vlc.desktop";
        "audio/ogg" = "vlc.desktop";
        "audio/opus" = "vlc.desktop";
        "audio/parityfec" = "vlc.desktop";
        "audio/prs.sid" = "vlc.desktop";
        "audio/raptorfec" = "vlc.desktop";
        "audio/rtp-enc-aescm128" = "vlc.desktop";
        "audio/rtp-midi" = "vlc.desktop";
        "audio/rtploopback" = "vlc.desktop";
        "audio/rtx" = "vlc.desktop";
        "audio/scip" = "vlc.desktop";
        "audio/sofa" = "vlc.desktop";
        "audio/sp-midi" = "vlc.desktop";
        "audio/speex" = "vlc.desktop";
        "audio/t140c" = "vlc.desktop";
        "audio/t38" = "vlc.desktop";
        "audio/telephone-event" = "vlc.desktop";
        "audio/tone" = "vlc.desktop";
        "audio/ulpfec" = "vlc.desktop";
        "audio/usac" = "vlc.desktop";
        "audio/vnd.3gpp.iufp" = "vlc.desktop";
        "audio/vnd.4SB" = "vlc.desktop";
        "audio/vnd.CELP" = "vlc.desktop";
        "audio/vnd.audiokoz" = "vlc.desktop";
        "audio/vnd.cisco.nse" = "vlc.desktop";
        "audio/vnd.cmles.radio-events" = "vlc.desktop";
        "audio/vnd.cns.anp1" = "vlc.desktop";
        "audio/vnd.cns.inf1" = "vlc.desktop";
        "audio/vnd.dece.audio" = "vlc.desktop";
        "audio/vnd.digital-winds" = "vlc.desktop";
        "audio/vnd.dlna.adts" = "vlc.desktop";
        "audio/vnd.dolby.heaac.1" = "vlc.desktop";
        "audio/vnd.dolby.heaac.2" = "vlc.desktop";
        "audio/vnd.dolby.mlp" = "vlc.desktop";
        "audio/vnd.dolby.mps" = "vlc.desktop";
        "audio/vnd.dolby.pl2" = "vlc.desktop";
        "audio/vnd.dolby.pl2x" = "vlc.desktop";
        "audio/vnd.dolby.pl2z" = "vlc.desktop";
        "audio/vnd.dolby.pulse.1" = "vlc.desktop";
        "audio/vnd.dra" = "vlc.desktop";
        "audio/vnd.dts" = "vlc.desktop";
        "audio/vnd.dts.hd" = "vlc.desktop";
        "audio/vnd.dts.uhd" = "vlc.desktop";
        "audio/vnd.dvb.file" = "vlc.desktop";
        "audio/vnd.everad.plj" = "vlc.desktop";
        "audio/vnd.hns.audio" = "vlc.desktop";
        "audio/vnd.lucent.voice" = "vlc.desktop";
        "audio/vnd.ms-playready.media.pya" = "vlc.desktop";
        "audio/vnd.nokia.mobile-xmf" = "vlc.desktop";
        "audio/vnd.nortel.vbk" = "vlc.desktop";
        "audio/vnd.nuera.ecelp4800" = "vlc.desktop";
        "audio/vnd.nuera.ecelp7470" = "vlc.desktop";
        "audio/vnd.nuera.ecelp9600" = "vlc.desktop";
        "audio/vnd.octel.sbc" = "vlc.desktop";
        "audio/vnd.presonus.multitrack" = "vlc.desktop";
        "audio/vnd.qcelp" = "vlc.desktop";
        "audio/vnd.rhetorex.32kadpcm" = "vlc.desktop";
        "audio/vnd.rip" = "vlc.desktop";
        "audio/vnd.sealedmedia.softseal.mpeg" = "vlc.desktop";
        "audio/vnd.vmx.cvsd" = "vlc.desktop";
        "audio/vorbis" = "vlc.desktop";
        "audio/vorbis-config" = "vlc.desktop";

        "video/1d-interleaved-parityfec" = "vlc.desktop";
        "video/3gpp" = "vlc.desktop";
        "video/3gpp-tt" = "vlc.desktop";
        "video/3gpp2" = "vlc.desktop";
        "video/AV1" = "vlc.desktop";
        "video/BMPEG" = "vlc.desktop";
        "video/BT656" = "vlc.desktop";
        "video/CelB" = "vlc.desktop";
        "video/DV" = "vlc.desktop";
        "video/FFV1" = "vlc.desktop";
        "video/H261" = "vlc.desktop";
        "video/H263" = "vlc.desktop";
        "video/H263-1998" = "vlc.desktop";
        "video/H263-2000" = "vlc.desktop";
        "video/H264" = "vlc.desktop";
        "video/H264-RCDO" = "vlc.desktop";
        "video/H264-SVC" = "vlc.desktop";
        "video/H265" = "vlc.desktop";
        "video/H266" = "vlc.desktop";
        "video/JPEG" = "vlc.desktop";
        "video/MP1S" = "vlc.desktop";
        "video/MP2P" = "vlc.desktop";
        "video/MP2T" = "vlc.desktop";
        "video/MP4V-ES" = "vlc.desktop";
        "video/MPV" = "vlc.desktop";
        "video/SMPTE292M" = "vlc.desktop";
        "video/VP8" = "vlc.desktop";
        "video/VP9" = "vlc.desktop";
        "video/encaprtp" = "vlc.desktop";
        "video/evc" = "vlc.desktop";
        "video/flexfec" = "vlc.desktop";
        "video/iso.segment" = "vlc.desktop";
        "video/jpeg2000" = "vlc.desktop";
        "video/jxsv" = "vlc.desktop";
        "video/matroska" = "vlc.desktop";
        "video/matroska-3d" = "vlc.desktop";
        "video/mj2" = "vlc.desktop";
        "video/mp4" = "vlc.desktop";
        "video/mpeg" = "vlc.desktop";
        "video/mpeg4-generic" = "vlc.desktop";
        "video/nv" = "vlc.desktop";
        "video/ogg" = "vlc.desktop";
        "video/parityfec" = "vlc.desktop";
        "video/pointer" = "vlc.desktop";
        "video/quicktime" = "vlc.desktop";
        "video/raptorfec" = "vlc.desktop";
        "video/raw" = "vlc.desktop";
        "video/rtp-enc-aescm128" = "vlc.desktop";
        "video/rtploopback" = "vlc.desktop";
        "video/rtx" = "vlc.desktop";
        "video/scip" = "vlc.desktop";
        "video/smpte291" = "vlc.desktop";
        "video/ulpfec" = "vlc.desktop";
        "video/vc1" = "vlc.desktop";
        "video/vc2" = "vlc.desktop";
        "video/vnd.CCTV" = "vlc.desktop";
        "video/vnd.dece.hd" = "vlc.desktop";
        "video/vnd.dece.mobile" = "vlc.desktop";
        "video/vnd.dece.mp4" = "vlc.desktop";
        "video/vnd.dece.pd" = "vlc.desktop";
        "video/vnd.dece.sd" = "vlc.desktop";
        "video/vnd.dece.video" = "vlc.desktop";
        "video/vnd.directv.mpeg" = "vlc.desktop";
        "video/vnd.directv.mpeg-tts" = "vlc.desktop";
        "video/vnd.dlna.mpeg-tts" = "vlc.desktop";
        "video/vnd.dvb.file" = "vlc.desktop";
        "video/vnd.fvt" = "vlc.desktop";
        "video/vnd.hns.video" = "vlc.desktop";
        "video/vnd.iptvforum.1dparityfec-1010" = "vlc.desktop";
        "video/vnd.iptvforum.1dparityfec-2005" = "vlc.desktop";
        "video/vnd.iptvforum.2dparityfec-1010" = "vlc.desktop";
        "video/vnd.iptvforum.2dparityfec-2005" = "vlc.desktop";
        "video/vnd.iptvforum.ttsavc" = "vlc.desktop";
        "video/vnd.iptvforum.ttsmpeg2" = "vlc.desktop";
        "video/vnd.motorola.video" = "vlc.desktop";
        "video/vnd.motorola.videop" = "vlc.desktop";
        "video/vnd.mpegurl" = "vlc.desktop";
        "video/vnd.ms-playready.media.pyv" = "vlc.desktop";
        "video/vnd.nokia.interleaved-multimedia" = "vlc.desktop";
        "video/vnd.nokia.mp4vr" = "vlc.desktop";
        "video/vnd.nokia.videovoip" = "vlc.desktop";
        "video/vnd.objectvideo" = "vlc.desktop";
        "video/vnd.radgamettools.bink" = "vlc.desktop";
        "video/vnd.radgamettools.smacker" = "vlc.desktop";
        "video/vnd.sealed.mpeg1" = "vlc.desktop";
        "video/vnd.sealed.mpeg4" = "vlc.desktop";
        "video/vnd.sealed.swf" = "vlc.desktop";
        "video/vnd.sealedmedia.softseal.mov" = "vlc.desktop";
        "video/vnd.uvvu.mp4" = "vlc.desktop";
        "video/vnd.vivo" = "vlc.desktop";
        "video/vnd.youtube.yt" = "vlc.desktop";

        "application/vnd.oasis.opendocument.text" = "writer.desktop"; # .odt
        "application/msword" = "writer.desktop"; # .doc
        "application/vnd.openxmlformats-officedocument.wordprocessingml.document" = "writer.desktop"; # .docx
        "application/vnd.openxmlformats-officedocument.wordprocessingml.template" = "writer.desktop"; # .dotx

        "application/vnd.oasis.opendocument.spreadsheet" = "calc.desktop"; # .ods
        "application/vnd.ms-excel" = "calc.desktop"; # .xls
        "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" = "calc.desktop"; # .xlsx
        "application/vnd.openxmlformats-officedocument.spreadsheetml.template" = "calc.desktop"; # .xltx

        "application/vnd.oasis.opendocument.presentation" = "impress.desktop"; # .odp
        "application/vnd.ms-powerpoint" = "impress.desktop"; # .ppt
        "application/vnd.openxmlformats-officedocument.presentationml.presentation" = "impress.desktop"; # .pptx
        "application/vnd.openxmlformats-officedocument.presentationml.template" = "impress.desktop"; # .potx

        "application/pdf" = "firefox-devedition.desktop";

        "font/collection" = "org.gnome.font-viewer.desktop";
        "font/otf" = "org.gnome.font-viewer.desktop";
        "font/sfnt" = "org.gnome.font-viewer.desktop";
        "font/ttf" = "org.gnome.font-viewer.desktop";
        "font/woff" = "org.gnome.font-viewer.desktop";
        "font/woff2" = "org.gnome.font-viewer.desktop";

        "application/gzip" = "xarchiver.desktop";
        "application/vnd.rar" = "xarchiver.desktop";
        "application/x-7z-compressed" = "xarchiver.desktop";
        "application/x-arj" = "xarchiver.desktop";
        "application/x-bzip2" = "xarchiver.desktop";
        "application/x-gtar" = "xarchiver.desktop";
        "application/x-rar-compressed " = "xarchiver.desktop"; # More common than "application/vnd.rar"
        "application/x-tar" = "xarchiver.desktop";
        "application/zip" = "xarchiver.desktop";

        "x-scheme-handler/http" = "firefox-devedition.desktop";
        "x-scheme-handler/https" = "firefox-devedition.desktop";

        "x-scheme-handler/mailto" = "thunderbird.desktop";
      };
    };

    icons.enable = true;
    sounds.enable = true;

    menus.enable = true;
    autostart.enable = true;

    terminal-exec.enable = true;

    portal = {
      enable = true;
      extraPortals = with pkgs; [
        xdg-desktop-portal-hyprland
      ];

      xdgOpenUsePortal = false; # Opening Programs
    };
  };

  qt = {
    enable = true;

    platformTheme = "gtk2";
    style = "gtk2";
  };

  documentation = {
    enable = true;
    dev.enable = true;
    doc.enable = true;
    info.enable = true;

    man = {
      enable = true;
      generateCaches = true;
      man-db.enable = true;
    };

    nixos = {
      enable = true;
      includeAllModules = true;
      options.warningsAreErrors = false;
    };
  };

  users = {
    groups = {
      hardinfo2 = { }; # Creation
    };

    enforceIdUniqueness = true;
    mutableUsers = true;

    defaultUserShell = pkgs.fish;

    motd = "Welcome";

    users.bitscoper = {
      isNormalUser = true;

      name = "bitscoper";
      description = "Abdullah As-Sadeed"; # Full Name

      extraGroups = [
        "adbusers"
        "audio"
        "dialout"
        "input"
        "jellyfin"
        "kvm"
        "libvirtd"
        "lp"
        "networkmanager"
        "plugdev"
        "podman"
        "qemu-libvirtd"
        "scanner"
        "tty"
        "uucp"
        "video"
        "wheel"
        "wireshark"
      ];

      useDefaultShell = true;
    };
  };

  home-manager = {
    useGlobalPkgs = true;
    useUserPackages = true;

    backupFileExtension = "old";

    sharedModules = [
      {
        home = {
          pointerCursor = {
            name = cursor.theme.name;
            package = cursor.theme.package;
            size = cursor.size;

            hyprcursor = {
              enable = true;
              size = cursor.size;
            };

            gtk.enable = true;
          };

          stateVersion = "24.11";
        };

        wayland.windowManager.hyprland = {
          enable = true;

          systemd = {
            enable = false;
            enableXdgAutostart = true;

            # extraCommands = [

            # ];

            variables = [
              "--all"
            ];
          };

          plugins = [

          ];

          xwayland.enable = true;

          sourceFirst = true;

          settings = {
            monitor = [
              ", highres, auto, 1" # Name, Resolution, Position, Scale
            ];

            env = [
              "XCURSOR_SIZE, ${toString cursor.size}"
            ];

            exec-once = [
              "uwsm app -- ${pkgs.hyprpolkitagent}/libexec/hyprpolkitagent"

              "uwsm app -- udiskie --tray --appindicator --automount --notify --file-manager nautilus"

              "sleep 2 && uwsm app -- keepassxc"

              "uwsm app -- wl-paste --type text --watch cliphist store"
              "uwsm app -- wl-paste --type image --watch cliphist store"

              "setfacl --modify user:jellyfin:--x ~ & adb start-server &"

              "systemctl --user start warp-taskbar"
            ];

            bind = [
              "SUPER, L, exec, hyprlock --immediate"
              "SUPER CTRL, L, exec, uwsm stop"
              "SUPER CTRL, P, exec, systemctl poweroff"
              "SUPER CTRL, R, exec, systemctl reboot"

              "SUPER, 1, workspace, 1"
              "SUPER, 2, workspace, 2"
              "SUPER, 3, workspace, 3"
              "SUPER, 4, workspace, 4"
              "SUPER, 5, workspace, 5"
              "SUPER, 6, workspace, 6"
              "SUPER, 7, workspace, 7"
              "SUPER, 8, workspace, 8"
              "SUPER, 9, workspace, 9"
              "SUPER, 0, workspace, 10"
              "SUPER, mouse_down, workspace, e+1"
              "SUPER, mouse_up, workspace, e-1"
              "SUPER, S, togglespecialworkspace, magic"

              "SUPER, left, movefocus, l"
              "SUPER, right, movefocus, r"
              "SUPER, up, movefocus, u"
              "SUPER, down, movefocus, d"

              "SUPER SHIFT, T, togglesplit,"
              "SUPER SHIFT, F, togglefloating,"
              ", F11, fullscreen, 0"
              "SUPER, Q, killactive,"

              "SUPER SHIFT, 1, movetoworkspace, 1"
              "SUPER SHIFT, 2, movetoworkspace, 2"
              "SUPER SHIFT, 3, movetoworkspace, 3"
              "SUPER SHIFT, 4, movetoworkspace, 4"
              "SUPER SHIFT, 5, movetoworkspace, 5"
              "SUPER SHIFT, 6, movetoworkspace, 6"
              "SUPER SHIFT, 7, movetoworkspace, 7"
              "SUPER SHIFT, 8, movetoworkspace, 8"
              "SUPER SHIFT, 9, movetoworkspace, 9"
              "SUPER SHIFT, 0, movetoworkspace, 10"
              "SUPER SHIFT, S, movetoworkspace, special:magic"

              "SUPER SHIFT ALT, 1, movetoworkspacesilent, 1"
              "SUPER SHIFT ALT, 2, movetoworkspacesilent, 2"
              "SUPER SHIFT ALT, 3, movetoworkspacesilent, 3"
              "SUPER SHIFT ALT, 4, movetoworkspacesilent, 4"
              "SUPER SHIFT ALT, 5, movetoworkspacesilent, 5"
              "SUPER SHIFT ALT, 6, movetoworkspacesilent, 6"
              "SUPER SHIFT ALT, 7, movetoworkspacesilent, 7"
              "SUPER SHIFT ALT, 8, movetoworkspacesilent, 8"
              "SUPER SHIFT ALT, 9, movetoworkspacesilent, 9"
              "SUPER SHIFT ALT, 0, movetoworkspacesilent, 10"
              "SUPER SHIFT ALT, S, movetoworkspacesilent, special:magic"

              "SUPER SHIFT, V, exec, cliphist list | rofi -dmenu | cliphist decode | wl-copy"

              ", PRINT, exec, filename=\"$(xdg-user-dir DOWNLOAD)/Screenshot_$(date +'%Y-%B-%d_%I-%M-%S_%p').png\"; grim -g \"$(slurp -d)\" -t png -l 9 \"$filename\" && wl-copy < \"$filename\""

              "SUPER, A, exec, rofi -show drun -disable-history"
              "SUPER, R, exec, rofi -show run -disable-history"

              "SUPER, T, exec, kitty"
              "SUPER ALT, T, exec, kitty sh -c \"bash\""

              ", XF86Explorer, exec, nautilus"
              "SUPER, E, exec, nautilus"

              "SUPER, F, exec, kitty --hold sh -c \"fastfetch --thread true --detect-version true --logo-preserve-aspect-ratio true --temp-unit c --title-fqdn true --disk-show-regular true --disk-show-external true --disk-show-hidden true --disk-show-subvolumes true --disk-show-readonly true --disk-show-unknown true --physicaldisk-temp true --bluetooth-show-disconnected true --display-precise-refresh-rate true --cpu-temp true --cpu-show-pe-core-count true --cpuusage-separate true --gpu-temp true --gpu-driver-specific true --battery-temp true --localip-show-ipv4 true --localip-show-ipv6 true --localip-show-mac true --localip-show-loop true --localip-show-mtu true --localip-show-speed true --localip-show-prefix-len true --localip-show-all-ips true --localip-show-flags true --wm-detect-plugin true\""

              "SUPER, B, exec, kitty sh -c \"btop\""

              "SUPER, W, exec, firefox-devedition"
              "SUPER ALT, W, exec, firefox-devedition --private-window"

              ", XF86Mail, exec, thunderbird"
              "SUPER, M, exec, thunderbird"

              "SUPER, C, exec, code"
              "SUPER, D, exec, dbeaver"

              "SUPER, V, exec, vlc"
            ];

            bindm = [
              "SUPER, mouse:272, movewindow"
              "SUPER, mouse:273, resizewindow"
            ];

            bindl = [
              ", XF86AudioPlay, exec, playerctl play-pause"
              ", XF86AudioPause, exec, playerctl play-pause"
              ", XF86AudioStop, exec, playerctl stop"

              ", XF86AudioPrev, exec, playerctl previous"
              ", XF86AudioNext, exec, playerctl next"
            ];

            bindel = [
              ", XF86MonBrightnessUp, exec, brightnessctl s 1%+"
              ", XF86MonBrightnessDown, exec, brightnessctl s 1%-"

              ", XF86AudioRaiseVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 1%+"
              ", XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 1%-"
              ", XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"
              ", XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"
            ];

            general = {
              allow_tearing = false;

              gaps_workspaces = 0;

              layout = "dwindle";

              gaps_in = 2;
              gaps_out = 4;

              no_border_on_floating = false;

              border_size = 1;
              "col.active_border" = "rgba(33ccffee) rgba(00ff99ee) 45deg"; # TODO
              "col.inactive_border" = "rgba(595959aa)"; # TODO

              no_focus_fallback = false;

              resize_on_border = true;
              hover_icon_on_border = true;

              snap = {
                enabled = true;
                border_overlap = false;
              };
            };

            ecosystem = {
              no_update_news = false;
            };

            misc = {
              disable_autoreload = false;

              allow_session_lock_restore = true;

              key_press_enables_dpms = true;
              mouse_move_enables_dpms = true;

              vfr = true;
              vrr = 1;

              render_ahead_of_time = false;

              mouse_move_focuses_monitor = true;

              disable_hyprland_logo = false;
              force_default_wallpaper = 1;
              disable_splash_rendering = true;

              font_family = font_name.sans_serif;

              close_special_on_empty = true;

              animate_mouse_windowdragging = false;
              animate_manual_resizes = false;

              exit_window_retains_fullscreen = false;

              layers_hog_keyboard_focus = true;

              focus_on_activate = false;

              middle_click_paste = true;
            };

            dwindle = {
              pseudotile = false;

              use_active_for_splits = true;
              force_split = 0; # Follows Mouse
              smart_split = false;
              preserve_split = true;

              smart_resizing = true;
            };

            xwayland = {
              enabled = true;
              force_zero_scaling = true;
              use_nearest_neighbor = true;
            };

            windowrulev2 = [
              "suppressevent maximize, class:.*"
              "nofocus, class:^$, title:^$, xwayland:1, floating:1, fullscreen:0, pinned:0"
            ];

            input = {
              kb_layout = "us";

              numlock_by_default = true;

              follow_mouse = 1;
              focus_on_close = 1;

              left_handed = false;
              sensitivity = 1; # Mouse
              natural_scroll = false;

              touchpad = {
                natural_scroll = true;

                tap-to-click = true;
                tap-and-drag = true;
                drag_lock = true;

                disable_while_typing = true;
              };

              touchdevice = {
                enabled = true;
              };

              tablet = {
                left_handed = false;
              };
            };

            cursor = {
              no_hardware_cursors = false;

              enable_hyprcursor = true;
              sync_gsettings_theme = true;

              persistent_warps = true;

              no_warps = false;

              hide_on_key_press = false;
              hide_on_touch = true;
            };

            binds = {
              disable_keybind_grabbing = true;
              pass_mouse_when_bound = false;

              window_direction_monitor_fallback = true;
            };

            gestures = {
              # Touchpad
              workspace_swipe = true;
              workspace_swipe_invert = true;

              # Touchscreen
              workspace_swipe_touch = false;
              workspace_swipe_touch_invert = false;

              workspace_swipe_create_new = true;
              workspace_swipe_forever = true;
            };

            decoration = {
              dim_special = 0.25;

              rounding = 8;

              active_opacity = 1.0;
              fullscreen_opacity = 1.0;
              inactive_opacity = 1.0;

              dim_inactive = false;
              dim_strength = 0.0;

              blur.enabled = false;
              shadow .enabled = false;
            };

            animations = {
              enabled = true;
              first_launch_animation = true;

              bezier = [
                "easeOutQuint, 0.23, 1, 0.32, 1"
                "easeInOutCubic, 0.65, 0.05, 0.36, 1"
                "linear, 0, 0, 1, 1"
                "almostLinear, 0.5, 0.5, 0.75, 1.0"
                "quick, 0.15, 0, 0.1, 1"
              ];

              animation = [
                "global, 1, 10, default"
                "border, 1, 5.39, easeOutQuint"
                "windows, 1, 4.79, easeOutQuint"
                "windowsIn, 1, 4.1, easeOutQuint, popin 87%"
                "windowsOut, 1, 1.49, linear, popin 87%"
                "fadeIn, 1, 1.73, almostLinear"
                "fadeOut, 1, 1.46, almostLinear"
                "fade, 1, 3.03, quick"
                "layers, 1, 3.81, easeOutQuint"
                "layersIn, 1, 4, easeOutQuint, fade"
                "layersOut, 1, 1.5, linear, fade"
                "fadeLayersIn, 1, 1.79, almostLinear"
                "fadeLayersOut, 1, 1.39, almostLinear"
                "workspaces, 1, 1.94, almostLinear, fade"
                "workspacesIn, 1, 1.21, almostLinear, fade"
                "workspacesOut, 1, 1.94, almostLinear, fade"
              ];
              # Name, On/Off, Speed, Curve [, Style]
            };
          };

          extraConfig = '''';
        };

        xdg = {
          mime.enable = true;

          mimeApps = {
            enable = true;

            associations = {
              added = config.xdg.mime.addedAssociations;

              removed = config.xdg.mime.removedAssociations;
            };

            defaultApplications = config.xdg.mime.defaultApplications;
          };

          configFile = {
            "mimeapps.list".force = true;
          };
        };

        gtk = {
          enable = true;

          theme = {
            name = "Dracula";
            package = pkgs.dracula-theme;
          };

          iconTheme = {
            name = "Papirus-Dark";
            package = (pkgs.papirus-icon-theme.override {
              color = "black";
            });
          };

          cursorTheme = {
            name = cursor.theme.name;
            package = cursor.theme.package;
            size = cursor.size;
          };

          font = {
            name = font_name.sans_serif;
            package = pkgs.nerd-fonts.noto;
            size = 11;
          };
        };

        qt = {
          enable = true;

          platformTheme.name = "gtk2";

          style = {
            name = "gtk2";
            # package = pkgs. ;
          };
        };

        services = {
          mako = {
            enable = true;

            actions = true;

            anchor = "top-right";
            layer = "top";
            margin = "10";
            sort = "-time";
            maxVisible = 5; # -1 = Disabled
            ignoreTimeout = false;
            defaultTimeout = 0; # 0 = Disabled

            borderRadius = 8;
            borderSize = 1;
            borderColor = dracula_theme.hex.comment;
            backgroundColor = dracula_theme.hex.background;
            padding = "4";
            icons = true;
            maxIconSize = 16;
            markup = true;
            font = "${font_name.sans_serif} 11";
            textColor = dracula_theme.hex.foreground;
            format = "<b>%s</b>\\n%b";

            extraConfig = ''
              history=1

              on-notify=none
              on-button-left=dismiss
              on-button-right=exec makoctl menu rofi -dmenu -p 'Choose Action'
              on-button-middle=none
              on-touch=exec  makoctl menu rofi -dmenu -p 'Choose Action'

              [urgency=low]
              border-color=${dracula_theme.hex.current_line}

              [urgency=normal]
              border-color=${dracula_theme.hex.comment}

              [urgency=high]
              border-color=${dracula_theme.hex.red}
            '';
          };

          hyprpaper = {
            enable = true;

            settings = {
              ipc = "on";

              splash = false;

              preload =
                [
                  wallpaper
                ];

              wallpaper = [
                ", ${wallpaper}"
              ];
            };
          };
        };

        programs = {
          hyprlock = {
            enable = true;

            sourceFirst = true;

            settings = {
              general = {
                disable_loading_bar = true;
                immediate_render = true;
                fractional_scaling = 2; # 2 = Automatic

                no_fade_in = false;
                no_fade_out = false;

                hide_cursor = false;
                text_trim = false;

                grace = 0;
                ignore_empty_input = true;
              };

              auth = {
                pam = {
                  enabled = true;
                };
              };

              background = [
                {
                  monitor = "";
                  path = wallpaper;
                }
              ];

              label = [
                {
                  monitor = "";
                  halign = "center";
                  valign = "top";
                  position = "0, -128";

                  text_align = "center";
                  font_family = font_name.sans_serif;
                  color = dracula_theme.rgba.foreground;
                  font_size = 64;
                  text = "$TIME12";
                }

                {
                  monitor = "";
                  halign = "center";
                  valign = "center";
                  position = "0, 0";

                  text_align = "center";
                  font_family = font_name.sans_serif;
                  color = dracula_theme.rgba.foreground;
                  font_size = 16;
                  text = "$DESC"; # Full Name
                }
              ];

              input-field = [
                {
                  monitor = "";
                  halign = "center";
                  valign = "bottom";
                  position = "0, 128";

                  size = "256, 48";
                  rounding = 16;
                  outline_thickness = 1;
                  # outer_color = ""; # TODO
                  shadow_passes = 0;
                  hide_input = false;
                  inner_color = dracula_theme.rgba.current_line;
                  font_family = font_name.sans_serif;
                  font_color = dracula_theme.rgba.foreground;
                  placeholder_text = "Password";
                  dots_center = true;
                  dots_rounding = -1;

                  fade_on_empty = true;

                  invert_numlock = false;
                  # capslock_color = ""; # TODO
                  # numlock_color = ""; # TODO
                  # bothlock_color = ""; # TODO

                  # check_color = ""; # TODO
                  # fail_color = ""; # TODO
                  fail_text = "<i>$FAIL <b>($ATTEMPTS)</b></i>";
                  fail_timeout = 2000;
                }
              ];
            };

            extraConfig = '''';
          };

          rofi =
            let
              rofi_theme = pkgs.writeTextFile {
                name = "Rofi_Theme.rasi";
                text = ''
                  * {
                    margin: 0;
                    background-color: transparent;
                    padding: 0;
                    spacing: 0;
                    text-color: ${dracula_theme.hex.foreground};
                  }

                  window {
                    width: 768px;
                    border: 1px;
                    border-radius: 16px;
                    border-color: ${dracula_theme.hex.purple};
                    background-color: ${dracula_theme.hex.background};
                  }

                  mainbox {
                    padding: 16px;
                  }

                  inputbar {
                    border: 1px;
                    border-radius: 8px;
                    border-color: ${dracula_theme.hex.comment};
                    background-color: ${dracula_theme.hex.current_line};
                    padding: 8px;
                    spacing: 8px;
                    children: [ "prompt", "entry" ];
                  }

                  prompt {
                    text-color: ${dracula_theme.hex.foreground};
                  }

                  entry {
                    placeholder-color: ${dracula_theme.hex.comment};
                    placeholder: "Search";
                  }

                  listview {
                    margin: 16px 0px 0px 0px;
                    fixed-height: false;
                    lines: 8;
                    columns: 2;
                  }

                  element {
                    border-radius: 8px;
                    padding: 8px;
                    spacing: 8px;
                    children: [ "element-icon", "element-text" ];
                  }

                  element-icon {
                    vertical-align: 0.5;
                    size: 1em;
                  }

                  element-text {
                    text-color: inherit;
                  }

                  element.selected {
                    background-color: ${dracula_theme.hex.current_line};
                  }
                '';
              };
            in
            {
              enable = true;
              package = pkgs.rofi-wayland;
              plugins = with pkgs; [

              ];

              cycle = false;
              terminal = "${pkgs.kitty}/bin/kitty";

              location = "center";

              font = "${font_name.sans_serif} 11";

              extraConfig = {
                show-icons = true;
                display-drun = "Applications";

                disable-history = false;
              };

              theme = "${rofi_theme}";
            };

          waybar = {
            enable = true;
            systemd = {
              enable = true;
              # target = ;
            };

            settings = {
              top_bar = {
                start_hidden = false;
                reload_style_on_change = true;
                position = "top";
                exclusive = true;
                layer = "top";
                passthrough = false;
                fixed-center = true;
                spacing = 4;

                modules-left = [
                  "power-profiles-daemon"
                  "idle_inhibitor"
                  "backlight"
                  "pulseaudio"
                  "bluetooth"
                  "network"
                ];

                modules-center = [
                  "clock"
                ];

                modules-right = [
                  "privacy"
                  "mpris"
                  "keyboard-state"
                  "systemd-failed-units"
                  "disk"
                  "memory"
                  "cpu"
                  "battery"
                ];

                power-profiles-daemon = {
                  format = "{icon}";
                  format-icons = {
                    performance = "";
                    balanced = "";
                    power-saver = "";
                  };

                  tooltip = true;
                  tooltip-format = "Driver: {driver}\nProfile: {profile}";
                };

                idle_inhibitor = {
                  start-activated = false;

                  format = "{icon}";
                  format-icons = {
                    activated = "";
                    deactivated = "";
                  };

                  tooltip = true;
                  tooltip-format-activated = "{status}";
                  tooltip-format-deactivated = "{status}";
                };

                backlight = {
                  device = "intel_backlight";
                  interval = 1;

                  format = "{percent}% {icon}";
                  format-icons = [
                    ""
                    ""
                    ""
                    ""
                    ""
                    ""
                    ""
                    ""
                    ""
                  ];

                  tooltip = true;
                  tooltip-format = "{percent}% {icon}";

                  on-scroll-up = "brightnessctl s +1%";
                  on-scroll-down = "brightnessctl s 1%-";
                  reverse-scrolling = false;
                  reverse-mouse-scrolling = false;
                  scroll-step = 1.0;
                };

                pulseaudio = {
                  format = "{volume}% {icon} {format_source}";
                  format-muted = "{icon} {format_source}";

                  format-bluetooth = "{volume}% {icon} 󰂱 {format_source}";
                  format-bluetooth-muted = "{icon} 󰂱 {format_source}";

                  format-source = " {volume}% ";
                  format-source-muted = "";

                  format-icons = {
                    default = [
                      ""
                      ""
                      ""
                    ];
                    default-muted = "";

                    speaker = "󰓃";
                    speaker-muted = "󰓄";

                    headphone = "󰋋";
                    headphone-muted = "󰟎";

                    headset = "󰋎";
                    headset-muted = "󰋐";

                    hands-free = "󰏳";
                    hands-free-muted = "󰗿";

                    phone = "";
                    phone-muted = "";

                    portable = "";
                    portable-muted = "";

                    hdmi = "󰽟";
                    hdmi-muted = "󰽠";

                    hifi = "󰴸";
                    hifi-muted = "󰓄";

                    car = "󰄋";
                    car-muted = "󰸜";
                  };

                  tooltip = true;
                  tooltip-format = "{desc}";

                  scroll-step = 1.0;
                  reverse-scrolling = false;
                  reverse-mouse-scrolling = false;
                  max-volume = 100;
                  on-scroll-up = "wpctl set-volume @DEFAULT_AUDIO_SINK@ 1%+";
                  on-scroll-down = "wpctl set-volume @DEFAULT_AUDIO_SINK@ 1%-";

                  on-click = "pavucontrol";
                };

                bluetooth = {
                  format = "{status} {icon}";
                  format-disabled = "Disabled {icon}";
                  format-off = "Off {icon}";
                  format-on = "On {icon}";
                  format-connected = "{device_alias} {icon}";
                  format-connected-battery = "{device_alias} 󰂱 ({device_battery_percentage}%)";
                  format-icons = {
                    no-controller = "󰂲";
                    disabled = "󰂲";
                    off = "󰂲";
                    on = "󰂯";
                    connected = "󰂱";
                  };

                  tooltip = true;
                  tooltip-format = "Status: {status}\nController Address: {controller_address} ({controller_address_type})\nController Alias: {controller_alias}";
                  tooltip-format-disabled = "Status: Disabled";
                  tooltip-format-off = "Status: Off";
                  tooltip-format-on = "Status: On\nController Address: {controller_address} ({controller_address_type})\nController Alias: {controller_alias}";
                  tooltip-format-connected = "Status: Connected\nController Address: {controller_address} ({controller_address_type})\nController Alias: {controller_alias}\nConnected Devices ({num_connections}): {device_enumerate}";
                  tooltip-format-connected-battery = "Status: Connected\nController Address: {controller_address} ({controller_address_type})\nController Alias: {controller_alias}\nConnected Devices ({num_connections}): {device_enumerate}";
                  tooltip-format-enumerate-connected = "\n\tAddress: {device_address} ({device_address_type})\n\tAlias: {device_alias}";
                  tooltip-format-enumerate-connected-battery = "\n\tAddress: {device_address} ({device_address_type})\n\tAlias: {device_alias}\n\tBattery: {device_battery_percentage}%";

                  on-click = "blueman-manager";
                };

                network = {
                  interval = 1;

                  format = "{bandwidthUpBytes} {bandwidthDownBytes}";
                  format-disconnected = "Disconnected 󱘖";
                  format-linked = "No IP 󰀦";
                  format-ethernet = "{bandwidthUpBytes}   {bandwidthDownBytes}";
                  format-wifi = "{bandwidthUpBytes}   {bandwidthDownBytes}";

                  tooltip = true;
                  tooltip-format = "Interface: {ifname}\nGateway: {gwaddr}\nSubnet Mask: {netmask}\nCIDR Notation: {cidr}\nIP Address: {ipaddr}\nUp Speed: {bandwidthUpBytes}\nDown Speed: {bandwidthDownBytes}\nTotal Speed: {bandwidthTotalBytes}";
                  tooltip-format-disconnected = "Disconnected";
                  tooltip-format-ethernet = "Interface: {ifname}\nGateway: {gwaddr}\nSubnet Mask: {netmask}\nCIDR Notation= {cidr}\nIP Address: {ipaddr}\nUp Speed: {bandwidthUpBytes}\nDown Speed: {bandwidthDownBytes}\nTotal Speed: {bandwidthTotalBytes}";
                  tooltip-format-wifi = "Interface: {ifname}\nESSID: {essid}\nFrequency: {frequency} GHz\nStrength: {signaldBm} dBm ({signalStrength}%)\nGateway: {gwaddr}\nSubnet Mask: {netmask}\nCIDR Notation: {cidr}\nIP Address: {ipaddr}\nUp Speed: {bandwidthUpBytes}\nDown Speed: {bandwidthDownBytes}\nTotal Speed: {bandwidthTotalBytes}";

                  on-click = "nm-connection-editor";
                };

                clock = {
                  timezone = config.time.timeZone;
                  locale = "en_US";
                  interval = 1;

                  format = "{:%I:%M:%S %p}";
                  format-alt = "{:%A, %B %d, %Y}";

                  tooltip = true;
                  tooltip-format = "<tt><small>{calendar}</small></tt>";

                  calendar = {
                    mode = "year";
                    mode-mon-col = 3;
                    weeks-pos = "right";

                    format = {
                      months = "<b>{}</b>";
                      days = "{}";
                      weekdays = "<b>{}</b>";
                      weeks = "<i>{:%U}</i>";
                      today = "<u>{}</u>";
                    };
                  };
                };

                mpris = {
                  interval = 1;

                  format = "{player_icon}";

                  tooltip-format = "Title: {title}\nArtist: {artist}\nAlbum: {album}\n{status}: {position}/{length}\nPlayer: {player}";

                  player-icons = {
                    default = "";

                    vlc = "󰕼";
                    firefox = "";
                    chromium = "";
                  };
                };

                privacy = {
                  icon-size = 14;
                  icon-spacing = 8;
                  transition-duration = 200;

                  modules = [
                    {
                      type = "screenshare";
                      tooltip = true;
                      tooltip-icon-size = 16;
                    }
                    {
                      type = "audio-in";
                      tooltip = true;
                      tooltip-icon-size = 16;
                    }
                  ];
                };

                keyboard-state = {
                  capslock = true;
                  numlock = true;

                  format = {
                    capslock = "󰪛";
                    numlock = "󰎦";
                  };
                };

                systemd-failed-units = {
                  system = true;
                  user = true;

                  hide-on-ok = false;

                  format = "{nr_failed_system}, {nr_failed_user} ";
                  format-ok = "";
                };

                disk = {
                  path = "/";
                  unit = "GB";
                  interval = 1;

                  format = "{percentage_used}% 󰋊";

                  tooltip = true;
                  tooltip-format = "Total: {specific_total} GB\nUsed: {specific_used} GB ({percentage_used}%)\nFree: {specific_free} GB ({percentage_free}%)";

                  on-click = "kitty sh -c \"btop\"";
                };

                memory = {
                  interval = 1;

                  format = "{percentage}% ";

                  tooltip = true;
                  tooltip-format = "Used RAM: {used} GiB ({percentage}%)\nUsed Swap: {swapUsed} GiB ({swapPercentage}%)\nAvailable RAM: {avail} GiB\nAvailable Swap: {swapAvail} GiB";

                  on-click = "kitty sh -c \"btop\"";
                };

                cpu = {
                  interval = 1;

                  format = "{usage}% ";

                  tooltip = true;

                  on-click = "kitty sh -c \"btop\"";
                };

                battery = {
                  bat = "BAT0";
                  adapter = "AC0";
                  design-capacity = false;
                  weighted-average = true;
                  interval = 1;

                  full-at = 100;
                  states = {
                    warning = 25;
                    critical = 10;
                  };

                  format = "{capacity}% {icon}";
                  format-plugged = "{capacity}% ";
                  format-charging = "{capacity}% ";
                  format-full = "{capacity}% {icon}";
                  format-alt = "{time} {icon}";
                  format-time = "{H} h {m} min";
                  format-icons = [
                    ""
                    ""
                    ""
                    ""
                    ""
                  ];

                  tooltip = true;
                  tooltip-format = "Capacity: {capacity}%\nPower: {power} W\n{timeTo}\nCycles: {cycles}\nHealth: {health}%";

                  on-click = "kitty sh -c \"btop\"";
                };
              };

              bottom_bar = {
                start_hidden = false;
                reload_style_on_change = true;
                position = "bottom";
                exclusive = true;
                layer = "top";
                passthrough = false;
                fixed-center = true;
                spacing = 0;

                modules-left = [
                  "hyprland/workspaces"
                  "wlr/taskbar"
                ];

                modules-center = [
                  "hyprland/window"
                ];

                modules-right = [
                  "tray"
                ];

                "hyprland/workspaces" = {
                  all-outputs = false;
                  show-special = true;
                  special-visible-only = false;
                  active-only = false;
                  format = "{name}";
                  move-to-monitor = false;
                };

                "wlr/taskbar" = {
                  all-outputs = false;
                  active-first = false;
                  sort-by-app-id = false;
                  format = "{icon}";
                  icon-theme = "Dracula";
                  icon-size = 14;
                  markup = true;

                  tooltip = true;
                  tooltip-format = "Title: {title}\nName: {name}\nID: {app_id}\nState: {state}";

                  on-click = "activate";
                };

                "hyprland/window" = {
                  separate-outputs = true;
                  icon = false;

                  format = "{title}";
                };

                tray = {
                  show-passive-items = true;
                  reverse-direction = false;
                  icon-size = 14;
                  spacing = 4;
                };
              };
            };

            style = ''
              * {
                font-family: ${font_name.sans_serif};
                font-size: 14px;
              }

              window#waybar {
                border: none;
                background-color: transparent;
              }

              .modules-right > widget:last-child > #workspaces {
                margin-right: 0;
              }

              .modules-left > widget:first-child > #workspaces {
                margin-left: 0;
              }

              #power-profiles-daemon,
              #idle_inhibitor,
              #backlight,
              #pulseaudio,
              #bluetooth,
              #network,
              #keyboard-state,
              #clock,
              #mpris,
              #privacy,
              #systemd-failed-units,
              #disk,
              #memory,
              #cpu,
              #battery,
              #window {
                border-radius: 16px;
                background-color: ${dracula_theme.hex.background};
                padding: 2px 8px;
                color: ${dracula_theme.hex.foreground};
              }

              #power-profiles-daemon.power-saver {
                color: ${dracula_theme.hex.green};
              }

              #power-profiles-daemon.balanced {
                color: ${dracula_theme.hex.cyan};
              }

              #power-profiles-daemon.performance {
                color: ${dracula_theme.hex.foreground};
              }

              #idle_inhibitor.deactivated {
                color: ${dracula_theme.hex.foreground};
              }

              #idle_inhibitor.activated {
                color: ${dracula_theme.hex.cyan};
              }

              #pulseaudio.muted,
              #pulseaudio.source-muted {
                color: ${dracula_theme.hex.red};
              }

              #pulseaudio.bluetooth {
                color: ${dracula_theme.hex.foreground};
              }

              #bluetooth.no-controller,
              #bluetooth.disabled,
              #bluetooth.off {
                color: ${dracula_theme.hex.red};
              }

              #bluetooth.on,
              #bluetooth.discoverable,
              #bluetooth.pairable {
                color: ${dracula_theme.hex.foreground};
              }

              #bluetooth.discovering,
              #bluetooth.connected {
                color: ${dracula_theme.hex.cyan};
              }

              #network.disabled,
              #network.disconnected,
              #network.linked {
                color: ${dracula_theme.hex.red};
              }

              #network.etherenet,
              #network.wifi {
                color: ${dracula_theme.hex.foreground};
              }

              #mpris.playing {
                color: ${dracula_theme.hex.cyan};
              }

              #privacy-item.audio-in,
              #privacy-item.screenshare {
                color: ${dracula_theme.hex.cyan};
              }

              #keyboard-state label {
                margin: 0px 4px;
              }

              #keyboard-state label.locked {
                color: ${dracula_theme.hex.cyan};
              }

              #systemd-failed-units.ok {
                color: ${dracula_theme.hex.foreground};
              }

              #systemd-failed-units.degraded {
                color: ${dracula_theme.hex.red};
              }

              #battery.plugged,
              #battery.full {
                color: ${dracula_theme.hex.foreground};
              }

              #battery.charging {
                color: ${dracula_theme.hex.cyan};
              }

              #battery.warning {
                color: ${dracula_theme.hex.yellow};
              }

              #battery.critical {
                color: ${dracula_theme.hex.red};
              }

              #workspaces,
              #taskbar,
              #tray {
                background-color: transparent;
              }

              button {
                margin: 0px 2px;
                border-radius: 16px;
                background-color: ${dracula_theme.hex.background};
                padding: 0px;
                color: ${dracula_theme.hex.foreground};
              }

              button * {
                padding: 0px 4px;
              }

              button.active {
                background-color: ${dracula_theme.hex.current_line};
              }

              #window label {
                padding: 0px 4px;
                font-size: 11px;
              }

              #tray > widget {
                border-radius: 16px;
                background-color: ${dracula_theme.hex.background};
                color: ${dracula_theme.hex.foreground};
              }

              #tray image {
                padding: 0px 8px;
              }

              #tray > .passive {
                -gtk-icon-effect: dim;
              }

              #tray > .active {
                background-color: ${dracula_theme.hex.current_line};
              }

              #tray > .needs-attention {
                background-color: ${dracula_theme.hex.comment};
                -gtk-icon-effect: highlight;
              }

              #tray > widget:hover {
                background-color: ${dracula_theme.hex.current_line};
              }
            '';
          };

          kitty = {
            enable = true;

            shellIntegration = {
              mode = "no-rc";
              enableBashIntegration = true;
            };

            font = {
              name = font_name.mono;
              package = pkgs.nerd-fonts.noto;
              size = 11;
            };

            keybindings = { };

            settings = {
              sync_to_monitor = "yes";

              window_padding_width = "0 4 0 4";
              confirm_os_window_close = 0;

              enable_audio_bell = "yes";
              detect_urls = "yes";
              scrollback_lines = -1;
              click_interval = -1;

              foreground = dracula_theme.hex.foreground;
              background = dracula_theme.hex.background;
              selection_foreground = "#ffffff";
              selection_background = dracula_theme.hex.current_line;
              url_color = dracula_theme.hex.cyan;
              title_fg = dracula_theme.hex.foreground;
              title_bg = dracula_theme.hex.background;
              margin_bg = dracula_theme.hex.comment;
              margin_fg = dracula_theme.hex.current_line;
              removed_bg = dracula_theme.hex.red;
              highlight_removed_bg = dracula_theme.hex.red;
              removed_margin_bg = dracula_theme.hex.red;
              added_bg = dracula_theme.hex.green;
              highlight_added_bg = dracula_theme.hex.green;
              added_margin_bg = dracula_theme.hex.green;
              filler_bg = dracula_theme.hex.current_line;
              hunk_margin_bg = dracula_theme.hex.current_line;
              hunk_bg = dracula_theme.hex.purple;
              search_bg = dracula_theme.hex.cyan;
              search_fg = dracula_theme.hex.background;
              select_bg = dracula_theme.hex.yellow;
              select_fg = dracula_theme.hex.background;

              # Splits / Windows
              active_border_color = dracula_theme.hex.foreground;
              inactive_border_color = dracula_theme.hex.comment;

              active_tab_foreground = dracula_theme.hex.background;
              active_tab_background = dracula_theme.hex.foreground;
              inactive_tab_foreground = dracula_theme.hex.background;
              inactive_tab_background = dracula_theme.hex.comment;

              mark1_foreground = dracula_theme.hex.background;
              mark1_background = dracula_theme.hex.red;

              cursor = dracula_theme.hex.foreground;
              cursor_text_color = dracula_theme.hex.background;

              # Black
              color0 = "#21222c";
              color8 = dracula_theme.hex.comment;

              # Red
              color1 = dracula_theme.hex.red;
              color9 = "#ff6e6e";

              # Green
              color2 = dracula_theme.hex.green;
              color10 = "#69ff94";

              # Yellow
              color3 = dracula_theme.hex.yellow;
              color11 = "#ffffa5";

              # Blue
              color4 = dracula_theme.hex.purple;
              color12 = "#d6acff";

              # Magenta
              color5 = dracula_theme.hex.pink;
              color13 = "#ff92df";

              # Cyan
              color6 = dracula_theme.hex.cyan;
              color14 = "#a4ffff";

              # White
              color7 = dracula_theme.hex.foreground;
              color15 = "#ffffff";
            };

            extraConfig = '''';
          };
        };
      }
    ];

    users.bitscoper = { };

    verbose = true;
  };
}

# sdkmanager --licenses
# flutter doctor --android-licenses
# flutter doctor -v

# sudo flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
# sudo flatpak update
# sudo flatpak install flathub com.github.tchx84.Flatseal io.github.flattool.Warehouse io.github.giantpinkrobots.flatsweep com.icanblink.blink
# sudo flatpak uninstall --unused
# sudo flatpak repair

# FIXME: 05ac-033e-Gamepad > Rumble
# FIXME: Hyprpaper Delay
# FIXME: MariaDB > Login
# TODO: Neovim

Dynamically fetched from the configuration.nix file of my GitHub repository.