[
  {
    "path": ".envrc",
    "content": "# shellcheck disable=all\n\nwatch_file ./modules/flake-parts/actions.nix\nwatch_file ./modules/flake-parts/dev-shell.nix\nwatch_file ./modules/flake-parts/overlays.nix\nwatch_file ./modules/flake-parts/pre-commit.nix\nwatch_file ./modules/flake-parts/treefmt.nix\n\nuse flake . --impure\n"
  },
  {
    "path": ".gitattributes",
    "content": "*.age filter=age diff=age\n*.png filter=lfs diff=lfs merge=lfs -text\n*.jpg filter=lfs diff=lfs merge=lfs -text\n"
  },
  {
    "path": ".github/actionlint.yaml",
    "content": "self-hosted-runner:\n  # Labels of self-hosted runner in array of strings.\n  labels: []\n\n# Configuration variables in array of strings defined in your repository or\n# organization. `null` means disabling configuration variables check.\n# Empty array means no configuration variable is allowed.\nconfig-variables: null\n\n# Configuration for file paths. The keys are glob patterns to match to file\n# paths relative to the repository root. The values are the configurations for\n# the file paths. Note that the path separator is always '/'.\n# The following configurations are available.\n#\n# \"ignore\" is an array of regular expression patterns. Matched error messages\n# are ignored. This is similar to the \"-ignore\" command line option.\npaths:\n#  .github/workflows/**/*.yml:\n#    ignore: []\n"
  },
  {
    "path": ".github/renovate.json",
    "content": "{\n  \"$schema\": \"https://docs.renovatebot.com/renovate-schema.json\",\n  \"extends\": [\n    \"config:recommended\"\n  ],\n  \"gitIgnoredAuthors\": [\n    \"noreply@github.com\"\n  ],\n  \"github-actions\": {\n    \"enabled\": false\n  },\n  \"nix\": {\n    \"enabled\": true\n  },\n  \"lockFileMaintenance\": {\n    \"enabled\": true,\n    \"schedule\": [\"before 1am\"],\n    \"commitMessageAction\": \"update\",\n    \"prBodyDefinitions\": {\n      \"Change\": \"All flake inputs updated\"\n    }\n  },\n  \"customManagers\": [\n    {\n      \"customType\": \"regex\",\n      \"managerFilePatterns\": [\n        \"/modules/flake-parts/actions\\\\.nix$/\"\n      ],\n      \"matchStrings\": [\n        \"\\\"(?<depName>[A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+)@(?<currentDigest>[a-f0-9]+)\\\";\\\\s*#\\\\s*(?<currentValue>v?[\\\\d.]+)\"\n      ],\n      \"datasourceTemplate\": \"github-tags\",\n      \"autoReplaceStringTemplate\": \"\\\"{{{depName}}}@{{{newDigest}}}\\\"; # {{{newValue}}}\"\n    }\n  ],\n  \"packageRules\": [\n    {\n      \"matchManagers\": [\n        \"custom.regex\"\n      ],\n      \"matchDatasources\": [\n        \"github-tags\"\n      ],\n      \"automerge\": false,\n      \"pinDigests\": true,\n      \"commitMessagePrefix\": \"chore(actions):\"\n    },\n    {\n      \"matchManagers\": [\n        \"nix\"\n      ],\n      \"automerge\": true,\n      \"automergeType\": \"pr\",\n      \"automergeStrategy\": \"rebase\",\n      \"commitMessagePrefix\": \"chore(flake):\",\n      \"prBodyNotes\": [\n        \"This PR updates nix flake inputs.\"\n      ]\n    },\n    {\n      \"matchUpdateTypes\": [\n        \"lockFileMaintenance\"\n      ],\n      \"automerge\": true,\n      \"automergeType\": \"pr\",\n      \"automergeStrategy\": \"rebase\",\n      \"commitMessagePrefix\": \"chore(flake):\",\n      \"addLabels\": [\n        \"dependencies\",\n        \"automated\"\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": ".github/workflows/ci.yaml",
    "content": "# This file was autogenerated by actions.nix. Do not edit it manually.\n# To make changes, edit the workflow definition in your flake's actions-nix configuration\n# (typically under flake.actions-nix.workflows.\".github/workflows/ci.yaml\") and run:\n#   nix run .#render-workflows\n# Or commit to trigger the pre-commit hook if enabled.\nconcurrency:\n  cancel-in-progress: ${{ github.event_name == 'pull_request' }}\n  group: ci-${{ github.head_ref || github.ref_name }}\njobs:\n  build:\n    environment: ci\n    name: ${{ matrix.attrs.name }} (${{ matrix.attrs.hostPlatform }})\n    runs-on: ${{ matrix.attrs.runsOn }}\n    steps:\n    - uses: wimpysworld/nothing-but-nix@687c797a730352432950c707ab493fcc951818d7\n    - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd\n      with:\n        persist-credentials: false\n    - uses: cachix/install-nix-action@ab739621df7a23f52766f9ccc97f38da6b7af14f\n    - uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae\n      with:\n        key: nix-eval-${{ runner.os }}-${{ runner.arch }}-${{ hashFiles('flake.lock')\n          }}\n        path: ~/.cache/nix\n        restore-keys: nix-eval-${{ runner.os }}-${{ runner.arch }}-\n    - uses: cachix/cachix-action@1eb2ef646ac0255473d23a5907ad7b04ce94065c\n      with:\n        authToken: ${{ secrets.CACHIX_AUTH_TOKEN }}\n        extraPullNames: nix-community\n        name: bbigras-nix-config\n    - name: nix-fast-build\n      run: nix run 'git+file:.#nix-fast-build' -- --no-nom --skip-cached --retries=3\n        --option accept-flake-config true --flake='git+file:.#${{ matrix.attrs.attr\n        }}'\n    strategy:\n      fail-fast: false\n      matrix:\n        attrs:\n        - attr: nixosConfigurations.desktop.config.system.build.toplevel\n          hostPlatform: x86_64-linux\n          name: desktop\n          runsOn: ubuntu-24.04\n        - attr: nixosConfigurations.laptop.config.system.build.toplevel\n          hostPlatform: x86_64-linux\n          name: laptop\n          runsOn: ubuntu-24.04\n        - attr: nixosConfigurations.work.config.system.build.toplevel\n          hostPlatform: x86_64-linux\n          name: work\n          runsOn: ubuntu-24.04\n    timeout-minutes: 60\n  check:\n    if: always()\n    needs:\n    - flake-check\n    - build\n    runs-on: ubuntu-24.04\n    steps:\n    - uses: re-actors/alls-green@05ac9388f0aebcb5727afa17fcccfecd6f8ec5fe\n      with:\n        jobs: ${{ toJSON(needs) }}\n    timeout-minutes: 60\n  flake-check:\n    environment: ci\n    name: flake check (${{ matrix.systems.platform }})\n    runs-on: ${{ matrix.systems.os }}\n    steps:\n    - uses: wimpysworld/nothing-but-nix@687c797a730352432950c707ab493fcc951818d7\n    - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd\n      with:\n        persist-credentials: false\n    - uses: cachix/install-nix-action@ab739621df7a23f52766f9ccc97f38da6b7af14f\n    - uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae\n      with:\n        key: nix-eval-${{ runner.os }}-${{ runner.arch }}-${{ hashFiles('flake.lock')\n          }}\n        path: ~/.cache/nix\n        restore-keys: nix-eval-${{ runner.os }}-${{ runner.arch }}-\n    - uses: cachix/cachix-action@1eb2ef646ac0255473d23a5907ad7b04ce94065c\n      with:\n        authToken: ${{ secrets.CACHIX_AUTH_TOKEN }}\n        extraPullNames: nix-community\n        name: bbigras-nix-config\n    - name: nix flake check\n      run: nix flake check 'git+file:.'\n    - name: nix flake show\n      run: nix flake show 'git+file:.'\n    strategy:\n      matrix:\n        systems:\n        - os: ubuntu-24.04\n          platform: x86_64-linux\n    timeout-minutes: 60\nname: ci\n'on':\n  pull_request: {}\n  push:\n    branches:\n    - master\n    - try\n  workflow_dispatch: {}\npermissions: {}\n"
  },
  {
    "path": ".github/workflows/regenerate-workflows.yaml",
    "content": "# This file was autogenerated by actions.nix. Do not edit it manually.\n# To make changes, edit the workflow definition in your flake's actions-nix configuration\n# (typically under flake.actions-nix.workflows.\".github/workflows/regenerate-workflows.yaml\") and run:\n#   nix run .#render-workflows\n# Or commit to trigger the pre-commit hook if enabled.\njobs:\n  regenerate:\n    environment: renovate\n    if: github.actor == 'renovate[bot]' || github.event_name == 'workflow_dispatch'\n    runs-on: ubuntu-24.04\n    steps:\n    - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd\n      with:\n        fetch-depth: 2\n        ref: ${{ github.head_ref || github.ref_name }}\n        token: ${{ secrets.PAT }}\n    - uses: cachix/install-nix-action@ab739621df7a23f52766f9ccc97f38da6b7af14f\n    - uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae\n      with:\n        key: nix-eval-${{ runner.os }}-${{ runner.arch }}-${{ hashFiles('flake.lock')\n          }}\n        path: ~/.cache/nix\n        restore-keys: nix-eval-${{ runner.os }}-${{ runner.arch }}-\n    - uses: cachix/cachix-action@1eb2ef646ac0255473d23a5907ad7b04ce94065c\n      with:\n        authToken: ${{ secrets.CACHIX_AUTH_TOKEN }}\n        extraPullNames: nix-community\n        name: bbigras-nix-config\n    - name: Regenerate workflows\n      run: nix run .#render-workflows\n    - name: Amend commit with regenerated workflows\n      run: |-\n        git config user.name \"github[bot]\"\n        git config user.email \"noreply@github.com\"\n        git add .github/workflows/\n        git diff --staged --quiet || git commit --amend --no-edit\n        git push --force-with-lease\n    - uses: peter-evans/enable-pull-request-automerge@a660677d5469627102a1c1e11409dd063606628d\n      with:\n        merge-method: rebase\n        pull-request-number: ${{ github.event.pull_request.number }}\n        token: ${{ secrets.PAT }}\n    timeout-minutes: 60\nname: regenerate-workflows\n'on':\n  pull_request:\n    paths:\n    - modules/flake-parts/actions.nix\n    - flake.lock\n  workflow_dispatch: {}\npermissions:\n  contents: write\n  pull-requests: write\n"
  },
  {
    "path": ".github/zizmor.yml",
    "content": "# zizmor configuration - suppress intentional security warnings\nrules:\n  # regenerate-workflows needs credentials to push amended commits\n  artipacked:\n    ignore:\n      - regenerate-workflows.yaml\n  # Checking for renovate[bot] actor is intentional - this workflow\n  # only runs for Renovate PRs to regenerate workflow YAML files\n  bot-conditions:\n    ignore:\n      - regenerate-workflows.yaml\n"
  },
  {
    "path": ".gitignore",
    "content": "*~\n,*\n.*.swp\n.*.swo\nresult\nresult-*\n\n.DS_Store\n\n.direnv\n\n/.pre-commit-config.yaml\n"
  },
  {
    "path": ".justfile",
    "content": "build HOST:\n  nix build .#nixosConfigurations.{{HOST}}.config.system.build.toplevel --log-format internal-json -v |& nom --json\n\n# deploy HOST:\n#   deploy -s \".#{{HOST}}\" -- --impure\n\n# pixel6:\n#   # nix build .#packages.aarch64-linux.pixel6 --builders \"ssh-ng://bbigras@192.168.2.29?ssh-key=/opt/rpi5-remote-build aarch64-linux\" --impure --max-jobs 0\n#   nix build .#packages.aarch64-linux.pixel6 --impure --log-format internal-json -v |& nom --json\n\n# laptop:\n#   nom build .#laptop --impure --extra-substituters http://192.168.68.6:8501 --extra-trusted-public-keys \"192.168.68.6:zSAiwQJTX02yGP2NSof1Pin339R5YP+91Y5xdaqFsnU=\"\n"
  },
  {
    "path": "LICENSE",
    "content": "BSD 3-Clause License\n\nCopyright (c) 2020, Bruno Bigras\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n1. Redistributions of source code must retain the above copyright notice, this\n   list of conditions and the following disclaimer.\n\n2. Redistributions in binary form must reproduce the above copyright notice,\n   this list of conditions and the following disclaimer in the documentation\n   and/or other materials provided with the distribution.\n\n3. Neither the name of the copyright holder nor the names of its\n   contributors may be used to endorse or promote products derived from\n   this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\nFOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\nDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\nSERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\nOR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
  },
  {
    "path": "README.md",
    "content": "# nix-config [![built with nix](https://builtwithnix.org/badge.svg)](https://builtwithnix.org) [![ci](https://github.com/bbigras/nix-config/actions/workflows/ci.yaml/badge.svg)](https://github.com/bbigras/nix-config/actions/workflows/ci.yaml)\n\nWIP\n\n# Features\n- flakes\n- deploy with deploy-rs\n- use the zen Linux kernel\n- use [nixos-hardware](https://github.com/NixOS/nixos-hardware)\n- use [srvos](https://github.com/nix-community/srvos)\n- Full disk encryption on laptop\n- [emacs-init module](https://gitlab.com/rycee/nur-expressions/blob/master/hm-modules/emacs-init.nix) for home-manager. See `users/bbigras/dev/emacs.nix`\n- overlays\n  - emacs-overlay\n  - nur\n- split-dns with systemd-resolved (might be set in my privates files)\n- tailscale\n\nThis is heavily based on https://github.com/lovesegfault/nix-config. Many files were copied directly from that repo.\n\nNote that the license should include lovesegfault's copyright on many files. Not sure how to sort that yet.\n\n## Build one host\n\n```sh\nnix build .#hosts.desktop --impure\n```\n\n## Deploy one host\n\n```sh\ndeploy -s .#pixel6 -- --impure\n```\n\n## nix-on-droid (first time)\n\nOn the phone:\n\n```sh\nnix-shell -p openssh -p which\n\n# get user and group id and put it in hosts/pixel6/default.nix\nid\n\nssh-keygen -q -N \"\" -t ed25519 -f ~/ssh_host_ed25519_key\n\ncat <<EOF > tmp-sshd\nHostKey ~/ssh_host_ed25519_key\nPort 8022\nEOF\n\nmkdir -p ~/.ssh\ncat <<EOF > ~/.ssh/authorized_keys\n**my key**\nEOF\n\n# start sshd server to be able to deploy from desktop with deploy-rs\n`which sshd` -dD -f ~/tmp-sshd\n```\n"
  },
  {
    "path": "configurations/nixos/desktop/default.nix",
    "content": "# NixOS configuration for desktop\n{\n  flake,\n  pkgs,\n  lib,\n  ...\n}:\nlet\n  inherit (flake) inputs self;\nin\n{\n  imports = [\n    # Internal modules via flake outputs\n    self.nixosModules.default\n    self.nixosModules.users-bbigras\n    self.nixosModules.graphical\n    self.nixosModules.graphical-cosmic\n    self.nixosModules.graphical-steam\n    self.nixosModules.graphical-fonts\n    self.nixosModules.graphical-trusted\n    self.nixosModules.pam-limits\n    self.nixosModules.hardware-secureboot\n    self.nixosModules.services-peerix\n    self.nixosModules.services-podman\n    self.nixosModules.services-wivrn\n    #self.nixosModules.services-virt-manager\n\n    # Hardware modules from nixos-hardware\n    inputs.nixos-hardware.nixosModules.common-cpu-intel\n    inputs.nixos-hardware.nixosModules.common-gpu-amd\n    inputs.nixos-hardware.nixosModules.common-pc-ssd\n\n    # Host-specific files\n    # ./state.nix\n    { config.facter.reportPath = ./facter.json; }\n  ];\n\n  hardware.amdgpu.initrd.enable = true;\n\n  services.udev.extraRules = ''\n    # Block ASRock LED Controller joystick node\n    SUBSYSTEM==\"input\", KERNEL==\"js*\", ATTRS{id/vendor}==\"26ce\", ATTRS{id/product}==\"01a2\", MODE=\"0000\"\n    # Block NuPhy hidraw interfaces\n    SUBSYSTEM==\"hidraw\", ATTRS{idVendor}==\"19f5\", ATTRS{idProduct}==\"3246\", MODE=\"0000\"\n    # Block NuPhy System Control event node (the one SDL misidentifies as a joystick)\n    SUBSYSTEM==\"input\", KERNEL==\"event*\", ATTRS{name}==\"NuPhy NuPhy Air75 V2 System Control\", MODE=\"0000\"\n  '';\n\n  # Host-specific home-manager user config\n  home-manager.users.bbigras.imports = [\n    self.homeModules.trusted\n    self.homeModules.emacs\n    self.homeModules.radicle\n    self.homeModules.syncthing\n    self.homeModules.graphical\n    self.homeModules.graphical-heroic\n    self.homeModules.graphical-lutris\n    self.homeModules.tkey-ssh-agent\n  ];\n\n  # SSH target for remote activation\n\n  # Platform\n  nixpkgs.hostPlatform = \"x86_64-linux\";\n\n  # Host-specific configuration\n  boot = {\n    binfmt.emulatedSystems = [ \"aarch64-linux\" ];\n    initrd = {\n      systemd.enable = true;\n    };\n    lanzaboote.pkiBundle = lib.mkForce \"/var/lib/sbctl\";\n    plymouth.enable = true;\n  };\n\n  environment.systemPackages = with pkgs; [\n    cntr\n    wireguard-tools\n  ];\n\n  fileSystems = {\n    \"/\" = {\n      device = \"/dev/disk/by-uuid/e58653d8-7f76-402d-998d-400fe04f7520\";\n      fsType = \"ext4\";\n    };\n    \"/boot\" = {\n      device = \"/dev/disk/by-uuid/DA5A-BC65\";\n      fsType = \"vfat\";\n      options = [\n        \"fmask=0022\"\n        \"dmask=0022\"\n      ];\n    };\n    \"/media/gamedisk\" = {\n      device = \"/dev/disk/by-id/wwn-0x5000c5006527e1b4-part2\";\n      fsType = \"ext4\";\n    };\n  };\n\n  # agenix-rekey host pubkey\n  age.rekey.hostPubkey = \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINfn1kTx3Z2380QFj5IN/eWDe+/dt4CIzTaImlKbD+09\";\n\n  networking = {\n    # hostId = \"\";\n    hostName = \"desktop\";\n    wireguard.enable = true;\n  };\n\n  nix.settings.max-substitution-jobs = 32;\n\n  security.sudo.wheelNeedsPassword = true;\n\n  services = {\n    flatpak.enable = true;\n    fwupd.enable = true;\n    udisks2.enable = true;\n    avahi.enable = pkgs.lib.mkForce false;\n    earlyoom = {\n      enable = true;\n      enableNotifications = true;\n    };\n    tuned = {\n      enable = true;\n      ppdSupport = false;\n      recommend = {\n        balanced = { };\n      };\n    };\n  };\n\n  systemd.network.networks = {\n    lan = {\n      DHCP = \"yes\";\n      matchConfig.Name = \"enp*\";\n      dhcpV4Config.RouteMetric = 20;\n      # dhcpV6Config.RouteMetric = 20;\n      linkConfig = {\n        Multicast = true;\n        RequiredForOnline = \"routable\";\n      };\n      networkConfig = {\n        MulticastDNS = true;\n        LLMNR = true;\n      };\n    };\n  };\n}\n"
  },
  {
    "path": "configurations/nixos/desktop/facter.json",
    "content": "{\n  \"version\": 1,\n  \"system\": \"x86_64-linux\",\n  \"virtualisation\": \"none\",\n  \"hardware\": {\n    \"bios\": {\n      \"apm_info\": {\n        \"supported\": false,\n        \"enabled\": false,\n        \"version\": 0,\n        \"sub_version\": 0,\n        \"bios_flags\": 0\n      },\n      \"vbe_info\": {\n        \"version\": 0,\n        \"video_memory\": 0\n      },\n      \"pnp\": false,\n      \"pnp_id\": 0,\n      \"lba_support\": false,\n      \"low_memory_size\": 0,\n      \"smbios_version\": 773\n    },\n    \"bluetooth\": [\n      {\n        \"index\": 51,\n        \"attached_to\": 57,\n        \"class_list\": [\n          \"usb\",\n          \"bluetooth\"\n        ],\n        \"bus_type\": {\n          \"hex\": \"0086\",\n          \"name\": \"USB\",\n          \"value\": 134\n        },\n        \"slot\": {\n          \"bus\": 0,\n          \"number\": 0\n        },\n        \"base_class\": {\n          \"hex\": \"0115\",\n          \"name\": \"Bluetooth Device\",\n          \"value\": 277\n        },\n        \"vendor\": {\n          \"hex\": \"8087\",\n          \"value\": 32903\n        },\n        \"device\": {\n          \"hex\": \"0033\",\n          \"value\": 51\n        },\n        \"model\": \"Bluetooth Device\",\n        \"sysfs_id\": \"/devices/pci0000:00/0000:00:14.0/usb1/1-14/1-14:1.0\",\n        \"sysfs_bus_id\": \"1-14:1.0\",\n        \"resources\": [\n          {\n            \"type\": \"baud\",\n            \"speed\": 12000000,\n            \"bits\": 0,\n            \"stop_bits\": 0,\n            \"parity\": 0,\n            \"handshake\": 0\n          }\n        ],\n        \"detail\": {\n          \"device_class\": {\n            \"hex\": \"00e0\",\n            \"name\": \"wireless\",\n            \"value\": 224\n          },\n          \"device_subclass\": {\n            \"hex\": \"0001\",\n            \"name\": \"audio\",\n            \"value\": 1\n          },\n          \"device_protocol\": 1,\n          \"interface_class\": {\n            \"hex\": \"00e0\",\n            \"name\": \"wireless\",\n            \"value\": 224\n          },\n          \"interface_subclass\": {\n            \"hex\": \"0001\",\n            \"name\": \"audio\",\n            \"value\": 1\n          },\n          \"interface_protocol\": 1,\n          \"interface_number\": 0,\n          \"interface_alternate_setting\": 0\n        },\n        \"hotplug\": \"usb\",\n        \"driver\": \"btusb\",\n        \"driver_module\": \"btusb\",\n        \"drivers\": [\n          \"btusb\"\n        ],\n        \"driver_modules\": [\n          \"btusb\"\n        ],\n        \"module_alias\": \"usb:v8087p0033d0000dcE0dsc01dp01icE0isc01ip01in00\"\n      },\n      {\n        \"index\": 58,\n        \"attached_to\": 57,\n        \"class_list\": [\n          \"usb\",\n          \"bluetooth\"\n        ],\n        \"bus_type\": {\n          \"hex\": \"0086\",\n          \"name\": \"USB\",\n          \"value\": 134\n        },\n        \"slot\": {\n          \"bus\": 0,\n          \"number\": 0\n        },\n        \"base_class\": {\n          \"hex\": \"0115\",\n          \"name\": \"Bluetooth Device\",\n          \"value\": 277\n        },\n        \"vendor\": {\n          \"hex\": \"8087\",\n          \"value\": 32903\n        },\n        \"device\": {\n          \"hex\": \"0033\",\n          \"value\": 51\n        },\n        \"model\": \"Bluetooth Device\",\n        \"sysfs_id\": \"/devices/pci0000:00/0000:00:14.0/usb1/1-14/1-14:1.1\",\n        \"sysfs_bus_id\": \"1-14:1.1\",\n        \"resources\": [\n          {\n            \"type\": \"baud\",\n            \"speed\": 12000000,\n            \"bits\": 0,\n            \"stop_bits\": 0,\n            \"parity\": 0,\n            \"handshake\": 0\n          }\n        ],\n        \"detail\": {\n          \"device_class\": {\n            \"hex\": \"00e0\",\n            \"name\": \"wireless\",\n            \"value\": 224\n          },\n          \"device_subclass\": {\n            \"hex\": \"0001\",\n            \"name\": \"audio\",\n            \"value\": 1\n          },\n          \"device_protocol\": 1,\n          \"interface_class\": {\n            \"hex\": \"00e0\",\n            \"name\": \"wireless\",\n            \"value\": 224\n          },\n          \"interface_subclass\": {\n            \"hex\": \"0001\",\n            \"name\": \"audio\",\n            \"value\": 1\n          },\n          \"interface_protocol\": 1,\n          \"interface_number\": 1,\n          \"interface_alternate_setting\": 0\n        },\n        \"hotplug\": \"usb\",\n        \"driver\": \"btusb\",\n        \"driver_module\": \"btusb\",\n        \"drivers\": [\n          \"btusb\"\n        ],\n        \"driver_modules\": [\n          \"btusb\"\n        ],\n        \"module_alias\": \"usb:v8087p0033d0000dcE0dsc01dp01icE0isc01ip01in01\"\n      }\n    ],\n    \"bridge\": [\n      {\n        \"index\": 22,\n        \"attached_to\": 0,\n        \"class_list\": [\n          \"pci\",\n          \"bridge\"\n        ],\n        \"bus_type\": {\n          \"hex\": \"0004\",\n          \"name\": \"PCI\",\n          \"value\": 4\n        },\n        \"slot\": {\n          \"bus\": 0,\n          \"number\": 28\n        },\n        \"base_class\": {\n          \"hex\": \"0006\",\n          \"name\": \"Bridge\",\n          \"value\": 6\n        },\n        \"sub_class\": {\n          \"hex\": \"0004\",\n          \"name\": \"PCI bridge\",\n          \"value\": 4\n        },\n        \"pci_interface\": {\n          \"hex\": \"0000\",\n          \"name\": \"Normal decode\",\n          \"value\": 0\n        },\n        \"vendor\": {\n          \"hex\": \"8086\",\n          \"name\": \"Intel Corporation\",\n          \"value\": 32902\n        },\n        \"sub_vendor\": {\n          \"hex\": \"1849\",\n          \"value\": 6217\n        },\n        \"device\": {\n          \"hex\": \"7a38\",\n          \"value\": 31288\n        },\n        \"sub_device\": {\n          \"hex\": \"7a38\",\n          \"value\": 31288\n        },\n        \"revision\": {\n          \"hex\": \"0011\",\n          \"value\": 17\n        },\n        \"model\": \"Intel PCI bridge\",\n        \"sysfs_id\": \"/devices/pci0000:00/0000:00:1c.0\",\n        \"sysfs_bus_id\": \"0000:00:1c.0\",\n        \"resources\": [\n          {\n            \"type\": \"irq\",\n            \"base\": 122,\n            \"triggered\": 0,\n            \"enabled\": true\n          }\n        ],\n        \"detail\": {\n          \"function\": 0,\n          \"command\": 1031,\n          \"header_type\": 1,\n          \"secondary_bus\": 5,\n          \"irq\": 122,\n          \"prog_if\": 0\n        },\n        \"driver\": \"pcieport\",\n        \"driver_module\": \"pcieportdrv\",\n        \"drivers\": [\n          \"pcieport\"\n        ],\n        \"driver_modules\": [\n          \"pcieportdrv\"\n        ],\n        \"module_alias\": \"pci:v00008086d00007A38sv00001849sd00007A38bc06sc04i00\"\n      },\n      {\n        \"index\": 23,\n        \"attached_to\": 0,\n        \"class_list\": [\n          \"pci\",\n          \"bridge\"\n        ],\n        \"bus_type\": {\n          \"hex\": \"0004\",\n          \"name\": \"PCI\",\n          \"value\": 4\n        },\n        \"slot\": {\n          \"bus\": 0,\n          \"number\": 31\n        },\n        \"base_class\": {\n          \"hex\": \"0006\",\n          \"name\": \"Bridge\",\n          \"value\": 6\n        },\n        \"sub_class\": {\n          \"hex\": \"0001\",\n          \"name\": \"ISA bridge\",\n          \"value\": 1\n        },\n        \"vendor\": {\n          \"hex\": \"8086\",\n          \"name\": \"Intel Corporation\",\n          \"value\": 32902\n        },\n        \"sub_vendor\": {\n          \"hex\": \"1849\",\n          \"value\": 6217\n        },\n        \"device\": {\n          \"hex\": \"7a06\",\n          \"value\": 31238\n        },\n        \"sub_device\": {\n          \"hex\": \"7a06\",\n          \"value\": 31238\n        },\n        \"revision\": {\n          \"hex\": \"0011\",\n          \"value\": 17\n        },\n        \"model\": \"Intel ISA bridge\",\n        \"sysfs_id\": \"/devices/pci0000:00/0000:00:1f.0\",\n        \"sysfs_bus_id\": \"0000:00:1f.0\",\n        \"detail\": {\n          \"function\": 0,\n          \"command\": 1031,\n          \"header_type\": 0,\n          \"secondary_bus\": 0,\n          \"irq\": 0,\n          \"prog_if\": 0\n        },\n        \"module_alias\": \"pci:v00008086d00007A06sv00001849sd00007A06bc06sc01i00\"\n      },\n      {\n        \"index\": 24,\n        \"attached_to\": 28,\n        \"class_list\": [\n          \"pci\",\n          \"bridge\"\n        ],\n        \"bus_type\": {\n          \"hex\": \"0004\",\n          \"name\": \"PCI\",\n          \"value\": 4\n        },\n        \"slot\": {\n          \"bus\": 2,\n          \"number\": 0\n        },\n        \"base_class\": {\n          \"hex\": \"0006\",\n          \"name\": \"Bridge\",\n          \"value\": 6\n        },\n        \"sub_class\": {\n          \"hex\": \"0004\",\n          \"name\": \"PCI bridge\",\n          \"value\": 4\n        },\n        \"pci_interface\": {\n          \"hex\": \"0000\",\n          \"name\": \"Normal decode\",\n          \"value\": 0\n        },\n        \"vendor\": {\n          \"hex\": \"1002\",\n          \"name\": \"ATI Technologies Inc\",\n          \"value\": 4098\n        },\n        \"sub_vendor\": {\n          \"hex\": \"1002\",\n          \"name\": \"ATI Technologies Inc\",\n          \"value\": 4098\n        },\n        \"device\": {\n          \"hex\": \"1479\",\n          \"value\": 5241\n        },\n        \"sub_device\": {\n          \"hex\": \"1479\",\n          \"value\": 5241\n        },\n        \"model\": \"ATI PCI bridge\",\n        \"sysfs_id\": \"/devices/pci0000:00/0000:00:01.0/0000:01:00.0/0000:02:00.0\",\n        \"sysfs_bus_id\": \"0000:02:00.0\",\n        \"resources\": [\n          {\n            \"type\": \"irq\",\n            \"base\": 125,\n            \"triggered\": 0,\n            \"enabled\": true\n          }\n        ],\n        \"detail\": {\n          \"function\": 0,\n          \"command\": 1031,\n          \"header_type\": 1,\n          \"secondary_bus\": 3,\n          \"irq\": 125,\n          \"prog_if\": 0\n        },\n        \"driver\": \"pcieport\",\n        \"driver_module\": \"pcieportdrv\",\n        \"drivers\": [\n          \"pcieport\"\n        ],\n        \"driver_modules\": [\n          \"pcieportdrv\"\n        ],\n        \"module_alias\": \"pci:v00001002d00001479sv00001002sd00001479bc06sc04i00\"\n      },\n      {\n        \"index\": 25,\n        \"attached_to\": 0,\n        \"class_list\": [\n          \"pci\",\n          \"bridge\"\n        ],\n        \"bus_type\": {\n          \"hex\": \"0004\",\n          \"name\": \"PCI\",\n          \"value\": 4\n        },\n        \"slot\": {\n          \"bus\": 0,\n          \"number\": 1\n        },\n        \"base_class\": {\n          \"hex\": \"0006\",\n          \"name\": \"Bridge\",\n          \"value\": 6\n        },\n        \"sub_class\": {\n          \"hex\": \"0004\",\n          \"name\": \"PCI bridge\",\n          \"value\": 4\n        },\n        \"pci_interface\": {\n          \"hex\": \"0000\",\n          \"name\": \"Normal decode\",\n          \"value\": 0\n        },\n        \"vendor\": {\n          \"hex\": \"8086\",\n          \"name\": \"Intel Corporation\",\n          \"value\": 32902\n        },\n        \"sub_vendor\": {\n          \"hex\": \"1849\",\n          \"value\": 6217\n        },\n        \"device\": {\n          \"hex\": \"460d\",\n          \"value\": 17933\n        },\n        \"sub_device\": {\n          \"hex\": \"460d\",\n          \"value\": 17933\n        },\n        \"revision\": {\n          \"hex\": \"0002\",\n          \"value\": 2\n        },\n        \"model\": \"Intel PCI bridge\",\n        \"sysfs_id\": \"/devices/pci0000:00/0000:00:01.0\",\n        \"sysfs_bus_id\": \"0000:00:01.0\",\n        \"resources\": [\n          {\n            \"type\": \"irq\",\n            \"base\": 120,\n            \"triggered\": 0,\n            \"enabled\": true\n          }\n        ],\n        \"detail\": {\n          \"function\": 0,\n          \"command\": 1031,\n          \"header_type\": 1,\n          \"secondary_bus\": 1,\n          \"irq\": 120,\n          \"prog_if\": 0\n        },\n        \"driver\": \"pcieport\",\n        \"driver_module\": \"pcieportdrv\",\n        \"drivers\": [\n          \"pcieport\"\n        ],\n        \"driver_modules\": [\n          \"pcieportdrv\"\n        ],\n        \"module_alias\": \"pci:v00008086d0000460Dsv00001849sd0000460Dbc06sc04i00\"\n      },\n      {\n        \"index\": 28,\n        \"attached_to\": 25,\n        \"class_list\": [\n          \"pci\",\n          \"bridge\"\n        ],\n        \"bus_type\": {\n          \"hex\": \"0004\",\n          \"name\": \"PCI\",\n          \"value\": 4\n        },\n        \"slot\": {\n          \"bus\": 1,\n          \"number\": 0\n        },\n        \"base_class\": {\n          \"hex\": \"0006\",\n          \"name\": \"Bridge\",\n          \"value\": 6\n        },\n        \"sub_class\": {\n          \"hex\": \"0004\",\n          \"name\": \"PCI bridge\",\n          \"value\": 4\n        },\n        \"pci_interface\": {\n          \"hex\": \"0000\",\n          \"name\": \"Normal decode\",\n          \"value\": 0\n        },\n        \"vendor\": {\n          \"hex\": \"1002\",\n          \"name\": \"ATI Technologies Inc\",\n          \"value\": 4098\n        },\n        \"device\": {\n          \"hex\": \"1478\",\n          \"value\": 5240\n        },\n        \"revision\": {\n          \"hex\": \"00c5\",\n          \"value\": 197\n        },\n        \"model\": \"ATI PCI bridge\",\n        \"sysfs_id\": \"/devices/pci0000:00/0000:00:01.0/0000:01:00.0\",\n        \"sysfs_bus_id\": \"0000:01:00.0\",\n        \"resources\": [\n          {\n            \"type\": \"irq\",\n            \"base\": 16,\n            \"triggered\": 0,\n            \"enabled\": true\n          },\n          {\n            \"type\": \"mem\",\n            \"base\": 1914699776,\n            \"range\": 16384,\n            \"enabled\": true,\n            \"access\": \"read_write\",\n            \"prefetch\": \"no\"\n          }\n        ],\n        \"detail\": {\n          \"function\": 0,\n          \"command\": 7,\n          \"header_type\": 1,\n          \"secondary_bus\": 2,\n          \"irq\": 16,\n          \"prog_if\": 0\n        },\n        \"driver\": \"pcieport\",\n        \"driver_module\": \"pcieportdrv\",\n        \"drivers\": [\n          \"pcieport\"\n        ],\n        \"driver_modules\": [\n          \"pcieportdrv\"\n        ],\n        \"module_alias\": \"pci:v00001002d00001478sv00000000sd00000000bc06sc04i00\"\n      },\n      {\n        \"index\": 30,\n        \"attached_to\": 0,\n        \"class_list\": [\n          \"pci\",\n          \"bridge\"\n        ],\n        \"bus_type\": {\n          \"hex\": \"0004\",\n          \"name\": \"PCI\",\n          \"value\": 4\n        },\n        \"slot\": {\n          \"bus\": 0,\n          \"number\": 28\n        },\n        \"base_class\": {\n          \"hex\": \"0006\",\n          \"name\": \"Bridge\",\n          \"value\": 6\n        },\n        \"sub_class\": {\n          \"hex\": \"0004\",\n          \"name\": \"PCI bridge\",\n          \"value\": 4\n        },\n        \"pci_interface\": {\n          \"hex\": \"0000\",\n          \"name\": \"Normal decode\",\n          \"value\": 0\n        },\n        \"vendor\": {\n          \"hex\": \"8086\",\n          \"name\": \"Intel Corporation\",\n          \"value\": 32902\n        },\n        \"sub_vendor\": {\n          \"hex\": \"1849\",\n          \"value\": 6217\n        },\n        \"device\": {\n          \"hex\": \"7a3b\",\n          \"value\": 31291\n        },\n        \"sub_device\": {\n          \"hex\": \"7a3b\",\n          \"value\": 31291\n        },\n        \"revision\": {\n          \"hex\": \"0011\",\n          \"value\": 17\n        },\n        \"model\": \"Intel PCI bridge\",\n        \"sysfs_id\": \"/devices/pci0000:00/0000:00:1c.3\",\n        \"sysfs_bus_id\": \"0000:00:1c.3\",\n        \"resources\": [\n          {\n            \"type\": \"irq\",\n            \"base\": 123,\n            \"triggered\": 0,\n            \"enabled\": true\n          }\n        ],\n        \"detail\": {\n          \"function\": 3,\n          \"command\": 1031,\n          \"header_type\": 1,\n          \"secondary_bus\": 6,\n          \"irq\": 123,\n          \"prog_if\": 0\n        },\n        \"driver\": \"pcieport\",\n        \"driver_module\": \"pcieportdrv\",\n        \"drivers\": [\n          \"pcieport\"\n        ],\n        \"driver_modules\": [\n          \"pcieportdrv\"\n        ],\n        \"module_alias\": \"pci:v00008086d00007A3Bsv00001849sd00007A3Bbc06sc04i00\"\n      },\n      {\n        \"index\": 33,\n        \"attached_to\": 0,\n        \"class_list\": [\n          \"pci\",\n          \"bridge\"\n        ],\n        \"bus_type\": {\n          \"hex\": \"0004\",\n          \"name\": \"PCI\",\n          \"value\": 4\n        },\n        \"slot\": {\n          \"bus\": 0,\n          \"number\": 0\n        },\n        \"base_class\": {\n          \"hex\": \"0006\",\n          \"name\": \"Bridge\",\n          \"value\": 6\n        },\n        \"sub_class\": {\n          \"hex\": \"0000\",\n          \"name\": \"Host bridge\",\n          \"value\": 0\n        },\n        \"vendor\": {\n          \"hex\": \"8086\",\n          \"name\": \"Intel Corporation\",\n          \"value\": 32902\n        },\n        \"sub_vendor\": {\n          \"hex\": \"1849\",\n          \"value\": 6217\n        },\n        \"device\": {\n          \"hex\": \"4648\",\n          \"value\": 17992\n        },\n        \"sub_device\": {\n          \"hex\": \"4648\",\n          \"value\": 17992\n        },\n        \"revision\": {\n          \"hex\": \"0002\",\n          \"value\": 2\n        },\n        \"model\": \"Intel Host bridge\",\n        \"sysfs_id\": \"/devices/pci0000:00/0000:00:00.0\",\n        \"sysfs_bus_id\": \"0000:00:00.0\",\n        \"detail\": {\n          \"function\": 0,\n          \"command\": 6,\n          \"header_type\": 0,\n          \"secondary_bus\": 0,\n          \"irq\": 0,\n          \"prog_if\": 0\n        },\n        \"module_alias\": \"pci:v00008086d00004648sv00001849sd00004648bc06sc00i00\"\n      },\n      {\n        \"index\": 36,\n        \"attached_to\": 0,\n        \"class_list\": [\n          \"pci\",\n          \"bridge\"\n        ],\n        \"bus_type\": {\n          \"hex\": \"0004\",\n          \"name\": \"PCI\",\n          \"value\": 4\n        },\n        \"slot\": {\n          \"bus\": 0,\n          \"number\": 6\n        },\n        \"base_class\": {\n          \"hex\": \"0006\",\n          \"name\": \"Bridge\",\n          \"value\": 6\n        },\n        \"sub_class\": {\n          \"hex\": \"0004\",\n          \"name\": \"PCI bridge\",\n          \"value\": 4\n        },\n        \"pci_interface\": {\n          \"hex\": \"0000\",\n          \"name\": \"Normal decode\",\n          \"value\": 0\n        },\n        \"vendor\": {\n          \"hex\": \"8086\",\n          \"name\": \"Intel Corporation\",\n          \"value\": 32902\n        },\n        \"device\": {\n          \"hex\": \"464d\",\n          \"value\": 17997\n        },\n        \"revision\": {\n          \"hex\": \"0002\",\n          \"value\": 2\n        },\n        \"model\": \"Intel PCI bridge\",\n        \"sysfs_id\": \"/devices/pci0000:00/0000:00:06.0\",\n        \"sysfs_bus_id\": \"0000:00:06.0\",\n        \"resources\": [\n          {\n            \"type\": \"irq\",\n            \"base\": 121,\n            \"triggered\": 0,\n            \"enabled\": true\n          }\n        ],\n        \"detail\": {\n          \"function\": 0,\n          \"command\": 1031,\n          \"header_type\": 1,\n          \"secondary_bus\": 4,\n          \"irq\": 121,\n          \"prog_if\": 0\n        },\n        \"driver\": \"pcieport\",\n        \"driver_module\": \"pcieportdrv\",\n        \"drivers\": [\n          \"pcieport\"\n        ],\n        \"driver_modules\": [\n          \"pcieportdrv\"\n        ],\n        \"module_alias\": \"pci:v00008086d0000464Dsv00000000sd00000000bc06sc04i00\"\n      },\n      {\n        \"index\": 37,\n        \"attached_to\": 0,\n        \"class_list\": [\n          \"pci\",\n          \"bridge\"\n        ],\n        \"bus_type\": {\n          \"hex\": \"0004\",\n          \"name\": \"PCI\",\n          \"value\": 4\n        },\n        \"slot\": {\n          \"bus\": 0,\n          \"number\": 29\n        },\n        \"base_class\": {\n          \"hex\": \"0006\",\n          \"name\": \"Bridge\",\n          \"value\": 6\n        },\n        \"sub_class\": {\n          \"hex\": \"0004\",\n          \"name\": \"PCI bridge\",\n          \"value\": 4\n        },\n        \"pci_interface\": {\n          \"hex\": \"0000\",\n          \"name\": \"Normal decode\",\n          \"value\": 0\n        },\n        \"vendor\": {\n          \"hex\": \"8086\",\n          \"name\": \"Intel Corporation\",\n          \"value\": 32902\n        },\n        \"sub_vendor\": {\n          \"hex\": \"1849\",\n          \"value\": 6217\n        },\n        \"device\": {\n          \"hex\": \"7a36\",\n          \"value\": 31286\n        },\n        \"sub_device\": {\n          \"hex\": \"7a36\",\n          \"value\": 31286\n        },\n        \"revision\": {\n          \"hex\": \"0011\",\n          \"value\": 17\n        },\n        \"model\": \"Intel PCI bridge\",\n        \"sysfs_id\": \"/devices/pci0000:00/0000:00:1d.0\",\n        \"sysfs_bus_id\": \"0000:00:1d.0\",\n        \"resources\": [\n          {\n            \"type\": \"irq\",\n            \"base\": 124,\n            \"triggered\": 0,\n            \"enabled\": true\n          }\n        ],\n        \"detail\": {\n          \"function\": 0,\n          \"command\": 1031,\n          \"header_type\": 1,\n          \"secondary_bus\": 7,\n          \"irq\": 124,\n          \"prog_if\": 0\n        },\n        \"driver\": \"pcieport\",\n        \"driver_module\": \"pcieportdrv\",\n        \"drivers\": [\n          \"pcieport\"\n        ],\n        \"driver_modules\": [\n          \"pcieportdrv\"\n        ],\n        \"module_alias\": \"pci:v00008086d00007A36sv00001849sd00007A36bc06sc04i00\"\n      }\n    ],\n    \"cpu\": [\n      {\n        \"architecture\": \"x86_64\",\n        \"vendor_name\": \"GenuineIntel\",\n        \"model_name\": \"12th Gen Intel(R) Core(TM) i5-12600KF\",\n        \"family\": 6,\n        \"model\": 151,\n        \"stepping\": 2,\n        \"features\": [\n          \"fpu\",\n          \"vme\",\n          \"de\",\n          \"pse\",\n          \"tsc\",\n          \"msr\",\n          \"pae\",\n          \"mce\",\n          \"cx8\",\n          \"apic\",\n          \"sep\",\n          \"mtrr\",\n          \"pge\",\n          \"mca\",\n          \"cmov\",\n          \"pat\",\n          \"pse36\",\n          \"clflush\",\n          \"dts\",\n          \"acpi\",\n          \"mmx\",\n          \"fxsr\",\n          \"sse\",\n          \"sse2\",\n          \"ss\",\n          \"ht\",\n          \"tm\",\n          \"pbe\",\n          \"syscall\",\n          \"nx\",\n          \"pdpe1gb\",\n          \"rdtscp\",\n          \"lm\",\n          \"constant_tsc\",\n          \"art\",\n          \"arch_perfmon\",\n          \"pebs\",\n          \"bts\",\n          \"rep_good\",\n          \"nopl\",\n          \"xtopology\",\n          \"nonstop_tsc\",\n          \"cpuid\",\n          \"aperfmperf\",\n          \"tsc_known_freq\",\n          \"pni\",\n          \"pclmulqdq\",\n          \"dtes64\",\n          \"monitor\",\n          \"ds_cpl\",\n          \"vmx\",\n          \"est\",\n          \"tm2\",\n          \"ssse3\",\n          \"sdbg\",\n          \"fma\",\n          \"cx16\",\n          \"xtpr\",\n          \"pdcm\",\n          \"pcid\",\n          \"sse4_1\",\n          \"sse4_2\",\n          \"x2apic\",\n          \"movbe\",\n          \"popcnt\",\n          \"tsc_deadline_timer\",\n          \"aes\",\n          \"xsave\",\n          \"avx\",\n          \"f16c\",\n          \"rdrand\",\n          \"lahf_lm\",\n          \"abm\",\n          \"3dnowprefetch\",\n          \"cpuid_fault\",\n          \"epb\",\n          \"ssbd\",\n          \"ibrs\",\n          \"ibpb\",\n          \"stibp\",\n          \"ibrs_enhanced\",\n          \"tpr_shadow\",\n          \"flexpriority\",\n          \"ept\",\n          \"vpid\",\n          \"ept_ad\",\n          \"fsgsbase\",\n          \"tsc_adjust\",\n          \"bmi1\",\n          \"avx2\",\n          \"smep\",\n          \"bmi2\",\n          \"erms\",\n          \"invpcid\",\n          \"rdseed\",\n          \"adx\",\n          \"smap\",\n          \"clflushopt\",\n          \"clwb\",\n          \"intel_pt\",\n          \"sha_ni\",\n          \"xsaveopt\",\n          \"xsavec\",\n          \"xgetbv1\",\n          \"xsaves\",\n          \"split_lock_detect\",\n          \"user_shstk\",\n          \"avx_vnni\",\n          \"dtherm\",\n          \"ida\",\n          \"arat\",\n          \"pln\",\n          \"pts\",\n          \"hwp\",\n          \"hwp_notify\",\n          \"hwp_act_window\",\n          \"hwp_epp\",\n          \"hwp_pkg_req\",\n          \"hfi\",\n          \"vnmi\",\n          \"umip\",\n          \"pku\",\n          \"ospke\",\n          \"waitpkg\",\n          \"gfni\",\n          \"vaes\",\n          \"vpclmulqdq\",\n          \"rdpid\",\n          \"movdiri\",\n          \"movdir64b\",\n          \"fsrm\",\n          \"md_clear\",\n          \"serialize\",\n          \"arch_lbr\",\n          \"ibt\",\n          \"flush_l1d\",\n          \"arch_capabilities\"\n        ],\n        \"bugs\": [\n          \"spectre_v1\",\n          \"spectre_v2\",\n          \"spec_store_bypass\",\n          \"swapgs\",\n          \"eibrs_pbrsb\",\n          \"rfds\",\n          \"bhi\"\n        ],\n        \"power_management\": [\n          \"\"\n        ],\n        \"bogo\": 7372.8,\n        \"cache\": 20480,\n        \"units\": 128,\n        \"physical_id\": 0,\n        \"siblings\": 16,\n        \"cores\": 10,\n        \"fpu\": false,\n        \"fpu_exception\": false,\n        \"cpuid_level\": 32,\n        \"write_protect\": false,\n        \"clflush_size\": 64,\n        \"cache_alignment\": 64,\n        \"address_sizes\": {\n          \"physical\": \"0x27\",\n          \"virtual\": \"0x30\"\n        }\n      }\n    ],\n    \"disk\": [\n      {\n        \"index\": 45,\n        \"attached_to\": 40,\n        \"class_list\": [\n          \"disk\",\n          \"block_device\",\n          \"nvme\"\n        ],\n        \"bus_type\": {\n          \"hex\": \"0096\",\n          \"name\": \"NVME\",\n          \"value\": 150\n        },\n        \"slot\": {\n          \"bus\": 0,\n          \"number\": 0\n        },\n        \"base_class\": {\n          \"hex\": \"0106\",\n          \"name\": \"Mass Storage Device\",\n          \"value\": 262\n        },\n        \"sub_class\": {\n          \"hex\": \"0000\",\n          \"name\": \"Disk\",\n          \"value\": 0\n        },\n        \"vendor\": {\n          \"hex\": \"2646\",\n          \"value\": 9798\n        },\n        \"sub_vendor\": {\n          \"hex\": \"2646\",\n          \"value\": 9798\n        },\n        \"device\": {\n          \"hex\": \"5023\",\n          \"name\": \"KINGSTON SNV2S1000G\",\n          \"value\": 20515\n        },\n        \"sub_device\": {\n          \"hex\": \"5023\",\n          \"value\": 20515\n        },\n        \"serial\": \"50026B778599BFB0\",\n        \"model\": \"KINGSTON SNV2S1000G\",\n        \"sysfs_id\": \"/class/block/nvme0n1\",\n        \"sysfs_bus_id\": \"nvme0\",\n        \"sysfs_device_link\": \"/devices/pci0000:00/0000:00:06.0/0000:04:00.0/nvme/nvme0\",\n        \"unix_device_name\": \"/dev/nvme0n1\",\n        \"unix_device_number\": {\n          \"type\": 98,\n          \"major\": 259,\n          \"minor\": 0,\n          \"range\": 0\n        },\n        \"unix_device_names\": [\n          \"/dev/disk/by-id/nvme-KINGSTON_SNV2S1000G_50026B778599BFB0\",\n          \"/dev/disk/by-id/nvme-KINGSTON_SNV2S1000G_50026B778599BFB0_1\",\n          \"/dev/disk/by-id/nvme-eui.00000000000000000026b778599bfb05\",\n          \"/dev/disk/by-path/pci-0000:04:00.0-nvme-1\",\n          \"/dev/nvme0n1\"\n        ],\n        \"resources\": [\n          {\n            \"type\": \"disk_geo\",\n            \"cylinders\": 953869,\n            \"heads\": 64,\n            \"sectors\": 32,\n            \"size\": \"0x0\",\n            \"geo_type\": \"logical\"\n          },\n          {\n            \"type\": \"size\",\n            \"unit\": \"sectors\",\n            \"value_1\": 1953525168,\n            \"value_2\": 512\n          }\n        ],\n        \"driver\": \"nvme\",\n        \"driver_module\": \"nvme\",\n        \"drivers\": [\n          \"nvme\"\n        ],\n        \"driver_modules\": [\n          \"nvme\"\n        ]\n      },\n      {\n        \"index\": 46,\n        \"attached_to\": 21,\n        \"class_list\": [\n          \"disk\",\n          \"ide\",\n          \"block_device\"\n        ],\n        \"bus_type\": {\n          \"hex\": \"0085\",\n          \"name\": \"IDE\",\n          \"value\": 133\n        },\n        \"slot\": {\n          \"bus\": 6,\n          \"number\": 0\n        },\n        \"base_class\": {\n          \"hex\": \"0106\",\n          \"name\": \"Mass Storage Device\",\n          \"value\": 262\n        },\n        \"sub_class\": {\n          \"hex\": \"0000\",\n          \"name\": \"Disk\",\n          \"value\": 0\n        },\n        \"device\": {\n          \"hex\": \"0000\",\n          \"name\": \"ST3000DM001-1CH1\",\n          \"value\": 0\n        },\n        \"revision\": {\n          \"hex\": \"0000\",\n          \"name\": \"CC27\",\n          \"value\": 0\n        },\n        \"serial\": \"Z1F41ECR\",\n        \"model\": \"ST3000DM001-1CH1\",\n        \"sysfs_id\": \"/class/block/sdb\",\n        \"sysfs_bus_id\": \"6:0:0:0\",\n        \"sysfs_device_link\": \"/devices/pci0000:00/0000:00:17.0/ata7/host6/target6:0:0/6:0:0:0\",\n        \"unix_device_name\": \"/dev/sdb\",\n        \"unix_device_number\": {\n          \"type\": 98,\n          \"major\": 8,\n          \"minor\": 16,\n          \"range\": 16\n        },\n        \"unix_device_names\": [\n          \"/dev/disk/by-id/ata-ST3000DM001-1CH166_Z1F41ECR\",\n          \"/dev/disk/by-id/wwn-0x5000c5006527e1b4\",\n          \"/dev/disk/by-path/pci-0000:00:17.0-ata-7\",\n          \"/dev/disk/by-path/pci-0000:00:17.0-ata-7.0\",\n          \"/dev/disk/by-uuid/14c325e4-846b-4592-b0c4-94941abc7a64\",\n          \"/dev/sdb\"\n        ],\n        \"resources\": [\n          {\n            \"type\": \"disk_geo\",\n            \"cylinders\": 364801,\n            \"heads\": 255,\n            \"sectors\": 63,\n            \"size\": \"0x0\",\n            \"geo_type\": \"logical\"\n          },\n          {\n            \"type\": \"size\",\n            \"unit\": \"sectors\",\n            \"value_1\": 5860533168,\n            \"value_2\": 512\n          }\n        ],\n        \"driver\": \"ahci\",\n        \"driver_module\": \"ahci\",\n        \"drivers\": [\n          \"ahci\",\n          \"sd\"\n        ],\n        \"driver_modules\": [\n          \"ahci\",\n          \"sd_mod\"\n        ]\n      },\n      {\n        \"index\": 47,\n        \"attached_to\": 21,\n        \"class_list\": [\n          \"disk\",\n          \"ide\",\n          \"block_device\"\n        ],\n        \"bus_type\": {\n          \"hex\": \"0085\",\n          \"name\": \"IDE\",\n          \"value\": 133\n        },\n        \"slot\": {\n          \"bus\": 4,\n          \"number\": 0\n        },\n        \"base_class\": {\n          \"hex\": \"0106\",\n          \"name\": \"Mass Storage Device\",\n          \"value\": 262\n        },\n        \"sub_class\": {\n          \"hex\": \"0000\",\n          \"name\": \"Disk\",\n          \"value\": 0\n        },\n        \"vendor\": {\n          \"hex\": \"0000\",\n          \"name\": \"Samsung\",\n          \"value\": 0\n        },\n        \"device\": {\n          \"hex\": \"0000\",\n          \"name\": \"SSD 860\",\n          \"value\": 0\n        },\n        \"revision\": {\n          \"hex\": \"0000\",\n          \"name\": \"2B6Q\",\n          \"value\": 0\n        },\n        \"serial\": \"S3Z1NB0KC17827D\",\n        \"model\": \"Samsung SSD 860\",\n        \"sysfs_id\": \"/class/block/sda\",\n        \"sysfs_bus_id\": \"4:0:0:0\",\n        \"sysfs_device_link\": \"/devices/pci0000:00/0000:00:17.0/ata5/host4/target4:0:0/4:0:0:0\",\n        \"unix_device_name\": \"/dev/sda\",\n        \"unix_device_number\": {\n          \"type\": 98,\n          \"major\": 8,\n          \"minor\": 0,\n          \"range\": 16\n        },\n        \"unix_device_names\": [\n          \"/dev/disk/by-id/ata-Samsung_SSD_860_EVO_500GB_S3Z1NB0KC17827D\",\n          \"/dev/disk/by-id/wwn-0x5002538e40abbf24\",\n          \"/dev/disk/by-path/pci-0000:00:17.0-ata-5\",\n          \"/dev/disk/by-path/pci-0000:00:17.0-ata-5.0\",\n          \"/dev/sda\"\n        ],\n        \"resources\": [\n          {\n            \"type\": \"disk_geo\",\n            \"cylinders\": 60801,\n            \"heads\": 255,\n            \"sectors\": 63,\n            \"size\": \"0x0\",\n            \"geo_type\": \"logical\"\n          },\n          {\n            \"type\": \"size\",\n            \"unit\": \"sectors\",\n            \"value_1\": 976773168,\n            \"value_2\": 512\n          }\n        ],\n        \"driver\": \"ahci\",\n        \"driver_module\": \"ahci\",\n        \"drivers\": [\n          \"ahci\",\n          \"sd\"\n        ],\n        \"driver_modules\": [\n          \"ahci\",\n          \"sd_mod\"\n        ]\n      }\n    ],\n    \"graphics_card\": [\n      {\n        \"index\": 20,\n        \"attached_to\": 24,\n        \"class_list\": [\n          \"graphics_card\",\n          \"pci\"\n        ],\n        \"bus_type\": {\n          \"hex\": \"0004\",\n          \"name\": \"PCI\",\n          \"value\": 4\n        },\n        \"slot\": {\n          \"bus\": 3,\n          \"number\": 0\n        },\n        \"base_class\": {\n          \"hex\": \"0003\",\n          \"name\": \"Display controller\",\n          \"value\": 3\n        },\n        \"sub_class\": {\n          \"hex\": \"0000\",\n          \"name\": \"VGA compatible controller\",\n          \"value\": 0\n        },\n        \"pci_interface\": {\n          \"hex\": \"0000\",\n          \"name\": \"VGA\",\n          \"value\": 0\n        },\n        \"vendor\": {\n          \"hex\": \"1002\",\n          \"name\": \"ATI Technologies Inc\",\n          \"value\": 4098\n        },\n        \"sub_vendor\": {\n          \"hex\": \"1849\",\n          \"value\": 6217\n        },\n        \"device\": {\n          \"hex\": \"73df\",\n          \"value\": 29663\n        },\n        \"sub_device\": {\n          \"hex\": \"5210\",\n          \"value\": 21008\n        },\n        \"revision\": {\n          \"hex\": \"00c5\",\n          \"value\": 197\n        },\n        \"model\": \"ATI VGA compatible controller\",\n        \"sysfs_id\": \"/devices/pci0000:00/0000:00:01.0/0000:01:00.0/0000:02:00.0/0000:03:00.0\",\n        \"sysfs_bus_id\": \"0000:03:00.0\",\n        \"resources\": [\n          {\n            \"type\": \"io\",\n            \"base\": 16384,\n            \"range\": 256,\n            \"enabled\": true,\n            \"access\": \"read_write\"\n          },\n          {\n            \"type\": \"irq\",\n            \"base\": 171,\n            \"triggered\": 0,\n            \"enabled\": true\n          },\n          {\n            \"type\": \"mem\",\n            \"base\": 1912602624,\n            \"range\": 1048576,\n            \"enabled\": true,\n            \"access\": \"read_write\",\n            \"prefetch\": \"no\"\n          },\n          {\n            \"type\": \"mem\",\n            \"base\": 1913651200,\n            \"range\": 131072,\n            \"enabled\": false,\n            \"access\": \"read_only\",\n            \"prefetch\": \"no\"\n          },\n          {\n            \"type\": \"mem\",\n            \"base\": 274877906944,\n            \"range\": 17179869184,\n            \"enabled\": true,\n            \"access\": \"read_only\",\n            \"prefetch\": \"no\"\n          },\n          {\n            \"type\": \"mem\",\n            \"base\": 292057776128,\n            \"range\": 268435456,\n            \"enabled\": true,\n            \"access\": \"read_only\",\n            \"prefetch\": \"no\"\n          }\n        ],\n        \"detail\": {\n          \"function\": 0,\n          \"command\": 1031,\n          \"header_type\": 0,\n          \"secondary_bus\": 0,\n          \"irq\": 171,\n          \"prog_if\": 0\n        },\n        \"driver\": \"amdgpu\",\n        \"driver_module\": \"amdgpu\",\n        \"drivers\": [\n          \"amdgpu\"\n        ],\n        \"driver_modules\": [\n          \"amdgpu\"\n        ],\n        \"module_alias\": \"pci:v00001002d000073DFsv00001849sd00005210bc03sc00i00\"\n      }\n    ],\n    \"hub\": [\n      {\n        \"index\": 50,\n        \"attached_to\": 57,\n        \"class_list\": [\n          \"usb\",\n          \"hub\"\n        ],\n        \"bus_type\": {\n          \"hex\": \"0086\",\n          \"name\": \"USB\",\n          \"value\": 134\n        },\n        \"slot\": {\n          \"bus\": 0,\n          \"number\": 0\n        },\n        \"base_class\": {\n          \"hex\": \"010a\",\n          \"name\": \"Hub\",\n          \"value\": 266\n        },\n        \"vendor\": {\n          \"hex\": \"174c\",\n          \"name\": \"Asmedia\",\n          \"value\": 5964\n        },\n        \"device\": {\n          \"hex\": \"2074\",\n          \"name\": \"ASM107x\",\n          \"value\": 8308\n        },\n        \"revision\": {\n          \"hex\": \"0000\",\n          \"name\": \"2.00\",\n          \"value\": 0\n        },\n        \"model\": \"Asmedia ASM107x\",\n        \"sysfs_id\": \"/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.0\",\n        \"sysfs_bus_id\": \"1-2:1.0\",\n        \"resources\": [\n          {\n            \"type\": \"baud\",\n            \"speed\": 480000000,\n            \"bits\": 0,\n            \"stop_bits\": 0,\n            \"parity\": 0,\n            \"handshake\": 0\n          }\n        ],\n        \"detail\": {\n          \"device_class\": {\n            \"hex\": \"0009\",\n            \"name\": \"hub\",\n            \"value\": 9\n          },\n          \"device_subclass\": {\n            \"hex\": \"0000\",\n            \"name\": \"per_interface\",\n            \"value\": 0\n          },\n          \"device_protocol\": 2,\n          \"interface_class\": {\n            \"hex\": \"0009\",\n            \"name\": \"hub\",\n            \"value\": 9\n          },\n          \"interface_subclass\": {\n            \"hex\": \"0000\",\n            \"name\": \"per_interface\",\n            \"value\": 0\n          },\n          \"interface_protocol\": 2,\n          \"interface_number\": 0,\n          \"interface_alternate_setting\": 1\n        },\n        \"hotplug\": \"usb\",\n        \"driver\": \"hub\",\n        \"driver_module\": \"usbcore\",\n        \"drivers\": [\n          \"hub\"\n        ],\n        \"driver_modules\": [\n          \"usbcore\"\n        ],\n        \"module_alias\": \"usb:v174Cp2074d0200dc09dsc00dp02ic09isc00ip02in00\"\n      },\n      {\n        \"index\": 57,\n        \"attached_to\": 41,\n        \"class_list\": [\n          \"usb\",\n          \"hub\"\n        ],\n        \"bus_type\": {\n          \"hex\": \"0086\",\n          \"name\": \"USB\",\n          \"value\": 134\n        },\n        \"slot\": {\n          \"bus\": 0,\n          \"number\": 0\n        },\n        \"base_class\": {\n          \"hex\": \"010a\",\n          \"name\": \"Hub\",\n          \"value\": 266\n        },\n        \"vendor\": {\n          \"hex\": \"1d6b\",\n          \"name\": \"Linux 6.12.28 xhci-hcd\",\n          \"value\": 7531\n        },\n        \"device\": {\n          \"hex\": \"0002\",\n          \"name\": \"xHCI Host Controller\",\n          \"value\": 2\n        },\n        \"revision\": {\n          \"hex\": \"0000\",\n          \"name\": \"6.12\",\n          \"value\": 0\n        },\n        \"serial\": \"0000:00:14.0\",\n        \"model\": \"Linux 6.12.28 xhci-hcd xHCI Host Controller\",\n        \"sysfs_id\": \"/devices/pci0000:00/0000:00:14.0/usb1/1-0:1.0\",\n        \"sysfs_bus_id\": \"1-0:1.0\",\n        \"resources\": [\n          {\n            \"type\": \"baud\",\n            \"speed\": 480000000,\n            \"bits\": 0,\n            \"stop_bits\": 0,\n            \"parity\": 0,\n            \"handshake\": 0\n          }\n        ],\n        \"detail\": {\n          \"device_class\": {\n            \"hex\": \"0009\",\n            \"name\": \"hub\",\n            \"value\": 9\n          },\n          \"device_subclass\": {\n            \"hex\": \"0000\",\n            \"name\": \"per_interface\",\n            \"value\": 0\n          },\n          \"device_protocol\": 1,\n          \"interface_class\": {\n            \"hex\": \"0009\",\n            \"name\": \"hub\",\n            \"value\": 9\n          },\n          \"interface_subclass\": {\n            \"hex\": \"0000\",\n            \"name\": \"per_interface\",\n            \"value\": 0\n          },\n          \"interface_protocol\": 0,\n          \"interface_number\": 0,\n          \"interface_alternate_setting\": 0\n        },\n        \"hotplug\": \"usb\",\n        \"driver\": \"hub\",\n        \"driver_module\": \"usbcore\",\n        \"drivers\": [\n          \"hub\"\n        ],\n        \"driver_modules\": [\n          \"usbcore\"\n        ],\n        \"module_alias\": \"usb:v1D6Bp0002d0612dc09dsc00dp01ic09isc00ip00in00\"\n      },\n      {\n        \"index\": 60,\n        \"attached_to\": 62,\n        \"class_list\": [\n          \"usb\",\n          \"hub\"\n        ],\n        \"bus_type\": {\n          \"hex\": \"0086\",\n          \"name\": \"USB\",\n          \"value\": 134\n        },\n        \"slot\": {\n          \"bus\": 0,\n          \"number\": 0\n        },\n        \"base_class\": {\n          \"hex\": \"010a\",\n          \"name\": \"Hub\",\n          \"value\": 266\n        },\n        \"vendor\": {\n          \"hex\": \"174c\",\n          \"name\": \"Asmedia\",\n          \"value\": 5964\n        },\n        \"device\": {\n          \"hex\": \"3074\",\n          \"name\": \"ASM107x\",\n          \"value\": 12404\n        },\n        \"revision\": {\n          \"hex\": \"0000\",\n          \"name\": \"2.00\",\n          \"value\": 0\n        },\n        \"model\": \"Asmedia ASM107x\",\n        \"sysfs_id\": \"/devices/pci0000:00/0000:00:14.0/usb2/2-3/2-3:1.0\",\n        \"sysfs_bus_id\": \"2-3:1.0\",\n        \"detail\": {\n          \"device_class\": {\n            \"hex\": \"0009\",\n            \"name\": \"hub\",\n            \"value\": 9\n          },\n          \"device_subclass\": {\n            \"hex\": \"0000\",\n            \"name\": \"per_interface\",\n            \"value\": 0\n          },\n          \"device_protocol\": 3,\n          \"interface_class\": {\n            \"hex\": \"0009\",\n            \"name\": \"hub\",\n            \"value\": 9\n          },\n          \"interface_subclass\": {\n            \"hex\": \"0000\",\n            \"name\": \"per_interface\",\n            \"value\": 0\n          },\n          \"interface_protocol\": 0,\n          \"interface_number\": 0,\n          \"interface_alternate_setting\": 0\n        },\n        \"hotplug\": \"usb\",\n        \"driver\": \"hub\",\n        \"driver_module\": \"usbcore\",\n        \"drivers\": [\n          \"hub\"\n        ],\n        \"driver_modules\": [\n          \"usbcore\"\n        ],\n        \"module_alias\": \"usb:v174Cp3074d0200dc09dsc00dp03ic09isc00ip00in00\"\n      },\n      {\n        \"index\": 62,\n        \"attached_to\": 41,\n        \"class_list\": [\n          \"usb\",\n          \"hub\"\n        ],\n        \"bus_type\": {\n          \"hex\": \"0086\",\n          \"name\": \"USB\",\n          \"value\": 134\n        },\n        \"slot\": {\n          \"bus\": 0,\n          \"number\": 0\n        },\n        \"base_class\": {\n          \"hex\": \"010a\",\n          \"name\": \"Hub\",\n          \"value\": 266\n        },\n        \"vendor\": {\n          \"hex\": \"1d6b\",\n          \"name\": \"Linux 6.12.28 xhci-hcd\",\n          \"value\": 7531\n        },\n        \"device\": {\n          \"hex\": \"0003\",\n          \"name\": \"xHCI Host Controller\",\n          \"value\": 3\n        },\n        \"revision\": {\n          \"hex\": \"0000\",\n          \"name\": \"6.12\",\n          \"value\": 0\n        },\n        \"serial\": \"0000:00:14.0\",\n        \"model\": \"Linux 6.12.28 xhci-hcd xHCI Host Controller\",\n        \"sysfs_id\": \"/devices/pci0000:00/0000:00:14.0/usb2/2-0:1.0\",\n        \"sysfs_bus_id\": \"2-0:1.0\",\n        \"detail\": {\n          \"device_class\": {\n            \"hex\": \"0009\",\n            \"name\": \"hub\",\n            \"value\": 9\n          },\n          \"device_subclass\": {\n            \"hex\": \"0000\",\n            \"name\": \"per_interface\",\n            \"value\": 0\n          },\n          \"device_protocol\": 3,\n          \"interface_class\": {\n            \"hex\": \"0009\",\n            \"name\": \"hub\",\n            \"value\": 9\n          },\n          \"interface_subclass\": {\n            \"hex\": \"0000\",\n            \"name\": \"per_interface\",\n            \"value\": 0\n          },\n          \"interface_protocol\": 0,\n          \"interface_number\": 0,\n          \"interface_alternate_setting\": 0\n        },\n        \"hotplug\": \"usb\",\n        \"driver\": \"hub\",\n        \"driver_module\": \"usbcore\",\n        \"drivers\": [\n          \"hub\"\n        ],\n        \"driver_modules\": [\n          \"usbcore\"\n        ],\n        \"module_alias\": \"usb:v1D6Bp0003d0612dc09dsc00dp03ic09isc00ip00in00\"\n      }\n    ],\n    \"keyboard\": [\n      {\n        \"index\": 59,\n        \"attached_to\": 50,\n        \"class_list\": [\n          \"keyboard\",\n          \"usb\"\n        ],\n        \"bus_type\": {\n          \"hex\": \"0086\",\n          \"name\": \"USB\",\n          \"value\": 134\n        },\n        \"slot\": {\n          \"bus\": 0,\n          \"number\": 0\n        },\n        \"base_class\": {\n          \"hex\": \"0108\",\n          \"name\": \"Keyboard\",\n          \"value\": 264\n        },\n        \"sub_class\": {\n          \"hex\": \"0000\",\n          \"name\": \"Keyboard\",\n          \"value\": 0\n        },\n        \"vendor\": {\n          \"hex\": \"19f5\",\n          \"name\": \"NuPhy\",\n          \"value\": 6645\n        },\n        \"device\": {\n          \"hex\": \"3246\",\n          \"name\": \"NuPhy Air75 V2\",\n          \"value\": 12870\n        },\n        \"revision\": {\n          \"hex\": \"0000\",\n          \"name\": \"1.12\",\n          \"value\": 0\n        },\n        \"model\": \"NuPhy Air75 V2\",\n        \"sysfs_id\": \"/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2.1/1-2.1:1.0\",\n        \"sysfs_bus_id\": \"1-2.1:1.0\",\n        \"unix_device_name\": \"/dev/input/event4\",\n        \"unix_device_number\": {\n          \"type\": 99,\n          \"major\": 13,\n          \"minor\": 68,\n          \"range\": 1\n        },\n        \"unix_device_names\": [\n          \"/dev/input/by-id/usb-NuPhy_NuPhy_Air75_V2-event-kbd\",\n          \"/dev/input/by-path/pci-0000:00:14.0-usb-0:2.1:1.0-event-kbd\",\n          \"/dev/input/by-path/pci-0000:00:14.0-usbv2-0:2.1:1.0-event-kbd\",\n          \"/dev/input/event4\"\n        ],\n        \"resources\": [\n          {\n            \"type\": \"baud\",\n            \"speed\": 12000000,\n            \"bits\": 0,\n            \"stop_bits\": 0,\n            \"parity\": 0,\n            \"handshake\": 0\n          }\n        ],\n        \"detail\": {\n          \"device_class\": {\n            \"hex\": \"0000\",\n            \"name\": \"per_interface\",\n            \"value\": 0\n          },\n          \"device_subclass\": {\n            \"hex\": \"0000\",\n            \"name\": \"per_interface\",\n            \"value\": 0\n          },\n          \"device_protocol\": 0,\n          \"interface_class\": {\n            \"hex\": \"0003\",\n            \"name\": \"hid\",\n            \"value\": 3\n          },\n          \"interface_subclass\": {\n            \"hex\": \"0001\",\n            \"name\": \"audio\",\n            \"value\": 1\n          },\n          \"interface_protocol\": 1,\n          \"interface_number\": 0,\n          \"interface_alternate_setting\": 0\n        },\n        \"hotplug\": \"usb\",\n        \"driver\": \"usbhid\",\n        \"driver_module\": \"usbhid\",\n        \"drivers\": [\n          \"usbhid\"\n        ],\n        \"driver_modules\": [\n          \"usbhid\"\n        ],\n        \"driver_info\": {\n          \"type\": \"keyboard\",\n          \"xkb_rules\": \"xfree86\",\n          \"xkb_model\": \"pc104\"\n        },\n        \"module_alias\": \"usb:v19F5p3246d0112dc00dsc00dp00ic03isc01ip01in00\"\n      }\n    ],\n    \"memory\": [\n      {\n        \"index\": 19,\n        \"attached_to\": 0,\n        \"class_list\": [\n          \"memory\"\n        ],\n        \"base_class\": {\n          \"hex\": \"0101\",\n          \"name\": \"Internally Used Class\",\n          \"value\": 257\n        },\n        \"sub_class\": {\n          \"hex\": \"0002\",\n          \"name\": \"Main Memory\",\n          \"value\": 2\n        },\n        \"model\": \"Main Memory\",\n        \"resources\": [\n          {\n            \"type\": \"mem\",\n            \"base\": 0,\n            \"range\": 33395609600,\n            \"enabled\": true,\n            \"access\": \"read_write\",\n            \"prefetch\": \"unknown\"\n          },\n          {\n            \"type\": \"phys_mem\",\n            \"range\": 34359738368\n          }\n        ]\n      }\n    ],\n    \"modem\": [\n      {\n        \"index\": 63,\n        \"attached_to\": 57,\n        \"class_list\": [\n          \"modem\",\n          \"usb\"\n        ],\n        \"bus_type\": {\n          \"hex\": \"0086\",\n          \"name\": \"USB\",\n          \"value\": 134\n        },\n        \"slot\": {\n          \"bus\": 0,\n          \"number\": 0\n        },\n        \"base_class\": {\n          \"hex\": \"0102\",\n          \"name\": \"Modem\",\n          \"value\": 258\n        },\n        \"sub_class\": {\n          \"hex\": \"0000\",\n          \"name\": \"Modem\",\n          \"value\": 0\n        },\n        \"vendor\": {\n          \"hex\": \"1207\",\n          \"name\": \"Tillitis\",\n          \"value\": 4615\n        },\n        \"device\": {\n          \"hex\": \"8887\",\n          \"name\": \"MTA1-USB-V1\",\n          \"value\": 34951\n        },\n        \"revision\": {\n          \"hex\": \"0000\",\n          \"name\": \"1.00\",\n          \"value\": 0\n        },\n        \"serial\": \"125736b8-921b-4822-8d3b-3b7b841e89a7\",\n        \"model\": \"Tillitis MTA1-USB-V1\",\n        \"sysfs_id\": \"/devices/pci0000:00/0000:00:14.0/usb1/1-5/1-5:1.0\",\n        \"sysfs_bus_id\": \"1-5:1.0\",\n        \"unix_device_name\": \"/dev/ttyACM0\",\n        \"unix_device_names\": [\n          \"/dev/serial/by-id/usb-Tillitis_MTA1-USB-V1_125736b8-921b-4822-8d3b-3b7b841e89a7-if00\",\n          \"/dev/serial/by-path/pci-0000:00:14.0-usb-0:5:1.0\",\n          \"/dev/serial/by-path/pci-0000:00:14.0-usbv2-0:5:1.0\",\n          \"/dev/ttyACM0\"\n        ],\n        \"resources\": [\n          {\n            \"type\": \"baud\",\n            \"speed\": 12000000,\n            \"bits\": 0,\n            \"stop_bits\": 0,\n            \"parity\": 0,\n            \"handshake\": 0\n          }\n        ],\n        \"detail\": {\n          \"device_class\": {\n            \"hex\": \"0002\",\n            \"name\": \"comm\",\n            \"value\": 2\n          },\n          \"device_subclass\": {\n            \"hex\": \"0000\",\n            \"name\": \"per_interface\",\n            \"value\": 0\n          },\n          \"device_protocol\": 0,\n          \"interface_class\": {\n            \"hex\": \"0002\",\n            \"name\": \"comm\",\n            \"value\": 2\n          },\n          \"interface_subclass\": {\n            \"hex\": \"0002\",\n            \"name\": \"comm\",\n            \"value\": 2\n          },\n          \"interface_protocol\": 1,\n          \"interface_number\": 0,\n          \"interface_alternate_setting\": 0\n        },\n        \"hotplug\": \"usb\",\n        \"driver\": \"cdc_acm\",\n        \"driver_module\": \"cdc_acm\",\n        \"drivers\": [\n          \"cdc_acm\"\n        ],\n        \"driver_modules\": [\n          \"cdc_acm\"\n        ],\n        \"module_alias\": \"usb:v1207p8887d0100dc02dsc00dp00ic02isc02ip01in00\"\n      }\n    ],\n    \"monitor\": [\n      {\n        \"index\": 43,\n        \"attached_to\": 20,\n        \"class_list\": [\n          \"monitor\"\n        ],\n        \"base_class\": {\n          \"hex\": \"0100\",\n          \"name\": \"Monitor\",\n          \"value\": 256\n        },\n        \"sub_class\": {\n          \"hex\": \"0002\",\n          \"name\": \"LCD Monitor\",\n          \"value\": 2\n        },\n        \"vendor\": {\n          \"hex\": \"10ac\",\n          \"name\": \"DELL\",\n          \"value\": 4268\n        },\n        \"device\": {\n          \"hex\": \"d177\",\n          \"name\": \"DELL G2724D\",\n          \"value\": 53623\n        },\n        \"serial\": \"5FS94V3\",\n        \"model\": \"DELL G2724D\",\n        \"resources\": [\n          {\n            \"type\": \"monitor\",\n            \"width\": 1024,\n            \"height\": 768,\n            \"vertical_frequency\": 60,\n            \"interlaced\": false\n          },\n          {\n            \"type\": \"monitor\",\n            \"width\": 1024,\n            \"height\": 768,\n            \"vertical_frequency\": 75,\n            \"interlaced\": false\n          },\n          {\n            \"type\": \"monitor\",\n            \"width\": 1152,\n            \"height\": 864,\n            \"vertical_frequency\": 75,\n            \"interlaced\": false\n          },\n          {\n            \"type\": \"monitor\",\n            \"width\": 1280,\n            \"height\": 1024,\n            \"vertical_frequency\": 60,\n            \"interlaced\": false\n          },\n          {\n            \"type\": \"monitor\",\n            \"width\": 1280,\n            \"height\": 1024,\n            \"vertical_frequency\": 75,\n            \"interlaced\": false\n          },\n          {\n            \"type\": \"monitor\",\n            \"width\": 1280,\n            \"height\": 720,\n            \"vertical_frequency\": 60,\n            \"interlaced\": false\n          },\n          {\n            \"type\": \"monitor\",\n            \"width\": 1280,\n            \"height\": 960,\n            \"vertical_frequency\": 60,\n            \"interlaced\": false\n          },\n          {\n            \"type\": \"monitor\",\n            \"width\": 2560,\n            \"height\": 1440,\n            \"vertical_frequency\": 60,\n            \"interlaced\": false\n          },\n          {\n            \"type\": \"monitor\",\n            \"width\": 640,\n            \"height\": 480,\n            \"vertical_frequency\": 60,\n            \"interlaced\": false\n          },\n          {\n            \"type\": \"monitor\",\n            \"width\": 640,\n            \"height\": 480,\n            \"vertical_frequency\": 75,\n            \"interlaced\": false\n          },\n          {\n            \"type\": \"monitor\",\n            \"width\": 720,\n            \"height\": 400,\n            \"vertical_frequency\": 70,\n            \"interlaced\": false\n          },\n          {\n            \"type\": \"monitor\",\n            \"width\": 800,\n            \"height\": 600,\n            \"vertical_frequency\": 60,\n            \"interlaced\": false\n          },\n          {\n            \"type\": \"monitor\",\n            \"width\": 800,\n            \"height\": 600,\n            \"vertical_frequency\": 75,\n            \"interlaced\": false\n          },\n          {\n            \"type\": \"size\",\n            \"unit\": \"mm\",\n            \"value_1\": 596,\n            \"value_2\": 335\n          }\n        ],\n        \"detail\": {\n          \"manufacture_year\": 2023,\n          \"manufacture_week\": 50,\n          \"vertical_sync\": {\n            \"min\": 48,\n            \"max\": 165\n          },\n          \"horizontal_sync\": {\n            \"min\": 255,\n            \"max\": 255\n          },\n          \"horizontal_sync_timings\": {\n            \"disp\": 2560,\n            \"sync_start\": 2608,\n            \"sync_end\": 2640,\n            \"total\": 2720\n          },\n          \"vertical_sync_timings\": {\n            \"disp\": 1440,\n            \"sync_start\": 1443,\n            \"sync_end\": 1448,\n            \"total\": 1481\n          },\n          \"clock\": 241500,\n          \"width\": 2560,\n          \"height\": 1440,\n          \"width_millimetres\": 596,\n          \"height_millimetres\": 335,\n          \"horizontal_flag\": 45,\n          \"vertical_flag\": 43,\n          \"vendor\": \"\",\n          \"name\": \"DELL G2724D\"\n        },\n        \"driver_info\": {\n          \"type\": \"display\",\n          \"width\": 2560,\n          \"height\": 1440,\n          \"vertical_sync\": {\n            \"min\": 48,\n            \"max\": 165\n          },\n          \"horizontal_sync\": {\n            \"min\": 255,\n            \"max\": 255\n          },\n          \"bandwidth\": 0,\n          \"horizontal_sync_timings\": {\n            \"disp\": 2560,\n            \"sync_start\": 2608,\n            \"sync_end\": 2640,\n            \"total\": 2720\n          },\n          \"vertical_sync_timings\": {\n            \"disp\": 1440,\n            \"sync_start\": 1443,\n            \"sync_end\": 1448,\n            \"total\": 1481\n          },\n          \"horizontal_flag\": 45,\n          \"vertical_flag\": 43\n        }\n      }\n    ],\n    \"mouse\": [\n      {\n        \"index\": 55,\n        \"attached_to\": 57,\n        \"class_list\": [\n          \"mouse\",\n          \"usb\"\n        ],\n        \"bus_type\": {\n          \"hex\": \"0086\",\n          \"name\": \"USB\",\n          \"value\": 134\n        },\n        \"slot\": {\n          \"bus\": 0,\n          \"number\": 0\n        },\n        \"base_class\": {\n          \"hex\": \"0105\",\n          \"name\": \"Mouse\",\n          \"value\": 261\n        },\n        \"sub_class\": {\n          \"hex\": \"0003\",\n          \"name\": \"USB Mouse\",\n          \"value\": 3\n        },\n        \"vendor\": {\n          \"hex\": \"1532\",\n          \"name\": \"Razer\",\n          \"value\": 5426\n        },\n        \"device\": {\n          \"hex\": \"005c\",\n          \"name\": \"Razer DeathAdder Elite\",\n          \"value\": 92\n        },\n        \"revision\": {\n          \"hex\": \"0000\",\n          \"name\": \"2.00\",\n          \"value\": 0\n        },\n        \"compat_vendor\": \"Unknown\",\n        \"compat_device\": \"Generic USB Mouse\",\n        \"model\": \"Razer DeathAdder Elite\",\n        \"sysfs_id\": \"/devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3:1.0\",\n        \"sysfs_bus_id\": \"1-3:1.0\",\n        \"unix_device_name\": \"/dev/input/mice\",\n        \"unix_device_number\": {\n          \"type\": 99,\n          \"major\": 13,\n          \"minor\": 63,\n          \"range\": 1\n        },\n        \"unix_device_names\": [\n          \"/dev/input/mice\"\n        ],\n        \"unix_device_name2\": \"/dev/input/mouse0\",\n        \"unix_device_number2\": {\n          \"type\": 99,\n          \"major\": 13,\n          \"minor\": 32,\n          \"range\": 1\n        },\n        \"resources\": [\n          {\n            \"type\": \"baud\",\n            \"speed\": 12000000,\n            \"bits\": 0,\n            \"stop_bits\": 0,\n            \"parity\": 0,\n            \"handshake\": 0\n          }\n        ],\n        \"detail\": {\n          \"device_class\": {\n            \"hex\": \"0000\",\n            \"name\": \"per_interface\",\n            \"value\": 0\n          },\n          \"device_subclass\": {\n            \"hex\": \"0000\",\n            \"name\": \"per_interface\",\n            \"value\": 0\n          },\n          \"device_protocol\": 0,\n          \"interface_class\": {\n            \"hex\": \"0003\",\n            \"name\": \"hid\",\n            \"value\": 3\n          },\n          \"interface_subclass\": {\n            \"hex\": \"0001\",\n            \"name\": \"audio\",\n            \"value\": 1\n          },\n          \"interface_protocol\": 2,\n          \"interface_number\": 0,\n          \"interface_alternate_setting\": 0\n        },\n        \"hotplug\": \"usb\",\n        \"driver\": \"usbhid\",\n        \"driver_module\": \"usbhid\",\n        \"drivers\": [\n          \"usbhid\"\n        ],\n        \"driver_modules\": [\n          \"usbhid\"\n        ],\n        \"driver_info\": {\n          \"type\": \"mouse\",\n          \"db_entry_0\": [\n            \"explorerps/2\",\n            \"exps2\"\n          ],\n          \"xf86\": \"explorerps/2\",\n          \"gpm\": \"exps2\",\n          \"buttons\": -1,\n          \"wheels\": -1\n        },\n        \"module_alias\": \"usb:v1532p005Cd0200dc00dsc00dp00ic03isc01ip02in00\"\n      },\n      {\n        \"index\": 56,\n        \"attached_to\": 50,\n        \"class_list\": [\n          \"mouse\",\n          \"usb\"\n        ],\n        \"bus_type\": {\n          \"hex\": \"0086\",\n          \"name\": \"USB\",\n          \"value\": 134\n        },\n        \"slot\": {\n          \"bus\": 0,\n          \"number\": 0\n        },\n        \"base_class\": {\n          \"hex\": \"0105\",\n          \"name\": \"Mouse\",\n          \"value\": 261\n        },\n        \"sub_class\": {\n          \"hex\": \"0003\",\n          \"name\": \"USB Mouse\",\n          \"value\": 3\n        },\n        \"vendor\": {\n          \"hex\": \"19f5\",\n          \"name\": \"NuPhy\",\n          \"value\": 6645\n        },\n        \"device\": {\n          \"hex\": \"3246\",\n          \"name\": \"NuPhy Air75 V2\",\n          \"value\": 12870\n        },\n        \"revision\": {\n          \"hex\": \"0000\",\n          \"name\": \"1.12\",\n          \"value\": 0\n        },\n        \"compat_vendor\": \"Unknown\",\n        \"compat_device\": \"Generic USB Mouse\",\n        \"model\": \"NuPhy Air75 V2\",\n        \"sysfs_id\": \"/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2.1/1-2.1:1.2\",\n        \"sysfs_bus_id\": \"1-2.1:1.2\",\n        \"unix_device_name\": \"/dev/input/mice\",\n        \"unix_device_number\": {\n          \"type\": 99,\n          \"major\": 13,\n          \"minor\": 63,\n          \"range\": 1\n        },\n        \"unix_device_names\": [\n          \"/dev/input/mice\"\n        ],\n        \"unix_device_name2\": \"/dev/input/mouse1\",\n        \"unix_device_number2\": {\n          \"type\": 99,\n          \"major\": 13,\n          \"minor\": 33,\n          \"range\": 1\n        },\n        \"resources\": [\n          {\n            \"type\": \"baud\",\n            \"speed\": 12000000,\n            \"bits\": 0,\n            \"stop_bits\": 0,\n            \"parity\": 0,\n            \"handshake\": 0\n          }\n        ],\n        \"detail\": {\n          \"device_class\": {\n            \"hex\": \"0000\",\n            \"name\": \"per_interface\",\n            \"value\": 0\n          },\n          \"device_subclass\": {\n            \"hex\": \"0000\",\n            \"name\": \"per_interface\",\n            \"value\": 0\n          },\n          \"device_protocol\": 0,\n          \"interface_class\": {\n            \"hex\": \"0003\",\n            \"name\": \"hid\",\n            \"value\": 3\n          },\n          \"interface_subclass\": {\n            \"hex\": \"0000\",\n            \"name\": \"per_interface\",\n            \"value\": 0\n          },\n          \"interface_protocol\": 0,\n          \"interface_number\": 2,\n          \"interface_alternate_setting\": 0\n        },\n        \"hotplug\": \"usb\",\n        \"driver\": \"usbhid\",\n        \"driver_module\": \"usbhid\",\n        \"drivers\": [\n          \"usbhid\"\n        ],\n        \"driver_modules\": [\n          \"usbhid\"\n        ],\n        \"driver_info\": {\n          \"type\": \"mouse\",\n          \"db_entry_0\": [\n            \"explorerps/2\",\n            \"exps2\"\n          ],\n          \"xf86\": \"explorerps/2\",\n          \"gpm\": \"exps2\",\n          \"buttons\": -1,\n          \"wheels\": -1\n        },\n        \"module_alias\": \"usb:v19F5p3246d0112dc00dsc00dp00ic03isc00ip00in02\"\n      }\n    ],\n    \"network_controller\": [\n      {\n        \"index\": 26,\n        \"attached_to\": 0,\n        \"class_list\": [\n          \"network_controller\",\n          \"pci\",\n          \"wlan_card\"\n        ],\n        \"bus_type\": {\n          \"hex\": \"0004\",\n          \"name\": \"PCI\",\n          \"value\": 4\n        },\n        \"slot\": {\n          \"bus\": 0,\n          \"number\": 20\n        },\n        \"base_class\": {\n          \"hex\": \"0002\",\n          \"name\": \"Network controller\",\n          \"value\": 2\n        },\n        \"sub_class\": {\n          \"hex\": \"0082\",\n          \"name\": \"WLAN controller\",\n          \"value\": 130\n        },\n        \"vendor\": {\n          \"hex\": \"8086\",\n          \"name\": \"Intel Corporation\",\n          \"value\": 32902\n        },\n        \"sub_vendor\": {\n          \"hex\": \"8086\",\n          \"name\": \"Intel Corporation\",\n          \"value\": 32902\n        },\n        \"device\": {\n          \"hex\": \"7a70\",\n          \"value\": 31344\n        },\n        \"sub_device\": {\n          \"hex\": \"0094\",\n          \"value\": 148\n        },\n        \"revision\": {\n          \"hex\": \"0011\",\n          \"value\": 17\n        },\n        \"model\": \"Intel WLAN controller\",\n        \"sysfs_id\": \"/devices/pci0000:00/0000:00:14.3\",\n        \"sysfs_bus_id\": \"0000:00:14.3\",\n        \"unix_device_name\": \"wlp0s20f3\",\n        \"unix_device_names\": [\n          \"wlp0s20f3\"\n        ],\n        \"resources\": [\n          {\n            \"type\": \"hwaddr\",\n            \"address\": 99\n          },\n          {\n            \"type\": \"irq\",\n            \"base\": 18,\n            \"triggered\": 0,\n            \"enabled\": true\n          },\n          {\n            \"type\": \"mem\",\n            \"base\": 292361945088,\n            \"range\": 16384,\n            \"enabled\": true,\n            \"access\": \"read_write\",\n            \"prefetch\": \"no\"\n          },\n          {\n            \"type\": \"phwaddr\",\n            \"address\": 99\n          },\n          {\n            \"type\": \"wlan\",\n            \"channels\": [\n              \"1\",\n              \"2\",\n              \"3\",\n              \"4\",\n              \"5\",\n              \"6\",\n              \"7\",\n              \"8\",\n              \"9\",\n              \"10\",\n              \"11\",\n              \"12\",\n              \"13\",\n              \"14\",\n              \"36\",\n              \"40\",\n              \"44\",\n              \"48\",\n              \"52\",\n              \"56\",\n              \"60\",\n              \"64\",\n              \"68\",\n              \"72\",\n              \"76\",\n              \"80\",\n              \"84\",\n              \"88\",\n              \"92\",\n              \"96\",\n              \"100\",\n              \"104\"\n            ],\n            \"frequencies\": [\n              \"2.412\",\n              \"2.417\",\n              \"2.422\",\n              \"2.427\",\n              \"2.432\",\n              \"2.437\",\n              \"2.442\",\n              \"2.447\",\n              \"2.452\",\n              \"2.457\",\n              \"2.462\",\n              \"2.467\",\n              \"2.472\",\n              \"2.484\",\n              \"5.18\",\n              \"5.2\",\n              \"5.22\",\n              \"5.24\",\n              \"5.26\",\n              \"5.28\",\n              \"5.3\",\n              \"5.32\",\n              \"5.34\",\n              \"5.36\",\n              \"5.38\",\n              \"5.4\",\n              \"5.42\",\n              \"5.44\",\n              \"5.46\",\n              \"5.48\",\n              \"5.5\",\n              \"5.52\"\n            ],\n            \"auth_modes\": [\n              \"open\",\n              \"sharedkey\",\n              \"wpa-psk\",\n              \"wpa-eap\"\n            ],\n            \"enc_modes\": [\n              \"WEP40\",\n              \"WEP104\",\n              \"TKIP\",\n              \"CCMP\"\n            ]\n          }\n        ],\n        \"detail\": {\n          \"function\": 3,\n          \"command\": 1030,\n          \"header_type\": 0,\n          \"secondary_bus\": 0,\n          \"irq\": 18,\n          \"prog_if\": 0\n        },\n        \"driver\": \"iwlwifi\",\n        \"driver_module\": \"iwlwifi\",\n        \"drivers\": [\n          \"iwlwifi\"\n        ],\n        \"driver_modules\": [\n          \"iwlwifi\"\n        ],\n        \"module_alias\": \"pci:v00008086d00007A70sv00008086sd00000094bc02sc80i00\"\n      },\n      {\n        \"index\": 34,\n        \"attached_to\": 30,\n        \"class_list\": [\n          \"network_controller\",\n          \"pci\"\n        ],\n        \"bus_type\": {\n          \"hex\": \"0004\",\n          \"name\": \"PCI\",\n          \"value\": 4\n        },\n        \"slot\": {\n          \"bus\": 6,\n          \"number\": 0\n        },\n        \"base_class\": {\n          \"hex\": \"0002\",\n          \"name\": \"Network controller\",\n          \"value\": 2\n        },\n        \"sub_class\": {\n          \"hex\": \"0000\",\n          \"name\": \"Ethernet controller\",\n          \"value\": 0\n        },\n        \"vendor\": {\n          \"hex\": \"10ec\",\n          \"value\": 4332\n        },\n        \"sub_vendor\": {\n          \"hex\": \"1849\",\n          \"value\": 6217\n        },\n        \"device\": {\n          \"hex\": \"8125\",\n          \"value\": 33061\n        },\n        \"sub_device\": {\n          \"hex\": \"8125\",\n          \"value\": 33061\n        },\n        \"revision\": {\n          \"hex\": \"0005\",\n          \"value\": 5\n        },\n        \"model\": \"Ethernet controller\",\n        \"sysfs_id\": \"/devices/pci0000:00/0000:00:1c.3/0000:06:00.0\",\n        \"sysfs_bus_id\": \"0000:06:00.0\",\n        \"unix_device_name\": \"enp6s0\",\n        \"unix_device_names\": [\n          \"enp6s0\"\n        ],\n        \"resources\": [\n          {\n            \"type\": \"hwaddr\",\n            \"address\": 57\n          },\n          {\n            \"type\": \"io\",\n            \"base\": 12288,\n            \"range\": 256,\n            \"enabled\": true,\n            \"access\": \"read_write\"\n          },\n          {\n            \"type\": \"irq\",\n            \"base\": 19,\n            \"triggered\": 0,\n            \"enabled\": true\n          },\n          {\n            \"type\": \"mem\",\n            \"base\": 1915748352,\n            \"range\": 65536,\n            \"enabled\": true,\n            \"access\": \"read_write\",\n            \"prefetch\": \"no\"\n          },\n          {\n            \"type\": \"mem\",\n            \"base\": 1915813888,\n            \"range\": 16384,\n            \"enabled\": true,\n            \"access\": \"read_write\",\n            \"prefetch\": \"no\"\n          },\n          {\n            \"type\": \"phwaddr\",\n            \"address\": 57\n          }\n        ],\n        \"detail\": {\n          \"function\": 0,\n          \"command\": 1031,\n          \"header_type\": 0,\n          \"secondary_bus\": 0,\n          \"irq\": 19,\n          \"prog_if\": 0\n        },\n        \"driver\": \"r8169\",\n        \"driver_module\": \"r8169\",\n        \"drivers\": [\n          \"r8169\"\n        ],\n        \"driver_modules\": [\n          \"r8169\"\n        ],\n        \"module_alias\": \"pci:v000010ECd00008125sv00001849sd00008125bc02sc00i00\"\n      }\n    ],\n    \"network_interface\": [\n      {\n        \"index\": 65,\n        \"attached_to\": 0,\n        \"class_list\": [\n          \"network_interface\"\n        ],\n        \"base_class\": {\n          \"hex\": \"0107\",\n          \"name\": \"Network Interface\",\n          \"value\": 263\n        },\n        \"sub_class\": {\n          \"hex\": \"0000\",\n          \"name\": \"Loopback\",\n          \"value\": 0\n        },\n        \"model\": \"Loopback network interface\",\n        \"sysfs_id\": \"/class/net/lo\",\n        \"unix_device_name\": \"lo\",\n        \"unix_device_names\": [\n          \"lo\"\n        ]\n      },\n      {\n        \"index\": 67,\n        \"attached_to\": 34,\n        \"class_list\": [\n          \"network_interface\"\n        ],\n        \"base_class\": {\n          \"hex\": \"0107\",\n          \"name\": \"Network Interface\",\n          \"value\": 263\n        },\n        \"sub_class\": {\n          \"hex\": \"0001\",\n          \"name\": \"Ethernet\",\n          \"value\": 1\n        },\n        \"model\": \"Ethernet network interface\",\n        \"sysfs_id\": \"/class/net/enp6s0\",\n        \"sysfs_device_link\": \"/devices/pci0000:00/0000:00:1c.3/0000:06:00.0\",\n        \"unix_device_name\": \"enp6s0\",\n        \"unix_device_names\": [\n          \"enp6s0\"\n        ],\n        \"resources\": [\n          {\n            \"type\": \"hwaddr\",\n            \"address\": 57\n          },\n          {\n            \"type\": \"phwaddr\",\n            \"address\": 57\n          }\n        ],\n        \"driver\": \"r8169\",\n        \"driver_module\": \"r8169\",\n        \"drivers\": [\n          \"r8169\"\n        ],\n        \"driver_modules\": [\n          \"r8169\"\n        ]\n      },\n      {\n        \"index\": 70,\n        \"attached_to\": 26,\n        \"class_list\": [\n          \"network_interface\"\n        ],\n        \"base_class\": {\n          \"hex\": \"0107\",\n          \"name\": \"Network Interface\",\n          \"value\": 263\n        },\n        \"sub_class\": {\n          \"hex\": \"0001\",\n          \"name\": \"Ethernet\",\n          \"value\": 1\n        },\n        \"model\": \"Ethernet network interface\",\n        \"sysfs_id\": \"/class/net/wlp0s20f3\",\n        \"sysfs_device_link\": \"/devices/pci0000:00/0000:00:14.3\",\n        \"unix_device_name\": \"wlp0s20f3\",\n        \"unix_device_names\": [\n          \"wlp0s20f3\"\n        ],\n        \"resources\": [\n          {\n            \"type\": \"hwaddr\",\n            \"address\": 99\n          },\n          {\n            \"type\": \"phwaddr\",\n            \"address\": 99\n          }\n        ],\n        \"driver\": \"iwlwifi\",\n        \"driver_module\": \"iwlwifi\",\n        \"drivers\": [\n          \"iwlwifi\"\n        ],\n        \"driver_modules\": [\n          \"iwlwifi\"\n        ]\n      }\n    ],\n    \"pci\": [\n      {\n        \"index\": 27,\n        \"attached_to\": 0,\n        \"class_list\": [\n          \"pci\",\n          \"unknown\"\n        ],\n        \"bus_type\": {\n          \"hex\": \"0004\",\n          \"name\": \"PCI\",\n          \"value\": 4\n        },\n        \"slot\": {\n          \"bus\": 0,\n          \"number\": 22\n        },\n        \"base_class\": {\n          \"hex\": \"0007\",\n          \"name\": \"Communication controller\",\n          \"value\": 7\n        },\n        \"sub_class\": {\n          \"hex\": \"0080\",\n          \"name\": \"Communication controller\",\n          \"value\": 128\n        },\n        \"vendor\": {\n          \"hex\": \"8086\",\n          \"name\": \"Intel Corporation\",\n          \"value\": 32902\n        },\n        \"sub_vendor\": {\n          \"hex\": \"1849\",\n          \"value\": 6217\n        },\n        \"device\": {\n          \"hex\": \"7a68\",\n          \"value\": 31336\n        },\n        \"sub_device\": {\n          \"hex\": \"7a68\",\n          \"value\": 31336\n        },\n        \"revision\": {\n          \"hex\": \"0011\",\n          \"value\": 17\n        },\n        \"model\": \"Intel Communication controller\",\n        \"sysfs_id\": \"/devices/pci0000:00/0000:00:16.0\",\n        \"sysfs_bus_id\": \"0000:00:16.0\",\n        \"resources\": [\n          {\n            \"type\": \"irq\",\n            \"base\": 172,\n            \"triggered\": 0,\n            \"enabled\": true\n          },\n          {\n            \"type\": \"mem\",\n            \"base\": 292361981952,\n            \"range\": 4096,\n            \"enabled\": true,\n            \"access\": \"read_write\",\n            \"prefetch\": \"no\"\n          }\n        ],\n        \"detail\": {\n          \"function\": 0,\n          \"command\": 1030,\n          \"header_type\": 0,\n          \"secondary_bus\": 0,\n          \"irq\": 172,\n          \"prog_if\": 0\n        },\n        \"driver\": \"mei_me\",\n        \"driver_module\": \"mei_me\",\n        \"drivers\": [\n          \"mei_me\"\n        ],\n        \"driver_modules\": [\n          \"mei_me\"\n        ],\n        \"module_alias\": \"pci:v00008086d00007A68sv00001849sd00007A68bc07sc80i00\"\n      },\n      {\n        \"index\": 29,\n        \"attached_to\": 0,\n        \"class_list\": [\n          \"pci\",\n          \"unknown\"\n        ],\n        \"bus_type\": {\n          \"hex\": \"0004\",\n          \"name\": \"PCI\",\n          \"value\": 4\n        },\n        \"slot\": {\n          \"bus\": 0,\n          \"number\": 31\n        },\n        \"base_class\": {\n          \"hex\": \"000c\",\n          \"name\": \"Serial bus controller\",\n          \"value\": 12\n        },\n        \"sub_class\": {\n          \"hex\": \"0080\",\n          \"value\": 128\n        },\n        \"vendor\": {\n          \"hex\": \"8086\",\n          \"name\": \"Intel Corporation\",\n          \"value\": 32902\n        },\n        \"sub_vendor\": {\n          \"hex\": \"1849\",\n          \"value\": 6217\n        },\n        \"device\": {\n          \"hex\": \"7a24\",\n          \"value\": 31268\n        },\n        \"sub_device\": {\n          \"hex\": \"7a24\",\n          \"value\": 31268\n        },\n        \"revision\": {\n          \"hex\": \"0011\",\n          \"value\": 17\n        },\n        \"model\": \"Intel Serial bus controller\",\n        \"sysfs_id\": \"/devices/pci0000:00/0000:00:1f.5\",\n        \"sysfs_bus_id\": \"0000:00:1f.5\",\n        \"resources\": [\n          {\n            \"type\": \"mem\",\n            \"base\": 1917861888,\n            \"range\": 4096,\n            \"enabled\": true,\n            \"access\": \"read_write\",\n            \"prefetch\": \"no\"\n          }\n        ],\n        \"detail\": {\n          \"function\": 5,\n          \"command\": 1026,\n          \"header_type\": 0,\n          \"secondary_bus\": 0,\n          \"irq\": 0,\n          \"prog_if\": 0\n        },\n        \"driver\": \"intel-spi\",\n        \"driver_module\": \"spi_intel_pci\",\n        \"drivers\": [\n          \"intel-spi\"\n        ],\n        \"driver_modules\": [\n          \"spi_intel_pci\"\n        ],\n        \"module_alias\": \"pci:v00008086d00007A24sv00001849sd00007A24bc0Csc80i00\"\n      },\n      {\n        \"index\": 35,\n        \"attached_to\": 0,\n        \"class_list\": [\n          \"pci\",\n          \"unknown\"\n        ],\n        \"bus_type\": {\n          \"hex\": \"0004\",\n          \"name\": \"PCI\",\n          \"value\": 4\n        },\n        \"slot\": {\n          \"bus\": 0,\n          \"number\": 21\n        },\n        \"base_class\": {\n          \"hex\": \"000c\",\n          \"name\": \"Serial bus controller\",\n          \"value\": 12\n        },\n        \"sub_class\": {\n          \"hex\": \"0080\",\n          \"value\": 128\n        },\n        \"vendor\": {\n          \"hex\": \"8086\",\n          \"name\": \"Intel Corporation\",\n          \"value\": 32902\n        },\n        \"sub_vendor\": {\n          \"hex\": \"1849\",\n          \"value\": 6217\n        },\n        \"device\": {\n          \"hex\": \"7a4c\",\n          \"value\": 31308\n        },\n        \"sub_device\": {\n          \"hex\": \"7a4c\",\n          \"value\": 31308\n        },\n        \"revision\": {\n          \"hex\": \"0011\",\n          \"value\": 17\n        },\n        \"model\": \"Intel Serial bus controller\",\n        \"sysfs_id\": \"/devices/pci0000:00/0000:00:15.0\",\n        \"sysfs_bus_id\": \"0000:00:15.0\",\n        \"resources\": [\n          {\n            \"type\": \"irq\",\n            \"base\": 27,\n            \"triggered\": 0,\n            \"enabled\": true\n          },\n          {\n            \"type\": \"mem\",\n            \"base\": 292361986048,\n            \"range\": 4096,\n            \"enabled\": true,\n            \"access\": \"read_write\",\n            \"prefetch\": \"no\"\n          }\n        ],\n        \"detail\": {\n          \"function\": 0,\n          \"command\": 6,\n          \"header_type\": 0,\n          \"secondary_bus\": 0,\n          \"irq\": 27,\n          \"prog_if\": 0\n        },\n        \"driver\": \"intel-lpss\",\n        \"driver_module\": \"intel_lpss_pci\",\n        \"drivers\": [\n          \"intel-lpss\"\n        ],\n        \"driver_modules\": [\n          \"intel_lpss_pci\"\n        ],\n        \"module_alias\": \"pci:v00008086d00007A4Csv00001849sd00007A4Cbc0Csc80i00\"\n      },\n      {\n        \"index\": 39,\n        \"attached_to\": 0,\n        \"class_list\": [\n          \"pci\",\n          \"unknown\"\n        ],\n        \"bus_type\": {\n          \"hex\": \"0004\",\n          \"name\": \"PCI\",\n          \"value\": 4\n        },\n        \"slot\": {\n          \"bus\": 0,\n          \"number\": 20\n        },\n        \"base_class\": {\n          \"hex\": \"0005\",\n          \"name\": \"Memory controller\",\n          \"value\": 5\n        },\n        \"sub_class\": {\n          \"hex\": \"0000\",\n          \"name\": \"RAM memory\",\n          \"value\": 0\n        },\n        \"vendor\": {\n          \"hex\": \"8086\",\n          \"name\": \"Intel Corporation\",\n          \"value\": 32902\n        },\n        \"device\": {\n          \"hex\": \"7a27\",\n          \"value\": 31271\n        },\n        \"revision\": {\n          \"hex\": \"0011\",\n          \"value\": 17\n        },\n        \"model\": \"Intel RAM memory\",\n        \"sysfs_id\": \"/devices/pci0000:00/0000:00:14.2\",\n        \"sysfs_bus_id\": \"0000:00:14.2\",\n        \"resources\": [\n          {\n            \"type\": \"mem\",\n            \"base\": 292361961472,\n            \"range\": 16384,\n            \"enabled\": false,\n            \"access\": \"read_write\",\n            \"prefetch\": \"no\"\n          },\n          {\n            \"type\": \"mem\",\n            \"base\": 292361990144,\n            \"range\": 4096,\n            \"enabled\": false,\n            \"access\": \"read_write\",\n            \"prefetch\": \"no\"\n          }\n        ],\n        \"detail\": {\n          \"function\": 2,\n          \"command\": 0,\n          \"header_type\": 0,\n          \"secondary_bus\": 0,\n          \"irq\": 0,\n          \"prog_if\": 0\n        },\n        \"module_alias\": \"pci:v00008086d00007A27sv00000000sd00000000bc05sc00i00\"\n      },\n      {\n        \"index\": 42,\n        \"attached_to\": 0,\n        \"class_list\": [\n          \"pci\",\n          \"unknown\"\n        ],\n        \"bus_type\": {\n          \"hex\": \"0004\",\n          \"name\": \"PCI\",\n          \"value\": 4\n        },\n        \"slot\": {\n          \"bus\": 0,\n          \"number\": 31\n        },\n        \"base_class\": {\n          \"hex\": \"000c\",\n          \"name\": \"Serial bus controller\",\n          \"value\": 12\n        },\n        \"sub_class\": {\n          \"hex\": \"0005\",\n          \"name\": \"SMBus\",\n          \"value\": 5\n        },\n        \"vendor\": {\n          \"hex\": \"8086\",\n          \"name\": \"Intel Corporation\",\n          \"value\": 32902\n        },\n        \"sub_vendor\": {\n          \"hex\": \"1849\",\n          \"value\": 6217\n        },\n        \"device\": {\n          \"hex\": \"7a23\",\n          \"value\": 31267\n        },\n        \"sub_device\": {\n          \"hex\": \"7a23\",\n          \"value\": 31267\n        },\n        \"revision\": {\n          \"hex\": \"0011\",\n          \"value\": 17\n        },\n        \"model\": \"Intel SMBus\",\n        \"sysfs_id\": \"/devices/pci0000:00/0000:00:1f.4\",\n        \"sysfs_bus_id\": \"0000:00:1f.4\",\n        \"resources\": [\n          {\n            \"type\": \"io\",\n            \"base\": 61344,\n            \"range\": 32,\n            \"enabled\": true,\n            \"access\": \"read_write\"\n          },\n          {\n            \"type\": \"irq\",\n            \"base\": 18,\n            \"triggered\": 0,\n            \"enabled\": true\n          },\n          {\n            \"type\": \"mem\",\n            \"base\": 292361977856,\n            \"range\": 256,\n            \"enabled\": true,\n            \"access\": \"read_write\",\n            \"prefetch\": \"no\"\n          }\n        ],\n        \"detail\": {\n          \"function\": 4,\n          \"command\": 3,\n          \"header_type\": 0,\n          \"secondary_bus\": 0,\n          \"irq\": 18,\n          \"prog_if\": 0\n        },\n        \"driver\": \"i801_smbus\",\n        \"driver_module\": \"i2c_i801\",\n        \"drivers\": [\n          \"i801_smbus\"\n        ],\n        \"driver_modules\": [\n          \"i2c_i801\"\n        ],\n        \"module_alias\": \"pci:v00008086d00007A23sv00001849sd00007A23bc0Csc05i00\"\n      }\n    ],\n    \"sound\": [\n      {\n        \"index\": 31,\n        \"attached_to\": 24,\n        \"class_list\": [\n          \"sound\",\n          \"pci\"\n        ],\n        \"bus_type\": {\n          \"hex\": \"0004\",\n          \"name\": \"PCI\",\n          \"value\": 4\n        },\n        \"slot\": {\n          \"bus\": 3,\n          \"number\": 0\n        },\n        \"base_class\": {\n          \"hex\": \"0004\",\n          \"name\": \"Multimedia controller\",\n          \"value\": 4\n        },\n        \"sub_class\": {\n          \"hex\": \"0003\",\n          \"value\": 3\n        },\n        \"vendor\": {\n          \"hex\": \"1002\",\n          \"name\": \"ATI Technologies Inc\",\n          \"value\": 4098\n        },\n        \"sub_vendor\": {\n          \"hex\": \"1002\",\n          \"name\": \"ATI Technologies Inc\",\n          \"value\": 4098\n        },\n        \"device\": {\n          \"hex\": \"ab28\",\n          \"value\": 43816\n        },\n        \"sub_device\": {\n          \"hex\": \"ab28\",\n          \"value\": 43816\n        },\n        \"model\": \"ATI Multimedia controller\",\n        \"sysfs_id\": \"/devices/pci0000:00/0000:00:01.0/0000:01:00.0/0000:02:00.0/0000:03:00.1\",\n        \"sysfs_bus_id\": \"0000:03:00.1\",\n        \"resources\": [\n          {\n            \"type\": \"irq\",\n            \"base\": 191,\n            \"triggered\": 0,\n            \"enabled\": true\n          },\n          {\n            \"type\": \"mem\",\n            \"base\": 1913782272,\n            \"range\": 16384,\n            \"enabled\": true,\n            \"access\": \"read_write\",\n            \"prefetch\": \"no\"\n          }\n        ],\n        \"detail\": {\n          \"function\": 1,\n          \"command\": 1030,\n          \"header_type\": 0,\n          \"secondary_bus\": 0,\n          \"irq\": 191,\n          \"prog_if\": 0\n        },\n        \"driver\": \"snd_hda_intel\",\n        \"driver_module\": \"snd_hda_intel\",\n        \"drivers\": [\n          \"snd_hda_intel\"\n        ],\n        \"driver_modules\": [\n          \"snd_hda_intel\"\n        ],\n        \"module_alias\": \"pci:v00001002d0000AB28sv00001002sd0000AB28bc04sc03i00\"\n      },\n      {\n        \"index\": 32,\n        \"attached_to\": 0,\n        \"class_list\": [\n          \"sound\",\n          \"pci\"\n        ],\n        \"bus_type\": {\n          \"hex\": \"0004\",\n          \"name\": \"PCI\",\n          \"value\": 4\n        },\n        \"slot\": {\n          \"bus\": 0,\n          \"number\": 31\n        },\n        \"base_class\": {\n          \"hex\": \"0004\",\n          \"name\": \"Multimedia controller\",\n          \"value\": 4\n        },\n        \"sub_class\": {\n          \"hex\": \"0003\",\n          \"value\": 3\n        },\n        \"vendor\": {\n          \"hex\": \"8086\",\n          \"name\": \"Intel Corporation\",\n          \"value\": 32902\n        },\n        \"sub_vendor\": {\n          \"hex\": \"1849\",\n          \"value\": 6217\n        },\n        \"device\": {\n          \"hex\": \"7a50\",\n          \"value\": 31312\n        },\n        \"sub_device\": {\n          \"hex\": \"1897\",\n          \"value\": 6295\n        },\n        \"revision\": {\n          \"hex\": \"0011\",\n          \"value\": 17\n        },\n        \"model\": \"Intel Multimedia controller\",\n        \"sysfs_id\": \"/devices/pci0000:00/0000:00:1f.3\",\n        \"sysfs_bus_id\": \"0000:00:1f.3\",\n        \"resources\": [\n          {\n            \"type\": \"irq\",\n            \"base\": 190,\n            \"triggered\": 0,\n            \"enabled\": true\n          },\n          {\n            \"type\": \"mem\",\n            \"base\": 292359766016,\n            \"range\": 1048576,\n            \"enabled\": true,\n            \"access\": \"read_write\",\n            \"prefetch\": \"no\"\n          },\n          {\n            \"type\": \"mem\",\n            \"base\": 292361928704,\n            \"range\": 16384,\n            \"enabled\": true,\n            \"access\": \"read_write\",\n            \"prefetch\": \"no\"\n          }\n        ],\n        \"detail\": {\n          \"function\": 3,\n          \"command\": 1030,\n          \"header_type\": 0,\n          \"secondary_bus\": 0,\n          \"irq\": 190,\n          \"prog_if\": 0\n        },\n        \"driver\": \"snd_hda_intel\",\n        \"driver_module\": \"snd_hda_intel\",\n        \"drivers\": [\n          \"snd_hda_intel\"\n        ],\n        \"driver_modules\": [\n          \"snd_hda_intel\"\n        ],\n        \"module_alias\": \"pci:v00008086d00007A50sv00001849sd00001897bc04sc03i00\"\n      }\n    ],\n    \"storage_controller\": [\n      {\n        \"index\": 21,\n        \"attached_to\": 0,\n        \"class_list\": [\n          \"storage_controller\",\n          \"pci\"\n        ],\n        \"bus_type\": {\n          \"hex\": \"0004\",\n          \"name\": \"PCI\",\n          \"value\": 4\n        },\n        \"slot\": {\n          \"bus\": 0,\n          \"number\": 23\n        },\n        \"base_class\": {\n          \"hex\": \"0001\",\n          \"name\": \"Mass storage controller\",\n          \"value\": 1\n        },\n        \"sub_class\": {\n          \"hex\": \"0006\",\n          \"value\": 6\n        },\n        \"pci_interface\": {\n          \"hex\": \"0001\",\n          \"value\": 1\n        },\n        \"vendor\": {\n          \"hex\": \"8086\",\n          \"name\": \"Intel Corporation\",\n          \"value\": 32902\n        },\n        \"sub_vendor\": {\n          \"hex\": \"1849\",\n          \"value\": 6217\n        },\n        \"device\": {\n          \"hex\": \"7a62\",\n          \"value\": 31330\n        },\n        \"sub_device\": {\n          \"hex\": \"7a62\",\n          \"value\": 31330\n        },\n        \"revision\": {\n          \"hex\": \"0011\",\n          \"value\": 17\n        },\n        \"model\": \"Intel Mass storage controller\",\n        \"sysfs_id\": \"/devices/pci0000:00/0000:00:17.0\",\n        \"sysfs_bus_id\": \"0000:00:17.0\",\n        \"resources\": [\n          {\n            \"type\": \"io\",\n            \"base\": 20512,\n            \"range\": 32,\n            \"enabled\": true,\n            \"access\": \"read_write\"\n          },\n          {\n            \"type\": \"io\",\n            \"base\": 20544,\n            \"range\": 4,\n            \"enabled\": true,\n            \"access\": \"read_write\"\n          },\n          {\n            \"type\": \"io\",\n            \"base\": 20560,\n            \"range\": 8,\n            \"enabled\": true,\n            \"access\": \"read_write\"\n          },\n          {\n            \"type\": \"irq\",\n            \"base\": 170,\n            \"triggered\": 0,\n            \"enabled\": true\n          },\n          {\n            \"type\": \"mem\",\n            \"base\": 1917845504,\n            \"range\": 8192,\n            \"enabled\": true,\n            \"access\": \"read_write\",\n            \"prefetch\": \"no\"\n          },\n          {\n            \"type\": \"mem\",\n            \"base\": 1917853696,\n            \"range\": 2048,\n            \"enabled\": true,\n            \"access\": \"read_write\",\n            \"prefetch\": \"no\"\n          },\n          {\n            \"type\": \"mem\",\n            \"base\": 1917857792,\n            \"range\": 256,\n            \"enabled\": true,\n            \"access\": \"read_write\",\n            \"prefetch\": \"no\"\n          }\n        ],\n        \"detail\": {\n          \"function\": 0,\n          \"command\": 1031,\n          \"header_type\": 0,\n          \"secondary_bus\": 0,\n          \"irq\": 170,\n          \"prog_if\": 1\n        },\n        \"driver\": \"ahci\",\n        \"driver_module\": \"ahci\",\n        \"drivers\": [\n          \"ahci\"\n        ],\n        \"driver_modules\": [\n          \"ahci\"\n        ],\n        \"module_alias\": \"pci:v00008086d00007A62sv00001849sd00007A62bc01sc06i01\"\n      },\n      {\n        \"index\": 38,\n        \"attached_to\": 0,\n        \"class_list\": [\n          \"storage_controller\",\n          \"pci\"\n        ],\n        \"bus_type\": {\n          \"hex\": \"0004\",\n          \"name\": \"PCI\",\n          \"value\": 4\n        },\n        \"slot\": {\n          \"bus\": 0,\n          \"number\": 14\n        },\n        \"base_class\": {\n          \"hex\": \"0001\",\n          \"name\": \"Mass storage controller\",\n          \"value\": 1\n        },\n        \"sub_class\": {\n          \"hex\": \"0004\",\n          \"name\": \"RAID bus controller\",\n          \"value\": 4\n        },\n        \"vendor\": {\n          \"hex\": \"8086\",\n          \"name\": \"Intel Corporation\",\n          \"value\": 32902\n        },\n        \"sub_vendor\": {\n          \"hex\": \"8086\",\n          \"name\": \"Intel Corporation\",\n          \"value\": 32902\n        },\n        \"device\": {\n          \"hex\": \"467f\",\n          \"value\": 18047\n        },\n        \"sub_device\": {\n          \"hex\": \"0000\",\n          \"value\": 0\n        },\n        \"model\": \"Intel RAID bus controller\",\n        \"sysfs_id\": \"/devices/pci0000:00/0000:00:0e.0\",\n        \"sysfs_bus_id\": \"0000:00:0e.0\",\n        \"resources\": [\n          {\n            \"type\": \"mem\",\n            \"base\": 1879048192,\n            \"range\": 33554432,\n            \"enabled\": true,\n            \"access\": \"read_write\",\n            \"prefetch\": \"no\"\n          },\n          {\n            \"type\": \"mem\",\n            \"base\": 292326211584,\n            \"range\": 33554432,\n            \"enabled\": true,\n            \"access\": \"read_write\",\n            \"prefetch\": \"no\"\n          },\n          {\n            \"type\": \"mem\",\n            \"base\": 292360814592,\n            \"range\": 1048576,\n            \"enabled\": true,\n            \"access\": \"read_write\",\n            \"prefetch\": \"no\"\n          }\n        ],\n        \"detail\": {\n          \"function\": 0,\n          \"command\": 1030,\n          \"header_type\": 0,\n          \"secondary_bus\": 0,\n          \"irq\": 0,\n          \"prog_if\": 0\n        },\n        \"driver\": \"vmd\",\n        \"driver_module\": \"vmd\",\n        \"drivers\": [\n          \"vmd\"\n        ],\n        \"driver_modules\": [\n          \"vmd\"\n        ],\n        \"module_alias\": \"pci:v00008086d0000467Fsv00008086sd00000000bc01sc04i00\"\n      },\n      {\n        \"index\": 40,\n        \"attached_to\": 36,\n        \"class_list\": [\n          \"storage_controller\",\n          \"pci\"\n        ],\n        \"bus_type\": {\n          \"hex\": \"0004\",\n          \"name\": \"PCI\",\n          \"value\": 4\n        },\n        \"slot\": {\n          \"bus\": 4,\n          \"number\": 0\n        },\n        \"base_class\": {\n          \"hex\": \"0001\",\n          \"name\": \"Mass storage controller\",\n          \"value\": 1\n        },\n        \"sub_class\": {\n          \"hex\": \"0008\",\n          \"value\": 8\n        },\n        \"pci_interface\": {\n          \"hex\": \"0002\",\n          \"value\": 2\n        },\n        \"vendor\": {\n          \"hex\": \"2646\",\n          \"value\": 9798\n        },\n        \"sub_vendor\": {\n          \"hex\": \"2646\",\n          \"value\": 9798\n        },\n        \"device\": {\n          \"hex\": \"5023\",\n          \"value\": 20515\n        },\n        \"sub_device\": {\n          \"hex\": \"5023\",\n          \"value\": 20515\n        },\n        \"revision\": {\n          \"hex\": \"0003\",\n          \"value\": 3\n        },\n        \"model\": \"Mass storage controller\",\n        \"sysfs_id\": \"/devices/pci0000:00/0000:00:06.0/0000:04:00.0\",\n        \"sysfs_bus_id\": \"0000:04:00.0\",\n        \"resources\": [\n          {\n            \"type\": \"irq\",\n            \"base\": 16,\n            \"triggered\": 0,\n            \"enabled\": true\n          },\n          {\n            \"type\": \"mem\",\n            \"base\": 1916796928,\n            \"range\": 16384,\n            \"enabled\": true,\n            \"access\": \"read_write\",\n            \"prefetch\": \"no\"\n          }\n        ],\n        \"detail\": {\n          \"function\": 0,\n          \"command\": 1030,\n          \"header_type\": 0,\n          \"secondary_bus\": 0,\n          \"irq\": 16,\n          \"prog_if\": 2\n        },\n        \"driver\": \"nvme\",\n        \"driver_module\": \"nvme\",\n        \"drivers\": [\n          \"nvme\"\n        ],\n        \"driver_modules\": [\n          \"nvme\"\n        ],\n        \"module_alias\": \"pci:v00002646d00005023sv00002646sd00005023bc01sc08i02\"\n      }\n    ],\n    \"system\": {\n      \"form_factor\": \"desktop\"\n    },\n    \"unknown\": [\n      {\n        \"index\": 44,\n        \"attached_to\": 0,\n        \"class_list\": [\n          \"unknown\"\n        ],\n        \"base_class\": {\n          \"hex\": \"0007\",\n          \"name\": \"Communication controller\",\n          \"value\": 7\n        },\n        \"sub_class\": {\n          \"hex\": \"0000\",\n          \"name\": \"Serial controller\",\n          \"value\": 0\n        },\n        \"pci_interface\": {\n          \"hex\": \"0002\",\n          \"name\": \"16550\",\n          \"value\": 2\n        },\n        \"device\": {\n          \"hex\": \"0000\",\n          \"name\": \"16550A\",\n          \"value\": 0\n        },\n        \"model\": \"16550A\",\n        \"unix_device_name\": \"/dev/ttyS0\",\n        \"unix_device_names\": [\n          \"/dev/ttyS0\"\n        ],\n        \"resources\": [\n          {\n            \"type\": \"io\",\n            \"base\": 1016,\n            \"range\": 0,\n            \"enabled\": true,\n            \"access\": \"read_write\"\n          },\n          {\n            \"type\": \"irq\",\n            \"base\": 4,\n            \"triggered\": 0,\n            \"enabled\": true\n          }\n        ]\n      }\n    ],\n    \"usb\": [\n      {\n        \"index\": 48,\n        \"attached_to\": 50,\n        \"class_list\": [\n          \"usb\",\n          \"unknown\"\n        ],\n        \"bus_type\": {\n          \"hex\": \"0086\",\n          \"name\": \"USB\",\n          \"value\": 134\n        },\n        \"slot\": {\n          \"bus\": 0,\n          \"number\": 0\n        },\n        \"base_class\": {\n          \"hex\": \"0000\",\n          \"name\": \"Unclassified device\",\n          \"value\": 0\n        },\n        \"sub_class\": {\n          \"hex\": \"0000\",\n          \"name\": \"Unclassified device\",\n          \"value\": 0\n        },\n        \"vendor\": {\n          \"hex\": \"19f5\",\n          \"name\": \"NuPhy\",\n          \"value\": 6645\n        },\n        \"device\": {\n          \"hex\": \"3246\",\n          \"name\": \"NuPhy Air75 V2\",\n          \"value\": 12870\n        },\n        \"revision\": {\n          \"hex\": \"0000\",\n          \"name\": \"1.12\",\n          \"value\": 0\n        },\n        \"model\": \"NuPhy Air75 V2\",\n        \"sysfs_id\": \"/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2.1/1-2.1:1.3\",\n        \"sysfs_bus_id\": \"1-2.1:1.3\",\n        \"resources\": [\n          {\n            \"type\": \"baud\",\n            \"speed\": 12000000,\n            \"bits\": 0,\n            \"stop_bits\": 0,\n            \"parity\": 0,\n            \"handshake\": 0\n          }\n        ],\n        \"detail\": {\n          \"device_class\": {\n            \"hex\": \"0000\",\n            \"name\": \"per_interface\",\n            \"value\": 0\n          },\n          \"device_subclass\": {\n            \"hex\": \"0000\",\n            \"name\": \"per_interface\",\n            \"value\": 0\n          },\n          \"device_protocol\": 0,\n          \"interface_class\": {\n            \"hex\": \"0003\",\n            \"name\": \"hid\",\n            \"value\": 3\n          },\n          \"interface_subclass\": {\n            \"hex\": \"0000\",\n            \"name\": \"per_interface\",\n            \"value\": 0\n          },\n          \"interface_protocol\": 0,\n          \"interface_number\": 3,\n          \"interface_alternate_setting\": 0\n        },\n        \"hotplug\": \"usb\",\n        \"driver\": \"usbhid\",\n        \"driver_module\": \"usbhid\",\n        \"drivers\": [\n          \"usbhid\"\n        ],\n        \"driver_modules\": [\n          \"usbhid\"\n        ],\n        \"module_alias\": \"usb:v19F5p3246d0112dc00dsc00dp00ic03isc00ip00in03\"\n      },\n      {\n        \"index\": 49,\n        \"attached_to\": 50,\n        \"class_list\": [\n          \"usb\",\n          \"unknown\"\n        ],\n        \"bus_type\": {\n          \"hex\": \"0086\",\n          \"name\": \"USB\",\n          \"value\": 134\n        },\n        \"slot\": {\n          \"bus\": 0,\n          \"number\": 0\n        },\n        \"base_class\": {\n          \"hex\": \"0000\",\n          \"name\": \"Unclassified device\",\n          \"value\": 0\n        },\n        \"sub_class\": {\n          \"hex\": \"0000\",\n          \"name\": \"Unclassified device\",\n          \"value\": 0\n        },\n        \"vendor\": {\n          \"hex\": \"19f5\",\n          \"name\": \"NuPhy\",\n          \"value\": 6645\n        },\n        \"device\": {\n          \"hex\": \"3246\",\n          \"name\": \"NuPhy Air75 V2\",\n          \"value\": 12870\n        },\n        \"revision\": {\n          \"hex\": \"0000\",\n          \"name\": \"1.12\",\n          \"value\": 0\n        },\n        \"model\": \"NuPhy Air75 V2\",\n        \"sysfs_id\": \"/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2.1/1-2.1:1.1\",\n        \"sysfs_bus_id\": \"1-2.1:1.1\",\n        \"resources\": [\n          {\n            \"type\": \"baud\",\n            \"speed\": 12000000,\n            \"bits\": 0,\n            \"stop_bits\": 0,\n            \"parity\": 0,\n            \"handshake\": 0\n          }\n        ],\n        \"detail\": {\n          \"device_class\": {\n            \"hex\": \"0000\",\n            \"name\": \"per_interface\",\n            \"value\": 0\n          },\n          \"device_subclass\": {\n            \"hex\": \"0000\",\n            \"name\": \"per_interface\",\n            \"value\": 0\n          },\n          \"device_protocol\": 0,\n          \"interface_class\": {\n            \"hex\": \"0003\",\n            \"name\": \"hid\",\n            \"value\": 3\n          },\n          \"interface_subclass\": {\n            \"hex\": \"0000\",\n            \"name\": \"per_interface\",\n            \"value\": 0\n          },\n          \"interface_protocol\": 0,\n          \"interface_number\": 1,\n          \"interface_alternate_setting\": 0\n        },\n        \"hotplug\": \"usb\",\n        \"driver\": \"usbhid\",\n        \"driver_module\": \"usbhid\",\n        \"drivers\": [\n          \"usbhid\"\n        ],\n        \"driver_modules\": [\n          \"usbhid\"\n        ],\n        \"module_alias\": \"usb:v19F5p3246d0112dc00dsc00dp00ic03isc00ip00in01\"\n      },\n      {\n        \"index\": 52,\n        \"attached_to\": 57,\n        \"class_list\": [\n          \"usb\",\n          \"unknown\"\n        ],\n        \"bus_type\": {\n          \"hex\": \"0086\",\n          \"name\": \"USB\",\n          \"value\": 134\n        },\n        \"slot\": {\n          \"bus\": 0,\n          \"number\": 0\n        },\n        \"base_class\": {\n          \"hex\": \"0000\",\n          \"name\": \"Unclassified device\",\n          \"value\": 0\n        },\n        \"sub_class\": {\n          \"hex\": \"0000\",\n          \"name\": \"Unclassified device\",\n          \"value\": 0\n        },\n        \"vendor\": {\n          \"hex\": \"1532\",\n          \"name\": \"Razer\",\n          \"value\": 5426\n        },\n        \"device\": {\n          \"hex\": \"005c\",\n          \"name\": \"Razer DeathAdder Elite\",\n          \"value\": 92\n        },\n        \"revision\": {\n          \"hex\": \"0000\",\n          \"name\": \"2.00\",\n          \"value\": 0\n        },\n        \"model\": \"Razer DeathAdder Elite\",\n        \"sysfs_id\": \"/devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3:1.2\",\n        \"sysfs_bus_id\": \"1-3:1.2\",\n        \"unix_device_name\": \"/dev/input/event3\",\n        \"unix_device_number\": {\n          \"type\": 99,\n          \"major\": 13,\n          \"minor\": 67,\n          \"range\": 1\n        },\n        \"unix_device_names\": [\n          \"/dev/input/by-id/usb-Razer_Razer_DeathAdder_Elite-if02-event-kbd\",\n          \"/dev/input/by-path/pci-0000:00:14.0-usb-0:3:1.2-event-kbd\",\n          \"/dev/input/by-path/pci-0000:00:14.0-usbv2-0:3:1.2-event-kbd\",\n          \"/dev/input/event3\"\n        ],\n        \"resources\": [\n          {\n            \"type\": \"baud\",\n            \"speed\": 12000000,\n            \"bits\": 0,\n            \"stop_bits\": 0,\n            \"parity\": 0,\n            \"handshake\": 0\n          }\n        ],\n        \"detail\": {\n          \"device_class\": {\n            \"hex\": \"0000\",\n            \"name\": \"per_interface\",\n            \"value\": 0\n          },\n          \"device_subclass\": {\n            \"hex\": \"0000\",\n            \"name\": \"per_interface\",\n            \"value\": 0\n          },\n          \"device_protocol\": 0,\n          \"interface_class\": {\n            \"hex\": \"0003\",\n            \"name\": \"hid\",\n            \"value\": 3\n          },\n          \"interface_subclass\": {\n            \"hex\": \"0000\",\n            \"name\": \"per_interface\",\n            \"value\": 0\n          },\n          \"interface_protocol\": 1,\n          \"interface_number\": 2,\n          \"interface_alternate_setting\": 0\n        },\n        \"hotplug\": \"usb\",\n        \"driver\": \"usbhid\",\n        \"driver_module\": \"usbhid\",\n        \"drivers\": [\n          \"usbhid\"\n        ],\n        \"driver_modules\": [\n          \"usbhid\"\n        ],\n        \"module_alias\": \"usb:v1532p005Cd0200dc00dsc00dp00ic03isc00ip01in02\"\n      },\n      {\n        \"index\": 53,\n        \"attached_to\": 57,\n        \"class_list\": [\n          \"usb\",\n          \"unknown\"\n        ],\n        \"bus_type\": {\n          \"hex\": \"0086\",\n          \"name\": \"USB\",\n          \"value\": 134\n        },\n        \"slot\": {\n          \"bus\": 0,\n          \"number\": 0\n        },\n        \"base_class\": {\n          \"hex\": \"0000\",\n          \"name\": \"Unclassified device\",\n          \"value\": 0\n        },\n        \"sub_class\": {\n          \"hex\": \"0000\",\n          \"name\": \"Unclassified device\",\n          \"value\": 0\n        },\n        \"vendor\": {\n          \"hex\": \"1207\",\n          \"name\": \"Tillitis\",\n          \"value\": 4615\n        },\n        \"device\": {\n          \"hex\": \"8887\",\n          \"name\": \"MTA1-USB-V1\",\n          \"value\": 34951\n        },\n        \"revision\": {\n          \"hex\": \"0000\",\n          \"name\": \"1.00\",\n          \"value\": 0\n        },\n        \"serial\": \"125736b8-921b-4822-8d3b-3b7b841e89a7\",\n        \"model\": \"Tillitis MTA1-USB-V1\",\n        \"sysfs_id\": \"/devices/pci0000:00/0000:00:14.0/usb1/1-5/1-5:1.1\",\n        \"sysfs_bus_id\": \"1-5:1.1\",\n        \"resources\": [\n          {\n            \"type\": \"baud\",\n            \"speed\": 12000000,\n            \"bits\": 0,\n            \"stop_bits\": 0,\n            \"parity\": 0,\n            \"handshake\": 0\n          }\n        ],\n        \"detail\": {\n          \"device_class\": {\n            \"hex\": \"0002\",\n            \"name\": \"comm\",\n            \"value\": 2\n          },\n          \"device_subclass\": {\n            \"hex\": \"0000\",\n            \"name\": \"per_interface\",\n            \"value\": 0\n          },\n          \"device_protocol\": 0,\n          \"interface_class\": {\n            \"hex\": \"000a\",\n            \"name\": \"data\",\n            \"value\": 10\n          },\n          \"interface_subclass\": {\n            \"hex\": \"0000\",\n            \"name\": \"per_interface\",\n            \"value\": 0\n          },\n          \"interface_protocol\": 0,\n          \"interface_number\": 1,\n          \"interface_alternate_setting\": 0\n        },\n        \"hotplug\": \"usb\",\n        \"driver\": \"cdc_acm\",\n        \"driver_module\": \"cdc_acm\",\n        \"drivers\": [\n          \"cdc_acm\"\n        ],\n        \"driver_modules\": [\n          \"cdc_acm\"\n        ],\n        \"module_alias\": \"usb:v1207p8887d0100dc02dsc00dp00ic0Aisc00ip00in01\"\n      },\n      {\n        \"index\": 54,\n        \"attached_to\": 57,\n        \"class_list\": [\n          \"usb\",\n          \"unknown\"\n        ],\n        \"bus_type\": {\n          \"hex\": \"0086\",\n          \"name\": \"USB\",\n          \"value\": 134\n        },\n        \"slot\": {\n          \"bus\": 0,\n          \"number\": 0\n        },\n        \"base_class\": {\n          \"hex\": \"0000\",\n          \"name\": \"Unclassified device\",\n          \"value\": 0\n        },\n        \"sub_class\": {\n          \"hex\": \"0000\",\n          \"name\": \"Unclassified device\",\n          \"value\": 0\n        },\n        \"vendor\": {\n          \"hex\": \"26ce\",\n          \"name\": \"ASRock\",\n          \"value\": 9934\n        },\n        \"device\": {\n          \"hex\": \"01a2\",\n          \"name\": \"LED Controller\",\n          \"value\": 418\n        },\n        \"serial\": \"A02019100900\",\n        \"model\": \"ASRock LED Controller\",\n        \"sysfs_id\": \"/devices/pci0000:00/0000:00:14.0/usb1/1-11/1-11:1.0\",\n        \"sysfs_bus_id\": \"1-11:1.0\",\n        \"unix_device_name\": \"/dev/input/event9\",\n        \"unix_device_number\": {\n          \"type\": 99,\n          \"major\": 13,\n          \"minor\": 73,\n          \"range\": 1\n        },\n        \"unix_device_names\": [\n          \"/dev/input/by-id/usb-ASRock_LED_Controller_A02019100900-event-if00\",\n          \"/dev/input/by-path/pci-0000:00:14.0-usb-0:11:1.0-event\",\n          \"/dev/input/by-path/pci-0000:00:14.0-usbv2-0:11:1.0-event\",\n          \"/dev/input/event9\"\n        ],\n        \"resources\": [\n          {\n            \"type\": \"baud\",\n            \"speed\": 12000000,\n            \"bits\": 0,\n            \"stop_bits\": 0,\n            \"parity\": 0,\n            \"handshake\": 0\n          }\n        ],\n        \"detail\": {\n          \"device_class\": {\n            \"hex\": \"0000\",\n            \"name\": \"per_interface\",\n            \"value\": 0\n          },\n          \"device_subclass\": {\n            \"hex\": \"0000\",\n            \"name\": \"per_interface\",\n            \"value\": 0\n          },\n          \"device_protocol\": 0,\n          \"interface_class\": {\n            \"hex\": \"0003\",\n            \"name\": \"hid\",\n            \"value\": 3\n          },\n          \"interface_subclass\": {\n            \"hex\": \"0000\",\n            \"name\": \"per_interface\",\n            \"value\": 0\n          },\n          \"interface_protocol\": 0,\n          \"interface_number\": 0,\n          \"interface_alternate_setting\": 0\n        },\n        \"hotplug\": \"usb\",\n        \"driver\": \"usbhid\",\n        \"driver_module\": \"usbhid\",\n        \"drivers\": [\n          \"usbhid\"\n        ],\n        \"driver_modules\": [\n          \"usbhid\"\n        ],\n        \"module_alias\": \"usb:v26CEp01A2d0000dc00dsc00dp00ic03isc00ip00in00\"\n      },\n      {\n        \"index\": 61,\n        \"attached_to\": 57,\n        \"class_list\": [\n          \"usb\",\n          \"unknown\"\n        ],\n        \"bus_type\": {\n          \"hex\": \"0086\",\n          \"name\": \"USB\",\n          \"value\": 134\n        },\n        \"slot\": {\n          \"bus\": 0,\n          \"number\": 0\n        },\n        \"base_class\": {\n          \"hex\": \"0000\",\n          \"name\": \"Unclassified device\",\n          \"value\": 0\n        },\n        \"sub_class\": {\n          \"hex\": \"0000\",\n          \"name\": \"Unclassified device\",\n          \"value\": 0\n        },\n        \"vendor\": {\n          \"hex\": \"1532\",\n          \"name\": \"Razer\",\n          \"value\": 5426\n        },\n        \"device\": {\n          \"hex\": \"005c\",\n          \"name\": \"Razer DeathAdder Elite\",\n          \"value\": 92\n        },\n        \"revision\": {\n          \"hex\": \"0000\",\n          \"name\": \"2.00\",\n          \"value\": 0\n        },\n        \"model\": \"Razer DeathAdder Elite\",\n        \"sysfs_id\": \"/devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3:1.1\",\n        \"sysfs_bus_id\": \"1-3:1.1\",\n        \"unix_device_name\": \"/dev/input/event1\",\n        \"unix_device_number\": {\n          \"type\": 99,\n          \"major\": 13,\n          \"minor\": 65,\n          \"range\": 1\n        },\n        \"unix_device_names\": [\n          \"/dev/input/by-id/usb-Razer_Razer_DeathAdder_Elite-if01-event-kbd\",\n          \"/dev/input/by-path/pci-0000:00:14.0-usb-0:3:1.1-event-kbd\",\n          \"/dev/input/by-path/pci-0000:00:14.0-usbv2-0:3:1.1-event-kbd\",\n          \"/dev/input/event1\"\n        ],\n        \"resources\": [\n          {\n            \"type\": \"baud\",\n            \"speed\": 12000000,\n            \"bits\": 0,\n            \"stop_bits\": 0,\n            \"parity\": 0,\n            \"handshake\": 0\n          }\n        ],\n        \"detail\": {\n          \"device_class\": {\n            \"hex\": \"0000\",\n            \"name\": \"per_interface\",\n            \"value\": 0\n          },\n          \"device_subclass\": {\n            \"hex\": \"0000\",\n            \"name\": \"per_interface\",\n            \"value\": 0\n          },\n          \"device_protocol\": 0,\n          \"interface_class\": {\n            \"hex\": \"0003\",\n            \"name\": \"hid\",\n            \"value\": 3\n          },\n          \"interface_subclass\": {\n            \"hex\": \"0000\",\n            \"name\": \"per_interface\",\n            \"value\": 0\n          },\n          \"interface_protocol\": 1,\n          \"interface_number\": 1,\n          \"interface_alternate_setting\": 0\n        },\n        \"hotplug\": \"usb\",\n        \"driver\": \"usbhid\",\n        \"driver_module\": \"usbhid\",\n        \"drivers\": [\n          \"usbhid\"\n        ],\n        \"driver_modules\": [\n          \"usbhid\"\n        ],\n        \"module_alias\": \"usb:v1532p005Cd0200dc00dsc00dp00ic03isc00ip01in01\"\n      }\n    ],\n    \"usb_controller\": [\n      {\n        \"index\": 41,\n        \"attached_to\": 0,\n        \"class_list\": [\n          \"usb_controller\",\n          \"pci\"\n        ],\n        \"bus_type\": {\n          \"hex\": \"0004\",\n          \"name\": \"PCI\",\n          \"value\": 4\n        },\n        \"slot\": {\n          \"bus\": 0,\n          \"number\": 20\n        },\n        \"base_class\": {\n          \"hex\": \"000c\",\n          \"name\": \"Serial bus controller\",\n          \"value\": 12\n        },\n        \"sub_class\": {\n          \"hex\": \"0003\",\n          \"name\": \"USB Controller\",\n          \"value\": 3\n        },\n        \"pci_interface\": {\n          \"hex\": \"0030\",\n          \"value\": 48\n        },\n        \"vendor\": {\n          \"hex\": \"8086\",\n          \"name\": \"Intel Corporation\",\n          \"value\": 32902\n        },\n        \"sub_vendor\": {\n          \"hex\": \"1849\",\n          \"value\": 6217\n        },\n        \"device\": {\n          \"hex\": \"7a60\",\n          \"value\": 31328\n        },\n        \"sub_device\": {\n          \"hex\": \"7a60\",\n          \"value\": 31328\n        },\n        \"revision\": {\n          \"hex\": \"0011\",\n          \"value\": 17\n        },\n        \"model\": \"Intel USB Controller\",\n        \"sysfs_id\": \"/devices/pci0000:00/0000:00:14.0\",\n        \"sysfs_bus_id\": \"0000:00:14.0\",\n        \"resources\": [\n          {\n            \"type\": \"irq\",\n            \"base\": 146,\n            \"triggered\": 0,\n            \"enabled\": true\n          },\n          {\n            \"type\": \"mem\",\n            \"base\": 292361863168,\n            \"range\": 65536,\n            \"enabled\": true,\n            \"access\": \"read_write\",\n            \"prefetch\": \"no\"\n          }\n        ],\n        \"detail\": {\n          \"function\": 0,\n          \"command\": 1030,\n          \"header_type\": 0,\n          \"secondary_bus\": 0,\n          \"irq\": 146,\n          \"prog_if\": 48\n        },\n        \"driver\": \"xhci_hcd\",\n        \"driver_module\": \"xhci_pci\",\n        \"drivers\": [\n          \"xhci_hcd\"\n        ],\n        \"driver_modules\": [\n          \"xhci_pci\"\n        ],\n        \"module_alias\": \"pci:v00008086d00007A60sv00001849sd00007A60bc0Csc03i30\"\n      }\n    ]\n  },\n  \"smbios\": {\n    \"bios\": {\n      \"handle\": 0,\n      \"vendor\": \"American Megatrends International, LLC.\",\n      \"version\": \"3.12\",\n      \"date\": \"06/13/2023\",\n      \"features\": [\n        \"PCI supported\",\n        \"BIOS flashable\",\n        \"BIOS shadowing allowed\",\n        \"CD boot supported\",\n        \"Selectable boot supported\",\n        \"BIOS ROM socketed\",\n        \"EDD spec supported\",\n        \"1.2MB NEC 9800 Japanese Floppy supported\",\n        \"1.2MB Toshiba Japanese Floppy supported\",\n        \"360kB Floppy supported\",\n        \"1.2MB Floppy supported\",\n        \"720kB Floppy supported\",\n        \"2.88MB Floppy supported\",\n        \"Print Screen supported\",\n        \"8042 Keyboard Services supported\",\n        \"Serial Services supported\",\n        \"Printer Services supported\",\n        \"CGA/Mono Video supported\",\n        \"ACPI supported\",\n        \"USB Legacy supported\",\n        \"BIOS Boot Spec supported\"\n      ],\n      \"start_address\": \"0xf0000\",\n      \"rom_size\": 16777216\n    },\n    \"board\": {\n      \"handle\": 2,\n      \"manufacturer\": \"ASRock\",\n      \"product\": \"B760M Pro RS/D4 WiFi\",\n      \"version\": \"\",\n      \"board_type\": {\n        \"hex\": \"000a\",\n        \"name\": \"Motherboard\",\n        \"value\": 10\n      },\n      \"features\": [\n        \"Hosting Board\",\n        \"Replaceable\"\n      ],\n      \"location\": \"\",\n      \"chassis\": 3\n    },\n    \"cache\": [\n      {\n        \"handle\": 29,\n        \"socket\": \"L1 Cache\",\n        \"size_max\": 288,\n        \"size_current\": 288,\n        \"speed\": 0,\n        \"mode\": {\n          \"hex\": \"0001\",\n          \"name\": \"Write Back\",\n          \"value\": 1\n        },\n        \"enabled\": true,\n        \"location\": {\n          \"hex\": \"0000\",\n          \"name\": \"Internal\",\n          \"value\": 0\n        },\n        \"socketed\": false,\n        \"level\": 0,\n        \"ecc\": {\n          \"hex\": \"0004\",\n          \"name\": \"Parity\",\n          \"value\": 4\n        },\n        \"cache_type\": {\n          \"hex\": \"0004\",\n          \"name\": \"Data\",\n          \"value\": 4\n        },\n        \"associativity\": {\n          \"hex\": \"0009\",\n          \"name\": \"Other\",\n          \"value\": 9\n        },\n        \"sram_type_current\": [\n          \"Synchronous\"\n        ],\n        \"sram_type_supported\": [\n          \"Synchronous\"\n        ]\n      },\n      {\n        \"handle\": 30,\n        \"socket\": \"L1 Cache\",\n        \"size_max\": 192,\n        \"size_current\": 192,\n        \"speed\": 0,\n        \"mode\": {\n          \"hex\": \"0001\",\n          \"name\": \"Write Back\",\n          \"value\": 1\n        },\n        \"enabled\": true,\n        \"location\": {\n          \"hex\": \"0000\",\n          \"name\": \"Internal\",\n          \"value\": 0\n        },\n        \"socketed\": false,\n        \"level\": 0,\n        \"ecc\": {\n          \"hex\": \"0004\",\n          \"name\": \"Parity\",\n          \"value\": 4\n        },\n        \"cache_type\": {\n          \"hex\": \"0003\",\n          \"name\": \"Instruction\",\n          \"value\": 3\n        },\n        \"associativity\": {\n          \"hex\": \"0007\",\n          \"name\": \"8-way Set-Associative\",\n          \"value\": 7\n        },\n        \"sram_type_current\": [\n          \"Synchronous\"\n        ],\n        \"sram_type_supported\": [\n          \"Synchronous\"\n        ]\n      },\n      {\n        \"handle\": 31,\n        \"socket\": \"L2 Cache\",\n        \"size_max\": 7680,\n        \"size_current\": 7680,\n        \"speed\": 0,\n        \"mode\": {\n          \"hex\": \"0001\",\n          \"name\": \"Write Back\",\n          \"value\": 1\n        },\n        \"enabled\": true,\n        \"location\": {\n          \"hex\": \"0000\",\n          \"name\": \"Internal\",\n          \"value\": 0\n        },\n        \"socketed\": false,\n        \"level\": 1,\n        \"ecc\": {\n          \"hex\": \"0005\",\n          \"name\": \"Single-bit\",\n          \"value\": 5\n        },\n        \"cache_type\": {\n          \"hex\": \"0005\",\n          \"name\": \"Unified\",\n          \"value\": 5\n        },\n        \"associativity\": {\n          \"hex\": \"0001\",\n          \"name\": \"Other\",\n          \"value\": 1\n        },\n        \"sram_type_current\": [\n          \"Synchronous\"\n        ],\n        \"sram_type_supported\": [\n          \"Synchronous\"\n        ]\n      },\n      {\n        \"handle\": 32,\n        \"socket\": \"L3 Cache\",\n        \"size_max\": 20480,\n        \"size_current\": 20480,\n        \"speed\": 0,\n        \"mode\": {\n          \"hex\": \"0001\",\n          \"name\": \"Write Back\",\n          \"value\": 1\n        },\n        \"enabled\": true,\n        \"location\": {\n          \"hex\": \"0000\",\n          \"name\": \"Internal\",\n          \"value\": 0\n        },\n        \"socketed\": false,\n        \"level\": 2,\n        \"ecc\": {\n          \"hex\": \"0006\",\n          \"name\": \"Multi-bit\",\n          \"value\": 6\n        },\n        \"cache_type\": {\n          \"hex\": \"0005\",\n          \"name\": \"Unified\",\n          \"value\": 5\n        },\n        \"associativity\": {\n          \"hex\": \"0001\",\n          \"name\": \"Other\",\n          \"value\": 1\n        },\n        \"sram_type_current\": [\n          \"Synchronous\"\n        ],\n        \"sram_type_supported\": [\n          \"Synchronous\"\n        ]\n      },\n      {\n        \"handle\": 33,\n        \"socket\": \"L1 Cache\",\n        \"size_max\": 128,\n        \"size_current\": 128,\n        \"speed\": 0,\n        \"mode\": {\n          \"hex\": \"0001\",\n          \"name\": \"Write Back\",\n          \"value\": 1\n        },\n        \"enabled\": true,\n        \"location\": {\n          \"hex\": \"0000\",\n          \"name\": \"Internal\",\n          \"value\": 0\n        },\n        \"socketed\": false,\n        \"level\": 0,\n        \"ecc\": {\n          \"hex\": \"0004\",\n          \"name\": \"Parity\",\n          \"value\": 4\n        },\n        \"cache_type\": {\n          \"hex\": \"0004\",\n          \"name\": \"Data\",\n          \"value\": 4\n        },\n        \"associativity\": {\n          \"hex\": \"0007\",\n          \"name\": \"8-way Set-Associative\",\n          \"value\": 7\n        },\n        \"sram_type_current\": [\n          \"Synchronous\"\n        ],\n        \"sram_type_supported\": [\n          \"Synchronous\"\n        ]\n      },\n      {\n        \"handle\": 34,\n        \"socket\": \"L1 Cache\",\n        \"size_max\": 256,\n        \"size_current\": 256,\n        \"speed\": 0,\n        \"mode\": {\n          \"hex\": \"0001\",\n          \"name\": \"Write Back\",\n          \"value\": 1\n        },\n        \"enabled\": true,\n        \"location\": {\n          \"hex\": \"0000\",\n          \"name\": \"Internal\",\n          \"value\": 0\n        },\n        \"socketed\": false,\n        \"level\": 0,\n        \"ecc\": {\n          \"hex\": \"0004\",\n          \"name\": \"Parity\",\n          \"value\": 4\n        },\n        \"cache_type\": {\n          \"hex\": \"0003\",\n          \"name\": \"Instruction\",\n          \"value\": 3\n        },\n        \"associativity\": {\n          \"hex\": \"0007\",\n          \"name\": \"8-way Set-Associative\",\n          \"value\": 7\n        },\n        \"sram_type_current\": [\n          \"Synchronous\"\n        ],\n        \"sram_type_supported\": [\n          \"Synchronous\"\n        ]\n      },\n      {\n        \"handle\": 35,\n        \"socket\": \"L2 Cache\",\n        \"size_max\": 2048,\n        \"size_current\": 2048,\n        \"speed\": 0,\n        \"mode\": {\n          \"hex\": \"0001\",\n          \"name\": \"Write Back\",\n          \"value\": 1\n        },\n        \"enabled\": true,\n        \"location\": {\n          \"hex\": \"0000\",\n          \"name\": \"Internal\",\n          \"value\": 0\n        },\n        \"socketed\": false,\n        \"level\": 1,\n        \"ecc\": {\n          \"hex\": \"0005\",\n          \"name\": \"Single-bit\",\n          \"value\": 5\n        },\n        \"cache_type\": {\n          \"hex\": \"0005\",\n          \"name\": \"Unified\",\n          \"value\": 5\n        },\n        \"associativity\": {\n          \"hex\": \"0008\",\n          \"name\": \"16-way Set-Associative\",\n          \"value\": 8\n        },\n        \"sram_type_current\": [\n          \"Synchronous\"\n        ],\n        \"sram_type_supported\": [\n          \"Synchronous\"\n        ]\n      },\n      {\n        \"handle\": 36,\n        \"socket\": \"L3 Cache\",\n        \"size_max\": 20480,\n        \"size_current\": 20480,\n        \"speed\": 0,\n        \"mode\": {\n          \"hex\": \"0001\",\n          \"name\": \"Write Back\",\n          \"value\": 1\n        },\n        \"enabled\": true,\n        \"location\": {\n          \"hex\": \"0000\",\n          \"name\": \"Internal\",\n          \"value\": 0\n        },\n        \"socketed\": false,\n        \"level\": 2,\n        \"ecc\": {\n          \"hex\": \"0006\",\n          \"name\": \"Multi-bit\",\n          \"value\": 6\n        },\n        \"cache_type\": {\n          \"hex\": \"0005\",\n          \"name\": \"Unified\",\n          \"value\": 5\n        },\n        \"associativity\": {\n          \"hex\": \"0001\",\n          \"name\": \"Other\",\n          \"value\": 1\n        },\n        \"sram_type_current\": [\n          \"Synchronous\"\n        ],\n        \"sram_type_supported\": [\n          \"Synchronous\"\n        ]\n      }\n    ],\n    \"chassis\": [\n      {\n        \"handle\": 3,\n        \"manufacturer\": \"To Be Filled By O.E.M.\",\n        \"version\": \"To Be Filled By O.E.M.\",\n        \"chassis_type\": {\n          \"hex\": \"0003\",\n          \"name\": \"Desktop\",\n          \"value\": 3\n        },\n        \"lock_present\": false,\n        \"bootup_state\": {\n          \"hex\": \"0003\",\n          \"name\": \"Safe\",\n          \"value\": 3\n        },\n        \"power_state\": {\n          \"hex\": \"0003\",\n          \"name\": \"Safe\",\n          \"value\": 3\n        },\n        \"thermal_state\": {\n          \"hex\": \"0003\",\n          \"name\": \"Safe\",\n          \"value\": 3\n        },\n        \"security_state\": {\n          \"hex\": \"0003\",\n          \"name\": \"None\",\n          \"value\": 3\n        },\n        \"oem\": \"0x0\"\n      }\n    ],\n    \"group_associations\": [\n      {\n        \"handle\": 41,\n        \"name\": \"$MEI\",\n        \"handles\": [\n          0\n        ]\n      }\n    ],\n    \"memory_array\": [\n      {\n        \"handle\": 13,\n        \"location\": {\n          \"hex\": \"0003\",\n          \"name\": \"Motherboard\",\n          \"value\": 3\n        },\n        \"usage\": {\n          \"hex\": \"0003\",\n          \"name\": \"System memory\",\n          \"value\": 3\n        },\n        \"ecc\": {\n          \"hex\": \"0003\",\n          \"name\": \"None\",\n          \"value\": 3\n        },\n        \"max_size\": \"0x8000000\",\n        \"error_handle\": 65534,\n        \"slots\": 4\n      }\n    ],\n    \"memory_array_mapped_address\": [\n      {\n        \"handle\": 18,\n        \"array_handle\": 13,\n        \"start_address\": \"0x0\",\n        \"end_address\": \"0x800000000\",\n        \"part_width\": 2\n      }\n    ],\n    \"memory_device\": [\n      {\n        \"handle\": 14,\n        \"location\": \"Controller0-ChannelA-DIMM0\",\n        \"bank_location\": \"BANK 0\",\n        \"manufacturer\": \"\",\n        \"part_number\": \"\",\n        \"array_handle\": 13,\n        \"error_handle\": 65534,\n        \"width\": 0,\n        \"ecc_bits\": 0,\n        \"size\": 0,\n        \"form_factor\": {\n          \"hex\": \"0009\",\n          \"name\": \"DIMM\",\n          \"value\": 9\n        },\n        \"set\": 0,\n        \"memory_type\": {\n          \"hex\": \"0002\",\n          \"name\": \"Unknown\",\n          \"value\": 2\n        },\n        \"memory_type_details\": null,\n        \"speed\": 0\n      },\n      {\n        \"handle\": 15,\n        \"location\": \"Controller0-ChannelA-DIMM1\",\n        \"bank_location\": \"BANK 0\",\n        \"manufacturer\": \"Team Group Inc\",\n        \"part_number\": \"TEAMGROUP-UD4-3200\",\n        \"array_handle\": 13,\n        \"error_handle\": 65534,\n        \"width\": 64,\n        \"ecc_bits\": 0,\n        \"size\": 16777216,\n        \"form_factor\": {\n          \"hex\": \"0009\",\n          \"name\": \"DIMM\",\n          \"value\": 9\n        },\n        \"set\": 0,\n        \"memory_type\": {\n          \"hex\": \"001a\",\n          \"name\": \"Other\",\n          \"value\": 26\n        },\n        \"memory_type_details\": [\n          \"Synchronous\"\n        ],\n        \"speed\": 2400\n      },\n      {\n        \"handle\": 16,\n        \"location\": \"Controller1-ChannelA-DIMM0\",\n        \"bank_location\": \"BANK 0\",\n        \"manufacturer\": \"\",\n        \"part_number\": \"\",\n        \"array_handle\": 13,\n        \"error_handle\": 65534,\n        \"width\": 0,\n        \"ecc_bits\": 0,\n        \"size\": 0,\n        \"form_factor\": {\n          \"hex\": \"0009\",\n          \"name\": \"DIMM\",\n          \"value\": 9\n        },\n        \"set\": 0,\n        \"memory_type\": {\n          \"hex\": \"0002\",\n          \"name\": \"Unknown\",\n          \"value\": 2\n        },\n        \"memory_type_details\": null,\n        \"speed\": 0\n      },\n      {\n        \"handle\": 17,\n        \"location\": \"Controller1-ChannelA-DIMM1\",\n        \"bank_location\": \"BANK 0\",\n        \"manufacturer\": \"Team Group Inc\",\n        \"part_number\": \"TEAMGROUP-UD4-3200\",\n        \"array_handle\": 13,\n        \"error_handle\": 65534,\n        \"width\": 64,\n        \"ecc_bits\": 0,\n        \"size\": 16777216,\n        \"form_factor\": {\n          \"hex\": \"0009\",\n          \"name\": \"DIMM\",\n          \"value\": 9\n        },\n        \"set\": 0,\n        \"memory_type\": {\n          \"hex\": \"001a\",\n          \"name\": \"Other\",\n          \"value\": 26\n        },\n        \"memory_type_details\": [\n          \"Synchronous\"\n        ],\n        \"speed\": 2400\n      }\n    ],\n    \"memory_device_mapped_address\": [\n      {\n        \"handle\": 22,\n        \"memory_device_handle\": 15,\n        \"array_map_handle\": 18,\n        \"start_address\": \"0x0\",\n        \"end_address\": \"0x400000000\",\n        \"row_position\": 1,\n        \"interleave_position\": 1,\n        \"interleave_depth\": 2\n      },\n      {\n        \"handle\": 23,\n        \"memory_device_handle\": 17,\n        \"array_map_handle\": 18,\n        \"start_address\": \"0x400000000\",\n        \"end_address\": \"0x800000000\",\n        \"row_position\": 1,\n        \"interleave_position\": 2,\n        \"interleave_depth\": 2\n      }\n    ],\n    \"processor\": [\n      {\n        \"handle\": 37,\n        \"socket\": \"CPUSocket\",\n        \"socket_type\": {\n          \"hex\": \"0040\",\n          \"name\": \"Other\",\n          \"value\": 64\n        },\n        \"socket_populated\": true,\n        \"manufacturer\": \"Intel(R) Corporation\",\n        \"version\": \"12th Gen Intel(R) Core(TM) i5-12600KF\",\n        \"part\": \"To Be Filled By O.E.M.\",\n        \"processor_type\": {\n          \"hex\": \"0003\",\n          \"name\": \"CPU\",\n          \"value\": 3\n        },\n        \"processor_family\": {\n          \"hex\": \"00cd\",\n          \"name\": \"Other\",\n          \"value\": 205\n        },\n        \"processor_status\": {\n          \"hex\": \"0001\",\n          \"name\": \"Enabled\",\n          \"value\": 1\n        },\n        \"clock_ext\": 100,\n        \"clock_max\": 4900,\n        \"cache_handle_l1\": 30,\n        \"cache_handle_l2\": 31,\n        \"cache_handle_l3\": 32\n      }\n    ],\n    \"slot\": [\n      {\n        \"handle\": 4,\n        \"designation\": \"Slot1\",\n        \"slot_type\": {\n          \"hex\": \"00a5\",\n          \"name\": \"Other\",\n          \"value\": 165\n        },\n        \"bus_width\": {\n          \"hex\": \"000d\",\n          \"name\": \"Other\",\n          \"value\": 13\n        },\n        \"usage\": {\n          \"hex\": \"0004\",\n          \"name\": \"In Use\",\n          \"value\": 4\n        },\n        \"length\": {\n          \"hex\": \"0004\",\n          \"name\": \"Long\",\n          \"value\": 4\n        },\n        \"id\": 17,\n        \"features\": [\n          \"3.3 V\",\n          \"Shared\",\n          \"PME#\"\n        ]\n      },\n      {\n        \"handle\": 5,\n        \"designation\": \"Slot2\",\n        \"slot_type\": {\n          \"hex\": \"00a5\",\n          \"name\": \"Other\",\n          \"value\": 165\n        },\n        \"bus_width\": {\n          \"hex\": \"0008\",\n          \"name\": \"Other\",\n          \"value\": 8\n        },\n        \"usage\": {\n          \"hex\": \"0003\",\n          \"name\": \"Available\",\n          \"value\": 3\n        },\n        \"length\": {\n          \"hex\": \"0003\",\n          \"name\": \"Short\",\n          \"value\": 3\n        },\n        \"id\": 18,\n        \"features\": [\n          \"3.3 V\",\n          \"Shared\",\n          \"PME#\"\n        ]\n      },\n      {\n        \"handle\": 6,\n        \"designation\": \"Slot3\",\n        \"slot_type\": {\n          \"hex\": \"00a5\",\n          \"name\": \"Other\",\n          \"value\": 165\n        },\n        \"bus_width\": {\n          \"hex\": \"000a\",\n          \"name\": \"Other\",\n          \"value\": 10\n        },\n        \"usage\": {\n          \"hex\": \"0003\",\n          \"name\": \"Available\",\n          \"value\": 3\n        },\n        \"length\": {\n          \"hex\": \"0003\",\n          \"name\": \"Short\",\n          \"value\": 3\n        },\n        \"id\": 19,\n        \"features\": [\n          \"3.3 V\",\n          \"Shared\",\n          \"PME#\"\n        ]\n      },\n      {\n        \"handle\": 7,\n        \"designation\": \"M2_1\",\n        \"slot_type\": {\n          \"hex\": \"00a5\",\n          \"name\": \"Other\",\n          \"value\": 165\n        },\n        \"bus_width\": {\n          \"hex\": \"000a\",\n          \"name\": \"Other\",\n          \"value\": 10\n        },\n        \"usage\": {\n          \"hex\": \"0004\",\n          \"name\": \"In Use\",\n          \"value\": 4\n        },\n        \"length\": {\n          \"hex\": \"0003\",\n          \"name\": \"Short\",\n          \"value\": 3\n        },\n        \"id\": 33,\n        \"features\": [\n          \"3.3 V\",\n          \"Shared\",\n          \"PME#\"\n        ]\n      },\n      {\n        \"handle\": 8,\n        \"designation\": \"M2_2\",\n        \"slot_type\": {\n          \"hex\": \"00a5\",\n          \"name\": \"Other\",\n          \"value\": 165\n        },\n        \"bus_width\": {\n          \"hex\": \"000a\",\n          \"name\": \"Other\",\n          \"value\": 10\n        },\n        \"usage\": {\n          \"hex\": \"0003\",\n          \"name\": \"Available\",\n          \"value\": 3\n        },\n        \"length\": {\n          \"hex\": \"0003\",\n          \"name\": \"Short\",\n          \"value\": 3\n        },\n        \"id\": 34,\n        \"features\": [\n          \"3.3 V\",\n          \"Shared\",\n          \"PME#\"\n        ]\n      },\n      {\n        \"handle\": 9,\n        \"designation\": \"M2_Wifi\",\n        \"slot_type\": {\n          \"hex\": \"00a5\",\n          \"name\": \"Other\",\n          \"value\": 165\n        },\n        \"bus_width\": {\n          \"hex\": \"0008\",\n          \"name\": \"Other\",\n          \"value\": 8\n        },\n        \"usage\": {\n          \"hex\": \"0003\",\n          \"name\": \"Available\",\n          \"value\": 3\n        },\n        \"length\": {\n          \"hex\": \"0003\",\n          \"name\": \"Short\",\n          \"value\": 3\n        },\n        \"id\": 49,\n        \"features\": [\n          \"3.3 V\",\n          \"Shared\",\n          \"PME#\"\n        ]\n      }\n    ],\n    \"system\": {\n      \"handle\": 1,\n      \"manufacturer\": \"ASRock\",\n      \"product\": \"B760M Pro RS/D4 WiFi\",\n      \"version\": \"To Be Filled By O.E.M.\",\n      \"wake_up\": {\n        \"hex\": \"0006\",\n        \"name\": \"Power Switch\",\n        \"value\": 6\n      }\n    }\n  }\n}"
  },
  {
    "path": "configurations/nixos/laptop/default.nix",
    "content": "# NixOS configuration for laptop\n{\n  flake,\n  pkgs,\n  lib,\n  ...\n}:\nlet\n  inherit (flake) inputs self;\nin\n{\n  imports = [\n    # Internal modules via flake outputs\n    self.nixosModules.default\n    self.nixosModules.users-bbigras\n    self.nixosModules.graphical\n    self.nixosModules.graphical-cosmic\n    self.nixosModules.graphical-steam\n    self.nixosModules.graphical-trusted\n    self.nixosModules.pam-limits\n    self.nixosModules.hardware-secureboot\n    self.nixosModules.services-podman\n    self.nixosModules.services-wivrn\n    self.nixosModules.services-virt-manager\n\n    { config.facter.reportPath = ./facter.json; }\n    inputs.nixos-hardware.nixosModules.framework-12-13th-gen-intel\n\n    # Host-specific files\n    # ./state.nix\n    ./disko.nix\n  ];\n\n  # Host-specific home-manager user config\n  home-manager.users.bbigras.imports = [\n    self.homeModules.trusted\n    self.homeModules.emacs\n    self.homeModules.syncthing\n    self.homeModules.graphical\n    self.homeModules.graphical-heroic\n    self.homeModules.graphical-lutris\n    self.homeModules.tkey-ssh-agent\n  ];\n\n  # SSH target for remote activation\n\n  # Platform\n  nixpkgs.hostPlatform = \"x86_64-linux\";\n\n  # Host-specific configuration\n  boot = {\n    initrd = {\n      systemd.enable = true;\n    };\n    lanzaboote.pkiBundle = lib.mkForce \"/var/lib/sbctl\";\n    plymouth.enable = true;\n  };\n\n  environment.systemPackages = with pkgs; [\n    cntr\n    wireguard-tools\n  ];\n\n  # agenix-rekey host pubkey\n  age.rekey.hostPubkey = \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGbvuozkVenMJeMFkpnnXA6qWTFfDhkjRq26VSgDSHme\";\n\n  networking = {\n    # hostId = \"\";\n    hostName = \"laptop\";\n    wireguard.enable = true;\n    wireless.enable = false;\n  };\n\n  nix.settings.max-substitution-jobs = 32;\n\n  security.sudo.wheelNeedsPassword = true;\n\n  services = {\n    flatpak.enable = true;\n    udisks2.enable = true;\n    fwupd = {\n      enable = true;\n      extraRemotes = [ \"lvfs-testing\" ];\n      # uefiCapsuleSettings.DisableCapsuleUpdateOnDisk = true;\n    };\n    thermald.enable = true;\n    tlp.enable = false;\n    tuned.enable = true;\n  };\n\n  networking.networkmanager = {\n    enable = true;\n    dns = \"systemd-resolved\";\n    wifi = {\n      backend = \"iwd\";\n      macAddress = \"stable-ssid\";\n      # powersave = false;\n    };\n    ensureProfiles = {\n      environmentFiles = [\n        # config.sops.secrets.networkmanager.path\n      ];\n      profiles = {\n        home = {\n          connection = {\n            id = \"home\";\n            type = \"wifi\";\n            # uuid = \"1a2538e1-1a72-4162-bc85-58682ecd91eb\";\n            autoconnect = true;\n          };\n          ipv4 = {\n            method = \"auto\";\n          };\n          ipv6 = {\n            addr-gen-mode = \"default\";\n            method = \"auto\";\n          };\n          # proxy = { };\n          wifi = {\n            ssid = \"$HOME_SSID\";\n          };\n          wifi-security = {\n            key-mgmt = \"wpa-psk\";\n            psk = \"$HOME_PASSPHRASE\";\n          };\n        };\n        phone = {\n          connection = {\n            autoconnect-priority = \"-1\";\n            id = \"phone\";\n            metered = \"1\";\n            # timestamp = \"1752765639\";\n            type = \"wifi\";\n            # uuid = \"d3c51cff-ccaa-481e-8d93-a02c5ac3bdda\";\n          };\n          ipv4 = {\n            method = \"auto\";\n          };\n          ipv6 = {\n            addr-gen-mode = \"stable-privacy\";\n            method = \"auto\";\n          };\n          # proxy = { };\n          wifi = {\n            # cloned-mac-address = \"stable-ssid\";\n            mode = \"infrastructure\";\n            ssid = \"$PHONE_PASSPHRASE\";\n          };\n          wifi-security = {\n            key-mgmt = \"wpa-psk\";\n            psk = \"$PHONE_PSK\";\n          };\n        };\n      };\n    };\n  };\n\n  # These options are unnecessary when managing DNS ourselves\n  networking.useDHCP = false;\n  networking.dhcpcd.enable = false;\n  facter.detected.dhcp.enable = false;\n}\n"
  },
  {
    "path": "configurations/nixos/laptop/disko.nix",
    "content": "{\n  fileSystems = {\n    \"/nix/state\".neededForBoot = true;\n    \"/nix\".neededForBoot = true;\n    \"/home\".neededForBoot = true;\n  };\n\n  # https://github.com/nix-community/disko/issues/452#issuecomment-1868276953\n  disko.devices = {\n    disk = {\n      main = {\n        type = \"disk\";\n        device = \"/dev/disk/by-id/nvme-WD_BLACK_SN770M_2TB_2508DD400188\";\n        content = {\n          type = \"gpt\";\n          partitions = {\n            ESP = {\n              priority = 1;\n              size = \"512M\";\n              type = \"EF00\";\n              # bootable = true;\n              content = {\n                type = \"filesystem\";\n                format = \"vfat\";\n                mountpoint = \"/boot\";\n                mountOptions = [ \"umask=0077\" ];\n              };\n            };\n            luks = {\n              size = \"100%\";\n              content = {\n                type = \"luks\";\n                name = \"crypted\";\n                settings = {\n                  allowDiscards = true;\n                };\n                content = {\n                  type = \"btrfs\";\n                  extraArgs = [ \"-f\" ];\n                  postCreateHook = ''\n                    MNTPOINT=$(mktemp -d)\n                    mount \"/dev/mapper/crypted\" \"$MNTPOINT\" -o subvol=/\n                    trap 'umount $MNTPOINT; rm -rf $MNTPOINT' EXIT\n                    btrfs subvolume snapshot -r $MNTPOINT/root $MNTPOINT/root-blank\n                    btrfs subvolume snapshot -r $MNTPOINT/home $MNTPOINT/home-blank\n                  '';\n                  subvolumes = {\n                    \"/root\" = {\n                      mountpoint = \"/\";\n                      mountOptions = [\n                        \"compress=zstd\"\n                        \"noatime\"\n                      ];\n                    };\n                    \"/home\" = {\n                      mountpoint = \"/home\";\n                      mountOptions = [\n                        \"compress=zstd\"\n                        \"noatime\"\n                      ];\n                    };\n                    \"/nix\" = {\n                      mountpoint = \"/nix\";\n                      mountOptions = [\n                        \"compress=zstd\"\n                        \"noatime\"\n                      ];\n                    };\n                    \"/nix/state\" = {\n                      mountpoint = \"/nix/state\";\n                      mountOptions = [\n                        \"compress=zstd\"\n                        \"noatime\"\n                      ];\n                    };\n                    \"/swap\" = {\n                      mountpoint = \"/.swapvol\";\n                      swap.swapfile.size = \"20M\";\n                    };\n                  };\n                };\n              };\n            };\n          };\n        };\n      };\n    };\n  };\n}\n"
  },
  {
    "path": "configurations/nixos/laptop/facter.json",
    "content": "{\n  \"version\": 1,\n  \"system\": \"x86_64-linux\",\n  \"virtualisation\": \"none\",\n  \"hardware\": {\n    \"bios\": {\n      \"apm_info\": {\n        \"supported\": false,\n        \"enabled\": false,\n        \"version\": 0,\n        \"sub_version\": 0,\n        \"bios_flags\": 0\n      },\n      \"vbe_info\": {\n        \"version\": 0,\n        \"video_memory\": 0\n      },\n      \"pnp\": false,\n      \"pnp_id\": 0,\n      \"lba_support\": false,\n      \"low_memory_size\": 0,\n      \"smbios_version\": 772\n    },\n    \"bluetooth\": [\n      {\n        \"index\": 41,\n        \"attached_to\": 40,\n        \"class_list\": [\n          \"usb\",\n          \"bluetooth\"\n        ],\n        \"bus_type\": {\n          \"hex\": \"0086\",\n          \"name\": \"USB\",\n          \"value\": 134\n        },\n        \"slot\": {\n          \"bus\": 0,\n          \"number\": 0\n        },\n        \"base_class\": {\n          \"hex\": \"0115\",\n          \"name\": \"Bluetooth Device\",\n          \"value\": 277\n        },\n        \"vendor\": {\n          \"hex\": \"8087\",\n          \"value\": 32903\n        },\n        \"device\": {\n          \"hex\": \"0033\",\n          \"value\": 51\n        },\n        \"model\": \"Bluetooth Device\",\n        \"sysfs_id\": \"/devices/pci0000:00/0000:00:14.0/usb3/3-10/3-10:1.0\",\n        \"sysfs_bus_id\": \"3-10:1.0\",\n        \"resources\": [\n          {\n            \"type\": \"baud\",\n            \"speed\": 12000000,\n            \"bits\": 0,\n            \"stop_bits\": 0,\n            \"parity\": 0,\n            \"handshake\": 0\n          }\n        ],\n        \"detail\": {\n          \"device_class\": {\n            \"hex\": \"00e0\",\n            \"name\": \"wireless\",\n            \"value\": 224\n          },\n          \"device_subclass\": {\n            \"hex\": \"0001\",\n            \"name\": \"audio\",\n            \"value\": 1\n          },\n          \"device_protocol\": 1,\n          \"interface_class\": {\n            \"hex\": \"00e0\",\n            \"name\": \"wireless\",\n            \"value\": 224\n          },\n          \"interface_subclass\": {\n            \"hex\": \"0001\",\n            \"name\": \"audio\",\n            \"value\": 1\n          },\n          \"interface_protocol\": 1,\n          \"interface_number\": 0,\n          \"interface_alternate_setting\": 0\n        },\n        \"hotplug\": \"usb\",\n        \"driver\": \"btusb\",\n        \"driver_module\": \"btusb\",\n        \"drivers\": [\n          \"btusb\"\n        ],\n        \"driver_modules\": [\n          \"btusb\"\n        ],\n        \"module_alias\": \"usb:v8087p0033d0000dcE0dsc01dp01icE0isc01ip01in00\"\n      },\n      {\n        \"index\": 45,\n        \"attached_to\": 40,\n        \"class_list\": [\n          \"usb\",\n          \"bluetooth\"\n        ],\n        \"bus_type\": {\n          \"hex\": \"0086\",\n          \"name\": \"USB\",\n          \"value\": 134\n        },\n        \"slot\": {\n          \"bus\": 0,\n          \"number\": 0\n        },\n        \"base_class\": {\n          \"hex\": \"0115\",\n          \"name\": \"Bluetooth Device\",\n          \"value\": 277\n        },\n        \"vendor\": {\n          \"hex\": \"8087\",\n          \"value\": 32903\n        },\n        \"device\": {\n          \"hex\": \"0033\",\n          \"value\": 51\n        },\n        \"model\": \"Bluetooth Device\",\n        \"sysfs_id\": \"/devices/pci0000:00/0000:00:14.0/usb3/3-10/3-10:1.1\",\n        \"sysfs_bus_id\": \"3-10:1.1\",\n        \"resources\": [\n          {\n            \"type\": \"baud\",\n            \"speed\": 12000000,\n            \"bits\": 0,\n            \"stop_bits\": 0,\n            \"parity\": 0,\n            \"handshake\": 0\n          }\n        ],\n        \"detail\": {\n          \"device_class\": {\n            \"hex\": \"00e0\",\n            \"name\": \"wireless\",\n            \"value\": 224\n          },\n          \"device_subclass\": {\n            \"hex\": \"0001\",\n            \"name\": \"audio\",\n            \"value\": 1\n          },\n          \"device_protocol\": 1,\n          \"interface_class\": {\n            \"hex\": \"00e0\",\n            \"name\": \"wireless\",\n            \"value\": 224\n          },\n          \"interface_subclass\": {\n            \"hex\": \"0001\",\n            \"name\": \"audio\",\n            \"value\": 1\n          },\n          \"interface_protocol\": 1,\n          \"interface_number\": 1,\n          \"interface_alternate_setting\": 0\n        },\n        \"hotplug\": \"usb\",\n        \"driver\": \"btusb\",\n        \"driver_module\": \"btusb\",\n        \"drivers\": [\n          \"btusb\"\n        ],\n        \"driver_modules\": [\n          \"btusb\"\n        ],\n        \"module_alias\": \"usb:v8087p0033d0000dcE0dsc01dp01icE0isc01ip01in01\"\n      }\n    ],\n    \"bridge\": [\n      {\n        \"index\": 19,\n        \"attached_to\": 0,\n        \"class_list\": [\n          \"pci\",\n          \"bridge\"\n        ],\n        \"bus_type\": {\n          \"hex\": \"0004\",\n          \"name\": \"PCI\",\n          \"value\": 4\n        },\n        \"slot\": {\n          \"bus\": 0,\n          \"number\": 31\n        },\n        \"base_class\": {\n          \"hex\": \"0006\",\n          \"name\": \"Bridge\",\n          \"value\": 6\n        },\n        \"sub_class\": {\n          \"hex\": \"0001\",\n          \"name\": \"ISA bridge\",\n          \"value\": 1\n        },\n        \"vendor\": {\n          \"hex\": \"8086\",\n          \"name\": \"Intel Corporation\",\n          \"value\": 32902\n        },\n        \"sub_vendor\": {\n          \"hex\": \"f111\",\n          \"value\": 61713\n        },\n        \"device\": {\n          \"hex\": \"519d\",\n          \"value\": 20893\n        },\n        \"sub_device\": {\n          \"hex\": \"000c\",\n          \"value\": 12\n        },\n        \"revision\": {\n          \"hex\": \"0001\",\n          \"value\": 1\n        },\n        \"model\": \"Intel ISA bridge\",\n        \"sysfs_id\": \"/devices/pci0000:00/0000:00:1f.0\",\n        \"sysfs_bus_id\": \"0000:00:1f.0\",\n        \"detail\": {\n          \"function\": 0,\n          \"command\": 1031,\n          \"header_type\": 0,\n          \"secondary_bus\": 0,\n          \"prog_if\": 0\n        },\n        \"module_alias\": \"pci:v00008086d0000519Dsv0000F111sd0000000Cbc06sc01i00\"\n      },\n      {\n        \"index\": 27,\n        \"attached_to\": 0,\n        \"class_list\": [\n          \"pci\",\n          \"bridge\"\n        ],\n        \"bus_type\": {\n          \"hex\": \"0004\",\n          \"name\": \"PCI\",\n          \"value\": 4\n        },\n        \"slot\": {\n          \"bus\": 0,\n          \"number\": 0\n        },\n        \"base_class\": {\n          \"hex\": \"0006\",\n          \"name\": \"Bridge\",\n          \"value\": 6\n        },\n        \"sub_class\": {\n          \"hex\": \"0000\",\n          \"name\": \"Host bridge\",\n          \"value\": 0\n        },\n        \"vendor\": {\n          \"hex\": \"8086\",\n          \"name\": \"Intel Corporation\",\n          \"value\": 32902\n        },\n        \"sub_vendor\": {\n          \"hex\": \"f111\",\n          \"value\": 61713\n        },\n        \"device\": {\n          \"hex\": \"a708\",\n          \"value\": 42760\n        },\n        \"sub_device\": {\n          \"hex\": \"000c\",\n          \"value\": 12\n        },\n        \"revision\": {\n          \"hex\": \"0001\",\n          \"value\": 1\n        },\n        \"model\": \"Intel Host bridge\",\n        \"sysfs_id\": \"/devices/pci0000:00/0000:00:00.0\",\n        \"sysfs_bus_id\": \"0000:00:00.0\",\n        \"detail\": {\n          \"function\": 0,\n          \"command\": 6,\n          \"header_type\": 0,\n          \"secondary_bus\": 0,\n          \"prog_if\": 0\n        },\n        \"driver\": \"igen6_edac\",\n        \"driver_module\": \"igen6_edac\",\n        \"drivers\": [\n          \"igen6_edac\"\n        ],\n        \"driver_modules\": [\n          \"igen6_edac\"\n        ],\n        \"module_alias\": \"pci:v00008086d0000A708sv0000F111sd0000000Cbc06sc00i00\"\n      },\n      {\n        \"index\": 29,\n        \"attached_to\": 0,\n        \"class_list\": [\n          \"pci\",\n          \"bridge\"\n        ],\n        \"bus_type\": {\n          \"hex\": \"0004\",\n          \"name\": \"PCI\",\n          \"value\": 4\n        },\n        \"slot\": {\n          \"bus\": 0,\n          \"number\": 6\n        },\n        \"base_class\": {\n          \"hex\": \"0006\",\n          \"name\": \"Bridge\",\n          \"value\": 6\n        },\n        \"sub_class\": {\n          \"hex\": \"0004\",\n          \"name\": \"PCI bridge\",\n          \"value\": 4\n        },\n        \"pci_interface\": {\n          \"hex\": \"0000\",\n          \"name\": \"Normal decode\",\n          \"value\": 0\n        },\n        \"vendor\": {\n          \"hex\": \"8086\",\n          \"name\": \"Intel Corporation\",\n          \"value\": 32902\n        },\n        \"sub_vendor\": {\n          \"hex\": \"f111\",\n          \"value\": 61713\n        },\n        \"device\": {\n          \"hex\": \"a74d\",\n          \"value\": 42829\n        },\n        \"sub_device\": {\n          \"hex\": \"000c\",\n          \"value\": 12\n        },\n        \"revision\": {\n          \"hex\": \"0001\",\n          \"value\": 1\n        },\n        \"model\": \"Intel PCI bridge\",\n        \"sysfs_id\": \"/devices/pci0000:00/0000:00:06.0\",\n        \"sysfs_bus_id\": \"0000:00:06.0\",\n        \"detail\": {\n          \"function\": 0,\n          \"command\": 1287,\n          \"header_type\": 1,\n          \"secondary_bus\": 1,\n          \"prog_if\": 0\n        },\n        \"driver\": \"pcieport\",\n        \"driver_module\": \"pcieportdrv\",\n        \"drivers\": [\n          \"pcieport\"\n        ],\n        \"driver_modules\": [\n          \"pcieportdrv\"\n        ],\n        \"module_alias\": \"pci:v00008086d0000A74Dsv0000F111sd0000000Cbc06sc04i00\"\n      }\n    ],\n    \"camera\": [\n      {\n        \"index\": 39,\n        \"attached_to\": 40,\n        \"class_list\": [\n          \"camera\",\n          \"usb\"\n        ],\n        \"bus_type\": {\n          \"hex\": \"0086\",\n          \"name\": \"USB\",\n          \"value\": 134\n        },\n        \"slot\": {\n          \"bus\": 0,\n          \"number\": 0\n        },\n        \"base_class\": {\n          \"hex\": \"010f\",\n          \"name\": \"Camera\",\n          \"value\": 271\n        },\n        \"vendor\": {\n          \"hex\": \"32ac\",\n          \"name\": \"Framework\",\n          \"value\": 12972\n        },\n        \"device\": {\n          \"hex\": \"001d\",\n          \"name\": \"Framework Laptop 12 Webcam Module\",\n          \"value\": 29\n        },\n        \"revision\": {\n          \"hex\": \"0000\",\n          \"name\": \"0.16\",\n          \"value\": 0\n        },\n        \"serial\": \"0001\",\n        \"model\": \"Framework Laptop 12 Webcam Module\",\n        \"sysfs_id\": \"/devices/pci0000:00/0000:00:14.0/usb3/3-7/3-7:1.0\",\n        \"sysfs_bus_id\": \"3-7:1.0\",\n        \"resources\": [\n          {\n            \"type\": \"baud\",\n            \"speed\": 480000000,\n            \"bits\": 0,\n            \"stop_bits\": 0,\n            \"parity\": 0,\n            \"handshake\": 0\n          }\n        ],\n        \"detail\": {\n          \"device_class\": {\n            \"hex\": \"00ef\",\n            \"name\": \"miscellaneous\",\n            \"value\": 239\n          },\n          \"device_subclass\": {\n            \"hex\": \"0002\",\n            \"name\": \"comm\",\n            \"value\": 2\n          },\n          \"device_protocol\": 1,\n          \"interface_class\": {\n            \"hex\": \"000e\",\n            \"name\": \"video\",\n            \"value\": 14\n          },\n          \"interface_subclass\": {\n            \"hex\": \"0001\",\n            \"name\": \"audio\",\n            \"value\": 1\n          },\n          \"interface_protocol\": 1,\n          \"interface_number\": 0,\n          \"interface_alternate_setting\": 0,\n          \"interface_association\": {\n            \"function_class\": {\n              \"hex\": \"000e\",\n              \"name\": \"video\",\n              \"value\": 14\n            },\n            \"function_subclass\": {\n              \"hex\": \"0003\",\n              \"name\": \"hid\",\n              \"value\": 3\n            },\n            \"function_protocol\": 0,\n            \"interface_count\": 2,\n            \"first_interface\": 0\n          }\n        },\n        \"hotplug\": \"usb\",\n        \"driver\": \"uvcvideo\",\n        \"driver_module\": \"uvcvideo\",\n        \"drivers\": [\n          \"uvcvideo\"\n        ],\n        \"driver_modules\": [\n          \"uvcvideo\"\n        ],\n        \"module_alias\": \"usb:v32ACp001Dd0016dcEFdsc02dp01ic0Eisc01ip01in00\"\n      },\n      {\n        \"index\": 42,\n        \"attached_to\": 40,\n        \"class_list\": [\n          \"camera\",\n          \"usb\"\n        ],\n        \"bus_type\": {\n          \"hex\": \"0086\",\n          \"name\": \"USB\",\n          \"value\": 134\n        },\n        \"slot\": {\n          \"bus\": 0,\n          \"number\": 0\n        },\n        \"base_class\": {\n          \"hex\": \"010f\",\n          \"name\": \"Camera\",\n          \"value\": 271\n        },\n        \"vendor\": {\n          \"hex\": \"32ac\",\n          \"name\": \"Framework\",\n          \"value\": 12972\n        },\n        \"device\": {\n          \"hex\": \"001d\",\n          \"name\": \"Framework Laptop 12 Webcam Module\",\n          \"value\": 29\n        },\n        \"revision\": {\n          \"hex\": \"0000\",\n          \"name\": \"0.16\",\n          \"value\": 0\n        },\n        \"serial\": \"0001\",\n        \"model\": \"Framework Laptop 12 Webcam Module\",\n        \"sysfs_id\": \"/devices/pci0000:00/0000:00:14.0/usb3/3-7/3-7:1.1\",\n        \"sysfs_bus_id\": \"3-7:1.1\",\n        \"resources\": [\n          {\n            \"type\": \"baud\",\n            \"speed\": 480000000,\n            \"bits\": 0,\n            \"stop_bits\": 0,\n            \"parity\": 0,\n            \"handshake\": 0\n          }\n        ],\n        \"detail\": {\n          \"device_class\": {\n            \"hex\": \"00ef\",\n            \"name\": \"miscellaneous\",\n            \"value\": 239\n          },\n          \"device_subclass\": {\n            \"hex\": \"0002\",\n            \"name\": \"comm\",\n            \"value\": 2\n          },\n          \"device_protocol\": 1,\n          \"interface_class\": {\n            \"hex\": \"000e\",\n            \"name\": \"video\",\n            \"value\": 14\n          },\n          \"interface_subclass\": {\n            \"hex\": \"0002\",\n            \"name\": \"comm\",\n            \"value\": 2\n          },\n          \"interface_protocol\": 1,\n          \"interface_number\": 1,\n          \"interface_alternate_setting\": 0,\n          \"interface_association\": {\n            \"function_class\": {\n              \"hex\": \"000e\",\n              \"name\": \"video\",\n              \"value\": 14\n            },\n            \"function_subclass\": {\n              \"hex\": \"0003\",\n              \"name\": \"hid\",\n              \"value\": 3\n            },\n            \"function_protocol\": 0,\n            \"interface_count\": 2,\n            \"first_interface\": 0\n          }\n        },\n        \"hotplug\": \"usb\",\n        \"driver\": \"uvcvideo\",\n        \"driver_module\": \"uvcvideo\",\n        \"drivers\": [\n          \"uvcvideo\"\n        ],\n        \"driver_modules\": [\n          \"uvcvideo\"\n        ],\n        \"module_alias\": \"usb:v32ACp001Dd0016dcEFdsc02dp01ic0Eisc02ip01in01\"\n      }\n    ],\n    \"cpu\": [\n      {\n        \"architecture\": \"x86_64\",\n        \"vendor_name\": \"GenuineIntel\",\n        \"model_name\": \"13th Gen Intel(R) Core(TM) i5-1334U\",\n        \"family\": 6,\n        \"model\": 186,\n        \"stepping\": 3,\n        \"features\": [\n          \"fpu\",\n          \"vme\",\n          \"de\",\n          \"pse\",\n          \"tsc\",\n          \"msr\",\n          \"pae\",\n          \"mce\",\n          \"cx8\",\n          \"apic\",\n          \"sep\",\n          \"mtrr\",\n          \"pge\",\n          \"mca\",\n          \"cmov\",\n          \"pat\",\n          \"pse36\",\n          \"clflush\",\n          \"dts\",\n          \"acpi\",\n          \"mmx\",\n          \"fxsr\",\n          \"sse\",\n          \"sse2\",\n          \"ss\",\n          \"ht\",\n          \"tm\",\n          \"pbe\",\n          \"syscall\",\n          \"nx\",\n          \"pdpe1gb\",\n          \"rdtscp\",\n          \"lm\",\n          \"constant_tsc\",\n          \"art\",\n          \"arch_perfmon\",\n          \"pebs\",\n          \"bts\",\n          \"rep_good\",\n          \"nopl\",\n          \"xtopology\",\n          \"nonstop_tsc\",\n          \"cpuid\",\n          \"aperfmperf\",\n          \"tsc_known_freq\",\n          \"pni\",\n          \"pclmulqdq\",\n          \"dtes64\",\n          \"monitor\",\n          \"ds_cpl\",\n          \"vmx\",\n          \"smx\",\n          \"est\",\n          \"tm2\",\n          \"ssse3\",\n          \"sdbg\",\n          \"fma\",\n          \"cx16\",\n          \"xtpr\",\n          \"pdcm\",\n          \"pcid\",\n          \"sse4_1\",\n          \"sse4_2\",\n          \"x2apic\",\n          \"movbe\",\n          \"popcnt\",\n          \"tsc_deadline_timer\",\n          \"aes\",\n          \"xsave\",\n          \"avx\",\n          \"f16c\",\n          \"rdrand\",\n          \"lahf_lm\",\n          \"abm\",\n          \"3dnowprefetch\",\n          \"cpuid_fault\",\n          \"epb\",\n          \"ssbd\",\n          \"ibrs\",\n          \"ibpb\",\n          \"stibp\",\n          \"ibrs_enhanced\",\n          \"tpr_shadow\",\n          \"flexpriority\",\n          \"ept\",\n          \"vpid\",\n          \"ept_ad\",\n          \"fsgsbase\",\n          \"tsc_adjust\",\n          \"bmi1\",\n          \"avx2\",\n          \"smep\",\n          \"bmi2\",\n          \"erms\",\n          \"invpcid\",\n          \"rdseed\",\n          \"adx\",\n          \"smap\",\n          \"clflushopt\",\n          \"clwb\",\n          \"intel_pt\",\n          \"sha_ni\",\n          \"xsaveopt\",\n          \"xsavec\",\n          \"xgetbv1\",\n          \"xsaves\",\n          \"split_lock_detect\",\n          \"user_shstk\",\n          \"avx_vnni\",\n          \"dtherm\",\n          \"ida\",\n          \"arat\",\n          \"pln\",\n          \"pts\",\n          \"hwp\",\n          \"hwp_notify\",\n          \"hwp_act_window\",\n          \"hwp_epp\",\n          \"hwp_pkg_req\",\n          \"hfi\",\n          \"vnmi\",\n          \"umip\",\n          \"pku\",\n          \"ospke\",\n          \"waitpkg\",\n          \"gfni\",\n          \"vaes\",\n          \"vpclmulqdq\",\n          \"rdpid\",\n          \"movdiri\",\n          \"movdir64b\",\n          \"fsrm\",\n          \"md_clear\",\n          \"serialize\",\n          \"arch_lbr\",\n          \"ibt\",\n          \"flush_l1d\",\n          \"arch_capabilities\"\n        ],\n        \"bugs\": [\n          \"spectre_v1\",\n          \"spectre_v2\",\n          \"spec_store_bypass\",\n          \"swapgs\",\n          \"eibrs_pbrsb\",\n          \"rfds\",\n          \"bhi\"\n        ],\n        \"power_management\": [\n          \"\"\n        ],\n        \"bogo\": 4992,\n        \"cache\": 12288,\n        \"units\": 64,\n        \"physical_id\": 0,\n        \"siblings\": 12,\n        \"cores\": 10,\n        \"fpu\": false,\n        \"fpu_exception\": false,\n        \"cpuid_level\": 32,\n        \"write_protect\": false,\n        \"clflush_size\": 64,\n        \"cache_alignment\": 64,\n        \"address_sizes\": {\n          \"physical\": \"0x27\",\n          \"virtual\": \"0x30\"\n        }\n      }\n    ],\n    \"disk\": [\n      {\n        \"index\": 36,\n        \"attached_to\": 23,\n        \"class_list\": [\n          \"disk\",\n          \"block_device\",\n          \"nvme\"\n        ],\n        \"bus_type\": {\n          \"hex\": \"0096\",\n          \"name\": \"NVME\",\n          \"value\": 150\n        },\n        \"slot\": {\n          \"bus\": 0,\n          \"number\": 0\n        },\n        \"base_class\": {\n          \"hex\": \"0106\",\n          \"name\": \"Mass Storage Device\",\n          \"value\": 262\n        },\n        \"sub_class\": {\n          \"hex\": \"0000\",\n          \"name\": \"Disk\",\n          \"value\": 0\n        },\n        \"vendor\": {\n          \"hex\": \"15b7\",\n          \"value\": 5559\n        },\n        \"sub_vendor\": {\n          \"hex\": \"15b7\",\n          \"value\": 5559\n        },\n        \"device\": {\n          \"hex\": \"5042\",\n          \"name\": \"WD_BLACK SN770M 2TB\",\n          \"value\": 20546\n        },\n        \"sub_device\": {\n          \"hex\": \"5042\",\n          \"value\": 20546\n        },\n        \"serial\": \"2508DD400188\",\n        \"model\": \"WD_BLACK SN770M 2TB\",\n        \"sysfs_id\": \"/class/block/nvme0n1\",\n        \"sysfs_bus_id\": \"nvme0\",\n        \"sysfs_device_link\": \"/devices/pci0000:00/0000:00:06.0/0000:01:00.0/nvme/nvme0\",\n        \"unix_device_names\": [\n          \"/dev/disk/by-id/nvme-WD_BLACK_SN770M_2TB_2508DD400188\",\n          \"/dev/disk/by-id/nvme-WD_BLACK_SN770M_2TB_2508DD400188_1\",\n          \"/dev/disk/by-id/nvme-eui.e8238fa6bf530001001b444a454c0054\",\n          \"/dev/disk/by-path/pci-0000:01:00.0-nvme-1\",\n          \"/dev/nvme0n1\"\n        ],\n        \"resources\": [\n          {\n            \"type\": \"disk_geo\",\n            \"cylinders\": 1907729,\n            \"heads\": 64,\n            \"sectors\": 32,\n            \"size\": \"0x0\",\n            \"geo_type\": \"logical\"\n          },\n          {\n            \"type\": \"size\",\n            \"unit\": \"sectors\",\n            \"value_1\": 3907029168,\n            \"value_2\": 512\n          }\n        ],\n        \"driver\": \"nvme\",\n        \"driver_module\": \"nvme\",\n        \"drivers\": [\n          \"nvme\"\n        ],\n        \"driver_modules\": [\n          \"nvme\"\n        ]\n      },\n      {\n        \"index\": 37,\n        \"attached_to\": 17,\n        \"class_list\": [\n          \"disk\",\n          \"usb\",\n          \"scsi\",\n          \"block_device\"\n        ],\n        \"bus_type\": {\n          \"hex\": \"0084\",\n          \"name\": \"SCSI\",\n          \"value\": 132\n        },\n        \"slot\": {\n          \"bus\": 0,\n          \"number\": 0\n        },\n        \"base_class\": {\n          \"hex\": \"0106\",\n          \"name\": \"Mass Storage Device\",\n          \"value\": 262\n        },\n        \"sub_class\": {\n          \"hex\": \"0000\",\n          \"name\": \"Disk\",\n          \"value\": 0\n        },\n        \"vendor\": {\n          \"hex\": \"05dc\",\n          \"name\": \"Lexar\",\n          \"value\": 1500\n        },\n        \"device\": {\n          \"hex\": \"a205\",\n          \"name\": \"JumpDrive\",\n          \"value\": 41477\n        },\n        \"revision\": {\n          \"hex\": \"0000\",\n          \"name\": \"1.00\",\n          \"value\": 0\n        },\n        \"serial\": \"2329624371\",\n        \"model\": \"Lexar JumpDrive\",\n        \"sysfs_id\": \"/class/block/sda\",\n        \"sysfs_bus_id\": \"0:0:0:0\",\n        \"sysfs_device_link\": \"/devices/pci0000:00/0000:00:0d.0/usb2/2-4/2-4:1.0/host0/target0:0:0/0:0:0:0\",\n        \"unix_device_names\": [\n          \"/dev/disk/by-id/usb-Lexar_JumpDrive_2329624371-0:0\",\n          \"/dev/disk/by-path/pci-0000:00:0d.0-usb-0:4:1.0-scsi-0:0:0:0\",\n          \"/dev/disk/by-path/pci-0000:00:0d.0-usbv3-0:4:1.0-scsi-0:0:0:0\",\n          \"/dev/sda\"\n        ],\n        \"unix_device_name2\": \"/dev/sg0\",\n        \"resources\": [\n          {\n            \"type\": \"disk_geo\",\n            \"cylinders\": 30540,\n            \"heads\": 64,\n            \"sectors\": 32,\n            \"size\": \"0x0\",\n            \"geo_type\": \"logical\"\n          },\n          {\n            \"type\": \"size\",\n            \"unit\": \"sectors\",\n            \"value_1\": 62545920,\n            \"value_2\": 512\n          }\n        ],\n        \"driver\": \"usb-storage\",\n        \"driver_module\": \"usb_storage\",\n        \"drivers\": [\n          \"sd\",\n          \"usb-storage\"\n        ],\n        \"driver_modules\": [\n          \"sd_mod\",\n          \"usb_storage\"\n        ],\n        \"module_alias\": \"usb:v05DCpA205d0A00dc00dsc00dp00ic08isc06ip50in00\"\n      }\n    ],\n    \"graphics_card\": [\n      {\n        \"index\": 31,\n        \"attached_to\": 0,\n        \"class_list\": [\n          \"graphics_card\",\n          \"pci\"\n        ],\n        \"bus_type\": {\n          \"hex\": \"0004\",\n          \"name\": \"PCI\",\n          \"value\": 4\n        },\n        \"slot\": {\n          \"bus\": 0,\n          \"number\": 2\n        },\n        \"base_class\": {\n          \"hex\": \"0003\",\n          \"name\": \"Display controller\",\n          \"value\": 3\n        },\n        \"sub_class\": {\n          \"hex\": \"0000\",\n          \"name\": \"VGA compatible controller\",\n          \"value\": 0\n        },\n        \"pci_interface\": {\n          \"hex\": \"0000\",\n          \"name\": \"VGA\",\n          \"value\": 0\n        },\n        \"vendor\": {\n          \"hex\": \"8086\",\n          \"name\": \"Intel Corporation\",\n          \"value\": 32902\n        },\n        \"sub_vendor\": {\n          \"hex\": \"f111\",\n          \"value\": 61713\n        },\n        \"device\": {\n          \"hex\": \"a721\",\n          \"value\": 42785\n        },\n        \"sub_device\": {\n          \"hex\": \"000c\",\n          \"value\": 12\n        },\n        \"revision\": {\n          \"hex\": \"0004\",\n          \"value\": 4\n        },\n        \"model\": \"Intel VGA compatible controller\",\n        \"sysfs_id\": \"/devices/pci0000:00/0000:00:02.0\",\n        \"sysfs_bus_id\": \"0000:00:02.0\",\n        \"resources\": [\n          {\n            \"type\": \"io\",\n            \"base\": 12288,\n            \"range\": 64,\n            \"enabled\": true,\n            \"access\": \"read_write\"\n          }\n        ],\n        \"detail\": {\n          \"function\": 0,\n          \"command\": 1031,\n          \"header_type\": 0,\n          \"secondary_bus\": 0,\n          \"prog_if\": 0\n        },\n        \"driver\": \"i915\",\n        \"driver_module\": \"i915\",\n        \"drivers\": [\n          \"i915\"\n        ],\n        \"driver_modules\": [\n          \"i915\"\n        ],\n        \"module_alias\": \"pci:v00008086d0000A721sv0000F111sd0000000Cbc03sc00i00\"\n      }\n    ],\n    \"hub\": [\n      {\n        \"index\": 40,\n        \"attached_to\": 32,\n        \"class_list\": [\n          \"usb\",\n          \"hub\"\n        ],\n        \"bus_type\": {\n          \"hex\": \"0086\",\n          \"name\": \"USB\",\n          \"value\": 134\n        },\n        \"slot\": {\n          \"bus\": 0,\n          \"number\": 0\n        },\n        \"base_class\": {\n          \"hex\": \"010a\",\n          \"name\": \"Hub\",\n          \"value\": 266\n        },\n        \"vendor\": {\n          \"hex\": \"1d6b\",\n          \"name\": \"Linux 6.14.10 xhci-hcd\",\n          \"value\": 7531\n        },\n        \"device\": {\n          \"hex\": \"0002\",\n          \"name\": \"xHCI Host Controller\",\n          \"value\": 2\n        },\n        \"revision\": {\n          \"hex\": \"0000\",\n          \"name\": \"6.14\",\n          \"value\": 0\n        },\n        \"serial\": \"0000:00:14.0\",\n        \"model\": \"Linux 6.14.10 xhci-hcd xHCI Host Controller\",\n        \"sysfs_id\": \"/devices/pci0000:00/0000:00:14.0/usb3/3-0:1.0\",\n        \"sysfs_bus_id\": \"3-0:1.0\",\n        \"resources\": [\n          {\n            \"type\": \"baud\",\n            \"speed\": 480000000,\n            \"bits\": 0,\n            \"stop_bits\": 0,\n            \"parity\": 0,\n            \"handshake\": 0\n          }\n        ],\n        \"detail\": {\n          \"device_class\": {\n            \"hex\": \"0009\",\n            \"name\": \"hub\",\n            \"value\": 9\n          },\n          \"device_subclass\": {\n            \"hex\": \"0000\",\n            \"name\": \"per_interface\",\n            \"value\": 0\n          },\n          \"device_protocol\": 1,\n          \"interface_class\": {\n            \"hex\": \"0009\",\n            \"name\": \"hub\",\n            \"value\": 9\n          },\n          \"interface_subclass\": {\n            \"hex\": \"0000\",\n            \"name\": \"per_interface\",\n            \"value\": 0\n          },\n          \"interface_protocol\": 0,\n          \"interface_number\": 0,\n          \"interface_alternate_setting\": 0\n        },\n        \"hotplug\": \"usb\",\n        \"driver\": \"hub\",\n        \"driver_module\": \"usbcore\",\n        \"drivers\": [\n          \"hub\"\n        ],\n        \"driver_modules\": [\n          \"usbcore\"\n        ],\n        \"module_alias\": \"usb:v1D6Bp0002d0614dc09dsc00dp01ic09isc00ip00in00\"\n      },\n      {\n        \"index\": 43,\n        \"attached_to\": 32,\n        \"class_list\": [\n          \"usb\",\n          \"hub\"\n        ],\n        \"bus_type\": {\n          \"hex\": \"0086\",\n          \"name\": \"USB\",\n          \"value\": 134\n        },\n        \"slot\": {\n          \"bus\": 0,\n          \"number\": 0\n        },\n        \"base_class\": {\n          \"hex\": \"010a\",\n          \"name\": \"Hub\",\n          \"value\": 266\n        },\n        \"vendor\": {\n          \"hex\": \"1d6b\",\n          \"name\": \"Linux 6.14.10 xhci-hcd\",\n          \"value\": 7531\n        },\n        \"device\": {\n          \"hex\": \"0003\",\n          \"name\": \"xHCI Host Controller\",\n          \"value\": 3\n        },\n        \"revision\": {\n          \"hex\": \"0000\",\n          \"name\": \"6.14\",\n          \"value\": 0\n        },\n        \"serial\": \"0000:00:14.0\",\n        \"model\": \"Linux 6.14.10 xhci-hcd xHCI Host Controller\",\n        \"sysfs_id\": \"/devices/pci0000:00/0000:00:14.0/usb4/4-0:1.0\",\n        \"sysfs_bus_id\": \"4-0:1.0\",\n        \"detail\": {\n          \"device_class\": {\n            \"hex\": \"0009\",\n            \"name\": \"hub\",\n            \"value\": 9\n          },\n          \"device_subclass\": {\n            \"hex\": \"0000\",\n            \"name\": \"per_interface\",\n            \"value\": 0\n          },\n          \"device_protocol\": 3,\n          \"interface_class\": {\n            \"hex\": \"0009\",\n            \"name\": \"hub\",\n            \"value\": 9\n          },\n          \"interface_subclass\": {\n            \"hex\": \"0000\",\n            \"name\": \"per_interface\",\n            \"value\": 0\n          },\n          \"interface_protocol\": 0,\n          \"interface_number\": 0,\n          \"interface_alternate_setting\": 0\n        },\n        \"hotplug\": \"usb\",\n        \"driver\": \"hub\",\n        \"driver_module\": \"usbcore\",\n        \"drivers\": [\n          \"hub\"\n        ],\n        \"driver_modules\": [\n          \"usbcore\"\n        ],\n        \"module_alias\": \"usb:v1D6Bp0003d0614dc09dsc00dp03ic09isc00ip00in00\"\n      },\n      {\n        \"index\": 44,\n        \"attached_to\": 17,\n        \"class_list\": [\n          \"usb\",\n          \"hub\"\n        ],\n        \"bus_type\": {\n          \"hex\": \"0086\",\n          \"name\": \"USB\",\n          \"value\": 134\n        },\n        \"slot\": {\n          \"bus\": 0,\n          \"number\": 0\n        },\n        \"base_class\": {\n          \"hex\": \"010a\",\n          \"name\": \"Hub\",\n          \"value\": 266\n        },\n        \"vendor\": {\n          \"hex\": \"1d6b\",\n          \"name\": \"Linux 6.14.10 xhci-hcd\",\n          \"value\": 7531\n        },\n        \"device\": {\n          \"hex\": \"0002\",\n          \"name\": \"xHCI Host Controller\",\n          \"value\": 2\n        },\n        \"revision\": {\n          \"hex\": \"0000\",\n          \"name\": \"6.14\",\n          \"value\": 0\n        },\n        \"serial\": \"0000:00:0d.0\",\n        \"model\": \"Linux 6.14.10 xhci-hcd xHCI Host Controller\",\n        \"sysfs_id\": \"/devices/pci0000:00/0000:00:0d.0/usb1/1-0:1.0\",\n        \"sysfs_bus_id\": \"1-0:1.0\",\n        \"resources\": [\n          {\n            \"type\": \"baud\",\n            \"speed\": 480000000,\n            \"bits\": 0,\n            \"stop_bits\": 0,\n            \"parity\": 0,\n            \"handshake\": 0\n          }\n        ],\n        \"detail\": {\n          \"device_class\": {\n            \"hex\": \"0009\",\n            \"name\": \"hub\",\n            \"value\": 9\n          },\n          \"device_subclass\": {\n            \"hex\": \"0000\",\n            \"name\": \"per_interface\",\n            \"value\": 0\n          },\n          \"device_protocol\": 1,\n          \"interface_class\": {\n            \"hex\": \"0009\",\n            \"name\": \"hub\",\n            \"value\": 9\n          },\n          \"interface_subclass\": {\n            \"hex\": \"0000\",\n            \"name\": \"per_interface\",\n            \"value\": 0\n          },\n          \"interface_protocol\": 0,\n          \"interface_number\": 0,\n          \"interface_alternate_setting\": 0\n        },\n        \"hotplug\": \"usb\",\n        \"driver\": \"hub\",\n        \"driver_module\": \"usbcore\",\n        \"drivers\": [\n          \"hub\"\n        ],\n        \"driver_modules\": [\n          \"usbcore\"\n        ],\n        \"module_alias\": \"usb:v1D6Bp0002d0614dc09dsc00dp01ic09isc00ip00in00\"\n      },\n      {\n        \"index\": 47,\n        \"attached_to\": 17,\n        \"class_list\": [\n          \"usb\",\n          \"hub\"\n        ],\n        \"bus_type\": {\n          \"hex\": \"0086\",\n          \"name\": \"USB\",\n          \"value\": 134\n        },\n        \"slot\": {\n          \"bus\": 0,\n          \"number\": 0\n        },\n        \"base_class\": {\n          \"hex\": \"010a\",\n          \"name\": \"Hub\",\n          \"value\": 266\n        },\n        \"vendor\": {\n          \"hex\": \"1d6b\",\n          \"name\": \"Linux 6.14.10 xhci-hcd\",\n          \"value\": 7531\n        },\n        \"device\": {\n          \"hex\": \"0003\",\n          \"name\": \"xHCI Host Controller\",\n          \"value\": 3\n        },\n        \"revision\": {\n          \"hex\": \"0000\",\n          \"name\": \"6.14\",\n          \"value\": 0\n        },\n        \"serial\": \"0000:00:0d.0\",\n        \"model\": \"Linux 6.14.10 xhci-hcd xHCI Host Controller\",\n        \"sysfs_id\": \"/devices/pci0000:00/0000:00:0d.0/usb2/2-0:1.0\",\n        \"sysfs_bus_id\": \"2-0:1.0\",\n        \"detail\": {\n          \"device_class\": {\n            \"hex\": \"0009\",\n            \"name\": \"hub\",\n            \"value\": 9\n          },\n          \"device_subclass\": {\n            \"hex\": \"0000\",\n            \"name\": \"per_interface\",\n            \"value\": 0\n          },\n          \"device_protocol\": 3,\n          \"interface_class\": {\n            \"hex\": \"0009\",\n            \"name\": \"hub\",\n            \"value\": 9\n          },\n          \"interface_subclass\": {\n            \"hex\": \"0000\",\n            \"name\": \"per_interface\",\n            \"value\": 0\n          },\n          \"interface_protocol\": 0,\n          \"interface_number\": 0,\n          \"interface_alternate_setting\": 0\n        },\n        \"hotplug\": \"usb\",\n        \"driver\": \"hub\",\n        \"driver_module\": \"usbcore\",\n        \"drivers\": [\n          \"hub\"\n        ],\n        \"driver_modules\": [\n          \"usbcore\"\n        ],\n        \"module_alias\": \"usb:v1D6Bp0003d0614dc09dsc00dp03ic09isc00ip00in00\"\n      }\n    ],\n    \"memory\": [\n      {\n        \"index\": 15,\n        \"attached_to\": 0,\n        \"class_list\": [\n          \"memory\"\n        ],\n        \"base_class\": {\n          \"hex\": \"0101\",\n          \"name\": \"Internally Used Class\",\n          \"value\": 257\n        },\n        \"sub_class\": {\n          \"hex\": \"0002\",\n          \"name\": \"Main Memory\",\n          \"value\": 2\n        },\n        \"model\": \"Main Memory\",\n        \"resources\": [\n          {\n            \"type\": \"phys_mem\",\n            \"range\": 51539607552\n          }\n        ]\n      }\n    ],\n    \"monitor\": [\n      {\n        \"index\": 35,\n        \"attached_to\": 31,\n        \"class_list\": [\n          \"monitor\"\n        ],\n        \"base_class\": {\n          \"hex\": \"0100\",\n          \"name\": \"Monitor\",\n          \"value\": 256\n        },\n        \"sub_class\": {\n          \"hex\": \"0002\",\n          \"name\": \"LCD Monitor\",\n          \"value\": 2\n        },\n        \"vendor\": {\n          \"hex\": \"09e5\",\n          \"name\": \"BOE CQ\",\n          \"value\": 2533\n        },\n        \"device\": {\n          \"hex\": \"0d56\",\n          \"name\": \"NV122WUM-N42\",\n          \"value\": 3414\n        },\n        \"serial\": \"0\",\n        \"model\": \"BOE CQ NV122WUM-N42\",\n        \"resources\": [\n          {\n            \"type\": \"monitor\",\n            \"width\": 1920,\n            \"height\": 1200,\n            \"vertical_frequency\": 60,\n            \"interlaced\": false\n          },\n          {\n            \"type\": \"size\",\n            \"unit\": \"mm\",\n            \"value_1\": 263,\n            \"value_2\": 164\n          }\n        ],\n        \"detail\": {\n          \"manufacture_year\": 2024,\n          \"manufacture_week\": 39,\n          \"vertical_sync\": {\n            \"min\": 40,\n            \"max\": 60\n          },\n          \"horizontal_sync\": {\n            \"min\": 76,\n            \"max\": 76\n          },\n          \"horizontal_sync_timings\": {\n            \"disp\": 1920,\n            \"sync_start\": 1968,\n            \"sync_end\": 2000,\n            \"total\": 2140\n          },\n          \"vertical_sync_timings\": {\n            \"disp\": 1200,\n            \"sync_start\": 1203,\n            \"sync_end\": 1209,\n            \"total\": 1260\n          },\n          \"clock\": 161790,\n          \"width\": 1920,\n          \"height\": 1200,\n          \"width_millimetres\": 263,\n          \"height_millimetres\": 164,\n          \"horizontal_flag\": 45,\n          \"vertical_flag\": 43,\n          \"vendor\": \"BOE CQ\",\n          \"name\": \"NV122WUM-N42\"\n        },\n        \"driver_info\": {\n          \"type\": \"display\",\n          \"width\": 1920,\n          \"height\": 1200,\n          \"vertical_sync\": {\n            \"min\": 40,\n            \"max\": 60\n          },\n          \"horizontal_sync\": {\n            \"min\": 76,\n            \"max\": 76\n          },\n          \"bandwidth\": 0,\n          \"horizontal_sync_timings\": {\n            \"disp\": 1920,\n            \"sync_start\": 1968,\n            \"sync_end\": 2000,\n            \"total\": 2140\n          },\n          \"vertical_sync_timings\": {\n            \"disp\": 1200,\n            \"sync_start\": 1203,\n            \"sync_end\": 1209,\n            \"total\": 1260\n          },\n          \"horizontal_flag\": 45,\n          \"vertical_flag\": 43\n        }\n      }\n    ],\n    \"mouse\": [\n      {\n        \"index\": 50,\n        \"attached_to\": 0,\n        \"bus_type\": {\n          \"hex\": \"0081\",\n          \"name\": \"serial\",\n          \"value\": 129\n        },\n        \"base_class\": {\n          \"hex\": \"0118\",\n          \"name\": \"touchpad\",\n          \"value\": 280\n        },\n        \"sub_class\": {\n          \"hex\": \"0001\",\n          \"name\": \"bus\",\n          \"value\": 1\n        },\n        \"vendor\": {\n          \"hex\": \"093a\",\n          \"value\": 2362\n        },\n        \"device\": {\n          \"hex\": \"0239\",\n          \"value\": 569\n        },\n        \"sysfs_id\": \"/devices/pci0000:00/0000:00:19.0/i2c_designware.2/i2c-3/i2c-PIXA3854:00/0018:093A:0239.0002/input/input13\",\n        \"unix_device_names\": [\n          \"/dev/input/event5\",\n          \"/dev/input/ + handler\"\n        ]\n      }\n    ],\n    \"network_controller\": [\n      {\n        \"index\": 21,\n        \"attached_to\": 0,\n        \"class_list\": [\n          \"network_controller\",\n          \"pci\",\n          \"wlan_card\"\n        ],\n        \"bus_type\": {\n          \"hex\": \"0004\",\n          \"name\": \"PCI\",\n          \"value\": 4\n        },\n        \"slot\": {\n          \"bus\": 0,\n          \"number\": 20\n        },\n        \"base_class\": {\n          \"hex\": \"0002\",\n          \"name\": \"Network controller\",\n          \"value\": 2\n        },\n        \"sub_class\": {\n          \"hex\": \"0082\",\n          \"name\": \"WLAN controller\",\n          \"value\": 130\n        },\n        \"vendor\": {\n          \"hex\": \"8086\",\n          \"name\": \"Intel Corporation\",\n          \"value\": 32902\n        },\n        \"sub_vendor\": {\n          \"hex\": \"8086\",\n          \"name\": \"Intel Corporation\",\n          \"value\": 32902\n        },\n        \"device\": {\n          \"hex\": \"51f1\",\n          \"value\": 20977\n        },\n        \"sub_device\": {\n          \"hex\": \"0094\",\n          \"value\": 148\n        },\n        \"revision\": {\n          \"hex\": \"0001\",\n          \"value\": 1\n        },\n        \"model\": \"Intel WLAN controller\",\n        \"sysfs_id\": \"/devices/pci0000:00/0000:00:14.3\",\n        \"sysfs_bus_id\": \"0000:00:14.3\",\n        \"unix_device_names\": [\n          \"wlan0\"\n        ],\n        \"resources\": [\n          {\n            \"type\": \"hwaddr\",\n            \"address\": 52\n          },\n          {\n            \"type\": \"phwaddr\",\n            \"address\": 52\n          },\n          {\n            \"type\": \"wlan\",\n            \"channels\": [\n              \"1\",\n              \"2\",\n              \"3\",\n              \"4\",\n              \"5\",\n              \"6\",\n              \"7\",\n              \"8\",\n              \"9\",\n              \"10\",\n              \"11\",\n              \"12\",\n              \"13\",\n              \"36\",\n              \"40\",\n              \"44\",\n              \"48\",\n              \"52\",\n              \"56\",\n              \"60\",\n              \"64\",\n              \"100\",\n              \"104\",\n              \"108\",\n              \"112\",\n              \"116\",\n              \"120\",\n              \"124\",\n              \"128\",\n              \"132\",\n              \"136\",\n              \"140\"\n            ],\n            \"frequencies\": [\n              \"2.412\",\n              \"2.417\",\n              \"2.422\",\n              \"2.427\",\n              \"2.432\",\n              \"2.437\",\n              \"2.442\",\n              \"2.447\",\n              \"2.452\",\n              \"2.457\",\n              \"2.462\",\n              \"2.467\",\n              \"2.472\",\n              \"5.18\",\n              \"5.2\",\n              \"5.22\",\n              \"5.24\",\n              \"5.26\",\n              \"5.28\",\n              \"5.3\",\n              \"5.32\",\n              \"5.5\",\n              \"5.52\",\n              \"5.54\",\n              \"5.56\",\n              \"5.58\",\n              \"5.6\",\n              \"5.62\",\n              \"5.64\",\n              \"5.66\",\n              \"5.68\",\n              \"5.7\"\n            ],\n            \"auth_modes\": [\n              \"open\",\n              \"sharedkey\",\n              \"wpa-psk\",\n              \"wpa-eap\"\n            ],\n            \"enc_modes\": [\n              \"WEP40\",\n              \"WEP104\",\n              \"TKIP\",\n              \"CCMP\"\n            ]\n          }\n        ],\n        \"detail\": {\n          \"function\": 3,\n          \"command\": 1030,\n          \"header_type\": 0,\n          \"secondary_bus\": 0,\n          \"prog_if\": 0\n        },\n        \"driver\": \"iwlwifi\",\n        \"driver_module\": \"iwlwifi\",\n        \"drivers\": [\n          \"iwlwifi\"\n        ],\n        \"driver_modules\": [\n          \"iwlwifi\"\n        ],\n        \"module_alias\": \"pci:v00008086d000051F1sv00008086sd00000094bc02sc80i00\"\n      }\n    ],\n    \"network_interface\": [\n      {\n        \"index\": 48,\n        \"attached_to\": 0,\n        \"class_list\": [\n          \"network_interface\"\n        ],\n        \"base_class\": {\n          \"hex\": \"0107\",\n          \"name\": \"Network Interface\",\n          \"value\": 263\n        },\n        \"sub_class\": {\n          \"hex\": \"0000\",\n          \"name\": \"Loopback\",\n          \"value\": 0\n        },\n        \"model\": \"Loopback network interface\",\n        \"sysfs_id\": \"/class/net/lo\",\n        \"unix_device_names\": [\n          \"lo\"\n        ]\n      },\n      {\n        \"index\": 49,\n        \"attached_to\": 21,\n        \"class_list\": [\n          \"network_interface\"\n        ],\n        \"base_class\": {\n          \"hex\": \"0107\",\n          \"name\": \"Network Interface\",\n          \"value\": 263\n        },\n        \"sub_class\": {\n          \"hex\": \"000a\",\n          \"name\": \"WLAN\",\n          \"value\": 10\n        },\n        \"model\": \"WLAN network interface\",\n        \"sysfs_id\": \"/class/net/wlan0\",\n        \"sysfs_device_link\": \"/devices/pci0000:00/0000:00:14.3\",\n        \"unix_device_names\": [\n          \"wlan0\"\n        ],\n        \"resources\": [\n          {\n            \"type\": \"hwaddr\",\n            \"address\": 52\n          },\n          {\n            \"type\": \"phwaddr\",\n            \"address\": 52\n          }\n        ],\n        \"driver\": \"iwlwifi\",\n        \"driver_module\": \"iwlwifi\",\n        \"drivers\": [\n          \"iwlwifi\"\n        ],\n        \"driver_modules\": [\n          \"iwlwifi\"\n        ]\n      }\n    ],\n    \"pci\": [\n      {\n        \"index\": 16,\n        \"attached_to\": 0,\n        \"class_list\": [\n          \"pci\",\n          \"unknown\"\n        ],\n        \"bus_type\": {\n          \"hex\": \"0004\",\n          \"name\": \"PCI\",\n          \"value\": 4\n        },\n        \"slot\": {\n          \"bus\": 0,\n          \"number\": 8\n        },\n        \"base_class\": {\n          \"hex\": \"0008\",\n          \"name\": \"Generic system peripheral\",\n          \"value\": 8\n        },\n        \"sub_class\": {\n          \"hex\": \"0080\",\n          \"name\": \"System peripheral\",\n          \"value\": 128\n        },\n        \"vendor\": {\n          \"hex\": \"8086\",\n          \"name\": \"Intel Corporation\",\n          \"value\": 32902\n        },\n        \"sub_vendor\": {\n          \"hex\": \"f111\",\n          \"value\": 61713\n        },\n        \"device\": {\n          \"hex\": \"a74f\",\n          \"value\": 42831\n        },\n        \"sub_device\": {\n          \"hex\": \"000c\",\n          \"value\": 12\n        },\n        \"revision\": {\n          \"hex\": \"0001\",\n          \"value\": 1\n        },\n        \"model\": \"Intel System peripheral\",\n        \"sysfs_id\": \"/devices/pci0000:00/0000:00:08.0\",\n        \"sysfs_bus_id\": \"0000:00:08.0\",\n        \"detail\": {\n          \"function\": 0,\n          \"command\": 6,\n          \"header_type\": 0,\n          \"secondary_bus\": 0,\n          \"prog_if\": 0\n        },\n        \"module_alias\": \"pci:v00008086d0000A74Fsv0000F111sd0000000Cbc08sc80i00\"\n      },\n      {\n        \"index\": 18,\n        \"attached_to\": 0,\n        \"class_list\": [\n          \"pci\",\n          \"unknown\"\n        ],\n        \"bus_type\": {\n          \"hex\": \"0004\",\n          \"name\": \"PCI\",\n          \"value\": 4\n        },\n        \"slot\": {\n          \"bus\": 0,\n          \"number\": 21\n        },\n        \"base_class\": {\n          \"hex\": \"000c\",\n          \"name\": \"Serial bus controller\",\n          \"value\": 12\n        },\n        \"sub_class\": {\n          \"hex\": \"0080\",\n          \"value\": 128\n        },\n        \"vendor\": {\n          \"hex\": \"8086\",\n          \"name\": \"Intel Corporation\",\n          \"value\": 32902\n        },\n        \"sub_vendor\": {\n          \"hex\": \"f111\",\n          \"value\": 61713\n        },\n        \"device\": {\n          \"hex\": \"51e9\",\n          \"value\": 20969\n        },\n        \"sub_device\": {\n          \"hex\": \"000c\",\n          \"value\": 12\n        },\n        \"revision\": {\n          \"hex\": \"0001\",\n          \"value\": 1\n        },\n        \"model\": \"Intel Serial bus controller\",\n        \"sysfs_id\": \"/devices/pci0000:00/0000:00:15.1\",\n        \"sysfs_bus_id\": \"0000:00:15.1\",\n        \"detail\": {\n          \"function\": 1,\n          \"command\": 6,\n          \"header_type\": 0,\n          \"secondary_bus\": 0,\n          \"prog_if\": 0\n        },\n        \"driver\": \"intel-lpss\",\n        \"driver_module\": \"intel_lpss_pci\",\n        \"drivers\": [\n          \"intel-lpss\"\n        ],\n        \"driver_modules\": [\n          \"intel_lpss_pci\"\n        ],\n        \"module_alias\": \"pci:v00008086d000051E9sv0000F111sd0000000Cbc0Csc80i00\"\n      },\n      {\n        \"index\": 20,\n        \"attached_to\": 0,\n        \"class_list\": [\n          \"pci\",\n          \"unknown\"\n        ],\n        \"bus_type\": {\n          \"hex\": \"0004\",\n          \"name\": \"PCI\",\n          \"value\": 4\n        },\n        \"slot\": {\n          \"bus\": 0,\n          \"number\": 4\n        },\n        \"base_class\": {\n          \"hex\": \"0011\",\n          \"name\": \"Signal processing controller\",\n          \"value\": 17\n        },\n        \"sub_class\": {\n          \"hex\": \"0080\",\n          \"name\": \"Signal processing controller\",\n          \"value\": 128\n        },\n        \"vendor\": {\n          \"hex\": \"8086\",\n          \"name\": \"Intel Corporation\",\n          \"value\": 32902\n        },\n        \"sub_vendor\": {\n          \"hex\": \"f111\",\n          \"value\": 61713\n        },\n        \"device\": {\n          \"hex\": \"a71d\",\n          \"value\": 42781\n        },\n        \"sub_device\": {\n          \"hex\": \"000c\",\n          \"value\": 12\n        },\n        \"revision\": {\n          \"hex\": \"0001\",\n          \"value\": 1\n        },\n        \"model\": \"Intel Signal processing controller\",\n        \"sysfs_id\": \"/devices/pci0000:00/0000:00:04.0\",\n        \"sysfs_bus_id\": \"0000:00:04.0\",\n        \"detail\": {\n          \"function\": 0,\n          \"command\": 6,\n          \"header_type\": 0,\n          \"secondary_bus\": 0,\n          \"prog_if\": 0\n        },\n        \"driver\": \"proc_thermal_pci\",\n        \"driver_module\": \"processor_thermal_device_pci\",\n        \"drivers\": [\n          \"proc_thermal_pci\"\n        ],\n        \"driver_modules\": [\n          \"processor_thermal_device_pci\"\n        ],\n        \"module_alias\": \"pci:v00008086d0000A71Dsv0000F111sd0000000Cbc11sc80i00\"\n      },\n      {\n        \"index\": 22,\n        \"attached_to\": 0,\n        \"class_list\": [\n          \"pci\",\n          \"unknown\"\n        ],\n        \"bus_type\": {\n          \"hex\": \"0004\",\n          \"name\": \"PCI\",\n          \"value\": 4\n        },\n        \"slot\": {\n          \"bus\": 0,\n          \"number\": 22\n        },\n        \"base_class\": {\n          \"hex\": \"0007\",\n          \"name\": \"Communication controller\",\n          \"value\": 7\n        },\n        \"sub_class\": {\n          \"hex\": \"0080\",\n          \"name\": \"Communication controller\",\n          \"value\": 128\n        },\n        \"vendor\": {\n          \"hex\": \"8086\",\n          \"name\": \"Intel Corporation\",\n          \"value\": 32902\n        },\n        \"sub_vendor\": {\n          \"hex\": \"f111\",\n          \"value\": 61713\n        },\n        \"device\": {\n          \"hex\": \"51e0\",\n          \"value\": 20960\n        },\n        \"sub_device\": {\n          \"hex\": \"000c\",\n          \"value\": 12\n        },\n        \"revision\": {\n          \"hex\": \"0001\",\n          \"value\": 1\n        },\n        \"model\": \"Intel Communication controller\",\n        \"sysfs_id\": \"/devices/pci0000:00/0000:00:16.0\",\n        \"sysfs_bus_id\": \"0000:00:16.0\",\n        \"detail\": {\n          \"function\": 0,\n          \"command\": 1030,\n          \"header_type\": 0,\n          \"secondary_bus\": 0,\n          \"prog_if\": 0\n        },\n        \"driver\": \"mei_me\",\n        \"driver_module\": \"mei_me\",\n        \"drivers\": [\n          \"mei_me\"\n        ],\n        \"driver_modules\": [\n          \"mei_me\"\n        ],\n        \"module_alias\": \"pci:v00008086d000051E0sv0000F111sd0000000Cbc07sc80i00\"\n      },\n      {\n        \"index\": 24,\n        \"attached_to\": 0,\n        \"class_list\": [\n          \"pci\",\n          \"unknown\"\n        ],\n        \"bus_type\": {\n          \"hex\": \"0004\",\n          \"name\": \"PCI\",\n          \"value\": 4\n        },\n        \"slot\": {\n          \"bus\": 0,\n          \"number\": 31\n        },\n        \"base_class\": {\n          \"hex\": \"000c\",\n          \"name\": \"Serial bus controller\",\n          \"value\": 12\n        },\n        \"sub_class\": {\n          \"hex\": \"0080\",\n          \"value\": 128\n        },\n        \"vendor\": {\n          \"hex\": \"8086\",\n          \"name\": \"Intel Corporation\",\n          \"value\": 32902\n        },\n        \"sub_vendor\": {\n          \"hex\": \"f111\",\n          \"value\": 61713\n        },\n        \"device\": {\n          \"hex\": \"51a4\",\n          \"value\": 20900\n        },\n        \"sub_device\": {\n          \"hex\": \"000c\",\n          \"value\": 12\n        },\n        \"revision\": {\n          \"hex\": \"0001\",\n          \"value\": 1\n        },\n        \"model\": \"Intel Serial bus controller\",\n        \"sysfs_id\": \"/devices/pci0000:00/0000:00:1f.5\",\n        \"sysfs_bus_id\": \"0000:00:1f.5\",\n        \"detail\": {\n          \"function\": 5,\n          \"command\": 1030,\n          \"header_type\": 0,\n          \"secondary_bus\": 0,\n          \"prog_if\": 0\n        },\n        \"driver\": \"intel-spi\",\n        \"driver_module\": \"spi_intel_pci\",\n        \"drivers\": [\n          \"intel-spi\"\n        ],\n        \"driver_modules\": [\n          \"spi_intel_pci\"\n        ],\n        \"module_alias\": \"pci:v00008086d000051A4sv0000F111sd0000000Cbc0Csc80i00\"\n      },\n      {\n        \"index\": 25,\n        \"attached_to\": 0,\n        \"class_list\": [\n          \"pci\",\n          \"unknown\"\n        ],\n        \"bus_type\": {\n          \"hex\": \"0004\",\n          \"name\": \"PCI\",\n          \"value\": 4\n        },\n        \"slot\": {\n          \"bus\": 0,\n          \"number\": 25\n        },\n        \"base_class\": {\n          \"hex\": \"000c\",\n          \"name\": \"Serial bus controller\",\n          \"value\": 12\n        },\n        \"sub_class\": {\n          \"hex\": \"0080\",\n          \"value\": 128\n        },\n        \"vendor\": {\n          \"hex\": \"8086\",\n          \"name\": \"Intel Corporation\",\n          \"value\": 32902\n        },\n        \"sub_vendor\": {\n          \"hex\": \"f111\",\n          \"value\": 61713\n        },\n        \"device\": {\n          \"hex\": \"51c5\",\n          \"value\": 20933\n        },\n        \"sub_device\": {\n          \"hex\": \"000c\",\n          \"value\": 12\n        },\n        \"revision\": {\n          \"hex\": \"0001\",\n          \"value\": 1\n        },\n        \"model\": \"Intel Serial bus controller\",\n        \"sysfs_id\": \"/devices/pci0000:00/0000:00:19.0\",\n        \"sysfs_bus_id\": \"0000:00:19.0\",\n        \"detail\": {\n          \"function\": 0,\n          \"command\": 6,\n          \"header_type\": 0,\n          \"secondary_bus\": 0,\n          \"prog_if\": 0\n        },\n        \"driver\": \"intel-lpss\",\n        \"driver_module\": \"intel_lpss_pci\",\n        \"drivers\": [\n          \"intel-lpss\"\n        ],\n        \"driver_modules\": [\n          \"intel_lpss_pci\"\n        ],\n        \"module_alias\": \"pci:v00008086d000051C5sv0000F111sd0000000Cbc0Csc80i00\"\n      },\n      {\n        \"index\": 28,\n        \"attached_to\": 0,\n        \"class_list\": [\n          \"pci\",\n          \"unknown\"\n        ],\n        \"bus_type\": {\n          \"hex\": \"0004\",\n          \"name\": \"PCI\",\n          \"value\": 4\n        },\n        \"slot\": {\n          \"bus\": 0,\n          \"number\": 21\n        },\n        \"base_class\": {\n          \"hex\": \"000c\",\n          \"name\": \"Serial bus controller\",\n          \"value\": 12\n        },\n        \"sub_class\": {\n          \"hex\": \"0080\",\n          \"value\": 128\n        },\n        \"vendor\": {\n          \"hex\": \"8086\",\n          \"name\": \"Intel Corporation\",\n          \"value\": 32902\n        },\n        \"sub_vendor\": {\n          \"hex\": \"f111\",\n          \"value\": 61713\n        },\n        \"device\": {\n          \"hex\": \"51e8\",\n          \"value\": 20968\n        },\n        \"sub_device\": {\n          \"hex\": \"000c\",\n          \"value\": 12\n        },\n        \"revision\": {\n          \"hex\": \"0001\",\n          \"value\": 1\n        },\n        \"model\": \"Intel Serial bus controller\",\n        \"sysfs_id\": \"/devices/pci0000:00/0000:00:15.0\",\n        \"sysfs_bus_id\": \"0000:00:15.0\",\n        \"detail\": {\n          \"function\": 0,\n          \"command\": 6,\n          \"header_type\": 0,\n          \"secondary_bus\": 0,\n          \"prog_if\": 0\n        },\n        \"driver\": \"intel-lpss\",\n        \"driver_module\": \"intel_lpss_pci\",\n        \"drivers\": [\n          \"intel-lpss\"\n        ],\n        \"driver_modules\": [\n          \"intel_lpss_pci\"\n        ],\n        \"module_alias\": \"pci:v00008086d000051E8sv0000F111sd0000000Cbc0Csc80i00\"\n      },\n      {\n        \"index\": 30,\n        \"attached_to\": 0,\n        \"class_list\": [\n          \"pci\",\n          \"unknown\"\n        ],\n        \"bus_type\": {\n          \"hex\": \"0004\",\n          \"name\": \"PCI\",\n          \"value\": 4\n        },\n        \"slot\": {\n          \"bus\": 0,\n          \"number\": 20\n        },\n        \"base_class\": {\n          \"hex\": \"0005\",\n          \"name\": \"Memory controller\",\n          \"value\": 5\n        },\n        \"sub_class\": {\n          \"hex\": \"0000\",\n          \"name\": \"RAM memory\",\n          \"value\": 0\n        },\n        \"vendor\": {\n          \"hex\": \"8086\",\n          \"name\": \"Intel Corporation\",\n          \"value\": 32902\n        },\n        \"sub_vendor\": {\n          \"hex\": \"f111\",\n          \"value\": 61713\n        },\n        \"device\": {\n          \"hex\": \"51ef\",\n          \"value\": 20975\n        },\n        \"sub_device\": {\n          \"hex\": \"000c\",\n          \"value\": 12\n        },\n        \"revision\": {\n          \"hex\": \"0001\",\n          \"value\": 1\n        },\n        \"model\": \"Intel RAM memory\",\n        \"sysfs_id\": \"/devices/pci0000:00/0000:00:14.2\",\n        \"sysfs_bus_id\": \"0000:00:14.2\",\n        \"detail\": {\n          \"function\": 2,\n          \"command\": 6,\n          \"header_type\": 0,\n          \"secondary_bus\": 0,\n          \"prog_if\": 0\n        },\n        \"module_alias\": \"pci:v00008086d000051EFsv0000F111sd0000000Cbc05sc00i00\"\n      },\n      {\n        \"index\": 33,\n        \"attached_to\": 0,\n        \"class_list\": [\n          \"pci\",\n          \"unknown\"\n        ],\n        \"bus_type\": {\n          \"hex\": \"0004\",\n          \"name\": \"PCI\",\n          \"value\": 4\n        },\n        \"slot\": {\n          \"bus\": 0,\n          \"number\": 31\n        },\n        \"base_class\": {\n          \"hex\": \"000c\",\n          \"name\": \"Serial bus controller\",\n          \"value\": 12\n        },\n        \"sub_class\": {\n          \"hex\": \"0005\",\n          \"name\": \"SMBus\",\n          \"value\": 5\n        },\n        \"vendor\": {\n          \"hex\": \"8086\",\n          \"name\": \"Intel Corporation\",\n          \"value\": 32902\n        },\n        \"sub_vendor\": {\n          \"hex\": \"f111\",\n          \"value\": 61713\n        },\n        \"device\": {\n          \"hex\": \"51a3\",\n          \"value\": 20899\n        },\n        \"sub_device\": {\n          \"hex\": \"000c\",\n          \"value\": 12\n        },\n        \"revision\": {\n          \"hex\": \"0001\",\n          \"value\": 1\n        },\n        \"model\": \"Intel SMBus\",\n        \"sysfs_id\": \"/devices/pci0000:00/0000:00:1f.4\",\n        \"sysfs_bus_id\": \"0000:00:1f.4\",\n        \"resources\": [\n          {\n            \"type\": \"io\",\n            \"base\": 61344,\n            \"range\": 32,\n            \"enabled\": true,\n            \"access\": \"read_write\"\n          }\n        ],\n        \"detail\": {\n          \"function\": 4,\n          \"command\": 3,\n          \"header_type\": 0,\n          \"secondary_bus\": 0,\n          \"prog_if\": 0\n        },\n        \"driver\": \"i801_smbus\",\n        \"driver_module\": \"i2c_i801\",\n        \"drivers\": [\n          \"i801_smbus\"\n        ],\n        \"driver_modules\": [\n          \"i2c_i801\"\n        ],\n        \"module_alias\": \"pci:v00008086d000051A3sv0000F111sd0000000Cbc0Csc05i00\"\n      },\n      {\n        \"index\": 34,\n        \"attached_to\": 0,\n        \"class_list\": [\n          \"pci\",\n          \"unknown\"\n        ],\n        \"bus_type\": {\n          \"hex\": \"0004\",\n          \"name\": \"PCI\",\n          \"value\": 4\n        },\n        \"slot\": {\n          \"bus\": 0,\n          \"number\": 10\n        },\n        \"base_class\": {\n          \"hex\": \"0011\",\n          \"name\": \"Signal processing controller\",\n          \"value\": 17\n        },\n        \"sub_class\": {\n          \"hex\": \"0080\",\n          \"name\": \"Signal processing controller\",\n          \"value\": 128\n        },\n        \"vendor\": {\n          \"hex\": \"8086\",\n          \"name\": \"Intel Corporation\",\n          \"value\": 32902\n        },\n        \"sub_vendor\": {\n          \"hex\": \"f111\",\n          \"value\": 61713\n        },\n        \"device\": {\n          \"hex\": \"a77d\",\n          \"value\": 42877\n        },\n        \"sub_device\": {\n          \"hex\": \"000c\",\n          \"value\": 12\n        },\n        \"revision\": {\n          \"hex\": \"0001\",\n          \"value\": 1\n        },\n        \"model\": \"Intel Signal processing controller\",\n        \"sysfs_id\": \"/devices/pci0000:00/0000:00:0a.0\",\n        \"sysfs_bus_id\": \"0000:00:0a.0\",\n        \"detail\": {\n          \"function\": 0,\n          \"command\": 2,\n          \"header_type\": 0,\n          \"secondary_bus\": 0,\n          \"prog_if\": 0\n        },\n        \"driver\": \"intel_vsec\",\n        \"driver_module\": \"intel_vsec\",\n        \"drivers\": [\n          \"intel_vsec\"\n        ],\n        \"driver_modules\": [\n          \"intel_vsec\"\n        ],\n        \"module_alias\": \"pci:v00008086d0000A77Dsv0000F111sd0000000Cbc11sc80i00\"\n      }\n    ],\n    \"sound\": [\n      {\n        \"index\": 26,\n        \"attached_to\": 0,\n        \"class_list\": [\n          \"sound\",\n          \"pci\"\n        ],\n        \"bus_type\": {\n          \"hex\": \"0004\",\n          \"name\": \"PCI\",\n          \"value\": 4\n        },\n        \"slot\": {\n          \"bus\": 0,\n          \"number\": 31\n        },\n        \"base_class\": {\n          \"hex\": \"0004\",\n          \"name\": \"Multimedia controller\",\n          \"value\": 4\n        },\n        \"sub_class\": {\n          \"hex\": \"0003\",\n          \"value\": 3\n        },\n        \"pci_interface\": {\n          \"hex\": \"0080\",\n          \"value\": 128\n        },\n        \"vendor\": {\n          \"hex\": \"8086\",\n          \"name\": \"Intel Corporation\",\n          \"value\": 32902\n        },\n        \"sub_vendor\": {\n          \"hex\": \"f111\",\n          \"value\": 61713\n        },\n        \"device\": {\n          \"hex\": \"51ca\",\n          \"value\": 20938\n        },\n        \"sub_device\": {\n          \"hex\": \"000c\",\n          \"value\": 12\n        },\n        \"revision\": {\n          \"hex\": \"0001\",\n          \"value\": 1\n        },\n        \"model\": \"Intel Multimedia controller\",\n        \"sysfs_id\": \"/devices/pci0000:00/0000:00:1f.3\",\n        \"sysfs_bus_id\": \"0000:00:1f.3\",\n        \"detail\": {\n          \"function\": 3,\n          \"command\": 1030,\n          \"header_type\": 0,\n          \"secondary_bus\": 0,\n          \"prog_if\": 128\n        },\n        \"driver\": \"snd_hda_intel\",\n        \"driver_module\": \"snd_hda_intel\",\n        \"drivers\": [\n          \"snd_hda_intel\"\n        ],\n        \"driver_modules\": [\n          \"snd_hda_intel\"\n        ],\n        \"module_alias\": \"pci:v00008086d000051CAsv0000F111sd0000000Cbc04sc03i80\"\n      }\n    ],\n    \"storage_controller\": [\n      {\n        \"index\": 23,\n        \"attached_to\": 29,\n        \"class_list\": [\n          \"storage_controller\",\n          \"pci\"\n        ],\n        \"bus_type\": {\n          \"hex\": \"0004\",\n          \"name\": \"PCI\",\n          \"value\": 4\n        },\n        \"slot\": {\n          \"bus\": 1,\n          \"number\": 0\n        },\n        \"base_class\": {\n          \"hex\": \"0001\",\n          \"name\": \"Mass storage controller\",\n          \"value\": 1\n        },\n        \"sub_class\": {\n          \"hex\": \"0008\",\n          \"value\": 8\n        },\n        \"pci_interface\": {\n          \"hex\": \"0002\",\n          \"value\": 2\n        },\n        \"vendor\": {\n          \"hex\": \"15b7\",\n          \"value\": 5559\n        },\n        \"sub_vendor\": {\n          \"hex\": \"15b7\",\n          \"value\": 5559\n        },\n        \"device\": {\n          \"hex\": \"5042\",\n          \"value\": 20546\n        },\n        \"sub_device\": {\n          \"hex\": \"5042\",\n          \"value\": 20546\n        },\n        \"revision\": {\n          \"hex\": \"0001\",\n          \"value\": 1\n        },\n        \"model\": \"Mass storage controller\",\n        \"sysfs_id\": \"/devices/pci0000:00/0000:00:06.0/0000:01:00.0\",\n        \"sysfs_bus_id\": \"0000:01:00.0\",\n        \"detail\": {\n          \"function\": 0,\n          \"command\": 1031,\n          \"header_type\": 0,\n          \"secondary_bus\": 0,\n          \"prog_if\": 2\n        },\n        \"driver\": \"nvme\",\n        \"driver_module\": \"nvme\",\n        \"drivers\": [\n          \"nvme\"\n        ],\n        \"driver_modules\": [\n          \"nvme\"\n        ],\n        \"module_alias\": \"pci:v000015B7d00005042sv000015B7sd00005042bc01sc08i02\"\n      }\n    ],\n    \"system\": {\n      \"form_factor\": \"laptop\"\n    },\n    \"usb\": [\n      {\n        \"index\": 46,\n        \"attached_to\": 40,\n        \"class_list\": [\n          \"usb\",\n          \"unknown\"\n        ],\n        \"bus_type\": {\n          \"hex\": \"0086\",\n          \"name\": \"USB\",\n          \"value\": 134\n        },\n        \"slot\": {\n          \"bus\": 0,\n          \"number\": 0\n        },\n        \"base_class\": {\n          \"hex\": \"0000\",\n          \"name\": \"Unclassified device\",\n          \"value\": 0\n        },\n        \"sub_class\": {\n          \"hex\": \"0000\",\n          \"name\": \"Unclassified device\",\n          \"value\": 0\n        },\n        \"vendor\": {\n          \"hex\": \"32ac\",\n          \"name\": \"Framework\",\n          \"value\": 12972\n        },\n        \"device\": {\n          \"hex\": \"001d\",\n          \"name\": \"Framework Laptop 12 Webcam Module\",\n          \"value\": 29\n        },\n        \"revision\": {\n          \"hex\": \"0000\",\n          \"name\": \"0.16\",\n          \"value\": 0\n        },\n        \"serial\": \"0001\",\n        \"model\": \"Framework Laptop 12 Webcam Module\",\n        \"sysfs_id\": \"/devices/pci0000:00/0000:00:14.0/usb3/3-7/3-7:1.2\",\n        \"sysfs_bus_id\": \"3-7:1.2\",\n        \"resources\": [\n          {\n            \"type\": \"baud\",\n            \"speed\": 480000000,\n            \"bits\": 0,\n            \"stop_bits\": 0,\n            \"parity\": 0,\n            \"handshake\": 0\n          }\n        ],\n        \"detail\": {\n          \"device_class\": {\n            \"hex\": \"00ef\",\n            \"name\": \"miscellaneous\",\n            \"value\": 239\n          },\n          \"device_subclass\": {\n            \"hex\": \"0002\",\n            \"name\": \"comm\",\n            \"value\": 2\n          },\n          \"device_protocol\": 1,\n          \"interface_class\": {\n            \"hex\": \"00fe\",\n            \"name\": \"application\",\n            \"value\": 254\n          },\n          \"interface_subclass\": {\n            \"hex\": \"0001\",\n            \"name\": \"audio\",\n            \"value\": 1\n          },\n          \"interface_protocol\": 1,\n          \"interface_number\": 2,\n          \"interface_alternate_setting\": 0,\n          \"interface_association\": {\n            \"function_class\": {\n              \"hex\": \"00fe\",\n              \"name\": \"application\",\n              \"value\": 254\n            },\n            \"function_subclass\": {\n              \"hex\": \"0001\",\n              \"name\": \"audio\",\n              \"value\": 1\n            },\n            \"function_protocol\": 0,\n            \"interface_count\": 1,\n            \"first_interface\": 2\n          }\n        },\n        \"hotplug\": \"usb\",\n        \"module_alias\": \"usb:v32ACp001Dd0016dcEFdsc02dp01icFEisc01ip01in02\"\n      }\n    ],\n    \"usb_controller\": [\n      {\n        \"index\": 17,\n        \"attached_to\": 0,\n        \"class_list\": [\n          \"usb_controller\",\n          \"pci\"\n        ],\n        \"bus_type\": {\n          \"hex\": \"0004\",\n          \"name\": \"PCI\",\n          \"value\": 4\n        },\n        \"slot\": {\n          \"bus\": 0,\n          \"number\": 13\n        },\n        \"base_class\": {\n          \"hex\": \"000c\",\n          \"name\": \"Serial bus controller\",\n          \"value\": 12\n        },\n        \"sub_class\": {\n          \"hex\": \"0003\",\n          \"name\": \"USB Controller\",\n          \"value\": 3\n        },\n        \"pci_interface\": {\n          \"hex\": \"0030\",\n          \"value\": 48\n        },\n        \"vendor\": {\n          \"hex\": \"8086\",\n          \"name\": \"Intel Corporation\",\n          \"value\": 32902\n        },\n        \"sub_vendor\": {\n          \"hex\": \"f111\",\n          \"value\": 61713\n        },\n        \"device\": {\n          \"hex\": \"a71e\",\n          \"value\": 42782\n        },\n        \"sub_device\": {\n          \"hex\": \"000c\",\n          \"value\": 12\n        },\n        \"revision\": {\n          \"hex\": \"0001\",\n          \"value\": 1\n        },\n        \"model\": \"Intel USB Controller\",\n        \"sysfs_id\": \"/devices/pci0000:00/0000:00:0d.0\",\n        \"sysfs_bus_id\": \"0000:00:0d.0\",\n        \"detail\": {\n          \"function\": 0,\n          \"command\": 1030,\n          \"header_type\": 0,\n          \"secondary_bus\": 0,\n          \"prog_if\": 48\n        },\n        \"driver\": \"xhci_hcd\",\n        \"driver_module\": \"xhci_pci\",\n        \"drivers\": [\n          \"xhci_hcd\"\n        ],\n        \"driver_modules\": [\n          \"xhci_pci\"\n        ],\n        \"module_alias\": \"pci:v00008086d0000A71Esv0000F111sd0000000Cbc0Csc03i30\"\n      },\n      {\n        \"index\": 32,\n        \"attached_to\": 0,\n        \"class_list\": [\n          \"usb_controller\",\n          \"pci\"\n        ],\n        \"bus_type\": {\n          \"hex\": \"0004\",\n          \"name\": \"PCI\",\n          \"value\": 4\n        },\n        \"slot\": {\n          \"bus\": 0,\n          \"number\": 20\n        },\n        \"base_class\": {\n          \"hex\": \"000c\",\n          \"name\": \"Serial bus controller\",\n          \"value\": 12\n        },\n        \"sub_class\": {\n          \"hex\": \"0003\",\n          \"name\": \"USB Controller\",\n          \"value\": 3\n        },\n        \"pci_interface\": {\n          \"hex\": \"0030\",\n          \"value\": 48\n        },\n        \"vendor\": {\n          \"hex\": \"8086\",\n          \"name\": \"Intel Corporation\",\n          \"value\": 32902\n        },\n        \"sub_vendor\": {\n          \"hex\": \"f111\",\n          \"value\": 61713\n        },\n        \"device\": {\n          \"hex\": \"51ed\",\n          \"value\": 20973\n        },\n        \"sub_device\": {\n          \"hex\": \"000c\",\n          \"value\": 12\n        },\n        \"revision\": {\n          \"hex\": \"0001\",\n          \"value\": 1\n        },\n        \"model\": \"Intel USB Controller\",\n        \"sysfs_id\": \"/devices/pci0000:00/0000:00:14.0\",\n        \"sysfs_bus_id\": \"0000:00:14.0\",\n        \"detail\": {\n          \"function\": 0,\n          \"command\": 1026,\n          \"header_type\": 0,\n          \"secondary_bus\": 0,\n          \"prog_if\": 48\n        },\n        \"driver\": \"xhci_hcd\",\n        \"driver_module\": \"xhci_pci\",\n        \"drivers\": [\n          \"xhci_hcd\"\n        ],\n        \"driver_modules\": [\n          \"xhci_pci\"\n        ],\n        \"module_alias\": \"pci:v00008086d000051EDsv0000F111sd0000000Cbc0Csc03i30\"\n      }\n    ]\n  },\n  \"smbios\": {\n    \"bios\": {\n      \"handle\": 0,\n      \"vendor\": \"INSYDE Corp.\",\n      \"version\": \"03.03\",\n      \"date\": \"06/05/2025\",\n      \"features\": [\n        \"PCI supported\",\n        \"BIOS flashable\",\n        \"BIOS shadowing allowed\",\n        \"CD boot supported\",\n        \"Selectable boot supported\",\n        \"8042 Keyboard Services supported\",\n        \"CGA/Mono Video supported\",\n        \"ACPI supported\",\n        \"USB Legacy supported\",\n        \"BIOS Boot Spec supported\"\n      ],\n      \"start_address\": \"0xe0000\",\n      \"rom_size\": 16777216\n    },\n    \"board\": {\n      \"handle\": 2,\n      \"manufacturer\": \"Framework\",\n      \"product\": \"FRAPMACP05\",\n      \"version\": \"A5\",\n      \"board_type\": {\n        \"hex\": \"000a\",\n        \"name\": \"Motherboard\",\n        \"value\": 10\n      },\n      \"features\": [\n        \"Hosting Board\",\n        \"Replaceable\"\n      ],\n      \"location\": \"*\",\n      \"chassis\": 3\n    },\n    \"cache\": [\n      {\n        \"handle\": 5,\n        \"socket\": \"L1 Cache\",\n        \"size_max\": 96,\n        \"size_current\": 96,\n        \"speed\": 0,\n        \"mode\": {\n          \"hex\": \"0001\",\n          \"name\": \"Write Back\",\n          \"value\": 1\n        },\n        \"enabled\": true,\n        \"location\": {\n          \"hex\": \"0000\",\n          \"name\": \"Internal\",\n          \"value\": 0\n        },\n        \"socketed\": false,\n        \"level\": 0,\n        \"ecc\": {\n          \"hex\": \"0004\",\n          \"name\": \"Parity\",\n          \"value\": 4\n        },\n        \"cache_type\": {\n          \"hex\": \"0004\",\n          \"name\": \"Data\",\n          \"value\": 4\n        },\n        \"associativity\": {\n          \"hex\": \"0009\",\n          \"name\": \"Other\",\n          \"value\": 9\n        },\n        \"sram_type_current\": [\n          \"Synchronous\"\n        ],\n        \"sram_type_supported\": [\n          \"Synchronous\"\n        ]\n      },\n      {\n        \"handle\": 6,\n        \"socket\": \"L1 Cache\",\n        \"size_max\": 64,\n        \"size_current\": 64,\n        \"speed\": 0,\n        \"mode\": {\n          \"hex\": \"0001\",\n          \"name\": \"Write Back\",\n          \"value\": 1\n        },\n        \"enabled\": true,\n        \"location\": {\n          \"hex\": \"0000\",\n          \"name\": \"Internal\",\n          \"value\": 0\n        },\n        \"socketed\": false,\n        \"level\": 0,\n        \"ecc\": {\n          \"hex\": \"0004\",\n          \"name\": \"Parity\",\n          \"value\": 4\n        },\n        \"cache_type\": {\n          \"hex\": \"0003\",\n          \"name\": \"Instruction\",\n          \"value\": 3\n        },\n        \"associativity\": {\n          \"hex\": \"0007\",\n          \"name\": \"8-way Set-Associative\",\n          \"value\": 7\n        },\n        \"sram_type_current\": [\n          \"Synchronous\"\n        ],\n        \"sram_type_supported\": [\n          \"Synchronous\"\n        ]\n      },\n      {\n        \"handle\": 7,\n        \"socket\": \"L2 Cache\",\n        \"size_max\": 2560,\n        \"size_current\": 2560,\n        \"speed\": 0,\n        \"mode\": {\n          \"hex\": \"0001\",\n          \"name\": \"Write Back\",\n          \"value\": 1\n        },\n        \"enabled\": true,\n        \"location\": {\n          \"hex\": \"0000\",\n          \"name\": \"Internal\",\n          \"value\": 0\n        },\n        \"socketed\": false,\n        \"level\": 1,\n        \"ecc\": {\n          \"hex\": \"0005\",\n          \"name\": \"Single-bit\",\n          \"value\": 5\n        },\n        \"cache_type\": {\n          \"hex\": \"0005\",\n          \"name\": \"Unified\",\n          \"value\": 5\n        },\n        \"associativity\": {\n          \"hex\": \"0001\",\n          \"name\": \"Other\",\n          \"value\": 1\n        },\n        \"sram_type_current\": [\n          \"Synchronous\"\n        ],\n        \"sram_type_supported\": [\n          \"Synchronous\"\n        ]\n      },\n      {\n        \"handle\": 8,\n        \"socket\": \"L3 Cache\",\n        \"size_max\": 12288,\n        \"size_current\": 12288,\n        \"speed\": 0,\n        \"mode\": {\n          \"hex\": \"0001\",\n          \"name\": \"Write Back\",\n          \"value\": 1\n        },\n        \"enabled\": true,\n        \"location\": {\n          \"hex\": \"0000\",\n          \"name\": \"Internal\",\n          \"value\": 0\n        },\n        \"socketed\": false,\n        \"level\": 2,\n        \"ecc\": {\n          \"hex\": \"0006\",\n          \"name\": \"Multi-bit\",\n          \"value\": 6\n        },\n        \"cache_type\": {\n          \"hex\": \"0005\",\n          \"name\": \"Unified\",\n          \"value\": 5\n        },\n        \"associativity\": {\n          \"hex\": \"0009\",\n          \"name\": \"Other\",\n          \"value\": 9\n        },\n        \"sram_type_current\": [\n          \"Synchronous\"\n        ],\n        \"sram_type_supported\": [\n          \"Synchronous\"\n        ]\n      },\n      {\n        \"handle\": 9,\n        \"socket\": \"L1 Cache\",\n        \"size_max\": 256,\n        \"size_current\": 256,\n        \"speed\": 0,\n        \"mode\": {\n          \"hex\": \"0001\",\n          \"name\": \"Write Back\",\n          \"value\": 1\n        },\n        \"enabled\": true,\n        \"location\": {\n          \"hex\": \"0000\",\n          \"name\": \"Internal\",\n          \"value\": 0\n        },\n        \"socketed\": false,\n        \"level\": 0,\n        \"ecc\": {\n          \"hex\": \"0004\",\n          \"name\": \"Parity\",\n          \"value\": 4\n        },\n        \"cache_type\": {\n          \"hex\": \"0004\",\n          \"name\": \"Data\",\n          \"value\": 4\n        },\n        \"associativity\": {\n          \"hex\": \"0007\",\n          \"name\": \"8-way Set-Associative\",\n          \"value\": 7\n        },\n        \"sram_type_current\": [\n          \"Synchronous\"\n        ],\n        \"sram_type_supported\": [\n          \"Synchronous\"\n        ]\n      },\n      {\n        \"handle\": 10,\n        \"socket\": \"L1 Cache\",\n        \"size_max\": 512,\n        \"size_current\": 512,\n        \"speed\": 0,\n        \"mode\": {\n          \"hex\": \"0001\",\n          \"name\": \"Write Back\",\n          \"value\": 1\n        },\n        \"enabled\": true,\n        \"location\": {\n          \"hex\": \"0000\",\n          \"name\": \"Internal\",\n          \"value\": 0\n        },\n        \"socketed\": false,\n        \"level\": 0,\n        \"ecc\": {\n          \"hex\": \"0004\",\n          \"name\": \"Parity\",\n          \"value\": 4\n        },\n        \"cache_type\": {\n          \"hex\": \"0003\",\n          \"name\": \"Instruction\",\n          \"value\": 3\n        },\n        \"associativity\": {\n          \"hex\": \"0007\",\n          \"name\": \"8-way Set-Associative\",\n          \"value\": 7\n        },\n        \"sram_type_current\": [\n          \"Synchronous\"\n        ],\n        \"sram_type_supported\": [\n          \"Synchronous\"\n        ]\n      },\n      {\n        \"handle\": 11,\n        \"socket\": \"L2 Cache\",\n        \"size_max\": 4096,\n        \"size_current\": 4096,\n        \"speed\": 0,\n        \"mode\": {\n          \"hex\": \"0001\",\n          \"name\": \"Write Back\",\n          \"value\": 1\n        },\n        \"enabled\": true,\n        \"location\": {\n          \"hex\": \"0000\",\n          \"name\": \"Internal\",\n          \"value\": 0\n        },\n        \"socketed\": false,\n        \"level\": 1,\n        \"ecc\": {\n          \"hex\": \"0005\",\n          \"name\": \"Single-bit\",\n          \"value\": 5\n        },\n        \"cache_type\": {\n          \"hex\": \"0005\",\n          \"name\": \"Unified\",\n          \"value\": 5\n        },\n        \"associativity\": {\n          \"hex\": \"0008\",\n          \"name\": \"16-way Set-Associative\",\n          \"value\": 8\n        },\n        \"sram_type_current\": [\n          \"Synchronous\"\n        ],\n        \"sram_type_supported\": [\n          \"Synchronous\"\n        ]\n      },\n      {\n        \"handle\": 12,\n        \"socket\": \"L3 Cache\",\n        \"size_max\": 12288,\n        \"size_current\": 12288,\n        \"speed\": 0,\n        \"mode\": {\n          \"hex\": \"0001\",\n          \"name\": \"Write Back\",\n          \"value\": 1\n        },\n        \"enabled\": true,\n        \"location\": {\n          \"hex\": \"0000\",\n          \"name\": \"Internal\",\n          \"value\": 0\n        },\n        \"socketed\": false,\n        \"level\": 2,\n        \"ecc\": {\n          \"hex\": \"0006\",\n          \"name\": \"Multi-bit\",\n          \"value\": 6\n        },\n        \"cache_type\": {\n          \"hex\": \"0005\",\n          \"name\": \"Unified\",\n          \"value\": 5\n        },\n        \"associativity\": {\n          \"hex\": \"0009\",\n          \"name\": \"Other\",\n          \"value\": 9\n        },\n        \"sram_type_current\": [\n          \"Synchronous\"\n        ],\n        \"sram_type_supported\": [\n          \"Synchronous\"\n        ]\n      }\n    ],\n    \"chassis\": [\n      {\n        \"handle\": 3,\n        \"manufacturer\": \"Framework\",\n        \"version\": \"A5\",\n        \"chassis_type\": {\n          \"hex\": \"001f\",\n          \"name\": \"Other\",\n          \"value\": 31\n        },\n        \"lock_present\": false,\n        \"bootup_state\": {\n          \"hex\": \"0003\",\n          \"name\": \"Safe\",\n          \"value\": 3\n        },\n        \"power_state\": {\n          \"hex\": \"0003\",\n          \"name\": \"Safe\",\n          \"value\": 3\n        },\n        \"thermal_state\": {\n          \"hex\": \"0003\",\n          \"name\": \"Safe\",\n          \"value\": 3\n        },\n        \"security_state\": {\n          \"hex\": \"0003\",\n          \"name\": \"None\",\n          \"value\": 3\n        },\n        \"oem\": \"0x0\"\n      }\n    ],\n    \"config\": {\n      \"handle\": 20,\n      \"options\": [\n        \"ConfigOptions1\",\n        \"ConfigOptions2\",\n        \"ConfigOptions3\"\n      ]\n    },\n    \"group_associations\": [\n      {\n        \"handle\": 22,\n        \"name\": \"$MEI\",\n        \"handles\": [\n          43\n        ]\n      },\n      {\n        \"handle\": 50,\n        \"name\": \"Firmware Version Info\",\n        \"handles\": [\n          193273528364,\n          197568495661,\n          201863462958,\n          206158430255,\n          210453397552,\n          158913790001\n        ]\n      },\n      {\n        \"handle\": 30,\n        \"power\": {\n          \"hex\": \"0000\",\n          \"name\": \"Disabled\",\n          \"value\": 0\n        },\n        \"keyboard\": {\n          \"hex\": \"0002\",\n          \"name\": \"Not Implemented\",\n          \"value\": 2\n        },\n        \"admin\": {\n          \"hex\": \"0000\",\n          \"name\": \"Disabled\",\n          \"value\": 0\n        },\n        \"reset\": {\n          \"hex\": \"0002\",\n          \"name\": \"Not Implemented\",\n          \"value\": 2\n        }\n      }\n    ],\n    \"language\": [\n      {\n        \"handle\": 21,\n        \"languages\": [\n          \"en|US|iso8859-1,0\",\n          \"fr|FR|iso8859-1,0\",\n          \"zh|TW|unicode,0\",\n          \"ja|JP|unicode,0\"\n        ]\n      }\n    ],\n    \"memory_array\": [\n      {\n        \"handle\": 24,\n        \"location\": {\n          \"hex\": \"0003\",\n          \"name\": \"Motherboard\",\n          \"value\": 3\n        },\n        \"usage\": {\n          \"hex\": \"0003\",\n          \"name\": \"System memory\",\n          \"value\": 3\n        },\n        \"ecc\": {\n          \"hex\": \"0003\",\n          \"name\": \"None\",\n          \"value\": 3\n        },\n        \"max_size\": \"0x3000000\",\n        \"error_handle\": 65534,\n        \"slots\": 1\n      }\n    ],\n    \"memory_array_mapped_address\": [\n      {\n        \"handle\": 26,\n        \"array_handle\": 24,\n        \"start_address\": \"0x0\",\n        \"end_address\": \"0xc00000000\",\n        \"part_width\": 1\n      }\n    ],\n    \"memory_device\": [\n      {\n        \"handle\": 25,\n        \"location\": \"Controller0-ChannelA-DIMM0\",\n        \"bank_location\": \"BANK 0\",\n        \"manufacturer\": \"A-DATA Technology\",\n        \"part_number\": \"AD5S560048G-SF2\",\n        \"array_handle\": 24,\n        \"error_handle\": 65534,\n        \"width\": 64,\n        \"ecc_bits\": 0,\n        \"size\": 50331648,\n        \"form_factor\": {\n          \"hex\": \"000d\",\n          \"name\": \"SODIMM\",\n          \"value\": 13\n        },\n        \"set\": 0,\n        \"memory_type\": {\n          \"hex\": \"0022\",\n          \"name\": \"Other\",\n          \"value\": 34\n        },\n        \"memory_type_details\": [\n          \"Synchronous\"\n        ],\n        \"speed\": 5600\n      }\n    ],\n    \"memory_device_mapped_address\": [\n      {\n        \"handle\": 27,\n        \"memory_device_handle\": 25,\n        \"array_map_handle\": 26,\n        \"start_address\": \"0x0\",\n        \"end_address\": \"0xc00000000\",\n        \"row_position\": 255,\n        \"interleave_position\": 1,\n        \"interleave_depth\": 1\n      }\n    ],\n    \"pointing_device\": [\n      {\n        \"handle\": 28,\n        \"mouse_type\": {\n          \"hex\": \"0007\",\n          \"name\": \"Touch Pad\",\n          \"value\": 7\n        },\n        \"interface\": {\n          \"hex\": \"0004\",\n          \"name\": \"PS/2\",\n          \"value\": 4\n        },\n        \"buttons\": 4\n      }\n    ],\n    \"port_connector\": [\n      {\n        \"handle\": 13,\n        \"port_type\": {\n          \"hex\": \"0010\",\n          \"name\": \"USB\",\n          \"value\": 16\n        },\n        \"internal_reference_designator\": \"JTYPEC0\",\n        \"external_connector_type\": {\n          \"hex\": \"0012\",\n          \"name\": \"Access Bus [USB]\",\n          \"value\": 18\n        },\n        \"external_reference_designator\": \"USB\"\n      },\n      {\n        \"handle\": 14,\n        \"port_type\": {\n          \"hex\": \"0010\",\n          \"name\": \"USB\",\n          \"value\": 16\n        },\n        \"internal_reference_designator\": \"JTYPEC1\",\n        \"external_connector_type\": {\n          \"hex\": \"0012\",\n          \"name\": \"Access Bus [USB]\",\n          \"value\": 18\n        },\n        \"external_reference_designator\": \"USB\"\n      },\n      {\n        \"handle\": 15,\n        \"port_type\": {\n          \"hex\": \"0010\",\n          \"name\": \"USB\",\n          \"value\": 16\n        },\n        \"internal_reference_designator\": \"JTYPEC2\",\n        \"external_connector_type\": {\n          \"hex\": \"0012\",\n          \"name\": \"Access Bus [USB]\",\n          \"value\": 18\n        },\n        \"external_reference_designator\": \"USB\"\n      },\n      {\n        \"handle\": 16,\n        \"port_type\": {\n          \"hex\": \"0010\",\n          \"name\": \"USB\",\n          \"value\": 16\n        },\n        \"internal_reference_designator\": \"JTYPEC3\",\n        \"external_connector_type\": {\n          \"hex\": \"0012\",\n          \"name\": \"Access Bus [USB]\",\n          \"value\": 18\n        },\n        \"external_reference_designator\": \"USB\"\n      }\n    ],\n    \"processor\": [\n      {\n        \"handle\": 4,\n        \"socket\": \"U3E1\",\n        \"socket_type\": {\n          \"hex\": \"0041\",\n          \"name\": \"Other\",\n          \"value\": 65\n        },\n        \"socket_populated\": true,\n        \"manufacturer\": \"Intel(R) Corporation\",\n        \"version\": \"13th Gen Intel(R) Core(TM) i5-1334U\",\n        \"part\": \"To Be Filled By O.E.M.\",\n        \"processor_type\": {\n          \"hex\": \"0003\",\n          \"name\": \"CPU\",\n          \"value\": 3\n        },\n        \"processor_family\": {\n          \"hex\": \"00cd\",\n          \"name\": \"Other\",\n          \"value\": 205\n        },\n        \"processor_status\": {\n          \"hex\": \"0001\",\n          \"name\": \"Enabled\",\n          \"value\": 1\n        },\n        \"clock_ext\": 100,\n        \"clock_max\": 4600,\n        \"cache_handle_l1\": 10,\n        \"cache_handle_l2\": 11,\n        \"cache_handle_l3\": 12\n      }\n    ],\n    \"slot\": [\n      {\n        \"handle\": 17,\n        \"designation\": \"JWLAN\",\n        \"slot_type\": {\n          \"hex\": \"0015\",\n          \"name\": \"Other\",\n          \"value\": 21\n        },\n        \"bus_width\": {\n          \"hex\": \"0008\",\n          \"name\": \"Other\",\n          \"value\": 8\n        },\n        \"usage\": {\n          \"hex\": \"0003\",\n          \"name\": \"Available\",\n          \"value\": 3\n        },\n        \"length\": {\n          \"hex\": \"0001\",\n          \"name\": \"Other\",\n          \"value\": 1\n        },\n        \"id\": 1,\n        \"features\": [\n          \"PME#\"\n        ]\n      },\n      {\n        \"handle\": 18,\n        \"designation\": \"JSSD\",\n        \"slot_type\": {\n          \"hex\": \"0016\",\n          \"name\": \"Other\",\n          \"value\": 22\n        },\n        \"bus_width\": {\n          \"hex\": \"000a\",\n          \"name\": \"Other\",\n          \"value\": 10\n        },\n        \"usage\": {\n          \"hex\": \"0004\",\n          \"name\": \"In Use\",\n          \"value\": 4\n        },\n        \"length\": {\n          \"hex\": \"0001\",\n          \"name\": \"Other\",\n          \"value\": 1\n        },\n        \"id\": 2,\n        \"features\": [\n          \"PME#\"\n        ]\n      }\n    ],\n    \"system\": {\n      \"handle\": 1,\n      \"manufacturer\": \"Framework\",\n      \"product\": \"Laptop 12 (13th Gen Intel Core)\",\n      \"version\": \"A5\",\n      \"wake_up\": {\n        \"hex\": \"0006\",\n        \"name\": \"Power Switch\",\n        \"value\": 6\n      }\n    }\n  }\n}"
  },
  {
    "path": "configurations/nixos/work/default.nix",
    "content": "# NixOS configuration for work\n{\n  flake,\n  pkgs,\n  ...\n}:\nlet\n  inherit (flake) self;\nin\n{\n  imports = [\n    # Internal modules via flake outputs\n    self.nixosModules.default\n    self.nixosModules.users-bbigras\n    self.nixosModules.pam-limits\n    self.nixosModules.hardware-nonsecureboot\n    self.nixosModules.services-podman\n    self.nixosModules.services-virt-manager\n\n    # Host-specific files\n    # ./state.nix\n    { config.facter.reportPath = ./facter.json; }\n  ];\n\n  # Host-specific home-manager user config\n  home-manager.users.bbigras.imports = [\n    self.homeModules.trusted\n  ];\n\n  # SSH target for remote activation\n\n  # Platform\n  nixpkgs.hostPlatform = \"x86_64-linux\";\n\n  # Host-specific configuration\n  boot = {\n    initrd = {\n      systemd.enable = true;\n    };\n    plymouth.enable = true;\n  };\n\n  environment.systemPackages = with pkgs; [\n    cntr\n    wireguard-tools\n  ];\n\n  fileSystems.\"/\" = {\n    device = \"/dev/disk/by-uuid/ccb4db0b-1cb8-4d5f-be9a-8b20a5c63982\";\n    fsType = \"btrfs\";\n    options = [\n      \"subvol=nixos\"\n      \"compress=zstd\"\n    ];\n  };\n\n  # agenix-rekey host pubkey\n  age.rekey.hostPubkey = \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKEfhY66gBDU0xgjaQgm9V991wuxI/R3bm3Yt6Kdv9Au\";\n\n  networking = {\n    # hostId = \"\";\n    hostName = \"bbigras-work\";\n    wireguard.enable = true;\n  };\n\n  # nix.settings.max-substitution-jobs = 32;\n\n  security.sudo.wheelNeedsPassword = true;\n\n  services = {\n    fwupd.enable = true;\n    udisks2.enable = true;\n    tuned = {\n      enable = true;\n      ppdSupport = false;\n      recommend = {\n        balanced = { };\n      };\n    };\n  };\n\n}\n"
  },
  {
    "path": "configurations/nixos/work/facter.json",
    "content": "{\n  \"version\": 1,\n  \"system\": \"x86_64-linux\",\n  \"virtualisation\": \"none\",\n  \"hardware\": {\n    \"bios\": {\n      \"apm_info\": {\n        \"supported\": false,\n        \"enabled\": false,\n        \"version\": 0,\n        \"sub_version\": 0,\n        \"bios_flags\": 0\n      },\n      \"vbe_info\": {\n        \"version\": 0,\n        \"video_memory\": 0\n      },\n      \"pnp\": true,\n      \"pnp_id\": 0,\n      \"lba_support\": false,\n      \"low_memory_size\": 645120,\n      \"smbios_version\": 520\n    },\n    \"bridge\": [\n      {\n        \"index\": 9,\n        \"attached_to\": 0,\n        \"class_list\": [\n          \"pci\",\n          \"bridge\"\n        ],\n        \"bus_type\": {\n          \"hex\": \"0004\",\n          \"name\": \"PCI\",\n          \"value\": 4\n        },\n        \"slot\": {\n          \"bus\": 0,\n          \"number\": 28\n        },\n        \"base_class\": {\n          \"hex\": \"0006\",\n          \"name\": \"Bridge\",\n          \"value\": 6\n        },\n        \"sub_class\": {\n          \"hex\": \"0004\",\n          \"name\": \"PCI bridge\",\n          \"value\": 4\n        },\n        \"pci_interface\": {\n          \"hex\": \"0000\",\n          \"name\": \"Normal decode\",\n          \"value\": 0\n        },\n        \"vendor\": {\n          \"hex\": \"8086\",\n          \"name\": \"Intel Corporation\",\n          \"value\": 32902\n        },\n        \"sub_vendor\": {\n          \"hex\": \"17aa\",\n          \"value\": 6058\n        },\n        \"device\": {\n          \"hex\": \"8c10\",\n          \"value\": 35856\n        },\n        \"sub_device\": {\n          \"hex\": \"30a3\",\n          \"value\": 12451\n        },\n        \"revision\": {\n          \"hex\": \"00d4\",\n          \"value\": 212\n        },\n        \"model\": \"Intel PCI bridge\",\n        \"sysfs_id\": \"/devices/pci0000:00/0000:00:1c.0\",\n        \"sysfs_bus_id\": \"0000:00:1c.0\",\n        \"resources\": [\n          {\n            \"type\": \"irq\",\n            \"base\": 24,\n            \"triggered\": 0,\n            \"enabled\": true\n          }\n        ],\n        \"detail\": {\n          \"function\": 0,\n          \"command\": 1031,\n          \"header_type\": 1,\n          \"secondary_bus\": 1,\n          \"irq\": 24,\n          \"prog_if\": 0\n        },\n        \"driver\": \"pcieport\",\n        \"drivers\": [\n          \"pcieport\"\n        ],\n        \"module_alias\": \"pci:v00008086d00008C10sv000017AAsd000030A3bc06sc04i00\"\n      },\n      {\n        \"index\": 10,\n        \"attached_to\": 0,\n        \"class_list\": [\n          \"pci\",\n          \"bridge\"\n        ],\n        \"bus_type\": {\n          \"hex\": \"0004\",\n          \"name\": \"PCI\",\n          \"value\": 4\n        },\n        \"slot\": {\n          \"bus\": 0,\n          \"number\": 31\n        },\n        \"base_class\": {\n          \"hex\": \"0006\",\n          \"name\": \"Bridge\",\n          \"value\": 6\n        },\n        \"sub_class\": {\n          \"hex\": \"0001\",\n          \"name\": \"ISA bridge\",\n          \"value\": 1\n        },\n        \"vendor\": {\n          \"hex\": \"8086\",\n          \"name\": \"Intel Corporation\",\n          \"value\": 32902\n        },\n        \"sub_vendor\": {\n          \"hex\": \"17aa\",\n          \"value\": 6058\n        },\n        \"device\": {\n          \"hex\": \"8c4e\",\n          \"value\": 35918\n        },\n        \"sub_device\": {\n          \"hex\": \"30a3\",\n          \"value\": 12451\n        },\n        \"revision\": {\n          \"hex\": \"0004\",\n          \"value\": 4\n        },\n        \"model\": \"Intel ISA bridge\",\n        \"sysfs_id\": \"/devices/pci0000:00/0000:00:1f.0\",\n        \"sysfs_bus_id\": \"0000:00:1f.0\",\n        \"detail\": {\n          \"function\": 0,\n          \"command\": 7,\n          \"header_type\": 0,\n          \"secondary_bus\": 0,\n          \"irq\": 0,\n          \"prog_if\": 0\n        },\n        \"driver\": \"lpc_ich\",\n        \"driver_module\": \"lpc_ich\",\n        \"drivers\": [\n          \"lpc_ich\"\n        ],\n        \"driver_modules\": [\n          \"lpc_ich\"\n        ],\n        \"module_alias\": \"pci:v00008086d00008C4Esv000017AAsd000030A3bc06sc01i00\"\n      },\n      {\n        \"index\": 15,\n        \"attached_to\": 0,\n        \"class_list\": [\n          \"pci\",\n          \"bridge\"\n        ],\n        \"bus_type\": {\n          \"hex\": \"0004\",\n          \"name\": \"PCI\",\n          \"value\": 4\n        },\n        \"slot\": {\n          \"bus\": 0,\n          \"number\": 0\n        },\n        \"base_class\": {\n          \"hex\": \"0006\",\n          \"name\": \"Bridge\",\n          \"value\": 6\n        },\n        \"sub_class\": {\n          \"hex\": \"0000\",\n          \"name\": \"Host bridge\",\n          \"value\": 0\n        },\n        \"vendor\": {\n          \"hex\": \"8086\",\n          \"name\": \"Intel Corporation\",\n          \"value\": 32902\n        },\n        \"sub_vendor\": {\n          \"hex\": \"17aa\",\n          \"value\": 6058\n        },\n        \"device\": {\n          \"hex\": \"0c00\",\n          \"value\": 3072\n        },\n        \"sub_device\": {\n          \"hex\": \"30a3\",\n          \"value\": 12451\n        },\n        \"revision\": {\n          \"hex\": \"0006\",\n          \"value\": 6\n        },\n        \"model\": \"Intel Host bridge\",\n        \"sysfs_id\": \"/devices/pci0000:00/0000:00:00.0\",\n        \"sysfs_bus_id\": \"0000:00:00.0\",\n        \"detail\": {\n          \"function\": 0,\n          \"command\": 6,\n          \"header_type\": 0,\n          \"secondary_bus\": 0,\n          \"irq\": 0,\n          \"prog_if\": 0\n        },\n        \"driver\": \"hsw_uncore\",\n        \"driver_module\": \"intel_uncore\",\n        \"drivers\": [\n          \"hsw_uncore\"\n        ],\n        \"driver_modules\": [\n          \"intel_uncore\"\n        ],\n        \"module_alias\": \"pci:v00008086d00000C00sv000017AAsd000030A3bc06sc00i00\"\n      }\n    ],\n    \"cpu\": [\n      {\n        \"architecture\": \"x86_64\",\n        \"vendor_name\": \"GenuineIntel\",\n        \"model_name\": \"Intel(R) Core(TM) i5-4570T CPU @ 2.90GHz\",\n        \"family\": 6,\n        \"model\": 60,\n        \"stepping\": 3,\n        \"features\": [\n          \"fpu\",\n          \"vme\",\n          \"de\",\n          \"pse\",\n          \"tsc\",\n          \"msr\",\n          \"pae\",\n          \"mce\",\n          \"cx8\",\n          \"apic\",\n          \"sep\",\n          \"mtrr\",\n          \"pge\",\n          \"mca\",\n          \"cmov\",\n          \"pat\",\n          \"pse36\",\n          \"clflush\",\n          \"dts\",\n          \"acpi\",\n          \"mmx\",\n          \"fxsr\",\n          \"sse\",\n          \"sse2\",\n          \"ss\",\n          \"ht\",\n          \"tm\",\n          \"pbe\",\n          \"syscall\",\n          \"nx\",\n          \"pdpe1gb\",\n          \"rdtscp\",\n          \"lm\",\n          \"constant_tsc\",\n          \"arch_perfmon\",\n          \"pebs\",\n          \"bts\",\n          \"rep_good\",\n          \"nopl\",\n          \"xtopology\",\n          \"nonstop_tsc\",\n          \"cpuid\",\n          \"aperfmperf\",\n          \"pni\",\n          \"pclmulqdq\",\n          \"dtes64\",\n          \"monitor\",\n          \"ds_cpl\",\n          \"vmx\",\n          \"smx\",\n          \"est\",\n          \"tm2\",\n          \"ssse3\",\n          \"sdbg\",\n          \"fma\",\n          \"cx16\",\n          \"xtpr\",\n          \"pdcm\",\n          \"pcid\",\n          \"sse4_1\",\n          \"sse4_2\",\n          \"x2apic\",\n          \"movbe\",\n          \"popcnt\",\n          \"tsc_deadline_timer\",\n          \"aes\",\n          \"xsave\",\n          \"avx\",\n          \"f16c\",\n          \"rdrand\",\n          \"lahf_lm\",\n          \"abm\",\n          \"cpuid_fault\",\n          \"epb\",\n          \"pti\",\n          \"ssbd\",\n          \"ibrs\",\n          \"ibpb\",\n          \"stibp\",\n          \"tpr_shadow\",\n          \"flexpriority\",\n          \"ept\",\n          \"vpid\",\n          \"ept_ad\",\n          \"fsgsbase\",\n          \"tsc_adjust\",\n          \"bmi1\",\n          \"avx2\",\n          \"smep\",\n          \"bmi2\",\n          \"erms\",\n          \"invpcid\",\n          \"xsaveopt\",\n          \"dtherm\",\n          \"ida\",\n          \"arat\",\n          \"pln\",\n          \"pts\",\n          \"vnmi\",\n          \"md_clear\",\n          \"flush_l1d\"\n        ],\n        \"bugs\": [\n          \"cpu_meltdown\",\n          \"spectre_v1\",\n          \"spectre_v2\",\n          \"spec_store_bypass\",\n          \"l1tf\",\n          \"mds\",\n          \"swapgs\",\n          \"itlb_multihit\",\n          \"srbds\",\n          \"mmio_unknown\"\n        ],\n        \"power_management\": [\n          \"\"\n        ],\n        \"bogo\": 5787.12,\n        \"cache\": 4096,\n        \"units\": 16,\n        \"physical_id\": 0,\n        \"siblings\": 4,\n        \"cores\": 2,\n        \"fpu\": false,\n        \"fpu_exception\": false,\n        \"cpuid_level\": 13,\n        \"write_protect\": false,\n        \"clflush_size\": 64,\n        \"cache_alignment\": 64,\n        \"address_sizes\": {\n          \"physical\": \"0x27\",\n          \"virtual\": \"0x30\"\n        }\n      }\n    ],\n    \"disk\": [\n      {\n        \"index\": 23,\n        \"attached_to\": 8,\n        \"class_list\": [\n          \"disk\",\n          \"ide\",\n          \"block_device\"\n        ],\n        \"bus_type\": {\n          \"hex\": \"0085\",\n          \"name\": \"IDE\",\n          \"value\": 133\n        },\n        \"slot\": {\n          \"bus\": 0,\n          \"number\": 0\n        },\n        \"base_class\": {\n          \"hex\": \"0106\",\n          \"name\": \"Mass Storage Device\",\n          \"value\": 262\n        },\n        \"sub_class\": {\n          \"hex\": \"0000\",\n          \"name\": \"Disk\",\n          \"value\": 0\n        },\n        \"device\": {\n          \"hex\": \"0000\",\n          \"name\": \"HFS500G32TND-N1A\",\n          \"value\": 0\n        },\n        \"revision\": {\n          \"hex\": \"0000\",\n          \"name\": \"0P10\",\n          \"value\": 0\n        },\n        \"serial\": \"FJ71N506410501D45\",\n        \"model\": \"HFS500G32TND-N1A\",\n        \"sysfs_id\": \"/class/block/sda\",\n        \"sysfs_bus_id\": \"0:0:0:0\",\n        \"sysfs_device_link\": \"/devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0/0:0:0:0\",\n        \"unix_device_name\": \"/dev/sda\",\n        \"unix_device_number\": {\n          \"type\": 98,\n          \"major\": 8,\n          \"minor\": 0,\n          \"range\": 16\n        },\n        \"unix_device_names\": [\n          \"/dev/disk/by-id/ata-HFS500G32TND-N1A2A_FJ71N506410501D45\",\n          \"/dev/disk/by-path/pci-0000:00:1f.2-ata-1\",\n          \"/dev/disk/by-path/pci-0000:00:1f.2-ata-1.0\",\n          \"/dev/sda\"\n        ],\n        \"rom_id\": \"0x80\",\n        \"resources\": [\n          {\n            \"type\": \"disk_geo\",\n            \"cylinders\": 60801,\n            \"heads\": 255,\n            \"sectors\": 63,\n            \"size\": \"0x0\",\n            \"geo_type\": \"logical\"\n          },\n          {\n            \"type\": \"size\",\n            \"unit\": \"sectors\",\n            \"value_1\": 976773168,\n            \"value_2\": 512\n          }\n        ],\n        \"driver\": \"ahci\",\n        \"driver_module\": \"ahci\",\n        \"drivers\": [\n          \"ahci\",\n          \"sd\"\n        ],\n        \"driver_modules\": [\n          \"ahci\",\n          \"sd_mod\"\n        ]\n      }\n    ],\n    \"graphics_card\": [\n      {\n        \"index\": 20,\n        \"attached_to\": 0,\n        \"class_list\": [\n          \"graphics_card\",\n          \"pci\"\n        ],\n        \"bus_type\": {\n          \"hex\": \"0004\",\n          \"name\": \"PCI\",\n          \"value\": 4\n        },\n        \"slot\": {\n          \"bus\": 0,\n          \"number\": 2\n        },\n        \"base_class\": {\n          \"hex\": \"0003\",\n          \"name\": \"Display controller\",\n          \"value\": 3\n        },\n        \"sub_class\": {\n          \"hex\": \"0000\",\n          \"name\": \"VGA compatible controller\",\n          \"value\": 0\n        },\n        \"pci_interface\": {\n          \"hex\": \"0000\",\n          \"name\": \"VGA\",\n          \"value\": 0\n        },\n        \"vendor\": {\n          \"hex\": \"8086\",\n          \"name\": \"Intel Corporation\",\n          \"value\": 32902\n        },\n        \"sub_vendor\": {\n          \"hex\": \"17aa\",\n          \"value\": 6058\n        },\n        \"device\": {\n          \"hex\": \"0412\",\n          \"value\": 1042\n        },\n        \"sub_device\": {\n          \"hex\": \"30a3\",\n          \"value\": 12451\n        },\n        \"revision\": {\n          \"hex\": \"0006\",\n          \"value\": 6\n        },\n        \"model\": \"Intel VGA compatible controller\",\n        \"sysfs_id\": \"/devices/pci0000:00/0000:00:02.0\",\n        \"sysfs_bus_id\": \"0000:00:02.0\",\n        \"resources\": [\n          {\n            \"type\": \"io\",\n            \"base\": 61440,\n            \"range\": 64,\n            \"enabled\": true,\n            \"access\": \"read_write\"\n          },\n          {\n            \"type\": \"irq\",\n            \"base\": 30,\n            \"triggered\": 0,\n            \"enabled\": true\n          },\n          {\n            \"type\": \"mem\",\n            \"base\": 3758096384,\n            \"range\": 268435456,\n            \"enabled\": true,\n            \"access\": \"read_only\",\n            \"prefetch\": \"no\"\n          },\n          {\n            \"type\": \"mem\",\n            \"base\": 4152360960,\n            \"range\": 4194304,\n            \"enabled\": true,\n            \"access\": \"read_write\",\n            \"prefetch\": \"no\"\n          },\n          {\n            \"type\": \"mem\",\n            \"base\": 786432,\n            \"range\": 131072,\n            \"enabled\": false,\n            \"access\": \"read_write\",\n            \"prefetch\": \"no\"\n          }\n        ],\n        \"detail\": {\n          \"function\": 0,\n          \"command\": 1031,\n          \"header_type\": 0,\n          \"secondary_bus\": 0,\n          \"irq\": 30,\n          \"prog_if\": 0\n        },\n        \"driver\": \"i915\",\n        \"driver_module\": \"i915\",\n        \"drivers\": [\n          \"i915\"\n        ],\n        \"driver_modules\": [\n          \"i915\"\n        ],\n        \"module_alias\": \"pci:v00008086d00000412sv000017AAsd000030A3bc03sc00i00\",\n        \"label\": \"Onboard IGD\"\n      }\n    ],\n    \"hub\": [\n      {\n        \"index\": 24,\n        \"attached_to\": 31,\n        \"class_list\": [\n          \"usb\",\n          \"hub\"\n        ],\n        \"bus_type\": {\n          \"hex\": \"0086\",\n          \"name\": \"USB\",\n          \"value\": 134\n        },\n        \"slot\": {\n          \"bus\": 0,\n          \"number\": 0\n        },\n        \"base_class\": {\n          \"hex\": \"010a\",\n          \"name\": \"Hub\",\n          \"value\": 266\n        },\n        \"vendor\": {\n          \"hex\": \"8087\",\n          \"value\": 32903\n        },\n        \"device\": {\n          \"hex\": \"8000\",\n          \"value\": 32768\n        },\n        \"revision\": {\n          \"hex\": \"0000\",\n          \"name\": \"0.04\",\n          \"value\": 0\n        },\n        \"model\": \"Hub\",\n        \"sysfs_id\": \"/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1:1.0\",\n        \"sysfs_bus_id\": \"2-1:1.0\",\n        \"resources\": [\n          {\n            \"type\": \"baud\",\n            \"speed\": 480000000,\n            \"bits\": 0,\n            \"stop_bits\": 0,\n            \"parity\": 0,\n            \"handshake\": 0\n          }\n        ],\n        \"detail\": {\n          \"device_class\": {\n            \"hex\": \"0009\",\n            \"name\": \"hub\",\n            \"value\": 9\n          },\n          \"device_subclass\": {\n            \"hex\": \"0000\",\n            \"name\": \"per_interface\",\n            \"value\": 0\n          },\n          \"device_protocol\": 1,\n          \"interface_class\": {\n            \"hex\": \"0009\",\n            \"name\": \"hub\",\n            \"value\": 9\n          },\n          \"interface_subclass\": {\n            \"hex\": \"0000\",\n            \"name\": \"per_interface\",\n            \"value\": 0\n          },\n          \"interface_protocol\": 0,\n          \"interface_number\": 0,\n          \"interface_alternate_setting\": 0\n        },\n        \"hotplug\": \"usb\",\n        \"driver\": \"hub\",\n        \"drivers\": [\n          \"hub\"\n        ],\n        \"module_alias\": \"usb:v8087p8000d0004dc09dsc00dp01ic09isc00ip00in00\"\n      },\n      {\n        \"index\": 25,\n        \"attached_to\": 21,\n        \"class_list\": [\n          \"usb\",\n          \"hub\"\n        ],\n        \"bus_type\": {\n          \"hex\": \"0086\",\n          \"name\": \"USB\",\n          \"value\": 134\n        },\n        \"slot\": {\n          \"bus\": 0,\n          \"number\": 0\n        },\n        \"base_class\": {\n          \"hex\": \"010a\",\n          \"name\": \"Hub\",\n          \"value\": 266\n        },\n        \"vendor\": {\n          \"hex\": \"1d6b\",\n          \"name\": \"Linux 6.13.3 xhci-hcd\",\n          \"value\": 7531\n        },\n        \"device\": {\n          \"hex\": \"0002\",\n          \"name\": \"xHCI Host Controller\",\n          \"value\": 2\n        },\n        \"revision\": {\n          \"hex\": \"0000\",\n          \"name\": \"6.13\",\n          \"value\": 0\n        },\n        \"serial\": \"0000:00:14.0\",\n        \"model\": \"Linux 6.13.3 xhci-hcd xHCI Host Controller\",\n        \"sysfs_id\": \"/devices/pci0000:00/0000:00:14.0/usb3/3-0:1.0\",\n        \"sysfs_bus_id\": \"3-0:1.0\",\n        \"resources\": [\n          {\n            \"type\": \"baud\",\n            \"speed\": 480000000,\n            \"bits\": 0,\n            \"stop_bits\": 0,\n            \"parity\": 0,\n            \"handshake\": 0\n          }\n        ],\n        \"detail\": {\n          \"device_class\": {\n            \"hex\": \"0009\",\n            \"name\": \"hub\",\n            \"value\": 9\n          },\n          \"device_subclass\": {\n            \"hex\": \"0000\",\n            \"name\": \"per_interface\",\n            \"value\": 0\n          },\n          \"device_protocol\": 1,\n          \"interface_class\": {\n            \"hex\": \"0009\",\n            \"name\": \"hub\",\n            \"value\": 9\n          },\n          \"interface_subclass\": {\n            \"hex\": \"0000\",\n            \"name\": \"per_interface\",\n            \"value\": 0\n          },\n          \"interface_protocol\": 0,\n          \"interface_number\": 0,\n          \"interface_alternate_setting\": 0\n        },\n        \"hotplug\": \"usb\",\n        \"driver\": \"hub\",\n        \"drivers\": [\n          \"hub\"\n        ],\n        \"module_alias\": \"usb:v1D6Bp0002d0613dc09dsc00dp01ic09isc00ip00in00\"\n      },\n      {\n        \"index\": 27,\n        \"attached_to\": 21,\n        \"class_list\": [\n          \"usb\",\n          \"hub\"\n        ],\n        \"bus_type\": {\n          \"hex\": \"0086\",\n          \"name\": \"USB\",\n          \"value\": 134\n        },\n        \"slot\": {\n          \"bus\": 0,\n          \"number\": 0\n        },\n        \"base_class\": {\n          \"hex\": \"010a\",\n          \"name\": \"Hub\",\n          \"value\": 266\n        },\n        \"vendor\": {\n          \"hex\": \"1d6b\",\n          \"name\": \"Linux 6.13.3 xhci-hcd\",\n          \"value\": 7531\n        },\n        \"device\": {\n          \"hex\": \"0003\",\n          \"name\": \"xHCI Host Controller\",\n          \"value\": 3\n        },\n        \"revision\": {\n          \"hex\": \"0000\",\n          \"name\": \"6.13\",\n          \"value\": 0\n        },\n        \"serial\": \"0000:00:14.0\",\n        \"model\": \"Linux 6.13.3 xhci-hcd xHCI Host Controller\",\n        \"sysfs_id\": \"/devices/pci0000:00/0000:00:14.0/usb4/4-0:1.0\",\n        \"sysfs_bus_id\": \"4-0:1.0\",\n        \"detail\": {\n          \"device_class\": {\n            \"hex\": \"0009\",\n            \"name\": \"hub\",\n            \"value\": 9\n          },\n          \"device_subclass\": {\n            \"hex\": \"0000\",\n            \"name\": \"per_interface\",\n            \"value\": 0\n          },\n          \"device_protocol\": 3,\n          \"interface_class\": {\n            \"hex\": \"0009\",\n            \"name\": \"hub\",\n            \"value\": 9\n          },\n          \"interface_subclass\": {\n            \"hex\": \"0000\",\n            \"name\": \"per_interface\",\n            \"value\": 0\n          },\n          \"interface_protocol\": 0,\n          \"interface_number\": 0,\n          \"interface_alternate_setting\": 0\n        },\n        \"hotplug\": \"usb\",\n        \"driver\": \"hub\",\n        \"drivers\": [\n          \"hub\"\n        ],\n        \"module_alias\": \"usb:v1D6Bp0003d0613dc09dsc00dp03ic09isc00ip00in00\"\n      },\n      {\n        \"index\": 28,\n        \"attached_to\": 17,\n        \"class_list\": [\n          \"usb\",\n          \"hub\"\n        ],\n        \"bus_type\": {\n          \"hex\": \"0086\",\n          \"name\": \"USB\",\n          \"value\": 134\n        },\n        \"slot\": {\n          \"bus\": 0,\n          \"number\": 0\n        },\n        \"base_class\": {\n          \"hex\": \"010a\",\n          \"name\": \"Hub\",\n          \"value\": 266\n        },\n        \"vendor\": {\n          \"hex\": \"1d6b\",\n          \"name\": \"Linux 6.13.3 ehci_hcd\",\n          \"value\": 7531\n        },\n        \"device\": {\n          \"hex\": \"0002\",\n          \"name\": \"EHCI Host Controller\",\n          \"value\": 2\n        },\n        \"revision\": {\n          \"hex\": \"0000\",\n          \"name\": \"6.13\",\n          \"value\": 0\n        },\n        \"serial\": \"0000:00:1a.0\",\n        \"model\": \"Linux 6.13.3 ehci_hcd EHCI Host Controller\",\n        \"sysfs_id\": \"/devices/pci0000:00/0000:00:1a.0/usb1/1-0:1.0\",\n        \"sysfs_bus_id\": \"1-0:1.0\",\n        \"resources\": [\n          {\n            \"type\": \"baud\",\n            \"speed\": 480000000,\n            \"bits\": 0,\n            \"stop_bits\": 0,\n            \"parity\": 0,\n            \"handshake\": 0\n          }\n        ],\n        \"detail\": {\n          \"device_class\": {\n            \"hex\": \"0009\",\n            \"name\": \"hub\",\n            \"value\": 9\n          },\n          \"device_subclass\": {\n            \"hex\": \"0000\",\n            \"name\": \"per_interface\",\n            \"value\": 0\n          },\n          \"device_protocol\": 0,\n          \"interface_class\": {\n            \"hex\": \"0009\",\n            \"name\": \"hub\",\n            \"value\": 9\n          },\n          \"interface_subclass\": {\n            \"hex\": \"0000\",\n            \"name\": \"per_interface\",\n            \"value\": 0\n          },\n          \"interface_protocol\": 0,\n          \"interface_number\": 0,\n          \"interface_alternate_setting\": 0\n        },\n        \"hotplug\": \"usb\",\n        \"driver\": \"hub\",\n        \"drivers\": [\n          \"hub\"\n        ],\n        \"module_alias\": \"usb:v1D6Bp0002d0613dc09dsc00dp00ic09isc00ip00in00\"\n      },\n      {\n        \"index\": 29,\n        \"attached_to\": 28,\n        \"class_list\": [\n          \"usb\",\n          \"hub\"\n        ],\n        \"bus_type\": {\n          \"hex\": \"0086\",\n          \"name\": \"USB\",\n          \"value\": 134\n        },\n        \"slot\": {\n          \"bus\": 0,\n          \"number\": 0\n        },\n        \"base_class\": {\n          \"hex\": \"010a\",\n          \"name\": \"Hub\",\n          \"value\": 266\n        },\n        \"vendor\": {\n          \"hex\": \"8087\",\n          \"value\": 32903\n        },\n        \"device\": {\n          \"hex\": \"8008\",\n          \"value\": 32776\n        },\n        \"revision\": {\n          \"hex\": \"0000\",\n          \"name\": \"0.04\",\n          \"value\": 0\n        },\n        \"model\": \"Hub\",\n        \"sysfs_id\": \"/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1:1.0\",\n        \"sysfs_bus_id\": \"1-1:1.0\",\n        \"resources\": [\n          {\n            \"type\": \"baud\",\n            \"speed\": 480000000,\n            \"bits\": 0,\n            \"stop_bits\": 0,\n            \"parity\": 0,\n            \"handshake\": 0\n          }\n        ],\n        \"detail\": {\n          \"device_class\": {\n            \"hex\": \"0009\",\n            \"name\": \"hub\",\n            \"value\": 9\n          },\n          \"device_subclass\": {\n            \"hex\": \"0000\",\n            \"name\": \"per_interface\",\n            \"value\": 0\n          },\n          \"device_protocol\": 1,\n          \"interface_class\": {\n            \"hex\": \"0009\",\n            \"name\": \"hub\",\n            \"value\": 9\n          },\n          \"interface_subclass\": {\n            \"hex\": \"0000\",\n            \"name\": \"per_interface\",\n            \"value\": 0\n          },\n          \"interface_protocol\": 0,\n          \"interface_number\": 0,\n          \"interface_alternate_setting\": 0\n        },\n        \"hotplug\": \"usb\",\n        \"driver\": \"hub\",\n        \"drivers\": [\n          \"hub\"\n        ],\n        \"module_alias\": \"usb:v8087p8008d0004dc09dsc00dp01ic09isc00ip00in00\"\n      },\n      {\n        \"index\": 31,\n        \"attached_to\": 19,\n        \"class_list\": [\n          \"usb\",\n          \"hub\"\n        ],\n        \"bus_type\": {\n          \"hex\": \"0086\",\n          \"name\": \"USB\",\n          \"value\": 134\n        },\n        \"slot\": {\n          \"bus\": 0,\n          \"number\": 0\n        },\n        \"base_class\": {\n          \"hex\": \"010a\",\n          \"name\": \"Hub\",\n          \"value\": 266\n        },\n        \"vendor\": {\n          \"hex\": \"1d6b\",\n          \"name\": \"Linux 6.13.3 ehci_hcd\",\n          \"value\": 7531\n        },\n        \"device\": {\n          \"hex\": \"0002\",\n          \"name\": \"EHCI Host Controller\",\n          \"value\": 2\n        },\n        \"revision\": {\n          \"hex\": \"0000\",\n          \"name\": \"6.13\",\n          \"value\": 0\n        },\n        \"serial\": \"0000:00:1d.0\",\n        \"model\": \"Linux 6.13.3 ehci_hcd EHCI Host Controller\",\n        \"sysfs_id\": \"/devices/pci0000:00/0000:00:1d.0/usb2/2-0:1.0\",\n        \"sysfs_bus_id\": \"2-0:1.0\",\n        \"resources\": [\n          {\n            \"type\": \"baud\",\n            \"speed\": 480000000,\n            \"bits\": 0,\n            \"stop_bits\": 0,\n            \"parity\": 0,\n            \"handshake\": 0\n          }\n        ],\n        \"detail\": {\n          \"device_class\": {\n            \"hex\": \"0009\",\n            \"name\": \"hub\",\n            \"value\": 9\n          },\n          \"device_subclass\": {\n            \"hex\": \"0000\",\n            \"name\": \"per_interface\",\n            \"value\": 0\n          },\n          \"device_protocol\": 0,\n          \"interface_class\": {\n            \"hex\": \"0009\",\n            \"name\": \"hub\",\n            \"value\": 9\n          },\n          \"interface_subclass\": {\n            \"hex\": \"0000\",\n            \"name\": \"per_interface\",\n            \"value\": 0\n          },\n          \"interface_protocol\": 0,\n          \"interface_number\": 0,\n          \"interface_alternate_setting\": 0\n        },\n        \"hotplug\": \"usb\",\n        \"driver\": \"hub\",\n        \"drivers\": [\n          \"hub\"\n        ],\n        \"module_alias\": \"usb:v1D6Bp0002d0613dc09dsc00dp00ic09isc00ip00in00\"\n      }\n    ],\n    \"keyboard\": [\n      {\n        \"index\": 26,\n        \"attached_to\": 25,\n        \"class_list\": [\n          \"keyboard\",\n          \"usb\"\n        ],\n        \"bus_type\": {\n          \"hex\": \"0086\",\n          \"name\": \"USB\",\n          \"value\": 134\n        },\n        \"slot\": {\n          \"bus\": 0,\n          \"number\": 0\n        },\n        \"base_class\": {\n          \"hex\": \"0108\",\n          \"name\": \"Keyboard\",\n          \"value\": 264\n        },\n        \"sub_class\": {\n          \"hex\": \"0000\",\n          \"name\": \"Keyboard\",\n          \"value\": 0\n        },\n        \"vendor\": {\n          \"hex\": \"04f2\",\n          \"name\": \"Chicony Electronics Co., Ltd.\",\n          \"value\": 1266\n        },\n        \"device\": {\n          \"hex\": \"0841\",\n          \"name\": \"HP USB Multimedia Keyboard\",\n          \"value\": 2113\n        },\n        \"revision\": {\n          \"hex\": \"0000\",\n          \"name\": \"1.00\",\n          \"value\": 0\n        },\n        \"model\": \"Chicony Electronics HP USB Multimedia Keyboard\",\n        \"sysfs_id\": \"/devices/pci0000:00/0000:00:14.0/usb3/3-1/3-1:1.0\",\n        \"sysfs_bus_id\": \"3-1:1.0\",\n        \"unix_device_name\": \"/dev/input/event1\",\n        \"unix_device_number\": {\n          \"type\": 99,\n          \"major\": 13,\n          \"minor\": 65,\n          \"range\": 1\n        },\n        \"unix_device_names\": [\n          \"/dev/input/by-id/usb-CHICONY_HP_USB_Multimedia_Keyboard-event-kbd\",\n          \"/dev/input/by-path/pci-0000:00:14.0-usb-0:1:1.0-event-kbd\",\n          \"/dev/input/by-path/pci-0000:00:14.0-usbv2-0:1:1.0-event-kbd\",\n          \"/dev/input/event1\"\n        ],\n        \"resources\": [\n          {\n            \"type\": \"baud\",\n            \"speed\": 1500000,\n            \"bits\": 0,\n            \"stop_bits\": 0,\n            \"parity\": 0,\n            \"handshake\": 0\n          }\n        ],\n        \"detail\": {\n          \"device_class\": {\n            \"hex\": \"0000\",\n            \"name\": \"per_interface\",\n            \"value\": 0\n          },\n          \"device_subclass\": {\n            \"hex\": \"0000\",\n            \"name\": \"per_interface\",\n            \"value\": 0\n          },\n          \"device_protocol\": 0,\n          \"interface_class\": {\n            \"hex\": \"0003\",\n            \"name\": \"hid\",\n            \"value\": 3\n          },\n          \"interface_subclass\": {\n            \"hex\": \"0001\",\n            \"name\": \"audio\",\n            \"value\": 1\n          },\n          \"interface_protocol\": 1,\n          \"interface_number\": 0,\n          \"interface_alternate_setting\": 0\n        },\n        \"hotplug\": \"usb\",\n        \"driver\": \"usbhid\",\n        \"driver_module\": \"usbhid\",\n        \"drivers\": [\n          \"usbhid\"\n        ],\n        \"driver_modules\": [\n          \"usbhid\"\n        ],\n        \"driver_info\": {\n          \"type\": \"keyboard\",\n          \"xkb_rules\": \"xfree86\",\n          \"xkb_model\": \"pc104\"\n        },\n        \"module_alias\": \"usb:v04F2p0841d0100dc00dsc00dp00ic03isc01ip01in00\"\n      },\n      {\n        \"index\": 30,\n        \"attached_to\": 25,\n        \"class_list\": [\n          \"keyboard\",\n          \"usb\"\n        ],\n        \"bus_type\": {\n          \"hex\": \"0086\",\n          \"name\": \"USB\",\n          \"value\": 134\n        },\n        \"slot\": {\n          \"bus\": 0,\n          \"number\": 0\n        },\n        \"base_class\": {\n          \"hex\": \"0108\",\n          \"name\": \"Keyboard\",\n          \"value\": 264\n        },\n        \"sub_class\": {\n          \"hex\": \"0000\",\n          \"name\": \"Keyboard\",\n          \"value\": 0\n        },\n        \"vendor\": {\n          \"hex\": \"04f2\",\n          \"name\": \"Chicony Electronics Co., Ltd.\",\n          \"value\": 1266\n        },\n        \"device\": {\n          \"hex\": \"0841\",\n          \"name\": \"HP USB Multimedia Keyboard\",\n          \"value\": 2113\n        },\n        \"revision\": {\n          \"hex\": \"0000\",\n          \"name\": \"1.00\",\n          \"value\": 0\n        },\n        \"model\": \"Chicony Electronics HP USB Multimedia Keyboard\",\n        \"sysfs_id\": \"/devices/pci0000:00/0000:00:14.0/usb3/3-1/3-1:1.1\",\n        \"sysfs_bus_id\": \"3-1:1.1\",\n        \"unix_device_name\": \"/dev/input/event3\",\n        \"unix_device_number\": {\n          \"type\": 99,\n          \"major\": 13,\n          \"minor\": 67,\n          \"range\": 1\n        },\n        \"unix_device_names\": [\n          \"/dev/input/by-id/usb-CHICONY_HP_USB_Multimedia_Keyboard-event-if01\",\n          \"/dev/input/by-path/pci-0000:00:14.0-usb-0:1:1.1-event\",\n          \"/dev/input/by-path/pci-0000:00:14.0-usbv2-0:1:1.1-event\",\n          \"/dev/input/event3\"\n        ],\n        \"resources\": [\n          {\n            \"type\": \"baud\",\n            \"speed\": 1500000,\n            \"bits\": 0,\n            \"stop_bits\": 0,\n            \"parity\": 0,\n            \"handshake\": 0\n          }\n        ],\n        \"detail\": {\n          \"device_class\": {\n            \"hex\": \"0000\",\n            \"name\": \"per_interface\",\n            \"value\": 0\n          },\n          \"device_subclass\": {\n            \"hex\": \"0000\",\n            \"name\": \"per_interface\",\n            \"value\": 0\n          },\n          \"device_protocol\": 0,\n          \"interface_class\": {\n            \"hex\": \"0003\",\n            \"name\": \"hid\",\n            \"value\": 3\n          },\n          \"interface_subclass\": {\n            \"hex\": \"0001\",\n            \"name\": \"audio\",\n            \"value\": 1\n          },\n          \"interface_protocol\": 1,\n          \"interface_number\": 1,\n          \"interface_alternate_setting\": 0\n        },\n        \"hotplug\": \"usb\",\n        \"driver\": \"usbhid\",\n        \"driver_module\": \"usbhid\",\n        \"drivers\": [\n          \"usbhid\"\n        ],\n        \"driver_modules\": [\n          \"usbhid\"\n        ],\n        \"driver_info\": {\n          \"type\": \"keyboard\",\n          \"xkb_rules\": \"xfree86\",\n          \"xkb_model\": \"pc104\"\n        },\n        \"module_alias\": \"usb:v04F2p0841d0100dc00dsc00dp00ic03isc01ip01in01\"\n      }\n    ],\n    \"memory\": [\n      {\n        \"index\": 7,\n        \"attached_to\": 0,\n        \"class_list\": [\n          \"memory\"\n        ],\n        \"base_class\": {\n          \"hex\": \"0101\",\n          \"name\": \"Internally Used Class\",\n          \"value\": 257\n        },\n        \"sub_class\": {\n          \"hex\": \"0002\",\n          \"name\": \"Main Memory\",\n          \"value\": 2\n        },\n        \"model\": \"Main Memory\",\n        \"resources\": [\n          {\n            \"type\": \"mem\",\n            \"base\": 0,\n            \"range\": 12354994176,\n            \"enabled\": true,\n            \"access\": \"read_write\",\n            \"prefetch\": \"unknown\"\n          },\n          {\n            \"type\": \"phys_mem\",\n            \"range\": 12884901888\n          }\n        ]\n      }\n    ],\n    \"network_controller\": [\n      {\n        \"index\": 13,\n        \"attached_to\": 0,\n        \"class_list\": [\n          \"network_controller\",\n          \"pci\"\n        ],\n        \"bus_type\": {\n          \"hex\": \"0004\",\n          \"name\": \"PCI\",\n          \"value\": 4\n        },\n        \"slot\": {\n          \"bus\": 0,\n          \"number\": 25\n        },\n        \"base_class\": {\n          \"hex\": \"0002\",\n          \"name\": \"Network controller\",\n          \"value\": 2\n        },\n        \"sub_class\": {\n          \"hex\": \"0000\",\n          \"name\": \"Ethernet controller\",\n          \"value\": 0\n        },\n        \"vendor\": {\n          \"hex\": \"8086\",\n          \"name\": \"Intel Corporation\",\n          \"value\": 32902\n        },\n        \"sub_vendor\": {\n          \"hex\": \"17aa\",\n          \"value\": 6058\n        },\n        \"device\": {\n          \"hex\": \"153a\",\n          \"value\": 5434\n        },\n        \"sub_device\": {\n          \"hex\": \"30a3\",\n          \"value\": 12451\n        },\n        \"revision\": {\n          \"hex\": \"0004\",\n          \"value\": 4\n        },\n        \"model\": \"Intel Ethernet controller\",\n        \"sysfs_id\": \"/devices/pci0000:00/0000:00:19.0\",\n        \"sysfs_bus_id\": \"0000:00:19.0\",\n        \"unix_device_name\": \"eno1\",\n        \"unix_device_names\": [\n          \"eno1\"\n        ],\n        \"resources\": [\n          {\n            \"type\": \"hwaddr\",\n            \"address\": 48\n          },\n          {\n            \"type\": \"io\",\n            \"base\": 61568,\n            \"range\": 32,\n            \"enabled\": true,\n            \"access\": \"read_write\"\n          },\n          {\n            \"type\": \"irq\",\n            \"base\": 33,\n            \"triggered\": 0,\n            \"enabled\": true\n          },\n          {\n            \"type\": \"mem\",\n            \"base\": 4157603840,\n            \"range\": 131072,\n            \"enabled\": true,\n            \"access\": \"read_write\",\n            \"prefetch\": \"no\"\n          },\n          {\n            \"type\": \"mem\",\n            \"base\": 4157853696,\n            \"range\": 4096,\n            \"enabled\": true,\n            \"access\": \"read_write\",\n            \"prefetch\": \"no\"\n          },\n          {\n            \"type\": \"phwaddr\",\n            \"address\": 48\n          }\n        ],\n        \"detail\": {\n          \"function\": 0,\n          \"command\": 1031,\n          \"header_type\": 0,\n          \"secondary_bus\": 0,\n          \"irq\": 33,\n          \"prog_if\": 0\n        },\n        \"driver\": \"e1000e\",\n        \"driver_module\": \"e1000e\",\n        \"drivers\": [\n          \"e1000e\"\n        ],\n        \"driver_modules\": [\n          \"e1000e\"\n        ],\n        \"module_alias\": \"pci:v00008086d0000153Asv000017AAsd000030A3bc02sc00i00\",\n        \"label\": \"Onboard LAN\"\n      }\n    ],\n    \"network_interface\": [\n      {\n        \"index\": 32,\n        \"attached_to\": 13,\n        \"class_list\": [\n          \"network_interface\"\n        ],\n        \"base_class\": {\n          \"hex\": \"0107\",\n          \"name\": \"Network Interface\",\n          \"value\": 263\n        },\n        \"sub_class\": {\n          \"hex\": \"0001\",\n          \"name\": \"Ethernet\",\n          \"value\": 1\n        },\n        \"model\": \"Ethernet network interface\",\n        \"sysfs_id\": \"/class/net/eno1\",\n        \"sysfs_device_link\": \"/devices/pci0000:00/0000:00:19.0\",\n        \"unix_device_name\": \"eno1\",\n        \"unix_device_names\": [\n          \"eno1\"\n        ],\n        \"resources\": [\n          {\n            \"type\": \"hwaddr\",\n            \"address\": 48\n          },\n          {\n            \"type\": \"phwaddr\",\n            \"address\": 48\n          }\n        ],\n        \"driver\": \"e1000e\",\n        \"driver_module\": \"e1000e\",\n        \"drivers\": [\n          \"e1000e\"\n        ],\n        \"driver_modules\": [\n          \"e1000e\"\n        ]\n      },\n      {\n        \"index\": 34,\n        \"attached_to\": 0,\n        \"class_list\": [\n          \"network_interface\"\n        ],\n        \"base_class\": {\n          \"hex\": \"0107\",\n          \"name\": \"Network Interface\",\n          \"value\": 263\n        },\n        \"sub_class\": {\n          \"hex\": \"0000\",\n          \"name\": \"Loopback\",\n          \"value\": 0\n        },\n        \"model\": \"Loopback network interface\",\n        \"sysfs_id\": \"/class/net/lo\",\n        \"unix_device_name\": \"lo\",\n        \"unix_device_names\": [\n          \"lo\"\n        ]\n      }\n    ],\n    \"pci\": [\n      {\n        \"index\": 11,\n        \"attached_to\": 0,\n        \"class_list\": [\n          \"pci\",\n          \"unknown\"\n        ],\n        \"bus_type\": {\n          \"hex\": \"0004\",\n          \"name\": \"PCI\",\n          \"value\": 4\n        },\n        \"slot\": {\n          \"bus\": 0,\n          \"number\": 22\n        },\n        \"base_class\": {\n          \"hex\": \"0007\",\n          \"name\": \"Communication controller\",\n          \"value\": 7\n        },\n        \"sub_class\": {\n          \"hex\": \"0080\",\n          \"name\": \"Communication controller\",\n          \"value\": 128\n        },\n        \"vendor\": {\n          \"hex\": \"8086\",\n          \"name\": \"Intel Corporation\",\n          \"value\": 32902\n        },\n        \"sub_vendor\": {\n          \"hex\": \"17aa\",\n          \"value\": 6058\n        },\n        \"device\": {\n          \"hex\": \"8c3a\",\n          \"value\": 35898\n        },\n        \"sub_device\": {\n          \"hex\": \"30a3\",\n          \"value\": 12451\n        },\n        \"revision\": {\n          \"hex\": \"0004\",\n          \"value\": 4\n        },\n        \"model\": \"Intel Communication controller\",\n        \"sysfs_id\": \"/devices/pci0000:00/0000:00:16.0\",\n        \"sysfs_bus_id\": \"0000:00:16.0\",\n        \"resources\": [\n          {\n            \"type\": \"irq\",\n            \"base\": 32,\n            \"triggered\": 0,\n            \"enabled\": true\n          },\n          {\n            \"type\": \"mem\",\n            \"base\": 4157865984,\n            \"range\": 16,\n            \"enabled\": true,\n            \"access\": \"read_write\",\n            \"prefetch\": \"no\"\n          }\n        ],\n        \"detail\": {\n          \"function\": 0,\n          \"command\": 1030,\n          \"header_type\": 0,\n          \"secondary_bus\": 0,\n          \"irq\": 32,\n          \"prog_if\": 0\n        },\n        \"driver\": \"mei_me\",\n        \"driver_module\": \"mei_me\",\n        \"drivers\": [\n          \"mei_me\"\n        ],\n        \"driver_modules\": [\n          \"mei_me\"\n        ],\n        \"module_alias\": \"pci:v00008086d00008C3Asv000017AAsd000030A3bc07sc80i00\"\n      },\n      {\n        \"index\": 14,\n        \"attached_to\": 0,\n        \"class_list\": [\n          \"pci\",\n          \"unknown\"\n        ],\n        \"bus_type\": {\n          \"hex\": \"0004\",\n          \"name\": \"PCI\",\n          \"value\": 4\n        },\n        \"slot\": {\n          \"bus\": 0,\n          \"number\": 31\n        },\n        \"base_class\": {\n          \"hex\": \"000c\",\n          \"name\": \"Serial bus controller\",\n          \"value\": 12\n        },\n        \"sub_class\": {\n          \"hex\": \"0005\",\n          \"name\": \"SMBus\",\n          \"value\": 5\n        },\n        \"vendor\": {\n          \"hex\": \"8086\",\n          \"name\": \"Intel Corporation\",\n          \"value\": 32902\n        },\n        \"sub_vendor\": {\n          \"hex\": \"17aa\",\n          \"value\": 6058\n        },\n        \"device\": {\n          \"hex\": \"8c22\",\n          \"value\": 35874\n        },\n        \"sub_device\": {\n          \"hex\": \"30a3\",\n          \"value\": 12451\n        },\n        \"revision\": {\n          \"hex\": \"0004\",\n          \"value\": 4\n        },\n        \"model\": \"Intel SMBus\",\n        \"sysfs_id\": \"/devices/pci0000:00/0000:00:1f.3\",\n        \"sysfs_bus_id\": \"0000:00:1f.3\",\n        \"resources\": [\n          {\n            \"type\": \"io\",\n            \"base\": 1408,\n            \"range\": 32,\n            \"enabled\": true,\n            \"access\": \"read_write\"\n          },\n          {\n            \"type\": \"irq\",\n            \"base\": 18,\n            \"triggered\": 0,\n            \"enabled\": true\n          },\n          {\n            \"type\": \"mem\",\n            \"base\": 4157837312,\n            \"range\": 256,\n            \"enabled\": true,\n            \"access\": \"read_write\",\n            \"prefetch\": \"no\"\n          }\n        ],\n        \"detail\": {\n          \"function\": 3,\n          \"command\": 3,\n          \"header_type\": 0,\n          \"secondary_bus\": 0,\n          \"irq\": 18,\n          \"prog_if\": 0\n        },\n        \"driver\": \"i801_smbus\",\n        \"driver_module\": \"i2c_i801\",\n        \"drivers\": [\n          \"i801_smbus\"\n        ],\n        \"driver_modules\": [\n          \"i2c_i801\"\n        ],\n        \"module_alias\": \"pci:v00008086d00008C22sv000017AAsd000030A3bc0Csc05i00\"\n      },\n      {\n        \"index\": 18,\n        \"attached_to\": 0,\n        \"class_list\": [\n          \"pci\",\n          \"unknown\"\n        ],\n        \"bus_type\": {\n          \"hex\": \"0004\",\n          \"name\": \"PCI\",\n          \"value\": 4\n        },\n        \"slot\": {\n          \"bus\": 0,\n          \"number\": 22\n        },\n        \"base_class\": {\n          \"hex\": \"0007\",\n          \"name\": \"Communication controller\",\n          \"value\": 7\n        },\n        \"sub_class\": {\n          \"hex\": \"0000\",\n          \"name\": \"Serial controller\",\n          \"value\": 0\n        },\n        \"pci_interface\": {\n          \"hex\": \"0002\",\n          \"name\": \"16550\",\n          \"value\": 2\n        },\n        \"vendor\": {\n          \"hex\": \"8086\",\n          \"name\": \"Intel Corporation\",\n          \"value\": 32902\n        },\n        \"sub_vendor\": {\n          \"hex\": \"17aa\",\n          \"value\": 6058\n        },\n        \"device\": {\n          \"hex\": \"8c3d\",\n          \"value\": 35901\n        },\n        \"sub_device\": {\n          \"hex\": \"30a3\",\n          \"value\": 12451\n        },\n        \"revision\": {\n          \"hex\": \"0004\",\n          \"value\": 4\n        },\n        \"model\": \"Intel Serial controller\",\n        \"sysfs_id\": \"/devices/pci0000:00/0000:00:16.3\",\n        \"sysfs_bus_id\": \"0000:00:16.3\",\n        \"resources\": [\n          {\n            \"type\": \"io\",\n            \"base\": 61664,\n            \"range\": 8,\n            \"enabled\": true,\n            \"access\": \"read_write\"\n          },\n          {\n            \"type\": \"irq\",\n            \"base\": 19,\n            \"triggered\": 0,\n            \"enabled\": true\n          },\n          {\n            \"type\": \"mem\",\n            \"base\": 4157857792,\n            \"range\": 4096,\n            \"enabled\": true,\n            \"access\": \"read_write\",\n            \"prefetch\": \"no\"\n          }\n        ],\n        \"detail\": {\n          \"function\": 3,\n          \"command\": 7,\n          \"header_type\": 0,\n          \"secondary_bus\": 0,\n          \"irq\": 19,\n          \"prog_if\": 2\n        },\n        \"driver\": \"serial\",\n        \"driver_module\": \"8250_pci\",\n        \"drivers\": [\n          \"serial\"\n        ],\n        \"driver_modules\": [\n          \"8250_pci\"\n        ],\n        \"module_alias\": \"pci:v00008086d00008C3Dsv000017AAsd000030A3bc07sc00i02\"\n      }\n    ],\n    \"sound\": [\n      {\n        \"index\": 12,\n        \"attached_to\": 0,\n        \"class_list\": [\n          \"sound\",\n          \"pci\"\n        ],\n        \"bus_type\": {\n          \"hex\": \"0004\",\n          \"name\": \"PCI\",\n          \"value\": 4\n        },\n        \"slot\": {\n          \"bus\": 0,\n          \"number\": 27\n        },\n        \"base_class\": {\n          \"hex\": \"0004\",\n          \"name\": \"Multimedia controller\",\n          \"value\": 4\n        },\n        \"sub_class\": {\n          \"hex\": \"0003\",\n          \"value\": 3\n        },\n        \"vendor\": {\n          \"hex\": \"8086\",\n          \"name\": \"Intel Corporation\",\n          \"value\": 32902\n        },\n        \"sub_vendor\": {\n          \"hex\": \"17aa\",\n          \"value\": 6058\n        },\n        \"device\": {\n          \"hex\": \"8c20\",\n          \"value\": 35872\n        },\n        \"sub_device\": {\n          \"hex\": \"30a3\",\n          \"value\": 12451\n        },\n        \"revision\": {\n          \"hex\": \"0004\",\n          \"value\": 4\n        },\n        \"model\": \"Intel Multimedia controller\",\n        \"sysfs_id\": \"/devices/pci0000:00/0000:00:1b.0\",\n        \"sysfs_bus_id\": \"0000:00:1b.0\",\n        \"resources\": [\n          {\n            \"type\": \"irq\",\n            \"base\": 35,\n            \"triggered\": 0,\n            \"enabled\": true\n          },\n          {\n            \"type\": \"mem\",\n            \"base\": 4157800448,\n            \"range\": 16384,\n            \"enabled\": true,\n            \"access\": \"read_write\",\n            \"prefetch\": \"no\"\n          }\n        ],\n        \"detail\": {\n          \"function\": 0,\n          \"command\": 1030,\n          \"header_type\": 0,\n          \"secondary_bus\": 0,\n          \"irq\": 35,\n          \"prog_if\": 0\n        },\n        \"driver\": \"snd_hda_intel\",\n        \"driver_module\": \"snd_hda_intel\",\n        \"drivers\": [\n          \"snd_hda_intel\"\n        ],\n        \"driver_modules\": [\n          \"snd_hda_intel\"\n        ],\n        \"module_alias\": \"pci:v00008086d00008C20sv000017AAsd000030A3bc04sc03i00\"\n      },\n      {\n        \"index\": 16,\n        \"attached_to\": 0,\n        \"class_list\": [\n          \"sound\",\n          \"pci\"\n        ],\n        \"bus_type\": {\n          \"hex\": \"0004\",\n          \"name\": \"PCI\",\n          \"value\": 4\n        },\n        \"slot\": {\n          \"bus\": 0,\n          \"number\": 3\n        },\n        \"base_class\": {\n          \"hex\": \"0004\",\n          \"name\": \"Multimedia controller\",\n          \"value\": 4\n        },\n        \"sub_class\": {\n          \"hex\": \"0003\",\n          \"value\": 3\n        },\n        \"vendor\": {\n          \"hex\": \"8086\",\n          \"name\": \"Intel Corporation\",\n          \"value\": 32902\n        },\n        \"sub_vendor\": {\n          \"hex\": \"17aa\",\n          \"value\": 6058\n        },\n        \"device\": {\n          \"hex\": \"0c0c\",\n          \"value\": 3084\n        },\n        \"sub_device\": {\n          \"hex\": \"30a3\",\n          \"value\": 12451\n        },\n        \"revision\": {\n          \"hex\": \"0006\",\n          \"value\": 6\n        },\n        \"model\": \"Intel Multimedia controller\",\n        \"sysfs_id\": \"/devices/pci0000:00/0000:00:03.0\",\n        \"sysfs_bus_id\": \"0000:00:03.0\",\n        \"resources\": [\n          {\n            \"type\": \"irq\",\n            \"base\": 34,\n            \"triggered\": 0,\n            \"enabled\": true\n          },\n          {\n            \"type\": \"mem\",\n            \"base\": 4157816832,\n            \"range\": 16384,\n            \"enabled\": true,\n            \"access\": \"read_write\",\n            \"prefetch\": \"no\"\n          }\n        ],\n        \"detail\": {\n          \"function\": 0,\n          \"command\": 1030,\n          \"header_type\": 0,\n          \"secondary_bus\": 0,\n          \"irq\": 34,\n          \"prog_if\": 0\n        },\n        \"driver\": \"snd_hda_intel\",\n        \"driver_module\": \"snd_hda_intel\",\n        \"drivers\": [\n          \"snd_hda_intel\"\n        ],\n        \"driver_modules\": [\n          \"snd_hda_intel\"\n        ],\n        \"module_alias\": \"pci:v00008086d00000C0Csv000017AAsd000030A3bc04sc03i00\"\n      }\n    ],\n    \"storage_controller\": [\n      {\n        \"index\": 8,\n        \"attached_to\": 0,\n        \"class_list\": [\n          \"storage_controller\",\n          \"pci\"\n        ],\n        \"bus_type\": {\n          \"hex\": \"0004\",\n          \"name\": \"PCI\",\n          \"value\": 4\n        },\n        \"slot\": {\n          \"bus\": 0,\n          \"number\": 31\n        },\n        \"base_class\": {\n          \"hex\": \"0001\",\n          \"name\": \"Mass storage controller\",\n          \"value\": 1\n        },\n        \"sub_class\": {\n          \"hex\": \"0006\",\n          \"value\": 6\n        },\n        \"pci_interface\": {\n          \"hex\": \"0001\",\n          \"value\": 1\n        },\n        \"vendor\": {\n          \"hex\": \"8086\",\n          \"name\": \"Intel Corporation\",\n          \"value\": 32902\n        },\n        \"sub_vendor\": {\n          \"hex\": \"17aa\",\n          \"value\": 6058\n        },\n        \"device\": {\n          \"hex\": \"8c02\",\n          \"value\": 35842\n        },\n        \"sub_device\": {\n          \"hex\": \"30a3\",\n          \"value\": 12451\n        },\n        \"revision\": {\n          \"hex\": \"0004\",\n          \"value\": 4\n        },\n        \"model\": \"Intel Mass storage controller\",\n        \"sysfs_id\": \"/devices/pci0000:00/0000:00:1f.2\",\n        \"sysfs_bus_id\": \"0000:00:1f.2\",\n        \"resources\": [\n          {\n            \"type\": \"io\",\n            \"base\": 61536,\n            \"range\": 32,\n            \"enabled\": true,\n            \"access\": \"read_write\"\n          },\n          {\n            \"type\": \"io\",\n            \"base\": 61600,\n            \"range\": 4,\n            \"enabled\": true,\n            \"access\": \"read_write\"\n          },\n          {\n            \"type\": \"io\",\n            \"base\": 61616,\n            \"range\": 8,\n            \"enabled\": true,\n            \"access\": \"read_write\"\n          },\n          {\n            \"type\": \"io\",\n            \"base\": 61632,\n            \"range\": 4,\n            \"enabled\": true,\n            \"access\": \"read_write\"\n          },\n          {\n            \"type\": \"io\",\n            \"base\": 61648,\n            \"range\": 8,\n            \"enabled\": true,\n            \"access\": \"read_write\"\n          },\n          {\n            \"type\": \"irq\",\n            \"base\": 31,\n            \"triggered\": 0,\n            \"enabled\": true\n          },\n          {\n            \"type\": \"mem\",\n            \"base\": 4157841408,\n            \"range\": 2048,\n            \"enabled\": true,\n            \"access\": \"read_write\",\n            \"prefetch\": \"no\"\n          }\n        ],\n        \"detail\": {\n          \"function\": 2,\n          \"command\": 1031,\n          \"header_type\": 0,\n          \"secondary_bus\": 0,\n          \"irq\": 31,\n          \"prog_if\": 1\n        },\n        \"driver\": \"ahci\",\n        \"driver_module\": \"ahci\",\n        \"drivers\": [\n          \"ahci\"\n        ],\n        \"driver_modules\": [\n          \"ahci\"\n        ],\n        \"module_alias\": \"pci:v00008086d00008C02sv000017AAsd000030A3bc01sc06i01\"\n      }\n    ],\n    \"system\": {\n      \"form_factor\": \"desktop\"\n    },\n    \"unknown\": [\n      {\n        \"index\": 22,\n        \"attached_to\": 0,\n        \"class_list\": [\n          \"unknown\"\n        ],\n        \"base_class\": {\n          \"hex\": \"0007\",\n          \"name\": \"Communication controller\",\n          \"value\": 7\n        },\n        \"sub_class\": {\n          \"hex\": \"0000\",\n          \"name\": \"Serial controller\",\n          \"value\": 0\n        },\n        \"pci_interface\": {\n          \"hex\": \"0002\",\n          \"name\": \"16550\",\n          \"value\": 2\n        },\n        \"device\": {\n          \"hex\": \"0000\",\n          \"name\": \"16550A\",\n          \"value\": 0\n        },\n        \"model\": \"16550A\",\n        \"unix_device_name\": \"/dev/ttyS0\",\n        \"unix_device_names\": [\n          \"/dev/ttyS0\"\n        ],\n        \"resources\": [\n          {\n            \"type\": \"io\",\n            \"base\": 61664,\n            \"range\": 0,\n            \"enabled\": true,\n            \"access\": \"read_write\"\n          },\n          {\n            \"type\": \"irq\",\n            \"base\": 19,\n            \"triggered\": 0,\n            \"enabled\": true\n          }\n        ]\n      }\n    ],\n    \"usb_controller\": [\n      {\n        \"index\": 17,\n        \"attached_to\": 0,\n        \"class_list\": [\n          \"usb_controller\",\n          \"pci\"\n        ],\n        \"bus_type\": {\n          \"hex\": \"0004\",\n          \"name\": \"PCI\",\n          \"value\": 4\n        },\n        \"slot\": {\n          \"bus\": 0,\n          \"number\": 26\n        },\n        \"base_class\": {\n          \"hex\": \"000c\",\n          \"name\": \"Serial bus controller\",\n          \"value\": 12\n        },\n        \"sub_class\": {\n          \"hex\": \"0003\",\n          \"name\": \"USB Controller\",\n          \"value\": 3\n        },\n        \"pci_interface\": {\n          \"hex\": \"0020\",\n          \"name\": \"EHCI\",\n          \"value\": 32\n        },\n        \"vendor\": {\n          \"hex\": \"8086\",\n          \"name\": \"Intel Corporation\",\n          \"value\": 32902\n        },\n        \"sub_vendor\": {\n          \"hex\": \"17aa\",\n          \"value\": 6058\n        },\n        \"device\": {\n          \"hex\": \"8c2d\",\n          \"value\": 35885\n        },\n        \"sub_device\": {\n          \"hex\": \"30a3\",\n          \"value\": 12451\n        },\n        \"revision\": {\n          \"hex\": \"0004\",\n          \"value\": 4\n        },\n        \"model\": \"Intel USB Controller\",\n        \"sysfs_id\": \"/devices/pci0000:00/0000:00:1a.0\",\n        \"sysfs_bus_id\": \"0000:00:1a.0\",\n        \"resources\": [\n          {\n            \"type\": \"irq\",\n            \"base\": 17,\n            \"triggered\": 0,\n            \"enabled\": true\n          },\n          {\n            \"type\": \"mem\",\n            \"base\": 4157849600,\n            \"range\": 1024,\n            \"enabled\": true,\n            \"access\": \"read_write\",\n            \"prefetch\": \"no\"\n          }\n        ],\n        \"detail\": {\n          \"function\": 0,\n          \"command\": 6,\n          \"header_type\": 0,\n          \"secondary_bus\": 0,\n          \"irq\": 17,\n          \"prog_if\": 32\n        },\n        \"driver\": \"ehci-pci\",\n        \"driver_module\": \"ehci_pci\",\n        \"drivers\": [\n          \"ehci-pci\"\n        ],\n        \"driver_modules\": [\n          \"ehci_pci\"\n        ],\n        \"driver_info\": {\n          \"type\": \"module\",\n          \"db_entry_0\": [\n            \"ehci-hcd\"\n          ],\n          \"active\": true,\n          \"modprobe\": true,\n          \"names\": [\n            \"ehci-hcd\"\n          ],\n          \"module_args\": [\n            \"\"\n          ],\n          \"conf\": \"\"\n        },\n        \"module_alias\": \"pci:v00008086d00008C2Dsv000017AAsd000030A3bc0Csc03i20\"\n      },\n      {\n        \"index\": 19,\n        \"attached_to\": 0,\n        \"class_list\": [\n          \"usb_controller\",\n          \"pci\"\n        ],\n        \"bus_type\": {\n          \"hex\": \"0004\",\n          \"name\": \"PCI\",\n          \"value\": 4\n        },\n        \"slot\": {\n          \"bus\": 0,\n          \"number\": 29\n        },\n        \"base_class\": {\n          \"hex\": \"000c\",\n          \"name\": \"Serial bus controller\",\n          \"value\": 12\n        },\n        \"sub_class\": {\n          \"hex\": \"0003\",\n          \"name\": \"USB Controller\",\n          \"value\": 3\n        },\n        \"pci_interface\": {\n          \"hex\": \"0020\",\n          \"name\": \"EHCI\",\n          \"value\": 32\n        },\n        \"vendor\": {\n          \"hex\": \"8086\",\n          \"name\": \"Intel Corporation\",\n          \"value\": 32902\n        },\n        \"sub_vendor\": {\n          \"hex\": \"17aa\",\n          \"value\": 6058\n        },\n        \"device\": {\n          \"hex\": \"8c26\",\n          \"value\": 35878\n        },\n        \"sub_device\": {\n          \"hex\": \"30a3\",\n          \"value\": 12451\n        },\n        \"revision\": {\n          \"hex\": \"0004\",\n          \"value\": 4\n        },\n        \"model\": \"Intel USB Controller\",\n        \"sysfs_id\": \"/devices/pci0000:00/0000:00:1d.0\",\n        \"sysfs_bus_id\": \"0000:00:1d.0\",\n        \"resources\": [\n          {\n            \"type\": \"irq\",\n            \"base\": 23,\n            \"triggered\": 0,\n            \"enabled\": true\n          },\n          {\n            \"type\": \"mem\",\n            \"base\": 4157845504,\n            \"range\": 1024,\n            \"enabled\": true,\n            \"access\": \"read_write\",\n            \"prefetch\": \"no\"\n          }\n        ],\n        \"detail\": {\n          \"function\": 0,\n          \"command\": 6,\n          \"header_type\": 0,\n          \"secondary_bus\": 0,\n          \"irq\": 23,\n          \"prog_if\": 32\n        },\n        \"driver\": \"ehci-pci\",\n        \"driver_module\": \"ehci_pci\",\n        \"drivers\": [\n          \"ehci-pci\"\n        ],\n        \"driver_modules\": [\n          \"ehci_pci\"\n        ],\n        \"driver_info\": {\n          \"type\": \"module\",\n          \"db_entry_0\": [\n            \"ehci-hcd\"\n          ],\n          \"active\": true,\n          \"modprobe\": true,\n          \"names\": [\n            \"ehci-hcd\"\n          ],\n          \"module_args\": [\n            \"\"\n          ],\n          \"conf\": \"\"\n        },\n        \"module_alias\": \"pci:v00008086d00008C26sv000017AAsd000030A3bc0Csc03i20\"\n      },\n      {\n        \"index\": 21,\n        \"attached_to\": 0,\n        \"class_list\": [\n          \"usb_controller\",\n          \"pci\"\n        ],\n        \"bus_type\": {\n          \"hex\": \"0004\",\n          \"name\": \"PCI\",\n          \"value\": 4\n        },\n        \"slot\": {\n          \"bus\": 0,\n          \"number\": 20\n        },\n        \"base_class\": {\n          \"hex\": \"000c\",\n          \"name\": \"Serial bus controller\",\n          \"value\": 12\n        },\n        \"sub_class\": {\n          \"hex\": \"0003\",\n          \"name\": \"USB Controller\",\n          \"value\": 3\n        },\n        \"pci_interface\": {\n          \"hex\": \"0030\",\n          \"value\": 48\n        },\n        \"vendor\": {\n          \"hex\": \"8086\",\n          \"name\": \"Intel Corporation\",\n          \"value\": 32902\n        },\n        \"sub_vendor\": {\n          \"hex\": \"17aa\",\n          \"value\": 6058\n        },\n        \"device\": {\n          \"hex\": \"8c31\",\n          \"value\": 35889\n        },\n        \"sub_device\": {\n          \"hex\": \"30a3\",\n          \"value\": 12451\n        },\n        \"revision\": {\n          \"hex\": \"0004\",\n          \"value\": 4\n        },\n        \"model\": \"Intel USB Controller\",\n        \"sysfs_id\": \"/devices/pci0000:00/0000:00:14.0\",\n        \"sysfs_bus_id\": \"0000:00:14.0\",\n        \"resources\": [\n          {\n            \"type\": \"irq\",\n            \"base\": 25,\n            \"triggered\": 0,\n            \"enabled\": true\n          },\n          {\n            \"type\": \"mem\",\n            \"base\": 4157734912,\n            \"range\": 65536,\n            \"enabled\": true,\n            \"access\": \"read_write\",\n            \"prefetch\": \"no\"\n          }\n        ],\n        \"detail\": {\n          \"function\": 0,\n          \"command\": 1030,\n          \"header_type\": 0,\n          \"secondary_bus\": 0,\n          \"irq\": 25,\n          \"prog_if\": 48\n        },\n        \"driver\": \"xhci_hcd\",\n        \"driver_module\": \"xhci_pci\",\n        \"drivers\": [\n          \"xhci_hcd\"\n        ],\n        \"driver_modules\": [\n          \"xhci_pci\"\n        ],\n        \"module_alias\": \"pci:v00008086d00008C31sv000017AAsd000030A3bc0Csc03i30\"\n      }\n    ]\n  },\n  \"smbios\": {\n    \"bios\": {\n      \"handle\": 0,\n      \"vendor\": \"LENOVO\",\n      \"version\": \"FBKTD8AUS\",\n      \"date\": \"09/17/2019\",\n      \"features\": [\n        \"PCI supported\",\n        \"BIOS flashable\",\n        \"BIOS shadowing allowed\",\n        \"CD boot supported\",\n        \"Selectable boot supported\",\n        \"BIOS ROM socketed\",\n        \"EDD spec supported\",\n        \"1.2MB Floppy supported\",\n        \"720kB Floppy supported\",\n        \"2.88MB Floppy supported\",\n        \"Print Screen supported\",\n        \"8042 Keyboard Services supported\",\n        \"Serial Services supported\",\n        \"Printer Services supported\",\n        \"ACPI supported\",\n        \"USB Legacy supported\",\n        \"BIOS Boot Spec supported\"\n      ],\n      \"start_address\": \"0xf0000\",\n      \"rom_size\": 6815744\n    },\n    \"board\": {\n      \"handle\": 2,\n      \"manufacturer\": \"LENOVO\",\n      \"product\": \"SHARKBAY\",\n      \"version\": \"0B98401 PRO\",\n      \"board_type\": {\n        \"hex\": \"000a\",\n        \"name\": \"Motherboard\",\n        \"value\": 10\n      },\n      \"features\": [\n        \"Hosting Board\",\n        \"Replaceable\"\n      ],\n      \"location\": \"To be filled by O.E.M.\",\n      \"chassis\": 3\n    },\n    \"cache\": [\n      {\n        \"handle\": 62,\n        \"socket\": \"CPU Internal L2\",\n        \"size_max\": 512,\n        \"size_current\": 512,\n        \"speed\": 0,\n        \"mode\": {\n          \"hex\": \"0001\",\n          \"name\": \"Write Back\",\n          \"value\": 1\n        },\n        \"enabled\": true,\n        \"location\": {\n          \"hex\": \"0000\",\n          \"name\": \"Internal\",\n          \"value\": 0\n        },\n        \"socketed\": false,\n        \"level\": 1,\n        \"ecc\": {\n          \"hex\": \"0005\",\n          \"name\": \"Single-bit\",\n          \"value\": 5\n        },\n        \"cache_type\": {\n          \"hex\": \"0005\",\n          \"name\": \"Unified\",\n          \"value\": 5\n        },\n        \"associativity\": {\n          \"hex\": \"0007\",\n          \"name\": \"8-way Set-Associative\",\n          \"value\": 7\n        },\n        \"sram_type_current\": [\n          \"Unknown\"\n        ],\n        \"sram_type_supported\": [\n          \"Unknown\"\n        ]\n      },\n      {\n        \"handle\": 63,\n        \"socket\": \"CPU Internal L1\",\n        \"size_max\": 128,\n        \"size_current\": 128,\n        \"speed\": 0,\n        \"mode\": {\n          \"hex\": \"0001\",\n          \"name\": \"Write Back\",\n          \"value\": 1\n        },\n        \"enabled\": true,\n        \"location\": {\n          \"hex\": \"0000\",\n          \"name\": \"Internal\",\n          \"value\": 0\n        },\n        \"socketed\": false,\n        \"level\": 0,\n        \"ecc\": {\n          \"hex\": \"0005\",\n          \"name\": \"Single-bit\",\n          \"value\": 5\n        },\n        \"cache_type\": {\n          \"hex\": \"0001\",\n          \"name\": \"Other\",\n          \"value\": 1\n        },\n        \"associativity\": {\n          \"hex\": \"0007\",\n          \"name\": \"8-way Set-Associative\",\n          \"value\": 7\n        },\n        \"sram_type_current\": [\n          \"Unknown\"\n        ],\n        \"sram_type_supported\": [\n          \"Unknown\"\n        ]\n      },\n      {\n        \"handle\": 64,\n        \"socket\": \"CPU Internal L3\",\n        \"size_max\": 4096,\n        \"size_current\": 4096,\n        \"speed\": 0,\n        \"mode\": {\n          \"hex\": \"0001\",\n          \"name\": \"Write Back\",\n          \"value\": 1\n        },\n        \"enabled\": true,\n        \"location\": {\n          \"hex\": \"0000\",\n          \"name\": \"Internal\",\n          \"value\": 0\n        },\n        \"socketed\": false,\n        \"level\": 2,\n        \"ecc\": {\n          \"hex\": \"0005\",\n          \"name\": \"Single-bit\",\n          \"value\": 5\n        },\n        \"cache_type\": {\n          \"hex\": \"0005\",\n          \"name\": \"Unified\",\n          \"value\": 5\n        },\n        \"associativity\": {\n          \"hex\": \"0008\",\n          \"name\": \"16-way Set-Associative\",\n          \"value\": 8\n        },\n        \"sram_type_current\": [\n          \"Unknown\"\n        ],\n        \"sram_type_supported\": [\n          \"Unknown\"\n        ]\n      }\n    ],\n    \"chassis\": [\n      {\n        \"handle\": 3,\n        \"manufacturer\": \"To Be Filled By O.E.M.\",\n        \"version\": \"To Be Filled By O.E.M.\",\n        \"chassis_type\": {\n          \"hex\": \"0003\",\n          \"name\": \"Desktop\",\n          \"value\": 3\n        },\n        \"lock_present\": false,\n        \"bootup_state\": {\n          \"hex\": \"0003\",\n          \"name\": \"Safe\",\n          \"value\": 3\n        },\n        \"power_state\": {\n          \"hex\": \"0003\",\n          \"name\": \"Safe\",\n          \"value\": 3\n        },\n        \"thermal_state\": {\n          \"hex\": \"0003\",\n          \"name\": \"Safe\",\n          \"value\": 3\n        },\n        \"security_state\": {\n          \"hex\": \"0003\",\n          \"name\": \"None\",\n          \"value\": 3\n        },\n        \"oem\": \"0x0\"\n      }\n    ],\n    \"config\": {\n      \"handle\": 34,\n      \"options\": [\n        \"scre++\"\n      ]\n    },\n    \"group_associations\": [\n      {\n        \"handle\": 35,\n        \"power\": {\n          \"hex\": \"0000\",\n          \"name\": \"Disabled\",\n          \"value\": 0\n        },\n        \"keyboard\": {\n          \"hex\": \"0001\",\n          \"name\": \"Enabled\",\n          \"value\": 1\n        },\n        \"admin\": {\n          \"hex\": \"0000\",\n          \"name\": \"Disabled\",\n          \"value\": 0\n        },\n        \"reset\": {\n          \"hex\": \"0002\",\n          \"name\": \"Not Implemented\",\n          \"value\": 2\n        }\n      }\n    ],\n    \"language\": [\n      {\n        \"handle\": 89,\n        \"languages\": [\n          \"en|US|iso8859-1\",\n          \"fr|FR|iso8859-1\",\n          \"zh|CN|unicode\"\n        ]\n      }\n    ],\n    \"memory_array\": [\n      {\n        \"handle\": 65,\n        \"location\": {\n          \"hex\": \"0003\",\n          \"name\": \"Motherboard\",\n          \"value\": 3\n        },\n        \"usage\": {\n          \"hex\": \"0003\",\n          \"name\": \"System memory\",\n          \"value\": 3\n        },\n        \"ecc\": {\n          \"hex\": \"0003\",\n          \"name\": \"None\",\n          \"value\": 3\n        },\n        \"max_size\": \"0x1000000\",\n        \"error_handle\": 65534,\n        \"slots\": 2\n      }\n    ],\n    \"memory_array_mapped_address\": [\n      {\n        \"handle\": 71,\n        \"array_handle\": 65,\n        \"start_address\": \"0x0\",\n        \"end_address\": \"0x300000000\",\n        \"part_width\": 2\n      }\n    ],\n    \"memory_device\": [\n      {\n        \"handle\": 66,\n        \"location\": \"ChannelA-DIMM0\",\n        \"bank_location\": \"BANK 0\",\n        \"manufacturer\": \"0420\",\n        \"part_number\": \"F3-1600C9-8GRSL\",\n        \"array_handle\": 65,\n        \"error_handle\": 65534,\n        \"width\": 64,\n        \"ecc_bits\": 0,\n        \"size\": 8388608,\n        \"form_factor\": {\n          \"hex\": \"000d\",\n          \"name\": \"SODIMM\",\n          \"value\": 13\n        },\n        \"set\": 0,\n        \"memory_type\": {\n          \"hex\": \"0018\",\n          \"name\": \"Other\",\n          \"value\": 24\n        },\n        \"memory_type_details\": [\n          \"Synchronous\"\n        ],\n        \"speed\": 1600\n      },\n      {\n        \"handle\": 69,\n        \"location\": \"ChannelB-DIMM0\",\n        \"bank_location\": \"BANK 2\",\n        \"manufacturer\": \"Samsung\",\n        \"part_number\": \"M471B5173QH0-YK0\",\n        \"array_handle\": 65,\n        \"error_handle\": 65534,\n        \"width\": 64,\n        \"ecc_bits\": 0,\n        \"size\": 4194304,\n        \"form_factor\": {\n          \"hex\": \"000d\",\n          \"name\": \"SODIMM\",\n          \"value\": 13\n        },\n        \"set\": 0,\n        \"memory_type\": {\n          \"hex\": \"0018\",\n          \"name\": \"Other\",\n          \"value\": 24\n        },\n        \"memory_type_details\": [\n          \"Synchronous\"\n        ],\n        \"speed\": 1600\n      }\n    ],\n    \"memory_device_mapped_address\": [\n      {\n        \"handle\": 68,\n        \"memory_device_handle\": 66,\n        \"array_map_handle\": 71,\n        \"start_address\": \"0x0\",\n        \"end_address\": \"0x200000000\",\n        \"row_position\": 255,\n        \"interleave_position\": 1,\n        \"interleave_depth\": 1\n      },\n      {\n        \"handle\": 70,\n        \"memory_device_handle\": 69,\n        \"array_map_handle\": 71,\n        \"start_address\": \"0x200000000\",\n        \"end_address\": \"0x300000000\",\n        \"row_position\": 255,\n        \"interleave_position\": 2,\n        \"interleave_depth\": 1\n      }\n    ],\n    \"onboard\": [\n      {\n        \"handle\": 32,\n        \"devices\": [\n          {\n            \"name\": \"Onboard Video\",\n            \"type\": {\n              \"hex\": \"0003\",\n              \"name\": \"Video\",\n              \"value\": 3\n            },\n            \"enabled\": true\n          },\n          {\n            \"name\": \"Onboard LAN\",\n            \"type\": {\n              \"hex\": \"0005\",\n              \"name\": \"Ethernet\",\n              \"value\": 5\n            },\n            \"enabled\": true\n          },\n          {\n            \"name\": \"Onboard Audio\",\n            \"type\": {\n              \"hex\": \"0007\",\n              \"name\": \"Sound\",\n              \"value\": 7\n            },\n            \"enabled\": true\n          },\n          {\n            \"name\": \"Sata Controller\",\n            \"type\": {\n              \"hex\": \"0009\",\n              \"name\": \"Other\",\n              \"value\": 9\n            },\n            \"enabled\": true\n          }\n        ]\n      },\n      {\n        \"handle\": 84,\n        \"devices\": [\n          {\n            \"name\": \"IBM Embedded Security Hardware Type 3\",\n            \"type\": {\n              \"hex\": \"0001\",\n              \"name\": \"Other\",\n              \"value\": 1\n            },\n            \"enabled\": false\n          }\n        ]\n      }\n    ],\n    \"port_connector\": [\n      {\n        \"handle\": 4,\n        \"port_type\": {\n          \"hex\": \"000e\",\n          \"name\": \"Mouse Port\",\n          \"value\": 14\n        },\n        \"internal_reference_designator\": \"J1A1\",\n        \"external_connector_type\": {\n          \"hex\": \"000f\",\n          \"name\": \"PS/2\",\n          \"value\": 15\n        },\n        \"external_reference_designator\": \"PS2Mouse\"\n      },\n      {\n        \"handle\": 5,\n        \"port_type\": {\n          \"hex\": \"000d\",\n          \"name\": \"Keyboard Port\",\n          \"value\": 13\n        },\n        \"internal_reference_designator\": \"J1A1\",\n        \"external_connector_type\": {\n          \"hex\": \"000f\",\n          \"name\": \"PS/2\",\n          \"value\": 15\n        },\n        \"external_reference_designator\": \"Keyboard\"\n      },\n      {\n        \"handle\": 6,\n        \"port_type\": {\n          \"hex\": \"00ff\",\n          \"name\": \"Other\",\n          \"value\": 255\n        },\n        \"internal_reference_designator\": \"J2A1\",\n        \"external_connector_type\": {\n          \"hex\": \"001d\",\n          \"name\": \"Mini-Centronics Type-14\",\n          \"value\": 29\n        },\n        \"external_reference_designator\": \"TV Out\"\n      },\n      {\n        \"handle\": 7,\n        \"port_type\": {\n          \"hex\": \"0009\",\n          \"name\": \"Serial Port 16550A Compatible\",\n          \"value\": 9\n        },\n        \"internal_reference_designator\": \"J2A2A\",\n        \"external_connector_type\": {\n          \"hex\": \"0008\",\n          \"name\": \"DB-9 pin male\",\n          \"value\": 8\n        },\n        \"external_reference_designator\": \"COM A\"\n      },\n      {\n        \"handle\": 8,\n        \"port_type\": {\n          \"hex\": \"001c\",\n          \"name\": \"Video Port\",\n          \"value\": 28\n        },\n        \"internal_reference_designator\": \"J2A2B\",\n        \"external_connector_type\": {\n          \"hex\": \"0007\",\n          \"name\": \"DB-15 pin female\",\n          \"value\": 7\n        },\n        \"external_reference_designator\": \"Video\"\n      },\n      {\n        \"handle\": 9,\n        \"port_type\": {\n          \"hex\": \"0010\",\n          \"name\": \"USB\",\n          \"value\": 16\n        },\n        \"internal_reference_designator\": \"J3A1\",\n        \"external_connector_type\": {\n          \"hex\": \"0012\",\n          \"name\": \"Access Bus [USB]\",\n          \"value\": 18\n        },\n        \"external_reference_designator\": \"USB1\"\n      },\n      {\n        \"handle\": 10,\n        \"port_type\": {\n          \"hex\": \"0010\",\n          \"name\": \"USB\",\n          \"value\": 16\n        },\n        \"internal_reference_designator\": \"J3A1\",\n        \"external_connector_type\": {\n          \"hex\": \"0012\",\n          \"name\": \"Access Bus [USB]\",\n          \"value\": 18\n        },\n        \"external_reference_designator\": \"USB2\"\n      },\n      {\n        \"handle\": 11,\n        \"port_type\": {\n          \"hex\": \"0010\",\n          \"name\": \"USB\",\n          \"value\": 16\n        },\n        \"internal_reference_designator\": \"J3A1\",\n        \"external_connector_type\": {\n          \"hex\": \"0012\",\n          \"name\": \"Access Bus [USB]\",\n          \"value\": 18\n        },\n        \"external_reference_designator\": \"USB3\"\n      },\n      {\n        \"handle\": 12,\n        \"port_type\": {\n          \"hex\": \"00ff\",\n          \"name\": \"Other\",\n          \"value\": 255\n        },\n        \"internal_connector_type\": {\n          \"hex\": \"00ff\",\n          \"name\": \"Other\",\n          \"value\": 255\n        },\n        \"internal_reference_designator\": \"J9A1 - TPM HDR\"\n      },\n      {\n        \"handle\": 13,\n        \"port_type\": {\n          \"hex\": \"00ff\",\n          \"name\": \"Other\",\n          \"value\": 255\n        },\n        \"internal_connector_type\": {\n          \"hex\": \"00ff\",\n          \"name\": \"Other\",\n          \"value\": 255\n        },\n        \"internal_reference_designator\": \"J9C1 - PCIE DOCKING CONN\"\n      },\n      {\n        \"handle\": 14,\n        \"port_type\": {\n          \"hex\": \"00ff\",\n          \"name\": \"Other\",\n          \"value\": 255\n        },\n        \"internal_connector_type\": {\n          \"hex\": \"00ff\",\n          \"name\": \"Other\",\n          \"value\": 255\n        },\n        \"internal_reference_designator\": \"J2B3 - CPU FAN\"\n      },\n      {\n        \"handle\": 15,\n        \"port_type\": {\n          \"hex\": \"00ff\",\n          \"name\": \"Other\",\n          \"value\": 255\n        },\n        \"internal_connector_type\": {\n          \"hex\": \"00ff\",\n          \"name\": \"Other\",\n          \"value\": 255\n        },\n        \"internal_reference_designator\": \"J6C2 - EXT HDMI\"\n      },\n      {\n        \"handle\": 16,\n        \"port_type\": {\n          \"hex\": \"00ff\",\n          \"name\": \"Other\",\n          \"value\": 255\n        },\n        \"internal_connector_type\": {\n          \"hex\": \"00ff\",\n          \"name\": \"Other\",\n          \"value\": 255\n        },\n        \"internal_reference_designator\": \"J3C1 - GMCH FAN\"\n      },\n      {\n        \"handle\": 17,\n        \"port_type\": {\n          \"hex\": \"00ff\",\n          \"name\": \"Other\",\n          \"value\": 255\n        },\n        \"internal_connector_type\": {\n          \"hex\": \"00ff\",\n          \"name\": \"Other\",\n          \"value\": 255\n        },\n        \"internal_reference_designator\": \"J1D1 - ITP\"\n      },\n      {\n        \"handle\": 18,\n        \"port_type\": {\n          \"hex\": \"00ff\",\n          \"name\": \"Other\",\n          \"value\": 255\n        },\n        \"internal_connector_type\": {\n          \"hex\": \"00ff\",\n          \"name\": \"Other\",\n          \"value\": 255\n        },\n        \"internal_reference_designator\": \"J9E2 - MDC INTPSR\"\n      },\n      {\n        \"handle\": 19,\n        \"port_type\": {\n          \"hex\": \"00ff\",\n          \"name\": \"Other\",\n          \"value\": 255\n        },\n        \"internal_connector_type\": {\n          \"hex\": \"00ff\",\n          \"name\": \"Other\",\n          \"value\": 255\n        },\n        \"internal_reference_designator\": \"J9E4 - MDC INTPSR\"\n      },\n      {\n        \"handle\": 20,\n        \"port_type\": {\n          \"hex\": \"00ff\",\n          \"name\": \"Other\",\n          \"value\": 255\n        },\n        \"internal_connector_type\": {\n          \"hex\": \"00ff\",\n          \"name\": \"Other\",\n          \"value\": 255\n        },\n        \"internal_reference_designator\": \"J9E3 - LPC HOT DOCKING\"\n      },\n      {\n        \"handle\": 21,\n        \"port_type\": {\n          \"hex\": \"00ff\",\n          \"name\": \"Other\",\n          \"value\": 255\n        },\n        \"internal_connector_type\": {\n          \"hex\": \"00ff\",\n          \"name\": \"Other\",\n          \"value\": 255\n        },\n        \"internal_reference_designator\": \"J9E1 - SCAN MATRIX\"\n      },\n      {\n        \"handle\": 22,\n        \"port_type\": {\n          \"hex\": \"00ff\",\n          \"name\": \"Other\",\n          \"value\": 255\n        },\n        \"internal_connector_type\": {\n          \"hex\": \"00ff\",\n          \"name\": \"Other\",\n          \"value\": 255\n        },\n        \"internal_reference_designator\": \"J9G1 - LPC SIDE BAND\"\n      },\n      {\n        \"handle\": 23,\n        \"port_type\": {\n          \"hex\": \"00ff\",\n          \"name\": \"Other\",\n          \"value\": 255\n        },\n        \"internal_connector_type\": {\n          \"hex\": \"00ff\",\n          \"name\": \"Other\",\n          \"value\": 255\n        },\n        \"internal_reference_designator\": \"J8F1 - UNIFIED\"\n      },\n      {\n        \"handle\": 24,\n        \"port_type\": {\n          \"hex\": \"00ff\",\n          \"name\": \"Other\",\n          \"value\": 255\n        },\n        \"internal_connector_type\": {\n          \"hex\": \"00ff\",\n          \"name\": \"Other\",\n          \"value\": 255\n        },\n        \"internal_reference_designator\": \"J6F1 - LVDS\"\n      },\n      {\n        \"handle\": 25,\n        \"port_type\": {\n          \"hex\": \"00ff\",\n          \"name\": \"Other\",\n          \"value\": 255\n        },\n        \"internal_connector_type\": {\n          \"hex\": \"00ff\",\n          \"name\": \"Other\",\n          \"value\": 255\n        },\n        \"internal_reference_designator\": \"J2F1 - LAI FAN\"\n      },\n      {\n        \"handle\": 26,\n        \"port_type\": {\n          \"hex\": \"00ff\",\n          \"name\": \"Other\",\n          \"value\": 255\n        },\n        \"internal_connector_type\": {\n          \"hex\": \"00ff\",\n          \"name\": \"Other\",\n          \"value\": 255\n        },\n        \"internal_reference_designator\": \"J2G1 - GFX VID\"\n      },\n      {\n        \"handle\": 27,\n        \"port_type\": {\n          \"hex\": \"00ff\",\n          \"name\": \"Other\",\n          \"value\": 255\n        },\n        \"internal_connector_type\": {\n          \"hex\": \"00ff\",\n          \"name\": \"Other\",\n          \"value\": 255\n        },\n        \"internal_reference_designator\": \"J1G6 - AC JACK\"\n      }\n    ],\n    \"processor\": [\n      {\n        \"handle\": 61,\n        \"socket\": \"SOCKET 0\",\n        \"socket_type\": {\n          \"hex\": \"0024\",\n          \"name\": \"Other\",\n          \"value\": 36\n        },\n        \"socket_populated\": true,\n        \"manufacturer\": \"Intel\",\n        \"version\": \"Intel(R) Core(TM) i5-4570T CPU @ 2.90GHz\",\n        \"part\": \"Fill By OEM\",\n        \"processor_type\": {\n          \"hex\": \"0003\",\n          \"name\": \"CPU\",\n          \"value\": 3\n        },\n        \"processor_family\": {\n          \"hex\": \"00cd\",\n          \"name\": \"Other\",\n          \"value\": 205\n        },\n        \"processor_status\": {\n          \"hex\": \"0001\",\n          \"name\": \"Enabled\",\n          \"value\": 1\n        },\n        \"clock_ext\": 100,\n        \"clock_max\": 3800,\n        \"cache_handle_l1\": 63,\n        \"cache_handle_l2\": 62,\n        \"cache_handle_l3\": 64\n      }\n    ],\n    \"slot\": [\n      {\n        \"handle\": 28,\n        \"designation\": \"J6B2\",\n        \"slot_type\": {\n          \"hex\": \"00a5\",\n          \"name\": \"Other\",\n          \"value\": 165\n        },\n        \"bus_width\": {\n          \"hex\": \"000d\",\n          \"name\": \"Other\",\n          \"value\": 13\n        },\n        \"usage\": {\n          \"hex\": \"0004\",\n          \"name\": \"In Use\",\n          \"value\": 4\n        },\n        \"length\": {\n          \"hex\": \"0004\",\n          \"name\": \"Long\",\n          \"value\": 4\n        },\n        \"id\": 0,\n        \"features\": [\n          \"3.3 V\",\n          \"Shared\",\n          \"PME#\"\n        ]\n      },\n      {\n        \"handle\": 29,\n        \"designation\": \"J6B1\",\n        \"slot_type\": {\n          \"hex\": \"00a5\",\n          \"name\": \"Other\",\n          \"value\": 165\n        },\n        \"bus_width\": {\n          \"hex\": \"0008\",\n          \"name\": \"Other\",\n          \"value\": 8\n        },\n        \"usage\": {\n          \"hex\": \"0004\",\n          \"name\": \"In Use\",\n          \"value\": 4\n        },\n        \"length\": {\n          \"hex\": \"0003\",\n          \"name\": \"Short\",\n          \"value\": 3\n        },\n        \"id\": 1,\n        \"features\": [\n          \"3.3 V\",\n          \"Shared\",\n          \"PME#\"\n        ]\n      },\n      {\n        \"handle\": 30,\n        \"designation\": \"J6D1\",\n        \"slot_type\": {\n          \"hex\": \"00a5\",\n          \"name\": \"Other\",\n          \"value\": 165\n        },\n        \"bus_width\": {\n          \"hex\": \"0008\",\n          \"name\": \"Other\",\n          \"value\": 8\n        },\n        \"usage\": {\n          \"hex\": \"0004\",\n          \"name\": \"In Use\",\n          \"value\": 4\n        },\n        \"length\": {\n          \"hex\": \"0003\",\n          \"name\": \"Short\",\n          \"value\": 3\n        },\n        \"id\": 2,\n        \"features\": [\n          \"3.3 V\",\n          \"Shared\",\n          \"PME#\"\n        ]\n      },\n      {\n        \"handle\": 31,\n        \"designation\": \"J7B1\",\n        \"slot_type\": {\n          \"hex\": \"00a5\",\n          \"name\": \"Other\",\n          \"value\": 165\n        },\n        \"bus_width\": {\n          \"hex\": \"0008\",\n          \"name\": \"Other\",\n          \"value\": 8\n        },\n        \"usage\": {\n          \"hex\": \"0004\",\n          \"name\": \"In Use\",\n          \"value\": 4\n        },\n        \"length\": {\n          \"hex\": \"0003\",\n          \"name\": \"Short\",\n          \"value\": 3\n        },\n        \"id\": 3,\n        \"features\": [\n          \"3.3 V\",\n          \"Shared\",\n          \"PME#\"\n        ]\n      }\n    ],\n    \"system\": {\n      \"handle\": 1,\n      \"manufacturer\": \"LENOVO\",\n      \"product\": \"10AB0010CA\",\n      \"version\": \"ThinkCentre M93p\",\n      \"wake_up\": {\n        \"hex\": \"0008\",\n        \"name\": \"AC Power Restored\",\n        \"value\": 8\n      }\n    }\n  }\n}"
  },
  {
    "path": "default.nix",
    "content": "(import\n  (\n    let\n      lock = builtins.fromJSON (builtins.readFile ./flake.lock);\n    in\n    fetchTarball {\n      url = \"https://github.com/edolstra/flake-compat/archive/${lock.nodes.flake-compat.locked.rev}.tar.gz\";\n      sha256 = lock.nodes.flake-compat.locked.narHash;\n    }\n  )\n  {\n    src = ./.;\n  }\n).defaultNix\n"
  },
  {
    "path": "flake.nix",
    "content": "{\n  description = \"bbigras's NixOS config\";\n\n  nixConfig = rec {\n    extra-substituters = [\n      \"https://bbigras-nix-config.cachix.org?priority=1\"\n      \"https://nix-community.cachix.org?priority=2\"\n    ];\n    extra-trusted-substituters = extra-substituters;\n    extra-trusted-public-keys = [\n      \"bbigras-nix-config.cachix.org-1:aXL6Q9Oi0jyF79YAKRu17iVNk9HY0p23OZX7FA8ulhU=\"\n      \"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=\"\n    ];\n  };\n\n  inputs = {\n    # Core infrastructure\n    nixpkgs.url = \"github:NixOS/nixpkgs/nixos-unstable\";\n    nixpkgs_resticprofile.url = \"github:bbigras/nixpkgs/push-zswsmktvsmpo\";\n    flake-parts = {\n      url = \"github:hercules-ci/flake-parts\";\n      inputs.nixpkgs-lib.follows = \"nixpkgs\";\n    };\n\n    # CI workflow generation\n    actions-nix = {\n      url = \"github:nialov/actions.nix\";\n      inputs = {\n        nixpkgs.follows = \"nixpkgs\";\n        flake-parts.follows = \"flake-parts\";\n        git-hooks.follows = \"git-hooks\";\n      };\n    };\n\n    # nixos-unified for unified configuration management\n    nixos-unified.url = \"github:srid/nixos-unified\";\n\n    # System modules\n    home-manager = {\n      url = \"github:nix-community/home-manager\";\n      inputs.nixpkgs.follows = \"nixpkgs\";\n    };\n\n    # Security and secrets\n    agenix = {\n      url = \"github:ryantm/agenix\";\n      inputs = {\n        home-manager.follows = \"home-manager\";\n        nixpkgs.follows = \"nixpkgs\";\n        systems.follows = \"systems\";\n      };\n    };\n    agenix-rekey = {\n      url = \"github:oddlama/agenix-rekey\";\n      inputs = {\n        flake-parts.follows = \"flake-parts\";\n        nixpkgs.follows = \"nixpkgs\";\n        pre-commit-hooks.follows = \"git-hooks\";\n        treefmt-nix.follows = \"treefmt-nix\";\n      };\n    };\n\n    # Disk management\n    disko = {\n      url = \"github:nix-community/disko\";\n      inputs.nixpkgs.follows = \"nixpkgs\";\n    };\n\n    peerix.url = \"github:sophronesis/peerix\";\n\n    # Persistence\n    impermanence.url = \"github:nix-community/impermanence\";\n\n    # Secure boot\n    lanzaboote = {\n      url = \"github:nix-community/lanzaboote\";\n      inputs = {\n        nixpkgs.follows = \"nixpkgs\";\n        pre-commit.follows = \"git-hooks\";\n      };\n    };\n\n    # Build tools\n    nix-fast-build = {\n      url = \"github:Mic92/nix-fast-build\";\n      inputs = {\n        flake-parts.follows = \"flake-parts\";\n        nixpkgs.follows = \"nixpkgs\";\n        treefmt-nix.follows = \"treefmt-nix\";\n      };\n    };\n\n    # Package index\n    nix-index-database = {\n      url = \"github:Mic92/nix-index-database\";\n      inputs.nixpkgs.follows = \"nixpkgs\";\n    };\n\n    # Hardware support\n    nixos-hardware.url = \"github:NixOS/nixos-hardware\";\n    nixos-facter-modules.url = \"github:nix-community/nixos-facter-modules\";\n\n    # Development tools\n    git-hooks = {\n      url = \"github:cachix/git-hooks.nix\";\n      inputs = {\n        flake-compat.follows = \"flake-compat\";\n        nixpkgs.follows = \"nixpkgs\";\n      };\n    };\n    treefmt-nix = {\n      url = \"github:numtide/treefmt-nix\";\n      inputs.nixpkgs.follows = \"nixpkgs\";\n    };\n\n    # Utility inputs\n    flake-compat = {\n      url = \"github:edolstra/flake-compat\";\n      flake = false;\n    };\n    systems.url = \"github:nix-systems/default\";\n\n    # Theming\n    catppuccin = {\n      url = \"github:catppuccin/nix\";\n      inputs.nixpkgs.follows = \"nixpkgs\";\n    };\n\n    nur = {\n      url = \"github:nix-community/NUR\";\n      inputs.nixpkgs.follows = \"nixpkgs\";\n      inputs.flake-parts.follows = \"flake-parts\";\n    };\n    emacs-overlay = {\n      url = \"github:nix-community/emacs-overlay\";\n      inputs.nixpkgs.follows = \"nixpkgs\";\n    };\n    minimal-emacs-d = {\n      url = \"github:jamescherti/minimal-emacs.d\";\n      flake = false;\n    };\n\n    # emacs packages\n    batppuccin-emacs = {\n      url = \"github:bbatsov/batppuccin-emacs\";\n      flake = false;\n    };\n    eglot-multi-preset = {\n      url = \"github:kn66/eglot-multi-preset\";\n      flake = false;\n    };\n    eglot-x = {\n      url = \"github:nemethf/eglot-x\";\n      flake = false;\n    };\n    treesit-sexp = {\n      url = \"github:alexispurslane/treesit-sexp\";\n      flake = false;\n    };\n    majutsu = {\n      url = \"github:0WD0/majutsu\";\n      flake = false;\n    };\n  };\n\n  outputs =\n    inputs:\n    inputs.nixos-unified.lib.mkFlake {\n      inherit inputs;\n      root = ./.;\n      systems = [\n        \"aarch64-linux\"\n        \"x86_64-linux\"\n      ];\n    };\n}\n"
  },
  {
    "path": "modules/flake-parts/actions.nix",
    "content": "# CI workflow definition using actions.nix\n{\n  inputs,\n  self,\n  lib,\n  ...\n}:\nlet\n  # Platform mappings: Nix system -> GitHub runner\n  platforms = {\n    x86_64-linux.os = \"ubuntu-24.04\";\n    aarch64-linux.os = \"ubuntu-22.04-arm\";\n  };\n\n  # Build matrix entry from configuration (autodiscovery)\n  # Returns data in the exact shape needed for GitHub Actions matrix\n  mkHostInfo =\n    kind: name: cfg:\n    let\n      platform = cfg.pkgs.stdenv.hostPlatform.system;\n      platformInfo = platforms.${platform} or null;\n    in\n    lib.optionalAttrs (platformInfo != null) {\n      inherit name;\n      hostPlatform = platform;\n      runsOn = platformInfo.os;\n      attr =\n        if kind == \"nixos\" then\n          \"nixosConfigurations.${name}.config.system.build.toplevel\"\n        else\n          \"homeConfigurations.${name}.activationPackage\";\n    };\n\n  # Autodiscover all hosts and filter out unsupported platforms\n  nixosHosts = lib.filter (h: h != { }) (\n    lib.mapAttrsToList (mkHostInfo \"nixos\") (self.nixosConfigurations or { })\n  );\n  homeHosts = lib.filter (h: h != { }) (\n    lib.mapAttrsToList (mkHostInfo \"home\") (self.homeConfigurations or { })\n  );\n\n  # GitHub Actions references - all versions consolidated here for Renovate\n  actions = {\n    alls-green = \"re-actors/alls-green@05ac9388f0aebcb5727afa17fcccfecd6f8ec5fe\"; # v1.2.2\n    cache = \"actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae\"; # v5.0.5\n    automerge = \"peter-evans/enable-pull-request-automerge@a660677d5469627102a1c1e11409dd063606628d\"; # v3.0.0\n    cachix = \"cachix/cachix-action@1eb2ef646ac0255473d23a5907ad7b04ce94065c\"; # v17\n    checkout = \"actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd\"; # v6.0.2\n    nothing-but-nix = \"wimpysworld/nothing-but-nix@687c797a730352432950c707ab493fcc951818d7\"; # v10\n    install-nix-action = \"cachix/install-nix-action@ab739621df7a23f52766f9ccc97f38da6b7af14f\"; # v31.10.5\n  };\n\n  # Reusable step definitions\n  steps = {\n    nothing-but-nix = {\n      uses = actions.nothing-but-nix;\n    };\n\n    checkout = {\n      uses = actions.checkout;\n      \"with\".persist-credentials = false;\n    };\n\n    nixInstaller = {\n      uses = actions.install-nix-action;\n    };\n\n    nixCache = {\n      uses = actions.cache;\n      \"with\" = {\n        path = \"~/.cache/nix\";\n        key = \"nix-eval-\\${{ runner.os }}-\\${{ runner.arch }}-\\${{ hashFiles('flake.lock') }}\";\n        restore-keys = \"nix-eval-\\${{ runner.os }}-\\${{ runner.arch }}-\";\n      };\n    };\n\n    cachix = {\n      uses = actions.cachix;\n      \"with\" = {\n        name = \"bbigras-nix-config\";\n        authToken = \"\\${{ secrets.CACHIX_AUTH_TOKEN }}\";\n        extraPullNames = \"nix-community\";\n      };\n    };\n\n    # Helper to create nix-fast-build step for a given attribute expression\n    nix-fast-build = flakeAttr: {\n      name = \"nix-fast-build\";\n      run = \"nix run '${flakeRef}#nix-fast-build' -- --no-nom --skip-cached --retries=3 --option accept-flake-config true --flake='${flakeRef}#${flakeAttr}'\";\n    };\n  };\n\n  # Common setup steps for build jobs\n  setupSteps = [\n    steps.nothing-but-nix\n    steps.checkout\n    steps.nixInstaller\n    steps.nixCache\n    steps.cachix\n  ];\n\n  # Platforms to run flake check/show on (derived from all hosts)\n  checkPlatforms =\n    let\n      allHosts = nixosHosts ++ homeHosts;\n      hostPlatforms = lib.unique (map (h: h.hostPlatform) allHosts);\n    in\n    map (p: {\n      platform = p;\n      inherit (platforms.${p}) os;\n    }) hostPlatforms;\n\n  flakeRef = \"git+file:.\";\nin\n{\n  imports = [ inputs.actions-nix.flakeModules.default ];\n\n  flake.actions-nix = {\n    pre-commit.enable = true;\n\n    defaultValues.jobs = {\n      timeout-minutes = 60;\n      runs-on = \"ubuntu-24.04\";\n    };\n\n    workflows = {\n      \".github/workflows/ci.yaml\" = {\n        name = \"ci\";\n\n        on = {\n          push.branches = [\n            \"master\"\n            \"try\"\n          ];\n          pull_request = { };\n          workflow_dispatch = { };\n        };\n\n        concurrency = {\n          group = \"ci-\\${{ github.head_ref || github.ref_name }}\";\n          cancel-in-progress = \"\\${{ github.event_name == 'pull_request' }}\";\n        };\n\n        # Minimal permissions for security - this workflow only needs to read code\n        permissions = { };\n\n        jobs = {\n          # Flake check on all platforms\n          flake-check = {\n            name = \"flake check (\\${{ matrix.systems.platform }})\";\n            environment = \"ci\";\n            strategy.matrix.systems = checkPlatforms;\n            runs-on = \"\\${{ matrix.systems.os }}\";\n            steps = setupSteps ++ [\n              {\n                name = \"nix flake check\";\n                run = \"nix flake check '${flakeRef}'\";\n              }\n              {\n                name = \"nix flake show\";\n                run = \"nix flake show '${flakeRef}'\";\n              }\n            ];\n          };\n\n          # Build hosts directly (NixOS + home-manager on any platform)\n          build = {\n            name = \"\\${{ matrix.attrs.name }} (\\${{ matrix.attrs.hostPlatform }})\";\n            environment = \"ci\";\n            strategy = {\n              fail-fast = false;\n              matrix.attrs = nixosHosts ++ homeHosts;\n            };\n            runs-on = \"\\${{ matrix.attrs.runsOn }}\";\n            steps = setupSteps ++ [ (steps.nix-fast-build \"\\${{ matrix.attrs.attr }}\") ];\n          };\n\n          # Final check job - aggregates all results\n          check = {\n            runs-on = \"ubuntu-24.04\";\n            needs = [\n              \"flake-check\"\n              \"build\"\n            ];\n            \"if\" = \"always()\";\n            steps = [\n              {\n                uses = actions.alls-green;\n                \"with\" = {\n                  jobs = \"\\${{ toJSON(needs) }}\";\n                };\n              }\n            ];\n          };\n        };\n      };\n\n      # Regenerate workflows for Renovate PRs or manual trigger\n      \".github/workflows/regenerate-workflows.yaml\" = {\n        name = \"regenerate-workflows\";\n\n        on = {\n          pull_request.paths = [\n            \"modules/flake-parts/actions.nix\"\n            \"flake.lock\"\n          ];\n          workflow_dispatch = { };\n        };\n\n        permissions = {\n          contents = \"write\";\n          pull-requests = \"write\";\n        };\n\n        jobs.regenerate = {\n          runs-on = \"ubuntu-24.04\";\n          environment = \"renovate\";\n          # Only run for Renovate PRs or manual dispatch\n          \"if\" = \"github.actor == 'renovate[bot]' || github.event_name == 'workflow_dispatch'\";\n          steps = [\n            (\n              steps.checkout\n              // {\n                \"with\" = {\n                  ref = \"\\${{ github.head_ref || github.ref_name }}\";\n                  token = \"\\${{ secrets.PAT }}\";\n                  fetch-depth = 2;\n                };\n              }\n            )\n            steps.nixInstaller\n            steps.nixCache\n            steps.cachix\n            {\n              name = \"Regenerate workflows\";\n              run = \"nix run .#render-workflows\";\n            }\n            {\n              name = \"Amend commit with regenerated workflows\";\n              run = ''\n                git config user.name \"github[bot]\"\n                git config user.email \"noreply@github.com\"\n                git add .github/workflows/\n                git diff --staged --quiet || git commit --amend --no-edit\n                git push --force-with-lease\n              '';\n            }\n            {\n              uses = actions.automerge;\n              \"with\" = {\n                token = \"\\${{ secrets.PAT }}\";\n                pull-request-number = \"\\${{ github.event.pull_request.number }}\";\n                merge-method = \"rebase\";\n              };\n            }\n          ];\n        };\n      };\n    };\n  };\n}\n"
  },
  {
    "path": "modules/flake-parts/agenix-rekey.nix",
    "content": "# agenix-rekey flake-parts integration\n{ inputs, self, ... }:\n{\n  imports = [ inputs.agenix-rekey.flakeModule ];\n\n  perSystem = _: {\n    # Configure agenix-rekey with our NixOS configurations\n    agenix-rekey.nixosConfigurations = self.nixosConfigurations;\n  };\n}\n"
  },
  {
    "path": "modules/flake-parts/configurations.nix",
    "content": "# Configuration wiring using nixos-unified helpers\n# Uses mkLinuxSystem/mkMacosSystem/mkHomeConfiguration for standardized setup\n{\n  self,\n  ...\n}:\nlet\n  inherit (self.nixos-unified.lib) mkLinuxSystem;\n\n  # We use home-manager = false because we have our own customized home-manager setup\n  # in modules/nixos/default.nix and modules/darwin/default.nix\n  mkNixos = mkLinuxSystem { home-manager = false; };\nin\n{\n  flake = {\n    nixosConfigurations = {\n      desktop = mkNixos (self + \"/configurations/nixos/desktop\");\n      laptop = mkNixos (self + \"/configurations/nixos/laptop\");\n      work = mkNixos (self + \"/configurations/nixos/work\");\n    };\n\n    homeConfigurations = {\n    };\n  };\n}\n"
  },
  {
    "path": "modules/flake-parts/default.nix",
    "content": "# Flake-parts module aggregator\n# Note: These must be path imports because self.flakeModules isn't available\n# during flake module evaluation (would cause infinite recursion)\n{ inputs, ... }:\n{\n  imports = [\n    # nixos-unified's flake module (provides activate, update packages)\n    inputs.nixos-unified.flakeModules.default\n\n    # Our modules\n    ./actions.nix\n    ./agenix-rekey.nix\n    ./configurations.nix\n    ./dev-shell.nix\n    ./modules.nix\n    ./overlays.nix\n    ./packages.nix\n    ./pre-commit.nix\n    ./treefmt.nix\n  ];\n}\n"
  },
  {
    "path": "modules/flake-parts/dev-shell.nix",
    "content": "{ inputs, ... }:\n{\n  imports = [\n    inputs.git-hooks.flakeModule\n    inputs.treefmt-nix.flakeModule\n  ];\n\n  perSystem =\n    {\n      config,\n      pkgs,\n      ...\n    }:\n    {\n      devShells.default = pkgs.mkShell {\n        name = \"nix-config\";\n\n        nativeBuildInputs =\n          with pkgs;\n          [\n            # Nix\n            config.agenix-rekey.package\n            config.treefmt.build.wrapper\n            cachix\n            nil\n            nix-fast-build\n            nix-output-monitor\n            nix-tree\n            nixd\n\n            # GitHub Actions\n            act\n            python3\n            python3Packages.pyflakes\n\n            # Misc\n            jq\n            pre-commit\n            rage\n          ]\n          ++ (builtins.attrValues config.treefmt.build.programs)\n          ++ config.pre-commit.settings.enabledPackages;\n\n        shellHook = ''\n          ${config.pre-commit.installationScript}\n        '';\n      };\n    };\n}\n"
  },
  {
    "path": "modules/flake-parts/modules.nix",
    "content": "# Auto-discovered module exports\n# Modules are discovered recursively from modules/{nixos,darwin,home,shared,flake-parts}/\n# Naming convention:\n#   - top-level files: foo.nix -> foo\n#   - subdirectory files: subdir/foo.nix -> subdir-foo\n#   - directories with default.nix: subdir/ -> subdir (imports default.nix)\n# Shared modules are exposed under all outputs (nixos, darwin, home)\n{ inputs, moduleLocation, ... }:\nlet\n  inherit (inputs.nixpkgs) lib;\n  inherit (lib) mapAttrs mkOption types;\n\n  # Recursively discover modules in a directory\n  # Returns an attrset of { name = path; }\n  discoverModules =\n    baseDir: prefix:\n    let\n      contents = builtins.readDir baseDir;\n\n      # Process a single entry (file or directory)\n      processEntry =\n        name: type:\n        let\n          path = baseDir + \"/${name}\";\n          nameWithoutNix = lib.removeSuffix \".nix\" name;\n          fullName = if prefix == \"\" then nameWithoutNix else \"${prefix}-${nameWithoutNix}\";\n        in\n        if type == \"regular\" && lib.hasSuffix \".nix\" name && !(prefix != \"\" && name == \"default.nix\") then\n          # .nix file -> export as module (skip default.nix in subdirs; directory branch handles it)\n          { ${fullName} = path; }\n        else if type == \"directory\" then\n          let\n            subContents = builtins.readDir path;\n            hasDefault = subContents ? \"default.nix\";\n            subPrefix = if prefix == \"\" then name else \"${prefix}-${name}\";\n          in\n          # Directory with default.nix -> export as <subdir>\n          # Also recursively discover non-default.nix files in subdirectory\n          (lib.optionalAttrs hasDefault { ${subPrefix} = path; }) // (discoverModules path subPrefix)\n        else\n          { };\n\n      # Process all entries and merge results\n      modules = lib.foldlAttrs (\n        acc: name: type:\n        acc // processEntry name type\n      ) { } contents;\n    in\n    modules;\n\n  # Discover modules for each category\n  nixosModulesDiscovered = discoverModules ../../modules/nixos \"\";\n  homeModulesDiscovered = discoverModules ../../modules/home \"\";\n  sharedModulesDiscovered = discoverModules ../../modules/shared \"\";\n  flakeModulesDiscovered = discoverModules ../../modules/flake-parts \"\";\nin\n{\n  # flake-parts only defines `flake.nixosModules` with a `deferredModule` type\n  # that wraps paths into attrsets. Define matching options for darwin/home so\n  # the raw paths we discover get the same treatment (fixes Determinate Nix's\n  # `isFunctionOrAttrs` schema check in `nix flake check`).\n  options.flake = {\n    homeModules = mkOption {\n      type = types.lazyAttrsOf types.deferredModule;\n      default = { };\n      apply = mapAttrs (\n        k: v: {\n          _class = \"homeManager\";\n          _file = \"${toString moduleLocation}#homeModules.${k}\";\n          imports = [ v ];\n        }\n      );\n      description = \"Home Manager modules.\";\n    };\n  };\n\n  config.flake = {\n    flakeModules = flakeModulesDiscovered;\n    nixosModules = sharedModulesDiscovered // nixosModulesDiscovered;\n    homeModules = sharedModulesDiscovered // homeModulesDiscovered;\n  };\n}\n"
  },
  {
    "path": "modules/flake-parts/overlays.nix",
    "content": "# Overlay configuration\n{ inputs, ... }:\nlet\n  inherit (inputs.nixpkgs) lib;\n\n  localOverlays = lib.mapAttrs' (\n    f: _: lib.nameValuePair (lib.removeSuffix \".nix\" f) (import (../../overlays + \"/${f}\"))\n  ) (builtins.readDir ../../overlays);\nin\n{\n  flake.overlays = localOverlays // {\n    default = lib.composeManyExtensions (\n      [\n        inputs.agenix.overlays.default\n        inputs.emacs-overlay.overlay\n        inputs.nur.overlays.default\n        (final: _: {\n          inherit (inputs.nix-fast-build.packages.${final.stdenv.hostPlatform.system}) nix-fast-build;\n        })\n        (final: super: {\n          emacs-lsp-booster =\n            final.callPackage \"${inputs.nixpkgs}/pkgs/by-name/em/emacs-lsp-booster/package.nix\"\n              {\n                inherit (super) emacs;\n              };\n        })\n        (final: _super: {\n          resticprofile = final.callPackage \"${inputs.nixpkgs_resticprofile}/pkgs/by-name/re/resticprofile/package.nix\" { };\n        })\n        (_self: super: {\n          emacs.pkgs = super.emacs.pkgs // {\n            batppuccin-emacs = super.emacs.pkgs.trivialBuild {\n              pname = \"batppuccin-emacs\";\n              version = \"git\";\n              src = inputs.batppuccin-emacs;\n            };\n            eglot-multi-preset = super.emacs.pkgs.trivialBuild {\n              pname = \"eglot-multi-preset\";\n              version = \"git\";\n              src = inputs.eglot-multi-preset;\n            };\n            eglot-x = super.emacs.pkgs.trivialBuild {\n              pname = \"eglot-x\";\n              version = \"git\";\n              src = inputs.eglot-x;\n            };\n            treesit-sexp = super.emacs.pkgs.trivialBuild {\n              pname = \"treesit-sexp\";\n              version = \"git\";\n              src = inputs.treesit-sexp;\n            };\n            majutsu = super.emacs.pkgs.trivialBuild {\n              pname = \"majutsu\";\n              version = \"git\";\n              src = inputs.majutsu;\n              packageRequires = [\n                super.emacs.pkgs.magit\n              ];\n            };\n          };\n        })\n      ]\n      ++ (lib.attrValues localOverlays)\n    );\n  };\n\n  perSystem =\n    { system, ... }:\n    {\n      _module.args.pkgs = import inputs.nixpkgs {\n        inherit system;\n        overlays = [ inputs.self.overlays.default ];\n        config = {\n          allowUnfree = true;\n          allowAliases = true;\n        };\n      };\n    };\n}\n"
  },
  {
    "path": "modules/flake-parts/packages.nix",
    "content": "# Package definitions - exports host configurations for CI builds\n# Merges with nixos-unified's packages (activate, update) via config.packages\n{ self, ... }:\n{\n  perSystem =\n    {\n      pkgs,\n      lib,\n      system,\n      ...\n    }:\n    let\n      # Get derivations from all configuration types\n      nixosDrvs = lib.mapAttrs (_: nixos: nixos.config.system.build.toplevel) (\n        self.nixosConfigurations or { }\n      );\n      homeDrvs = lib.mapAttrs (_: home: home.activationPackage) (self.homeConfigurations or { });\n      hostDrvs = nixosDrvs // homeDrvs;\n\n      # Filter to hosts compatible with current system\n      compatHostDrvs = lib.filterAttrs (\n        name: _:\n        let\n          isNixos = (self.nixosConfigurations or { }) ? ${name};\n          isHome = (self.homeConfigurations or { }) ? ${name};\n\n          hostSystem =\n            if isNixos then\n              self.nixosConfigurations.${name}.pkgs.stdenv.hostPlatform.system\n            else if isHome then\n              self.homeConfigurations.${name}.pkgs.stdenv.hostPlatform.system\n            else\n              null;\n        in\n        hostSystem == system\n      ) hostDrvs;\n\n      # Create a linkFarm containing all compatible hosts\n      compatHostsFarm = pkgs.linkFarm \"hosts-${system}\" (\n        lib.mapAttrsToList (name: path: { inherit name path; }) compatHostDrvs\n      );\n    in\n    {\n      # Host configurations as packages (for CI)\n      packages =\n        compatHostDrvs\n        // (lib.optionalAttrs (compatHostDrvs != { }) {\n          default = compatHostsFarm;\n        })\n        // {\n          inherit (pkgs) nix-fast-build;\n        };\n    };\n}\n"
  },
  {
    "path": "modules/flake-parts/pre-commit.nix",
    "content": "# Pre-commit hooks configuration\n{\n  perSystem.pre-commit = {\n    check.enable = true;\n    settings.hooks = {\n      # actionlint.enable = true;\n      check-added-large-files.enable = true;\n      check-merge-conflicts.enable = true;\n      check-symlinks.enable = true;\n      convco.enable = true;\n      deadnix.enable = true;\n      # end-of-file-fixer.enable = true;\n      nil.enable = true;\n      ripsecrets.enable = true;\n      # shellcheck.enable = true;\n      statix.enable = true;\n      # treefmt.enable = true;\n      # trim-trailing-whitespace.enable = true;\n      zizmor.enable = true;\n    };\n  };\n}\n"
  },
  {
    "path": "modules/flake-parts/treefmt.nix",
    "content": "# Treefmt configuration for code formatting\n{\n  perSystem.treefmt = {\n    projectRootFile = \"flake.nix\";\n    flakeCheck = false; # Covered by git-hooks check\n    programs = {\n      nixfmt.enable = true;\n      shfmt = {\n        enable = true;\n        indent_size = 0;\n      };\n    };\n  };\n}\n"
  },
  {
    "path": "modules/home/asciinema.nix",
    "content": "{\n  programs.asciinema = {\n    enable = true;\n    settings = {\n      notifications = {\n        command = \"tmux display-message \\\"$TEXT\\\"\";\n        enable = false;\n      };\n      playback = {\n        next_marker_key = \"m\";\n        pause_key = \"^p\";\n        speed = 2;\n        step_key = \"s\";\n      };\n      server = {\n        url = \"https://asciinema.example.com\";\n      };\n      session = {\n        add_marker_key = \"^x\";\n        capture_env = \"SHELL,TERM,USER\";\n        capture_input = true;\n        command = \"/run/current-system/sw/bin/bash -l\";\n        idle_time_limit = 2;\n        pause_key = \"^p\";\n        prefix_key = \"^a\";\n      };\n    };\n  };\n}\n"
  },
  {
    "path": "modules/home/bash.nix",
    "content": "{ config, ... }:\n{\n  programs.bash = {\n    enable = true;\n    historyControl = [\n      \"erasedups\"\n      \"ignorespace\"\n    ];\n    historyFile = \"${config.xdg.dataHome}/bash/history\";\n    historyFileSize = 30000;\n    historySize = 10000;\n    bashrcExtra = ''\n      CONST_SSH_SOCK=\"$HOME/.ssh/ssh-auth-sock\"\n      if [ ! -z ''${SSH_AUTH_SOCK+x} ] && [ \"$SSH_AUTH_SOCK\" != \"$CONST_SSH_SOCK\" ]; then\n        rm -f \"$CONST_SSH_SOCK\"\n        ln -sf \"$SSH_AUTH_SOCK\" \"$CONST_SSH_SOCK\"\n        export SSH_AUTH_SOCK=\"$CONST_SSH_SOCK\"\n      fi\n    '';\n  };\n}\n"
  },
  {
    "path": "modules/home/btop.nix",
    "content": "{\n  programs.btop = {\n    enable = true;\n    settings = {\n      # If the theme set background should be shown, set to false if you want terminal background transparency.\n      theme_background = true;\n\n      # Sets if 24-bit truecolor should be used, will convert 24-bit colors to 256 color (6x6x6 color cube) if false.\n      truecolor = true;\n\n      # Set to true to force tty mode regardless if a real tty has been detected or not.\n      # Will force 16-color mode and TTY theme, set all graph symbols to \"tty\" and swap out other non tty friendly symbols.\n      force_tty = false;\n\n      # Define presets for the layout of the boxes. Preset 0 is always all boxes shown with default settings. Max 9 presets.\n      # Format: \"box_name:P:G,box_name:P:G\" P=(0 or 1) for alternate positons, G=graph symbol to use for box.\n      # Use withespace \" \" as seprator between different presets.\n      # Example: \"cpu:0:default,mem:0:tty,proc:1:default cpu:0:braille,proc:0:tty\"\n      presets = \"cpu:-6:default,proc:0:default cpu:0:default,mem:0:default,net:0:default cpu:0:block,net:0:tty\";\n\n      # Set to true to enable \"h,j,k,l\" keys for directional control in lists.\n      # Conflicting keys for h:\"help\" and k:\"kill\" is accessible while holding shift.\n      vim_keys = true;\n\n      # Rounded corners on boxes, is ignored if TTY mode is ON.\n      rounded_corners = true;\n\n      # Default symbols to use for graph creation, \"braille\", \"block\" or \"tty\".\n      # \"braille\" offers the highest resolution but might not be included in all fonts.\n      # \"block\" has half the resolution of braille but uses more common characters.\n      # \"tty\" uses only 3 different symbols but will work with most fonts and should work in a real TTY.\n      # Note that \"tty\" only has half the horizontal resolution of the other two, so will show a shorter historical view.\n      graph_symbol = \"braille\";\n\n      # Graph symbol to use for graphs in cpu box, \"default\", \"braille\", \"block\" or \"tty\".\n      graph_symbol_cpu = \"default\";\n\n      # Graph symbol to use for graphs in cpu box, \"default\", \"braille\", \"block\" or \"tty\".\n      graph_symbol_mem = \"default\";\n\n      # Graph symbol to use for graphs in cpu box, \"default\", \"braille\", \"block\" or \"tty\".\n      graph_symbol_net = \"default\";\n\n      # Graph symbol to use for graphs in cpu box, \"default\", \"braille\", \"block\" or \"tty\".\n      graph_symbol_proc = \"default\";\n\n      # Manually set which boxes to show. Available values are \"cpu mem net proc\", separate values with whitespace.\n      shown_boxes = \"cpu mem net proc\";\n\n      # Update time in milliseconds, recommended 2000 ms or above for better sample times for graphs.\n      update_ms = 1000;\n\n      # Processes sorting, \"pid\" \"program\" \"arguments\" \"threads\" \"user\" \"memory\" \"cpu lazy\" \"cpu responsive\",\n      # \"cpu lazy\" sorts top process over time (easier to follow), \"cpu responsive\" updates top process directly.\n      proc_sorting = \"cpu lazy\";\n\n      # Reverse sorting order, true or false.\n      proc_reversed = false;\n\n      # Show processes as a tree.\n      proc_tree = false;\n\n      # Use the cpu graph colors in the process list.\n      proc_colors = true;\n\n      # Use a darkening gradient in the process list.\n      proc_gradient = true;\n\n      # If process cpu usage should be of the core it's running on or usage of the total available cpu power.\n      proc_per_core = true;\n\n      # Show process memory as bytes instead of percent.\n      proc_mem_bytes = true;\n\n      # Use /proc/[pid]/smaps for memory information in the process info box (very slow but more accurate)\n      proc_info_smaps = false;\n\n      # Show proc box on left side of screen instead of right.\n      proc_left = false;\n\n      # Sets the CPU stat shown in upper half of the CPU graph, \"total\" is always available.\n      # Select from a list of detected attributes from the options menu.\n      cpu_graph_upper = \"total\";\n\n      # Sets the CPU stat shown in lower half of the CPU graph, \"total\" is always available.\n      # Select from a list of detected attributes from the options menu.\n      cpu_graph_lower = \"total\";\n\n      # Toggles if the lower CPU graph should be inverted.\n      cpu_invert_lower = true;\n\n      # Set to true to completely disable the lower CPU graph.\n      cpu_single_graph = false;\n\n      # Show cpu box at bottom of screen instead of top.\n      cpu_bottom = false;\n\n      # Shows the system uptime in the CPU box.\n      show_uptime = true;\n\n      # Show cpu temperature.\n      check_temp = true;\n\n      # Which sensor to use for cpu temperature, use options menu to select from list of available sensors.\n      cpu_sensor = \"Auto\";\n\n      # Show temperatures for cpu cores also if check_temp is true and sensors has been found.\n      show_coretemp = true;\n\n      # Set a custom mapping between core and coretemp, can be needed on certain cpus to get correct temperature for correct core.\n      # Use lm-sensors or similar to see which cores are reporting temperatures on your machine.\n      # Format \"x:y\" x=core with wrong temp, y=core with correct temp, use space as separator between multiple entries.\n      # Example: \"4:0 5:1 6:3\"\n      cpu_core_map = \"\";\n\n      # Which temperature scale to use, available values: \"celsius\", \"fahrenheit\", \"kelvin\" and \"rankine\".\n      temp_scale = \"celsius\";\n\n      # Show CPU frequency.\n      show_cpu_freq = true;\n\n      # Draw a clock at top of screen, formatting according to strftime, empty string to disable.\n      # Special formatting: /host = hostname | /user = username | /uptime = system uptime\n      clock_format = \"%X\";\n\n      # Update main ui in background when menus are showing, set this to false if the menus is flickering too much for comfort.\n      background_update = true;\n\n      # Custom cpu model name, empty string to disable.\n      custom_cpu_name = \"\";\n\n      # Optional filter for shown disks, should be full path of a mountpoint, separate multiple values with whitespace \" \".\n      # Begin line with \"exclude=\" to change to exclude filter, otherwise defaults to \"most include\" filter. Example: disks_filter=\"exclude=/boot /home/user\".\n      disks_filter = \"/ /nix /nix/state /nix/store /mnt/emp /mnt/movies /mnt/music /mnt/redacted /mnt/shows\";\n\n      # Show graphs instead of meters for memory values.\n      mem_graphs = false;\n\n      # Show mem box below net box instead of above.\n      mem_below_net = false;\n\n      # If swap memory should be shown in memory box.\n      show_swap = true;\n\n      # Show swap as a disk, ignores show_swap value above, inserts itself after first disk.\n      swap_disk = true;\n\n      # If mem box should be split to also show disks info.\n      show_disks = true;\n\n      # Filter out non physical disks. Set this to false to include network disks, RAM disks and similar.\n      only_physical = false;\n\n      # Read disks list from /etc/fstab. This also disables only_physical.\n      use_fstab = false;\n\n      # Toggles if io activity % (disk busy time) should be shown in regular disk usage view.\n      show_io_stat = true;\n\n      # Toggles io mode for disks, showing big graphs for disk read/write speeds.\n      io_mode = false;\n\n      # Set to true to show combined read/write io graphs in io mode.\n      io_graph_combined = false;\n\n      # Set the top speed for the io graphs in MiB/s (100 by default), use format \"mountpoint:speed\" separate disks with whitespace \" \".\n      # Example: \"/mnt/media:100 /:20 /boot:1\".\n      io_graph_speeds = \"\";\n\n      # Set fixed values for network graphs in Mebibits. Is only used if net_auto is also set to false.\n      net_download = 1024;\n\n      net_upload = 1024;\n\n      # Use network graphs auto rescaling mode, ignores any values set above and rescales down to 10 Kibibytes at the lowest.\n      net_auto = false;\n\n      # Sync the auto scaling for download and upload to whichever currently has the highest scale.\n      net_sync = false;\n\n      # Starts with the Network Interface specified here.\n      net_iface = \"\";\n\n      # Show battery stats in top right if battery is present.\n      show_battery = true;\n\n      # Which battery to use if multiple are present. \"Auto\" for auto detection.\n      selected_battery = \"Auto\";\n\n      # Set loglevel for \"~/.config/btop/btop.log\" levels are: \"ERROR\" \"WARNING\" \"INFO\" \"DEBUG\".\n      # The level set includes all lower levels, i.e. \"DEBUG\" will show all logging info.\n      log_level = \"WARNING\";\n    };\n  };\n}\n"
  },
  {
    "path": "modules/home/default.nix",
    "content": "# Shared home-manager configuration for all platforms\n# External modules (impermanence, nix-index-database, nixvim, stylix) are imported in configurations/\n{\n  flake,\n  lib,\n  # osConfig ? null,\n  pkgs,\n  ...\n}:\nlet\n  inherit (flake) self;\n  # When integrated with NixOS/Darwin, osConfig is the parent system config\n  # When standalone, osConfig is null\n  # isIntegrated = osConfig != null;\nin\n{\n  imports = with self.homeModules; [\n    asciinema\n    bash\n    btop\n    delta\n    dev\n    fish\n    git\n    htop\n    jujutsu\n    jjui\n    ssh\n    starship\n    syncthing\n    television\n    tmux\n    xdg\n    zsh\n  ];\n\n  # XXX: Manually enabled in the graphic module\n  dconf.enable = false;\n\n  catppuccin = {\n    enable = true;\n    flavor = \"mocha\";\n    accent = \"blue\";\n    cursors.enable = true;\n  };\n\n  gtk.enable = true;\n  home.pointerCursor = {\n    x11.enable = true;\n    gtk.enable = true;\n  };\n\n  home = {\n    stateVersion = lib.mkDefault \"26.05\";\n    packages = lib.filter (lib.meta.availableOn pkgs.stdenv.hostPlatform) (\n      with pkgs;\n      [\n        attic-client\n        ccinit\n        fd\n        git-annex\n        git-remote-gcrypt\n        incus.client\n        mosh\n        nix-closure-size\n        nix-output-monitor\n        pwgen-secure\n        rsync\n        truecolor-check\n        viddy\n        xh\n        zrok\n        xournalpp\n        dbeaver-bin\n\n        nix-closure-size\n        mosh\n\n        # dev\n        colordiff\n\n        # net\n        dumbpipe\n        rclone\n        sendme\n        tailscale\n        tcpdump\n        xh\n\n        # nix\n        cachix\n        comma\n        manix\n        nix-update\n        nixpkgs-fmt\n\n        # cool cli tools\n        fd\n        hexyl\n        pwgen\n        sd # find & replace\n        doggo\n\n        # Android\n        # android-studio\n        # scrcpy\n\n        # backup\n        restic\n\n        # utils\n        file\n        strace\n\n        pv\n\n        docker-compose\n        prettyping # a nicer ping\n\n        killall\n\n        unar\n\n        # kubernetes\n        kubectl\n        kubectx\n        kubelogin-oidc\n        # istioctl\n        kubernetes-helm\n        kind\n\n        docker-credential-helpers\n        viddy\n        natscli\n        just\n\n        # media\n        mediainfo\n        kooha\n\n        zrok\n\n        devpod\n        altair\n        broot\n        distrobox\n        incus.client\n        srgn\n        attic-client\n        # aider-chat\n        git-annex\n        git-remote-gcrypt\n        spacer\n        faketty\n        tkey-ssh-agent\n        jan\n        hl-log-viewer\n        android-tools\n        resticprofile\n        openbao\n      ]\n      ++ (with pkgs.hunspellDicts; [\n        fr-moderne\n        en_CA\n      ])\n    );\n    shellAliases = {\n      cat = \"bat\";\n      cls = \"clear\";\n      j = \"${pkgs.just}/bin/just\";\n      l = \"ls\";\n      la = \"ls --all\";\n      ls = \"eza --binary --header --long\";\n      man = \"batman\";\n    };\n  };\n\n  programs = {\n    alacritty.enable = true;\n    atool = {\n      enable = true;\n      extraPackages = with pkgs; [\n        bzip2\n        gnutar\n        gzip\n        lhasa\n        lzop\n        p7zip\n        unzip\n        xz\n        zip\n      ];\n    };\n    atuin = {\n      enable = true;\n      settings.auto_sync = true;\n      flags = [ \"--disable-up-arrow\" ];\n    };\n    bat = {\n      enable = true;\n      extraPackages = with pkgs.bat-extras; [ batman ];\n    };\n    carapace.enable = true;\n    difftastic.enable = true;\n    eza.enable = true;\n    fastfetch.enable = true;\n    fd.enable = true;\n    fzf = {\n      enable = true;\n      tmux.enableShellIntegration = true;\n    };\n    gcc = {\n      enable = true;\n      colors = {\n        error = \"01;31\";\n      };\n    };\n    gpg.enable = true;\n    grype = {\n      enable = true;\n      settings = {\n        check-for-app-update = false;\n      };\n    };\n    jq.enable = true;\n    k9s = {\n      enable = true;\n      aliases = {\n        # Use pp as an alias for Pod\n        pp = \"v1/pods\";\n      };\n      hotKeys = {\n        shift-0 = {\n          shortCut = \"Shift-0\";\n          description = \"Viewing pods\";\n          command = \"pods\";\n        };\n      };\n      plugins = {\n        # Defines a plugin to provide a `ctrl-l` shortcut to\n        # tail the logs while in pod view.\n        fred = {\n          shortCut = \"Ctrl-L\";\n          description = \"Pod logs\";\n          scopes = [ \"po\" ];\n          command = \"kubectl\";\n          background = false;\n          args = [\n            \"logs\"\n            \"-f\"\n            \"$NAME\"\n            \"-n\"\n            \"$NAMESPACE\"\n            \"--context\"\n            \"$CLUSTER\"\n          ];\n        };\n        jsonLogs = {\n          shortCut = \"Shift-L\";\n          description = \"Prettified json logs\";\n          scopes = [\n            \"daemonset\"\n            \"deploy\"\n            \"job\"\n            \"pod\"\n            \"replicaset\"\n            \"service\"\n            \"statefulset\"\n          ];\n          command = \"sh\";\n          args = [\n            \"-c\"\n            ''\n              kubectl logs --follow --context=\"$CONTEXT\" --namespace=\"$NAMESPACE\" \"$RESOURCE_NAME/$NAME\" | ${lib.getExe pkgs.hl-log-viewer} --paging=never\n            ''\n          ];\n        };\n      };\n      settings = {\n        k9s = {\n          refreshRate = 2;\n        };\n      };\n      views = {\n        \"v1/pods\" = {\n          columns = [\n            \"AGE\"\n            \"NAMESPACE\"\n            \"NAME\"\n            \"IP\"\n            \"NODE\"\n            \"STATUS\"\n            \"READY\"\n          ];\n        };\n      };\n    };\n    qalculate = {\n      enable = true;\n      package = pkgs.qalculate-gtk;\n      settings = {\n        General = {\n          precision = 10;\n          colorize = 1;\n          save_mode_on_exit = 1;\n          save_definitions_on_exit = 0;\n        };\n        Mode = {\n          angle_unit = 1;\n          number_base = 10;\n          min_deci = 0;\n          max_deci = -1;\n        };\n      };\n    };\n    kubecolor = {\n      enable = true;\n      enableAlias = true;\n      settings = {\n        preset = \"dark\";\n        paging = \"auto\";\n      };\n    };\n    kubeswitch = {\n      enable = true;\n    };\n    mangohud.enable = true;\n    nh = {\n      enable = true;\n      flake = \"git+https://github.com/bbigras/nix-config\";\n    };\n    mcp = {\n      enable = true;\n      servers = {\n        context7 = {\n          url = \"https://mcp.context7.com/mcp\";\n          headers = {\n            CONTEXT7_API_KEY = \"{env:CONTEXT7_API_KEY}\";\n          };\n        };\n      };\n    };\n    pay-respects.enable = true;\n    ripgrep.enable = true;\n    sesh.enable = true;\n    streamlink = {\n      enable = true;\n      settings = {\n        player = \"${pkgs.mpv}/bin/mpv\";\n        player-args = \"--cache 2048\";\n        player-no-close = true;\n        twitch-disable-ads = true;\n        twitch-low-latency = true;\n      };\n    };\n    swappy = {\n      enable = true;\n      settings = {\n        Default = {\n          auto_save = false;\n          custom_color = \"rgba(193,125,17,1)\";\n          early_exit = false;\n          fill_shape = false;\n          line_size = 5;\n          paint_mode = \"brush\";\n          save_dir = \"$HOME/Desktop\";\n          save_filename_format = \"swappy-%Y%m%d-%H%M%S.png\";\n          show_panel = false;\n          text_font = \"sans-serif\";\n          text_size = 20;\n          transparency = 50;\n          transparent = false;\n        };\n      };\n    };\n    tirith = {\n      enable = false;\n      policy = {\n        version = 1;\n        fail_mode = \"open\";\n        allow_bypass = true;\n        severity_overrides = {\n          docker_untrusted_registry = \"CRITICAL\";\n        };\n      };\n    };\n    trippy.enable = true;\n    vesktop = {\n      enable = false;\n      settings = {\n        appBadge = false;\n        arRPC = true;\n        checkUpdates = false;\n        customTitleBar = false;\n        disableMinSize = true;\n        minimizeToTray = false;\n        tray = false;\n        splashBackground = \"#000000\";\n        splashColor = \"#ffffff\";\n        splashTheming = true;\n        staticTitle = true;\n        hardwareAcceleration = true;\n        discordBranch = \"stable\";\n      };\n      vencord.settings = {\n        autoUpdate = false;\n        autoUpdateNotification = false;\n        notifyAboutUpdates = false;\n        useQuickCss = true;\n        disableMinSize = true;\n        plugins = {\n          # MessageLogger = {\n          #   enabled = true;\n          #   ignoreSelf = true;\n          # };\n          FakeNitro.enabled = true;\n        };\n      };\n    };\n    vivid.enable = true;\n    tealdeer.enable = true;\n    zoxide.enable = true;\n  };\n\n  systemd.user.startServices = \"sd-switch\";\n\n  services.tailscale-systray.enable = true;\n\n  xdg.configFile.\"nixpkgs/config.nix\".text = \"{ allowUnfree = true; }\";\n}\n"
  },
  {
    "path": "modules/home/delta.nix",
    "content": "{\n  programs = {\n    delta = {\n      enable = true;\n      enableGitIntegration = true;\n      enableJujutsuIntegration = true;\n    };\n\n    jjui = {\n      settings = {\n        preview = {\n          file_command = [\n            \"diff\"\n            \"--color\"\n            \"always\"\n            \"--config\"\n            \"ui.diff-formatter=delta\"\n            \"-r\"\n            \"$change_id\"\n            \"$file\"\n          ];\n          revision_command = [\n            \"show\"\n            \"--color\"\n            \"always\"\n            \"-r\"\n            \"$change_id\"\n            \"--config\"\n            \"ui.diff-formatter=delta\"\n          ];\n        };\n      };\n    };\n  };\n}\n"
  },
  {
    "path": "modules/home/dev/default.nix",
    "content": "{ lib, pkgs, ... }:\n{\n  home = {\n    extraOutputsToInstall = [\n      \"doc\"\n      \"devdoc\"\n    ];\n    file.gdbinit = {\n      target = \".gdbinit\";\n      text = ''\n        set auto-load safe-path /\n      '';\n    };\n    packages = with pkgs; [\n      git-lfs\n      (lib.hiPrio nixpkgs-review)\n      nix-update\n      upterm\n    ];\n  };\n\n  programs = {\n    direnv = {\n      enable = true;\n      silent = true;\n      nix-direnv.enable = true;\n      stdlib = ''\n        : ''${XDG_CACHE_HOME:=$HOME/.cache}\n        declare -A direnv_layout_dirs\n        direnv_layout_dir() {\n            echo \"''${direnv_layout_dirs[$PWD]:=$(\n                echo -n \"$XDG_CACHE_HOME\"/direnv/layouts/\n                echo -n \"$PWD\" | shasum | cut -d ' ' -f 1\n            )}\"\n        }\n      '';\n    };\n\n    gh = {\n      enable = true;\n      settings.git_protocol = \"ssh\";\n    };\n  };\n}\n"
  },
  {
    "path": "modules/home/emacs/android.nix",
    "content": "{\n  programs.emacs = {\n    init = {\n      usePackage = {\n        kotlin-ts-mode = {\n          enable = true;\n          defer = true;\n        };\n        lsp-dart = {\n          enable = true;\n          defer = true;\n          command = [ \"lsp-dart-setup\" ];\n        };\n        flutter = {\n          enable = true;\n          defer = true;\n          command = [\n            \"flutter-run\"\n            \"flutter-hot-reload\"\n          ];\n        };\n      };\n    };\n  };\n}\n"
  },
  {
    "path": "modules/home/emacs/consult.nix",
    "content": "{\n  programs.emacs = {\n    init = {\n      usePackage = {\n        consult = {\n          enable = true;\n          after = [ \"org\" ];\n          # preview is now enabled automatically in recent consult versions\n          bind = {\n            \"C-c M-x\" = \"consult-mode-command\";\n            \"C-c h\" = \"consult-history\";\n            \"C-c k\" = \"consult-kmacro\";\n            \"C-c i\" = \"consult-info\";\n            # ([remap Info-search] = \"consult-info\";\n            # C-x bindings (ctl-x-map)\n            \"C-x M-:\" = \"consult-complex-command\"; # orig. repeat-complex-command\n            \"C-x b\" = \"consult-buffer\"; # orig. switch-to-buffer\n            \"C-x 4 b\" = \"consult-buffer-other-window\"; # orig. switch-to-buffer-other-window\n            \"C-x 5 b\" = \"consult-buffer-other-frame\"; # orig. switch-to-buffer-other-frame\n            \"C-x r b\" = \"consult-bookmark\"; # orig. bookmark-jump\n            # \"C-x p b\" = \"consult-project-buffer\"; # orig. project-switch-to-buffer\n            # Custom M-# bindings for fast register access\n            \"M-#\" = \"consult-register-load\";\n            \"M-'\" = \"consult-register-store\"; # orig. abbrev-prefix-mark (unrelated)\n            \"C-M-#\" = \"consult-register\";\n            # Other custom bindings\n            \"M-y\" = \"consult-yank-pop\"; # orig. yank-pop\n            # M-g bindings (goto-map)\n            \"M-g e\" = \"consult-compile-error\";\n            \"M-g f\" = \"consult-flymake\"; # Alternative: consult-flycheck\n            \"M-g g\" = \"consult-goto-line\"; # orig. goto-line\n            \"M-g M-g\" = \"consult-goto-line\"; # orig. goto-line\n            \"M-g o\" = \"consult-outline\"; # Alternative: consult-org-heading\n            \"M-g m\" = \"consult-mark\";\n            \"M-g k\" = \"consult-global-mark\";\n            \"M-g i\" = \"consult-imenu\";\n            \"M-g I\" = \"consult-imenu-multi\";\n            # M-s bindings (search-map)\n            \"M-s d\" = \"consult-find\";\n            \"M-s D\" = \"consult-locate\";\n            \"M-s g\" = \"consult-grep\";\n            \"M-s G\" = \"consult-git-grep\";\n            \"M-s r\" = \"consult-ripgrep\";\n            \"M-s l\" = \"consult-line\";\n            \"M-s L\" = \"consult-line-multi\";\n            \"M-s k\" = \"consult-keep-lines\";\n            \"M-s u\" = \"consult-focus-lines\";\n            # Isearch integration\n            \"M-s e\" = \"consult-isearch-history\";\n          };\n\n          bindLocal = {\n            isearch-mode-map = {\n              \"M-e\" = \"consult-isearch-history\"; # orig. isearch-edit-string\n              \"M-s e\" = \"consult-isearch-history\"; # orig. isearch-edit-string\n              \"M-s l\" = \"consult-line\"; # needed by consult-line to detect isearch\n              \"M-s L\" = \"consult-line-multi\"; # needed by consult-line to detect isearch\n            };\n            # Minibuffer history\n            minibuffer-local-map = {\n              \"M-s\" = \"consult-history\"; # orig. next-matching-history-element\n              \"M-r\" = \"consult-history\"; # orig. previous-matching-history-element\n            };\n          };\n\n          init = ''\n            ;; These settings can be applied before consult loads since they\n            ;; configure built-in Emacs variables, not consult functions.\n            (setq register-preview-delay 0.5\n                  register-preview-function #'consult-register-format)\n\n            ;; Optionally tweak the register preview window.\n            (advice-add #'register-preview :override #'consult-register-window)\n\n            ;; Use Consult to select xref locations with preview\n            (setq xref-show-xrefs-function #'consult-xref\n                  xref-show-definitions-function #'consult-xref)\n\n            ;; org clock (can be set before consult loads)\n            (setq org-clock-persist t)\n            (with-eval-after-load 'org\n              (org-clock-persistence-insinuate))\n          '';\n\n          config = ''\n            (require 'consult-xref)\n            (require 'consult-org)\n\n            ;; Configure preview keys per-command\n            (consult-customize\n             consult-theme :preview-key '(:debounce 0.2 any)\n             consult-ripgrep consult-git-grep consult-grep\n             consult-bookmark consult-recent-file consult-xref\n             :preview-key '(:debounce 0.4 any))\n\n            ;; Configure the narrowing key.\n            (setq consult-narrow-key \"<\")\n\n            (defvar consult--previous-point nil\n                \"Location of point before entering minibuffer.\n            Used to preselect nearest headings and imenu items.\")\n\n            (defun consult--set-previous-point ()\n              \"Save location of point. Used before entering the minibuffer.\"\n              (setq consult--previous-point (point)))\n\n            (advice-add #'consult-org-heading :before #'consult--set-previous-point)\n            (advice-add #'consult-outline :before #'consult--set-previous-point)\n\n            (advice-add #'vertico--update :after #'consult-vertico--update-choose)\n\n            (defun consult-vertico--update-choose (&rest _)\n              \"Pick the nearest candidate rather than the first after updating candidates.\"\n              (when (and consult--previous-point\n                         (memq current-minibuffer-command\n                               '(consult-org-heading consult-outline)))\n                (setq vertico--index\n                      (max 0 ; if none above, choose the first below\n                           (1- (or (seq-position\n                                    vertico--candidates\n                                    consult--previous-point\n                                    (lambda (cand point-pos) ; counts on candidate list being sorted\n                                      (> (cl-case current-minibuffer-command\n                                           (consult-outline\n                                            (car (consult--get-location cand)))\n                                           (consult-org-heading\n                                            (get-text-property 0 'consult--candidate cand)))\n                                         point-pos)))\n                                   (length vertico--candidates))))))\n              (setq consult--previous-point nil))\n\n            (defun consult-clock-in (&optional match scope resolve)\n              \"Clock into an Org heading.\"\n              (interactive (list nil nil current-prefix-arg))\n              (require 'org-clock)\n              (org-clock-load)\n              (save-window-excursion\n                (consult-org-heading\n                 match\n                 (or scope\n                     (thread-last org-clock-history\n                       (mapcar 'marker-buffer)\n                       (mapcar 'buffer-file-name)\n                       (delete-dups)\n                       (delq nil))\n                     (user-error \"No recent clocked tasks\")))\n                (org-clock-in nil (when resolve\n                                    (org-resolve-clocks)\n                                    (org-read-date t t)))))\n\n            (consult-customize consult-clock-in\n                               :prompt \"Clock in: \"\n                               :preview-key \"M-.\"\n                               :group\n                               (lambda (cand transform)\n                                 (let* ((marker (get-text-property 0 'consult--candidate cand))\n                                        (name (if (member marker org-clock-history)\n                                                  \"*Recent*\"\n                                                (buffer-name (marker-buffer marker)))))\n                                   (if transform (substring cand (1+ (length name))) name))))\n          '';\n        };\n\n        # consult-imenu = {\n        #   enable = true;\n        # };\n\n        # consult-dir = {\n        #   enable = true;\n        #   bind = {\n        #     \"C-x C-d\" = \"consult-dir\";\n        #   };\n        #   config = ''\n        #     (define-key minibuffer-local-completion-map (kbd \"C-x C-d\") #'consult-dir)\n        #     (define-key minibuffer-local-completion-map (kbd \"C-x C-j\") #'consult-dir-jump-file)\n        #   '';\n        # };\n\n        # consult-flycheck = {\n        #   enable = true;\n        #   bindLocal = {\n        #     flycheck-command-map = {\n        #       \"!\" = \"consult-flycheck\";\n        #     };\n        #   };\n        # };\n\n        embark-consult = {\n          enable = true;\n          after = [\n            \"embark\"\n            \"consult\"\n          ];\n          # consult-preview-at-point-mode is obsolete; preview is now automatic\n        };\n      };\n    };\n  };\n}\n"
  },
  {
    "path": "modules/home/emacs/default.nix",
    "content": "{\n  pkgs,\n  lib,\n  config,\n  osConfig,\n  flake,\n  ...\n}:\n\nlet\n  inherit (flake) inputs;\n  inherit (inputs) minimal-emacs-d;\nin\n{\n  imports = [\n    ./consult.nix\n    ./denote.nix\n    ./rust.nix\n    ./typescript.nix\n    ./org-mode.nix\n    ./tree-sitter.nix\n  ];\n\n  home.packages =\n    with pkgs;\n    lib.optionals (stdenv.hostPlatform.system == \"x86_64-linux\") [\n      samba # for tramp\n      mermaid-cli\n    ]\n    ++ [\n      pkgs.rassumfrassum\n    ];\n\n  programs.emacs = {\n    enable = true;\n    package = pkgs.emacs-nox;\n\n    init = {\n      enable = true;\n      checkGeneratedConfig = true;\n      recommendedGcSettings = false;\n\n      prelude = builtins.readFile \"${minimal-emacs-d}/init.el\";\n      earlyInit =\n        (builtins.readFile \"${minimal-emacs-d}/early-init.el\")\n        + \"\\n\"\n        + ''\n          (defconst dw/is-termux (getenv \"ANDROID_ROOT\"))\n\n          ;; list font families with `fc-list : family`\n          (set-face-attribute 'default nil :family \"NotoSansM Nerd Font Mono\" :height 130)\n\n          ;; Add to your init.el before loading nix-ts-mode\n          (setq treesit-font-lock-level 4)\n\n          ;; When Delete Selection mode is enabled, typed text replaces the selection\n          ;; if the selection is active.\n          (delete-selection-mode 1)\n\n          ;; Paren match highlighting\n          (add-hook 'after-init-hook #'show-paren-mode)\n\n          ;; Track changes in the window configuration, allowing undoing actions such as\n          ;; closing windows.\n          (add-hook 'after-init-hook #'winner-mode)\n\n          ;; Window dividers separate windows visually. Window dividers are bars that can\n          ;; be dragged with the mouse, thus allowing you to easily resize adjacent\n          ;; windows.\n          ;; https://www.gnu.org/software/emacs/manual/html_node/emacs/Window-Dividers.html\n          (add-hook 'after-init-hook #'window-divider-mode)\n\n          ;; Constrain vertical cursor movement to lines within the buffer\n          (setq dired-movement-style 'bounded-files)\n\n          ;; Dired buffers: Automatically hide file details (permissions, size,\n          ;; modification date, etc.) and all the files in the `dired-omit-files' regular\n          ;; expression for a cleaner display.\n          (add-hook 'dired-mode-hook #'dired-hide-details-mode)\n\n          ;; Hide files from dired\n          (setq dired-omit-files (concat \"\\\\`[.]\\\\'\"\n                                         \"\\\\|\\\\(?:\\\\.js\\\\)?\\\\.meta\\\\'\"\n                                         \"\\\\|\\\\.\\\\(?:elc|a\\\\|o\\\\|pyc\\\\|pyo\\\\|swp\\\\|class\\\\)\\\\'\"\n                                         \"\\\\|^\\\\.DS_Store\\\\'\"\n                                         \"\\\\|^\\\\.\\\\(?:svn\\\\|git\\\\)\\\\'\"\n                                         \"\\\\|^\\\\.ccls-cache\\\\'\"\n                                         \"\\\\|^__pycache__\\\\'\"\n                                         \"\\\\|^\\\\.project\\\\(?:ile\\\\)?\\\\'\"\n                                         \"\\\\|^flycheck_.*\"\n                                         \"\\\\|^flymake_.*\"))\n          (add-hook 'dired-mode-hook #'dired-omit-mode)\n\n          ;; dired: Group directories first\n          (with-eval-after-load 'dired\n            (let ((args \"--group-directories-first -ahlv\"))\n              (when (or (eq system-type 'darwin) (eq system-type 'berkeley-unix))\n                (if-let* ((gls (executable-find \"gls\")))\n                    (setq insert-directory-program gls)\n                  (setq args nil)))\n              (when args\n                (setq dired-listing-switches args))))\n\n          ;; Enables visual indication of minibuffer recursion depth after initialization.\n          (add-hook 'after-init-hook #'minibuffer-depth-indicate-mode)\n\n          ;; Configure Emacs to ask for confirmation before exiting\n          (setq confirm-kill-emacs 'y-or-n-p)\n        '';\n\n      usePackage = {\n        # logview.enable = true;\n\n        benchmark-init = {\n          enable = false;\n          earlyInit = ''\n            (require 'benchmark-init)\n            (benchmark-init/activate)\n          '';\n        };\n\n        journalctl-mode = {\n          enable = true;\n          defer = true;\n          command = [ \"journalctl-mode\" ];\n        };\n\n        project = {\n          enable = true;\n          defer = 1;\n          command = [\n            \"project-find-file\"\n            \"project-switch-to-buffer\"\n            \"project-switch-project\"\n          ];\n          custom = {\n            \"project-mode-line\" = \"t\";\n            \"project-kill-buffers-display-buffer-list\" = \"t\";\n          };\n          config = lib.optionalString config.programs.jujutsu.enable ''\n            (add-to-list 'project-vc-extra-root-markers \".jj\")\n          '';\n        };\n\n        consult-project-extra = {\n          enable = true;\n          custom = {\n            \"consult-project-function\" = \"#'consult-project-extra-project-fn\";\n          };\n          bind = {\n            \"C-c p f\" = \"consult-project-extra-find\";\n            \"C-c p o\" = \"consult-project-extra-find-other-window\";\n          };\n        };\n\n        jinx = {\n          enable = true;\n          hook = [\n            \"(emacs-startup . global-jinx-mode)\"\n          ];\n          bind = {\n            \"M-$\" = \"jinx-correct\";\n            \"C-M-$\" = \"jinx-languages\";\n          };\n          custom = {\n            \"jinx-languages\" = ''\"fr_CA en_CA\"'';\n          };\n        };\n\n        p-search = {\n          enable = true;\n          defer = true;\n          command = [ \"p-search\" ];\n          config = ''\n            (require 'p-search-x-denote)\n          '';\n        };\n\n        agent-shell = {\n          enable = true;\n          extraPackages = [\n            pkgs.claude-agent-acp\n          ];\n          config = ''\n            (setopt agent-shell-file-completion-enabled t)\n          '';\n        };\n\n        gleam-ts-mode = {\n          enable = true;\n          extraPackages = [\n            pkgs.glas\n          ];\n          hook = [\n            \"(gleam-ts-mode . eglot-ensure)\"\n          ];\n          config = ''\n            (with-eval-after-load 'eglot\n              (setq eglot-server-programs\n                    (cons '(gleam-ts-mode . (\"rass\" \"--\" \"glas\"))\n                    (assoc-delete-all 'gleam-ts-mode eglot-server-programs))))\n\n            (add-hook 'gleam-ts-mode-hook\n                      (lambda () (add-hook 'after-save-hook #'eglot-format nil t)))\n          '';\n          extraConfig = ''\n            :mode (rx \".gleam\" eos)\n          '';\n        };\n\n        dock = {\n          enable = true;\n          defer = true;\n          command = [ \"dock-set-needs-attention\" ];\n          init = ''\n            (add-hook 'compilation-finish-functions\n                       (lambda (_buf _msg) (dock-set-needs-attention)))\n          '';\n        };\n\n        dired = {\n          enable = true;\n          earlyInit = ''\n            (require 'dired-x)\n            (require 'wdired)\n            (require 'hl-line)\n            (require 'mouse)\n            (require 'image-dired)\n            (require 'image-dired-dired)\n          '';\n          extraPackages = [\n            pkgs.imagemagick\n          ];\n          bindLocal = {\n            dired-mode-map = {\n              \"M-o\" = \"dired-omit-mode\";\n              \"E\" = \"wdired-change-to-wdired-mode\";\n              \"M-n\" = \"dired-next-dirline\";\n              \"M-p\" = \"dired-prev-dirline\";\n              \"]\" = \"dired-next-subdir\";\n              \"[\" = \"dired-prev-subdir\";\n              \"A-M-<mouse-1>\" = \"browse-url-of-dired-file\";\n              \"<backtab>\" = \"dired-prev-subdir\";\n              \"TAB\" = \"dired-next-subdir\";\n              \"M-j\" = \"dired-goto-subdir\";\n              \";\" = \"image-dired-dired-toggle-marked-thumbs\";\n            };\n            image-dired-thumbnail-mode-map = {\n              \"n\" = \"image-dired-display-next\";\n              \"p\" = \"image-dired-display-previous\";\n            };\n          };\n          config = ''\n            (add-hook 'dired-mode-hook 'hl-line-mode)\n            (add-hook 'dired-mode-hook 'context-menu-mode)\n            (add-hook 'dired-mode-hook 'dired-async-mode)\n            (add-hook\n             'dired-mode-hook\n             (lambda ()\n               (setq-local mouse-1-click-follows-link 'double)))\n          '';\n        };\n\n        casual-suite = {\n          enable = true;\n          after = [\n            \"org-agenda\"\n          ];\n          bind = {\n            \"C-o\" = \"casual-editkit-main-tmenu\";\n            \"M-g\" = \"casual-avy-tmenu\";\n\n            \"C-c w\" = \"casual-editkit-windows-tmenu\";\n            \"C-c r\" = \"casual-editkit-rectangle-tmenu\";\n            \"C-c g\" = \"casual-editkit-registers-tmenu\";\n            \"C-c p\" = \"casual-editkit-project-tmenu\";\n          };\n          bindLocal = {\n            bookmark-bmenu-mode-map = {\n              \"C-o\" = \"casual-bookmarks-tmenu\";\n              \"J\" = \"bookmark-jump\";\n            };\n            calc-mode-map.\"C-o\" = \"casual-calc-tmenu\";\n            css-mode-map.\"M-m\" = \"casual-css-tmenu\";\n            csv-mode-map.\"M-m\" = \"casual-csv-tmenu\";\n            dired-mode-map = {\n              \"C-o\" = \"casual-dired-tmenu\";\n              \"s\" = \"casual-dired-sort-by-tmenu\";\n              \"/\" = \"casual-dired-search-replace-tmenu\";\n            };\n            ediff-mode-map.\"C-o\" = \"casual-ediff-tmenu\";\n            isearch-mode-map.\"C-o\" = \"casual-isearch-tmenu\";\n            org-agenda-mode-map = {\n              \"C-o\" = \"casual-agenda-tmenu\";\n              \"M-j\" = \"org-agenda-clock-goto\";\n              \"J\" = \"bookmark-jump\";\n            };\n            org-mode-map.\"M-m\" = \"casual-org-tmenu\";\n            org-table-fedit-map.\"M-m\" = \"casual-org-table-fedit-tmenu\";\n            reb-lisp-mode-map.\"C-o\" = \"casual-re-builder-tmenu\";\n            reb-mode-map.\"C-o\" = \"casual-re-builder-tmenu\";\n            symbol-overlay-map.\"C-o\" = \"casual-symbol-overlay-tmenu\";\n\n            compilation-mode-map.\"C-o\" = \"casual-compile-tmenu\";\n            grep-mode-map.\"C-o\" = \"casual-compile-tmenu\";\n\n            compilation-mode-map = {\n              \"k\" = \"compilation-previous-error\";\n              \"j\" = \"compilation-next-error\";\n              \"o\" = \"compilation-display-error\";\n              \"[\" = \"compilation-previous-file\";\n              \"]\" = \"compilation-next-file\";\n            };\n\n            grep-mode-map = {\n              \"k\" = \"compilation-previous-error\";\n              \"j\" = \"compilation-next-error\";\n              \"o\" = \"compilation-display-error\";\n              \"[\" = \"compilation-previous-file\";\n              \"]\" = \"compilation-next-file\";\n            };\n\n            html-ts-mode-map.\"M-m\" = \"casual-html-tmenu\";\n            html-ts-mode-map.\"C-c m\" = \"casual-html-tags-tmenu\";\n            image-mode-map.\"C-o\" = \"casual-image-tmenu\";\n\n            ibuffer-mode-map = {\n              \"C-o\" = \"casual-ibuffer-tmenu\";\n              \"F\" = \"casual-ibuffer-filter-tmenu\";\n              \"s\" = \"casual-ibuffer-sortby-tmenu\";\n              \"{\" = \"ibuffer-backwards-next-marked\";\n              \"}\" = \"ibuffer-forward-next-marked\";\n              \"[\" = \"ibuffer-backward-filter-group\";\n              \"]\" = \"ibuffer-forward-filter-group\";\n              \"$\" = \"ibuffer-toggle-filter-group\";\n              \"<double-mouse-1>\" = \"ibuffer-visit-buffer\";\n              \"M-<double-mouse-1>\" = \"ibuffer-visit-buffer-other-window\";\n            };\n          };\n\n          # https://kickingvegas.github.io/casual/Ediff-Install.html\n          config = ''\n            (casual-ediff-install)\n            (setq ediff-keep-variants nil\n                  ediff-window-setup-function 'ediff-setup-windows-plain\n                  ediff-split-window-function 'split-window-horizontally)\n\n            (require 'hl-line)\n            (add-hook 'bookmark-bmenu-mode-hook #'hl-line-mode)\n            (add-hook 'ibuffer-mode-hook #'hl-line-mode)\n            (add-hook 'ibuffer-mode-hook #'ibuffer-auto-mode)\n\n            ;; disable line wrap\n            (add-hook 'csv-mode-hook\n                      (lambda ()\n                        (visual-line-mode -1)\n                        (toggle-truncate-lines 1)))\n\n            ;; auto detect separator\n            (add-hook 'csv-mode-hook #'csv-guess-set-separator)\n            ;; turn on field alignment\n            (add-hook 'csv-mode-hook #'csv-align-mode)\n          '';\n        };\n\n        # inter-present-mode = {\n        #   enable = true;\n        #   package = _epkgs: pkgs.emacsPackages.inter-present-mode;\n        #   command = [\n        #     \"inter-present-mode\"\n        #   ];\n        #   # bindLocal = {\n        #   #   emo-map.\"C-s\" = \"(lambda () (interactive) (inter-present-mode 'toggle))\";\n        #   # };\n        #   config = ''\n        #     (keymap-local-unset \"C-z\")\n        #     (setopt inter-present-mode-keymap-prefix \"C-z\"\n        #       inter-present-mode-face-height 280\n        #       inter-present-mode-start-heading t)\n        #   '';\n        # };\n\n        kele = {\n          enable = true;\n          defer = true;\n          command = [\n            \"kele-mode\"\n            \"kele-get\"\n          ];\n        };\n\n        eglot-multi-preset = {\n          enable = true;\n          package = _epkgs: pkgs.emacs.pkgs.eglot-multi-preset;\n          extraPackages = with pkgs; [\n            tailwindcss-language-server\n            vscode-langservers-extracted\n          ];\n          config = ''\n            (eglot-multi-preset-mode 1)\n          '';\n        };\n\n        treesit-sexp = {\n          enable = true;\n          package = _epkgs: pkgs.emacs.pkgs.treesit-sexp;\n          config = ''\n            (global-treesit-sexp-mode 1)\n          '';\n        };\n\n        majutsu = {\n          enable = false;\n          package = _epkgs: pkgs.emacs.pkgs.majutsu;\n        };\n\n        # combobulate = {\n        #   enable = true;\n        #   package = _epkgs: pkgs.emacsPackages.combobulate;\n        #   config = ''\n        #     ;; You can customize Combobulate's key prefix here.\n        #     ;; Note that you may have to restart Emacs for this to take effect!\n        #     (setq combobulate-key-prefix \"C-c o\")\n\n        #     ;; Optional, but recommended.\n        #     ;;\n        #     ;; You can manually enable Combobulate with `M-x\n        #     ;; combobulate-mode'.\n        #     :hook ((python-ts-mode . combobulate-mode)\n        #            (js-ts-mode . combobulate-mode)\n        #            (css-ts-mode . combobulate-mode)\n        #            (rust-ts-mode . combobulate-mode)\n        #            (yaml-ts-mode . combobulate-mode)\n        #            (typescript-ts-mode . combobulate-mode)\n        #            (tsx-ts-mode . combobulate-mode))\n        #   '';\n        # };\n\n        disproject = {\n          enable = true;\n          bindLocal = {\n            ctl-x-map.\"p\" = \"disproject-dispatch\";\n          };\n        };\n\n        pulsar = {\n          enable = true;\n          hook = [ \"(after-init . pulsar-global-mode)\" ];\n          config = ''\n            (add-hook 'next-error-hook #'pulsar-pulse-line)\n            (add-hook 'minibuffer-setup-hook #'pulsar-pulse-line-blue)\n\n            ;; integration with the `consult' package:\n            (add-hook 'consult-after-jump-hook #'pulsar-recenter-top)\n            (add-hook 'consult-after-jump-hook #'pulsar-reveal-entry)\n          '';\n        };\n\n        dashboard = {\n          enable = true;\n          config = ''\n            (setq dashboard-projects-backend 'project-el)\n            (setq dashboard-items '((recents   . 5)\n                                    (bookmarks . 5)\n                                    (projects  . 5)\n                                    (agenda    . 5)\n                                    (registers . 5)))\n            (setq dashboard-week-agenda t)\n            (dashboard-setup-startup-hook)\n          '';\n        };\n\n        # sqlformat = {\n        #   enable = true;\n        #   config = ''\n        #     (setq sqlformat-command 'pgformatter)\n        #   '';\n        # };\n\n        # activities = {\n        #   enable = true;\n        #   bind = {\n        #     # \"M-g d\" = \"dogears-go\";\n        #     \"C-x C-a C-n\" = \"activities-new\";\n        #     \"C-x C-a C-a\" = \"activities-resume\";\n        #     \"C-x C-a C-s\" = \"activities-suspend\";\n        #     \"C-x C-a C-k\" = \"activities-kill\";\n        #     \"C-x C-a RET\" = \"activities-switch\";\n        #     \"C-x C-a g\" = \"activities-revert\";\n        #     \"C-x C-a l\" = \"activities-list\";\n        #   };\n        #   init = ''\n        #     ;; Prevent `edebug' default bindings from interfering.\n        #     (setq edebug-inhibit-emacs-lisp-mode-bindings t)\n        #   '';\n        # };\n\n        batppuccin-mocha-theme = {\n          enable = true;\n          package = _epkgs: pkgs.emacs.pkgs.batppuccin-emacs;\n          config = ''\n            (load-theme 'batppuccin-mocha t)\n          '';\n        };\n\n        dwim-shell-command = {\n          enable = true;\n          defer = true;\n          command = [\n            \"dwim-shell-command\"\n            \"dwim-shell-command-on-marked-files\"\n          ];\n          extraPackages = [\n            pkgs.curl\n            pkgs.sendme\n            pkgs.zrok\n          ];\n          config = ''\n            (require 'dwim-shell-commands)\n\n            (defun my/dwim-shell-commands-zrok-serve-dir ()\n              \"HTTP serve current directory.\"\n              (interactive)\n              (cond ((executable-find \"zrok\")\n                     (dwim-shell-command-on-marked-files\n                      \"zrok serve current dir\"\n                      \"zrok share public --backend-mode web --headless .\"\n                      :utils \"zrok\"\n                      :focus-now t\n                      :no-progress t))\n                    (t\n                     (error \"zrok not found\"))))\n\n            (defun my/dwim-shell-commands-sendme-send ()\n                          \"Send current file or dir with sendme.\"\n                          (interactive)\n                          (cond ((executable-find \"sendme\")\n                                (dwim-shell-command-on-marked-files\n                                  \"sendme send file or dir\"\n                                  \"sendme send --clipboard '<<f>>'\"\n                                  :utils \"sendme\"\n                                  ))\n                                (t\n                                (error \"sendme not found\"))))\n\n            (defun my/syncthing-get-api-key ()\n              \"Get Syncthing API key from ~/.local/state/syncthing/config.xml.\"\n              (let ((config-file (expand-file-name \"~/.local/state/syncthing/config.xml\")))\n                (unless (file-exists-p config-file)\n                  (error \"Syncthing config not found: %s\" config-file))\n                (with-temp-buffer\n                  (insert-file-contents config-file)\n                  (goto-char (point-min))\n                  (if (re-search-forward \"<apikey>\\\\([^<]+\\\\)</apikey>\" nil t)\n                      (match-string 1)\n                    (error \"No <apikey> found in %s\" config-file)))))\n\n            (defun my/syncthing-get-folders ()\n              \"Fetch Syncthing folders via REST API.\"\n              (require 'json)\n              (let ((api-key (my/syncthing-get-api-key)))\n                (unless api-key (error \"No Syncthing API key found\"))\n                (with-temp-buffer\n                  (insert (format \"header \\\"X-API-Key: %s\\\"\\n\" api-key))\n                  (let ((exit-code (call-process-region (point-min) (point-max)\n                                                        \"curl\" t t nil\n                                                        \"-s\" \"--config\" \"-\"\n                                                        \"http://localhost:8384/rest/config/folders\")))\n                    (unless (eq exit-code 0)\n                      (error \"curl failed with exit code %d: %s\" exit-code (buffer-string)))\n                    (goto-char (point-min))\n                    (json-parse-buffer :object-type 'alist)))))\n\n            (defun my/dwim-shell-commands-syncthing-copy ()\n              \"Copy file(s) to a Syncthing folder.\"\n              (interactive)\n              (let* ((folders (my/syncthing-get-folders))\n                     (folder-alist (mapcar (lambda (f)\n                                            (cons (or (alist-get 'label f)\n                                                      (alist-get 'id f))\n                                                  (alist-get 'path f)))\n                                          folders))\n                     (name (completing-read \"Syncthing folder: \"\n                                            (mapcar #'car folder-alist) nil t))\n                     (dest (expand-file-name (cdr (assoc name folder-alist)))))\n                (dwim-shell-command-on-marked-files\n                 (format \"Copy to Syncthing folder '%s'\" name)\n                 (format \"cp -r '<<f>>' '%s/'\" dest)\n                 :utils \"cp\"\n                 :silent-success t)))\n          '';\n        };\n\n        # consult-recoll.enable = true;\n\n        tramp = {\n          enable = false;\n          custom = {\n            \"tramp-default-method\" = ''\"rsync\"'';\n          };\n          config = ''\n            (setq vc-ignore-dir-regexp\n                  (format \"\\\\(%s\\\\)\\\\|\\\\(%s\\\\)\"\n                          vc-ignore-dir-regexp\n                          tramp-file-name-regexp))\n\n            (setq remote-file-name-inhibit-locks t\n                  remote-file-name-inhibit-auto-save-visited t)\n\n            (setq tramp-copy-size-limit (* 1024 1024) ;; 1MB\n                  tramp-verbose 2)\n          '';\n        };\n\n        # ultra-scroll = {\n        #   enable = true;\n        #   package = _epkgs: pkgs.emacs.pkgs.ultra-scroll;\n        #   init = ''\n        #     (setq scroll-conservatively 101 ; important!\n        #             scroll-margin 0)\n        #   '';\n        #   config = ''\n        #     (ultra-scroll-mode 1)\n        #   '';\n        # };\n\n        # gptel = {\n        #   enable = true;\n        #   package = _epkgs: pkgs.emacs.pkgs.gptel;\n        #   init = ''\n        #     (setq gptel-model \"gpt-4o\")\n        #   '';\n        #   config = ''\n        #     (require 'gptel-curl)\n        #     (require 'auth-source)\n        #     (require 'gptel-kagi)\n\n        #     (defvar my-kagi-service \"kagi-service-name\") ;; Replace with your service name as in the auth-info file\n        #     (defvar my-kagi-user \"bigras.bruno@gmail.com\") ;; Replace with your user name as in the auth-info file\n\n        #     (let ((credential (auth-source-user-and-password my-kagi-service my-kagi-user)))\n        #       (defvar gptel--kagi\n        #         (gptel-make-kagi \"Kagi\" :key (if credential (cadr credential) \"\"))))\n\n        #     ;; Function that requests kagi for a url summary and shows it in a side-window\n        #     (defun my/kagi-summarize (url)\n        #       (let ((gptel-backend gptel--kagi)\n        #             (gptel-model \"summarize:agnes\")) ;or summarize:cecil, summarize:daphne, summarize:muriel\n        #         (gptel-request\n        #             url\n        #           :callback\n        #           (lambda (response info)\n        #             (if response\n        #                 (with-current-buffer (get-buffer-create \"*Kagi Summary*\")\n        #                   (let ((inhibit-read-only t))\n        #                     (erase-buffer)\n        #                     (visual-line-mode 1)\n        #                     (insert response)\n        #                     (display-buffer\n        #                      (current-buffer)\n        #                      '((display-buffer-in-side-window\n        #                         display-buffer-at-bottom)\n        #                        (side . bottom))))\n        #                   (special-mode 1))\n        #                 (message \"gptel-request failed with message: %s\"\n        #                          (plist-get info :status)))))))\n\n        #     ;; Make this function available to Embark\n        #     ;;(keymap-set embark-url-map \"=\" #'my/kagi-summarize)\n\n        #     (cl-defun my/clean-up-gptel-refactored-code (beg end)\n        #       \"Clean up the code responses for refactored code in the current buffer.\n\n        #                 The response is placed between BEG and END.  The current buffer is\n        #                 guaranteed to be the response buffer.\"\n        #       (when gptel-mode          ; Don't want this to happen in the dedicated buffer.\n        #         (cl-return-from my/clean-up-gptel-refactored-code))\n        #       (when (and beg end)\n        #         (save-excursion\n        #           (let ((contents\n        #                  (replace-regexp-in-string\n        #                   \"\\n*``.*\\n*\" \"\"\n        #                   (buffer-substring-no-properties beg end))))\n        #             (delete-region beg end)\n        #             (goto-char beg)\n        #             (insert contents))\n        #           ;; Indent the code to match the buffer indentation if it's messed up.\n        #           (indent-region beg end)\n        #           (pulse-momentary-highlight-region beg end))))\n\n        #     (add-hook 'gptel-post-response-functions #'my/clean-up-gptel-refactored-code)\n        #   '';\n        # };\n\n        # # Save and restore frames and windows with their buffers in Emacs\n        # burly.enable = true;\n\n        # autorevert = {\n        #   enable = true;\n        #   command = [ \"auto-revert-mode\" ];\n        # };\n\n        # dogears = {\n        #   enable = true;\n        #   bind = {\n        #     \"M-g d\" = \"dogears-go\";\n        #     \"M-g M-b\" = \"dogears-back\";\n        #     \"M-g M-f\" = \"dogears-forward\";\n        #     \"M-g M-d\" = \"dogears-list\";\n        #     \"M-g M-D\" = \"dogears-sidebar\";\n        #   };\n        #   config = ''\n        #     (dogears-mode)\n        #   '';\n        # };\n\n        # copy-as-format = {\n        #   enable = true;\n        #   command = [\n        #     \"copy-as-format\"\n        #     \"copy-as-format-asciidoc\"\n        #     \"copy-as-format-bitbucket\"\n        #     \"copy-as-format-disqus\"\n        #     \"copy-as-format-github\"\n        #     \"copy-as-format-gitlab\"\n        #     \"copy-as-format-hipchat\"\n        #     \"copy-as-format-html\"\n        #     \"copy-as-format-jira\"\n        #     \"copy-as-format-markdown\"\n        #     \"copy-as-format-mediawiki\"\n        #     \"copy-as-format-org-mode\"\n        #     \"copy-as-format-pod\"\n        #     \"copy-as-format-rst\"\n        #     \"copy-as-format-slack\"\n        #   ];\n        # };\n\n        # https://github.com/bbatsov/crux\n        crux = {\n          enable = true;\n          bind = {\n            \"C-c o\" = \"crux-open-with\";\n            \"S-<return>\" = \"crux-smart-open-line\";\n            \"s-r\" = \"crux-recentf-find-file\";\n            \"C-<backspace>\" = \"crux-kill-line-backwards\";\n          };\n          config = ''\n            (global-set-key [remap move-beginning-of-line] #'crux-move-beginning-of-line)\n            (global-set-key [remap kill-whole-line] #'crux-kill-whole-line)\n            (global-set-key [remap keyboard-quit] #'crux-keyboard-quit-dwim)\n\n            (setq save-abbrevs 'silently)\n            (setq-default abbrev-mode t)\n          '';\n        };\n\n        # ws-butler = {\n        #   enable = true;\n        #   hook = [\n        #     \"(text-mode . ws-butler-mode)\"\n        #     \"(prog-mode . ws-butler-mode)\"\n        #   ];\n        # };\n\n        deadgrep = {\n          enable = true;\n          bind = {\n            \"C-x f\" = \"deadgrep\";\n          };\n        };\n\n        copilot = {\n          enable = true;\n          hook = [\n            \"(prog-mode . copilot-mode)\"\n          ];\n          bindLocal = {\n            copilot-completion-map = {\n              \"<tab>\" = \"copilot-accept-completion\";\n              \"TAB\" = \"copilot-accept-completion\";\n              \"C-<tab>\" = \"copilot-accept-completion-by-word\";\n              \"C-TAB\" = \"copilot-accept-completion-by-word\";\n              \"C-n\" = \"copilot-next-completion\";\n              \"C-p\" = \"copilot-previous-completion\";\n            };\n          };\n        };\n\n        envrc = {\n          enable = true;\n          defer = 1;\n          # package = _epkgs: pkgs.emacs.pkgs.envrc;\n          command = [ \"envrc-global-mode\" ];\n          config = ''\n            (setq envrc-remote t)\n          '';\n          hook = [ \"(after-init . envrc-global-mode)\" ];\n        };\n\n        # dockerfile-mode.enable = true;\n\n        # eat = {\n        #   enable = true;\n        #   extraConfig = ''\n        #     :hook ('eshell-load-hook #'eat-eshell-mode)\n        #   '';\n        # };\n\n        doom-modeline = {\n          enable = true;\n          hook = [ \"(after-init . doom-modeline-mode)\" ];\n        };\n\n        drag-stuff = {\n          enable = true;\n          config = ''\n            (drag-stuff-global-mode 1)\n            (drag-stuff-define-keys)\n          '';\n        };\n\n        # diff-hl = {\n        #   enable = true;\n        #   config = \"(global-diff-hl-mode)\";\n        # };\n\n        # eldoc = {\n        #   enable = true;\n        #   command = [ \"eldoc-mode\" ];\n        # };\n\n        # eldoc-box = {\n        #   enable = true;\n        # };\n\n        # hcl-mode.enable = true;\n\n        # graphql-mode.enable = true;\n\n        # hydra = {\n        #   enable = true;\n        #   # after = [ \"org-tempo\" ];\n        #   after = [\n        #     \"org\"\n        #     \"org-tempo\"\n        #   ];\n        #   config = ''\n        #     (progn\n        #       (defhydra hydra-org-template (:color blue :hint nil)\n        #         \"\n        #                  _c_enter  _q_uote     _e_macs-lisp    _L_aTeX:\n        #                  _l_atex   _E_xample   _p_erl          _i_ndex:\n        #                  _a_scii   _v_erse     _P_erl tangled  _I_NCLUDE:\n        #                  _s_rc     _n_ote      plant_u_ml      _H_TML:\n        #                  _h_tml    ^ ^         ^ ^             _A_SCII:\n        #                 \"\n        #         (\"s\" (hot-expand \"<s\"))\n        #         (\"E\" (hot-expand \"<e\"))\n        #         (\"q\" (hot-expand \"<q\"))\n        #         (\"v\" (hot-expand \"<v\"))\n        #         (\"n\" (hot-expand \"<not\"))\n        #         (\"c\" (hot-expand \"<c\"))\n        #         (\"l\" (hot-expand \"<l\"))\n        #         (\"h\" (hot-expand \"<h\"))\n        #         (\"a\" (hot-expand \"<a\"))\n        #         (\"L\" (hot-expand \"<L\"))\n        #         (\"i\" (hot-expand \"<i\"))\n        #         (\"e\" (hot-expand \"<s\" \"emacs-lisp\"))\n        #         (\"p\" (hot-expand \"<s\" \"perl\"))\n        #         (\"u\" (hot-expand \"<s\" \"plantuml :file CHANGE.png\"))\n        #         (\"P\" (hot-expand \"<s\" \"perl\" \":results output :exports both :shebang \\\"#!/usr/bin/env perl\\\"\\n\"))\n        #         (\"I\" (hot-expand \"<I\"))\n        #         (\"H\" (hot-expand \"<H\"))\n        #         (\"A\" (hot-expand \"<A\"))\n        #         (\"<\" self-insert-command \"ins\")\n        #         (\"o\" nil \"quit\"))\n\n        #       ;; Reset the org-template expnsion system, this is need after upgrading to org 9 for some reason\n        #       (setq org-structure-template-alist (eval (car (get 'org-structure-template-alist 'standard-value))))\n        #       (defun hot-expand (str &optional mod header)\n        #         \"Expand org template.\n\n        #                 STR is a structure template string recognised by org like <s. MOD is a\n        #                 string with additional parameters to add the begin line of the\n        #                 structure element. HEADER string includes more parameters that are\n        #                 prepended to the element after the #+HEADER: tag.\"\n        #         (let (text)\n        #           (when (region-active-p)\n        #             (setq text (buffer-substring (region-beginning) (region-end)))\n        #             (delete-region (region-beginning) (region-end))\n        #             (deactivate-mark))\n        #           (when header (insert \"#+HEADER: \" header) (forward-line))\n        #           (insert str)\n        #           (org-tempo-complete-tag)\n        #           (when mod (insert mod) (forward-line))\n        #           (when text (insert text))))\n\n        #       (define-key org-mode-map \"<\"\n        #         (lambda () (interactive)\n        #           (if (or (region-active-p) (looking-back \"^\"))\n        #               (hydra-org-template/body)\n        #               (self-insert-command 1))))\n        #       )\n        #   '';\n        # };\n\n        # # Remember where we where in a previously visited file. Built-in.\n        # saveplace = {\n        #   enable = true;\n        #   defer = 1;\n        #   config = ''\n        #     (setq-default save-place t)\n        #     (setq save-place-file (locate-user-emacs-file \"places\"))\n        #   '';\n        # };\n\n        # apheleia = {\n        #   enable = true;\n        #   config = ''\n        #     (apheleia-global-mode +1)\n        #   '';\n        # };\n\n        # which-key = {\n        #   enable = true;\n        #   command = [\n        #     \"which-key-mode\"\n        #     \"which-key-add-major-mode-key-based-replacements\"\n        #   ];\n        #   defer = 3;\n        #   init = ''\n        #     (which-key-mode)\n        #   '';\n        #   config = ''\n        #     (setq which-key-idle-delay 0.3)\n        #   '';\n        # };\n\n        all-the-icons = {\n          enable = pkgs.stdenv.hostPlatform.system == \"x86_64-linux\";\n          defer = true;\n        };\n\n        all-the-icons-completion = {\n          enable = pkgs.stdenv.hostPlatform.system == \"x86_64-linux\";\n          hook = [ \"(marginalia-mode . all-the-icons-completion-marginalia-setup)\" ];\n        };\n\n        # dired-plus = {\n        #   enable = true;\n        #   # package = _epkgs: pkgs.emacs.pkgs.dired-plus;\n        # };\n\n        pdf-tools = {\n          enable = true;\n        };\n\n        dired-du = {\n          enable = true;\n          defer = true;\n          command = [ \"dired-du-mode\" ];\n        };\n\n        gumshoe = {\n          enable = true;\n          init = ''\n            ;; Enabing global-gumshoe-mode will initiate tracking\n            (global-gumshoe-mode +1)\n            ;; customize peruse slot display if you like\n            (setf gumshoe-slot-schema '(time buffer position line))\n            ;; personally, I use perspectives\n            ;; (setf gumshoe-slot-schema '(perspective time buffer position line))\n            ;; disable auto-cancel of backtracking\n            (setf gumshoe-auto-cancel-backtracking-p nil)\n          '';\n        };\n\n        consult-gumshoe = {\n          enable = true;\n          after = [\n            \"consult\"\n            \"gumshoe\"\n          ];\n        };\n\n        all-the-icons-dired = {\n          enable = pkgs.stdenv.hostPlatform.system == \"x86_64-linux\";\n          after = [\n            \"dired\"\n            \"all-the-icons\"\n          ];\n          hook = [ \"(dired-mode . all-the-icons-dired-mode)\" ];\n        };\n\n        # flycheck-eglot = {\n        #   # enable = pkgs.stdenv.hostPlatform.system == \"x86_64-linux\";\n        #   enable = true;\n        #   after = [\n        #     \"eglot\"\n        #     \"flycheck\"\n        #   ];\n        #   # hook = [ \"(flycheck-mode . eglot-flycheck-setup)\" ];\n        #   config = ''\n        #     (global-flycheck-eglot-mode 1)\n        #   '';\n        # };\n\n        emacs = {\n          enable = true;\n          custom = {\n            \"tab-always-indent\" = \"'complete\";\n            \"text-mode-ispell-word-completion\" = \"nil\";\n            \"read-extended-command-predicate\" = \"#'command-completion-default-include-p\";\n          };\n        };\n\n        tempel = {\n          enable = true;\n          bind = {\n            \"M-+\" = \"tempel-complete\";\n            \"M-*\" = \"tempel-insert\";\n          };\n          init = ''\n            ;; Setup completion at point\n            (defun tempel-setup-capf ()\n              ;; Add the Tempel Capf to `completion-at-point-functions'.  `tempel-expand'\n              ;; only triggers on exact matches. We add `tempel-expand' *before* the main\n              ;; programming mode Capf, such that it will be tried first.\n              (setq-local completion-at-point-functions\n                          (cons #'tempel-expand completion-at-point-functions))\n\n              ;; Alternatively use `tempel-complete' if you want to see all matches.  Use\n              ;; a trigger prefix character in order to prevent Tempel from triggering\n              ;; unexpectly.\n              ;; (setq-local corfu-auto-trigger \"/\"\n              ;;             completion-at-point-functions\n              ;;             (cons (cape-capf-trigger #'tempel-complete ?/)\n              ;;                   completion-at-point-functions))\n            )\n\n            (add-hook 'conf-mode-hook 'tempel-setup-capf)\n            (add-hook 'prog-mode-hook 'tempel-setup-capf)\n            (add-hook 'text-mode-hook 'tempel-setup-capf)\n\n            ;; Optionally make the Tempel templates available to Abbrev,\n            ;; either locally or globally. `expand-abbrev' is bound to C-x '.\n            ;; (add-hook 'prog-mode-hook #'tempel-abbrev-mode)\n            ;; (global-tempel-abbrev-mode)\n          '';\n        };\n\n        # surround = {\n        #   enable = true;\n        #   bind = {\n        #     \"M-'\" = \"surround-keymap\";\n        #   };\n        # };\n\n        tempel-collection = {\n          enable = true;\n          after = [ \"tempel\" ];\n        };\n\n        corfu = {\n          enable = true;\n          hook = [ \"(after-init . global-corfu-mode)\" ];\n          config = ''\n            (corfu-popupinfo-mode)\n            ;; Sane defaults to make Corfu feel like a modern, automatic popup\n            (setq corfu-cycle t              ; Allow cycling through candidates\n                  corfu-auto t               ; Enable auto-completion\n                  corfu-preview-current nil  ; Don't preview current candidate\n                  corfu-separator ?\\s        ; Use space as separator\n                  corfu-quit-at-boundary 'separator ; Hide popup when you type space\n                  corfu-quit-no-match 'separator    ; Hide popup if there are no matches\n                  corfu-auto-prefix 2        ; Start completion after 2 char\n                  corfu-auto-delay 0.1       ; Wait 0.1s before showing popup\n                  corfu-popupinfo-delay '(1.0 . 0.5)\n                  )\n          '';\n        };\n\n        nerd-icons-corfu = {\n          enable = true;\n          after = [ \"corfu\" ];\n          config = ''\n            (add-to-list 'corfu-margin-formatters #'nerd-icons-corfu-formatter)\n          '';\n        };\n\n        cape = {\n          enable = true;\n          # config = ''\n          #   (add-to-list 'completion-at-point-functions #'cape-dabbrev) ; in-buffer\n          #   (add-to-list 'completion-at-point-functions #'cape-file)    ; file paths\n          # '';\n          bind = {\n            # \"C-.\" = \"embark-act\";\n            \"C-c p\" = \"cape-prefix-map\";\n          };\n          init = ''\n            ;; Add to the global default value of `completion-at-point-functions' which is\n            ;; used by `completion-at-point'.  The order of the functions matters, the\n            ;; first function returning a result wins.  Note that the list of buffer-local\n            ;; completion functions takes precedence over the global list.\n            ;;(add-hook 'completion-at-point-functions #'cape-dabbrev)\n            ;;(add-hook 'completion-at-point-functions #'cape-file)\n            ;;(add-hook 'completion-at-point-functions #'cape-elisp-block)\n            ;; (add-hook 'completion-at-point-functions #'cape-history)\n\n            (defun my/eglot-capf ()\n              (setq-local completion-at-point-functions\n                          (list #'tempel-expand\n                                #'eglot-completion-at-point\n                                #'cape-emoji)))\n\n            (add-hook 'eglot-managed-mode-hook #'my/eglot-capf)\n          '';\n        };\n\n        marginalia = {\n          enable = true;\n          command = [ \"marginalia-mode\" ];\n          # after = [ \"vertico\" ];\n          defer = 1;\n          config = \"(marginalia-mode)\";\n        };\n\n        # epkg-marginalia = {\n        #   enable = true;\n        #   # command = [ \"marginalia-mode\" ];\n        #   # after = [ \"vertico\" ];\n        #   defer = 1;\n        #   # config = \"(marginalia-mode)\";\n        #   config = ''\n        #     (with-eval-after-load 'marginalia\n        #       (cl-pushnew 'epkg-marginalia-annotate-package\n        #                   (alist-get 'package marginalia-annotator-registry)))\n        #   '';\n        # };\n\n        embark = {\n          enable = true;\n          bind = {\n            \"C-.\" = \"embark-act\";\n            \"M-.\" = \"embark-dwim\";\n            \"C-h B\" = \"embark-bindings\";\n          };\n          init = ''\n            ;; Optionally replace the key help with a completing-read interface\n            (setq prefix-help-command #'embark-prefix-help-command)\n          '';\n          config = ''\n            ;; Hide the mode line of the Embark live/completions buffers\n            (add-to-list 'display-buffer-alist\n                         '(\"\\\\`\\\\*Embark Collect \\\\(Live\\\\|Completions\\\\)\\\\*\"\n                           nil\n                           (window-parameters (mode-line-format . none))))\n\n            (defun embark-magit-status (file)\n              \"Run `magit-status` on repo containing the embark target.\"\n              (interactive \"GFile: \")\n              (magit-status (locate-dominating-file file \".git\")))\n\n            (defun embark-target-this-buffer-file ()\n              (cons 'this-buffer-file (or (buffer-file-name) (buffer-name))))\n\n            (add-to-list 'embark-target-finders #'embark-target-this-buffer-file 'append)\n\n            (add-to-list 'embark-keymap-alist '(this-buffer-file . this-buffer-file-map))\n\n            ;; ------------------------------------------------------------\n\n            ; Colorize the current Vertico candidate differently when acting\n            (defun embark-vertico-indicator ()\n              (let ((fr face-remapping-alist))\n                (lambda (&optional keymap _targets _prefix)\n                  (when (bound-and-true-p vertico--input)\n                    (setq-local face-remapping-alist\n                                (if keymap\n                                    (cons '(vertico-current . embark-target) fr)\n                                  fr))))))\n\n            (add-to-list 'embark-indicators #'embark-vertico-indicator)\n\n            ; Automatically resizing auto-updating Embark Collect buffers to fit their contents\n            (add-hook 'embark-collect-post-revert-hook\n                      (defun resize-embark-collect-window (&rest _)\n                        (when (memq embark-collect--kind '(:live :completions))\n                          (fit-window-to-buffer (get-buffer-window)\n                                                (floor (frame-height) 2) 1))))\n\n            ; Switch between candidates and actions like in Helm\n            (defun with-minibuffer-keymap (keymap)\n              (lambda (fn &rest args)\n                (minibuffer-with-setup-hook\n                    (lambda ()\n                      (use-local-map\n                       (make-composed-keymap keymap (current-local-map))))\n                  (apply fn args))))\n\n            (defvar embark-completing-read-prompter-map\n              (let ((map (make-sparse-keymap)))\n                (define-key map (kbd \"<tab>\") 'abort-recursive-edit)\n                map))\n\n            (advice-add 'embark-completing-read-prompter :around\n                        (with-minibuffer-keymap embark-completing-read-prompter-map))\n            (define-key vertico-map (kbd \"<tab>\") 'embark-act-with-completing-read)\n\n              (defun embark-act-with-completing-read (&optional arg)\n                (interactive \"P\")\n                (let* ((embark-prompter 'embark-completing-read-prompter)\n                       (_act (propertize \"Act\" 'face 'highlight))\n                       (embark-indicator (lambda (_keymap _targets) nil)))\n                  (embark-act arg)))\n\n            ; Show the current Embark target types in the modeline\n            (defvar embark--target-mode-timer nil)\n            (defvar embark--target-mode-string \"\")\n\n            (defun embark--target-mode-update ()\n              (setq embark--target-mode-string\n                    (if-let (targets (embark--targets))\n                        (format \"[%s%s] \"\n                                (propertize (symbol-name (plist-get (car targets) :type)) 'face 'bold)\n                                (mapconcat (lambda (x) (format \", %s\" (plist-get x :type)))\n                                           (cdr targets)\n                                           \"\"))\n                      \"\")))\n\n            (define-minor-mode embark-target-mode\n              \"Shows the current targets in the modeline.\"\n              :global t\n              :group 'embark\n              (setq mode-line-misc-info (assq-delete-all 'embark-target-mode mode-line-misc-info))\n              (when embark--target-mode-timer\n                (cancel-timer embark--target-mode-timer)\n                (setq embark--target-mode-timer nil))\n              (when embark-target-mode\n                (push '(embark-target-mode (:eval embark--target-mode-string)) mode-line-misc-info)\n                (setq embark--target-mode-timer\n                      (run-with-idle-timer 0.1 t #'embark--target-mode-update))))\n          '';\n\n          bindLocal = {\n            minibuffer-local-completion-map = {\n              \"M-o\" = \"embark-act\";\n            };\n            embark-file-map = {\n              \"s\" = \"sudo-edit\";\n              \"l\" = \"vlf\";\n            };\n          };\n        };\n\n        # string-inflection = {\n        #   enable = true;\n        #   bind = {\n        #     \"C-c C-u\" = \"string-inflection-all-cycle\";\n        #   };\n        # };\n\n        secrets = {\n          enable = true;\n          defer = 1;\n          config = ''\n            (setq auth-sources '(\n            \"secrets:Mots de passe\"\n            ))\n          '';\n        };\n\n        multiple-cursors = {\n          enable = true;\n          bind = {\n            \"C-S-c C-S-c\" = \"mc/edit-lines\";\n            \"C-c m\" = \"mc/mark-all-like-this\";\n            \"C->\" = \"mc/mark-next-like-this\";\n            \"C-<\" = \"mc/mark-previous-like-this\";\n          };\n        };\n\n        # avy = {\n        #   enable = true;\n        #   # avy-org-goto-heading-timer\n        #   # avy-goto-char-timer\n        #   # avy-org-refile-as-child\n        #   # avy-goto-word-or-subword-1\n        #   bind = {\n        #     \"C-:\" = \"avy-goto-char\";\n        #     \"C-'\" = \"avy-goto-char-2\";\n        #     \"M-g f\" = \"avy-goto-line\";\n        #     \"M-g w\" = \"avy-goto-word-1\";\n        #     \"M-g e\" = \"avy-goto-word-0\";\n        #     \"C-c C-j\" = \"avy-resume\";\n        #   };\n        #   command = [ \"avy-process\" ];\n        #   config = ''\n        #     (setq avy-all-windows t)\n        #   '';\n        # };\n\n        vundo = {\n          enable = true;\n          defer = 1;\n          config = ''\n            (setq vundo-glyph-alist vundo-unicode-symbols)\n            (vundo-popup-mode 1)\n          '';\n        };\n\n        # hammy = {\n        #   enable = true;\n        #   config = ''\n        #     (hammy-mode 1)\n        #   '';\n        # };\n\n        expreg = {\n          enable = true;\n          bind = {\n            # \"C-c e\" = \"expreg-query-replace\";\n            \"C-=\" = \"expreg-expand\";\n            \"C--\" = \"expreg-contract\";\n          };\n        };\n\n        markdown-mode = {\n          enable = true;\n          # extraPackages = [ pkgs.marksman ];\n          config = ''\n            (setq markdown-command \"marked\")\n            (dolist (face '((markdown-header-face-1 . 1.2)\n                             (markdown-header-face-2 . 1.1)\n                             (markdown-header-face-3 . 1.0)\n                             (markdown-header-face-4 . 1.0)\n                             (markdown-header-face-5 . 1.0)))\n               (set-face-attribute (car face) nil :weight 'normal :height (cdr face)))\n          '';\n        };\n\n        # pandoc-mode = {\n        #   enable = true;\n        #   after = [ \"markdown-mode\" ];\n        #   hook = [ \"markdown-mode\" ];\n        #   bindLocal = {\n        #     markdown-mode-map = {\n        #       \"C-c C-c\" = \"pandoc-run-pandoc\";\n        #     };\n        #   };\n        # };\n\n        # easysession = {\n        #   enable = true;\n        #   command = [\n        #     \"easysession-switch-to\"\n        #     \"easysession-save-as\"\n        #     \"easysession-save-mode\"\n        #     \"easysession-load-including-geometry\"\n        #   ];\n        #   custom = {\n        #     easysession-mode-line-misc-info = \"t\";\n        #     easysession-save-interval = \"(* 10 60)\";\n        #   };\n        #   init = ''\n        #     (global-set-key (kbd \"C-c l\") 'easysession-switch-to)\n        #     (global-set-key (kbd \"C-c s\") 'easysession-save-as)\n        #     (add-hook 'emacs-startup-hook #'easysession-load-including-geometry 102)\n        #     (add-hook 'emacs-startup-hook #'easysession-save-mode 103)\n        #   '';\n        # };\n\n        eglot = {\n          enable = true;\n          command = [\n            \"eglot-ensure\"\n            \"eglot-format-buffer\"\n            \"eglot-rename\"\n          ];\n          # :hook ((svelte-ts-mode . eglot-ensure)\n          #        (typescript-mode . eglot-ensure)\n          #        (json-mode . eglot-ensure)\n          #        (rustic-mode . eglot-ensure))\n          config = ''\n            (add-to-list 'eglot-server-programs\n                           '(json-mode . (\"vscode-json-languageserver\" \"--stdio\")))\n            (add-to-list 'eglot-server-programs\n                          '((rust-ts-mode rust-mode) .\n                            (\"rust-analyzer\" :initializationOptions (:check (:command \"clippy\")))))\n            (add-to-list 'eglot-server-programs '(svelte-ts-mode . (\"svelteserver\" \"--stdio\")))\n            (add-to-list 'eglot-server-programs\n                          '(typescript-mode . (\"typescript-language-server\" \"--stdio\")))\n            ;; Customize symbol highlight face for stronger background highlight\n            (set-face-attribute 'eglot-highlight-symbol-face nil\n                                :background (face-background 'region)\n                                :weight 'bold)\n            (set-face-attribute 'eglot-diagnostic-tag-unnecessary-face nil\n                                :inherit 'flymake-warning)\n          '';\n        };\n\n        eglot-x = {\n          enable = true;\n          package = _epkgs: pkgs.emacs.pkgs.eglot-x;\n          after = [\n            \"eglot\"\n            \"rust-ts-mode\"\n          ];\n          bindLocal = {\n            eglot-mode-map = {\n              \"s-.\" = \"eglot-x-find-refs\";\n            };\n          };\n          config = ''\n            (eglot-x-setup)\n          '';\n        };\n\n        yaml-ts-mode =\n          let\n            my_helm_ls = pkgs.symlinkJoin {\n              name = \"wrapped-hello\";\n              paths = [ pkgs.helm-ls ];\n              buildInputs = [ pkgs.makeWrapper ];\n              postBuild = ''\n                wrapProgram $out/bin/helm_ls \\\n                  --set YAMLLS_PATH \"/nix/store/04jik4sing6sdixchim52hn1yijzp22m-yaml-schema-router-0.2.0/bin/yaml-schema-router\"\n              '';\n            };\n          in\n          {\n            enable = true;\n            extraPackages = [\n              pkgs.helm-ls\n              pkgs.yaml-language-server\n            ];\n            mode = lib.mkForce [ ];\n            hook = [\n              \"(yaml-ts-mode . eglot-ensure)\"\n              \"(helm-ts-mode . eglot-ensure)\"\n            ];\n            config = ''\n              (add-to-list 'eglot-server-programs\n                '(yaml-ts-mode . (\"/nix/store/04jik4sing6sdixchim52hn1yijzp22m-yaml-schema-router-0.2.0/bin/yaml-schema-router\" \"--stdio\")))\n\n              (add-to-list 'eglot-server-programs '(helm-ts-mode \"${my_helm_ls}/bin/helm_ls\" \"serve\"))\n            '';\n            init = ''\n              (define-derived-mode helm-ts-mode yaml-ts-mode \"helm\"\n                \"Major mode for editing kubernetes helm templates\")\n\n              (add-to-list 'auto-mode-alist '(\"\\\\.yml\\\\'\" . yaml-ts-mode))\n              (add-to-list 'auto-mode-alist '(\"\\\\.yaml\\\\'\" . yaml-ts-mode))\n              (add-to-list 'auto-mode-alist '(\"values\\\\.yaml\\\\'\" . helm-ts-mode))\n            '';\n          };\n\n        toml-ts-mode = {\n          enable = true;\n          hook = [\n            \"(toml-ts-mode . eglot-ensure)\"\n          ];\n          config = ''\n            (with-eval-after-load 'eglot\n              (setq eglot-server-programs\n                    (cons '(toml-ts-mode . (\"rass\" \"--\" \"crates-lsp\"))\n                    (assoc-delete-all 'toml-ts-mode eglot-server-programs))))\n\n            (add-hook 'toml-ts-mode-hook\n                      (lambda () (add-hook 'after-save-hook #'eglot-format nil t)))\n          '';\n        };\n\n        nix-ts-mode = {\n          enable = true;\n          mode = [ ''\"\\\\.nix\\\\'\"'' ];\n          hook = [\n            \"(nix-ts-mode . eglot-ensure)\"\n          ];\n          config = ''\n            (with-eval-after-load 'eglot\n              (setq eglot-server-programs\n                    (cons '(nix-mode . (\"rass\" \"--\" \"nixd\" \"--\" \"nil\" \"--stdio\"))\n                          (assoc-delete-all 'nix-mode eglot-server-programs))))\n          '';\n        };\n\n        # wgrep.enable = true;\n\n        topsy = {\n          enable = true;\n          hook = [\n            \"(prog-mode . topsy-mode)\"\n            \"(magit-section-mode . topsy-mode)\"\n          ];\n        };\n\n        # nginx-mode.enable = true;\n\n        # flycheck = {\n        #   enable = true;\n        #   command = [ \"global-flycheck-mode\" ];\n        #   defer = 1;\n        #   bind = {\n        #     \"M-n\" = \"flycheck-next-error\";\n        #     \"M-p\" = \"flycheck-previous-error\";\n        #   };\n        #   config = ''\n        #     ;; Only check buffer when mode is enabled or buffer is saved.\n        #     (setq flycheck-check-syntax-automatically '(mode-enabled save)\n        #         flycheck-markdown-mdl-executable \"${pkgs.mdl}/bin/mdl\")\n\n        #     ;; Enable flycheck in all eligible buffers.\n        #     (global-flycheck-mode)\n        #   '';\n        # };\n\n        savehist = {\n          enable = true;\n          init = ''\n            (savehist-mode)\n          '';\n        };\n\n        vertico = {\n          enable = true;\n          command = [ \"vertico-mode\" ];\n          init = \"(vertico-mode)\";\n          extraConfig = ''\n            :bind (:map vertico-map\n              ;; M-v is taken by vertico\n              (\"M-g M-c\" . switch-to-completions)\n              ;; Original tab binding, which we want sometimes when\n              ;; using orderless completion.\n              (\"M-TAB\" . vertico-insert))\n          '';\n        };\n\n        vertico-directory = {\n          enable = true;\n          after = [\n            \"vertico\"\n          ];\n          hook = [\n            \"(rfn-eshadow-update-overlay . vertico-directory-tidy)\"\n          ];\n          bindLocal = {\n            vertico-map = {\n              #     \"RET\" = \"vertico-directory-enter\";\n              #     \"DEL\" = \"vertico-directory-delete-char\";\n              \"M-DEL\" = \"vertico-directory-delete-word\";\n            };\n          };\n        };\n\n        orderless = {\n          enable = true;\n          init = ''\n                        (setq completion-styles '(orderless partial-completion basic)\n                              completion-category-defaults nil)\n\n                              (setq completion-category-overrides '((eglot (styles orderless))\n                                                                    (eglot-capf (styles orderless))))\n\n            ;; Enable cache busting, depending on if your server returns\n            ;; sufficiently many candidates in the first place.\n            (advice-add 'eglot-completion-at-point :around #'cape-wrap-buster)\n          '';\n        };\n\n        # plantuml-mode.enable = true;\n\n        # company = {\n        #   enable = true;\n        #   defer = 1;\n        #   config = ''\n        #     (global-company-mode t)\n\n        #     (setq-default\n        #      company-idle-delay 0.2\n        #      ;;company-require-match nil\n        #      ;;company-minimum-prefix-length 0\n\n        #      ;; get only preview\n        #      company-frontends '(company-preview-frontend)\n        #      ;; also get a drop down\n        #      company-frontends '(company-pseudo-tooltip-frontend company-preview-frontend)\n        #      )\n        #   '';\n        # };\n\n        # protobuf-mode = {\n        #   enable = true;\n        #   mode = [ ''\"'\\\\.proto\\\\'\"'' ];\n        # };\n\n        # yaml-mode.enable = true;\n\n        # devdocs = {\n        #   enable = true;\n        #   bind = {\n        #     \"C-c D\" = \"devdocs-lookup\";\n        #   };\n        # };\n\n        # dirvish = {\n        #   enable = true;\n        #   config = ''\n        #     (require 'dirvish-quick-access)\n        #     (require 'dirvish-history)\n        #     (require 'dirvish-ls)\n        #     (require 'dirvish-extras)\n        #     (require 'dirvish-emerge)\n        #     (require 'dirvish-subtree)\n        #     (require 'dirvish-vc)\n        #     (require 'dirvish-yank)\n        #     (require 'dirvish-fd)\n        #     (require 'dirvish-narrow)\n        #     (dirvish-override-dired-mode)\n\n        #     (setq dirvish-emerge-groups '((\"Recent\" (predicate . ‘recent-files-2h’))\n        #       (\"README\" (regex . \"README\"))\n        #       (\"PDF\"    (extensions \"pdf\"))\n        #       (\"Documents\" (extensions \"pdf\" \"tex\" \"bib\" \"epub\"))\n        #       (\"Video\" (extensions \"mp4\" \"mkv\" \"webm\"))\n        #       (\"Pictures\" (extensions \"jpg\" \"png\" \"svg\" \"gif\"))\n        #       (\"Audio\" (extensions \"mp3\" \"flac\" \"wav\" \"ape\" \"aac\"))\n        #       (\"Archives\" (extensions \"gz\" \"rar\" \"zip\"))\n        #       (\"LaTeX\"  (extensions \"tex\" \"bib\"))))\n        #   '';\n        # };\n\n        # recentf = {\n        #   enable = true;\n        #   command = [ \"recentf-mode\" ];\n        #   config = ''\n        #     (setq recentf-save-file (locate-user-emacs-file \"recentf\")\n        #           recentf-max-menu-items 20\n        #           recentf-max-saved-items 500\n        #           recentf-exclude '(\"COMMIT_MSG\" \"COMMIT_EDITMSG\"))\n\n        #     ;; Save the file list every 10 minutes.\n        #     (run-at-time nil (* 10 60) 'recentf-save-list)\n\n        #     (recentf-mode)\n        #   '';\n        # };\n\n        # nxml-mode = {\n        #   enable = true;\n        #   mode = [ ''\"\\\\.xml\\\\'\"'' ];\n        #   config = ''\n        #     (setq nxml-child-indent 4\n        #           nxml-attribute-indent 4\n        #           nxml-slash-auto-complete-flag t)\n        #     (add-to-list 'rng-schema-locating-files\n        #                  \"~/.emacs.d/nxml-schemas/schemas.xml\")\n        #   '';\n        # };\n\n        # systemd = {\n        #   enable = true;\n        #   defer = true;\n        # };\n\n        # terraform-mode.enable = true;\n\n        # visual-fill-column = {\n        #   enable = true;\n        #   command = [ \"visual-fill-column-mode\" ];\n        # };\n      };\n    };\n  }\n  // lib.optionalAttrs (osConfig.services.desktopManager.cosmic.enable or false) {\n    package = pkgs.emacs-pgtk;\n  };\n}\n"
  },
  {
    "path": "modules/home/emacs/denote.nix",
    "content": "{\n  programs.emacs.init = {\n    usePackage = {\n      denote = {\n        enable = true;\n        bind = {\n          \"C-c n l\" = \"denote-link-or-create\";\n          \"C-c n o\" = \"denote-open-or-create\";\n          \"C-c n r\" = \"denote-rename-file-using-front-matter\";\n\n        };\n        custom = {\n          \"denote-directory\" = ''\"~/Documents/notes\"'';\n          \"denote-rename-buffer-format\" = ''\"Denote: %t (%k)\"'';\n          # \"denote-infer-keywords\" = \"nil\";\n          # \"denote-known-keywords\" = ''\n          #   '(\"pra\" \"prb\" \"prc\"\n          #     \"ply\" \"plm\" \"plw\"\n          #     \"kt\" \"ke\" \"kp\" \"kl\" \"ka\" \"kap\"\n          #     \"kcp\" \"kca\" \"kcc\"\n          #     \"kra\" \"krb\" \"krv\"\n          #     \"rn\")\n          # '';\n        };\n\n        config = ''\n          ;; Rename buffers with the note name\n          (denote-rename-buffer-mode 1)\n\n          ;; Buttonize all denote links in text buffers\n          (add-hook 'text-mode-hook #'denote-fontify-links-mode-maybe)\n        '';\n\n        # ;; Automatically rename Denote buffers when opening them so that\n        #  ;; instead of their long file name they have, for example, a literal\n        #  ;; \"[D]\" followed by the file's title.  Read the doc string of\n        #  ;; `denote-rename-buffer-format' for how to modify this.\n        #  (denote-rename-buffer-mode 1)\n\n      };\n\n      denote-journal = {\n        enable = true;\n        after = [ \"denote\" ];\n        defer = true;\n        command = [ \"denote-journal-new-entry\" ];\n      };\n      denote-journal-capture = {\n        enable = true;\n        after = [ \"denote-journal\" ];\n        config = ''\n          (setq org-capture-templates '((\"a\" \"Appointment\" entry\n                                         (file+olp denote-journal-capture-entry-for-date \"Appointments\")\n                                         \"* %(denote-journal-capture-timestamp) %^{Subject?}\")))\n        '';\n      };\n      denote-project-notes = {\n        enable = true;\n        after = [ \"denote\" ];\n        defer = true;\n        command = [ \"denote-project-notes\" ];\n      };\n      # denote-agenda = {\n      #   enable = true;\n      #   config = ''\n      #     (denote-agenda-insinuate)\n      #   '';\n      # };\n\n      denote-explore = {\n        enable = true;\n        after = [ \"denote\" ];\n        defer = true;\n        command = [\n          \"denote-explore-network\"\n          \"denote-explore-random-note\"\n        ];\n      };\n      consult-denote = {\n        enable = true;\n        after = [\n          \"consult\"\n          \"denote\"\n        ];\n        config = ''\n          (consult-denote-mode 1)\n        '';\n      };\n\n      denote-search = {\n        enable = true;\n        bind = {\n          \"C-c s s\" = \"denote-search\";\n          \"C-c s d\" = \"denote-search-marked-dired-files\";\n          \"C-c s r\" = \"denote-search-files-referenced-in-region\";\n        };\n        custom = {\n          \"denote-search-format-heading-function\" = \"#'denote-search-format-heading-with-keywords\";\n        };\n      };\n\n    };\n  };\n}\n"
  },
  {
    "path": "modules/home/emacs/go.nix",
    "content": "{\n  programs.emacs = {\n    init = {\n      usePackage = {\n        go-ts-mode = {\n          enable = true;\n          hook = [\n            \"(go-ts-mode . eglot-ensure)\"\n          ];\n        };\n      };\n    };\n  };\n}\n"
  },
  {
    "path": "modules/home/emacs/latex.nix",
    "content": "{ pkgs, ... }:\n\nlet\n  myLatex =\n    with pkgs;\n    (texlive.combine {\n      inherit (texlive)\n        scheme-small\n        wrapfig\n        ulem\n        capt-of\n        ;\n    });\nin\n{\n  home.packages =\n    with pkgs;\n    lib.optionals (stdenv.hostPlatform.system == \"x86_64-linux\") [\n      myLatex\n    ];\n}\n"
  },
  {
    "path": "modules/home/emacs/org-mode.nix",
    "content": "{ pkgs, ... }:\n\n{\n  programs.emacs = {\n    init = {\n      prelude = ''\n        (setq org-directory \"~/dev/org-mode\")\n      '';\n\n      usePackage = {\n        # org-transclusion = {\n        #   enable = true;\n        #   #           init = ''\n        #   # (define-key global-map (kbd \"<f12>\") #'org-transclusion-add)\n        #   # (define-key global-map (kbd \"C-n t\") #'org-transclusion-mode)\n        #   #           '';\n        # };\n\n        # org-rich-yank = {\n        #   enable = true;\n        #   bindLocal = {\n        #     org-mode-map = {\n        #       \"C-M-y\" = \"org-rich-yank\";\n        #     };\n        #   };\n        #   config = ''\n        #     (defun my-org-rich-yank-format-paste (language contents link)\n        #       \"Based on `org-rich-yank--format-paste-default'.\"\n        #       (format \"#+BEGIN_SRC %s\\n%s\\n#+END_SRC\\n#+comment: %s\"\n        #               language\n        #               (org-rich-yank--trim-nl contents)\n        #               link))\n        #     (customize-set-variable 'org-rich-yank-format-paste #'my-org-rich-yank-format-paste)\n        #   '';\n        # };\n\n        org-download = {\n          enable = true;\n          after = [ \"org\" ];\n          defer = true;\n          command = [\n            \"org-download-clipboard\"\n            \"org-download-yank\"\n            \"org-download-screenshot\"\n          ];\n          extraPackages = [ pkgs.wl-clipboard ];\n        };\n\n        # Highlight and annotate text file and websites\n        # org-remark.enable = true;\n\n        org-ql = {\n          enable = true;\n          after = [ \"org\" ];\n          defer = true;\n          command = [\n            \"org-ql-search\"\n            \"org-ql-view\"\n          ];\n        };\n\n        consult-notes = {\n          enable = true;\n          bind = {\n            \"C-c n f\" = \"consult-notes\";\n          };\n          custom = {\n            # \"org-default-notes-file\" = ''\"~/dev/org-mode/inbox.org\"'';\n            \"consult-notes-denote-display-id\" = \"nil\";\n          };\n          config = ''\n            (consult-notes-denote-mode)\n          '';\n        };\n\n        org-tempo = {\n          enable = true;\n          after = [ \"org\" ];\n          package = \"org\";\n          config = ''\n            (dolist (item '((\"sh\" . \"src sh\")\n                              (\"el\" . \"src emacs-lisp\")\n                              (\"li\" . \"src lisp\")\n                              (\"sc\" . \"src scheme\")\n                              (\"ts\" . \"src typescript\")\n                              (\"py\" . \"src python\")\n                              (\"yaml\" . \"src yaml\")\n                              (\"json\" . \"src json\")\n                              (\"einit\" . \"src emacs-lisp :tangle emacs/init.el\")\n                              (\"emodule\" . \"src emacs-lisp :tangle emacs/modules/dw-MODULE.el\")))\n                (add-to-list 'org-structure-template-alist item))\n          '';\n        };\n\n        org-mime = {\n          enable = true;\n          after = [ \"org\" ];\n          defer = true;\n          command = [\n            \"org-mime-htmlize\"\n            \"org-mime-org-buffer-htmlize\"\n            \"org-mime-org-subtree-htmlize\"\n          ];\n        };\n        org-web-tools = {\n          enable = true;\n          after = [ \"org\" ];\n          defer = true;\n          command = [\n            \"org-web-tools-insert-link-for-url\"\n            \"org-web-tools-read-url-as-org\"\n          ];\n        };\n        # ox-clip.enable = true;\n        # ox-tufte.enable = true;\n\n        # ox-hugo = {\n        #   enable = true;\n        #   after = [ \"ox\" ];\n        # };\n\n        org-modern = {\n          enable = true;\n          after = [ \"org\" ];\n          hook = [\n            \"(org-mode . org-modern-mode)\"\n            \"(org-agenda-finalize . org-modern-agenda)\"\n          ];\n        };\n\n        # org-hyperscheduler = {\n        #   enable = true;\n        # };\n\n        # # for org-mode\n        # htmlize.enable = true;\n\n        org-sticky-header = {\n          enable = true;\n          hook = [\n            \"(org-mode . org-sticky-header-mode)\"\n          ];\n        };\n\n        edraw-org = {\n          enable = true;\n          package = _epkgs: pkgs.emacs.pkgs.el-easydraw;\n          after = [ \"org\" ];\n          defer = true;\n        };\n\n        org = {\n          enable = true;\n          command = [\n            \"org-mode\"\n            \"org-version\"\n          ];\n          bind = {\n            \"C-c c\" = \"org-capture\";\n            \"C-c a\" = \"org-agenda\";\n            \"C-c l\" = \"org-store-link\";\n            \"C-c b\" = \"org-switchb\";\n          };\n          custom = {\n            \"org-default-notes-file\" = ''\"~/dev/org-mode/inbox.org\"'';\n            \"org-directory\" = ''\"~/dev/org-mode\"'';\n            # \"org-log-done\" = \"time\";\n            # \"org-agenda-start-with-log-mode\" = true;\n            # (setq org-extend-today-until 4)\n            \"org-extend-today-until\" = 4;\n\n            org-hide-leading-stars = \"t\";\n            org-startup-indented = \"t\";\n            org-adapt-indentation = \"nil\";\n            org-edit-src-content-indentation = 0;\n            org-startup-truncated = \"t\";\n          };\n          hook = [\n            \"(org-mode . dw/org-mode-setup)\"\n          ];\n          config = ''\n                        ;; Turn on indentation and auto-fill mode for Org files\n                        (defun dw/org-mode-setup ()\n                          ;; (variable-pitch-mode 1)\n                          (org-indent-mode 1)\n                          (auto-fill-mode 0)\n                          (visual-line-mode 1)\n                          (setq corfu-auto nil))\n\n                        (defun dw/org-move-done-tasks-to-bottom ()\n                          \"Sort all tasks in the topmost heading by TODO state.\"\n                          (interactive)\n                          (save-excursion\n                            (while (org-up-heading-safe))\n                            (org-sort-entries nil ?o))\n\n                          ;; Reset the view of TODO items\n                          (org-overview)\n                          (org-fold-show-entry)\n                          (org-fold-show-children))\n\n                        (defun dw/org-todo-state-change-hook ()\n                          (when (string= org-state \"DONE\")\n                            (dw/org-move-done-tasks-to-bottom)))\n\n                            (setq org-ellipsis \" ▾\"\n                                    org-hide-emphasis-markers t\n                                    org-src-fontify-natively t\n                                    org-fontify-quote-and-verse-blocks t\n                                    org-src-tab-acts-natively t\n                                    org-hide-block-startup nil\n                                    org-src-preserve-indentation nil\n                                    org-startup-folded 'content\n                                    org-cycle-separator-lines 2\n                                    org-bookmark-names-plist nil)\n\n                                    (setq org-refile-targets '((nil :maxlevel . 1)\n                                                                (org-agenda-files :maxlevel . 1))\n                                           ;; Refile items to the top of parent heading\n                                           org-reverse-note-order t)\n\n                                     (setq org-outline-path-complete-in-steps nil)\n                                     (setq org-refile-use-outline-path t)\n\n                                    (setq org-log-done 'time)\n                                    (setq org-agenda-start-with-log-mode t)\n\n                                    (setq org-priority-highest ?A\n                                          org-priority-lowest  ?D\n                                          org-priority-default ?C)\n\n                                          (setq org-todo-keywords\n                                                '((sequence \"TODO(t)\" \"NEXT(n)\" \"STRT(s)\" \"WAIT(w@/!)\" \"|\" \"DONE(d!)\" \"CANX(c!)\")\n                                                  (sequence \"GOAL(G)\" \"PROJ(P)\" \"|\" \"DONE(d!)\")\n                                                  (sequence  \"PLAN(p)\" \"REVIEW(r)\" \"|\" \"WAIT(w)\" \"BACK(b)\")))\n\n                                          ;; TODO: org-todo-keyword-faces\n                                          (setq org-todo-keyword-faces\n                                                '((\"GOAL\" . (:foreground \"orange red\" :weight bold))\n                                                  (\"WAIT\" . (:foreground \"HotPink2\" :weight bold))\n                                                  (\"BACK\" . (:foreground \"MediumPurple3\" :weight bold))))\n\n                                          (setq org-modern-todo-faces\n                                                '((\"GOAL\"\n                                                   :background \"orange red\"\n                                                   :foreground \"white\")\n                                                  (\"PROJ\"\n                                                   :background \"gold\"\n                                                   :foreground \"black\")))\n\n                                                   (setq org-log-into-drawer t)\n\n                                                    (setq-default org-tag-alist\n                                                                  '((:startgroup)\n                                                                    (\"Areas\")\n                                                                    (:grouptags)\n                                                                    (\"@home\" . ?H)\n                                                                    (\"@work\" . ?W)\n                                                                    (:endgroup)\n\n                                                                    (:startgrouptag . nil)\n                                                                    (\"Contexts\")\n                                                                    (:grouptags)\n                                                                    (\"@computer\" . ?C)\n                                                                    (\"@mobile\" . ?M)\n                                                                    (\"@calls\" . ?A)\n                                                                    (\"@errands\" . ?E)\n                                                                    (:endgrouptag)\n\n                                                                    ;; Task Types\n                                                                    (:startgrouptag . nil)\n                                                                    (\"Types\")\n                                                                    (:grouptags)\n                                                                    (\"@easy\" . ?e)\n                                                                    (\"@hacking\" . ?h)\n                                                                    (\"@writing\" . ?w)\n                                                                    (\"@creative\" . ?v)\n                                                                    (\"@accounting\" . ?a)\n                                                                    (\"@email\" . ?m)\n                                                                    (\"@system\" . ?s)\n                                                                    (:endgrouptag)\n\n                                                                    ;; Workflow states\n                                                                    (:startgroup . nil)\n                                                                    (\"States\")\n                                                                    (:grouptags)\n                                                                    (\"@plan\" . ?p)\n                                                                    (\"@review\" . ?r)\n                                                                    (\"@followup\" . ?f)\n                                                                    (:endgroup)))\n\n            ;; Active Org-babel languages\n            (org-babel-do-load-languages 'org-babel-load-languages\n              '((plantuml . t)\n                (dot . t)\n                (mermaid . t)\n                (sql . t)\n                (shell . t)))\n          '';\n          # bindLocal = {\n          #   org-mode-map = {\n          #     \"C-x n s\" = \"org-toggle-narrow-to-subtree\";\n          #   };\n          # };\n          #   hook = [\n          #     ''\n          #       (org-mode\n          #        . (lambda ()\n          #            (add-hook 'completion-at-point-functions\n          #                      'pcomplete-completions-at-point nil t)))\n          #     ''\n          #   ];\n          #   config = ''\n          #     ;; Some general stuff.\n          #     (setq org-reverse-note-order t\n          #           org-use-fast-todo-selection t\n          #           org-adapt-indentation nil\n          #           org-hide-emphasis-markers t)\n\n          #     ;;(setq org-tag-alist rah-org-tag-alist)\n\n          #     ;; Add some todo keywords.\n\n          #     ;; Setup org capture.\n          #     ;; (setq org-default-notes-file (rah-org-file \"capture\"))\n          #     (setq org-default-notes-file (concat org-directory \"/inbox.org\"))\n\n          #     ;; Unfortunately org-mode tends to take over keybindings that\n          #     ;; start with C-c.\n          #     (unbind-key \"C-c SPC\" org-mode-map)\n          #     (unbind-key \"C-c w\" org-mode-map)\n\n          #     (setq org-image-actual-width 400)\n          #     (setq org-extend-today-until 4)\n          #     (setq org-export-backends (quote (ascii html icalendar latex md odt)))\n\n          #     (defun add-newline-at-end-if-none ()\n          #       \"Add a newline at the end of the buffer if there isn't any.\"\n          #       (save-excursion\n          #         (save-restriction\n          #           (goto-char (1- (point-max)))\n          #           (if (not (looking-at \"\\n\"))\n          #           (progn\n          #             (goto-char (point-max))\n          #             (insert \"\\n\"))))))\n\n          #     ;; https://old.reddit.com/r/orgmode/comments/hg8qik/weird_joined_lines_bug/fw73kml/\n          #     (add-hook 'org-capture-prepare-finalize-hook 'add-newline-at-end-if-none)\n          #   '';\n        };\n\n        org-super-agenda = {\n          enable = true;\n          after = [ \"org\" ];\n          config = ''\n            (org-super-agenda-mode t)\n            (setq org-super-agenda-groups '((:auto-parent t)))\n          '';\n        };\n\n        # org-habit = {\n        #   enable = true;\n        #   after = [ \"org\" ];\n        #   # defer = true;\n        #   config = ''\n        #     ;; for using with Orgzly\n        #     (setq org-log-into-drawer \"LOGBOOK\")\n        #   '';\n        # };\n\n        org-agenda = {\n          enable = true;\n          after = [ \"org\" ];\n          defer = true;\n          custom = {\n            \"org-agenda-files\" = ''\n              '(\n              \"gtd.org\"\n              \"inbox.org\"\n              \"schedule.org\"\n              )\n            '';\n            \"org-agenda-show-all-dates\" = \"t\";\n            \"org-agenda-skip-deadline-if-done\" = \"t\";\n            \"org-agenda-skip-scheduled-if-done\" = \"t\";\n            \"org-agenda-span\" = 5;\n            \"org-agenda-start-on-weekday\" = \"nil\";\n            \"org-agenda-todo-ignore-deadlines\" = 7;\n            \"org-agenda-todo-ignore-scheduled\" = \"'future\";\n            \"org-deadline-warning-days\" = 14;\n            \"org-stuck-projects\" = ''\n              '(\n                \"+PROJECT-MAYBE-DONE/-DONE-CANCELED\" (\"NEXT\" \"STARTED\") nil \"\\\\<IGNORE\\\\>\"\n              )\n            '';\n          };\n          config = ''\n                        (setq org-agenda-custom-commands\n                              `((\"d\" \"Dashboard\"\n                                 ((agenda \"\" ((org-deadline-warning-days 7)))\n                                  (tags-todo \"+PRIORITY=\\\"A\\\"\"\n                                             ((org-agenda-overriding-header \"High Priority\")))\n                                  (todo \"*\" ((org-agenda-files '(\"~/dev/org-mode/inbox.org\"))\n                                             (org-agenda-overriding-header \"Unfiled Inbox Tasks\")))\n                                  (tags-todo \"+@followup\" ((org-agenda-overriding-header \"Needs Follow Up\")))))\n\n                                (\"u\" tags-todo \"+ALLTAGS=\\\"\\\"\"\n                                 ((org-agenda-overriding-header \"Untagged Tasks\")))\n\n                                (\"n\" \"Next Tasks\"\n                                 ((agenda \"\" ((org-deadline-warning-days 7)))\n                                  (todo \"NEXT\"\n                                        ((org-agenda-overriding-header \"Next Tasks\")))))\n\n                                ;; Low-effort next actions\n                                (\"e\" tags-todo \"+TODO=\\\"NEXT\\\"+Effort<15&+Effort>0\"\n                                 ((org-agenda-overriding-header \"Low Effort Tasks\")\n                                  (org-agenda-max-todos 20)\n                                  (org-agenda-files org-agenda-files)))))\n\n            (setq org-agenda-window-setup 'current-window)\n            (setq org-agenda-span 'day)\n            (setq org-agenda-start-with-log-mode t)\n          '';\n        };\n\n        # ol-notmuch = {\n        #   enable = pcfg.org.enable && pcfg.notmuch.enable;\n        #   after = [\n        #     \"notmuch\"\n        #     \"org\"\n        #   ];\n        # };\n\n        ob-plantuml = {\n          enable = true;\n          after = [ \"org\" ];\n          defer = true;\n        };\n\n        ob-mermaid = {\n          enable = true;\n          after = [ \"org\" ];\n          defer = true;\n        };\n        # (setq ob-mermaid-cli-path \"mmdc\")\n\n        # org-table = {\n        #   enable = true;\n        #   after = [ \"org\" ];\n        #   command = [ \"orgtbl-to-generic\" ];\n        #   hook = [\n        #     # For orgtbl mode, add a radio table translator function for\n        #     # taking a table to a psql internal variable.\n        #     ''\n        #       (orgtbl-mode\n        #        . (lambda ()\n        #            (defun rah-orgtbl-to-psqlvar (table params)\n        #              \"Converts an org table to an SQL list inside a psql internal variable\"\n        #              (let* ((params2\n        #                      (list\n        #                       :tstart (concat \"\\\\set \" (plist-get params :var-name) \" '(\")\n        #                       :tend \")'\"\n        #                       :lstart \"(\"\n        #                       :lend \"),\"\n        #                       :sep \",\"\n        #                       :hline \"\"))\n        #                     (res (orgtbl-to-generic table (org-combine-plists params2 params))))\n        #                (replace-regexp-in-string \",)'$\"\n        #                                          \")'\"\n        #                                          (replace-regexp-in-string \"\\n\" \"\" res))))))\n        #     ''\n        #   ];\n        #   config = ''\n        #     (unbind-key \"C-c SPC\" orgtbl-mode-map)\n        #     (unbind-key \"C-c w\" orgtbl-mode-map)\n        #   '';\n        #   extraConfig = ''\n        #     :functions org-combine-plists\n        #   '';\n        # };\n\n        org-capture = {\n          enable = true;\n          after = [ \"org\" ];\n          config = ''\n            (defun dw/org-path (path)\n              (expand-file-name path org-directory))\n\n            (setq org-capture-templates\n                    `((\"t\" \"Tasks\")\n                    (\"tt\" \"Task\" entry (file ,(dw/org-path \"inbox.org\"))\n                    \"* TODO %?\\n  %U\\n  %a\\n  %i\" :empty-lines 1)\n                    (\"ts\" \"Clocked Entry Subtask\" entry (clock)\n                    \"* TODO %?\\n  %U\\n  %a\\n  %i\" :empty-lines 1)\n\n                    (\"j\" \"Journal Entries\")\n                    (\"je\" \"General Entry\" entry\n                    (file+olp+datetree ,(dw/org-path \"journal.org\"))\n                    \"\\n* %<%I:%M %p> - %^{Title} \\n\\n%?\\n\\n\"\n                    :tree-type week\n                    :clock-in :clock-resume\n                    :empty-lines 1)\n                    (\"jt\" \"Task Entry\" entry\n                    (file+olp+datetree ,(dw/org-path \"journal.org\"))\n                    \"\\n* %<%I:%M %p> - Task Notes: %a\\n\\n%?\\n\\n\"\n                    :tree-type week\n                    :clock-in :clock-resume\n                    :empty-lines 1)\n                    (\"jj\" \"Journal\" entry\n                    (file+olp+datetree ,(dw/org-path \"journal.org\"))\n                    \"\\n* %<%I:%M %p> - Journal :journal:\\n\\n%?\\n\\n\"\n                    :tree-type week\n                    :clock-in :clock-resume\n                    :empty-lines 1)\n\n                    (\"m\" \"Metrics Capture\")\n                    (\"mw\" \"Weight\" table-line (file+headline \"~/Notes/Metrics.org\" \"Weight\")\n                    \"| %U | %^{Weight} | %^{Notes} |\"\n                    :immediate-finish t\n                    :jump-to-captured t)\n                    (\"mp\" \"Blood Pressure\" table-line (file+headline \"~/Notes/Metrics.org\" \"Blood Pressure\")\n                    \"| %U | %^{Systolic} | %^{Diastolic} | %^{BPM} | %^{Stress 1-5}\"\n                    :immediate-finish t\n                    :jump-to-captured t)))\n          '';\n        };\n\n        # org-clock = {\n        #   enable = true;\n        #   after = [ \"org\" ];\n        #   config = ''\n        #     (setq org-clock-rounding-minutes 5\n        #           org-clock-out-remove-zero-time-clocks t)\n        #   '';\n        # };\n\n        # org-duration = {\n        #   enable = true;\n        #   after = [ \"org\" ];\n        #   config = ''\n        #     ;; I always want clock tables and such to be in hours, not days.\n        #     (setq org-duration-format (quote h:mm))\n        #   '';\n        # };\n\n        org-refile = {\n          enable = true;\n          after = [ \"org\" ];\n          config = ''\n            ;; Refiling should include not only the current org buffer but\n            ;; also the standard org files. Further, set up the refiling to\n            ;; be convenient with IDO. Follows norang's setup quite closely.\n            (setq org-refile-targets '((nil :maxlevel . 2)\n                                       (org-agenda-files :maxlevel . 2))\n                  org-refile-use-outline-path t\n                  org-outline-path-complete-in-steps nil\n                  org-refile-allow-creating-parent-nodes 'confirm)\n          '';\n        };\n\n        # org-superstar = {\n        #   enable = true;\n        #   hook = [ \"(org-mode . org-superstar-mode)\" ];\n        # };\n\n        # org-edna = {\n        #   enable = true;\n        #   defer = 1;\n        #   config = \"(org-edna-mode)\";\n        # };\n\n        # # custom\n        # # (org-image-actual-width nil)\n        org-tree-slide = {\n          enable = true;\n          command = [\n            \"org-tree-slide-mode\"\n            \"org-tree-slide-skip-done-toggle\"\n          ];\n          bind = {\n            \"<f8>\" = \"org-tree-slide-mode\";\n            \"S-<f8>\" = \"org-tree-slide-skip-done-toggle\";\n          };\n          bindLocal = {\n            org-tree-slide-mode-map = {\n              \"<f9>\" = \"org-tree-slide-move-previous-tree\";\n              \"<f10>\" = \"org-tree-slide-move-next-tree\";\n            };\n          };\n        };\n      };\n    };\n  };\n}\n"
  },
  {
    "path": "modules/home/emacs/rust.nix",
    "content": "{\n  programs.emacs = {\n    init = {\n      usePackage = {\n        cargo-mode = {\n          enable = true;\n          hook = [\n            \"(rust-ts-mode . cargo-minor-mode)\"\n          ];\n          config = ''\n            (setq compilation-scroll-output t)\n          '';\n        };\n\n        rust-ts-mode = {\n          enable = true;\n          hook = [\n            \"(rust-ts-mode . eglot-ensure)\"\n          ];\n          # config = ''\n          #   (add-hook 'after-save-hook 'eglot-format)\n          # '';\n        };\n      };\n    };\n  };\n}\n"
  },
  {
    "path": "modules/home/emacs/tree-sitter.nix",
    "content": "{ pkgs, ... }:\n\nlet\n  grammarsLibPath = pkgs.emacsPackages.treesit-grammars.with-grammars (\n    p: with p; [\n      tree-sitter-bash\n      tree-sitter-css\n      tree-sitter-gleam\n      tree-sitter-hcl\n      tree-sitter-html\n      tree-sitter-javascript\n      tree-sitter-jsdoc\n      tree-sitter-json\n      tree-sitter-nix\n      tree-sitter-prisma\n      tree-sitter-python\n      tree-sitter-rust\n      tree-sitter-toml\n      tree-sitter-tsx\n      tree-sitter-typescript\n      tree-sitter-yaml\n    ]\n  );\nin\n{\n  programs.emacs = {\n    init = {\n      usePackage = {\n        treesit = {\n          enable = true;\n          config = ''\n            (setq treesit-extra-load-path '(\"${pkgs.lib.makeLibraryPath [ grammarsLibPath ]}\"))\n\n            ;; Optional, but recommended. Tree-sitter enabled major modes are\n            ;; distinct from their ordinary counterparts.\n            ;;\n            ;; You can remap major modes with `major-mode-remap-alist'. Note\n            ;; that this does *not* extend to hooks! Make sure you migrate them\n            ;; also\n            (dolist (mapping '((python-mode . python-ts-mode)\n                               (css-mode . css-ts-mode)\n                               (typescript-mode . tsx-ts-mode)\n                               (js-mode . js-ts-mode)\n                               (css-mode . css-ts-mode)\n                               (rust-mode . rust-ts-mode)\n                               (conf-toml-mode . toml-ts-mode)\n                               (yaml-mode . yaml-ts-mode)))\n              (add-to-list 'major-mode-remap-alist mapping))\n\n            (add-to-list 'auto-mode-alist '(\"\\\\.tsx\\\\'\" . tsx-ts-mode))\n            (add-to-list 'auto-mode-alist '(\"\\\\.json\\\\'\" . json-ts-mode))\n          '';\n        };\n      };\n    };\n  };\n}\n"
  },
  {
    "path": "modules/home/emacs/typescript.nix",
    "content": "{\n  programs.emacs = {\n    init = {\n      usePackage = {\n        eglot = {\n          hook = [\n            \"(typescript-ts-mode . eglot-ensure)\"\n          ];\n        };\n\n        # flymake-eslint = {\n        #   enable = false;\n        #   config = ''\n        #     (setq flymake-eslint-executable-name \"${pkgs.nodePackages.eslint}/bin/eslint\")\n\n        #     (add-hook 'typescript-ts-mode-hook (lambda ()\n        #       (remove-hook 'flymake-diagnostic-functions 'eglot-flymake-backend)\n        #       (setq-local flymake-eslint-project-root (locate-dominating-file buffer-file-name \".eslintrc.js\"))\n        #       (flymake-eslint-enable)))\n        #     (add-hook 'js-ts-mode-hook (lambda ()\n        #       (remove-hook 'flymake-diagnostic-functions 'eglot-flymake-backend)\n        #       (setq-local flymake-eslint-project-root (locate-dominating-file buffer-file-name \".eslintrc.js\"))\n        #       (flymake-eslint-enable)))\n        #   '';\n        # };\n      };\n    };\n  };\n}\n"
  },
  {
    "path": "modules/home/fish.nix",
    "content": "{ lib, pkgs, ... }:\n{\n  programs.fish = {\n    enable = true;\n    interactiveShellInit = lib.mkMerge [\n      (lib.mkBefore ''\n        set -g fish_escape_delay_ms 300\n        set -g fish_greeting\n      '')\n      (lib.mkAfter ''\n        ${pkgs.nix-your-shell}/bin/nix-your-shell --nom fish | source\n\n        fish_default_key_bindings\n      '')\n    ];\n    plugins = [\n      {\n        name = \"autopair\";\n        inherit (pkgs.fishPlugins.autopair) src;\n      }\n    ];\n  };\n}\n"
  },
  {
    "path": "modules/home/git.nix",
    "content": "{ pkgs, ... }:\n\n{\n  programs = {\n    delta = {\n      enable = true;\n      enableGitIntegration = true;\n      options = {\n        navigate = true;\n        syntax-theme = \"Nord\";\n      };\n    };\n    git = {\n      enable = true;\n      lfs.enable = true;\n      settings = {\n        user = {\n          email = \"bigras.bruno@gmail.com\";\n          name = \"Bruno Bigras\";\n        };\n        credential.helper = \"${pkgs.gitFull}/bin/git-credential-libsecret\";\n        diff.colorMoved = \"default\";\n        difftool.prompt = true;\n        github.user = \"bbigras\";\n        init.defaultBranch = \"main\";\n        merge.conflictstyle = \"diff3\";\n        mergetool.prompt = true;\n      };\n    };\n  };\n\n  home.shellAliases = rec {\n    g = \"git\";\n    ga = \"git add\";\n    gaa = \"${ga} -A\";\n    gaap = \"${gaa} --patch\";\n    gap = \"${ga} --patch\";\n    gb = \"git branch\";\n    gch = \"git checkout\";\n    gcl = \"git clone\";\n    gco = \"git commit\";\n    gcom = \"${gco} --message\";\n    gcoa = \"${gco} --amend\";\n    gcoan = \"${gcoa} --no-edit\";\n    gdf = \"git diff\";\n    gdfs = \"${gdf} --staged\";\n    gdt = \"git difftool\";\n    gdts = \"${gdt} --staged\";\n    gf = \"git fetch --all --prune --tags\";\n    gfpl = \"${gf} && ${gpl}\";\n    gff = \"${gf} --force\";\n    gl = \"git log --decorate --pretty=format:'%C(auto)%h %C(green)(%as)%C(reset)%C(blue) %<(20,trunc) %an%C(reset) %s%C(auto)%d'\";\n    gm = \"git merge\";\n    gma = \"${gm} --abort\";\n    gmc = \"${gm} --continue\";\n    gpl = \"git pull --rebase\";\n    gps = \"git push\";\n    gpsf = \"git push --force-with-lease\";\n    grb = \"git rebase\";\n    grba = \"${grb} --abort\";\n    grbc = \"${grb} --continue\";\n    grbsn = \"${grb} --exec 'git commit --amend --no-edit -n -S'\";\n    grs = \"git restore\";\n    grss = \"${grs} --staged\";\n    # TODO: deprecate\n    gs = \"git status\";\n    gst = \"git status\";\n    gsw = \"git switch\";\n    gswc = \"${gsw} -c\";\n    gswcf = \"${gsw} -C\";\n    gwt = \"git worktree\";\n    gwta = \"${gwt} add\";\n    gwtl = \"${gwt} list\";\n    gwtr = \"${gwt} remove\";\n  };\n}\n"
  },
  {
    "path": "modules/home/graphical/chromium.nix",
    "content": "{\n  programs.chromium = {\n    enable = true;\n  };\n}\n"
  },
  {
    "path": "modules/home/graphical/default.nix",
    "content": "{\n  flake,\n  lib,\n  pkgs,\n  ...\n}:\nlet\n  inherit (flake) self;\n  inherit (pkgs.stdenv) isDarwin isLinux;\nin\n{\n  imports = [\n    self.homeModules.graphical-linux\n  ];\n  # ++ lib.optionals isLinux [ self.homeModules.graphical-linux ];\n\n  home.packages =\n    with pkgs;\n    lib.filter (lib.meta.availableOn stdenv.hostPlatform) [\n      libnotify\n      qbittorrent\n    ]\n    ++ lib.optionals (stdenv.hostPlatform.system == \"x86_64-linux\") [\n      # spotify\n    ]\n    ++ lib.optionals isLinux [\n      xdg-utils\n    ];\n\n  programs = {\n    ghostty = {\n      enable = true;\n      enableBashIntegration = true;\n      enableFishIntegration = true;\n      enableZshIntegration = true;\n      installBatSyntax = isLinux;\n      package = if isDarwin then null else pkgs.ghostty;\n      settings = {\n        clipboard-read = \"ask\";\n        quit-after-last-window-closed = true;\n      };\n    };\n  };\n\n  services = {\n    remmina.enable = true;\n  };\n  systemd.user.services = {\n    remmina = {\n      Unit = {\n        After = [ \"app-org.keepassxc.KeePassXC@autostart.service\" ];\n        Requires = lib.mkForce [ \"app-org.keepassxc.KeePassXC@autostart.service\" ];\n        PartOf = [ \"graphical-session.target\" ];\n      };\n      Install.WantedBy = lib.mkForce [ \"xdg-desktop-autostart.target\" ];\n    };\n  };\n}\n"
  },
  {
    "path": "modules/home/graphical/firefox.nix",
    "content": "{ lib, pkgs, ... }:\n{\n  programs.firefox = {\n    enable = true;\n    package =\n      let\n        ff =\n          if lib.meta.availableOn pkgs.stdenv.hostPlatform pkgs.firefox-bin then\n            pkgs.firefox-bin\n          else\n            pkgs.firefox;\n      in\n      ff.override { };\n  };\n\n  xdg.mimeApps.defaultApplications = {\n    \"application/x-extension-htm\" = \"firefox.desktop\";\n    \"application/x-extension-html\" = \"firefox.desktop\";\n    \"application/x-extension-shtml\" = \"firefox.desktop\";\n    \"application/x-extension-xht\" = \"firefox.desktop\";\n    \"application/x-extension-xhtml\" = \"firefox.desktop\";\n    \"application/xhtml+xml\" = \"firefox.desktop\";\n    \"text/html\" = \"firefox.desktop\";\n    \"x-scheme-handler/chrome\" = \"firefox.desktop\";\n    \"x-scheme-handler/http\" = \"firefox.desktop\";\n    \"x-scheme-handler/https\" = \"firefox.desktop\";\n  };\n}\n"
  },
  {
    "path": "modules/home/graphical/heroic.nix",
    "content": "{ pkgs, ... }:\n\n{\n  home.packages = with pkgs; [\n    (heroic.override {\n      extraPkgs = pkgs: [\n        pkgs.gamescope\n\n        pkgs.gdk-pixbuf\n        pkgs.gtk3\n        pkgs.adwaita-icon-theme\n      ];\n    })\n  ];\n}\n"
  },
  {
    "path": "modules/home/graphical/keepassxc.nix",
    "content": "{\n  programs.keepassxc = {\n    enable = true;\n    settings = {\n      Browser.Enabled = true;\n      # Browser.UpdateBinaryPath = false;\n      General = {\n        MinimizeAfterUnlock = true;\n      };\n      FdoSecrets.Enabled = true;\n      GUI = {\n        AdvancedSettings = true;\n        ApplicationTheme = \"dark\";\n        CompactMode = true;\n        HidePasswords = true;\n        LaunchAtStartup = true;\n        MinimizeOnClose = true;\n        MinimizeToTray = true;\n        ShowTrayIcon = true;\n      };\n      SSHAgent.Enabled = false;\n      Security = {\n        LockDatabaseIdleSeconds = 18000;\n      };\n    };\n  };\n}\n"
  },
  {
    "path": "modules/home/graphical/linux.nix",
    "content": "{\n  flake,\n  lib,\n  pkgs,\n  ...\n}:\nlet\n  inherit (flake) self;\nin\n{\n  imports = with self.homeModules; [\n    graphical-chromium\n    # graphical-common\n    graphical-firefox\n    graphical-keepassxc\n    graphical-psd\n    graphical-vicinae\n    graphical-zed-editor\n    graphical-mime\n    graphical-mpv\n  ];\n\n  dconf.enable = lib.mkForce true;\n\n  home = {\n    packages = with pkgs; [\n      # adwaita-icon-theme\n      # evince\n      # gammastep\n      # hicolor-icon-theme\n      pavucontrol\n      # pinentry-gnome3\n      # qgnomeplatform\n      # qt5.qtwayland\n      # qt6.qtwayland\n      # spawn\n    ];\n\n    sessionVariables = {\n      MOZ_DBUS_REMOTE = 1;\n      MOZ_USE_XINPUT2 = 1;\n      QT_AUTO_SCREEN_SCALE_FACTOR = 1;\n      _JAVA_OPTIONS = \"-Dawt.useSystemAAFontSettings=on -Dswing.aatext=true -Dsun.java2d.xrender=true\";\n    };\n  };\n\n  gtk = {\n    enable = true;\n    gtk2.extraConfig = \"gtk-application-prefer-dark-theme = true\";\n    gtk3.extraConfig.gtk-application-prefer-dark-theme = true;\n  };\n\n  qt = {\n    enable = true;\n    style.name = \"kvantum\";\n  };\n\n  services = {\n    gpg-agent.pinentry.package = pkgs.pinentry-qt;\n  };\n}\n"
  },
  {
    "path": "modules/home/graphical/lutris.nix",
    "content": "{ pkgs, osConfig, ... }:\n\n{\n  programs.lutris = {\n    enable = false;\n    defaultWinePackage = pkgs.proton-ge-bin;\n    extraPackages = with pkgs; [\n      mangohud\n      winetricks\n      gamescope\n      gamemode\n      umu-launcher\n    ];\n    protonPackages = [ pkgs.proton-ge-bin ];\n    steamPackage = osConfig.programs.steam.package;\n    winePackages = [\n      # pkgs.wineWow64Packages.full\n      pkgs.proton-ge-bin\n    ];\n  };\n}\n"
  },
  {
    "path": "modules/home/graphical/mime.nix",
    "content": "let\n  documentDefaults = {\n    \"application/vnd.comicbook-rar\" = \"org.gnome.Evince.desktop\";\n    \"application/vnd.comicbook+zip\" = \"org.gnome.Evince.desktop\";\n    \"application/x-cb7\" = \"org.gnome.Evince.desktop\";\n    \"application/x-cbr\" = \"org.gnome.Evince.desktop\";\n    \"application/x-cbt\" = \"org.gnome.Evince.desktop\";\n    \"application/x-cbz\" = \"org.gnome.Evince.desktop\";\n    \"application/x-ext-cb7\" = \"org.gnome.Evince.desktop\";\n    \"application/x-ext-cbr\" = \"org.gnome.Evince.desktop\";\n    \"application/x-ext-cbt\" = \"org.gnome.Evince.desktop\";\n    \"application/x-ext-cbz\" = \"org.gnome.Evince.desktop\";\n    \"application/x-ext-djv\" = \"org.gnome.Evince.desktop\";\n    \"application/x-ext-djvu\" = \"org.gnome.Evince.desktop\";\n    \"image/vnd.djvu+multipage\" = \"org.gnome.Evince.desktop\";\n    \"application/x-bzdvi\" = \"org.gnome.Evince.desktop\";\n    \"application/x-dvi\" = \"org.gnome.Evince.desktop\";\n    \"application/x-ext-dvi\" = \"org.gnome.Evince.desktop\";\n    \"application/x-gzdvi\" = \"org.gnome.Evince.desktop\";\n    \"application/pdf\" = \"org.gnome.Evince.desktop\";\n    \"application/x-bzpdf\" = \"org.gnome.Evince.desktop\";\n    \"application/x-ext-pdf\" = \"org.gnome.Evince.desktop\";\n    \"application/x-gzpdf\" = \"org.gnome.Evince.desktop\";\n    \"application/x-xzpdf\" = \"org.gnome.Evince.desktop\";\n    \"application/postscript\" = \"org.gnome.Evince.desktop\";\n    \"application/x-bzpostscript\" = \"org.gnome.Evince.desktop\";\n    \"application/x-gzpostscript\" = \"org.gnome.Evince.desktop\";\n    \"application/x-ext-eps\" = \"org.gnome.Evince.desktop\";\n    \"application/x-ext-ps\" = \"org.gnome.Evince.desktop\";\n    \"image/x-bzeps\" = \"org.gnome.Evince.desktop\";\n    \"image/x-eps\" = \"org.gnome.Evince.desktop\";\n    \"image/x-gzeps\" = \"org.gnome.Evince.desktop\";\n    \"image/tiff\" = \"org.gnome.Evince.desktop\";\n    \"application/oxps\" = \"org.gnome.Evince.desktop\";\n    \"application/vnd.ms-xpsdocument\" = \"org.gnome.Evince.desktop\";\n    \"application/illustrator\" = \"org.gnome.Evince.desktop\";\n  };\nin\n{\n  xdg.mimeApps.defaultApplications = documentDefaults;\n}\n"
  },
  {
    "path": "modules/home/graphical/mpv.nix",
    "content": "{\n  programs.mpv.enable = true;\n\n  xdg.configFile.\"mpv/mpv.conf\".text = ''\n    vo=gpu\n    hwdec=auto\n    profile=gpu-hq\n\n    scale=ewa_lanczossharp\n    cscale=ewa_lanczossharp\n    video-sync=display-resample\n    interpolation\n    tscale=oversample\n  '';\n\n  xdg.mimeApps.defaultApplications = {\n    \"application/mxf\" = \"mpv.desktop\";\n    \"application/sdp\" = \"mpv.desktop\";\n    \"application/smil\" = \"mpv.desktop\";\n    \"application/streamingmedia\" = \"mpv.desktop\";\n    \"application/vnd.apple.mpegurl\" = \"mpv.desktop\";\n    \"application/vnd.ms-asf\" = \"mpv.desktop\";\n    \"application/vnd.rn-realmedia\" = \"mpv.desktop\";\n    \"application/vnd.rn-realmedia-vbr\" = \"mpv.desktop\";\n    \"application/x-cue\" = \"mpv.desktop\";\n    \"application/x-extension-m4a\" = \"mpv.desktop\";\n    \"application/x-extension-mp4\" = \"mpv.desktop\";\n    \"application/x-matroska\" = \"mpv.desktop\";\n    \"application/x-mpegurl\" = \"mpv.desktop\";\n    \"application/x-ogm\" = \"mpv.desktop\";\n    \"application/x-ogm-video\" = \"mpv.desktop\";\n    \"application/x-shorten\" = \"mpv.desktop\";\n    \"application/x-smil\" = \"mpv.desktop\";\n    \"application/x-streamingmedia\" = \"mpv.desktop\";\n    \"video/3gp\" = \"mpv.desktop\";\n    \"video/3gpp\" = \"mpv.desktop\";\n    \"video/3gpp2\" = \"mpv.desktop\";\n    \"video/avi\" = \"mpv.desktop\";\n    \"video/divx\" = \"mpv.desktop\";\n    \"video/dv\" = \"mpv.desktop\";\n    \"video/fli\" = \"mpv.desktop\";\n    \"video/flv\" = \"mpv.desktop\";\n    \"video/mkv\" = \"mpv.desktop\";\n    \"video/mp2t\" = \"mpv.desktop\";\n    \"video/mp4\" = \"mpv.desktop\";\n    \"video/mp4v-es\" = \"mpv.desktop\";\n    \"video/mpeg\" = \"mpv.desktop\";\n    \"video/msvideo\" = \"mpv.desktop\";\n    \"video/ogg\" = \"mpv.desktop\";\n    \"video/quicktime\" = \"mpv.desktop\";\n    \"video/vnd.divx\" = \"mpv.desktop\";\n    \"video/vnd.mpegurl\" = \"mpv.desktop\";\n    \"video/vnd.rn-realvideo\" = \"mpv.desktop\";\n    \"video/webm\" = \"mpv.desktop\";\n    \"video/x-avi\" = \"mpv.desktop\";\n    \"video/x-flc\" = \"mpv.desktop\";\n    \"video/x-flic\" = \"mpv.desktop\";\n    \"video/x-flv\" = \"mpv.desktop\";\n    \"video/x-m4v\" = \"mpv.desktop\";\n    \"video/x-matroska\" = \"mpv.desktop\";\n    \"video/x-mpeg2\" = \"mpv.desktop\";\n    \"video/x-mpeg3\" = \"mpv.desktop\";\n    \"video/x-ms-afs\" = \"mpv.desktop\";\n    \"video/x-ms-asf\" = \"mpv.desktop\";\n    \"video/x-ms-wmv\" = \"mpv.desktop\";\n    \"video/x-ms-wmx\" = \"mpv.desktop\";\n    \"video/x-ms-wvxvideo\" = \"mpv.desktop\";\n    \"video/x-msvideo\" = \"mpv.desktop\";\n    \"video/x-ogm\" = \"mpv.desktop\";\n    \"video/x-ogm+ogg\" = \"mpv.desktop\";\n    \"video/x-theora\" = \"mpv.desktop\";\n    \"video/x-theora+ogg\" = \"mpv.desktop\";\n  };\n}\n"
  },
  {
    "path": "modules/home/graphical/psd.nix",
    "content": "{\n  services = {\n    psd = {\n      enable = true;\n      browsers = [\n        \"firefox\"\n      ];\n    };\n  };\n}\n"
  },
  {
    "path": "modules/home/graphical/vicinae.nix",
    "content": "{\n  programs.vicinae = {\n    enable = true;\n    systemd.enable = true;\n\n    # https://docs.vicinae.com/quickstart/cosmic#layer-shell\n    settings.launcher_window.layer_shell.enabled = false;\n  };\n\n  systemd.user.services.vicinae.Service.Environment = [\n    \"PATH=/etc/profiles/per-user/bbigras/bin:/run/current-system/sw/bin\"\n  ];\n}\n"
  },
  {
    "path": "modules/home/graphical/zed-editor.nix",
    "content": "{\n  lib,\n  pkgs,\n  ...\n}:\n{\n  home.packages = with pkgs; [\n    nil\n    nixd\n  ];\n\n  programs.zed-editor = {\n    enable = true;\n    # https://github.com/zed-industries/extensions/tree/main/extensions\n    extensions = [\n      \"env\"\n      \"gleam\"\n      \"graphql\"\n      \"helm\"\n      \"just\"\n      \"nix\"\n      \"rust\"\n      \"sql\"\n      \"toml\"\n    ];\n    userSettings = {\n      features = {\n        edit_prediction_provider = \"copilot\";\n      };\n      node = {\n        path = lib.getExe pkgs.nodejs;\n        npm_path = lib.getExe' pkgs.nodejs \"npm\";\n      };\n      hour_format = \"hour24\";\n      auto_update = false;\n      lsp = {\n        rust-analyzer = {\n          initialization_options = {\n            check = {\n              command = \"clippy\"; # rust-analyzer.check.command (default: \"check\")\n            };\n            inlayHints = {\n              maxLength = null;\n              lifetimeElisionHints = {\n                enable = \"skip_trivial\";\n                useParameterNames = true;\n              };\n              closureReturnTypeHints = {\n                enable = \"always\";\n              };\n            };\n          };\n        };\n      };\n    };\n  };\n}\n"
  },
  {
    "path": "modules/home/htop.nix",
    "content": "{ config, ... }:\n{\n  programs.htop = {\n    enable = true;\n    settings = {\n      delay = 10;\n      show_program_path = false;\n      show_cpu_frequency = true;\n      show_cpu_temperature = true;\n      hide_kernel_threads = true;\n    }\n    // (\n      with config.lib.htop;\n      leftMeters [\n        (bar \"AllCPUs2\")\n        (bar \"Memory\")\n        (bar \"Swap\")\n      ]\n    )\n    // (\n      with config.lib.htop;\n      rightMeters [\n        (text \"Hostname\")\n        (text \"Tasks\")\n        (text \"LoadAverage\")\n        (text \"Uptime\")\n        (text \"Systemd\")\n      ]\n    );\n  };\n}\n"
  },
  {
    "path": "modules/home/jjui.nix",
    "content": "{\n  programs.jjui = {\n    enable = true;\n  };\n}\n"
  },
  {
    "path": "modules/home/jujutsu.nix",
    "content": "{ pkgs, ... }:\n\n{\n  home = {\n    packages = with pkgs; [\n      kdiff3\n      meld\n      # watchman\n    ];\n  };\n\n  # environment.systemPackages = with pkgs; [\n  #   watchman\n  # ];\n\n  programs = {\n    mergiraf = {\n      enable = true;\n      enableJujutsuIntegration = true;\n    };\n    jujutsu = {\n      enable = true;\n      settings = {\n        user = {\n          name = \"Bruno Bigras\";\n          email = \"bigras.bruno@gmail.com\";\n        };\n        ui.revsets-use-glob-by-default = true;\n      };\n    };\n  };\n\n}\n"
  },
  {
    "path": "modules/home/music.nix",
    "content": "{ pkgs, ... }:\n{\n  home.packages = with pkgs; [\n    beets\n    checkart\n    fixart\n    mediainfo\n  ];\n}\n"
  },
  {
    "path": "modules/home/radicle.nix",
    "content": "{ pkgs, ... }:\n\n{\n  home = {\n    packages = with pkgs; [\n      radicle-tui\n    ];\n  };\n\n  programs = {\n    radicle = {\n      enable = true;\n      settings = {\n        node = {\n          listen = [ \"0.0.0.0:8776\" ];\n        };\n      };\n    };\n  };\n\n  services = {\n    radicle.node = {\n      enable = true;\n      lazy.enable = true;\n    };\n  };\n}\n"
  },
  {
    "path": "modules/home/ssh.nix",
    "content": "{\n  home.file.\".ssh/config\".text = ''\n    Include ~/.ssh/config.host\n\n    Host *\n      CanonicalizeHostname yes\n      PermitLocalCommand yes\n      CanonicalDomains tamarin-macaroni.ts.net\n\n    Match canonical Host *.tamarin-macaroni.ts.net\n      ForwardAgent yes\n\n    Match canonical Host *\n      ChallengeResponseAuthentication no\n      ControlMaster auto\n      ControlPath ~/.ssh/ssh-%r@%h:%p\n      ControlPersist 30m\n      ForwardAgent no\n      ForwardX11 no\n      ForwardX11Trusted no\n      HashKnownHosts yes\n      ServerAliveCountMax 5\n      ServerAliveInterval 60\n      StrictHostKeyChecking ask\n      VerifyHostKeyDNS yes\n  '';\n}\n"
  },
  {
    "path": "modules/home/standalone.nix",
    "content": "# Shared configuration for standalone home-manager hosts\n# This module is imported by configurations/home/*/default.nix\n{\n  config,\n  flake,\n  pkgs,\n  ...\n}:\nlet\n  inherit (flake) inputs self;\nin\n{\n  imports = [\n    inputs.nix-index-database.homeModules.nix-index\n  ]\n  ++ (with self.homeModules; [\n    nixpkgs\n    theme\n  ]);\n\n  home.sessionVariables.NIX_PATH = \"nixpkgs=${config.xdg.dataHome}/nixpkgs\";\n\n  programs = {\n    home-manager.enable = true;\n    fish.plugins = [\n      {\n        name = \"nix-env\";\n        src = pkgs.fetchFromGitHub {\n          owner = \"lilyball\";\n          repo = \"nix-env.fish\";\n          rev = \"7b65bd228429e852c8fdfa07601159130a818cfa\";\n          hash = \"sha256-RG/0rfhgq6aEKNZ0XwIqOaZ6K5S4+/Y5EEMnIdtfPhk\";\n        };\n      }\n    ];\n  };\n\n  xdg = {\n    dataFile.nixpkgs.source = inputs.nixpkgs;\n    # configFile.\"nix/nix.conf\".text = ''\n    #   flake-registry = ${config.xdg.configHome}/nix/registry.json\n    # '';\n  };\n}\n"
  },
  {
    "path": "modules/home/starship.nix",
    "content": "{ lib, pkgs, ... }:\n{\n  programs.starship = {\n    enable = true;\n    settings = {\n      custom = {\n        jj = {\n          when = \"${lib.getExe pkgs.jj-starship} detect\";\n          shell = [ \"${lib.getExe pkgs.jj-starship}\" ];\n          format = \"$output \";\n        };\n      };\n      git_branch.disabled = true;\n      git_status.disabled = true;\n    };\n    presets = [\n      \"nerd-font-symbols\"\n      \"pure-preset\"\n    ];\n  };\n}\n"
  },
  {
    "path": "modules/home/syncthing.nix",
    "content": "{\n  # networking = {\n  #   firewall = {\n  #     allowedUDPPorts = [\n  #       22000 # syncthing\n  #       21027 # syncthing discovery\n  #     ];\n  #     allowedTCPPorts = [\n  #       22000 # syncthing\n  #     ];\n  #   };\n  # };\n\n  services.syncthing = {\n    enable = true;\n    tray.enable = true;\n  };\n  systemd.user.services = {\n    syncthing = {\n      Service = {\n        StandardOutput = \"null\";\n      };\n    };\n  };\n}\n"
  },
  {
    "path": "modules/home/television.nix",
    "content": "{ config, lib, ... }:\n{\n  programs = {\n    nix-search-tv = {\n      enable = true;\n      enableTelevisionIntegration = false;\n    };\n    television = {\n      enable = true;\n      settings = {\n        tick_rate = 50;\n        default_channel = \"files\";\n        shell_integration = {\n          channel_triggers = {\n            files = [\n              \"bat\"\n              \"cat\"\n              \"chmod\"\n              \"chown\"\n              \"cp\"\n              \"gunzip\"\n              \"gzip\"\n              \"head\"\n              \"less\"\n              \"ln\"\n              \"mv\"\n              \"nano\"\n              \"rm\"\n              \"tail\"\n              \"tar\"\n              \"touch\"\n              \"unzip\"\n              \"vim\"\n              \"xz\"\n              \"zip\"\n            ];\n            git-diff = [\n              \"git add\"\n              \"git restore\"\n            ];\n            git-log = [\n              \"git log\"\n              \"git show\"\n            ];\n            man = [ \"man\" ];\n            nixpkgs = [ \"nix shell\" ];\n          };\n          keybindings = {\n            smart_autocomplete = \"ctrl-o\";\n            command_history = \"ctrl-t\";\n          };\n        };\n      };\n      channels = {\n        files = {\n          metadata = {\n            name = \"files\";\n            description = \"A channel to select files and directories\";\n            requirements = [\n              \"fd\"\n              \"bat\"\n            ];\n          };\n          source = {\n            command = [\n              \"fd -t f\"\n              \"fd -t f -H\"\n            ];\n          };\n          preview = {\n            command = \"bat -n --color=always '{}'\";\n            env = {\n              BAT_THEME = \"ansi\";\n            };\n          };\n          keybindings = {\n            shortcut = \"f1\";\n            f12 = \"actions:edit\";\n            ctrl-up = \"actions:goto_parent_dir\";\n          };\n          actions.edit = {\n            description = \"Opens the selected entries with the default editor (falls back to vim)\";\n            command = \"$${EDITOR:-vim} '{}'\";\n            # use `mode = \"fork\"` if you want to return to tv afterwards\n            mode = \"execute\";\n          };\n          actions.goto_parent_dir = {\n            description = \"Re-opens tv in the parent directory\";\n            command = \"tv files ..\";\n            mode = \"execute\";\n          };\n        };\n        git-diff = {\n          metadata = {\n            name = \"git-diff\";\n            description = \"A channel to select files from git diff commands\";\n            requirements = [ \"git\" ];\n          };\n          source = {\n            command = \"git diff --name-only HEAD\";\n          };\n          preview = {\n            command = \"git diff HEAD --color=always -- '{}'\";\n          };\n        };\n        git-log = {\n          metadata = {\n            name = \"git-log\";\n            description = \"A channel to select from git log entries\";\n            requirements = [ \"git\" ];\n          };\n          source = {\n            command = \"git log --graph --pretty=format:'%C(yellow)%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --color=always\";\n            output = \"{strip_ansi|split: :1}\";\n            ansi = true;\n          };\n          preview = {\n            command = \"git show -p --stat --pretty=fuller --color=always '{strip_ansi|split: :1}' | head -n 1000\";\n          };\n        };\n        man-pages = {\n          metadata = {\n            name = \"man-pages\";\n            description = \"Browse and preview system manual pages\";\n            requirements = [\n              \"apropos\"\n              \"man\"\n              \"col\"\n            ];\n          };\n          source = {\n            # List all man pages using apropos\n            command = \"apropos .\";\n          };\n          preview = {\n            # Show the man page for the selected entry\n            command = \"man '{0}' | col -bx\";\n            env = {\n              \"MANWIDTH\" = \"80\";\n            };\n          };\n          keybindings = {\n            enter = \"actions:open\";\n          };\n          actions.open = {\n            description = \"Open the selected man page in the system pager\";\n            command = \"man '{0}'\";\n            mode = \"execute\";\n          };\n          ui.preview_panel = {\n            header = \"{0}\";\n          };\n        };\n        nixpkgs = {\n          metadata = {\n            description = \"Search nixpkgs\";\n            name = \"nixpkgs\";\n            requirements = [\n              \"nix-search-tv\"\n              \"sed\"\n            ];\n          };\n          preview = {\n            command = \"${lib.getExe config.programs.nix-search-tv.package} preview \\\"{}\\\"\";\n          };\n          source = {\n            command = \"${lib.getExe config.programs.nix-search-tv.package} print nixpkgs\";\n          };\n        };\n      };\n    };\n  };\n}\n"
  },
  {
    "path": "modules/home/terminfo-hack.nix",
    "content": "{ pkgs, ... }:\n{\n  home.file.\".terminfo\".source = pkgs.symlinkJoin {\n    name = \"terminfo-dirs\";\n    paths = with pkgs; [\n      (ncurses + \"/share/terminfo\")\n      (ghostty + \"/share/terminfo\")\n    ];\n  };\n}\n"
  },
  {
    "path": "modules/home/tkey-ssh-agent.nix",
    "content": "{ pkgs, ... }:\n\n{\n  home.sessionVariablesExtra = ''\n    if [ -z \"$SSH_AUTH_SOCK\" ]; then\n      export SSH_AUTH_SOCK=$XDG_RUNTIME_DIR/tkey-ssh-agent\n    fi\n  '';\n\n  systemd.user.services = {\n    tkey-ssh-agent = {\n      Unit = {\n        Description = \"tkey-ssh-agent\";\n        After = [ \"graphical-session.target\" ];\n        PartOf = [ \"graphical-session.target\" ];\n      };\n      Service = {\n        ExecStart = \"${pkgs.tkey-ssh-agent}/bin/tkey-ssh-agent -a %t/tkey-ssh-agent --uss\";\n      };\n      Install.WantedBy = [ \"graphical-session.target\" ];\n    };\n  };\n}\n"
  },
  {
    "path": "modules/home/tmux.nix",
    "content": "{ pkgs, ... }:\n{\n  programs.tmux = {\n    enable = true;\n    sensibleOnTop = true;\n    aggressiveResize = true;\n    clock24 = true;\n    escapeTime = 0;\n    # Use idempotent new-session to avoid creating duplicate sessions when both\n    # NixOS (/etc/tmux.conf) and home-manager configs are loaded. The -A flag\n    # attaches if the session exists, otherwise creates it.\n    newSession = false;\n    plugins = with pkgs.tmuxPlugins; [\n      fingers\n      lazy-restore\n    ];\n    mouse = true;\n    secureSocket = false;\n    terminal = \"tmux-256color\";\n    historyLimit = 30000;\n    # keyMode = \"vi\";\n    # prefix = \"C-a\";\n    extraConfig = ''\n      new-session -A -s 0\n\n      # update the env when attaching to an existing session\n      set -g update-environment -r\n\n      set -g set-clipboard on\n      set -ag terminal-overrides \",alacritty*:Tc,foot*:Tc,xterm*:Tc\"\n\n      set -as terminal-features \",alacritty*:RGB,foot*:RGB,xterm*:RGB\"\n      set -as terminal-features \",alacritty*:hyperlinks,foot*:hyperlinks,xterm*:hyperlinks\"\n      set -as terminal-features \",alacritty*:usstyle,foot*:usstyle,xterm*:usstyle\"\n      set -as terminal-features \",alacritty*:extkeys,foot*:extkeys,xterm*:extkeys\"\n      set -as terminal-features \",alacritty*:clipboard,foot*:clipboard,xterm*:clipboard\"\n\n\n      # recommended by vim.health\n      set-option -g focus-events on\n\n      # automatically renumber windows\n      set -g renumber-windows on\n\n      bind C-a last-window\n      bind a send-prefix\n      bind R source-file ~/.config/tmux/tmux.conf \\; display-message \"Config reloaded...\"\n\n      bind : command-prompt\n      bind r refresh-client\n      bind L clear-history\n\n      bind space next-window\n      bind bspace previous-window\n      bind enter next-layout\n\n      bind v  split-window -h -c \"#{pane_current_path}\"\n      bind s  split-window -v -c \"#{pane_current_path}\"\n      bind h  select-pane -L\n      bind j  select-pane -D\n      bind k  select-pane -U\n      bind l  select-pane -R\n      bind \\\\ split-window -h -c \"#{pane_current_path}\"\n      bind -  split-window -v -c \"#{pane_current_path}\"\n\n      bind C-o rotate-window\n\n      bind + select-layout main-horizontal\n      bind = select-layout main-vertical\n\n      bind a last-pane\n      bind q display-panes\n      bind c new-window\n      bind t next-window\n      bind T previous-window\n\n      bind [ copy-mode\n      bind ] paste-buffer\n\n      set -g base-index 0\n      set-window-option -g automatic-rename\n      setw -g monitor-activity on\n      set -g visual-activity off\n\n      set -g status-right '%a | %Y-%m-%d | %H:%M'\n\n      # for t-smart-tmux-session-manager\n      bind-key x kill-pane # skip \"kill-pane 1? (y/n)\" prompt\n      set -g detach-on-destroy off  # don't exit from tmux when closing a session\n      set -g @t-fzf-find-binding 'ctrl-f:change-prompt(  )+reload(fd -H -d 2 -t d . ~)'\n      set -g @t-fzf-prompt '  '\n    '';\n  };\n}\n"
  },
  {
    "path": "modules/home/trusted/default.nix",
    "content": "{ flake, ... }:\n{\n  imports = with flake.self.homeModules; [ trusted-gpg ];\n\n  # programs.git.settings = {\n  #   commit.gpgsign = true;\n  #   gpg.format = \"ssh\";\n  #   gpg.ssh.allowedSignersFile = \"~/.ssh/allowed_signers\";\n  #   user.signingkey = \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEKJvfEJv2UsKPnfP9fHIwTuGsMWXc4wHYMf7HZlq2vY\";\n  # };\n}\n"
  },
  {
    "path": "modules/home/trusted/gpg.nix",
    "content": "{\n  config,\n  lib,\n  pkgs,\n  ...\n}:\n{\n  services.gpg-agent = lib.mkIf pkgs.stdenv.isLinux {\n    enable = true;\n    enableExtraSocket = true;\n    enableScDaemon = false;\n    enableSshSupport = false;\n    defaultCacheTtl = 34560000;\n    maxCacheTtl = 34560000;\n    extraConfig = ''\n      extra-socket /run/user/${toString config.home.uid}/gnupg/S.gpg-agent.extra\n    '';\n  };\n\n  programs.gpg.settings = {\n    # Default/trusted key ID to use (helpful with throw-keyids)\n    # default-key = \"\";\n    # trusted-key = \"\";\n\n    # https://github.com/drduh/config/blob/master/gpg.conf\n    # https://www.gnupg.org/documentation/manuals/gnupg/GPG-Configuration-Options.html\n    # https://www.gnupg.org/documentation/manuals/gnupg/GPG-Esoteric-Options.html\n    # Use AES256, 192, or 128 as cipher\n    personal-cipher-preferences = \"AES256 AES192 AES\";\n    # Use SHA512, 384, or 256 as digest\n    personal-digest-preferences = \"SHA512 SHA384 SHA256\";\n    # Use ZLIB, BZIP2, ZIP, or no compression\n    personal-compress-preferences = \"ZLIB BZIP2 ZIP Uncompressed\";\n    # Default preferences for new keys\n    default-preference-list = \"SHA512 SHA384 SHA256 AES256 AES192 AES ZLIB BZIP2 ZIP Uncompressed\";\n    # SHA512 as digest to sign keys\n    cert-digest-algo = \"SHA512\";\n    # SHA512 as digest for symmetric ops\n    s2k-digest-algo = \"SHA512\";\n    # AES256 as cipher for symmetric ops\n    s2k-cipher-algo = \"AES256\";\n    # UTF-8 support for compatibility\n    charset = \"utf-8\";\n    # Show Unix timestamps\n    fixed-list-mode = \"\";\n    # No comments in signature\n    no-comments = \"\";\n    # No version in signature\n    no-emit-version = \"\";\n    # Disable banner\n    no-greeting = \"\";\n    # Long hexidecimal key format\n    keyid-format = \"0xlong\";\n    # Display UID validity\n    list-options = \"show-uid-validity\";\n    verify-options = \"show-uid-validity\";\n    # Display all keys and their fingerprints\n    with-fingerprint = \"\";\n    # Cross-certify subkeys are present and valid\n    require-cross-certification = \"\";\n    # Disable caching of passphrase for symmetrical ops\n    no-symkey-cache = \"\";\n    # Enable smartcard\n    # use-agent = \"\";\n  };\n}\n"
  },
  {
    "path": "modules/home/xdg.nix",
    "content": "{ pkgs, ... }:\n{\n  xdg = {\n    enable = true;\n    mimeApps.enable = pkgs.stdenv.isLinux;\n    userDirs = {\n      enable = pkgs.stdenv.isLinux;\n      desktop = \"$HOME/Bureau\";\n      documents = \"$HOME/Documents\";\n      download = \"$HOME/Téléchargements\";\n      music = \"$HOME/Musique\";\n      pictures = \"$HOME/Photos\";\n      publicShare = \"$HOME/Public\";\n      templates = \"$HOME/Templates\";\n      videos = \"$HOME/Vidéos\";\n    };\n  };\n}\n"
  },
  {
    "path": "modules/home/zsh.nix",
    "content": "{\n  config,\n  lib,\n  pkgs,\n  ...\n}:\n{\n  programs.zsh = {\n    enable = true;\n    enableCompletion = true;\n    enableVteIntegration = pkgs.stdenv.isLinux;\n    autocd = true;\n    autosuggestion.enable = true;\n    dotDir = \"${config.xdg.configHome}/zsh\";\n    history = {\n      expireDuplicatesFirst = true;\n      extended = true;\n      ignoreDups = true;\n      ignoreSpace = true;\n      path = \"${config.xdg.dataHome}/zsh/history\";\n      save = 10000;\n      share = true;\n    };\n    plugins = [\n      {\n        name = \"nix-zsh-completions\";\n        src = pkgs.nix-zsh-completions;\n        file = \"share/zsh/plugins/nix/nix-zsh-completions.plugin.zsh\";\n        completions = [ \"share/zsh/site-functions\" ];\n      }\n      {\n        name = \"vi-mode\";\n        src = pkgs.zsh-vi-mode;\n        file = \"share/zsh/zsh-vi-mode/zsh-vi-mode.plugin.zsh\";\n      }\n      {\n        name = \"fast-syntax-highlighting\";\n        src = pkgs.zsh-fast-syntax-highlighting;\n        file = \"share/zsh/plugins/fast-syntax-highlighting/fast-syntax-highlighting.plugin.zsh\";\n      }\n      {\n        name = \"autopair\";\n        inherit (pkgs.zsh-autopair) src;\n        file = \"zsh-autopair.plugin.zsh\";\n      }\n      {\n        name = \"history-substring-search\";\n        src = pkgs.zsh-history-substring-search;\n        file = \"share/zsh-history-substring-search/zsh-history-substring-search.zsh\";\n      }\n    ];\n    envExtra = ''\n      export LESSHISTFILE=\"${config.xdg.dataHome}/less_history\"\n      export CARGO_HOME=\"${config.xdg.cacheHome}/cargo\"\n    '';\n    initContent = lib.mkMerge [\n      # Workaround for home-manager#2562: completions from home.packages aren't in fpath\n      (lib.mkOrder 561 ''\n        fpath+=(\"${config.home.profileDirectory}\"/share/zsh/site-functions \\\n                \"${config.home.profileDirectory}\"/share/zsh/$ZSH_VERSION/functions \\\n                \"${config.home.profileDirectory}\"/share/zsh/vendor-completions)\n      '')\n      ''\n        bindkey \"''${terminfo[kcuu1]}\" history-substring-search-up\n        bindkey '^[[A' history-substring-search-up\n        bindkey \"''${terminfo[kcud1]}\" history-substring-search-down\n        bindkey '^[[B' history-substring-search-down\n\n        ${pkgs.nix-your-shell}/bin/nix-your-shell --nom zsh | source /dev/stdin\n\n        bindkey \"''${terminfo[khome]}\" beginning-of-line\n        bindkey \"''${terminfo[kend]}\" end-of-line\n        bindkey \"''${terminfo[kdch1]}\" delete-char\n        bindkey \"^[[1;5C\" forward-word\n        bindkey \"^[[1;3C\" forward-word\n        bindkey \"^[[1;5D\" backward-word\n        bindkey \"^[[1;3D\" backward-word\n\n        local CONST_SSH_SOCK=\"$HOME/.ssh/ssh-auth-sock\"\n        if [ ! -z ''${SSH_AUTH_SOCK+x} ] && [ \"$SSH_AUTH_SOCK\" != \"$CONST_SSH_SOCK\" ]; then\n          rm -f \"$CONST_SSH_SOCK\"\n          ln -sf \"$SSH_AUTH_SOCK\" \"$CONST_SSH_SOCK\"\n          export SSH_AUTH_SOCK=\"$CONST_SSH_SOCK\"\n        fi\n      ''\n    ];\n    sessionVariables = {\n      RPROMPT = \"\";\n    };\n  };\n}\n"
  },
  {
    "path": "modules/nixos/agenix-rekey.nix",
    "content": "# agenix-rekey configuration for automatic secret rekeying\n{\n  config,\n  flake,\n  lib,\n  ...\n}:\nlet\n  inherit (flake) inputs self;\nin\n{\n  imports = [\n    inputs.agenix-rekey.nixosModules.default\n  ];\n\n  age.rekey = {\n    # Master identity - private key used for decryption (must exist on machine running rekey)\n    masterIdentities = [ \"/home/bbigras/.ssh/bbigras\" ];\n\n    # Store rekeyed secrets locally per-host\n    storageMode = \"local\";\n    localStorageDir = lib.mkDefault (self + \"/secrets/rekeyed/${config.networking.hostName}\");\n\n    # Host pubkey must be set per-host in configurations/nixos/<host>/default.nix:\n    # age.rekey.hostPubkey = \"ssh-ed25519 AAAA...\";\n  };\n}\n"
  },
  {
    "path": "modules/nixos/core.nix",
    "content": "{\n  config,\n  flake,\n  lib,\n  pkgs,\n  ...\n}:\nlet\n  inherit (flake) self;\nin\n{\n  imports = with self.nixosModules; [\n    aspell\n    common\n    nix\n    nixpkgs\n    resolved\n    services-veilid\n    tmux\n  ];\n\n  environment.systemPackages = with pkgs; [\n    man-pages\n    ghostty.terminfo\n  ];\n\n  boot.kernelParams = [ \"log_buf_len=10M\" ];\n\n  i18n.defaultLocale = \"fr_CA.UTF-8\";\n\n  networking = {\n    firewall = {\n      trustedInterfaces = [ \"tailscale0\" ];\n      allowedUDPPorts = [ ];\n    };\n    useDHCP = false;\n    useNetworkd = true;\n    wireguard.enable = true;\n  };\n\n  security = {\n    # pam.services.sudo.u2fAuth = true;\n    polkit.enable = true;\n    sudo-rs = {\n      enable = true;\n      wheelNeedsPassword = lib.mkDefault false;\n    };\n  };\n\n  services = {\n    dbus.implementation = \"broker\";\n    openssh = {\n      enable = true;\n      settings.PermitRootLogin = lib.mkDefault \"no\";\n    };\n    smartd = {\n      enable = true;\n      notifications = {\n        systembus-notify.enable = true;\n      };\n    };\n    tailscale = {\n      enable = true;\n      openFirewall = true;\n      useRoutingFeatures = \"client\";\n      disableUpstreamLogging = true;\n    };\n    fwupd.daemonSettings.EspLocation = config.boot.loader.efi.efiSysMountPoint;\n  };\n\n  system = {\n    stateVersion = lib.mkDefault \"26.05\";\n  };\n\n  systemd = {\n    network.wait-online.anyInterface = true;\n    services.tailscaled = {\n      after = [\n        \"network-online.target\"\n        \"systemd-resolved.service\"\n      ];\n      wants = [\n        \"network-online.target\"\n        \"systemd-resolved.service\"\n      ];\n    };\n  };\n\n  time.timeZone = \"America/Montreal\";\n\n  users.mutableUsers = false;\n}\n"
  },
  {
    "path": "modules/nixos/default.nix",
    "content": "# NixOS modules aggregator\n# This is the main entry point for NixOS configurations\n{ flake, pkgs, ... }:\nlet\n  inherit (flake) inputs self;\n  nurNoPkgs = import inputs.nur {\n    pkgs = null;\n    nurpkgs = pkgs;\n  };\nin\n{\n  imports = [\n    # External input modules (shared across all NixOS hosts)\n    inputs.agenix.nixosModules.default\n    inputs.catppuccin.nixosModules.catppuccin\n    inputs.disko.nixosModules.default\n    inputs.home-manager.nixosModules.home-manager\n    inputs.impermanence.nixosModules.impermanence\n    inputs.lanzaboote.nixosModules.lanzaboote\n    inputs.nix-index-database.nixosModules.nix-index\n    inputs.nixos-facter-modules.nixosModules.facter\n    inputs.peerix.nixosModules.peerix\n  ]\n  ++ (with self.nixosModules; [\n    agenix-rekey\n    core\n    # tailscale-address\n  ]);\n\n  catppuccin = {\n    enable = true;\n    flavor = \"mocha\";\n    accent = \"blue\";\n    cursors.enable = true;\n  };\n\n  programs.nix-ld.enable = true;\n\n  # Home-manager integration\n  # Note: stylix.homeModules.stylix is auto-imported via stylix.homeManagerIntegration\n  home-manager = {\n    useGlobalPkgs = true;\n    useUserPackages = true;\n    extraSpecialArgs = { inherit flake; };\n    sharedModules = [\n      inputs.nix-index-database.homeModules.nix-index\n      inputs.catppuccin.homeModules.catppuccin\n      nurNoPkgs.repos.rycee.hmModules.emacs-init\n      self.homeModules.default\n    ];\n  };\n}\n"
  },
  {
    "path": "modules/nixos/graphical/cosmic.nix",
    "content": "{ pkgs, ... }:\n\n{\n  environment = {\n    cosmic.excludePackages = with pkgs; [\n      cosmic-edit\n      cosmic-ext-calculator\n      cosmic-player\n      cosmic-reader\n      cosmic-store\n      cosmic-term\n    ];\n\n    sessionVariables.COSMIC_DATA_CONTROL_ENABLED = 1;\n\n    systemPackages = with pkgs; [\n      cosmic-ext-applet-caffeine\n    ];\n  };\n\n  services = {\n    desktopManager.cosmic.enable = true;\n    displayManager.cosmic-greeter.enable = true;\n  };\n}\n"
  },
  {
    "path": "modules/nixos/graphical/default.nix",
    "content": "{\n  # silent boot for plymouth\n  boot = {\n    consoleLogLevel = 0;\n    kernelParams = [\n      \"quiet\"\n      \"udev.log_level=3\"\n    ];\n  };\n\n  # programs.dconf.enable = true;\n  programs.wireshark.enable = true;\n\n  services = {\n    # dbus.packages = with pkgs; [ dconf ];\n    # displayManager.gdm = {\n    #   enable = true;\n    #   autoSuspend = true;\n    #   wayland = true;\n    # };\n    # gnome.at-spi2-core.enable = true;\n    orca.enable = false;\n    speechd.enable = false;\n    # xserver.enable = true;\n  };\n\n  # xdg.portal = {\n  #   enable = true;\n  #   wlr.enable = true;\n  #   extraPortals = with pkgs; [ xdg-desktop-portal-gtk ];\n  # };\n}\n"
  },
  {
    "path": "modules/nixos/graphical/fonts.nix",
    "content": "{\n  pkgs,\n  ...\n}:\n{\n  fonts = {\n    packages = with pkgs; [\n      dejavu_fonts\n      noto-fonts\n      noto-fonts-cjk-sans\n      noto-fonts-cjk-serif\n      unifont\n      nerd-fonts.noto\n      nerd-fonts.symbols-only\n    ];\n  };\n}\n"
  },
  {
    "path": "modules/nixos/graphical/steam.nix",
    "content": "{ pkgs, ... }:\n\n{\n  programs = {\n    steam = {\n      enable = true;\n      extraCompatPackages = [ pkgs.proton-ge-bin ];\n      localNetworkGameTransfers.openFirewall = true;\n      protontricks.enable = true;\n      remotePlay.openFirewall = true;\n    };\n    gamemode.enable = true;\n    gamescope.enable = true;\n  };\n}\n"
  },
  {
    "path": "modules/nixos/graphical/trusted.nix",
    "content": "{ pkgs, ... }:\n{\n  programs = {\n  };\n\n  security.pam.services.login.enableGnomeKeyring = false;\n\n  services = {\n    dbus.packages = with pkgs; [ gcr ];\n    gnome.gnome-keyring.enable = false;\n  };\n}\n"
  },
  {
    "path": "modules/nixos/hardware/bluetooth.nix",
    "content": "{\n  hardware.bluetooth = {\n    enable = true;\n    powerOnBoot = true;\n    disabledPlugins = [ \"sap\" ];\n    settings = {\n      General = {\n        JustWorksRepairing = \"always\";\n        MultiProfile = \"multiple\";\n        Experimental = true;\n        KernelExperimental = true;\n      };\n    };\n  };\n}\n"
  },
  {
    "path": "modules/nixos/hardware/efi.nix",
    "content": "{ lib, ... }:\n{\n  boot.loader = {\n    efi.canTouchEfiVariables = true;\n    systemd-boot = {\n      enable = true;\n      configurationLimit = 15;\n    };\n    timeout = lib.mkDefault 2;\n  };\n  console.earlySetup = true;\n}\n"
  },
  {
    "path": "modules/nixos/hardware/fast-networking.nix",
    "content": "{\n  boot = {\n    kernel.sysctl = {\n      \"net.core.default_qdisc\" = \"cake\";\n      \"net.core.optmem_max\" = 65536;\n      \"net.core.rmem_default\" = 1048576;\n      \"net.core.rmem_max\" = 16777216;\n      \"net.core.somaxconn\" = 8192;\n      \"net.core.wmem_default\" = 1048576;\n      \"net.core.wmem_max\" = 16777216;\n      \"net.ipv4.conf.all.log_martians\" = 1;\n      \"net.ipv4.conf.all.rp_filter\" = 1;\n      \"net.ipv4.conf.default.log_martians\" = 1;\n      \"net.ipv4.conf.default.rp_filter\" = 1;\n      \"net.ipv4.ip_local_port_range\" = \"16384 65535\";\n      \"net.ipv4.tcp_congestion_control\" = \"bbr\";\n      \"net.ipv4.tcp_fastopen\" = 3;\n      \"net.ipv4.tcp_max_syn_backlog\" = 8192;\n      \"net.ipv4.tcp_max_tw_buckets\" = 2000000;\n      \"net.ipv4.tcp_mtu_probing\" = 1;\n      \"net.ipv4.tcp_rfc1337\" = 1;\n      \"net.ipv4.tcp_rmem\" = \"4096 1048576 2097152\";\n      \"net.ipv4.tcp_slow_start_after_idle\" = 0;\n      \"net.ipv4.tcp_syncookies\" = 1;\n      \"net.ipv4.tcp_tw_reuse\" = 1;\n      \"net.ipv4.tcp_wmem\" = \"4096 65536 16777216\";\n      \"net.ipv4.udp_rmem_min\" = 8192;\n      \"net.ipv4.udp_wmem_min\" = 8192;\n      \"net.netfilter.nf_conntrack_generic_timeout\" = 60;\n      \"net.netfilter.nf_conntrack_max\" = 1048576;\n      \"net.netfilter.nf_conntrack_tcp_timeout_established\" = 600;\n      \"net.netfilter.nf_conntrack_tcp_timeout_time_wait\" = 1;\n    };\n    kernelModules = [\n      \"tls\"\n      \"tcp_bbr\"\n    ];\n  };\n}\n"
  },
  {
    "path": "modules/nixos/hardware/no-mitigations.nix",
    "content": "{\n  boot.kernelParams = [\n    \"l1tf=off\"\n    \"mds=off\"\n    \"mitigations=off\"\n    \"no_stf_barrier\"\n    \"noibpb\"\n    \"noibrs\"\n    \"nopti\"\n    \"nospec_store_bypass_disable\"\n    \"nospectre_v1\"\n    \"nospectre_v2\"\n    \"tsx=on\"\n    \"tsx_async_abort=off\"\n  ];\n}\n"
  },
  {
    "path": "modules/nixos/hardware/nonsecureboot.nix",
    "content": "{\n  boot = {\n    loader.systemd-boot.enable = true;\n    loader.grub.enable = false;\n  };\n}\n"
  },
  {
    "path": "modules/nixos/hardware/nvidia.nix",
    "content": "{ config, ... }:\n{\n  boot = {\n    kernelModules = [\n      \"nvidia\"\n      \"nvidia_modeset\"\n      \"nvidia-uvm\"\n      \"nvidia_drm\"\n    ];\n    blacklistedKernelModules = [ \"nouveau\" ];\n    extraModulePackages = [ config.boot.kernelPackages.nvidia_x11 ];\n  };\n\n  services.xserver.videoDrivers = [ \"nvidia\" ];\n\n  hardware = {\n    graphics.enable = true;\n    nvidia-container-toolkit.enable = true;\n    nvidia = {\n      package = config.boot.kernelPackages.nvidia_x11;\n      modesetting.enable = true;\n      nvidiaPersistenced = true;\n      nvidiaSettings = false;\n      open = true;\n    };\n  };\n\n  virtualisation.docker.enableNvidia = true;\n}\n"
  },
  {
    "path": "modules/nixos/hardware/printer.nix",
    "content": "{ pkgs, ... }:\n{\n  programs.system-config-printer.enable = true;\n\n  services.printing = {\n    enable = true;\n    drivers = with pkgs; [\n      gutenprint\n      gutenprintBin\n      brlaser\n      cups-brother-mfcl2750dw\n    ];\n  };\n}\n"
  },
  {
    "path": "modules/nixos/hardware/secureboot.nix",
    "content": "{\n  lib,\n  pkgs,\n  ...\n}:\n{\n  boot = {\n    bootspec.enable = true;\n    lanzaboote = {\n      enable = true;\n      autoGenerateKeys.enable = true;\n      autoEnrollKeys = {\n        enable = true;\n        # Automatically reboot to enroll the keys in the firmware\n        autoReboot = true;\n      };\n      pkiBundle = \"/etc/secureboot\";\n    };\n    loader.systemd-boot.enable = lib.mkForce false;\n    loader.grub.enable = lib.mkForce false;\n  };\n\n  environment.systemPackages = with pkgs; [ sbctl ];\n\n  # environment.persistence.\"/nix/state\".directories = [ config.boot.lanzaboote.pkiBundle ];\n}\n"
  },
  {
    "path": "modules/nixos/hardware/sound.nix",
    "content": "{ config, ... }:\n{\n  environment.systemPackages = [ config.services.pipewire.package ];\n\n  security.rtkit.enable = true;\n\n  services.pipewire = {\n    enable = true;\n    alsa.enable = true;\n    jack.enable = true;\n    pulse.enable = true;\n    wireplumber.enable = true;\n\n    extraConfig = {\n      client.\"99-resample\".\"stream.properties\".\"resample.quality\" = 15;\n      pipewire-pulse.\"99-resample\".\"stream.properties\".\"resample.quality\" = 15;\n      pipewire.\"99-allowed-rates\".\"context.properties\".\"default.clock.allowed-rates\" = [\n        44100\n        48000\n        88200\n        96000\n        176400\n        192000\n        358000\n        384000\n        716000\n        768000\n      ];\n    };\n  };\n}\n"
  },
  {
    "path": "modules/nixos/hardware/vial.nix",
    "content": "{\n  services.udev.extraRules = ''\n    KERNEL==\"hidraw*\", SUBSYSTEM==\"hidraw\", MODE=\"0666\", TAG+=\"uaccess\", TAG+=\"udev-acl\"\n  '';\n}\n"
  },
  {
    "path": "modules/nixos/hardware/yubikey.nix",
    "content": "{ pkgs, ... }:\n{\n  services.udev.packages = with pkgs; [\n    yubikey-personalization\n    libu2f-host\n  ];\n  services.pcscd.enable = true;\n}\n"
  },
  {
    "path": "modules/nixos/pam-limits.nix",
    "content": "# PAM login limits for workstation/server hosts\n# Provides generous limits for memory locking, file descriptors, and processes.\n# Platform: NixOS only\n{\n  security.pam.loginLimits = [\n    {\n      domain = \"*\";\n      type = \"-\";\n      item = \"memlock\";\n      value = \"unlimited\";\n    }\n    {\n      domain = \"*\";\n      type = \"-\";\n      item = \"nofile\";\n      value = \"1048576\";\n    }\n    {\n      domain = \"*\";\n      type = \"-\";\n      item = \"nproc\";\n      value = \"unlimited\";\n    }\n  ];\n}\n"
  },
  {
    "path": "modules/nixos/printing.nix",
    "content": "{ pkgs, ... }:\n{\n  services.printing = {\n    enable = true;\n    drivers = with pkgs; [\n      gutenprint\n      gutenprintBin\n    ];\n  };\n}\n"
  },
  {
    "path": "modules/nixos/resolved.nix",
    "content": "# systemd-resolved configuration - NixOS only\n{ lib, ... }:\n{\n  networking = {\n    firewall = {\n      allowedTCPPorts = [ 5355 ];\n      allowedUDPPorts = [\n        5353\n        5355\n      ];\n    };\n    networkmanager.dns = \"systemd-resolved\";\n  };\n\n  services.resolved = {\n    enable = true;\n    settings.Resolve = {\n      FallbackDNS = [\n        \"1.1.1.1\"\n        # \"2606:4700:4700::1111\"\n        \"8.8.8.8\"\n        # \"2001:4860:4860::8844\"\n      ];\n      DNSSEC = \"allow-downgrade\";\n      LLMNR = \"true\";\n      Domains = \"~.\";\n      MulticastDNS = true;\n    };\n  };\n\n  system.nssDatabases.hosts = lib.mkMerge [\n    (lib.mkBefore [ \"mdns_minimal [NOTFOUND=return]\" ])\n    (lib.mkAfter [ \"mdns\" ])\n  ];\n}\n"
  },
  {
    "path": "modules/nixos/services/blocky.nix",
    "content": "{\n  config,\n  flake,\n  lib,\n  pkgs,\n  ...\n}:\nlet\n  inherit (flake) self;\n  inherit (config.networking) hostName tailscaleAddress;\nin\n{\n  imports = with self.nixosModules; [\n    services-mysql\n    services-unbound\n  ];\n\n  networking.firewall = {\n    allowedTCPPorts = [\n      53\n      5335\n    ];\n    allowedUDPPorts = [\n      53\n      5335\n    ];\n  };\n\n  environment.systemPackages = with pkgs; [ blocky ];\n\n  services = {\n    blocky = {\n      enable = true;\n      settings = {\n        upstreams.groups.default = [ \"127.0.0.1:5335\" ];\n        blocking = {\n          denylists.default = [\n            # Hagezi Pro++ - Comprehensive protection against ads, tracking, malware, phishing, scam, crypto-mining\n            \"https://raw.githubusercontent.com/hagezi/dns-blocklists/main/hosts/pro.plus.txt\"\n            # OISD Big - Well-maintained, broad coverage blocklist\n            \"https://raw.githubusercontent.com/sjhgvr/oisd/main/domainswild2_big.txt\"\n            # StevenBlack Unified Hosts - Consolidates multiple reputable sources\n            \"https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts\"\n          ];\n          allowlists.default = [\n            (pkgs.writeText \"default.txt\" ''\n              www.t.co\n              t.co\n            '')\n          ];\n          clientGroupsBlock.default = [ \"default\" ];\n        };\n        caching.maxTime = -1;\n        prometheus.enable = true;\n        queryLog = {\n          type = \"mysql\";\n          target = \"blocky@unix(/run/mysqld/mysqld.sock)/blocky?charset=utf8mb4&parseTime=True&loc=Local\";\n          logRetentionDays = 90;\n        };\n        ports = {\n          dns = [ \"0.0.0.0:53\" ];\n          http = [ \"4000\" ];\n        };\n        bootstrapDns = [ \"tcp+udp:1.1.1.1\" ];\n        ede.enable = true;\n      };\n    };\n\n    mysql = {\n      ensureDatabases = [ \"blocky\" ];\n      ensureUsers = [\n        {\n          name = \"blocky\";\n          ensurePermissions = {\n            \"blocky.*\" = \"ALL PRIVILEGES\";\n          };\n        }\n        {\n          name = \"grafana\";\n          ensurePermissions = {\n            \"blocky.*\" = \"SELECT\";\n          };\n        }\n      ];\n    };\n\n    prometheus.scrapeConfigs = [\n      {\n        job_name = \"blocky\";\n        scrape_interval = \"15s\";\n        static_configs = [ { targets = [ \"127.0.0.1:4000\" ]; } ];\n      }\n    ];\n\n    grafana = {\n      declarativePlugins = with pkgs.grafanaPlugins; [ grafana-piechart-panel ];\n      settings.panels.disable_sanitize_html = true;\n      provision.datasources.settings = {\n        apiVersion = 1;\n        datasources = [\n          {\n            name = \"Blocky Query Log\";\n            type = \"mysql\";\n            url = \"/run/mysqld/mysqld.sock\";\n            user = \"grafana\";\n            orgId = 1;\n            jsonData.database = \"blocky\";\n          }\n        ];\n        deleteDatasources = [\n          {\n            name = \"Blocky Query Log\";\n            orgId = 1;\n          }\n        ];\n      };\n    };\n\n    nginx.virtualHosts.\"grafana.${hostName}.meurer.org\".locations.\"/\".extraConfig = ''\n      ${lib.optionalString (\n        tailscaleAddress != null\n      ) ''add_header Access-Control-Allow-Origin \"http://${tailscaleAddress}\";''}\n      add_header Access-Control-Allow-Origin \"http://127.0.0.1\";\n      add_header Access-Control-Allow-Origin \"http://localhost\";\n    '';\n\n    unbound.settings.server.port = \"5335\";\n  };\n\n  systemd.services = {\n    blocky = {\n      after = [\n        \"unbound.service\"\n        \"mysql.service\"\n      ];\n      requires = [ \"unbound.service\" ];\n      serviceConfig = {\n        DynamicUser = lib.mkForce false;\n        User = \"blocky\";\n        Group = \"blocky\";\n        Restart = \"on-failure\";\n        RestartSec = \"1\";\n        # Allow Unix socket connections to MySQL\n        RestrictAddressFamilies = [\n          \"AF_UNIX\"\n          \"AF_INET\"\n          \"AF_INET6\"\n        ];\n      };\n    };\n  };\n\n  users.users.blocky = {\n    group = \"blocky\";\n    isSystemUser = true;\n  };\n\n  users.groups.blocky = { };\n}\n"
  },
  {
    "path": "modules/nixos/services/github-runner.nix",
    "content": "{ config, pkgs, ... }:\n{\n  age.secrets.github-runner-token.rekeyFile = ../../../secrets/github-runner.age;\n  services.github-runners.${config.networking.hostName} = {\n    enable = true;\n    ephemeral = true;\n    replace = true;\n    tokenFile = config.age.secrets.github-runner-token.path;\n    url = \"https://github.com/bbigras/nix-config\";\n    extraLabels = [ pkgs.stdenv.hostPlatform.system ];\n    extraPackages = with pkgs; [ cachix ];\n  };\n}\n"
  },
  {
    "path": "modules/nixos/services/grafana.nix",
    "content": "{ config, ... }:\nwith config.networking;\n{\n  environment.persistence.\"/nix/state\".directories = [\n    {\n      directory = \"/var/lib/grafana\";\n      user = \"grafana\";\n      group = \"grafana\";\n    }\n  ];\n\n  security.acme.certs.\"grafana.${hostName}.meurer.org\" = { };\n\n  services = {\n    grafana = {\n      enable = true;\n      provision.enable = true;\n      settings = {\n        server = {\n          http_addr = \"127.0.0.1\";\n          domain = \"grafana.${hostName}.meurer.org\";\n        };\n        auth = {\n          disable_login_form = true;\n          login_cookie_name = \"_oauth2_proxy\";\n          oauth_auto_login = true;\n          signout_redirect_url = \"https://grafana.${hostName}.meurer.org/oauth2/sign_out?rd=https%3A%2F%2Fgrafana.${hostName}.meurer.org\";\n        };\n        \"auth.basic\".enabled = false;\n        \"auth.proxy\" = {\n          enabled = true;\n          auto_sign_up = true;\n          enable_login_token = false;\n          header_name = \"X-Email\";\n          header_property = \"email\";\n        };\n        users = {\n          allow_signup = false;\n          auto_assign_org = true;\n          auto_assign_org_role = \"Viewer\";\n        };\n      };\n    };\n    nginx.virtualHosts.\"grafana.${hostName}.meurer.org\" = {\n      useACMEHost = \"grafana.${hostName}.meurer.org\";\n      forceSSL = true;\n      kTLS = true;\n      locations.\"/\" = {\n        proxyPass = \"http://127.0.0.1:3000\";\n        proxyWebsockets = true;\n      };\n    };\n    oauth2-proxy.nginx.virtualHosts.\"grafana.${hostName}.meurer.org\" = { };\n  };\n}\n"
  },
  {
    "path": "modules/nixos/services/jellyfin.nix",
    "content": "{ config, ... }:\nwith config.networking;\n{\n  environment.persistence.\"/nix/state\".directories = with config.services.jellyfin; [\n    {\n      directory = cacheDir;\n      inherit user group;\n    }\n    {\n      directory = dataDir;\n      inherit user group;\n    }\n  ];\n\n  security.acme.certs.\"jellyfin.${hostName}.meurer.org\" = { };\n\n  services = {\n    jellyfin.enable = true;\n    nginx.virtualHosts.\"jellyfin.${hostName}.meurer.org\" = {\n      useACMEHost = \"jellyfin.${hostName}.meurer.org\";\n      forceSSL = true;\n      kTLS = true;\n      locations.\"/\" = {\n        proxyPass = \"http://127.0.0.1:8096\";\n        proxyWebsockets = true;\n      };\n    };\n  };\n}\n"
  },
  {
    "path": "modules/nixos/services/mysql.nix",
    "content": "{ config, pkgs, ... }:\n{\n  environment.persistence.\"/nix/state\".directories = [\n    {\n      directory = config.services.mysql.dataDir;\n      inherit (config.services.mysql) group user;\n    }\n  ];\n  services.mysql = {\n    enable = true;\n    package = pkgs.mariadb;\n  };\n}\n"
  },
  {
    "path": "modules/nixos/services/nginx.nix",
    "content": "{ config, pkgs, ... }:\n{\n  age.secrets.acme.rekeyFile = ../../../secrets/acme.age;\n\n  environment.persistence.\"/nix/state\".directories = [\n    {\n      directory = \"/var/lib/acme\";\n      user = \"acme\";\n      group = \"acme\";\n    }\n  ];\n\n  security.acme = {\n    acceptTerms = true;\n    defaults = {\n      email = \"bernardo@meurer.org\";\n      credentialsFile = config.age.secrets.acme.path;\n      dnsProvider = \"cloudflare\";\n    };\n  };\n\n  services.nginx = {\n    enable = true;\n    recommendedOptimisation = true;\n    recommendedProxySettings = true;\n    recommendedTlsSettings = true;\n    recommendedGzipSettings = true;\n    package = pkgs.nginxMainline;\n  };\n\n  users.groups.acme.members = [ \"nginx\" ];\n}\n"
  },
  {
    "path": "modules/nixos/services/oauth2.nix",
    "content": "{ config, ... }:\nlet\n  inherit (config.networking) hostName;\nin\n{\n  age.secrets.oauth2.rekeyFile = ../../../secrets/oauth2.age;\n\n  security.acme.certs.\"auth.${hostName}.meurer.org\" = { };\n\n  services = {\n    oauth2-proxy = {\n      enable = true;\n      nginx.domain = \"auth.${hostName}.meurer.org\";\n      cookie.domain = \".${hostName}.meurer.org\";\n      email.domains = [ \"meurer.org\" ];\n      keyFile = config.age.secrets.oauth2.path;\n      reverseProxy = true;\n      passBasicAuth = true;\n      setXauthrequest = true;\n      extraConfig = {\n        skip-provider-button = true;\n        whitelist-domain = \"*.${hostName}.meurer.org\";\n        cookie-samesite = \"lax\";\n      };\n    };\n    nginx.virtualHosts.\"auth.${hostName}.meurer.org\" = {\n      useACMEHost = \"auth.${hostName}.meurer.org\";\n      forceSSL = true;\n      kTLS = true;\n    };\n  };\n}\n"
  },
  {
    "path": "modules/nixos/services/peerix.nix",
    "content": "{\n  services.peerix.enable = true;\n}\n"
  },
  {
    "path": "modules/nixos/services/podman.nix",
    "content": "{\n  # environment.persistence.\"/nix/state\".directories = [\n  #   \"/var/lib/containers\"\n  # ];\n\n  virtualisation.podman = {\n    enable = true;\n    autoPrune.enable = true;\n    dockerCompat = true;\n    dockerSocket.enable = true;\n  };\n}\n"
  },
  {
    "path": "modules/nixos/services/postgresql.nix",
    "content": "{\n  environment.persistence.\"/nix/state\".directories = [\n    {\n      directory = \"/var/lib/postgresql\";\n      user = \"postgres\";\n      group = \"postgres\";\n    }\n  ];\n\n  services.postgresql = {\n    enable = true;\n    enableJIT = true;\n  };\n}\n"
  },
  {
    "path": "modules/nixos/services/prometheus.nix",
    "content": "{\n  environment.persistence.\"/nix/state\".directories = [\n    {\n      directory = \"/var/lib/prometheus2\";\n      user = \"prometheus\";\n      group = \"prometheus\";\n    }\n  ];\n\n  services.prometheus = {\n    enable = true;\n    extraFlags = [ \"--storage.tsdb.retention.time=90d\" ];\n    scrapeConfigs = [\n      {\n        job_name = \"node\";\n        scrape_interval = \"1m\";\n        static_configs = [ { targets = [ \"127.0.0.1:9100\" ]; } ];\n      }\n      {\n        job_name = \"prometheus\";\n        scrape_interval = \"1m\";\n        static_configs = [ { targets = [ \"127.0.0.1:9090\" ]; } ];\n      }\n    ];\n    exporters = {\n      node = {\n        enable = true;\n        enabledCollectors = [\n          \"systemd\"\n          \"pressure\"\n        ];\n      };\n    };\n  };\n\n  services.grafana.provision.datasources.settings = {\n    apiVersion = 1;\n    datasources = [\n      {\n        name = \"Prometheus\";\n        type = \"prometheus\";\n        url = \"http://127.0.0.1:9090\";\n        orgId = 1;\n      }\n    ];\n    deleteDatasources = [\n      {\n        name = \"Prometheus\";\n        orgId = 1;\n      }\n    ];\n  };\n}\n"
  },
  {
    "path": "modules/nixos/services/syncthing.nix",
    "content": "{ config, ... }:\nwith config.networking;\n{\n\n}\n"
  },
  {
    "path": "modules/nixos/services/unbound.nix",
    "content": "{\n  config,\n  lib,\n  pkgs,\n  ...\n}:\n{\n  environment.persistence.\"/nix/state\".directories = [\n    {\n      directory = \"/var/lib/unbound\";\n      inherit (config.services.unbound) user group;\n    }\n  ];\n\n  services = {\n    resolved.enable = lib.mkForce false;\n    prometheus = {\n      scrapeConfigs = [\n        {\n          job_name = \"unbound\";\n          scrape_interval = \"30s\";\n          static_configs = [ { targets = [ \"127.0.0.1:9167\" ]; } ];\n        }\n      ];\n      exporters.unbound = {\n        enable = true;\n        unbound.host = \"unix:///run/unbound/unbound.ctl\";\n        user = \"unbound\";\n      };\n    };\n    unbound = {\n      enable = true;\n      enableRootTrustAnchor = true;\n      localControlSocketPath = \"/run/unbound/unbound.ctl\";\n      resolveLocalQueries = true;\n      package = pkgs.unbound-full;\n      settings = {\n        server = {\n          aggressive-nsec = true;\n          cache-max-ttl = 86400;\n          cache-min-ttl = 300;\n          delay-close = 10000;\n          deny-any = true;\n          do-ip4 = true;\n          do-ip6 = true;\n          do-tcp = true;\n          do-udp = true;\n          edns-buffer-size = \"1472\";\n          extended-statistics = true;\n          harden-algo-downgrade = true;\n          harden-below-nxdomain = true;\n          harden-dnssec-stripped = true;\n          harden-glue = true;\n          harden-large-queries = true;\n          harden-short-bufsize = true;\n          infra-cache-slabs = 8;\n          interface = [\n            \"0.0.0.0\"\n            \"::\"\n          ];\n          key-cache-slabs = 8;\n          msg-cache-size = \"256m\";\n          msg-cache-slabs = 8;\n          neg-cache-size = \"256m\";\n          num-queries-per-thread = 4096;\n          num-threads = 8;\n          outgoing-range = 8192;\n          prefetch = true;\n          prefetch-key = true;\n          qname-minimisation = true;\n          rrset-cache-size = \"256m\";\n          rrset-cache-slabs = 8;\n          rrset-roundrobin = true;\n          serve-expired = true;\n          so-rcvbuf = \"4m\";\n          so-reuseport = true;\n          so-sndbuf = \"4m\";\n          statistics-cumulative = true;\n          statistics-interval = 0;\n          tls-cert-bundle = \"/etc/ssl/certs/ca-certificates.crt\";\n          unwanted-reply-threshold = 100000;\n          use-caps-for-id = \"no\";\n          verbosity = 1;\n          private-address = [\n            \"10.0.0.0/8\"\n            \"169.254.0.0/16\"\n            \"172.16.0.0/12\"\n            \"192.168.0.0/16\"\n            \"fd00::/8\"\n            \"fe80::/10\"\n          ];\n          private-domain = [ \"local\" ];\n          domain-insecure = [ \"local\" ];\n        };\n      };\n    };\n  };\n}\n"
  },
  {
    "path": "modules/nixos/services/veilid.nix",
    "content": "{\n  services.veilid = {\n    enable = true;\n    openFirewall = true;\n  };\n}\n"
  },
  {
    "path": "modules/nixos/services/virt-manager.nix",
    "content": "{ pkgs, ... }:\n{\n  environment.systemPackages = with pkgs; [\n    virt-manager\n    spice-gtk\n    swtpm\n  ];\n  security.polkit.enable = true;\n  virtualisation = {\n    libvirtd = {\n      enable = true;\n      qemu = {\n        package = pkgs.qemu_kvm;\n        swtpm.enable = true;\n      };\n    };\n    spiceUSBRedirection.enable = true;\n  };\n}\n"
  },
  {
    "path": "modules/nixos/services/wivrn.nix",
    "content": "{ pkgs, ... }:\n\n{\n  environment.systemPackages = with pkgs; [\n    wayvr\n  ];\n\n  services.wivrn = {\n    enable = true;\n    openFirewall = true;\n    autoStart = false;\n  };\n}\n"
  },
  {
    "path": "modules/nixos/tailscale-address.nix",
    "content": "# Custom option for Tailscale address used by various services\n{ lib, ... }:\n{\n  options.networking.tailscaleAddress = lib.mkOption {\n    type = lib.types.nullOr lib.types.str;\n    default = null;\n    description = \"Tailscale IP address for this host, used for CORS and service bindings\";\n  };\n}\n"
  },
  {
    "path": "modules/nixos/tmux.nix",
    "content": "# System-level tmux configuration - NixOS only\n{ pkgs, ... }:\n{\n  programs.tmux = {\n    enable = true;\n    aggressiveResize = true;\n    clock24 = true;\n    escapeTime = 0;\n    historyLimit = 30000;\n    # Use idempotent new-session to avoid creating duplicate sessions when both\n    # NixOS and home-manager configs are loaded. The -A flag attaches if the\n    # session exists, otherwise creates it.\n    newSession = false;\n    extraConfigBeforePlugins = ''\n      new-session -A -s 0\n    '';\n    secureSocket = false;\n    plugins = with pkgs.tmuxPlugins; [\n      extrakto\n      fuzzback\n      tmux-fzf\n      tmux-thumbs\n      lazy-restore\n    ];\n    # shortcut = \"a\";\n    # keyMode = \"vi\";\n    terminal = \"tmux-256color\";\n    extraConfig = ''\n      # update the env when attaching to an existing session\n      set -g update-environment -r\n\n      set -ag terminal-overrides \",alacritty*:Tc,foot*:Tc,xterm-kitty*:Tc,xterm-256color:Tc\"\n\n      set -as terminal-features \",alacritty*:RGB,foot*:RGB,xterm-kitty*:RGB\"\n      set -as terminal-features \",alacritty*:hyperlinks,foot*:hyperlinks,xterm-kitty*:hyperlinks\"\n      set -as terminal-features \",alacritty*:usstyle,foot*:usstyle,xterm-kitty*:usstyle\"\n\n      # automatically renumber windows\n      set -g renumber-windows on\n\n      bind C-a last-window\n      bind a send-prefix\n      bind R source-file ~/.config/tmux/tmux.conf \\; display-message \"Config reloaded...\"\n\n      bind : command-prompt\n      bind r refresh-client\n      bind L clear-history\n\n      bind space next-window\n      bind bspace previous-window\n      bind enter next-layout\n\n      bind v  split-window -h -c \"#{pane_current_path}\"\n      bind s  split-window -v -c \"#{pane_current_path}\"\n      bind h  select-pane -L\n      bind j  select-pane -D\n      bind k  select-pane -U\n      bind l  select-pane -R\n      bind \\\\ split-window -h -c \"#{pane_current_path}\"\n      bind -  split-window -v -c \"#{pane_current_path}\"\n\n      bind C-o rotate-window\n\n      bind + select-layout main-horizontal\n      bind = select-layout main-vertical\n\n      bind a last-pane\n      bind q display-panes\n      bind c new-window\n      bind t next-window\n      bind T previous-window\n\n      bind [ copy-mode\n      bind ] paste-buffer\n\n      set -g base-index 0\n      set-window-option -g automatic-rename\n      setw -g monitor-activity on\n      set -g visual-activity off\n\n      set -g status-right '%a | %Y-%m-%d | %H:%M'\n    '';\n  };\n}\n"
  },
  {
    "path": "modules/nixos/users/bbigras.nix",
    "content": "# NixOS system user configuration for bbigras\n{\n  config,\n  lib,\n  pkgs,\n  ...\n}:\n{\n  # Link home-manager user to NixOS user\n  home-manager.users.bbigras.home = {\n    username = config.users.users.bbigras.name;\n    # inherit (config.users.users.bbigras) uid;\n  };\n\n  age.secrets.bbigrasPassword.rekeyFile = ../../../secrets/bbigras-password.age;\n\n  # users.groups.bbigras.gid = config.users.users.bbigras.uid;\n\n  users.groups.bbigras = { };\n  users.users.bbigras = {\n    createHome = true;\n    description = \"Bruno Bigras\";\n    group = \"bbigras\";\n    extraGroups = [\n      \"wheel\"\n      \"dialout\"\n      \"audio\"\n    ]\n    ++ lib.optionals config.hardware.i2c.enable [ \"i2c\" ]\n    ++ lib.optionals config.networking.networkmanager.enable [ \"networkmanager\" ]\n    ++ lib.optionals config.programs.sway.enable [\n      \"input\"\n      \"video\"\n    ]\n    ++ lib.optionals config.services.unbound.enable [ \"unbound\" ]\n    ++ lib.optionals config.services.transmission.enable [ \"transmission\" ]\n    ++ lib.optionals config.virtualisation.docker.enable [ \"docker\" ]\n    ++ lib.optionals config.virtualisation.libvirtd.enable [ \"libvirtd\" ]\n    ++ lib.optionals config.virtualisation.kvmgt.enable [ \"kvm\" ]\n    ++ lib.optionals config.virtualisation.podman.enable [ \"podman\" ];\n    isNormalUser = true;\n    openssh.authorizedKeys.keys = [\n      \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGPpDAsQDRslxy69ylheWAtg2synerGqkCeCw6F4ISXp TKey\"\n      \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIP2Eo0xWZ1VPs5iHlDd3j+O+3I1qx4VqDaXpkL6phB6Z bbigras@desktop\"\n      \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICaqQycIPmT5lvdqdIQwcy+pitleXZtK0j8RsphADcfa bbigras@laptop\"\n      \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGZqHDSyyXc5Zs5XzXveQaOzNoSMPLtY686W5/eVISuQ bbigras@pixel6\"\n      \"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCQErMfuhLr14DAHaUSgTLArydzPoLzeOzkYAzf/ye3qvP/vVXeGe4ruWWxvro0yS3DUlfUpmWUU3KRyv3ZN9z6Q9FnDsKKv+GXTrZq4owymd6NWKOLl2F6LGwUGgnkwvit5TDUVolCvIQTT7F/qLgYvmr0q1nTunrl+uPVNXFiAyalhIPMVU+atw/pNmp3JfIqBRefVlrxeoCQ81/nRhQJcNNXjRxSzIeKu80wwCxODYOBtHdIP/NJEzhAMOq/HLabC7ehZtNohweEAlK71HycqwWSNNonEBU0g9R0r/VfXiENa4x+IY5fvMjsdOj53dZuXCDV0AjOmd8sJoepjF7l pubkeygenerator@mobiledevice\"\n      \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIL+uP/uqqMvdcLF2j4Zz09NNDFO7DOHkpIqxI1XpYo2c bbigras@nixos\"\n    ];\n    shell = pkgs.fish;\n    # uid = 8888;\n\n    hashedPasswordFile = config.age.secrets.bbigrasPassword.path;\n  };\n}\n"
  },
  {
    "path": "modules/shared/aspell.nix",
    "content": "# Aspell dictionaries - shared between NixOS and Darwin\n{ pkgs, ... }:\n{\n  environment.systemPackages = with pkgs; [\n    (aspellWithDicts (\n      ds: with ds; [\n        en\n        en-computers\n        en-science\n        fr\n      ]\n    ))\n  ];\n}\n"
  },
  {
    "path": "modules/shared/common.nix",
    "content": "# Common system configuration for NixOS and Darwin\n# Note: Shared module imports (aspell, nix, nixpkgs, registry, theme) must be\n# done in platform cores due to module class restrictions.\n{\n  config,\n  lib,\n  pkgs,\n  ...\n}:\nlet\n  inherit (config.nixpkgs.hostPlatform) isDarwin;\nin\n{\n  documentation = lib.mkMerge [\n    {\n      enable = true;\n      doc.enable = true;\n      info.enable = true;\n      man.enable = true;\n    }\n    (lib.optionalAttrs (!isDarwin) {\n      dev.enable = true;\n      man.cache.enable = true;\n    })\n  ];\n\n  environment = {\n    pathsToLink = [\n      \"/share/fish\"\n      \"/share/zsh\"\n    ];\n    systemPackages = with pkgs; [\n      molly-guard\n      rsync\n    ];\n  };\n\n  programs = lib.mkMerge [\n    {\n      fish.enable = true;\n      nix-index.enable = true;\n      zsh.enable = true;\n    }\n    (lib.optionalAttrs (!isDarwin) {\n      command-not-found.enable = false;\n      mosh.enable = true;\n      zsh.enableGlobalCompInit = false;\n    })\n  ];\n}\n"
  },
  {
    "path": "modules/shared/nix.nix",
    "content": "# Shared nix settings for NixOS and Darwin\n{ lib, pkgs, ... }:\nlet\n  inherit (pkgs.stdenv) isDarwin;\nin\n{\n  nix = lib.mkMerge [\n    {\n      package = pkgs.nixVersions.latest;\n      settings = {\n        accept-flake-config = true;\n        allowed-users = [ \"@wheel\" ];\n        build-users-group = \"nixbld\";\n        builders-use-substitutes = true;\n        trusted-users = [\n          \"root\"\n          \"@wheel\"\n        ];\n        substituters = [\n          \"http://192.168.0.201:8501?priority=1\"\n          \"https://bbigras-nix-config.cachix.org\"\n          \"https://nix-community.cachix.org\"\n        ];\n        trusted-public-keys = [\n          \"192.168.0.201:zSAiwQJTX02yGP2NSof1Pin339R5YP+91Y5xdaqFsnU=\"\n          \"bbigras-nix-config.cachix.org-1:aXL6Q9Oi0jyF79YAKRu17iVNk9HY0p23OZX7FA8ulhU=\"\n          \"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=\"\n        ];\n        cores = 0;\n        max-jobs = \"auto\";\n        experimental-features = [\n          \"auto-allocate-uids\"\n          \"configurable-impure-env\"\n          \"flakes\"\n          \"nix-command\"\n        ];\n        http-connections = 0;\n        # flake-registry = \"/etc/nix/registry.json\";\n        always-allow-substitutes = true;\n      };\n\n      distributedBuilds = true;\n      extraOptions = ''\n        !include tokens.conf\n      '';\n    }\n\n    # NixOS-specific (use optionalAttrs to avoid defining non-existent options)\n    (lib.optionalAttrs (!isDarwin) {\n      settings = {\n        auto-optimise-store = true;\n        sandbox = true;\n      };\n      channel.enable = false;\n      daemonCPUSchedPolicy = \"batch\";\n      daemonIOSchedPriority = 5;\n      optimise = {\n        automatic = true;\n        dates = [ \"03:00\" ];\n      };\n    })\n\n    # Darwin-specific (use optionalAttrs to avoid defining non-existent options)\n    (lib.optionalAttrs isDarwin {\n      settings = {\n        # Causes annoying \"cannot link ... to ...: File exists\" errors on Darwin\n        auto-optimise-store = false;\n        sandbox = false;\n      };\n      daemonIOLowPriority = false;\n    })\n  ];\n}\n"
  },
  {
    "path": "modules/shared/nixpkgs.nix",
    "content": "# Shared nixpkgs configuration\n# Works for NixOS, Darwin, and home-manager (all have nixpkgs.config option)\n{ flake, ... }:\nlet\n  inherit (flake) self;\nin\n{\n  nixpkgs = {\n    overlays = [ self.overlays.default ];\n    config.allowUnfree = true;\n  };\n}\n"
  },
  {
    "path": "overlays/nix-latest.nix",
    "content": "final: prev:\nlet\n  useLatestNixFor = name: {\n    inherit name;\n    value = prev.${name}.override { nix = final.nixVersions.latest; };\n  };\n  useLatestNix = names: builtins.listToAttrs (map useLatestNixFor names);\nin\nuseLatestNix [\n  \"agenix\"\n  \"nix-direnv\"\n  \"nix-update\"\n  \"nixpkgs-review\"\n]\n"
  },
  {
    "path": "overlays/nom-latest.nix",
    "content": "final: prev: {\n  # FIXME: using my patch for now\n  nix-output-monitor = prev.nix-output-monitor.overrideAttrs (_: {\n    src = final.fetchFromGitHub {\n      owner = \"lovesegfault\";\n      repo = \"nix-output-monitor\";\n      rev = \"c9ce708f72b95d92f52b77e04d51dd214cc58592\";\n      hash = \"sha256-dTL3f1zx2PNqmemvWhmuwdXdI1F3FcrkHC86F1Y78qQ=\";\n      postFetch = ''\n        rm -f $out/log.json\n      '';\n    };\n  });\n}\n"
  },
  {
    "path": "overlays/scripts/ccinit.sh",
    "content": "#!/usr/bin/env bash\nset -euo pipefail\n\nWORKSPACE_CLAUDE_MD=\"$HOME/src/CLAUDE.md\"\nBEGIN_MARKER=\"<!-- BEGIN ~/src/CLAUDE.md -->\"\nEND_MARKER=\"<!-- END ~/src/CLAUDE.md -->\"\n\n# Handle CLAUDE.md\nif [[ -L ./CLAUDE.md ]]; then\n\techo \"CLAUDE.md symlink already exists\"\nelif [[ -e ./CLAUDE.md ]]; then\n\techo \"CLAUDE.md exists but is not a symlink - skipping\"\nelif [[ -e ../CLAUDE.md ]]; then\n\tln -s ../CLAUDE.md ./CLAUDE.md\n\techo \"Created symlink: ./CLAUDE.md -> ../CLAUDE.md\"\nelse\n\techo \"No ../CLAUDE.md found, running claude /init...\"\n\tclaude /init\n\tif [[ -e ./CLAUDE.md ]]; then\n\t\tmv ./CLAUDE.md ../CLAUDE.md\n\t\tln -s ../CLAUDE.md ./CLAUDE.md\n\t\techo \"Moved CLAUDE.md to parent and created symlink\"\n\telse\n\t\techo \"claude /init did not create CLAUDE.md\"\n\t\texit 1\n\tfi\nfi\n\n# Insert/update ~/src/CLAUDE.md section if it exists\nif [[ -f $WORKSPACE_CLAUDE_MD && -f ../CLAUDE.md ]]; then\n\tworkspace_content=$(cat \"$WORKSPACE_CLAUDE_MD\")\n\tnew_section=\"${BEGIN_MARKER}\n${workspace_content}\n${END_MARKER}\"\n\n\t# Remove existing section if present (wherever it may be)\n\t# Ensures exactly one blank line remains between preceding and succeeding content\n\tif grep -qF \"$BEGIN_MARKER\" ../CLAUDE.md; then\n\t\tgawk -i inplace -v begin=\"$BEGIN_MARKER\" -v end=\"$END_MARKER\" '\n\t\t\t$0 == begin { blanks=0; skip=1; next }\n\t\t\t$0 == end { skip=0; need_blank=1; next }\n\t\t\tneed_blank {\n\t\t\t\tif ($0 == \"\") next\n\t\t\t\tprint \"\"\n\t\t\t\tneed_blank=0\n\t\t\t\tprint\n\t\t\t\tnext\n\t\t\t}\n\t\t\tskip { next }\n\t\t\t$0 == \"\" { blanks++; next }\n\t\t\t{\n\t\t\t\tfor (i=0; i<blanks; i++) print \"\"\n\t\t\t\tblanks=0\n\t\t\t\tprint\n\t\t\t}\n\t\t\tEND { for (i=0; i<blanks; i++) print \"\" }\n\t\t' ../CLAUDE.md\n\t\techo \"Removed existing ~/src/CLAUDE.md section\"\n\tfi\n\n\t# Insert after preamble (before second line starting with #)\n\tinsert_line=$(awk '/^#/ { count++; if (count == 2) { print NR; exit } }' ../CLAUDE.md)\n\n\tif [[ -n $insert_line ]]; then\n\t\t# Insert before the second heading using gawk in-place\n\t\t# Ensures exactly one blank line before and after section\n\t\tgawk -i inplace -v line=\"$insert_line\" -v section=\"$new_section\" '\n\t\t\t$0 == \"\" && NR < line { blanks++; next }\n\t\t\tNR < line {\n\t\t\t\tfor (i=0; i<blanks; i++) print \"\"\n\t\t\t\tblanks=0\n\t\t\t\tprint\n\t\t\t\tnext\n\t\t\t}\n\t\t\tNR == line {\n\t\t\t\tprint \"\"\n\t\t\t\tn = split(section, lines, \"\\n\")\n\t\t\t\tfor (i = 1; i <= n; i++) print lines[i]\n\t\t\t\tprint \"\"\n\t\t\t\tprint\n\t\t\t\tnext\n\t\t\t}\n\t\t\t{ print }\n\t\t' ../CLAUDE.md\n\t\techo \"Inserted ~/src/CLAUDE.md section into ../CLAUDE.md\"\n\telse\n\t\t# Less than 2 headings found, append to end\n\t\tprintf '\\n%s\\n' \"$new_section\" >>../CLAUDE.md\n\t\techo \"Appended ~/src/CLAUDE.md section to ../CLAUDE.md\"\n\tfi\nelif [[ ! -f $WORKSPACE_CLAUDE_MD ]]; then\n\techo \"No ~/src/CLAUDE.md found, skipping section insertion\"\nfi\n\n# Handle .claude directory\nif [[ -L ./.claude ]]; then\n\techo \".claude symlink already exists\"\nelif [[ -e ./.claude ]]; then\n\techo \".claude exists but is not a symlink - skipping\"\nelif [[ -e ../.claude ]]; then\n\tln -s ../.claude ./.claude\n\techo \"Created symlink: ./.claude -> ../.claude\"\nelse\n\tmkdir -p ../.claude\n\tln -s ../.claude ./.claude\n\techo \"Created ../.claude and symlink\"\nfi\n\n# Add to .git/info/exclude if in a git repo\nif [[ -d .git/info ]]; then\n\texclude_file=\".git/info/exclude\"\n\tfor entry in CLAUDE.md .claude; do\n\t\tif ! grep -qxF \"$entry\" \"$exclude_file\" 2>/dev/null; then\n\t\t\techo \"$entry\" >>\"$exclude_file\"\n\t\t\techo \"Added $entry to $exclude_file\"\n\t\tfi\n\tdone\nfi\n"
  },
  {
    "path": "overlays/scripts/checkart.sh",
    "content": "#!/usr/bin/env bash\n\nset -euo pipefail\n\nsort <<<\"$(find \"$1\" -mindepth 2 -type d -print0 | while read -r -d $'\\0' album; do [ -f \"$album/cover.jpg\" ] || echo \"$album\"; done)\"\n"
  },
  {
    "path": "overlays/scripts/default.nix",
    "content": "final: _:\nlet\n  emoji_json = final.fetchurl {\n    url = \"https://raw.githubusercontent.com/github/gemoji/0eca75db9301421efc8710baf7a7576793ae452a/db/emoji.json\";\n    hash = \"sha256-sXSuKusyG1L2Stuf9BL5ZqfzOIOdeAeE3RXcrXAsLdY=\";\n  };\n  emoji_list =\n    final.runCommand \"emoji_list.txt\"\n      {\n        nativeBuildInputs = with final; [\n          jq\n          gnused\n        ];\n      }\n      ''\n        jq -r '.[] | \"\\(.emoji) \\t   \\(.description)\"' '${emoji_json}' | sed -e 's,\\\\t,\\t,g' > $out\n      '';\n\n  writeShellApp =\n    args:\n    let\n      pname = args.name;\n      src = args.src or (./. + \"/${args.name}.sh\");\n      solutions = final.lib.filterAttrs (n: _: n != \"name\" && n != \"src\") args;\n    in\n    final.resholve.mkDerivation {\n      inherit pname src;\n      version = \"0.0.0\";\n\n      dontUnpack = true;\n      dontConfigure = true;\n      dontBuild = true;\n\n      installPhase = ''\n        runHook preInstall\n        mkdir -p $out/bin\n        cp $src $out/bin/${args.name}\n        runHook postInstall\n      '';\n\n      doInstallCheck = true;\n      installCheckPhase = ''\n        runHook preInstallCheck\n        ${final.stdenv.shellDryRun} \"$out/bin/${args.name}\"\n        ${final.shellcheck}/bin/shellcheck \"$out/bin/${args.name}\"\n        ${final.shfmt}/bin/shfmt --diff -s -ln bash -i 0 -ci \"$out/bin/${args.name}\"\n        runHook postInstallCheck\n      '';\n\n      solutions.default = {\n        interpreter = \"${final.bash}/bin/bash\";\n        scripts = [ \"bin/${args.name}\" ];\n      }\n      // solutions;\n    };\nin\n{\n  checkart = writeShellApp {\n    name = \"checkart\";\n    inputs = with final; [\n      coreutils\n      findutils\n    ];\n  };\n\n  drunmenu-wayland = writeShellApp {\n    name = \"drunmenu\";\n    src = ./drunmenu-wayland.sh;\n    inputs = with final; [\n      gnused\n      spawn\n      wofi\n    ];\n    execer = [\n      \"cannot:${final.wofi}/bin/wofi\"\n      \"cannot:${final.spawn}/bin/spawn\"\n    ];\n  };\n\n  drunmenu-x11 = writeShellApp {\n    name = \"drunmenu\";\n    src = ./drunmenu-x11.sh;\n    inputs = with final; [\n      rofi\n      spawn\n    ];\n    execer = [\n      \"cannot:${final.rofi}/bin/rofi\"\n      \"cannot:${final.spawn}/bin/spawn\"\n    ];\n  };\n\n  emojimenu-wayland = writeShellApp {\n    name = \"emojimenu\";\n    src = ./emojimenu-wayland.sh;\n    inputs = with final; [\n      coreutils\n      wl-clipboard\n      wofi\n    ];\n    execer = [\n      \"cannot:${final.wofi}/bin/wofi\"\n      \"cannot:${final.wl-clipboard}/bin/wl-copy\"\n    ];\n    prologue =\n      (final.writeText \"export-emoji-list\" ''\n        export emoji_list=\"${emoji_list}\"\n      '').outPath;\n  };\n\n  emojimenu-x11 = writeShellApp {\n    name = \"emojimenu\";\n    src = ./emojimenu-x11.sh;\n    inputs = with final; [\n      coreutils\n      rofi\n      xclip\n    ];\n    execer = [\n      \"cannot:${final.rofi}/bin/rofi\"\n      \"cannot:${final.xclip}/bin/xclip\"\n    ];\n    prologue =\n      (final.writeText \"export-emoji-list\" ''\n        export emoji_list=\"${emoji_list}\"\n      '').outPath;\n  };\n\n  fixart = writeShellApp {\n    name = \"fixart\";\n    inputs = with final; [\n      coreutils\n      findutils\n    ];\n    fake.external = [ \"beet\" ];\n  };\n\n  nix-closure-size = writeShellApp {\n    name = \"nix-closure-size\";\n    inputs = with final; [\n      coreutils\n      gawk\n    ];\n    fake.external = [ \"nix-store\" ];\n  };\n\n  screenshot = writeShellApp {\n    name = \"screenshot\";\n    inputs = with final; [\n      grim\n      slurp\n      swappy\n    ];\n    execer = [\n      \"cannot:${final.swappy}/bin/swappy\"\n    ];\n  };\n\n  spawn = writeShellApp {\n    name = \"spawn\";\n    inputs = with final; [\n      coreutils\n      systemd\n      util-linux\n    ];\n    execer = [ \"cannot:${final.systemd}/bin/systemd-run\" ];\n  };\n\n  ccinit = writeShellApp {\n    name = \"ccinit\";\n    inputs = with final; [\n      coreutils\n      gawk\n      gnugrep\n    ];\n    fake.external = [ \"claude\" ];\n  };\n}\n"
  },
  {
    "path": "overlays/scripts/drunmenu-wayland.sh",
    "content": "#!/usr/bin/env bash\n\nset -euo pipefail\n\nprogram=\"$(\n\twofi \\\n\t\t--insensitive \\\n\t\t--define \"drun-print_command=true\" \\\n\t\t--cache-file=\"${XDG_CACHE_HOME:-$HOME/.cache}/wofi/drunmenu\" \\\n\t\t--show=drun |\n\t\tsed \"s/%[a-zA-Z]//g\"\n)\"\n\n# shellcheck disable=SC2086\nexec spawn $program\n"
  },
  {
    "path": "overlays/scripts/drunmenu-x11.sh",
    "content": "#!/usr/bin/env bash\n\nset -euo pipefail\n\nprogram=\"$(\n\trofi \\\n\t\t-cache-dir \"${XDG_CACHE_HOME:-$HOME/.cache}/rofi/drunmenu\" \\\n\t\t-run-command \"echo {cmd}\" \\\n\t\t-show drun\n)\"\n\n# shellcheck disable=SC2086\nexec spawn $program\n"
  },
  {
    "path": "overlays/scripts/emojimenu-wayland.sh",
    "content": "#!/usr/bin/env/bash\n\nset -euo pipefail\n\n# XXX: We patch-in the emoji-list path in Nix\n# shellcheck disable=SC2154\nemoji=\"$(\n\twofi \\\n\t\t--cache-file=\"$XDG_CACHE_HOME/wofi/emojimenu\" \\\n\t\t-p emoji \\\n\t\t--show dmenu <\"${emoji_list}\" | cut -f1 -d\" \"\n)\"\n\nwl-copy --trim-newline <<<\"$emoji\"\n"
  },
  {
    "path": "overlays/scripts/emojimenu-x11.sh",
    "content": "#!/usr/bin/env/bash\n\nset -euo pipefail\n\n# XXX: We patch-in the emoji-list path in Nix\n# shellcheck disable=SC2154\nemoji=\"$(\n\trofi \\\n\t\t-cache-dir \"$XDG_CACHE_HOME/rofi/emojimenu\" \\\n\t\t-p emoji \\\n\t\t-dmenu <\"${emoji_list}\" | cut -f1 -d\" \"\n)\"\n\nxclip -in -rmlastnl -selection clipboard <<<\"$emoji\"\n"
  },
  {
    "path": "overlays/scripts/fixart.sh",
    "content": "#!/usr/bin/env bash\n\nset -euo pipefail\n\nfunction ctrl_c() {\n\texit 1\n}\ntrap ctrl_c INT\n\nfunction die() {\n\techo \"$@\"\n\texit 1\n}\n\nnewart=$1\n[ $# -gt 1 ] || die \"Invalid usage\"\n\nbeet clearart \"${@:2}\"\nbeet embedart -f \"$newart\" \"${@:2}\"\nbeet extractart -a \"${@:2}\"\n\noutpath=\"$(beet ls -a -p \"${@:2}\")\"\n\noriginal=\"$(sha256sum \"$newart\" | cut -f 1 -d \" \")\"\nupdated=\"$(sha256sum \"$outpath/cover.jpg\" | cut -f 1 -d \" \")\"\n[ \"$original\" == \"$updated\" ] || exit 1\necho \"OK: SHA\"\n\njpgs=\"$(find \"$outpath\" -type f -name \"*.jpg\" | wc -l)\"\n[ \"$jpgs\" -eq 1 ] || die \"Too many .jpg in album path\"\nlingering=\"$(find \"$outpath\" -type f -iname \"cover.*\" -not -iname \"cover.jpg\")\"\n[ -z \"$lingering\" ] || die \"Lingering cover files: $lingering\"\necho \"OK: cover count\"\n"
  },
  {
    "path": "overlays/scripts/nix-closure-size.sh",
    "content": "#!/usr/bin/env bash\n\nset -euo pipefail\n\n# shellcheck disable=SC2046\nnix-store -q --size $(nix-store -qR \"$(readlink -e \"$1\")\") |\n\tgawk '{ a+=$1 } END { print a }' |\n\tnumfmt --to=iec-i\n"
  },
  {
    "path": "overlays/scripts/screenshot.sh",
    "content": "#!/usr/bin/env bash\n\ngrim -t png -g \"$(slurp)\" - |\n\tswappy -f -\n"
  },
  {
    "path": "overlays/scripts/spawn.sh",
    "content": "#!/usr/bin/env bash\n\nset -euo pipefail\n\n[ \"$#\" -ge 1 ] || exit 1\npname=\"$(basename \"$1\")\"\nuuid=\"$(uuidgen)\"\nexec systemd-run --user --scope --unit \"spawn-$pname-$uuid\" \"$@\"\n"
  },
  {
    "path": "overlays/transmission-unstable.nix",
    "content": "final: prev: {\n  transmission_4 = prev.transmission_4.overrideAttrs (old: {\n    version = \"unstable-2025-11-02\";\n\n    src = final.fetchFromGitHub {\n      owner = \"transmission\";\n      repo = \"transmission\";\n      rev = \"90b52bc65cbe0e406642937f6c7a5b84acd95030\";\n      hash = \"sha256-gBwdQl1zw1ncCgFW5IQmYGcdts9i5EZ6nCWvyyTjvzk=\";\n      fetchSubmodules = true;\n    };\n\n    patches = [ ];\n\n    buildInputs = (old.buildInputs or [ ]) ++ [\n      final.rapidjson\n      final.crc32c\n    ];\n\n    postPatch = ''\n      # Clean third-party libraries to ensure system ones are used.\n      # Excluding gtest since it is hardcoded to vendored version. The rest of the listed libraries are not packaged.\n      pushd third-party\n      for f in *; do\n          if [[ ! $f =~ googletest|wildmat|fast_float|wide-integer|jsonsl|small|crc32c ]]; then\n              rm -r \"$f\"\n          fi\n      done\n      popd\n      rm \\\n        cmake/FindFmt.cmake \\\n        cmake/FindUtfCpp.cmake \\\n        cmake/FindRapidJSON.cmake\n      # Upstream uses different config file name.\n      substituteInPlace CMakeLists.txt --replace 'find_package(UtfCpp)' 'find_package(utf8cpp)'\n    '';\n\n    postInstall =\n      let\n        apparmorRules =\n          with final;\n          apparmorRulesFromClosure { name = \"transmission-daemon\"; } (\n            [\n              curl\n              libdeflate\n              libevent\n              libnatpmp\n              libpsl\n              miniupnpc\n              openssl\n              pcre\n              zlib\n            ]\n            ++ lib.optionals true [ systemd ]\n            ++ lib.optionals stdenv.hostPlatform.isLinux [ inotify-tools ]\n          );\n      in\n      ''\n        mkdir $apparmor\n        cat >$apparmor/bin.transmission-daemon <<EOF\n        include <tunables/global>\n        $out/bin/transmission-daemon {\n          include <abstractions/base>\n          include <abstractions/nameservice>\n          include <abstractions/ssl_certs>\n          include \"${apparmorRules}\"\n          r @{PROC}/sys/kernel/random/uuid,\n          r @{PROC}/sys/vm/overcommit_memory,\n          r @{PROC}/@{pid}/environ,\n          r @{PROC}/@{pid}/mounts,\n          rwk /tmp/tr_session_id_*,\n\n          r $out/share/transmission/public_html/**,\n\n          include <local/bin.transmission-daemon>\n        }\n        EOF\n        install -Dm0444 -t $out/share/icons ../icons/transmission.ico\n      '';\n\n  });\n}\n"
  },
  {
    "path": "overlays/truecolor-check.nix",
    "content": "final: _: {\n  truecolor-check = final.callPackage (\n    { writers }:\n    writers.writePython3Bin \"truecolor-check\"\n      {\n        flakeIgnore = [\n          \"E111\"\n          \"E114\"\n          \"E225\"\n          \"E226\"\n          \"E261\"\n          \"E265\"\n          \"E302\"\n          \"E305\"\n          \"E501\"\n        ];\n      }\n      (\n        builtins.readFile (\n          builtins.fetchurl {\n            url = \"https://gist.githubusercontent.com/raw/fdeaf79e921c2f413f44b6f613f6ad53/94d8b2be62657e96488038b0e547e3009ed87d40/colors.py\";\n            sha256 = \"143ljymnx30axz26gg8x3q6d77g5fa8lylgjglwbdgvnk8ym7x4p\";\n          }\n        )\n      )\n  ) { };\n}\n"
  },
  {
    "path": "secrets/bbigras-password.age",
    "content": "age-encryption.org/v1\n-> ssh-ed25519 rRe3bA ND+VTgHubga3t9koEOXR6zPJJIGrn68dKsKaNjxDwEA\nStLi5lIrbxFPj6j7cinKhGc0Kll3sQKyfjBVyUJ1w/8\n-> ]^-grease Y:}iGOL\nP3z2I0IB0211Aw\n--- EB2YGFTPaJBoQn4zBOBKX+eddZjBulLzbHsDNf1VNlQ\n\u0003Wp-e [~D4M\u0010YE6LX'\u000eFAhb#}j9\u0015L\u0019\"87V\u0013,\u000f\u0002BD\u0003}Ц>`).J&\u001aɲ'erY\u000b\u001c`}5\tz^U)i.eh\u001b9$bT>Q?"
  },
  {
    "path": "secrets/rekeyed/laptop/358bfc03128d18174ab84822482bf279-bbigrasPassword.age",
    "content": "age-encryption.org/v1\n-> ssh-ed25519 Jta5Xg PTP8OqhQxgGf48PGTJCKHHUUAP+x9Sto8MaVTjAwPGI\nTP35KkULQGvsGVEHplk9WcGXzLb1nMUzMBNs26oiNhY\n-> U_N-grease ;T5 Z. q,\\Y-\nXT8kPChUMzvGlHKLulZj5WIJmBxDzBNFw5+0FSOQc19P5pu6/wwxW+7DCVzN8BoH\noTkC0ir7aUSZXeZL\n--- txajrLfPYACrI75IoOxMEbLyMh0PtqAIG2nprMDhqh4\n݊\fξS.n~شݪƋ\u0018\u0010\u0015M\u0018\u0004bK^k\u001cEk\u0001u\u0015\u000b䰅T\u0005X~'\u001f\u0006rBu\u0007\u0017Qw\u0015f6'PqSt'c\u0017h-\u001eG@Ccb=CGpx/U9w0S"
  }
]