Repository: bbigras/nix-config Branch: master Commit: 22a414abe9eb Files: 141 Total size: 515.9 KB Directory structure: gitextract_vecdwbat/ ├── .envrc ├── .gitattributes ├── .github/ │ ├── actionlint.yaml │ ├── renovate.json │ ├── workflows/ │ │ ├── ci.yaml │ │ └── regenerate-workflows.yaml │ └── zizmor.yml ├── .gitignore ├── .justfile ├── LICENSE ├── README.md ├── configurations/ │ └── nixos/ │ ├── desktop/ │ │ ├── default.nix │ │ └── facter.json │ ├── laptop/ │ │ ├── default.nix │ │ ├── disko.nix │ │ └── facter.json │ └── work/ │ ├── default.nix │ └── facter.json ├── default.nix ├── flake.nix ├── modules/ │ ├── flake-parts/ │ │ ├── actions.nix │ │ ├── agenix-rekey.nix │ │ ├── configurations.nix │ │ ├── default.nix │ │ ├── dev-shell.nix │ │ ├── modules.nix │ │ ├── overlays.nix │ │ ├── packages.nix │ │ ├── pre-commit.nix │ │ └── treefmt.nix │ ├── home/ │ │ ├── asciinema.nix │ │ ├── bash.nix │ │ ├── btop.nix │ │ ├── default.nix │ │ ├── delta.nix │ │ ├── dev/ │ │ │ └── default.nix │ │ ├── emacs/ │ │ │ ├── android.nix │ │ │ ├── consult.nix │ │ │ ├── default.nix │ │ │ ├── denote.nix │ │ │ ├── go.nix │ │ │ ├── latex.nix │ │ │ ├── org-mode.nix │ │ │ ├── rust.nix │ │ │ ├── tree-sitter.nix │ │ │ └── typescript.nix │ │ ├── fish.nix │ │ ├── git.nix │ │ ├── graphical/ │ │ │ ├── chromium.nix │ │ │ ├── default.nix │ │ │ ├── firefox.nix │ │ │ ├── heroic.nix │ │ │ ├── keepassxc.nix │ │ │ ├── linux.nix │ │ │ ├── lutris.nix │ │ │ ├── mime.nix │ │ │ ├── mpv.nix │ │ │ ├── psd.nix │ │ │ ├── vicinae.nix │ │ │ └── zed-editor.nix │ │ ├── htop.nix │ │ ├── jjui.nix │ │ ├── jujutsu.nix │ │ ├── music.nix │ │ ├── radicle.nix │ │ ├── ssh.nix │ │ ├── standalone.nix │ │ ├── starship.nix │ │ ├── syncthing.nix │ │ ├── television.nix │ │ ├── terminfo-hack.nix │ │ ├── tkey-ssh-agent.nix │ │ ├── tmux.nix │ │ ├── trusted/ │ │ │ ├── default.nix │ │ │ └── gpg.nix │ │ ├── xdg.nix │ │ └── zsh.nix │ ├── nixos/ │ │ ├── agenix-rekey.nix │ │ ├── core.nix │ │ ├── default.nix │ │ ├── graphical/ │ │ │ ├── cosmic.nix │ │ │ ├── default.nix │ │ │ ├── fonts.nix │ │ │ ├── steam.nix │ │ │ └── trusted.nix │ │ ├── hardware/ │ │ │ ├── bluetooth.nix │ │ │ ├── efi.nix │ │ │ ├── fast-networking.nix │ │ │ ├── no-mitigations.nix │ │ │ ├── nonsecureboot.nix │ │ │ ├── nvidia.nix │ │ │ ├── printer.nix │ │ │ ├── secureboot.nix │ │ │ ├── sound.nix │ │ │ ├── vial.nix │ │ │ └── yubikey.nix │ │ ├── pam-limits.nix │ │ ├── printing.nix │ │ ├── resolved.nix │ │ ├── services/ │ │ │ ├── blocky.nix │ │ │ ├── github-runner.nix │ │ │ ├── grafana.nix │ │ │ ├── jellyfin.nix │ │ │ ├── mysql.nix │ │ │ ├── nginx.nix │ │ │ ├── oauth2.nix │ │ │ ├── peerix.nix │ │ │ ├── podman.nix │ │ │ ├── postgresql.nix │ │ │ ├── prometheus.nix │ │ │ ├── syncthing.nix │ │ │ ├── unbound.nix │ │ │ ├── veilid.nix │ │ │ ├── virt-manager.nix │ │ │ └── wivrn.nix │ │ ├── tailscale-address.nix │ │ ├── tmux.nix │ │ └── users/ │ │ └── bbigras.nix │ └── shared/ │ ├── aspell.nix │ ├── common.nix │ ├── nix.nix │ └── nixpkgs.nix ├── overlays/ │ ├── nix-latest.nix │ ├── nom-latest.nix │ ├── scripts/ │ │ ├── ccinit.sh │ │ ├── checkart.sh │ │ ├── default.nix │ │ ├── drunmenu-wayland.sh │ │ ├── drunmenu-x11.sh │ │ ├── emojimenu-wayland.sh │ │ ├── emojimenu-x11.sh │ │ ├── fixart.sh │ │ ├── nix-closure-size.sh │ │ ├── screenshot.sh │ │ └── spawn.sh │ ├── transmission-unstable.nix │ └── truecolor-check.nix └── secrets/ ├── bbigras-password.age └── rekeyed/ ├── bbigras-work/ │ └── 3cc4c109592072ab107706732a15ed98-bbigrasPassword.age ├── desktop/ │ └── 69fc21a1ca0ccfd1e8a2e64caeff5ff4-bbigrasPassword.age └── laptop/ └── 358bfc03128d18174ab84822482bf279-bbigrasPassword.age ================================================ FILE CONTENTS ================================================ ================================================ FILE: .envrc ================================================ # shellcheck disable=all watch_file ./modules/flake-parts/actions.nix watch_file ./modules/flake-parts/dev-shell.nix watch_file ./modules/flake-parts/overlays.nix watch_file ./modules/flake-parts/pre-commit.nix watch_file ./modules/flake-parts/treefmt.nix use flake . --impure ================================================ FILE: .gitattributes ================================================ *.age filter=age diff=age *.png filter=lfs diff=lfs merge=lfs -text *.jpg filter=lfs diff=lfs merge=lfs -text ================================================ FILE: .github/actionlint.yaml ================================================ self-hosted-runner: # Labels of self-hosted runner in array of strings. labels: [] # Configuration variables in array of strings defined in your repository or # organization. `null` means disabling configuration variables check. # Empty array means no configuration variable is allowed. config-variables: null # Configuration for file paths. The keys are glob patterns to match to file # paths relative to the repository root. The values are the configurations for # the file paths. Note that the path separator is always '/'. # The following configurations are available. # # "ignore" is an array of regular expression patterns. Matched error messages # are ignored. This is similar to the "-ignore" command line option. paths: # .github/workflows/**/*.yml: # ignore: [] ================================================ FILE: .github/renovate.json ================================================ { "$schema": "https://docs.renovatebot.com/renovate-schema.json", "extends": [ "config:recommended" ], "gitIgnoredAuthors": [ "noreply@github.com" ], "github-actions": { "enabled": false }, "nix": { "enabled": true }, "lockFileMaintenance": { "enabled": true, "schedule": ["before 1am"], "commitMessageAction": "update", "prBodyDefinitions": { "Change": "All flake inputs updated" } }, "customManagers": [ { "customType": "regex", "managerFilePatterns": [ "/modules/flake-parts/actions\\.nix$/" ], "matchStrings": [ "\"(?[A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+)@(?[a-f0-9]+)\";\\s*#\\s*(?v?[\\d.]+)" ], "datasourceTemplate": "github-tags", "autoReplaceStringTemplate": "\"{{{depName}}}@{{{newDigest}}}\"; # {{{newValue}}}" } ], "packageRules": [ { "matchManagers": [ "custom.regex" ], "matchDatasources": [ "github-tags" ], "automerge": false, "pinDigests": true, "commitMessagePrefix": "chore(actions):" }, { "matchManagers": [ "nix" ], "automerge": true, "automergeType": "pr", "automergeStrategy": "rebase", "commitMessagePrefix": "chore(flake):", "prBodyNotes": [ "This PR updates nix flake inputs." ] }, { "matchUpdateTypes": [ "lockFileMaintenance" ], "automerge": true, "automergeType": "pr", "automergeStrategy": "rebase", "commitMessagePrefix": "chore(flake):", "addLabels": [ "dependencies", "automated" ] } ] } ================================================ FILE: .github/workflows/ci.yaml ================================================ # This file was autogenerated by actions.nix. Do not edit it manually. # To make changes, edit the workflow definition in your flake's actions-nix configuration # (typically under flake.actions-nix.workflows.".github/workflows/ci.yaml") and run: # nix run .#render-workflows # Or commit to trigger the pre-commit hook if enabled. concurrency: cancel-in-progress: ${{ github.event_name == 'pull_request' }} group: ci-${{ github.head_ref || github.ref_name }} jobs: build: environment: ci name: ${{ matrix.attrs.name }} (${{ matrix.attrs.hostPlatform }}) runs-on: ${{ matrix.attrs.runsOn }} steps: - uses: wimpysworld/nothing-but-nix@687c797a730352432950c707ab493fcc951818d7 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd with: persist-credentials: false - uses: cachix/install-nix-action@ab739621df7a23f52766f9ccc97f38da6b7af14f - uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae with: key: nix-eval-${{ runner.os }}-${{ runner.arch }}-${{ hashFiles('flake.lock') }} path: ~/.cache/nix restore-keys: nix-eval-${{ runner.os }}-${{ runner.arch }}- - uses: cachix/cachix-action@1eb2ef646ac0255473d23a5907ad7b04ce94065c with: authToken: ${{ secrets.CACHIX_AUTH_TOKEN }} extraPullNames: nix-community name: bbigras-nix-config - name: nix-fast-build run: nix run 'git+file:.#nix-fast-build' -- --no-nom --skip-cached --retries=3 --option accept-flake-config true --flake='git+file:.#${{ matrix.attrs.attr }}' strategy: fail-fast: false matrix: attrs: - attr: nixosConfigurations.desktop.config.system.build.toplevel hostPlatform: x86_64-linux name: desktop runsOn: ubuntu-24.04 - attr: nixosConfigurations.laptop.config.system.build.toplevel hostPlatform: x86_64-linux name: laptop runsOn: ubuntu-24.04 - attr: nixosConfigurations.work.config.system.build.toplevel hostPlatform: x86_64-linux name: work runsOn: ubuntu-24.04 timeout-minutes: 60 check: if: always() needs: - flake-check - build runs-on: ubuntu-24.04 steps: - uses: re-actors/alls-green@05ac9388f0aebcb5727afa17fcccfecd6f8ec5fe with: jobs: ${{ toJSON(needs) }} timeout-minutes: 60 flake-check: environment: ci name: flake check (${{ matrix.systems.platform }}) runs-on: ${{ matrix.systems.os }} steps: - uses: wimpysworld/nothing-but-nix@687c797a730352432950c707ab493fcc951818d7 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd with: persist-credentials: false - uses: cachix/install-nix-action@ab739621df7a23f52766f9ccc97f38da6b7af14f - uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae with: key: nix-eval-${{ runner.os }}-${{ runner.arch }}-${{ hashFiles('flake.lock') }} path: ~/.cache/nix restore-keys: nix-eval-${{ runner.os }}-${{ runner.arch }}- - uses: cachix/cachix-action@1eb2ef646ac0255473d23a5907ad7b04ce94065c with: authToken: ${{ secrets.CACHIX_AUTH_TOKEN }} extraPullNames: nix-community name: bbigras-nix-config - name: nix flake check run: nix flake check 'git+file:.' - name: nix flake show run: nix flake show 'git+file:.' strategy: matrix: systems: - os: ubuntu-24.04 platform: x86_64-linux timeout-minutes: 60 name: ci 'on': pull_request: {} push: branches: - master - try workflow_dispatch: {} permissions: {} ================================================ FILE: .github/workflows/regenerate-workflows.yaml ================================================ # This file was autogenerated by actions.nix. Do not edit it manually. # To make changes, edit the workflow definition in your flake's actions-nix configuration # (typically under flake.actions-nix.workflows.".github/workflows/regenerate-workflows.yaml") and run: # nix run .#render-workflows # Or commit to trigger the pre-commit hook if enabled. jobs: regenerate: environment: renovate if: github.actor == 'renovate[bot]' || github.event_name == 'workflow_dispatch' runs-on: ubuntu-24.04 steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd with: fetch-depth: 2 ref: ${{ github.head_ref || github.ref_name }} token: ${{ secrets.PAT }} - uses: cachix/install-nix-action@ab739621df7a23f52766f9ccc97f38da6b7af14f - uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae with: key: nix-eval-${{ runner.os }}-${{ runner.arch }}-${{ hashFiles('flake.lock') }} path: ~/.cache/nix restore-keys: nix-eval-${{ runner.os }}-${{ runner.arch }}- - uses: cachix/cachix-action@1eb2ef646ac0255473d23a5907ad7b04ce94065c with: authToken: ${{ secrets.CACHIX_AUTH_TOKEN }} extraPullNames: nix-community name: bbigras-nix-config - name: Regenerate workflows run: nix run .#render-workflows - name: Amend commit with regenerated workflows run: |- git config user.name "github[bot]" git config user.email "noreply@github.com" git add .github/workflows/ git diff --staged --quiet || git commit --amend --no-edit git push --force-with-lease - uses: peter-evans/enable-pull-request-automerge@a660677d5469627102a1c1e11409dd063606628d with: merge-method: rebase pull-request-number: ${{ github.event.pull_request.number }} token: ${{ secrets.PAT }} timeout-minutes: 60 name: regenerate-workflows 'on': pull_request: paths: - modules/flake-parts/actions.nix - flake.lock workflow_dispatch: {} permissions: contents: write pull-requests: write ================================================ FILE: .github/zizmor.yml ================================================ # zizmor configuration - suppress intentional security warnings rules: # regenerate-workflows needs credentials to push amended commits artipacked: ignore: - regenerate-workflows.yaml # Checking for renovate[bot] actor is intentional - this workflow # only runs for Renovate PRs to regenerate workflow YAML files bot-conditions: ignore: - regenerate-workflows.yaml ================================================ FILE: .gitignore ================================================ *~ ,* .*.swp .*.swo result result-* .DS_Store .direnv /.pre-commit-config.yaml ================================================ FILE: .justfile ================================================ build HOST: nix build .#nixosConfigurations.{{HOST}}.config.system.build.toplevel --log-format internal-json -v |& nom --json # deploy HOST: # deploy -s ".#{{HOST}}" -- --impure # pixel6: # # 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 # nix build .#packages.aarch64-linux.pixel6 --impure --log-format internal-json -v |& nom --json # laptop: # nom build .#laptop --impure --extra-substituters http://192.168.68.6:8501 --extra-trusted-public-keys "192.168.68.6:zSAiwQJTX02yGP2NSof1Pin339R5YP+91Y5xdaqFsnU=" ================================================ FILE: LICENSE ================================================ BSD 3-Clause License Copyright (c) 2020, Bruno Bigras All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ================================================ FILE: README.md ================================================ # 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) WIP # Features - flakes - deploy with deploy-rs - use the zen Linux kernel - use [nixos-hardware](https://github.com/NixOS/nixos-hardware) - use [srvos](https://github.com/nix-community/srvos) - Full disk encryption on laptop - [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` - overlays - emacs-overlay - nur - split-dns with systemd-resolved (might be set in my privates files) - tailscale This is heavily based on https://github.com/lovesegfault/nix-config. Many files were copied directly from that repo. Note that the license should include lovesegfault's copyright on many files. Not sure how to sort that yet. ## Build one host ```sh nix build .#hosts.desktop --impure ``` ## Deploy one host ```sh deploy -s .#pixel6 -- --impure ``` ## nix-on-droid (first time) On the phone: ```sh nix-shell -p openssh -p which # get user and group id and put it in hosts/pixel6/default.nix id ssh-keygen -q -N "" -t ed25519 -f ~/ssh_host_ed25519_key cat < tmp-sshd HostKey ~/ssh_host_ed25519_key Port 8022 EOF mkdir -p ~/.ssh cat < ~/.ssh/authorized_keys **my key** EOF # start sshd server to be able to deploy from desktop with deploy-rs `which sshd` -dD -f ~/tmp-sshd ``` ================================================ FILE: configurations/nixos/desktop/default.nix ================================================ # NixOS configuration for desktop { flake, pkgs, lib, ... }: let inherit (flake) inputs self; in { imports = [ # Internal modules via flake outputs self.nixosModules.default self.nixosModules.users-bbigras self.nixosModules.graphical self.nixosModules.graphical-cosmic self.nixosModules.graphical-steam self.nixosModules.graphical-fonts self.nixosModules.graphical-trusted self.nixosModules.pam-limits self.nixosModules.hardware-secureboot self.nixosModules.services-peerix self.nixosModules.services-podman self.nixosModules.services-wivrn #self.nixosModules.services-virt-manager # Hardware modules from nixos-hardware inputs.nixos-hardware.nixosModules.common-cpu-intel inputs.nixos-hardware.nixosModules.common-gpu-amd inputs.nixos-hardware.nixosModules.common-pc-ssd # Host-specific files # ./state.nix { config.facter.reportPath = ./facter.json; } ]; hardware.amdgpu.initrd.enable = true; services.udev.extraRules = '' # Block ASRock LED Controller joystick node SUBSYSTEM=="input", KERNEL=="js*", ATTRS{id/vendor}=="26ce", ATTRS{id/product}=="01a2", MODE="0000" # Block NuPhy hidraw interfaces SUBSYSTEM=="hidraw", ATTRS{idVendor}=="19f5", ATTRS{idProduct}=="3246", MODE="0000" # Block NuPhy System Control event node (the one SDL misidentifies as a joystick) SUBSYSTEM=="input", KERNEL=="event*", ATTRS{name}=="NuPhy NuPhy Air75 V2 System Control", MODE="0000" ''; # Host-specific home-manager user config home-manager.users.bbigras.imports = [ self.homeModules.trusted self.homeModules.emacs self.homeModules.radicle self.homeModules.syncthing self.homeModules.graphical self.homeModules.graphical-heroic self.homeModules.graphical-lutris self.homeModules.tkey-ssh-agent ]; # SSH target for remote activation # Platform nixpkgs.hostPlatform = "x86_64-linux"; # Host-specific configuration boot = { binfmt.emulatedSystems = [ "aarch64-linux" ]; initrd = { systemd.enable = true; }; lanzaboote.pkiBundle = lib.mkForce "/var/lib/sbctl"; plymouth.enable = true; }; environment.systemPackages = with pkgs; [ cntr wireguard-tools ]; fileSystems = { "/" = { device = "/dev/disk/by-uuid/e58653d8-7f76-402d-998d-400fe04f7520"; fsType = "ext4"; }; "/boot" = { device = "/dev/disk/by-uuid/DA5A-BC65"; fsType = "vfat"; options = [ "fmask=0022" "dmask=0022" ]; }; "/media/gamedisk" = { device = "/dev/disk/by-id/wwn-0x5000c5006527e1b4-part2"; fsType = "ext4"; }; }; # agenix-rekey host pubkey age.rekey.hostPubkey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINfn1kTx3Z2380QFj5IN/eWDe+/dt4CIzTaImlKbD+09"; networking = { # hostId = ""; hostName = "desktop"; wireguard.enable = true; }; nix.settings.max-substitution-jobs = 32; security.sudo.wheelNeedsPassword = true; services = { flatpak.enable = true; fwupd.enable = true; udisks2.enable = true; avahi.enable = pkgs.lib.mkForce false; earlyoom = { enable = true; enableNotifications = true; }; tuned = { enable = true; ppdSupport = false; recommend = { balanced = { }; }; }; }; systemd.network.networks = { lan = { DHCP = "yes"; matchConfig.Name = "enp*"; dhcpV4Config.RouteMetric = 20; # dhcpV6Config.RouteMetric = 20; linkConfig = { Multicast = true; RequiredForOnline = "routable"; }; networkConfig = { MulticastDNS = true; LLMNR = true; }; }; }; } ================================================ FILE: configurations/nixos/desktop/facter.json ================================================ { "version": 1, "system": "x86_64-linux", "virtualisation": "none", "hardware": { "bios": { "apm_info": { "supported": false, "enabled": false, "version": 0, "sub_version": 0, "bios_flags": 0 }, "vbe_info": { "version": 0, "video_memory": 0 }, "pnp": false, "pnp_id": 0, "lba_support": false, "low_memory_size": 0, "smbios_version": 773 }, "bluetooth": [ { "index": 51, "attached_to": 57, "class_list": [ "usb", "bluetooth" ], "bus_type": { "hex": "0086", "name": "USB", "value": 134 }, "slot": { "bus": 0, "number": 0 }, "base_class": { "hex": "0115", "name": "Bluetooth Device", "value": 277 }, "vendor": { "hex": "8087", "value": 32903 }, "device": { "hex": "0033", "value": 51 }, "model": "Bluetooth Device", "sysfs_id": "/devices/pci0000:00/0000:00:14.0/usb1/1-14/1-14:1.0", "sysfs_bus_id": "1-14:1.0", "resources": [ { "type": "baud", "speed": 12000000, "bits": 0, "stop_bits": 0, "parity": 0, "handshake": 0 } ], "detail": { "device_class": { "hex": "00e0", "name": "wireless", "value": 224 }, "device_subclass": { "hex": "0001", "name": "audio", "value": 1 }, "device_protocol": 1, "interface_class": { "hex": "00e0", "name": "wireless", "value": 224 }, "interface_subclass": { "hex": "0001", "name": "audio", "value": 1 }, "interface_protocol": 1, "interface_number": 0, "interface_alternate_setting": 0 }, "hotplug": "usb", "driver": "btusb", "driver_module": "btusb", "drivers": [ "btusb" ], "driver_modules": [ "btusb" ], "module_alias": "usb:v8087p0033d0000dcE0dsc01dp01icE0isc01ip01in00" }, { "index": 58, "attached_to": 57, "class_list": [ "usb", "bluetooth" ], "bus_type": { "hex": "0086", "name": "USB", "value": 134 }, "slot": { "bus": 0, "number": 0 }, "base_class": { "hex": "0115", "name": "Bluetooth Device", "value": 277 }, "vendor": { "hex": "8087", "value": 32903 }, "device": { "hex": "0033", "value": 51 }, "model": "Bluetooth Device", "sysfs_id": "/devices/pci0000:00/0000:00:14.0/usb1/1-14/1-14:1.1", "sysfs_bus_id": "1-14:1.1", "resources": [ { "type": "baud", "speed": 12000000, "bits": 0, "stop_bits": 0, "parity": 0, "handshake": 0 } ], "detail": { "device_class": { "hex": "00e0", "name": "wireless", "value": 224 }, "device_subclass": { "hex": "0001", "name": "audio", "value": 1 }, "device_protocol": 1, "interface_class": { "hex": "00e0", "name": "wireless", "value": 224 }, "interface_subclass": { "hex": "0001", "name": "audio", "value": 1 }, "interface_protocol": 1, "interface_number": 1, "interface_alternate_setting": 0 }, "hotplug": "usb", "driver": "btusb", "driver_module": "btusb", "drivers": [ "btusb" ], "driver_modules": [ "btusb" ], "module_alias": "usb:v8087p0033d0000dcE0dsc01dp01icE0isc01ip01in01" } ], "bridge": [ { "index": 22, "attached_to": 0, "class_list": [ "pci", "bridge" ], "bus_type": { "hex": "0004", "name": "PCI", "value": 4 }, "slot": { "bus": 0, "number": 28 }, "base_class": { "hex": "0006", "name": "Bridge", "value": 6 }, "sub_class": { "hex": "0004", "name": "PCI bridge", "value": 4 }, "pci_interface": { "hex": "0000", "name": "Normal decode", "value": 0 }, "vendor": { "hex": "8086", "name": "Intel Corporation", "value": 32902 }, "sub_vendor": { "hex": "1849", "value": 6217 }, "device": { "hex": "7a38", "value": 31288 }, "sub_device": { "hex": "7a38", "value": 31288 }, "revision": { "hex": "0011", "value": 17 }, "model": "Intel PCI bridge", "sysfs_id": "/devices/pci0000:00/0000:00:1c.0", "sysfs_bus_id": "0000:00:1c.0", "resources": [ { "type": "irq", "base": 122, "triggered": 0, "enabled": true } ], "detail": { "function": 0, "command": 1031, "header_type": 1, "secondary_bus": 5, "irq": 122, "prog_if": 0 }, "driver": "pcieport", "driver_module": "pcieportdrv", "drivers": [ "pcieport" ], "driver_modules": [ "pcieportdrv" ], "module_alias": "pci:v00008086d00007A38sv00001849sd00007A38bc06sc04i00" }, { "index": 23, "attached_to": 0, "class_list": [ "pci", "bridge" ], "bus_type": { "hex": "0004", "name": "PCI", "value": 4 }, "slot": { "bus": 0, "number": 31 }, "base_class": { "hex": "0006", "name": "Bridge", "value": 6 }, "sub_class": { "hex": "0001", "name": "ISA bridge", "value": 1 }, "vendor": { "hex": "8086", "name": "Intel Corporation", "value": 32902 }, "sub_vendor": { "hex": "1849", "value": 6217 }, "device": { "hex": "7a06", "value": 31238 }, "sub_device": { "hex": "7a06", "value": 31238 }, "revision": { "hex": "0011", "value": 17 }, "model": "Intel ISA bridge", "sysfs_id": "/devices/pci0000:00/0000:00:1f.0", "sysfs_bus_id": "0000:00:1f.0", "detail": { "function": 0, "command": 1031, "header_type": 0, "secondary_bus": 0, "irq": 0, "prog_if": 0 }, "module_alias": "pci:v00008086d00007A06sv00001849sd00007A06bc06sc01i00" }, { "index": 24, "attached_to": 28, "class_list": [ "pci", "bridge" ], "bus_type": { "hex": "0004", "name": "PCI", "value": 4 }, "slot": { "bus": 2, "number": 0 }, "base_class": { "hex": "0006", "name": "Bridge", "value": 6 }, "sub_class": { "hex": "0004", "name": "PCI bridge", "value": 4 }, "pci_interface": { "hex": "0000", "name": "Normal decode", "value": 0 }, "vendor": { "hex": "1002", "name": "ATI Technologies Inc", "value": 4098 }, "sub_vendor": { "hex": "1002", "name": "ATI Technologies Inc", "value": 4098 }, "device": { "hex": "1479", "value": 5241 }, "sub_device": { "hex": "1479", "value": 5241 }, "model": "ATI PCI bridge", "sysfs_id": "/devices/pci0000:00/0000:00:01.0/0000:01:00.0/0000:02:00.0", "sysfs_bus_id": "0000:02:00.0", "resources": [ { "type": "irq", "base": 125, "triggered": 0, "enabled": true } ], "detail": { "function": 0, "command": 1031, "header_type": 1, "secondary_bus": 3, "irq": 125, "prog_if": 0 }, "driver": "pcieport", "driver_module": "pcieportdrv", "drivers": [ "pcieport" ], "driver_modules": [ "pcieportdrv" ], "module_alias": "pci:v00001002d00001479sv00001002sd00001479bc06sc04i00" }, { "index": 25, "attached_to": 0, "class_list": [ "pci", "bridge" ], "bus_type": { "hex": "0004", "name": "PCI", "value": 4 }, "slot": { "bus": 0, "number": 1 }, "base_class": { "hex": "0006", "name": "Bridge", "value": 6 }, "sub_class": { "hex": "0004", "name": "PCI bridge", "value": 4 }, "pci_interface": { "hex": "0000", "name": "Normal decode", "value": 0 }, "vendor": { "hex": "8086", "name": "Intel Corporation", "value": 32902 }, "sub_vendor": { "hex": "1849", "value": 6217 }, "device": { "hex": "460d", "value": 17933 }, "sub_device": { "hex": "460d", "value": 17933 }, "revision": { "hex": "0002", "value": 2 }, "model": "Intel PCI bridge", "sysfs_id": "/devices/pci0000:00/0000:00:01.0", "sysfs_bus_id": "0000:00:01.0", "resources": [ { "type": "irq", "base": 120, "triggered": 0, "enabled": true } ], "detail": { "function": 0, "command": 1031, "header_type": 1, "secondary_bus": 1, "irq": 120, "prog_if": 0 }, "driver": "pcieport", "driver_module": "pcieportdrv", "drivers": [ "pcieport" ], "driver_modules": [ "pcieportdrv" ], "module_alias": "pci:v00008086d0000460Dsv00001849sd0000460Dbc06sc04i00" }, { "index": 28, "attached_to": 25, "class_list": [ "pci", "bridge" ], "bus_type": { "hex": "0004", "name": "PCI", "value": 4 }, "slot": { "bus": 1, "number": 0 }, "base_class": { "hex": "0006", "name": "Bridge", "value": 6 }, "sub_class": { "hex": "0004", "name": "PCI bridge", "value": 4 }, "pci_interface": { "hex": "0000", "name": "Normal decode", "value": 0 }, "vendor": { "hex": "1002", "name": "ATI Technologies Inc", "value": 4098 }, "device": { "hex": "1478", "value": 5240 }, "revision": { "hex": "00c5", "value": 197 }, "model": "ATI PCI bridge", "sysfs_id": "/devices/pci0000:00/0000:00:01.0/0000:01:00.0", "sysfs_bus_id": "0000:01:00.0", "resources": [ { "type": "irq", "base": 16, "triggered": 0, "enabled": true }, { "type": "mem", "base": 1914699776, "range": 16384, "enabled": true, "access": "read_write", "prefetch": "no" } ], "detail": { "function": 0, "command": 7, "header_type": 1, "secondary_bus": 2, "irq": 16, "prog_if": 0 }, "driver": "pcieport", "driver_module": "pcieportdrv", "drivers": [ "pcieport" ], "driver_modules": [ "pcieportdrv" ], "module_alias": "pci:v00001002d00001478sv00000000sd00000000bc06sc04i00" }, { "index": 30, "attached_to": 0, "class_list": [ "pci", "bridge" ], "bus_type": { "hex": "0004", "name": "PCI", "value": 4 }, "slot": { "bus": 0, "number": 28 }, "base_class": { "hex": "0006", "name": "Bridge", "value": 6 }, "sub_class": { "hex": "0004", "name": "PCI bridge", "value": 4 }, "pci_interface": { "hex": "0000", "name": "Normal decode", "value": 0 }, "vendor": { "hex": "8086", "name": "Intel Corporation", "value": 32902 }, "sub_vendor": { "hex": "1849", "value": 6217 }, "device": { "hex": "7a3b", "value": 31291 }, "sub_device": { "hex": "7a3b", "value": 31291 }, "revision": { "hex": "0011", "value": 17 }, "model": "Intel PCI bridge", "sysfs_id": "/devices/pci0000:00/0000:00:1c.3", "sysfs_bus_id": "0000:00:1c.3", "resources": [ { "type": "irq", "base": 123, "triggered": 0, "enabled": true } ], "detail": { "function": 3, "command": 1031, "header_type": 1, "secondary_bus": 6, "irq": 123, "prog_if": 0 }, "driver": "pcieport", "driver_module": "pcieportdrv", "drivers": [ "pcieport" ], "driver_modules": [ "pcieportdrv" ], "module_alias": "pci:v00008086d00007A3Bsv00001849sd00007A3Bbc06sc04i00" }, { "index": 33, "attached_to": 0, "class_list": [ "pci", "bridge" ], "bus_type": { "hex": "0004", "name": "PCI", "value": 4 }, "slot": { "bus": 0, "number": 0 }, "base_class": { "hex": "0006", "name": "Bridge", "value": 6 }, "sub_class": { "hex": "0000", "name": "Host bridge", "value": 0 }, "vendor": { "hex": "8086", "name": "Intel Corporation", "value": 32902 }, "sub_vendor": { "hex": "1849", "value": 6217 }, "device": { "hex": "4648", "value": 17992 }, "sub_device": { "hex": "4648", "value": 17992 }, "revision": { "hex": "0002", "value": 2 }, "model": "Intel Host bridge", "sysfs_id": "/devices/pci0000:00/0000:00:00.0", "sysfs_bus_id": "0000:00:00.0", "detail": { "function": 0, "command": 6, "header_type": 0, "secondary_bus": 0, "irq": 0, "prog_if": 0 }, "module_alias": "pci:v00008086d00004648sv00001849sd00004648bc06sc00i00" }, { "index": 36, "attached_to": 0, "class_list": [ "pci", "bridge" ], "bus_type": { "hex": "0004", "name": "PCI", "value": 4 }, "slot": { "bus": 0, "number": 6 }, "base_class": { "hex": "0006", "name": "Bridge", "value": 6 }, "sub_class": { "hex": "0004", "name": "PCI bridge", "value": 4 }, "pci_interface": { "hex": "0000", "name": "Normal decode", "value": 0 }, "vendor": { "hex": "8086", "name": "Intel Corporation", "value": 32902 }, "device": { "hex": "464d", "value": 17997 }, "revision": { "hex": "0002", "value": 2 }, "model": "Intel PCI bridge", "sysfs_id": "/devices/pci0000:00/0000:00:06.0", "sysfs_bus_id": "0000:00:06.0", "resources": [ { "type": "irq", "base": 121, "triggered": 0, "enabled": true } ], "detail": { "function": 0, "command": 1031, "header_type": 1, "secondary_bus": 4, "irq": 121, "prog_if": 0 }, "driver": "pcieport", "driver_module": "pcieportdrv", "drivers": [ "pcieport" ], "driver_modules": [ "pcieportdrv" ], "module_alias": "pci:v00008086d0000464Dsv00000000sd00000000bc06sc04i00" }, { "index": 37, "attached_to": 0, "class_list": [ "pci", "bridge" ], "bus_type": { "hex": "0004", "name": "PCI", "value": 4 }, "slot": { "bus": 0, "number": 29 }, "base_class": { "hex": "0006", "name": "Bridge", "value": 6 }, "sub_class": { "hex": "0004", "name": "PCI bridge", "value": 4 }, "pci_interface": { "hex": "0000", "name": "Normal decode", "value": 0 }, "vendor": { "hex": "8086", "name": "Intel Corporation", "value": 32902 }, "sub_vendor": { "hex": "1849", "value": 6217 }, "device": { "hex": "7a36", "value": 31286 }, "sub_device": { "hex": "7a36", "value": 31286 }, "revision": { "hex": "0011", "value": 17 }, "model": "Intel PCI bridge", "sysfs_id": "/devices/pci0000:00/0000:00:1d.0", "sysfs_bus_id": "0000:00:1d.0", "resources": [ { "type": "irq", "base": 124, "triggered": 0, "enabled": true } ], "detail": { "function": 0, "command": 1031, "header_type": 1, "secondary_bus": 7, "irq": 124, "prog_if": 0 }, "driver": "pcieport", "driver_module": "pcieportdrv", "drivers": [ "pcieport" ], "driver_modules": [ "pcieportdrv" ], "module_alias": "pci:v00008086d00007A36sv00001849sd00007A36bc06sc04i00" } ], "cpu": [ { "architecture": "x86_64", "vendor_name": "GenuineIntel", "model_name": "12th Gen Intel(R) Core(TM) i5-12600KF", "family": 6, "model": 151, "stepping": 2, "features": [ "fpu", "vme", "de", "pse", "tsc", "msr", "pae", "mce", "cx8", "apic", "sep", "mtrr", "pge", "mca", "cmov", "pat", "pse36", "clflush", "dts", "acpi", "mmx", "fxsr", "sse", "sse2", "ss", "ht", "tm", "pbe", "syscall", "nx", "pdpe1gb", "rdtscp", "lm", "constant_tsc", "art", "arch_perfmon", "pebs", "bts", "rep_good", "nopl", "xtopology", "nonstop_tsc", "cpuid", "aperfmperf", "tsc_known_freq", "pni", "pclmulqdq", "dtes64", "monitor", "ds_cpl", "vmx", "est", "tm2", "ssse3", "sdbg", "fma", "cx16", "xtpr", "pdcm", "pcid", "sse4_1", "sse4_2", "x2apic", "movbe", "popcnt", "tsc_deadline_timer", "aes", "xsave", "avx", "f16c", "rdrand", "lahf_lm", "abm", "3dnowprefetch", "cpuid_fault", "epb", "ssbd", "ibrs", "ibpb", "stibp", "ibrs_enhanced", "tpr_shadow", "flexpriority", "ept", "vpid", "ept_ad", "fsgsbase", "tsc_adjust", "bmi1", "avx2", "smep", "bmi2", "erms", "invpcid", "rdseed", "adx", "smap", "clflushopt", "clwb", "intel_pt", "sha_ni", "xsaveopt", "xsavec", "xgetbv1", "xsaves", "split_lock_detect", "user_shstk", "avx_vnni", "dtherm", "ida", "arat", "pln", "pts", "hwp", "hwp_notify", "hwp_act_window", "hwp_epp", "hwp_pkg_req", "hfi", "vnmi", "umip", "pku", "ospke", "waitpkg", "gfni", "vaes", "vpclmulqdq", "rdpid", "movdiri", "movdir64b", "fsrm", "md_clear", "serialize", "arch_lbr", "ibt", "flush_l1d", "arch_capabilities" ], "bugs": [ "spectre_v1", "spectre_v2", "spec_store_bypass", "swapgs", "eibrs_pbrsb", "rfds", "bhi" ], "power_management": [ "" ], "bogo": 7372.8, "cache": 20480, "units": 128, "physical_id": 0, "siblings": 16, "cores": 10, "fpu": false, "fpu_exception": false, "cpuid_level": 32, "write_protect": false, "clflush_size": 64, "cache_alignment": 64, "address_sizes": { "physical": "0x27", "virtual": "0x30" } } ], "disk": [ { "index": 45, "attached_to": 40, "class_list": [ "disk", "block_device", "nvme" ], "bus_type": { "hex": "0096", "name": "NVME", "value": 150 }, "slot": { "bus": 0, "number": 0 }, "base_class": { "hex": "0106", "name": "Mass Storage Device", "value": 262 }, "sub_class": { "hex": "0000", "name": "Disk", "value": 0 }, "vendor": { "hex": "2646", "value": 9798 }, "sub_vendor": { "hex": "2646", "value": 9798 }, "device": { "hex": "5023", "name": "KINGSTON SNV2S1000G", "value": 20515 }, "sub_device": { "hex": "5023", "value": 20515 }, "serial": "50026B778599BFB0", "model": "KINGSTON SNV2S1000G", "sysfs_id": "/class/block/nvme0n1", "sysfs_bus_id": "nvme0", "sysfs_device_link": "/devices/pci0000:00/0000:00:06.0/0000:04:00.0/nvme/nvme0", "unix_device_name": "/dev/nvme0n1", "unix_device_number": { "type": 98, "major": 259, "minor": 0, "range": 0 }, "unix_device_names": [ "/dev/disk/by-id/nvme-KINGSTON_SNV2S1000G_50026B778599BFB0", "/dev/disk/by-id/nvme-KINGSTON_SNV2S1000G_50026B778599BFB0_1", "/dev/disk/by-id/nvme-eui.00000000000000000026b778599bfb05", "/dev/disk/by-path/pci-0000:04:00.0-nvme-1", "/dev/nvme0n1" ], "resources": [ { "type": "disk_geo", "cylinders": 953869, "heads": 64, "sectors": 32, "size": "0x0", "geo_type": "logical" }, { "type": "size", "unit": "sectors", "value_1": 1953525168, "value_2": 512 } ], "driver": "nvme", "driver_module": "nvme", "drivers": [ "nvme" ], "driver_modules": [ "nvme" ] }, { "index": 46, "attached_to": 21, "class_list": [ "disk", "ide", "block_device" ], "bus_type": { "hex": "0085", "name": "IDE", "value": 133 }, "slot": { "bus": 6, "number": 0 }, "base_class": { "hex": "0106", "name": "Mass Storage Device", "value": 262 }, "sub_class": { "hex": "0000", "name": "Disk", "value": 0 }, "device": { "hex": "0000", "name": "ST3000DM001-1CH1", "value": 0 }, "revision": { "hex": "0000", "name": "CC27", "value": 0 }, "serial": "Z1F41ECR", "model": "ST3000DM001-1CH1", "sysfs_id": "/class/block/sdb", "sysfs_bus_id": "6:0:0:0", "sysfs_device_link": "/devices/pci0000:00/0000:00:17.0/ata7/host6/target6:0:0/6:0:0:0", "unix_device_name": "/dev/sdb", "unix_device_number": { "type": 98, "major": 8, "minor": 16, "range": 16 }, "unix_device_names": [ "/dev/disk/by-id/ata-ST3000DM001-1CH166_Z1F41ECR", "/dev/disk/by-id/wwn-0x5000c5006527e1b4", "/dev/disk/by-path/pci-0000:00:17.0-ata-7", "/dev/disk/by-path/pci-0000:00:17.0-ata-7.0", "/dev/disk/by-uuid/14c325e4-846b-4592-b0c4-94941abc7a64", "/dev/sdb" ], "resources": [ { "type": "disk_geo", "cylinders": 364801, "heads": 255, "sectors": 63, "size": "0x0", "geo_type": "logical" }, { "type": "size", "unit": "sectors", "value_1": 5860533168, "value_2": 512 } ], "driver": "ahci", "driver_module": "ahci", "drivers": [ "ahci", "sd" ], "driver_modules": [ "ahci", "sd_mod" ] }, { "index": 47, "attached_to": 21, "class_list": [ "disk", "ide", "block_device" ], "bus_type": { "hex": "0085", "name": "IDE", "value": 133 }, "slot": { "bus": 4, "number": 0 }, "base_class": { "hex": "0106", "name": "Mass Storage Device", "value": 262 }, "sub_class": { "hex": "0000", "name": "Disk", "value": 0 }, "vendor": { "hex": "0000", "name": "Samsung", "value": 0 }, "device": { "hex": "0000", "name": "SSD 860", "value": 0 }, "revision": { "hex": "0000", "name": "2B6Q", "value": 0 }, "serial": "S3Z1NB0KC17827D", "model": "Samsung SSD 860", "sysfs_id": "/class/block/sda", "sysfs_bus_id": "4:0:0:0", "sysfs_device_link": "/devices/pci0000:00/0000:00:17.0/ata5/host4/target4:0:0/4:0:0:0", "unix_device_name": "/dev/sda", "unix_device_number": { "type": 98, "major": 8, "minor": 0, "range": 16 }, "unix_device_names": [ "/dev/disk/by-id/ata-Samsung_SSD_860_EVO_500GB_S3Z1NB0KC17827D", "/dev/disk/by-id/wwn-0x5002538e40abbf24", "/dev/disk/by-path/pci-0000:00:17.0-ata-5", "/dev/disk/by-path/pci-0000:00:17.0-ata-5.0", "/dev/sda" ], "resources": [ { "type": "disk_geo", "cylinders": 60801, "heads": 255, "sectors": 63, "size": "0x0", "geo_type": "logical" }, { "type": "size", "unit": "sectors", "value_1": 976773168, "value_2": 512 } ], "driver": "ahci", "driver_module": "ahci", "drivers": [ "ahci", "sd" ], "driver_modules": [ "ahci", "sd_mod" ] } ], "graphics_card": [ { "index": 20, "attached_to": 24, "class_list": [ "graphics_card", "pci" ], "bus_type": { "hex": "0004", "name": "PCI", "value": 4 }, "slot": { "bus": 3, "number": 0 }, "base_class": { "hex": "0003", "name": "Display controller", "value": 3 }, "sub_class": { "hex": "0000", "name": "VGA compatible controller", "value": 0 }, "pci_interface": { "hex": "0000", "name": "VGA", "value": 0 }, "vendor": { "hex": "1002", "name": "ATI Technologies Inc", "value": 4098 }, "sub_vendor": { "hex": "1849", "value": 6217 }, "device": { "hex": "73df", "value": 29663 }, "sub_device": { "hex": "5210", "value": 21008 }, "revision": { "hex": "00c5", "value": 197 }, "model": "ATI VGA compatible controller", "sysfs_id": "/devices/pci0000:00/0000:00:01.0/0000:01:00.0/0000:02:00.0/0000:03:00.0", "sysfs_bus_id": "0000:03:00.0", "resources": [ { "type": "io", "base": 16384, "range": 256, "enabled": true, "access": "read_write" }, { "type": "irq", "base": 171, "triggered": 0, "enabled": true }, { "type": "mem", "base": 1912602624, "range": 1048576, "enabled": true, "access": "read_write", "prefetch": "no" }, { "type": "mem", "base": 1913651200, "range": 131072, "enabled": false, "access": "read_only", "prefetch": "no" }, { "type": "mem", "base": 274877906944, "range": 17179869184, "enabled": true, "access": "read_only", "prefetch": "no" }, { "type": "mem", "base": 292057776128, "range": 268435456, "enabled": true, "access": "read_only", "prefetch": "no" } ], "detail": { "function": 0, "command": 1031, "header_type": 0, "secondary_bus": 0, "irq": 171, "prog_if": 0 }, "driver": "amdgpu", "driver_module": "amdgpu", "drivers": [ "amdgpu" ], "driver_modules": [ "amdgpu" ], "module_alias": "pci:v00001002d000073DFsv00001849sd00005210bc03sc00i00" } ], "hub": [ { "index": 50, "attached_to": 57, "class_list": [ "usb", "hub" ], "bus_type": { "hex": "0086", "name": "USB", "value": 134 }, "slot": { "bus": 0, "number": 0 }, "base_class": { "hex": "010a", "name": "Hub", "value": 266 }, "vendor": { "hex": "174c", "name": "Asmedia", "value": 5964 }, "device": { "hex": "2074", "name": "ASM107x", "value": 8308 }, "revision": { "hex": "0000", "name": "2.00", "value": 0 }, "model": "Asmedia ASM107x", "sysfs_id": "/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.0", "sysfs_bus_id": "1-2:1.0", "resources": [ { "type": "baud", "speed": 480000000, "bits": 0, "stop_bits": 0, "parity": 0, "handshake": 0 } ], "detail": { "device_class": { "hex": "0009", "name": "hub", "value": 9 }, "device_subclass": { "hex": "0000", "name": "per_interface", "value": 0 }, "device_protocol": 2, "interface_class": { "hex": "0009", "name": "hub", "value": 9 }, "interface_subclass": { "hex": "0000", "name": "per_interface", "value": 0 }, "interface_protocol": 2, "interface_number": 0, "interface_alternate_setting": 1 }, "hotplug": "usb", "driver": "hub", "driver_module": "usbcore", "drivers": [ "hub" ], "driver_modules": [ "usbcore" ], "module_alias": "usb:v174Cp2074d0200dc09dsc00dp02ic09isc00ip02in00" }, { "index": 57, "attached_to": 41, "class_list": [ "usb", "hub" ], "bus_type": { "hex": "0086", "name": "USB", "value": 134 }, "slot": { "bus": 0, "number": 0 }, "base_class": { "hex": "010a", "name": "Hub", "value": 266 }, "vendor": { "hex": "1d6b", "name": "Linux 6.12.28 xhci-hcd", "value": 7531 }, "device": { "hex": "0002", "name": "xHCI Host Controller", "value": 2 }, "revision": { "hex": "0000", "name": "6.12", "value": 0 }, "serial": "0000:00:14.0", "model": "Linux 6.12.28 xhci-hcd xHCI Host Controller", "sysfs_id": "/devices/pci0000:00/0000:00:14.0/usb1/1-0:1.0", "sysfs_bus_id": "1-0:1.0", "resources": [ { "type": "baud", "speed": 480000000, "bits": 0, "stop_bits": 0, "parity": 0, "handshake": 0 } ], "detail": { "device_class": { "hex": "0009", "name": "hub", "value": 9 }, "device_subclass": { "hex": "0000", "name": "per_interface", "value": 0 }, "device_protocol": 1, "interface_class": { "hex": "0009", "name": "hub", "value": 9 }, "interface_subclass": { "hex": "0000", "name": "per_interface", "value": 0 }, "interface_protocol": 0, "interface_number": 0, "interface_alternate_setting": 0 }, "hotplug": "usb", "driver": "hub", "driver_module": "usbcore", "drivers": [ "hub" ], "driver_modules": [ "usbcore" ], "module_alias": "usb:v1D6Bp0002d0612dc09dsc00dp01ic09isc00ip00in00" }, { "index": 60, "attached_to": 62, "class_list": [ "usb", "hub" ], "bus_type": { "hex": "0086", "name": "USB", "value": 134 }, "slot": { "bus": 0, "number": 0 }, "base_class": { "hex": "010a", "name": "Hub", "value": 266 }, "vendor": { "hex": "174c", "name": "Asmedia", "value": 5964 }, "device": { "hex": "3074", "name": "ASM107x", "value": 12404 }, "revision": { "hex": "0000", "name": "2.00", "value": 0 }, "model": "Asmedia ASM107x", "sysfs_id": "/devices/pci0000:00/0000:00:14.0/usb2/2-3/2-3:1.0", "sysfs_bus_id": "2-3:1.0", "detail": { "device_class": { "hex": "0009", "name": "hub", "value": 9 }, "device_subclass": { "hex": "0000", "name": "per_interface", "value": 0 }, "device_protocol": 3, "interface_class": { "hex": "0009", "name": "hub", "value": 9 }, "interface_subclass": { "hex": "0000", "name": "per_interface", "value": 0 }, "interface_protocol": 0, "interface_number": 0, "interface_alternate_setting": 0 }, "hotplug": "usb", "driver": "hub", "driver_module": "usbcore", "drivers": [ "hub" ], "driver_modules": [ "usbcore" ], "module_alias": "usb:v174Cp3074d0200dc09dsc00dp03ic09isc00ip00in00" }, { "index": 62, "attached_to": 41, "class_list": [ "usb", "hub" ], "bus_type": { "hex": "0086", "name": "USB", "value": 134 }, "slot": { "bus": 0, "number": 0 }, "base_class": { "hex": "010a", "name": "Hub", "value": 266 }, "vendor": { "hex": "1d6b", "name": "Linux 6.12.28 xhci-hcd", "value": 7531 }, "device": { "hex": "0003", "name": "xHCI Host Controller", "value": 3 }, "revision": { "hex": "0000", "name": "6.12", "value": 0 }, "serial": "0000:00:14.0", "model": "Linux 6.12.28 xhci-hcd xHCI Host Controller", "sysfs_id": "/devices/pci0000:00/0000:00:14.0/usb2/2-0:1.0", "sysfs_bus_id": "2-0:1.0", "detail": { "device_class": { "hex": "0009", "name": "hub", "value": 9 }, "device_subclass": { "hex": "0000", "name": "per_interface", "value": 0 }, "device_protocol": 3, "interface_class": { "hex": "0009", "name": "hub", "value": 9 }, "interface_subclass": { "hex": "0000", "name": "per_interface", "value": 0 }, "interface_protocol": 0, "interface_number": 0, "interface_alternate_setting": 0 }, "hotplug": "usb", "driver": "hub", "driver_module": "usbcore", "drivers": [ "hub" ], "driver_modules": [ "usbcore" ], "module_alias": "usb:v1D6Bp0003d0612dc09dsc00dp03ic09isc00ip00in00" } ], "keyboard": [ { "index": 59, "attached_to": 50, "class_list": [ "keyboard", "usb" ], "bus_type": { "hex": "0086", "name": "USB", "value": 134 }, "slot": { "bus": 0, "number": 0 }, "base_class": { "hex": "0108", "name": "Keyboard", "value": 264 }, "sub_class": { "hex": "0000", "name": "Keyboard", "value": 0 }, "vendor": { "hex": "19f5", "name": "NuPhy", "value": 6645 }, "device": { "hex": "3246", "name": "NuPhy Air75 V2", "value": 12870 }, "revision": { "hex": "0000", "name": "1.12", "value": 0 }, "model": "NuPhy Air75 V2", "sysfs_id": "/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2.1/1-2.1:1.0", "sysfs_bus_id": "1-2.1:1.0", "unix_device_name": "/dev/input/event4", "unix_device_number": { "type": 99, "major": 13, "minor": 68, "range": 1 }, "unix_device_names": [ "/dev/input/by-id/usb-NuPhy_NuPhy_Air75_V2-event-kbd", "/dev/input/by-path/pci-0000:00:14.0-usb-0:2.1:1.0-event-kbd", "/dev/input/by-path/pci-0000:00:14.0-usbv2-0:2.1:1.0-event-kbd", "/dev/input/event4" ], "resources": [ { "type": "baud", "speed": 12000000, "bits": 0, "stop_bits": 0, "parity": 0, "handshake": 0 } ], "detail": { "device_class": { "hex": "0000", "name": "per_interface", "value": 0 }, "device_subclass": { "hex": "0000", "name": "per_interface", "value": 0 }, "device_protocol": 0, "interface_class": { "hex": "0003", "name": "hid", "value": 3 }, "interface_subclass": { "hex": "0001", "name": "audio", "value": 1 }, "interface_protocol": 1, "interface_number": 0, "interface_alternate_setting": 0 }, "hotplug": "usb", "driver": "usbhid", "driver_module": "usbhid", "drivers": [ "usbhid" ], "driver_modules": [ "usbhid" ], "driver_info": { "type": "keyboard", "xkb_rules": "xfree86", "xkb_model": "pc104" }, "module_alias": "usb:v19F5p3246d0112dc00dsc00dp00ic03isc01ip01in00" } ], "memory": [ { "index": 19, "attached_to": 0, "class_list": [ "memory" ], "base_class": { "hex": "0101", "name": "Internally Used Class", "value": 257 }, "sub_class": { "hex": "0002", "name": "Main Memory", "value": 2 }, "model": "Main Memory", "resources": [ { "type": "mem", "base": 0, "range": 33395609600, "enabled": true, "access": "read_write", "prefetch": "unknown" }, { "type": "phys_mem", "range": 34359738368 } ] } ], "modem": [ { "index": 63, "attached_to": 57, "class_list": [ "modem", "usb" ], "bus_type": { "hex": "0086", "name": "USB", "value": 134 }, "slot": { "bus": 0, "number": 0 }, "base_class": { "hex": "0102", "name": "Modem", "value": 258 }, "sub_class": { "hex": "0000", "name": "Modem", "value": 0 }, "vendor": { "hex": "1207", "name": "Tillitis", "value": 4615 }, "device": { "hex": "8887", "name": "MTA1-USB-V1", "value": 34951 }, "revision": { "hex": "0000", "name": "1.00", "value": 0 }, "serial": "125736b8-921b-4822-8d3b-3b7b841e89a7", "model": "Tillitis MTA1-USB-V1", "sysfs_id": "/devices/pci0000:00/0000:00:14.0/usb1/1-5/1-5:1.0", "sysfs_bus_id": "1-5:1.0", "unix_device_name": "/dev/ttyACM0", "unix_device_names": [ "/dev/serial/by-id/usb-Tillitis_MTA1-USB-V1_125736b8-921b-4822-8d3b-3b7b841e89a7-if00", "/dev/serial/by-path/pci-0000:00:14.0-usb-0:5:1.0", "/dev/serial/by-path/pci-0000:00:14.0-usbv2-0:5:1.0", "/dev/ttyACM0" ], "resources": [ { "type": "baud", "speed": 12000000, "bits": 0, "stop_bits": 0, "parity": 0, "handshake": 0 } ], "detail": { "device_class": { "hex": "0002", "name": "comm", "value": 2 }, "device_subclass": { "hex": "0000", "name": "per_interface", "value": 0 }, "device_protocol": 0, "interface_class": { "hex": "0002", "name": "comm", "value": 2 }, "interface_subclass": { "hex": "0002", "name": "comm", "value": 2 }, "interface_protocol": 1, "interface_number": 0, "interface_alternate_setting": 0 }, "hotplug": "usb", "driver": "cdc_acm", "driver_module": "cdc_acm", "drivers": [ "cdc_acm" ], "driver_modules": [ "cdc_acm" ], "module_alias": "usb:v1207p8887d0100dc02dsc00dp00ic02isc02ip01in00" } ], "monitor": [ { "index": 43, "attached_to": 20, "class_list": [ "monitor" ], "base_class": { "hex": "0100", "name": "Monitor", "value": 256 }, "sub_class": { "hex": "0002", "name": "LCD Monitor", "value": 2 }, "vendor": { "hex": "10ac", "name": "DELL", "value": 4268 }, "device": { "hex": "d177", "name": "DELL G2724D", "value": 53623 }, "serial": "5FS94V3", "model": "DELL G2724D", "resources": [ { "type": "monitor", "width": 1024, "height": 768, "vertical_frequency": 60, "interlaced": false }, { "type": "monitor", "width": 1024, "height": 768, "vertical_frequency": 75, "interlaced": false }, { "type": "monitor", "width": 1152, "height": 864, "vertical_frequency": 75, "interlaced": false }, { "type": "monitor", "width": 1280, "height": 1024, "vertical_frequency": 60, "interlaced": false }, { "type": "monitor", "width": 1280, "height": 1024, "vertical_frequency": 75, "interlaced": false }, { "type": "monitor", "width": 1280, "height": 720, "vertical_frequency": 60, "interlaced": false }, { "type": "monitor", "width": 1280, "height": 960, "vertical_frequency": 60, "interlaced": false }, { "type": "monitor", "width": 2560, "height": 1440, "vertical_frequency": 60, "interlaced": false }, { "type": "monitor", "width": 640, "height": 480, "vertical_frequency": 60, "interlaced": false }, { "type": "monitor", "width": 640, "height": 480, "vertical_frequency": 75, "interlaced": false }, { "type": "monitor", "width": 720, "height": 400, "vertical_frequency": 70, "interlaced": false }, { "type": "monitor", "width": 800, "height": 600, "vertical_frequency": 60, "interlaced": false }, { "type": "monitor", "width": 800, "height": 600, "vertical_frequency": 75, "interlaced": false }, { "type": "size", "unit": "mm", "value_1": 596, "value_2": 335 } ], "detail": { "manufacture_year": 2023, "manufacture_week": 50, "vertical_sync": { "min": 48, "max": 165 }, "horizontal_sync": { "min": 255, "max": 255 }, "horizontal_sync_timings": { "disp": 2560, "sync_start": 2608, "sync_end": 2640, "total": 2720 }, "vertical_sync_timings": { "disp": 1440, "sync_start": 1443, "sync_end": 1448, "total": 1481 }, "clock": 241500, "width": 2560, "height": 1440, "width_millimetres": 596, "height_millimetres": 335, "horizontal_flag": 45, "vertical_flag": 43, "vendor": "", "name": "DELL G2724D" }, "driver_info": { "type": "display", "width": 2560, "height": 1440, "vertical_sync": { "min": 48, "max": 165 }, "horizontal_sync": { "min": 255, "max": 255 }, "bandwidth": 0, "horizontal_sync_timings": { "disp": 2560, "sync_start": 2608, "sync_end": 2640, "total": 2720 }, "vertical_sync_timings": { "disp": 1440, "sync_start": 1443, "sync_end": 1448, "total": 1481 }, "horizontal_flag": 45, "vertical_flag": 43 } } ], "mouse": [ { "index": 55, "attached_to": 57, "class_list": [ "mouse", "usb" ], "bus_type": { "hex": "0086", "name": "USB", "value": 134 }, "slot": { "bus": 0, "number": 0 }, "base_class": { "hex": "0105", "name": "Mouse", "value": 261 }, "sub_class": { "hex": "0003", "name": "USB Mouse", "value": 3 }, "vendor": { "hex": "1532", "name": "Razer", "value": 5426 }, "device": { "hex": "005c", "name": "Razer DeathAdder Elite", "value": 92 }, "revision": { "hex": "0000", "name": "2.00", "value": 0 }, "compat_vendor": "Unknown", "compat_device": "Generic USB Mouse", "model": "Razer DeathAdder Elite", "sysfs_id": "/devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3:1.0", "sysfs_bus_id": "1-3:1.0", "unix_device_name": "/dev/input/mice", "unix_device_number": { "type": 99, "major": 13, "minor": 63, "range": 1 }, "unix_device_names": [ "/dev/input/mice" ], "unix_device_name2": "/dev/input/mouse0", "unix_device_number2": { "type": 99, "major": 13, "minor": 32, "range": 1 }, "resources": [ { "type": "baud", "speed": 12000000, "bits": 0, "stop_bits": 0, "parity": 0, "handshake": 0 } ], "detail": { "device_class": { "hex": "0000", "name": "per_interface", "value": 0 }, "device_subclass": { "hex": "0000", "name": "per_interface", "value": 0 }, "device_protocol": 0, "interface_class": { "hex": "0003", "name": "hid", "value": 3 }, "interface_subclass": { "hex": "0001", "name": "audio", "value": 1 }, "interface_protocol": 2, "interface_number": 0, "interface_alternate_setting": 0 }, "hotplug": "usb", "driver": "usbhid", "driver_module": "usbhid", "drivers": [ "usbhid" ], "driver_modules": [ "usbhid" ], "driver_info": { "type": "mouse", "db_entry_0": [ "explorerps/2", "exps2" ], "xf86": "explorerps/2", "gpm": "exps2", "buttons": -1, "wheels": -1 }, "module_alias": "usb:v1532p005Cd0200dc00dsc00dp00ic03isc01ip02in00" }, { "index": 56, "attached_to": 50, "class_list": [ "mouse", "usb" ], "bus_type": { "hex": "0086", "name": "USB", "value": 134 }, "slot": { "bus": 0, "number": 0 }, "base_class": { "hex": "0105", "name": "Mouse", "value": 261 }, "sub_class": { "hex": "0003", "name": "USB Mouse", "value": 3 }, "vendor": { "hex": "19f5", "name": "NuPhy", "value": 6645 }, "device": { "hex": "3246", "name": "NuPhy Air75 V2", "value": 12870 }, "revision": { "hex": "0000", "name": "1.12", "value": 0 }, "compat_vendor": "Unknown", "compat_device": "Generic USB Mouse", "model": "NuPhy Air75 V2", "sysfs_id": "/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2.1/1-2.1:1.2", "sysfs_bus_id": "1-2.1:1.2", "unix_device_name": "/dev/input/mice", "unix_device_number": { "type": 99, "major": 13, "minor": 63, "range": 1 }, "unix_device_names": [ "/dev/input/mice" ], "unix_device_name2": "/dev/input/mouse1", "unix_device_number2": { "type": 99, "major": 13, "minor": 33, "range": 1 }, "resources": [ { "type": "baud", "speed": 12000000, "bits": 0, "stop_bits": 0, "parity": 0, "handshake": 0 } ], "detail": { "device_class": { "hex": "0000", "name": "per_interface", "value": 0 }, "device_subclass": { "hex": "0000", "name": "per_interface", "value": 0 }, "device_protocol": 0, "interface_class": { "hex": "0003", "name": "hid", "value": 3 }, "interface_subclass": { "hex": "0000", "name": "per_interface", "value": 0 }, "interface_protocol": 0, "interface_number": 2, "interface_alternate_setting": 0 }, "hotplug": "usb", "driver": "usbhid", "driver_module": "usbhid", "drivers": [ "usbhid" ], "driver_modules": [ "usbhid" ], "driver_info": { "type": "mouse", "db_entry_0": [ "explorerps/2", "exps2" ], "xf86": "explorerps/2", "gpm": "exps2", "buttons": -1, "wheels": -1 }, "module_alias": "usb:v19F5p3246d0112dc00dsc00dp00ic03isc00ip00in02" } ], "network_controller": [ { "index": 26, "attached_to": 0, "class_list": [ "network_controller", "pci", "wlan_card" ], "bus_type": { "hex": "0004", "name": "PCI", "value": 4 }, "slot": { "bus": 0, "number": 20 }, "base_class": { "hex": "0002", "name": "Network controller", "value": 2 }, "sub_class": { "hex": "0082", "name": "WLAN controller", "value": 130 }, "vendor": { "hex": "8086", "name": "Intel Corporation", "value": 32902 }, "sub_vendor": { "hex": "8086", "name": "Intel Corporation", "value": 32902 }, "device": { "hex": "7a70", "value": 31344 }, "sub_device": { "hex": "0094", "value": 148 }, "revision": { "hex": "0011", "value": 17 }, "model": "Intel WLAN controller", "sysfs_id": "/devices/pci0000:00/0000:00:14.3", "sysfs_bus_id": "0000:00:14.3", "unix_device_name": "wlp0s20f3", "unix_device_names": [ "wlp0s20f3" ], "resources": [ { "type": "hwaddr", "address": 99 }, { "type": "irq", "base": 18, "triggered": 0, "enabled": true }, { "type": "mem", "base": 292361945088, "range": 16384, "enabled": true, "access": "read_write", "prefetch": "no" }, { "type": "phwaddr", "address": 99 }, { "type": "wlan", "channels": [ "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "36", "40", "44", "48", "52", "56", "60", "64", "68", "72", "76", "80", "84", "88", "92", "96", "100", "104" ], "frequencies": [ "2.412", "2.417", "2.422", "2.427", "2.432", "2.437", "2.442", "2.447", "2.452", "2.457", "2.462", "2.467", "2.472", "2.484", "5.18", "5.2", "5.22", "5.24", "5.26", "5.28", "5.3", "5.32", "5.34", "5.36", "5.38", "5.4", "5.42", "5.44", "5.46", "5.48", "5.5", "5.52" ], "auth_modes": [ "open", "sharedkey", "wpa-psk", "wpa-eap" ], "enc_modes": [ "WEP40", "WEP104", "TKIP", "CCMP" ] } ], "detail": { "function": 3, "command": 1030, "header_type": 0, "secondary_bus": 0, "irq": 18, "prog_if": 0 }, "driver": "iwlwifi", "driver_module": "iwlwifi", "drivers": [ "iwlwifi" ], "driver_modules": [ "iwlwifi" ], "module_alias": "pci:v00008086d00007A70sv00008086sd00000094bc02sc80i00" }, { "index": 34, "attached_to": 30, "class_list": [ "network_controller", "pci" ], "bus_type": { "hex": "0004", "name": "PCI", "value": 4 }, "slot": { "bus": 6, "number": 0 }, "base_class": { "hex": "0002", "name": "Network controller", "value": 2 }, "sub_class": { "hex": "0000", "name": "Ethernet controller", "value": 0 }, "vendor": { "hex": "10ec", "value": 4332 }, "sub_vendor": { "hex": "1849", "value": 6217 }, "device": { "hex": "8125", "value": 33061 }, "sub_device": { "hex": "8125", "value": 33061 }, "revision": { "hex": "0005", "value": 5 }, "model": "Ethernet controller", "sysfs_id": "/devices/pci0000:00/0000:00:1c.3/0000:06:00.0", "sysfs_bus_id": "0000:06:00.0", "unix_device_name": "enp6s0", "unix_device_names": [ "enp6s0" ], "resources": [ { "type": "hwaddr", "address": 57 }, { "type": "io", "base": 12288, "range": 256, "enabled": true, "access": "read_write" }, { "type": "irq", "base": 19, "triggered": 0, "enabled": true }, { "type": "mem", "base": 1915748352, "range": 65536, "enabled": true, "access": "read_write", "prefetch": "no" }, { "type": "mem", "base": 1915813888, "range": 16384, "enabled": true, "access": "read_write", "prefetch": "no" }, { "type": "phwaddr", "address": 57 } ], "detail": { "function": 0, "command": 1031, "header_type": 0, "secondary_bus": 0, "irq": 19, "prog_if": 0 }, "driver": "r8169", "driver_module": "r8169", "drivers": [ "r8169" ], "driver_modules": [ "r8169" ], "module_alias": "pci:v000010ECd00008125sv00001849sd00008125bc02sc00i00" } ], "network_interface": [ { "index": 65, "attached_to": 0, "class_list": [ "network_interface" ], "base_class": { "hex": "0107", "name": "Network Interface", "value": 263 }, "sub_class": { "hex": "0000", "name": "Loopback", "value": 0 }, "model": "Loopback network interface", "sysfs_id": "/class/net/lo", "unix_device_name": "lo", "unix_device_names": [ "lo" ] }, { "index": 67, "attached_to": 34, "class_list": [ "network_interface" ], "base_class": { "hex": "0107", "name": "Network Interface", "value": 263 }, "sub_class": { "hex": "0001", "name": "Ethernet", "value": 1 }, "model": "Ethernet network interface", "sysfs_id": "/class/net/enp6s0", "sysfs_device_link": "/devices/pci0000:00/0000:00:1c.3/0000:06:00.0", "unix_device_name": "enp6s0", "unix_device_names": [ "enp6s0" ], "resources": [ { "type": "hwaddr", "address": 57 }, { "type": "phwaddr", "address": 57 } ], "driver": "r8169", "driver_module": "r8169", "drivers": [ "r8169" ], "driver_modules": [ "r8169" ] }, { "index": 70, "attached_to": 26, "class_list": [ "network_interface" ], "base_class": { "hex": "0107", "name": "Network Interface", "value": 263 }, "sub_class": { "hex": "0001", "name": "Ethernet", "value": 1 }, "model": "Ethernet network interface", "sysfs_id": "/class/net/wlp0s20f3", "sysfs_device_link": "/devices/pci0000:00/0000:00:14.3", "unix_device_name": "wlp0s20f3", "unix_device_names": [ "wlp0s20f3" ], "resources": [ { "type": "hwaddr", "address": 99 }, { "type": "phwaddr", "address": 99 } ], "driver": "iwlwifi", "driver_module": "iwlwifi", "drivers": [ "iwlwifi" ], "driver_modules": [ "iwlwifi" ] } ], "pci": [ { "index": 27, "attached_to": 0, "class_list": [ "pci", "unknown" ], "bus_type": { "hex": "0004", "name": "PCI", "value": 4 }, "slot": { "bus": 0, "number": 22 }, "base_class": { "hex": "0007", "name": "Communication controller", "value": 7 }, "sub_class": { "hex": "0080", "name": "Communication controller", "value": 128 }, "vendor": { "hex": "8086", "name": "Intel Corporation", "value": 32902 }, "sub_vendor": { "hex": "1849", "value": 6217 }, "device": { "hex": "7a68", "value": 31336 }, "sub_device": { "hex": "7a68", "value": 31336 }, "revision": { "hex": "0011", "value": 17 }, "model": "Intel Communication controller", "sysfs_id": "/devices/pci0000:00/0000:00:16.0", "sysfs_bus_id": "0000:00:16.0", "resources": [ { "type": "irq", "base": 172, "triggered": 0, "enabled": true }, { "type": "mem", "base": 292361981952, "range": 4096, "enabled": true, "access": "read_write", "prefetch": "no" } ], "detail": { "function": 0, "command": 1030, "header_type": 0, "secondary_bus": 0, "irq": 172, "prog_if": 0 }, "driver": "mei_me", "driver_module": "mei_me", "drivers": [ "mei_me" ], "driver_modules": [ "mei_me" ], "module_alias": "pci:v00008086d00007A68sv00001849sd00007A68bc07sc80i00" }, { "index": 29, "attached_to": 0, "class_list": [ "pci", "unknown" ], "bus_type": { "hex": "0004", "name": "PCI", "value": 4 }, "slot": { "bus": 0, "number": 31 }, "base_class": { "hex": "000c", "name": "Serial bus controller", "value": 12 }, "sub_class": { "hex": "0080", "value": 128 }, "vendor": { "hex": "8086", "name": "Intel Corporation", "value": 32902 }, "sub_vendor": { "hex": "1849", "value": 6217 }, "device": { "hex": "7a24", "value": 31268 }, "sub_device": { "hex": "7a24", "value": 31268 }, "revision": { "hex": "0011", "value": 17 }, "model": "Intel Serial bus controller", "sysfs_id": "/devices/pci0000:00/0000:00:1f.5", "sysfs_bus_id": "0000:00:1f.5", "resources": [ { "type": "mem", "base": 1917861888, "range": 4096, "enabled": true, "access": "read_write", "prefetch": "no" } ], "detail": { "function": 5, "command": 1026, "header_type": 0, "secondary_bus": 0, "irq": 0, "prog_if": 0 }, "driver": "intel-spi", "driver_module": "spi_intel_pci", "drivers": [ "intel-spi" ], "driver_modules": [ "spi_intel_pci" ], "module_alias": "pci:v00008086d00007A24sv00001849sd00007A24bc0Csc80i00" }, { "index": 35, "attached_to": 0, "class_list": [ "pci", "unknown" ], "bus_type": { "hex": "0004", "name": "PCI", "value": 4 }, "slot": { "bus": 0, "number": 21 }, "base_class": { "hex": "000c", "name": "Serial bus controller", "value": 12 }, "sub_class": { "hex": "0080", "value": 128 }, "vendor": { "hex": "8086", "name": "Intel Corporation", "value": 32902 }, "sub_vendor": { "hex": "1849", "value": 6217 }, "device": { "hex": "7a4c", "value": 31308 }, "sub_device": { "hex": "7a4c", "value": 31308 }, "revision": { "hex": "0011", "value": 17 }, "model": "Intel Serial bus controller", "sysfs_id": "/devices/pci0000:00/0000:00:15.0", "sysfs_bus_id": "0000:00:15.0", "resources": [ { "type": "irq", "base": 27, "triggered": 0, "enabled": true }, { "type": "mem", "base": 292361986048, "range": 4096, "enabled": true, "access": "read_write", "prefetch": "no" } ], "detail": { "function": 0, "command": 6, "header_type": 0, "secondary_bus": 0, "irq": 27, "prog_if": 0 }, "driver": "intel-lpss", "driver_module": "intel_lpss_pci", "drivers": [ "intel-lpss" ], "driver_modules": [ "intel_lpss_pci" ], "module_alias": "pci:v00008086d00007A4Csv00001849sd00007A4Cbc0Csc80i00" }, { "index": 39, "attached_to": 0, "class_list": [ "pci", "unknown" ], "bus_type": { "hex": "0004", "name": "PCI", "value": 4 }, "slot": { "bus": 0, "number": 20 }, "base_class": { "hex": "0005", "name": "Memory controller", "value": 5 }, "sub_class": { "hex": "0000", "name": "RAM memory", "value": 0 }, "vendor": { "hex": "8086", "name": "Intel Corporation", "value": 32902 }, "device": { "hex": "7a27", "value": 31271 }, "revision": { "hex": "0011", "value": 17 }, "model": "Intel RAM memory", "sysfs_id": "/devices/pci0000:00/0000:00:14.2", "sysfs_bus_id": "0000:00:14.2", "resources": [ { "type": "mem", "base": 292361961472, "range": 16384, "enabled": false, "access": "read_write", "prefetch": "no" }, { "type": "mem", "base": 292361990144, "range": 4096, "enabled": false, "access": "read_write", "prefetch": "no" } ], "detail": { "function": 2, "command": 0, "header_type": 0, "secondary_bus": 0, "irq": 0, "prog_if": 0 }, "module_alias": "pci:v00008086d00007A27sv00000000sd00000000bc05sc00i00" }, { "index": 42, "attached_to": 0, "class_list": [ "pci", "unknown" ], "bus_type": { "hex": "0004", "name": "PCI", "value": 4 }, "slot": { "bus": 0, "number": 31 }, "base_class": { "hex": "000c", "name": "Serial bus controller", "value": 12 }, "sub_class": { "hex": "0005", "name": "SMBus", "value": 5 }, "vendor": { "hex": "8086", "name": "Intel Corporation", "value": 32902 }, "sub_vendor": { "hex": "1849", "value": 6217 }, "device": { "hex": "7a23", "value": 31267 }, "sub_device": { "hex": "7a23", "value": 31267 }, "revision": { "hex": "0011", "value": 17 }, "model": "Intel SMBus", "sysfs_id": "/devices/pci0000:00/0000:00:1f.4", "sysfs_bus_id": "0000:00:1f.4", "resources": [ { "type": "io", "base": 61344, "range": 32, "enabled": true, "access": "read_write" }, { "type": "irq", "base": 18, "triggered": 0, "enabled": true }, { "type": "mem", "base": 292361977856, "range": 256, "enabled": true, "access": "read_write", "prefetch": "no" } ], "detail": { "function": 4, "command": 3, "header_type": 0, "secondary_bus": 0, "irq": 18, "prog_if": 0 }, "driver": "i801_smbus", "driver_module": "i2c_i801", "drivers": [ "i801_smbus" ], "driver_modules": [ "i2c_i801" ], "module_alias": "pci:v00008086d00007A23sv00001849sd00007A23bc0Csc05i00" } ], "sound": [ { "index": 31, "attached_to": 24, "class_list": [ "sound", "pci" ], "bus_type": { "hex": "0004", "name": "PCI", "value": 4 }, "slot": { "bus": 3, "number": 0 }, "base_class": { "hex": "0004", "name": "Multimedia controller", "value": 4 }, "sub_class": { "hex": "0003", "value": 3 }, "vendor": { "hex": "1002", "name": "ATI Technologies Inc", "value": 4098 }, "sub_vendor": { "hex": "1002", "name": "ATI Technologies Inc", "value": 4098 }, "device": { "hex": "ab28", "value": 43816 }, "sub_device": { "hex": "ab28", "value": 43816 }, "model": "ATI Multimedia controller", "sysfs_id": "/devices/pci0000:00/0000:00:01.0/0000:01:00.0/0000:02:00.0/0000:03:00.1", "sysfs_bus_id": "0000:03:00.1", "resources": [ { "type": "irq", "base": 191, "triggered": 0, "enabled": true }, { "type": "mem", "base": 1913782272, "range": 16384, "enabled": true, "access": "read_write", "prefetch": "no" } ], "detail": { "function": 1, "command": 1030, "header_type": 0, "secondary_bus": 0, "irq": 191, "prog_if": 0 }, "driver": "snd_hda_intel", "driver_module": "snd_hda_intel", "drivers": [ "snd_hda_intel" ], "driver_modules": [ "snd_hda_intel" ], "module_alias": "pci:v00001002d0000AB28sv00001002sd0000AB28bc04sc03i00" }, { "index": 32, "attached_to": 0, "class_list": [ "sound", "pci" ], "bus_type": { "hex": "0004", "name": "PCI", "value": 4 }, "slot": { "bus": 0, "number": 31 }, "base_class": { "hex": "0004", "name": "Multimedia controller", "value": 4 }, "sub_class": { "hex": "0003", "value": 3 }, "vendor": { "hex": "8086", "name": "Intel Corporation", "value": 32902 }, "sub_vendor": { "hex": "1849", "value": 6217 }, "device": { "hex": "7a50", "value": 31312 }, "sub_device": { "hex": "1897", "value": 6295 }, "revision": { "hex": "0011", "value": 17 }, "model": "Intel Multimedia controller", "sysfs_id": "/devices/pci0000:00/0000:00:1f.3", "sysfs_bus_id": "0000:00:1f.3", "resources": [ { "type": "irq", "base": 190, "triggered": 0, "enabled": true }, { "type": "mem", "base": 292359766016, "range": 1048576, "enabled": true, "access": "read_write", "prefetch": "no" }, { "type": "mem", "base": 292361928704, "range": 16384, "enabled": true, "access": "read_write", "prefetch": "no" } ], "detail": { "function": 3, "command": 1030, "header_type": 0, "secondary_bus": 0, "irq": 190, "prog_if": 0 }, "driver": "snd_hda_intel", "driver_module": "snd_hda_intel", "drivers": [ "snd_hda_intel" ], "driver_modules": [ "snd_hda_intel" ], "module_alias": "pci:v00008086d00007A50sv00001849sd00001897bc04sc03i00" } ], "storage_controller": [ { "index": 21, "attached_to": 0, "class_list": [ "storage_controller", "pci" ], "bus_type": { "hex": "0004", "name": "PCI", "value": 4 }, "slot": { "bus": 0, "number": 23 }, "base_class": { "hex": "0001", "name": "Mass storage controller", "value": 1 }, "sub_class": { "hex": "0006", "value": 6 }, "pci_interface": { "hex": "0001", "value": 1 }, "vendor": { "hex": "8086", "name": "Intel Corporation", "value": 32902 }, "sub_vendor": { "hex": "1849", "value": 6217 }, "device": { "hex": "7a62", "value": 31330 }, "sub_device": { "hex": "7a62", "value": 31330 }, "revision": { "hex": "0011", "value": 17 }, "model": "Intel Mass storage controller", "sysfs_id": "/devices/pci0000:00/0000:00:17.0", "sysfs_bus_id": "0000:00:17.0", "resources": [ { "type": "io", "base": 20512, "range": 32, "enabled": true, "access": "read_write" }, { "type": "io", "base": 20544, "range": 4, "enabled": true, "access": "read_write" }, { "type": "io", "base": 20560, "range": 8, "enabled": true, "access": "read_write" }, { "type": "irq", "base": 170, "triggered": 0, "enabled": true }, { "type": "mem", "base": 1917845504, "range": 8192, "enabled": true, "access": "read_write", "prefetch": "no" }, { "type": "mem", "base": 1917853696, "range": 2048, "enabled": true, "access": "read_write", "prefetch": "no" }, { "type": "mem", "base": 1917857792, "range": 256, "enabled": true, "access": "read_write", "prefetch": "no" } ], "detail": { "function": 0, "command": 1031, "header_type": 0, "secondary_bus": 0, "irq": 170, "prog_if": 1 }, "driver": "ahci", "driver_module": "ahci", "drivers": [ "ahci" ], "driver_modules": [ "ahci" ], "module_alias": "pci:v00008086d00007A62sv00001849sd00007A62bc01sc06i01" }, { "index": 38, "attached_to": 0, "class_list": [ "storage_controller", "pci" ], "bus_type": { "hex": "0004", "name": "PCI", "value": 4 }, "slot": { "bus": 0, "number": 14 }, "base_class": { "hex": "0001", "name": "Mass storage controller", "value": 1 }, "sub_class": { "hex": "0004", "name": "RAID bus controller", "value": 4 }, "vendor": { "hex": "8086", "name": "Intel Corporation", "value": 32902 }, "sub_vendor": { "hex": "8086", "name": "Intel Corporation", "value": 32902 }, "device": { "hex": "467f", "value": 18047 }, "sub_device": { "hex": "0000", "value": 0 }, "model": "Intel RAID bus controller", "sysfs_id": "/devices/pci0000:00/0000:00:0e.0", "sysfs_bus_id": "0000:00:0e.0", "resources": [ { "type": "mem", "base": 1879048192, "range": 33554432, "enabled": true, "access": "read_write", "prefetch": "no" }, { "type": "mem", "base": 292326211584, "range": 33554432, "enabled": true, "access": "read_write", "prefetch": "no" }, { "type": "mem", "base": 292360814592, "range": 1048576, "enabled": true, "access": "read_write", "prefetch": "no" } ], "detail": { "function": 0, "command": 1030, "header_type": 0, "secondary_bus": 0, "irq": 0, "prog_if": 0 }, "driver": "vmd", "driver_module": "vmd", "drivers": [ "vmd" ], "driver_modules": [ "vmd" ], "module_alias": "pci:v00008086d0000467Fsv00008086sd00000000bc01sc04i00" }, { "index": 40, "attached_to": 36, "class_list": [ "storage_controller", "pci" ], "bus_type": { "hex": "0004", "name": "PCI", "value": 4 }, "slot": { "bus": 4, "number": 0 }, "base_class": { "hex": "0001", "name": "Mass storage controller", "value": 1 }, "sub_class": { "hex": "0008", "value": 8 }, "pci_interface": { "hex": "0002", "value": 2 }, "vendor": { "hex": "2646", "value": 9798 }, "sub_vendor": { "hex": "2646", "value": 9798 }, "device": { "hex": "5023", "value": 20515 }, "sub_device": { "hex": "5023", "value": 20515 }, "revision": { "hex": "0003", "value": 3 }, "model": "Mass storage controller", "sysfs_id": "/devices/pci0000:00/0000:00:06.0/0000:04:00.0", "sysfs_bus_id": "0000:04:00.0", "resources": [ { "type": "irq", "base": 16, "triggered": 0, "enabled": true }, { "type": "mem", "base": 1916796928, "range": 16384, "enabled": true, "access": "read_write", "prefetch": "no" } ], "detail": { "function": 0, "command": 1030, "header_type": 0, "secondary_bus": 0, "irq": 16, "prog_if": 2 }, "driver": "nvme", "driver_module": "nvme", "drivers": [ "nvme" ], "driver_modules": [ "nvme" ], "module_alias": "pci:v00002646d00005023sv00002646sd00005023bc01sc08i02" } ], "system": { "form_factor": "desktop" }, "unknown": [ { "index": 44, "attached_to": 0, "class_list": [ "unknown" ], "base_class": { "hex": "0007", "name": "Communication controller", "value": 7 }, "sub_class": { "hex": "0000", "name": "Serial controller", "value": 0 }, "pci_interface": { "hex": "0002", "name": "16550", "value": 2 }, "device": { "hex": "0000", "name": "16550A", "value": 0 }, "model": "16550A", "unix_device_name": "/dev/ttyS0", "unix_device_names": [ "/dev/ttyS0" ], "resources": [ { "type": "io", "base": 1016, "range": 0, "enabled": true, "access": "read_write" }, { "type": "irq", "base": 4, "triggered": 0, "enabled": true } ] } ], "usb": [ { "index": 48, "attached_to": 50, "class_list": [ "usb", "unknown" ], "bus_type": { "hex": "0086", "name": "USB", "value": 134 }, "slot": { "bus": 0, "number": 0 }, "base_class": { "hex": "0000", "name": "Unclassified device", "value": 0 }, "sub_class": { "hex": "0000", "name": "Unclassified device", "value": 0 }, "vendor": { "hex": "19f5", "name": "NuPhy", "value": 6645 }, "device": { "hex": "3246", "name": "NuPhy Air75 V2", "value": 12870 }, "revision": { "hex": "0000", "name": "1.12", "value": 0 }, "model": "NuPhy Air75 V2", "sysfs_id": "/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2.1/1-2.1:1.3", "sysfs_bus_id": "1-2.1:1.3", "resources": [ { "type": "baud", "speed": 12000000, "bits": 0, "stop_bits": 0, "parity": 0, "handshake": 0 } ], "detail": { "device_class": { "hex": "0000", "name": "per_interface", "value": 0 }, "device_subclass": { "hex": "0000", "name": "per_interface", "value": 0 }, "device_protocol": 0, "interface_class": { "hex": "0003", "name": "hid", "value": 3 }, "interface_subclass": { "hex": "0000", "name": "per_interface", "value": 0 }, "interface_protocol": 0, "interface_number": 3, "interface_alternate_setting": 0 }, "hotplug": "usb", "driver": "usbhid", "driver_module": "usbhid", "drivers": [ "usbhid" ], "driver_modules": [ "usbhid" ], "module_alias": "usb:v19F5p3246d0112dc00dsc00dp00ic03isc00ip00in03" }, { "index": 49, "attached_to": 50, "class_list": [ "usb", "unknown" ], "bus_type": { "hex": "0086", "name": "USB", "value": 134 }, "slot": { "bus": 0, "number": 0 }, "base_class": { "hex": "0000", "name": "Unclassified device", "value": 0 }, "sub_class": { "hex": "0000", "name": "Unclassified device", "value": 0 }, "vendor": { "hex": "19f5", "name": "NuPhy", "value": 6645 }, "device": { "hex": "3246", "name": "NuPhy Air75 V2", "value": 12870 }, "revision": { "hex": "0000", "name": "1.12", "value": 0 }, "model": "NuPhy Air75 V2", "sysfs_id": "/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2.1/1-2.1:1.1", "sysfs_bus_id": "1-2.1:1.1", "resources": [ { "type": "baud", "speed": 12000000, "bits": 0, "stop_bits": 0, "parity": 0, "handshake": 0 } ], "detail": { "device_class": { "hex": "0000", "name": "per_interface", "value": 0 }, "device_subclass": { "hex": "0000", "name": "per_interface", "value": 0 }, "device_protocol": 0, "interface_class": { "hex": "0003", "name": "hid", "value": 3 }, "interface_subclass": { "hex": "0000", "name": "per_interface", "value": 0 }, "interface_protocol": 0, "interface_number": 1, "interface_alternate_setting": 0 }, "hotplug": "usb", "driver": "usbhid", "driver_module": "usbhid", "drivers": [ "usbhid" ], "driver_modules": [ "usbhid" ], "module_alias": "usb:v19F5p3246d0112dc00dsc00dp00ic03isc00ip00in01" }, { "index": 52, "attached_to": 57, "class_list": [ "usb", "unknown" ], "bus_type": { "hex": "0086", "name": "USB", "value": 134 }, "slot": { "bus": 0, "number": 0 }, "base_class": { "hex": "0000", "name": "Unclassified device", "value": 0 }, "sub_class": { "hex": "0000", "name": "Unclassified device", "value": 0 }, "vendor": { "hex": "1532", "name": "Razer", "value": 5426 }, "device": { "hex": "005c", "name": "Razer DeathAdder Elite", "value": 92 }, "revision": { "hex": "0000", "name": "2.00", "value": 0 }, "model": "Razer DeathAdder Elite", "sysfs_id": "/devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3:1.2", "sysfs_bus_id": "1-3:1.2", "unix_device_name": "/dev/input/event3", "unix_device_number": { "type": 99, "major": 13, "minor": 67, "range": 1 }, "unix_device_names": [ "/dev/input/by-id/usb-Razer_Razer_DeathAdder_Elite-if02-event-kbd", "/dev/input/by-path/pci-0000:00:14.0-usb-0:3:1.2-event-kbd", "/dev/input/by-path/pci-0000:00:14.0-usbv2-0:3:1.2-event-kbd", "/dev/input/event3" ], "resources": [ { "type": "baud", "speed": 12000000, "bits": 0, "stop_bits": 0, "parity": 0, "handshake": 0 } ], "detail": { "device_class": { "hex": "0000", "name": "per_interface", "value": 0 }, "device_subclass": { "hex": "0000", "name": "per_interface", "value": 0 }, "device_protocol": 0, "interface_class": { "hex": "0003", "name": "hid", "value": 3 }, "interface_subclass": { "hex": "0000", "name": "per_interface", "value": 0 }, "interface_protocol": 1, "interface_number": 2, "interface_alternate_setting": 0 }, "hotplug": "usb", "driver": "usbhid", "driver_module": "usbhid", "drivers": [ "usbhid" ], "driver_modules": [ "usbhid" ], "module_alias": "usb:v1532p005Cd0200dc00dsc00dp00ic03isc00ip01in02" }, { "index": 53, "attached_to": 57, "class_list": [ "usb", "unknown" ], "bus_type": { "hex": "0086", "name": "USB", "value": 134 }, "slot": { "bus": 0, "number": 0 }, "base_class": { "hex": "0000", "name": "Unclassified device", "value": 0 }, "sub_class": { "hex": "0000", "name": "Unclassified device", "value": 0 }, "vendor": { "hex": "1207", "name": "Tillitis", "value": 4615 }, "device": { "hex": "8887", "name": "MTA1-USB-V1", "value": 34951 }, "revision": { "hex": "0000", "name": "1.00", "value": 0 }, "serial": "125736b8-921b-4822-8d3b-3b7b841e89a7", "model": "Tillitis MTA1-USB-V1", "sysfs_id": "/devices/pci0000:00/0000:00:14.0/usb1/1-5/1-5:1.1", "sysfs_bus_id": "1-5:1.1", "resources": [ { "type": "baud", "speed": 12000000, "bits": 0, "stop_bits": 0, "parity": 0, "handshake": 0 } ], "detail": { "device_class": { "hex": "0002", "name": "comm", "value": 2 }, "device_subclass": { "hex": "0000", "name": "per_interface", "value": 0 }, "device_protocol": 0, "interface_class": { "hex": "000a", "name": "data", "value": 10 }, "interface_subclass": { "hex": "0000", "name": "per_interface", "value": 0 }, "interface_protocol": 0, "interface_number": 1, "interface_alternate_setting": 0 }, "hotplug": "usb", "driver": "cdc_acm", "driver_module": "cdc_acm", "drivers": [ "cdc_acm" ], "driver_modules": [ "cdc_acm" ], "module_alias": "usb:v1207p8887d0100dc02dsc00dp00ic0Aisc00ip00in01" }, { "index": 54, "attached_to": 57, "class_list": [ "usb", "unknown" ], "bus_type": { "hex": "0086", "name": "USB", "value": 134 }, "slot": { "bus": 0, "number": 0 }, "base_class": { "hex": "0000", "name": "Unclassified device", "value": 0 }, "sub_class": { "hex": "0000", "name": "Unclassified device", "value": 0 }, "vendor": { "hex": "26ce", "name": "ASRock", "value": 9934 }, "device": { "hex": "01a2", "name": "LED Controller", "value": 418 }, "serial": "A02019100900", "model": "ASRock LED Controller", "sysfs_id": "/devices/pci0000:00/0000:00:14.0/usb1/1-11/1-11:1.0", "sysfs_bus_id": "1-11:1.0", "unix_device_name": "/dev/input/event9", "unix_device_number": { "type": 99, "major": 13, "minor": 73, "range": 1 }, "unix_device_names": [ "/dev/input/by-id/usb-ASRock_LED_Controller_A02019100900-event-if00", "/dev/input/by-path/pci-0000:00:14.0-usb-0:11:1.0-event", "/dev/input/by-path/pci-0000:00:14.0-usbv2-0:11:1.0-event", "/dev/input/event9" ], "resources": [ { "type": "baud", "speed": 12000000, "bits": 0, "stop_bits": 0, "parity": 0, "handshake": 0 } ], "detail": { "device_class": { "hex": "0000", "name": "per_interface", "value": 0 }, "device_subclass": { "hex": "0000", "name": "per_interface", "value": 0 }, "device_protocol": 0, "interface_class": { "hex": "0003", "name": "hid", "value": 3 }, "interface_subclass": { "hex": "0000", "name": "per_interface", "value": 0 }, "interface_protocol": 0, "interface_number": 0, "interface_alternate_setting": 0 }, "hotplug": "usb", "driver": "usbhid", "driver_module": "usbhid", "drivers": [ "usbhid" ], "driver_modules": [ "usbhid" ], "module_alias": "usb:v26CEp01A2d0000dc00dsc00dp00ic03isc00ip00in00" }, { "index": 61, "attached_to": 57, "class_list": [ "usb", "unknown" ], "bus_type": { "hex": "0086", "name": "USB", "value": 134 }, "slot": { "bus": 0, "number": 0 }, "base_class": { "hex": "0000", "name": "Unclassified device", "value": 0 }, "sub_class": { "hex": "0000", "name": "Unclassified device", "value": 0 }, "vendor": { "hex": "1532", "name": "Razer", "value": 5426 }, "device": { "hex": "005c", "name": "Razer DeathAdder Elite", "value": 92 }, "revision": { "hex": "0000", "name": "2.00", "value": 0 }, "model": "Razer DeathAdder Elite", "sysfs_id": "/devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3:1.1", "sysfs_bus_id": "1-3:1.1", "unix_device_name": "/dev/input/event1", "unix_device_number": { "type": 99, "major": 13, "minor": 65, "range": 1 }, "unix_device_names": [ "/dev/input/by-id/usb-Razer_Razer_DeathAdder_Elite-if01-event-kbd", "/dev/input/by-path/pci-0000:00:14.0-usb-0:3:1.1-event-kbd", "/dev/input/by-path/pci-0000:00:14.0-usbv2-0:3:1.1-event-kbd", "/dev/input/event1" ], "resources": [ { "type": "baud", "speed": 12000000, "bits": 0, "stop_bits": 0, "parity": 0, "handshake": 0 } ], "detail": { "device_class": { "hex": "0000", "name": "per_interface", "value": 0 }, "device_subclass": { "hex": "0000", "name": "per_interface", "value": 0 }, "device_protocol": 0, "interface_class": { "hex": "0003", "name": "hid", "value": 3 }, "interface_subclass": { "hex": "0000", "name": "per_interface", "value": 0 }, "interface_protocol": 1, "interface_number": 1, "interface_alternate_setting": 0 }, "hotplug": "usb", "driver": "usbhid", "driver_module": "usbhid", "drivers": [ "usbhid" ], "driver_modules": [ "usbhid" ], "module_alias": "usb:v1532p005Cd0200dc00dsc00dp00ic03isc00ip01in01" } ], "usb_controller": [ { "index": 41, "attached_to": 0, "class_list": [ "usb_controller", "pci" ], "bus_type": { "hex": "0004", "name": "PCI", "value": 4 }, "slot": { "bus": 0, "number": 20 }, "base_class": { "hex": "000c", "name": "Serial bus controller", "value": 12 }, "sub_class": { "hex": "0003", "name": "USB Controller", "value": 3 }, "pci_interface": { "hex": "0030", "value": 48 }, "vendor": { "hex": "8086", "name": "Intel Corporation", "value": 32902 }, "sub_vendor": { "hex": "1849", "value": 6217 }, "device": { "hex": "7a60", "value": 31328 }, "sub_device": { "hex": "7a60", "value": 31328 }, "revision": { "hex": "0011", "value": 17 }, "model": "Intel USB Controller", "sysfs_id": "/devices/pci0000:00/0000:00:14.0", "sysfs_bus_id": "0000:00:14.0", "resources": [ { "type": "irq", "base": 146, "triggered": 0, "enabled": true }, { "type": "mem", "base": 292361863168, "range": 65536, "enabled": true, "access": "read_write", "prefetch": "no" } ], "detail": { "function": 0, "command": 1030, "header_type": 0, "secondary_bus": 0, "irq": 146, "prog_if": 48 }, "driver": "xhci_hcd", "driver_module": "xhci_pci", "drivers": [ "xhci_hcd" ], "driver_modules": [ "xhci_pci" ], "module_alias": "pci:v00008086d00007A60sv00001849sd00007A60bc0Csc03i30" } ] }, "smbios": { "bios": { "handle": 0, "vendor": "American Megatrends International, LLC.", "version": "3.12", "date": "06/13/2023", "features": [ "PCI supported", "BIOS flashable", "BIOS shadowing allowed", "CD boot supported", "Selectable boot supported", "BIOS ROM socketed", "EDD spec supported", "1.2MB NEC 9800 Japanese Floppy supported", "1.2MB Toshiba Japanese Floppy supported", "360kB Floppy supported", "1.2MB Floppy supported", "720kB Floppy supported", "2.88MB Floppy supported", "Print Screen supported", "8042 Keyboard Services supported", "Serial Services supported", "Printer Services supported", "CGA/Mono Video supported", "ACPI supported", "USB Legacy supported", "BIOS Boot Spec supported" ], "start_address": "0xf0000", "rom_size": 16777216 }, "board": { "handle": 2, "manufacturer": "ASRock", "product": "B760M Pro RS/D4 WiFi", "version": "", "board_type": { "hex": "000a", "name": "Motherboard", "value": 10 }, "features": [ "Hosting Board", "Replaceable" ], "location": "", "chassis": 3 }, "cache": [ { "handle": 29, "socket": "L1 Cache", "size_max": 288, "size_current": 288, "speed": 0, "mode": { "hex": "0001", "name": "Write Back", "value": 1 }, "enabled": true, "location": { "hex": "0000", "name": "Internal", "value": 0 }, "socketed": false, "level": 0, "ecc": { "hex": "0004", "name": "Parity", "value": 4 }, "cache_type": { "hex": "0004", "name": "Data", "value": 4 }, "associativity": { "hex": "0009", "name": "Other", "value": 9 }, "sram_type_current": [ "Synchronous" ], "sram_type_supported": [ "Synchronous" ] }, { "handle": 30, "socket": "L1 Cache", "size_max": 192, "size_current": 192, "speed": 0, "mode": { "hex": "0001", "name": "Write Back", "value": 1 }, "enabled": true, "location": { "hex": "0000", "name": "Internal", "value": 0 }, "socketed": false, "level": 0, "ecc": { "hex": "0004", "name": "Parity", "value": 4 }, "cache_type": { "hex": "0003", "name": "Instruction", "value": 3 }, "associativity": { "hex": "0007", "name": "8-way Set-Associative", "value": 7 }, "sram_type_current": [ "Synchronous" ], "sram_type_supported": [ "Synchronous" ] }, { "handle": 31, "socket": "L2 Cache", "size_max": 7680, "size_current": 7680, "speed": 0, "mode": { "hex": "0001", "name": "Write Back", "value": 1 }, "enabled": true, "location": { "hex": "0000", "name": "Internal", "value": 0 }, "socketed": false, "level": 1, "ecc": { "hex": "0005", "name": "Single-bit", "value": 5 }, "cache_type": { "hex": "0005", "name": "Unified", "value": 5 }, "associativity": { "hex": "0001", "name": "Other", "value": 1 }, "sram_type_current": [ "Synchronous" ], "sram_type_supported": [ "Synchronous" ] }, { "handle": 32, "socket": "L3 Cache", "size_max": 20480, "size_current": 20480, "speed": 0, "mode": { "hex": "0001", "name": "Write Back", "value": 1 }, "enabled": true, "location": { "hex": "0000", "name": "Internal", "value": 0 }, "socketed": false, "level": 2, "ecc": { "hex": "0006", "name": "Multi-bit", "value": 6 }, "cache_type": { "hex": "0005", "name": "Unified", "value": 5 }, "associativity": { "hex": "0001", "name": "Other", "value": 1 }, "sram_type_current": [ "Synchronous" ], "sram_type_supported": [ "Synchronous" ] }, { "handle": 33, "socket": "L1 Cache", "size_max": 128, "size_current": 128, "speed": 0, "mode": { "hex": "0001", "name": "Write Back", "value": 1 }, "enabled": true, "location": { "hex": "0000", "name": "Internal", "value": 0 }, "socketed": false, "level": 0, "ecc": { "hex": "0004", "name": "Parity", "value": 4 }, "cache_type": { "hex": "0004", "name": "Data", "value": 4 }, "associativity": { "hex": "0007", "name": "8-way Set-Associative", "value": 7 }, "sram_type_current": [ "Synchronous" ], "sram_type_supported": [ "Synchronous" ] }, { "handle": 34, "socket": "L1 Cache", "size_max": 256, "size_current": 256, "speed": 0, "mode": { "hex": "0001", "name": "Write Back", "value": 1 }, "enabled": true, "location": { "hex": "0000", "name": "Internal", "value": 0 }, "socketed": false, "level": 0, "ecc": { "hex": "0004", "name": "Parity", "value": 4 }, "cache_type": { "hex": "0003", "name": "Instruction", "value": 3 }, "associativity": { "hex": "0007", "name": "8-way Set-Associative", "value": 7 }, "sram_type_current": [ "Synchronous" ], "sram_type_supported": [ "Synchronous" ] }, { "handle": 35, "socket": "L2 Cache", "size_max": 2048, "size_current": 2048, "speed": 0, "mode": { "hex": "0001", "name": "Write Back", "value": 1 }, "enabled": true, "location": { "hex": "0000", "name": "Internal", "value": 0 }, "socketed": false, "level": 1, "ecc": { "hex": "0005", "name": "Single-bit", "value": 5 }, "cache_type": { "hex": "0005", "name": "Unified", "value": 5 }, "associativity": { "hex": "0008", "name": "16-way Set-Associative", "value": 8 }, "sram_type_current": [ "Synchronous" ], "sram_type_supported": [ "Synchronous" ] }, { "handle": 36, "socket": "L3 Cache", "size_max": 20480, "size_current": 20480, "speed": 0, "mode": { "hex": "0001", "name": "Write Back", "value": 1 }, "enabled": true, "location": { "hex": "0000", "name": "Internal", "value": 0 }, "socketed": false, "level": 2, "ecc": { "hex": "0006", "name": "Multi-bit", "value": 6 }, "cache_type": { "hex": "0005", "name": "Unified", "value": 5 }, "associativity": { "hex": "0001", "name": "Other", "value": 1 }, "sram_type_current": [ "Synchronous" ], "sram_type_supported": [ "Synchronous" ] } ], "chassis": [ { "handle": 3, "manufacturer": "To Be Filled By O.E.M.", "version": "To Be Filled By O.E.M.", "chassis_type": { "hex": "0003", "name": "Desktop", "value": 3 }, "lock_present": false, "bootup_state": { "hex": "0003", "name": "Safe", "value": 3 }, "power_state": { "hex": "0003", "name": "Safe", "value": 3 }, "thermal_state": { "hex": "0003", "name": "Safe", "value": 3 }, "security_state": { "hex": "0003", "name": "None", "value": 3 }, "oem": "0x0" } ], "group_associations": [ { "handle": 41, "name": "$MEI", "handles": [ 0 ] } ], "memory_array": [ { "handle": 13, "location": { "hex": "0003", "name": "Motherboard", "value": 3 }, "usage": { "hex": "0003", "name": "System memory", "value": 3 }, "ecc": { "hex": "0003", "name": "None", "value": 3 }, "max_size": "0x8000000", "error_handle": 65534, "slots": 4 } ], "memory_array_mapped_address": [ { "handle": 18, "array_handle": 13, "start_address": "0x0", "end_address": "0x800000000", "part_width": 2 } ], "memory_device": [ { "handle": 14, "location": "Controller0-ChannelA-DIMM0", "bank_location": "BANK 0", "manufacturer": "", "part_number": "", "array_handle": 13, "error_handle": 65534, "width": 0, "ecc_bits": 0, "size": 0, "form_factor": { "hex": "0009", "name": "DIMM", "value": 9 }, "set": 0, "memory_type": { "hex": "0002", "name": "Unknown", "value": 2 }, "memory_type_details": null, "speed": 0 }, { "handle": 15, "location": "Controller0-ChannelA-DIMM1", "bank_location": "BANK 0", "manufacturer": "Team Group Inc", "part_number": "TEAMGROUP-UD4-3200", "array_handle": 13, "error_handle": 65534, "width": 64, "ecc_bits": 0, "size": 16777216, "form_factor": { "hex": "0009", "name": "DIMM", "value": 9 }, "set": 0, "memory_type": { "hex": "001a", "name": "Other", "value": 26 }, "memory_type_details": [ "Synchronous" ], "speed": 2400 }, { "handle": 16, "location": "Controller1-ChannelA-DIMM0", "bank_location": "BANK 0", "manufacturer": "", "part_number": "", "array_handle": 13, "error_handle": 65534, "width": 0, "ecc_bits": 0, "size": 0, "form_factor": { "hex": "0009", "name": "DIMM", "value": 9 }, "set": 0, "memory_type": { "hex": "0002", "name": "Unknown", "value": 2 }, "memory_type_details": null, "speed": 0 }, { "handle": 17, "location": "Controller1-ChannelA-DIMM1", "bank_location": "BANK 0", "manufacturer": "Team Group Inc", "part_number": "TEAMGROUP-UD4-3200", "array_handle": 13, "error_handle": 65534, "width": 64, "ecc_bits": 0, "size": 16777216, "form_factor": { "hex": "0009", "name": "DIMM", "value": 9 }, "set": 0, "memory_type": { "hex": "001a", "name": "Other", "value": 26 }, "memory_type_details": [ "Synchronous" ], "speed": 2400 } ], "memory_device_mapped_address": [ { "handle": 22, "memory_device_handle": 15, "array_map_handle": 18, "start_address": "0x0", "end_address": "0x400000000", "row_position": 1, "interleave_position": 1, "interleave_depth": 2 }, { "handle": 23, "memory_device_handle": 17, "array_map_handle": 18, "start_address": "0x400000000", "end_address": "0x800000000", "row_position": 1, "interleave_position": 2, "interleave_depth": 2 } ], "processor": [ { "handle": 37, "socket": "CPUSocket", "socket_type": { "hex": "0040", "name": "Other", "value": 64 }, "socket_populated": true, "manufacturer": "Intel(R) Corporation", "version": "12th Gen Intel(R) Core(TM) i5-12600KF", "part": "To Be Filled By O.E.M.", "processor_type": { "hex": "0003", "name": "CPU", "value": 3 }, "processor_family": { "hex": "00cd", "name": "Other", "value": 205 }, "processor_status": { "hex": "0001", "name": "Enabled", "value": 1 }, "clock_ext": 100, "clock_max": 4900, "cache_handle_l1": 30, "cache_handle_l2": 31, "cache_handle_l3": 32 } ], "slot": [ { "handle": 4, "designation": "Slot1", "slot_type": { "hex": "00a5", "name": "Other", "value": 165 }, "bus_width": { "hex": "000d", "name": "Other", "value": 13 }, "usage": { "hex": "0004", "name": "In Use", "value": 4 }, "length": { "hex": "0004", "name": "Long", "value": 4 }, "id": 17, "features": [ "3.3 V", "Shared", "PME#" ] }, { "handle": 5, "designation": "Slot2", "slot_type": { "hex": "00a5", "name": "Other", "value": 165 }, "bus_width": { "hex": "0008", "name": "Other", "value": 8 }, "usage": { "hex": "0003", "name": "Available", "value": 3 }, "length": { "hex": "0003", "name": "Short", "value": 3 }, "id": 18, "features": [ "3.3 V", "Shared", "PME#" ] }, { "handle": 6, "designation": "Slot3", "slot_type": { "hex": "00a5", "name": "Other", "value": 165 }, "bus_width": { "hex": "000a", "name": "Other", "value": 10 }, "usage": { "hex": "0003", "name": "Available", "value": 3 }, "length": { "hex": "0003", "name": "Short", "value": 3 }, "id": 19, "features": [ "3.3 V", "Shared", "PME#" ] }, { "handle": 7, "designation": "M2_1", "slot_type": { "hex": "00a5", "name": "Other", "value": 165 }, "bus_width": { "hex": "000a", "name": "Other", "value": 10 }, "usage": { "hex": "0004", "name": "In Use", "value": 4 }, "length": { "hex": "0003", "name": "Short", "value": 3 }, "id": 33, "features": [ "3.3 V", "Shared", "PME#" ] }, { "handle": 8, "designation": "M2_2", "slot_type": { "hex": "00a5", "name": "Other", "value": 165 }, "bus_width": { "hex": "000a", "name": "Other", "value": 10 }, "usage": { "hex": "0003", "name": "Available", "value": 3 }, "length": { "hex": "0003", "name": "Short", "value": 3 }, "id": 34, "features": [ "3.3 V", "Shared", "PME#" ] }, { "handle": 9, "designation": "M2_Wifi", "slot_type": { "hex": "00a5", "name": "Other", "value": 165 }, "bus_width": { "hex": "0008", "name": "Other", "value": 8 }, "usage": { "hex": "0003", "name": "Available", "value": 3 }, "length": { "hex": "0003", "name": "Short", "value": 3 }, "id": 49, "features": [ "3.3 V", "Shared", "PME#" ] } ], "system": { "handle": 1, "manufacturer": "ASRock", "product": "B760M Pro RS/D4 WiFi", "version": "To Be Filled By O.E.M.", "wake_up": { "hex": "0006", "name": "Power Switch", "value": 6 } } } } ================================================ FILE: configurations/nixos/laptop/default.nix ================================================ # NixOS configuration for laptop { flake, pkgs, lib, ... }: let inherit (flake) inputs self; in { imports = [ # Internal modules via flake outputs self.nixosModules.default self.nixosModules.users-bbigras self.nixosModules.graphical self.nixosModules.graphical-cosmic self.nixosModules.graphical-steam self.nixosModules.graphical-trusted self.nixosModules.pam-limits self.nixosModules.hardware-secureboot self.nixosModules.services-podman self.nixosModules.services-wivrn self.nixosModules.services-virt-manager { config.facter.reportPath = ./facter.json; } inputs.nixos-hardware.nixosModules.framework-12-13th-gen-intel # Host-specific files # ./state.nix ./disko.nix ]; # Host-specific home-manager user config home-manager.users.bbigras.imports = [ self.homeModules.trusted self.homeModules.emacs self.homeModules.syncthing self.homeModules.graphical self.homeModules.graphical-heroic self.homeModules.graphical-lutris self.homeModules.tkey-ssh-agent ]; # SSH target for remote activation # Platform nixpkgs.hostPlatform = "x86_64-linux"; # Host-specific configuration boot = { initrd = { systemd.enable = true; }; lanzaboote.pkiBundle = lib.mkForce "/var/lib/sbctl"; plymouth.enable = true; }; environment.systemPackages = with pkgs; [ cntr wireguard-tools ]; # agenix-rekey host pubkey age.rekey.hostPubkey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGbvuozkVenMJeMFkpnnXA6qWTFfDhkjRq26VSgDSHme"; networking = { # hostId = ""; hostName = "laptop"; wireguard.enable = true; wireless.enable = false; }; nix.settings.max-substitution-jobs = 32; security.sudo.wheelNeedsPassword = true; services = { flatpak.enable = true; udisks2.enable = true; fwupd = { enable = true; extraRemotes = [ "lvfs-testing" ]; # uefiCapsuleSettings.DisableCapsuleUpdateOnDisk = true; }; thermald.enable = true; tlp.enable = false; tuned.enable = true; }; networking.networkmanager = { enable = true; dns = "systemd-resolved"; wifi = { backend = "iwd"; macAddress = "stable-ssid"; # powersave = false; }; ensureProfiles = { environmentFiles = [ # config.sops.secrets.networkmanager.path ]; profiles = { home = { connection = { id = "home"; type = "wifi"; # uuid = "1a2538e1-1a72-4162-bc85-58682ecd91eb"; autoconnect = true; }; ipv4 = { method = "auto"; }; ipv6 = { addr-gen-mode = "default"; method = "auto"; }; # proxy = { }; wifi = { ssid = "$HOME_SSID"; }; wifi-security = { key-mgmt = "wpa-psk"; psk = "$HOME_PASSPHRASE"; }; }; phone = { connection = { autoconnect-priority = "-1"; id = "phone"; metered = "1"; # timestamp = "1752765639"; type = "wifi"; # uuid = "d3c51cff-ccaa-481e-8d93-a02c5ac3bdda"; }; ipv4 = { method = "auto"; }; ipv6 = { addr-gen-mode = "stable-privacy"; method = "auto"; }; # proxy = { }; wifi = { # cloned-mac-address = "stable-ssid"; mode = "infrastructure"; ssid = "$PHONE_PASSPHRASE"; }; wifi-security = { key-mgmt = "wpa-psk"; psk = "$PHONE_PSK"; }; }; }; }; }; # These options are unnecessary when managing DNS ourselves networking.useDHCP = false; networking.dhcpcd.enable = false; facter.detected.dhcp.enable = false; } ================================================ FILE: configurations/nixos/laptop/disko.nix ================================================ { fileSystems = { "/nix/state".neededForBoot = true; "/nix".neededForBoot = true; "/home".neededForBoot = true; }; # https://github.com/nix-community/disko/issues/452#issuecomment-1868276953 disko.devices = { disk = { main = { type = "disk"; device = "/dev/disk/by-id/nvme-WD_BLACK_SN770M_2TB_2508DD400188"; content = { type = "gpt"; partitions = { ESP = { priority = 1; size = "512M"; type = "EF00"; # bootable = true; content = { type = "filesystem"; format = "vfat"; mountpoint = "/boot"; mountOptions = [ "umask=0077" ]; }; }; luks = { size = "100%"; content = { type = "luks"; name = "crypted"; settings = { allowDiscards = true; }; content = { type = "btrfs"; extraArgs = [ "-f" ]; postCreateHook = '' MNTPOINT=$(mktemp -d) mount "/dev/mapper/crypted" "$MNTPOINT" -o subvol=/ trap 'umount $MNTPOINT; rm -rf $MNTPOINT' EXIT btrfs subvolume snapshot -r $MNTPOINT/root $MNTPOINT/root-blank btrfs subvolume snapshot -r $MNTPOINT/home $MNTPOINT/home-blank ''; subvolumes = { "/root" = { mountpoint = "/"; mountOptions = [ "compress=zstd" "noatime" ]; }; "/home" = { mountpoint = "/home"; mountOptions = [ "compress=zstd" "noatime" ]; }; "/nix" = { mountpoint = "/nix"; mountOptions = [ "compress=zstd" "noatime" ]; }; "/nix/state" = { mountpoint = "/nix/state"; mountOptions = [ "compress=zstd" "noatime" ]; }; "/swap" = { mountpoint = "/.swapvol"; swap.swapfile.size = "20M"; }; }; }; }; }; }; }; }; }; }; } ================================================ FILE: configurations/nixos/laptop/facter.json ================================================ { "version": 1, "system": "x86_64-linux", "virtualisation": "none", "hardware": { "bios": { "apm_info": { "supported": false, "enabled": false, "version": 0, "sub_version": 0, "bios_flags": 0 }, "vbe_info": { "version": 0, "video_memory": 0 }, "pnp": false, "pnp_id": 0, "lba_support": false, "low_memory_size": 0, "smbios_version": 772 }, "bluetooth": [ { "index": 41, "attached_to": 40, "class_list": [ "usb", "bluetooth" ], "bus_type": { "hex": "0086", "name": "USB", "value": 134 }, "slot": { "bus": 0, "number": 0 }, "base_class": { "hex": "0115", "name": "Bluetooth Device", "value": 277 }, "vendor": { "hex": "8087", "value": 32903 }, "device": { "hex": "0033", "value": 51 }, "model": "Bluetooth Device", "sysfs_id": "/devices/pci0000:00/0000:00:14.0/usb3/3-10/3-10:1.0", "sysfs_bus_id": "3-10:1.0", "resources": [ { "type": "baud", "speed": 12000000, "bits": 0, "stop_bits": 0, "parity": 0, "handshake": 0 } ], "detail": { "device_class": { "hex": "00e0", "name": "wireless", "value": 224 }, "device_subclass": { "hex": "0001", "name": "audio", "value": 1 }, "device_protocol": 1, "interface_class": { "hex": "00e0", "name": "wireless", "value": 224 }, "interface_subclass": { "hex": "0001", "name": "audio", "value": 1 }, "interface_protocol": 1, "interface_number": 0, "interface_alternate_setting": 0 }, "hotplug": "usb", "driver": "btusb", "driver_module": "btusb", "drivers": [ "btusb" ], "driver_modules": [ "btusb" ], "module_alias": "usb:v8087p0033d0000dcE0dsc01dp01icE0isc01ip01in00" }, { "index": 45, "attached_to": 40, "class_list": [ "usb", "bluetooth" ], "bus_type": { "hex": "0086", "name": "USB", "value": 134 }, "slot": { "bus": 0, "number": 0 }, "base_class": { "hex": "0115", "name": "Bluetooth Device", "value": 277 }, "vendor": { "hex": "8087", "value": 32903 }, "device": { "hex": "0033", "value": 51 }, "model": "Bluetooth Device", "sysfs_id": "/devices/pci0000:00/0000:00:14.0/usb3/3-10/3-10:1.1", "sysfs_bus_id": "3-10:1.1", "resources": [ { "type": "baud", "speed": 12000000, "bits": 0, "stop_bits": 0, "parity": 0, "handshake": 0 } ], "detail": { "device_class": { "hex": "00e0", "name": "wireless", "value": 224 }, "device_subclass": { "hex": "0001", "name": "audio", "value": 1 }, "device_protocol": 1, "interface_class": { "hex": "00e0", "name": "wireless", "value": 224 }, "interface_subclass": { "hex": "0001", "name": "audio", "value": 1 }, "interface_protocol": 1, "interface_number": 1, "interface_alternate_setting": 0 }, "hotplug": "usb", "driver": "btusb", "driver_module": "btusb", "drivers": [ "btusb" ], "driver_modules": [ "btusb" ], "module_alias": "usb:v8087p0033d0000dcE0dsc01dp01icE0isc01ip01in01" } ], "bridge": [ { "index": 19, "attached_to": 0, "class_list": [ "pci", "bridge" ], "bus_type": { "hex": "0004", "name": "PCI", "value": 4 }, "slot": { "bus": 0, "number": 31 }, "base_class": { "hex": "0006", "name": "Bridge", "value": 6 }, "sub_class": { "hex": "0001", "name": "ISA bridge", "value": 1 }, "vendor": { "hex": "8086", "name": "Intel Corporation", "value": 32902 }, "sub_vendor": { "hex": "f111", "value": 61713 }, "device": { "hex": "519d", "value": 20893 }, "sub_device": { "hex": "000c", "value": 12 }, "revision": { "hex": "0001", "value": 1 }, "model": "Intel ISA bridge", "sysfs_id": "/devices/pci0000:00/0000:00:1f.0", "sysfs_bus_id": "0000:00:1f.0", "detail": { "function": 0, "command": 1031, "header_type": 0, "secondary_bus": 0, "prog_if": 0 }, "module_alias": "pci:v00008086d0000519Dsv0000F111sd0000000Cbc06sc01i00" }, { "index": 27, "attached_to": 0, "class_list": [ "pci", "bridge" ], "bus_type": { "hex": "0004", "name": "PCI", "value": 4 }, "slot": { "bus": 0, "number": 0 }, "base_class": { "hex": "0006", "name": "Bridge", "value": 6 }, "sub_class": { "hex": "0000", "name": "Host bridge", "value": 0 }, "vendor": { "hex": "8086", "name": "Intel Corporation", "value": 32902 }, "sub_vendor": { "hex": "f111", "value": 61713 }, "device": { "hex": "a708", "value": 42760 }, "sub_device": { "hex": "000c", "value": 12 }, "revision": { "hex": "0001", "value": 1 }, "model": "Intel Host bridge", "sysfs_id": "/devices/pci0000:00/0000:00:00.0", "sysfs_bus_id": "0000:00:00.0", "detail": { "function": 0, "command": 6, "header_type": 0, "secondary_bus": 0, "prog_if": 0 }, "driver": "igen6_edac", "driver_module": "igen6_edac", "drivers": [ "igen6_edac" ], "driver_modules": [ "igen6_edac" ], "module_alias": "pci:v00008086d0000A708sv0000F111sd0000000Cbc06sc00i00" }, { "index": 29, "attached_to": 0, "class_list": [ "pci", "bridge" ], "bus_type": { "hex": "0004", "name": "PCI", "value": 4 }, "slot": { "bus": 0, "number": 6 }, "base_class": { "hex": "0006", "name": "Bridge", "value": 6 }, "sub_class": { "hex": "0004", "name": "PCI bridge", "value": 4 }, "pci_interface": { "hex": "0000", "name": "Normal decode", "value": 0 }, "vendor": { "hex": "8086", "name": "Intel Corporation", "value": 32902 }, "sub_vendor": { "hex": "f111", "value": 61713 }, "device": { "hex": "a74d", "value": 42829 }, "sub_device": { "hex": "000c", "value": 12 }, "revision": { "hex": "0001", "value": 1 }, "model": "Intel PCI bridge", "sysfs_id": "/devices/pci0000:00/0000:00:06.0", "sysfs_bus_id": "0000:00:06.0", "detail": { "function": 0, "command": 1287, "header_type": 1, "secondary_bus": 1, "prog_if": 0 }, "driver": "pcieport", "driver_module": "pcieportdrv", "drivers": [ "pcieport" ], "driver_modules": [ "pcieportdrv" ], "module_alias": "pci:v00008086d0000A74Dsv0000F111sd0000000Cbc06sc04i00" } ], "camera": [ { "index": 39, "attached_to": 40, "class_list": [ "camera", "usb" ], "bus_type": { "hex": "0086", "name": "USB", "value": 134 }, "slot": { "bus": 0, "number": 0 }, "base_class": { "hex": "010f", "name": "Camera", "value": 271 }, "vendor": { "hex": "32ac", "name": "Framework", "value": 12972 }, "device": { "hex": "001d", "name": "Framework Laptop 12 Webcam Module", "value": 29 }, "revision": { "hex": "0000", "name": "0.16", "value": 0 }, "serial": "0001", "model": "Framework Laptop 12 Webcam Module", "sysfs_id": "/devices/pci0000:00/0000:00:14.0/usb3/3-7/3-7:1.0", "sysfs_bus_id": "3-7:1.0", "resources": [ { "type": "baud", "speed": 480000000, "bits": 0, "stop_bits": 0, "parity": 0, "handshake": 0 } ], "detail": { "device_class": { "hex": "00ef", "name": "miscellaneous", "value": 239 }, "device_subclass": { "hex": "0002", "name": "comm", "value": 2 }, "device_protocol": 1, "interface_class": { "hex": "000e", "name": "video", "value": 14 }, "interface_subclass": { "hex": "0001", "name": "audio", "value": 1 }, "interface_protocol": 1, "interface_number": 0, "interface_alternate_setting": 0, "interface_association": { "function_class": { "hex": "000e", "name": "video", "value": 14 }, "function_subclass": { "hex": "0003", "name": "hid", "value": 3 }, "function_protocol": 0, "interface_count": 2, "first_interface": 0 } }, "hotplug": "usb", "driver": "uvcvideo", "driver_module": "uvcvideo", "drivers": [ "uvcvideo" ], "driver_modules": [ "uvcvideo" ], "module_alias": "usb:v32ACp001Dd0016dcEFdsc02dp01ic0Eisc01ip01in00" }, { "index": 42, "attached_to": 40, "class_list": [ "camera", "usb" ], "bus_type": { "hex": "0086", "name": "USB", "value": 134 }, "slot": { "bus": 0, "number": 0 }, "base_class": { "hex": "010f", "name": "Camera", "value": 271 }, "vendor": { "hex": "32ac", "name": "Framework", "value": 12972 }, "device": { "hex": "001d", "name": "Framework Laptop 12 Webcam Module", "value": 29 }, "revision": { "hex": "0000", "name": "0.16", "value": 0 }, "serial": "0001", "model": "Framework Laptop 12 Webcam Module", "sysfs_id": "/devices/pci0000:00/0000:00:14.0/usb3/3-7/3-7:1.1", "sysfs_bus_id": "3-7:1.1", "resources": [ { "type": "baud", "speed": 480000000, "bits": 0, "stop_bits": 0, "parity": 0, "handshake": 0 } ], "detail": { "device_class": { "hex": "00ef", "name": "miscellaneous", "value": 239 }, "device_subclass": { "hex": "0002", "name": "comm", "value": 2 }, "device_protocol": 1, "interface_class": { "hex": "000e", "name": "video", "value": 14 }, "interface_subclass": { "hex": "0002", "name": "comm", "value": 2 }, "interface_protocol": 1, "interface_number": 1, "interface_alternate_setting": 0, "interface_association": { "function_class": { "hex": "000e", "name": "video", "value": 14 }, "function_subclass": { "hex": "0003", "name": "hid", "value": 3 }, "function_protocol": 0, "interface_count": 2, "first_interface": 0 } }, "hotplug": "usb", "driver": "uvcvideo", "driver_module": "uvcvideo", "drivers": [ "uvcvideo" ], "driver_modules": [ "uvcvideo" ], "module_alias": "usb:v32ACp001Dd0016dcEFdsc02dp01ic0Eisc02ip01in01" } ], "cpu": [ { "architecture": "x86_64", "vendor_name": "GenuineIntel", "model_name": "13th Gen Intel(R) Core(TM) i5-1334U", "family": 6, "model": 186, "stepping": 3, "features": [ "fpu", "vme", "de", "pse", "tsc", "msr", "pae", "mce", "cx8", "apic", "sep", "mtrr", "pge", "mca", "cmov", "pat", "pse36", "clflush", "dts", "acpi", "mmx", "fxsr", "sse", "sse2", "ss", "ht", "tm", "pbe", "syscall", "nx", "pdpe1gb", "rdtscp", "lm", "constant_tsc", "art", "arch_perfmon", "pebs", "bts", "rep_good", "nopl", "xtopology", "nonstop_tsc", "cpuid", "aperfmperf", "tsc_known_freq", "pni", "pclmulqdq", "dtes64", "monitor", "ds_cpl", "vmx", "smx", "est", "tm2", "ssse3", "sdbg", "fma", "cx16", "xtpr", "pdcm", "pcid", "sse4_1", "sse4_2", "x2apic", "movbe", "popcnt", "tsc_deadline_timer", "aes", "xsave", "avx", "f16c", "rdrand", "lahf_lm", "abm", "3dnowprefetch", "cpuid_fault", "epb", "ssbd", "ibrs", "ibpb", "stibp", "ibrs_enhanced", "tpr_shadow", "flexpriority", "ept", "vpid", "ept_ad", "fsgsbase", "tsc_adjust", "bmi1", "avx2", "smep", "bmi2", "erms", "invpcid", "rdseed", "adx", "smap", "clflushopt", "clwb", "intel_pt", "sha_ni", "xsaveopt", "xsavec", "xgetbv1", "xsaves", "split_lock_detect", "user_shstk", "avx_vnni", "dtherm", "ida", "arat", "pln", "pts", "hwp", "hwp_notify", "hwp_act_window", "hwp_epp", "hwp_pkg_req", "hfi", "vnmi", "umip", "pku", "ospke", "waitpkg", "gfni", "vaes", "vpclmulqdq", "rdpid", "movdiri", "movdir64b", "fsrm", "md_clear", "serialize", "arch_lbr", "ibt", "flush_l1d", "arch_capabilities" ], "bugs": [ "spectre_v1", "spectre_v2", "spec_store_bypass", "swapgs", "eibrs_pbrsb", "rfds", "bhi" ], "power_management": [ "" ], "bogo": 4992, "cache": 12288, "units": 64, "physical_id": 0, "siblings": 12, "cores": 10, "fpu": false, "fpu_exception": false, "cpuid_level": 32, "write_protect": false, "clflush_size": 64, "cache_alignment": 64, "address_sizes": { "physical": "0x27", "virtual": "0x30" } } ], "disk": [ { "index": 36, "attached_to": 23, "class_list": [ "disk", "block_device", "nvme" ], "bus_type": { "hex": "0096", "name": "NVME", "value": 150 }, "slot": { "bus": 0, "number": 0 }, "base_class": { "hex": "0106", "name": "Mass Storage Device", "value": 262 }, "sub_class": { "hex": "0000", "name": "Disk", "value": 0 }, "vendor": { "hex": "15b7", "value": 5559 }, "sub_vendor": { "hex": "15b7", "value": 5559 }, "device": { "hex": "5042", "name": "WD_BLACK SN770M 2TB", "value": 20546 }, "sub_device": { "hex": "5042", "value": 20546 }, "serial": "2508DD400188", "model": "WD_BLACK SN770M 2TB", "sysfs_id": "/class/block/nvme0n1", "sysfs_bus_id": "nvme0", "sysfs_device_link": "/devices/pci0000:00/0000:00:06.0/0000:01:00.0/nvme/nvme0", "unix_device_names": [ "/dev/disk/by-id/nvme-WD_BLACK_SN770M_2TB_2508DD400188", "/dev/disk/by-id/nvme-WD_BLACK_SN770M_2TB_2508DD400188_1", "/dev/disk/by-id/nvme-eui.e8238fa6bf530001001b444a454c0054", "/dev/disk/by-path/pci-0000:01:00.0-nvme-1", "/dev/nvme0n1" ], "resources": [ { "type": "disk_geo", "cylinders": 1907729, "heads": 64, "sectors": 32, "size": "0x0", "geo_type": "logical" }, { "type": "size", "unit": "sectors", "value_1": 3907029168, "value_2": 512 } ], "driver": "nvme", "driver_module": "nvme", "drivers": [ "nvme" ], "driver_modules": [ "nvme" ] }, { "index": 37, "attached_to": 17, "class_list": [ "disk", "usb", "scsi", "block_device" ], "bus_type": { "hex": "0084", "name": "SCSI", "value": 132 }, "slot": { "bus": 0, "number": 0 }, "base_class": { "hex": "0106", "name": "Mass Storage Device", "value": 262 }, "sub_class": { "hex": "0000", "name": "Disk", "value": 0 }, "vendor": { "hex": "05dc", "name": "Lexar", "value": 1500 }, "device": { "hex": "a205", "name": "JumpDrive", "value": 41477 }, "revision": { "hex": "0000", "name": "1.00", "value": 0 }, "serial": "2329624371", "model": "Lexar JumpDrive", "sysfs_id": "/class/block/sda", "sysfs_bus_id": "0:0:0:0", "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", "unix_device_names": [ "/dev/disk/by-id/usb-Lexar_JumpDrive_2329624371-0:0", "/dev/disk/by-path/pci-0000:00:0d.0-usb-0:4:1.0-scsi-0:0:0:0", "/dev/disk/by-path/pci-0000:00:0d.0-usbv3-0:4:1.0-scsi-0:0:0:0", "/dev/sda" ], "unix_device_name2": "/dev/sg0", "resources": [ { "type": "disk_geo", "cylinders": 30540, "heads": 64, "sectors": 32, "size": "0x0", "geo_type": "logical" }, { "type": "size", "unit": "sectors", "value_1": 62545920, "value_2": 512 } ], "driver": "usb-storage", "driver_module": "usb_storage", "drivers": [ "sd", "usb-storage" ], "driver_modules": [ "sd_mod", "usb_storage" ], "module_alias": "usb:v05DCpA205d0A00dc00dsc00dp00ic08isc06ip50in00" } ], "graphics_card": [ { "index": 31, "attached_to": 0, "class_list": [ "graphics_card", "pci" ], "bus_type": { "hex": "0004", "name": "PCI", "value": 4 }, "slot": { "bus": 0, "number": 2 }, "base_class": { "hex": "0003", "name": "Display controller", "value": 3 }, "sub_class": { "hex": "0000", "name": "VGA compatible controller", "value": 0 }, "pci_interface": { "hex": "0000", "name": "VGA", "value": 0 }, "vendor": { "hex": "8086", "name": "Intel Corporation", "value": 32902 }, "sub_vendor": { "hex": "f111", "value": 61713 }, "device": { "hex": "a721", "value": 42785 }, "sub_device": { "hex": "000c", "value": 12 }, "revision": { "hex": "0004", "value": 4 }, "model": "Intel VGA compatible controller", "sysfs_id": "/devices/pci0000:00/0000:00:02.0", "sysfs_bus_id": "0000:00:02.0", "resources": [ { "type": "io", "base": 12288, "range": 64, "enabled": true, "access": "read_write" } ], "detail": { "function": 0, "command": 1031, "header_type": 0, "secondary_bus": 0, "prog_if": 0 }, "driver": "i915", "driver_module": "i915", "drivers": [ "i915" ], "driver_modules": [ "i915" ], "module_alias": "pci:v00008086d0000A721sv0000F111sd0000000Cbc03sc00i00" } ], "hub": [ { "index": 40, "attached_to": 32, "class_list": [ "usb", "hub" ], "bus_type": { "hex": "0086", "name": "USB", "value": 134 }, "slot": { "bus": 0, "number": 0 }, "base_class": { "hex": "010a", "name": "Hub", "value": 266 }, "vendor": { "hex": "1d6b", "name": "Linux 6.14.10 xhci-hcd", "value": 7531 }, "device": { "hex": "0002", "name": "xHCI Host Controller", "value": 2 }, "revision": { "hex": "0000", "name": "6.14", "value": 0 }, "serial": "0000:00:14.0", "model": "Linux 6.14.10 xhci-hcd xHCI Host Controller", "sysfs_id": "/devices/pci0000:00/0000:00:14.0/usb3/3-0:1.0", "sysfs_bus_id": "3-0:1.0", "resources": [ { "type": "baud", "speed": 480000000, "bits": 0, "stop_bits": 0, "parity": 0, "handshake": 0 } ], "detail": { "device_class": { "hex": "0009", "name": "hub", "value": 9 }, "device_subclass": { "hex": "0000", "name": "per_interface", "value": 0 }, "device_protocol": 1, "interface_class": { "hex": "0009", "name": "hub", "value": 9 }, "interface_subclass": { "hex": "0000", "name": "per_interface", "value": 0 }, "interface_protocol": 0, "interface_number": 0, "interface_alternate_setting": 0 }, "hotplug": "usb", "driver": "hub", "driver_module": "usbcore", "drivers": [ "hub" ], "driver_modules": [ "usbcore" ], "module_alias": "usb:v1D6Bp0002d0614dc09dsc00dp01ic09isc00ip00in00" }, { "index": 43, "attached_to": 32, "class_list": [ "usb", "hub" ], "bus_type": { "hex": "0086", "name": "USB", "value": 134 }, "slot": { "bus": 0, "number": 0 }, "base_class": { "hex": "010a", "name": "Hub", "value": 266 }, "vendor": { "hex": "1d6b", "name": "Linux 6.14.10 xhci-hcd", "value": 7531 }, "device": { "hex": "0003", "name": "xHCI Host Controller", "value": 3 }, "revision": { "hex": "0000", "name": "6.14", "value": 0 }, "serial": "0000:00:14.0", "model": "Linux 6.14.10 xhci-hcd xHCI Host Controller", "sysfs_id": "/devices/pci0000:00/0000:00:14.0/usb4/4-0:1.0", "sysfs_bus_id": "4-0:1.0", "detail": { "device_class": { "hex": "0009", "name": "hub", "value": 9 }, "device_subclass": { "hex": "0000", "name": "per_interface", "value": 0 }, "device_protocol": 3, "interface_class": { "hex": "0009", "name": "hub", "value": 9 }, "interface_subclass": { "hex": "0000", "name": "per_interface", "value": 0 }, "interface_protocol": 0, "interface_number": 0, "interface_alternate_setting": 0 }, "hotplug": "usb", "driver": "hub", "driver_module": "usbcore", "drivers": [ "hub" ], "driver_modules": [ "usbcore" ], "module_alias": "usb:v1D6Bp0003d0614dc09dsc00dp03ic09isc00ip00in00" }, { "index": 44, "attached_to": 17, "class_list": [ "usb", "hub" ], "bus_type": { "hex": "0086", "name": "USB", "value": 134 }, "slot": { "bus": 0, "number": 0 }, "base_class": { "hex": "010a", "name": "Hub", "value": 266 }, "vendor": { "hex": "1d6b", "name": "Linux 6.14.10 xhci-hcd", "value": 7531 }, "device": { "hex": "0002", "name": "xHCI Host Controller", "value": 2 }, "revision": { "hex": "0000", "name": "6.14", "value": 0 }, "serial": "0000:00:0d.0", "model": "Linux 6.14.10 xhci-hcd xHCI Host Controller", "sysfs_id": "/devices/pci0000:00/0000:00:0d.0/usb1/1-0:1.0", "sysfs_bus_id": "1-0:1.0", "resources": [ { "type": "baud", "speed": 480000000, "bits": 0, "stop_bits": 0, "parity": 0, "handshake": 0 } ], "detail": { "device_class": { "hex": "0009", "name": "hub", "value": 9 }, "device_subclass": { "hex": "0000", "name": "per_interface", "value": 0 }, "device_protocol": 1, "interface_class": { "hex": "0009", "name": "hub", "value": 9 }, "interface_subclass": { "hex": "0000", "name": "per_interface", "value": 0 }, "interface_protocol": 0, "interface_number": 0, "interface_alternate_setting": 0 }, "hotplug": "usb", "driver": "hub", "driver_module": "usbcore", "drivers": [ "hub" ], "driver_modules": [ "usbcore" ], "module_alias": "usb:v1D6Bp0002d0614dc09dsc00dp01ic09isc00ip00in00" }, { "index": 47, "attached_to": 17, "class_list": [ "usb", "hub" ], "bus_type": { "hex": "0086", "name": "USB", "value": 134 }, "slot": { "bus": 0, "number": 0 }, "base_class": { "hex": "010a", "name": "Hub", "value": 266 }, "vendor": { "hex": "1d6b", "name": "Linux 6.14.10 xhci-hcd", "value": 7531 }, "device": { "hex": "0003", "name": "xHCI Host Controller", "value": 3 }, "revision": { "hex": "0000", "name": "6.14", "value": 0 }, "serial": "0000:00:0d.0", "model": "Linux 6.14.10 xhci-hcd xHCI Host Controller", "sysfs_id": "/devices/pci0000:00/0000:00:0d.0/usb2/2-0:1.0", "sysfs_bus_id": "2-0:1.0", "detail": { "device_class": { "hex": "0009", "name": "hub", "value": 9 }, "device_subclass": { "hex": "0000", "name": "per_interface", "value": 0 }, "device_protocol": 3, "interface_class": { "hex": "0009", "name": "hub", "value": 9 }, "interface_subclass": { "hex": "0000", "name": "per_interface", "value": 0 }, "interface_protocol": 0, "interface_number": 0, "interface_alternate_setting": 0 }, "hotplug": "usb", "driver": "hub", "driver_module": "usbcore", "drivers": [ "hub" ], "driver_modules": [ "usbcore" ], "module_alias": "usb:v1D6Bp0003d0614dc09dsc00dp03ic09isc00ip00in00" } ], "memory": [ { "index": 15, "attached_to": 0, "class_list": [ "memory" ], "base_class": { "hex": "0101", "name": "Internally Used Class", "value": 257 }, "sub_class": { "hex": "0002", "name": "Main Memory", "value": 2 }, "model": "Main Memory", "resources": [ { "type": "phys_mem", "range": 51539607552 } ] } ], "monitor": [ { "index": 35, "attached_to": 31, "class_list": [ "monitor" ], "base_class": { "hex": "0100", "name": "Monitor", "value": 256 }, "sub_class": { "hex": "0002", "name": "LCD Monitor", "value": 2 }, "vendor": { "hex": "09e5", "name": "BOE CQ", "value": 2533 }, "device": { "hex": "0d56", "name": "NV122WUM-N42", "value": 3414 }, "serial": "0", "model": "BOE CQ NV122WUM-N42", "resources": [ { "type": "monitor", "width": 1920, "height": 1200, "vertical_frequency": 60, "interlaced": false }, { "type": "size", "unit": "mm", "value_1": 263, "value_2": 164 } ], "detail": { "manufacture_year": 2024, "manufacture_week": 39, "vertical_sync": { "min": 40, "max": 60 }, "horizontal_sync": { "min": 76, "max": 76 }, "horizontal_sync_timings": { "disp": 1920, "sync_start": 1968, "sync_end": 2000, "total": 2140 }, "vertical_sync_timings": { "disp": 1200, "sync_start": 1203, "sync_end": 1209, "total": 1260 }, "clock": 161790, "width": 1920, "height": 1200, "width_millimetres": 263, "height_millimetres": 164, "horizontal_flag": 45, "vertical_flag": 43, "vendor": "BOE CQ", "name": "NV122WUM-N42" }, "driver_info": { "type": "display", "width": 1920, "height": 1200, "vertical_sync": { "min": 40, "max": 60 }, "horizontal_sync": { "min": 76, "max": 76 }, "bandwidth": 0, "horizontal_sync_timings": { "disp": 1920, "sync_start": 1968, "sync_end": 2000, "total": 2140 }, "vertical_sync_timings": { "disp": 1200, "sync_start": 1203, "sync_end": 1209, "total": 1260 }, "horizontal_flag": 45, "vertical_flag": 43 } } ], "mouse": [ { "index": 50, "attached_to": 0, "bus_type": { "hex": "0081", "name": "serial", "value": 129 }, "base_class": { "hex": "0118", "name": "touchpad", "value": 280 }, "sub_class": { "hex": "0001", "name": "bus", "value": 1 }, "vendor": { "hex": "093a", "value": 2362 }, "device": { "hex": "0239", "value": 569 }, "sysfs_id": "/devices/pci0000:00/0000:00:19.0/i2c_designware.2/i2c-3/i2c-PIXA3854:00/0018:093A:0239.0002/input/input13", "unix_device_names": [ "/dev/input/event5", "/dev/input/ + handler" ] } ], "network_controller": [ { "index": 21, "attached_to": 0, "class_list": [ "network_controller", "pci", "wlan_card" ], "bus_type": { "hex": "0004", "name": "PCI", "value": 4 }, "slot": { "bus": 0, "number": 20 }, "base_class": { "hex": "0002", "name": "Network controller", "value": 2 }, "sub_class": { "hex": "0082", "name": "WLAN controller", "value": 130 }, "vendor": { "hex": "8086", "name": "Intel Corporation", "value": 32902 }, "sub_vendor": { "hex": "8086", "name": "Intel Corporation", "value": 32902 }, "device": { "hex": "51f1", "value": 20977 }, "sub_device": { "hex": "0094", "value": 148 }, "revision": { "hex": "0001", "value": 1 }, "model": "Intel WLAN controller", "sysfs_id": "/devices/pci0000:00/0000:00:14.3", "sysfs_bus_id": "0000:00:14.3", "unix_device_names": [ "wlan0" ], "resources": [ { "type": "hwaddr", "address": 52 }, { "type": "phwaddr", "address": 52 }, { "type": "wlan", "channels": [ "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "36", "40", "44", "48", "52", "56", "60", "64", "100", "104", "108", "112", "116", "120", "124", "128", "132", "136", "140" ], "frequencies": [ "2.412", "2.417", "2.422", "2.427", "2.432", "2.437", "2.442", "2.447", "2.452", "2.457", "2.462", "2.467", "2.472", "5.18", "5.2", "5.22", "5.24", "5.26", "5.28", "5.3", "5.32", "5.5", "5.52", "5.54", "5.56", "5.58", "5.6", "5.62", "5.64", "5.66", "5.68", "5.7" ], "auth_modes": [ "open", "sharedkey", "wpa-psk", "wpa-eap" ], "enc_modes": [ "WEP40", "WEP104", "TKIP", "CCMP" ] } ], "detail": { "function": 3, "command": 1030, "header_type": 0, "secondary_bus": 0, "prog_if": 0 }, "driver": "iwlwifi", "driver_module": "iwlwifi", "drivers": [ "iwlwifi" ], "driver_modules": [ "iwlwifi" ], "module_alias": "pci:v00008086d000051F1sv00008086sd00000094bc02sc80i00" } ], "network_interface": [ { "index": 48, "attached_to": 0, "class_list": [ "network_interface" ], "base_class": { "hex": "0107", "name": "Network Interface", "value": 263 }, "sub_class": { "hex": "0000", "name": "Loopback", "value": 0 }, "model": "Loopback network interface", "sysfs_id": "/class/net/lo", "unix_device_names": [ "lo" ] }, { "index": 49, "attached_to": 21, "class_list": [ "network_interface" ], "base_class": { "hex": "0107", "name": "Network Interface", "value": 263 }, "sub_class": { "hex": "000a", "name": "WLAN", "value": 10 }, "model": "WLAN network interface", "sysfs_id": "/class/net/wlan0", "sysfs_device_link": "/devices/pci0000:00/0000:00:14.3", "unix_device_names": [ "wlan0" ], "resources": [ { "type": "hwaddr", "address": 52 }, { "type": "phwaddr", "address": 52 } ], "driver": "iwlwifi", "driver_module": "iwlwifi", "drivers": [ "iwlwifi" ], "driver_modules": [ "iwlwifi" ] } ], "pci": [ { "index": 16, "attached_to": 0, "class_list": [ "pci", "unknown" ], "bus_type": { "hex": "0004", "name": "PCI", "value": 4 }, "slot": { "bus": 0, "number": 8 }, "base_class": { "hex": "0008", "name": "Generic system peripheral", "value": 8 }, "sub_class": { "hex": "0080", "name": "System peripheral", "value": 128 }, "vendor": { "hex": "8086", "name": "Intel Corporation", "value": 32902 }, "sub_vendor": { "hex": "f111", "value": 61713 }, "device": { "hex": "a74f", "value": 42831 }, "sub_device": { "hex": "000c", "value": 12 }, "revision": { "hex": "0001", "value": 1 }, "model": "Intel System peripheral", "sysfs_id": "/devices/pci0000:00/0000:00:08.0", "sysfs_bus_id": "0000:00:08.0", "detail": { "function": 0, "command": 6, "header_type": 0, "secondary_bus": 0, "prog_if": 0 }, "module_alias": "pci:v00008086d0000A74Fsv0000F111sd0000000Cbc08sc80i00" }, { "index": 18, "attached_to": 0, "class_list": [ "pci", "unknown" ], "bus_type": { "hex": "0004", "name": "PCI", "value": 4 }, "slot": { "bus": 0, "number": 21 }, "base_class": { "hex": "000c", "name": "Serial bus controller", "value": 12 }, "sub_class": { "hex": "0080", "value": 128 }, "vendor": { "hex": "8086", "name": "Intel Corporation", "value": 32902 }, "sub_vendor": { "hex": "f111", "value": 61713 }, "device": { "hex": "51e9", "value": 20969 }, "sub_device": { "hex": "000c", "value": 12 }, "revision": { "hex": "0001", "value": 1 }, "model": "Intel Serial bus controller", "sysfs_id": "/devices/pci0000:00/0000:00:15.1", "sysfs_bus_id": "0000:00:15.1", "detail": { "function": 1, "command": 6, "header_type": 0, "secondary_bus": 0, "prog_if": 0 }, "driver": "intel-lpss", "driver_module": "intel_lpss_pci", "drivers": [ "intel-lpss" ], "driver_modules": [ "intel_lpss_pci" ], "module_alias": "pci:v00008086d000051E9sv0000F111sd0000000Cbc0Csc80i00" }, { "index": 20, "attached_to": 0, "class_list": [ "pci", "unknown" ], "bus_type": { "hex": "0004", "name": "PCI", "value": 4 }, "slot": { "bus": 0, "number": 4 }, "base_class": { "hex": "0011", "name": "Signal processing controller", "value": 17 }, "sub_class": { "hex": "0080", "name": "Signal processing controller", "value": 128 }, "vendor": { "hex": "8086", "name": "Intel Corporation", "value": 32902 }, "sub_vendor": { "hex": "f111", "value": 61713 }, "device": { "hex": "a71d", "value": 42781 }, "sub_device": { "hex": "000c", "value": 12 }, "revision": { "hex": "0001", "value": 1 }, "model": "Intel Signal processing controller", "sysfs_id": "/devices/pci0000:00/0000:00:04.0", "sysfs_bus_id": "0000:00:04.0", "detail": { "function": 0, "command": 6, "header_type": 0, "secondary_bus": 0, "prog_if": 0 }, "driver": "proc_thermal_pci", "driver_module": "processor_thermal_device_pci", "drivers": [ "proc_thermal_pci" ], "driver_modules": [ "processor_thermal_device_pci" ], "module_alias": "pci:v00008086d0000A71Dsv0000F111sd0000000Cbc11sc80i00" }, { "index": 22, "attached_to": 0, "class_list": [ "pci", "unknown" ], "bus_type": { "hex": "0004", "name": "PCI", "value": 4 }, "slot": { "bus": 0, "number": 22 }, "base_class": { "hex": "0007", "name": "Communication controller", "value": 7 }, "sub_class": { "hex": "0080", "name": "Communication controller", "value": 128 }, "vendor": { "hex": "8086", "name": "Intel Corporation", "value": 32902 }, "sub_vendor": { "hex": "f111", "value": 61713 }, "device": { "hex": "51e0", "value": 20960 }, "sub_device": { "hex": "000c", "value": 12 }, "revision": { "hex": "0001", "value": 1 }, "model": "Intel Communication controller", "sysfs_id": "/devices/pci0000:00/0000:00:16.0", "sysfs_bus_id": "0000:00:16.0", "detail": { "function": 0, "command": 1030, "header_type": 0, "secondary_bus": 0, "prog_if": 0 }, "driver": "mei_me", "driver_module": "mei_me", "drivers": [ "mei_me" ], "driver_modules": [ "mei_me" ], "module_alias": "pci:v00008086d000051E0sv0000F111sd0000000Cbc07sc80i00" }, { "index": 24, "attached_to": 0, "class_list": [ "pci", "unknown" ], "bus_type": { "hex": "0004", "name": "PCI", "value": 4 }, "slot": { "bus": 0, "number": 31 }, "base_class": { "hex": "000c", "name": "Serial bus controller", "value": 12 }, "sub_class": { "hex": "0080", "value": 128 }, "vendor": { "hex": "8086", "name": "Intel Corporation", "value": 32902 }, "sub_vendor": { "hex": "f111", "value": 61713 }, "device": { "hex": "51a4", "value": 20900 }, "sub_device": { "hex": "000c", "value": 12 }, "revision": { "hex": "0001", "value": 1 }, "model": "Intel Serial bus controller", "sysfs_id": "/devices/pci0000:00/0000:00:1f.5", "sysfs_bus_id": "0000:00:1f.5", "detail": { "function": 5, "command": 1030, "header_type": 0, "secondary_bus": 0, "prog_if": 0 }, "driver": "intel-spi", "driver_module": "spi_intel_pci", "drivers": [ "intel-spi" ], "driver_modules": [ "spi_intel_pci" ], "module_alias": "pci:v00008086d000051A4sv0000F111sd0000000Cbc0Csc80i00" }, { "index": 25, "attached_to": 0, "class_list": [ "pci", "unknown" ], "bus_type": { "hex": "0004", "name": "PCI", "value": 4 }, "slot": { "bus": 0, "number": 25 }, "base_class": { "hex": "000c", "name": "Serial bus controller", "value": 12 }, "sub_class": { "hex": "0080", "value": 128 }, "vendor": { "hex": "8086", "name": "Intel Corporation", "value": 32902 }, "sub_vendor": { "hex": "f111", "value": 61713 }, "device": { "hex": "51c5", "value": 20933 }, "sub_device": { "hex": "000c", "value": 12 }, "revision": { "hex": "0001", "value": 1 }, "model": "Intel Serial bus controller", "sysfs_id": "/devices/pci0000:00/0000:00:19.0", "sysfs_bus_id": "0000:00:19.0", "detail": { "function": 0, "command": 6, "header_type": 0, "secondary_bus": 0, "prog_if": 0 }, "driver": "intel-lpss", "driver_module": "intel_lpss_pci", "drivers": [ "intel-lpss" ], "driver_modules": [ "intel_lpss_pci" ], "module_alias": "pci:v00008086d000051C5sv0000F111sd0000000Cbc0Csc80i00" }, { "index": 28, "attached_to": 0, "class_list": [ "pci", "unknown" ], "bus_type": { "hex": "0004", "name": "PCI", "value": 4 }, "slot": { "bus": 0, "number": 21 }, "base_class": { "hex": "000c", "name": "Serial bus controller", "value": 12 }, "sub_class": { "hex": "0080", "value": 128 }, "vendor": { "hex": "8086", "name": "Intel Corporation", "value": 32902 }, "sub_vendor": { "hex": "f111", "value": 61713 }, "device": { "hex": "51e8", "value": 20968 }, "sub_device": { "hex": "000c", "value": 12 }, "revision": { "hex": "0001", "value": 1 }, "model": "Intel Serial bus controller", "sysfs_id": "/devices/pci0000:00/0000:00:15.0", "sysfs_bus_id": "0000:00:15.0", "detail": { "function": 0, "command": 6, "header_type": 0, "secondary_bus": 0, "prog_if": 0 }, "driver": "intel-lpss", "driver_module": "intel_lpss_pci", "drivers": [ "intel-lpss" ], "driver_modules": [ "intel_lpss_pci" ], "module_alias": "pci:v00008086d000051E8sv0000F111sd0000000Cbc0Csc80i00" }, { "index": 30, "attached_to": 0, "class_list": [ "pci", "unknown" ], "bus_type": { "hex": "0004", "name": "PCI", "value": 4 }, "slot": { "bus": 0, "number": 20 }, "base_class": { "hex": "0005", "name": "Memory controller", "value": 5 }, "sub_class": { "hex": "0000", "name": "RAM memory", "value": 0 }, "vendor": { "hex": "8086", "name": "Intel Corporation", "value": 32902 }, "sub_vendor": { "hex": "f111", "value": 61713 }, "device": { "hex": "51ef", "value": 20975 }, "sub_device": { "hex": "000c", "value": 12 }, "revision": { "hex": "0001", "value": 1 }, "model": "Intel RAM memory", "sysfs_id": "/devices/pci0000:00/0000:00:14.2", "sysfs_bus_id": "0000:00:14.2", "detail": { "function": 2, "command": 6, "header_type": 0, "secondary_bus": 0, "prog_if": 0 }, "module_alias": "pci:v00008086d000051EFsv0000F111sd0000000Cbc05sc00i00" }, { "index": 33, "attached_to": 0, "class_list": [ "pci", "unknown" ], "bus_type": { "hex": "0004", "name": "PCI", "value": 4 }, "slot": { "bus": 0, "number": 31 }, "base_class": { "hex": "000c", "name": "Serial bus controller", "value": 12 }, "sub_class": { "hex": "0005", "name": "SMBus", "value": 5 }, "vendor": { "hex": "8086", "name": "Intel Corporation", "value": 32902 }, "sub_vendor": { "hex": "f111", "value": 61713 }, "device": { "hex": "51a3", "value": 20899 }, "sub_device": { "hex": "000c", "value": 12 }, "revision": { "hex": "0001", "value": 1 }, "model": "Intel SMBus", "sysfs_id": "/devices/pci0000:00/0000:00:1f.4", "sysfs_bus_id": "0000:00:1f.4", "resources": [ { "type": "io", "base": 61344, "range": 32, "enabled": true, "access": "read_write" } ], "detail": { "function": 4, "command": 3, "header_type": 0, "secondary_bus": 0, "prog_if": 0 }, "driver": "i801_smbus", "driver_module": "i2c_i801", "drivers": [ "i801_smbus" ], "driver_modules": [ "i2c_i801" ], "module_alias": "pci:v00008086d000051A3sv0000F111sd0000000Cbc0Csc05i00" }, { "index": 34, "attached_to": 0, "class_list": [ "pci", "unknown" ], "bus_type": { "hex": "0004", "name": "PCI", "value": 4 }, "slot": { "bus": 0, "number": 10 }, "base_class": { "hex": "0011", "name": "Signal processing controller", "value": 17 }, "sub_class": { "hex": "0080", "name": "Signal processing controller", "value": 128 }, "vendor": { "hex": "8086", "name": "Intel Corporation", "value": 32902 }, "sub_vendor": { "hex": "f111", "value": 61713 }, "device": { "hex": "a77d", "value": 42877 }, "sub_device": { "hex": "000c", "value": 12 }, "revision": { "hex": "0001", "value": 1 }, "model": "Intel Signal processing controller", "sysfs_id": "/devices/pci0000:00/0000:00:0a.0", "sysfs_bus_id": "0000:00:0a.0", "detail": { "function": 0, "command": 2, "header_type": 0, "secondary_bus": 0, "prog_if": 0 }, "driver": "intel_vsec", "driver_module": "intel_vsec", "drivers": [ "intel_vsec" ], "driver_modules": [ "intel_vsec" ], "module_alias": "pci:v00008086d0000A77Dsv0000F111sd0000000Cbc11sc80i00" } ], "sound": [ { "index": 26, "attached_to": 0, "class_list": [ "sound", "pci" ], "bus_type": { "hex": "0004", "name": "PCI", "value": 4 }, "slot": { "bus": 0, "number": 31 }, "base_class": { "hex": "0004", "name": "Multimedia controller", "value": 4 }, "sub_class": { "hex": "0003", "value": 3 }, "pci_interface": { "hex": "0080", "value": 128 }, "vendor": { "hex": "8086", "name": "Intel Corporation", "value": 32902 }, "sub_vendor": { "hex": "f111", "value": 61713 }, "device": { "hex": "51ca", "value": 20938 }, "sub_device": { "hex": "000c", "value": 12 }, "revision": { "hex": "0001", "value": 1 }, "model": "Intel Multimedia controller", "sysfs_id": "/devices/pci0000:00/0000:00:1f.3", "sysfs_bus_id": "0000:00:1f.3", "detail": { "function": 3, "command": 1030, "header_type": 0, "secondary_bus": 0, "prog_if": 128 }, "driver": "snd_hda_intel", "driver_module": "snd_hda_intel", "drivers": [ "snd_hda_intel" ], "driver_modules": [ "snd_hda_intel" ], "module_alias": "pci:v00008086d000051CAsv0000F111sd0000000Cbc04sc03i80" } ], "storage_controller": [ { "index": 23, "attached_to": 29, "class_list": [ "storage_controller", "pci" ], "bus_type": { "hex": "0004", "name": "PCI", "value": 4 }, "slot": { "bus": 1, "number": 0 }, "base_class": { "hex": "0001", "name": "Mass storage controller", "value": 1 }, "sub_class": { "hex": "0008", "value": 8 }, "pci_interface": { "hex": "0002", "value": 2 }, "vendor": { "hex": "15b7", "value": 5559 }, "sub_vendor": { "hex": "15b7", "value": 5559 }, "device": { "hex": "5042", "value": 20546 }, "sub_device": { "hex": "5042", "value": 20546 }, "revision": { "hex": "0001", "value": 1 }, "model": "Mass storage controller", "sysfs_id": "/devices/pci0000:00/0000:00:06.0/0000:01:00.0", "sysfs_bus_id": "0000:01:00.0", "detail": { "function": 0, "command": 1031, "header_type": 0, "secondary_bus": 0, "prog_if": 2 }, "driver": "nvme", "driver_module": "nvme", "drivers": [ "nvme" ], "driver_modules": [ "nvme" ], "module_alias": "pci:v000015B7d00005042sv000015B7sd00005042bc01sc08i02" } ], "system": { "form_factor": "laptop" }, "usb": [ { "index": 46, "attached_to": 40, "class_list": [ "usb", "unknown" ], "bus_type": { "hex": "0086", "name": "USB", "value": 134 }, "slot": { "bus": 0, "number": 0 }, "base_class": { "hex": "0000", "name": "Unclassified device", "value": 0 }, "sub_class": { "hex": "0000", "name": "Unclassified device", "value": 0 }, "vendor": { "hex": "32ac", "name": "Framework", "value": 12972 }, "device": { "hex": "001d", "name": "Framework Laptop 12 Webcam Module", "value": 29 }, "revision": { "hex": "0000", "name": "0.16", "value": 0 }, "serial": "0001", "model": "Framework Laptop 12 Webcam Module", "sysfs_id": "/devices/pci0000:00/0000:00:14.0/usb3/3-7/3-7:1.2", "sysfs_bus_id": "3-7:1.2", "resources": [ { "type": "baud", "speed": 480000000, "bits": 0, "stop_bits": 0, "parity": 0, "handshake": 0 } ], "detail": { "device_class": { "hex": "00ef", "name": "miscellaneous", "value": 239 }, "device_subclass": { "hex": "0002", "name": "comm", "value": 2 }, "device_protocol": 1, "interface_class": { "hex": "00fe", "name": "application", "value": 254 }, "interface_subclass": { "hex": "0001", "name": "audio", "value": 1 }, "interface_protocol": 1, "interface_number": 2, "interface_alternate_setting": 0, "interface_association": { "function_class": { "hex": "00fe", "name": "application", "value": 254 }, "function_subclass": { "hex": "0001", "name": "audio", "value": 1 }, "function_protocol": 0, "interface_count": 1, "first_interface": 2 } }, "hotplug": "usb", "module_alias": "usb:v32ACp001Dd0016dcEFdsc02dp01icFEisc01ip01in02" } ], "usb_controller": [ { "index": 17, "attached_to": 0, "class_list": [ "usb_controller", "pci" ], "bus_type": { "hex": "0004", "name": "PCI", "value": 4 }, "slot": { "bus": 0, "number": 13 }, "base_class": { "hex": "000c", "name": "Serial bus controller", "value": 12 }, "sub_class": { "hex": "0003", "name": "USB Controller", "value": 3 }, "pci_interface": { "hex": "0030", "value": 48 }, "vendor": { "hex": "8086", "name": "Intel Corporation", "value": 32902 }, "sub_vendor": { "hex": "f111", "value": 61713 }, "device": { "hex": "a71e", "value": 42782 }, "sub_device": { "hex": "000c", "value": 12 }, "revision": { "hex": "0001", "value": 1 }, "model": "Intel USB Controller", "sysfs_id": "/devices/pci0000:00/0000:00:0d.0", "sysfs_bus_id": "0000:00:0d.0", "detail": { "function": 0, "command": 1030, "header_type": 0, "secondary_bus": 0, "prog_if": 48 }, "driver": "xhci_hcd", "driver_module": "xhci_pci", "drivers": [ "xhci_hcd" ], "driver_modules": [ "xhci_pci" ], "module_alias": "pci:v00008086d0000A71Esv0000F111sd0000000Cbc0Csc03i30" }, { "index": 32, "attached_to": 0, "class_list": [ "usb_controller", "pci" ], "bus_type": { "hex": "0004", "name": "PCI", "value": 4 }, "slot": { "bus": 0, "number": 20 }, "base_class": { "hex": "000c", "name": "Serial bus controller", "value": 12 }, "sub_class": { "hex": "0003", "name": "USB Controller", "value": 3 }, "pci_interface": { "hex": "0030", "value": 48 }, "vendor": { "hex": "8086", "name": "Intel Corporation", "value": 32902 }, "sub_vendor": { "hex": "f111", "value": 61713 }, "device": { "hex": "51ed", "value": 20973 }, "sub_device": { "hex": "000c", "value": 12 }, "revision": { "hex": "0001", "value": 1 }, "model": "Intel USB Controller", "sysfs_id": "/devices/pci0000:00/0000:00:14.0", "sysfs_bus_id": "0000:00:14.0", "detail": { "function": 0, "command": 1026, "header_type": 0, "secondary_bus": 0, "prog_if": 48 }, "driver": "xhci_hcd", "driver_module": "xhci_pci", "drivers": [ "xhci_hcd" ], "driver_modules": [ "xhci_pci" ], "module_alias": "pci:v00008086d000051EDsv0000F111sd0000000Cbc0Csc03i30" } ] }, "smbios": { "bios": { "handle": 0, "vendor": "INSYDE Corp.", "version": "03.03", "date": "06/05/2025", "features": [ "PCI supported", "BIOS flashable", "BIOS shadowing allowed", "CD boot supported", "Selectable boot supported", "8042 Keyboard Services supported", "CGA/Mono Video supported", "ACPI supported", "USB Legacy supported", "BIOS Boot Spec supported" ], "start_address": "0xe0000", "rom_size": 16777216 }, "board": { "handle": 2, "manufacturer": "Framework", "product": "FRAPMACP05", "version": "A5", "board_type": { "hex": "000a", "name": "Motherboard", "value": 10 }, "features": [ "Hosting Board", "Replaceable" ], "location": "*", "chassis": 3 }, "cache": [ { "handle": 5, "socket": "L1 Cache", "size_max": 96, "size_current": 96, "speed": 0, "mode": { "hex": "0001", "name": "Write Back", "value": 1 }, "enabled": true, "location": { "hex": "0000", "name": "Internal", "value": 0 }, "socketed": false, "level": 0, "ecc": { "hex": "0004", "name": "Parity", "value": 4 }, "cache_type": { "hex": "0004", "name": "Data", "value": 4 }, "associativity": { "hex": "0009", "name": "Other", "value": 9 }, "sram_type_current": [ "Synchronous" ], "sram_type_supported": [ "Synchronous" ] }, { "handle": 6, "socket": "L1 Cache", "size_max": 64, "size_current": 64, "speed": 0, "mode": { "hex": "0001", "name": "Write Back", "value": 1 }, "enabled": true, "location": { "hex": "0000", "name": "Internal", "value": 0 }, "socketed": false, "level": 0, "ecc": { "hex": "0004", "name": "Parity", "value": 4 }, "cache_type": { "hex": "0003", "name": "Instruction", "value": 3 }, "associativity": { "hex": "0007", "name": "8-way Set-Associative", "value": 7 }, "sram_type_current": [ "Synchronous" ], "sram_type_supported": [ "Synchronous" ] }, { "handle": 7, "socket": "L2 Cache", "size_max": 2560, "size_current": 2560, "speed": 0, "mode": { "hex": "0001", "name": "Write Back", "value": 1 }, "enabled": true, "location": { "hex": "0000", "name": "Internal", "value": 0 }, "socketed": false, "level": 1, "ecc": { "hex": "0005", "name": "Single-bit", "value": 5 }, "cache_type": { "hex": "0005", "name": "Unified", "value": 5 }, "associativity": { "hex": "0001", "name": "Other", "value": 1 }, "sram_type_current": [ "Synchronous" ], "sram_type_supported": [ "Synchronous" ] }, { "handle": 8, "socket": "L3 Cache", "size_max": 12288, "size_current": 12288, "speed": 0, "mode": { "hex": "0001", "name": "Write Back", "value": 1 }, "enabled": true, "location": { "hex": "0000", "name": "Internal", "value": 0 }, "socketed": false, "level": 2, "ecc": { "hex": "0006", "name": "Multi-bit", "value": 6 }, "cache_type": { "hex": "0005", "name": "Unified", "value": 5 }, "associativity": { "hex": "0009", "name": "Other", "value": 9 }, "sram_type_current": [ "Synchronous" ], "sram_type_supported": [ "Synchronous" ] }, { "handle": 9, "socket": "L1 Cache", "size_max": 256, "size_current": 256, "speed": 0, "mode": { "hex": "0001", "name": "Write Back", "value": 1 }, "enabled": true, "location": { "hex": "0000", "name": "Internal", "value": 0 }, "socketed": false, "level": 0, "ecc": { "hex": "0004", "name": "Parity", "value": 4 }, "cache_type": { "hex": "0004", "name": "Data", "value": 4 }, "associativity": { "hex": "0007", "name": "8-way Set-Associative", "value": 7 }, "sram_type_current": [ "Synchronous" ], "sram_type_supported": [ "Synchronous" ] }, { "handle": 10, "socket": "L1 Cache", "size_max": 512, "size_current": 512, "speed": 0, "mode": { "hex": "0001", "name": "Write Back", "value": 1 }, "enabled": true, "location": { "hex": "0000", "name": "Internal", "value": 0 }, "socketed": false, "level": 0, "ecc": { "hex": "0004", "name": "Parity", "value": 4 }, "cache_type": { "hex": "0003", "name": "Instruction", "value": 3 }, "associativity": { "hex": "0007", "name": "8-way Set-Associative", "value": 7 }, "sram_type_current": [ "Synchronous" ], "sram_type_supported": [ "Synchronous" ] }, { "handle": 11, "socket": "L2 Cache", "size_max": 4096, "size_current": 4096, "speed": 0, "mode": { "hex": "0001", "name": "Write Back", "value": 1 }, "enabled": true, "location": { "hex": "0000", "name": "Internal", "value": 0 }, "socketed": false, "level": 1, "ecc": { "hex": "0005", "name": "Single-bit", "value": 5 }, "cache_type": { "hex": "0005", "name": "Unified", "value": 5 }, "associativity": { "hex": "0008", "name": "16-way Set-Associative", "value": 8 }, "sram_type_current": [ "Synchronous" ], "sram_type_supported": [ "Synchronous" ] }, { "handle": 12, "socket": "L3 Cache", "size_max": 12288, "size_current": 12288, "speed": 0, "mode": { "hex": "0001", "name": "Write Back", "value": 1 }, "enabled": true, "location": { "hex": "0000", "name": "Internal", "value": 0 }, "socketed": false, "level": 2, "ecc": { "hex": "0006", "name": "Multi-bit", "value": 6 }, "cache_type": { "hex": "0005", "name": "Unified", "value": 5 }, "associativity": { "hex": "0009", "name": "Other", "value": 9 }, "sram_type_current": [ "Synchronous" ], "sram_type_supported": [ "Synchronous" ] } ], "chassis": [ { "handle": 3, "manufacturer": "Framework", "version": "A5", "chassis_type": { "hex": "001f", "name": "Other", "value": 31 }, "lock_present": false, "bootup_state": { "hex": "0003", "name": "Safe", "value": 3 }, "power_state": { "hex": "0003", "name": "Safe", "value": 3 }, "thermal_state": { "hex": "0003", "name": "Safe", "value": 3 }, "security_state": { "hex": "0003", "name": "None", "value": 3 }, "oem": "0x0" } ], "config": { "handle": 20, "options": [ "ConfigOptions1", "ConfigOptions2", "ConfigOptions3" ] }, "group_associations": [ { "handle": 22, "name": "$MEI", "handles": [ 43 ] }, { "handle": 50, "name": "Firmware Version Info", "handles": [ 193273528364, 197568495661, 201863462958, 206158430255, 210453397552, 158913790001 ] }, { "handle": 30, "power": { "hex": "0000", "name": "Disabled", "value": 0 }, "keyboard": { "hex": "0002", "name": "Not Implemented", "value": 2 }, "admin": { "hex": "0000", "name": "Disabled", "value": 0 }, "reset": { "hex": "0002", "name": "Not Implemented", "value": 2 } } ], "language": [ { "handle": 21, "languages": [ "en|US|iso8859-1,0", "fr|FR|iso8859-1,0", "zh|TW|unicode,0", "ja|JP|unicode,0" ] } ], "memory_array": [ { "handle": 24, "location": { "hex": "0003", "name": "Motherboard", "value": 3 }, "usage": { "hex": "0003", "name": "System memory", "value": 3 }, "ecc": { "hex": "0003", "name": "None", "value": 3 }, "max_size": "0x3000000", "error_handle": 65534, "slots": 1 } ], "memory_array_mapped_address": [ { "handle": 26, "array_handle": 24, "start_address": "0x0", "end_address": "0xc00000000", "part_width": 1 } ], "memory_device": [ { "handle": 25, "location": "Controller0-ChannelA-DIMM0", "bank_location": "BANK 0", "manufacturer": "A-DATA Technology", "part_number": "AD5S560048G-SF2", "array_handle": 24, "error_handle": 65534, "width": 64, "ecc_bits": 0, "size": 50331648, "form_factor": { "hex": "000d", "name": "SODIMM", "value": 13 }, "set": 0, "memory_type": { "hex": "0022", "name": "Other", "value": 34 }, "memory_type_details": [ "Synchronous" ], "speed": 5600 } ], "memory_device_mapped_address": [ { "handle": 27, "memory_device_handle": 25, "array_map_handle": 26, "start_address": "0x0", "end_address": "0xc00000000", "row_position": 255, "interleave_position": 1, "interleave_depth": 1 } ], "pointing_device": [ { "handle": 28, "mouse_type": { "hex": "0007", "name": "Touch Pad", "value": 7 }, "interface": { "hex": "0004", "name": "PS/2", "value": 4 }, "buttons": 4 } ], "port_connector": [ { "handle": 13, "port_type": { "hex": "0010", "name": "USB", "value": 16 }, "internal_reference_designator": "JTYPEC0", "external_connector_type": { "hex": "0012", "name": "Access Bus [USB]", "value": 18 }, "external_reference_designator": "USB" }, { "handle": 14, "port_type": { "hex": "0010", "name": "USB", "value": 16 }, "internal_reference_designator": "JTYPEC1", "external_connector_type": { "hex": "0012", "name": "Access Bus [USB]", "value": 18 }, "external_reference_designator": "USB" }, { "handle": 15, "port_type": { "hex": "0010", "name": "USB", "value": 16 }, "internal_reference_designator": "JTYPEC2", "external_connector_type": { "hex": "0012", "name": "Access Bus [USB]", "value": 18 }, "external_reference_designator": "USB" }, { "handle": 16, "port_type": { "hex": "0010", "name": "USB", "value": 16 }, "internal_reference_designator": "JTYPEC3", "external_connector_type": { "hex": "0012", "name": "Access Bus [USB]", "value": 18 }, "external_reference_designator": "USB" } ], "processor": [ { "handle": 4, "socket": "U3E1", "socket_type": { "hex": "0041", "name": "Other", "value": 65 }, "socket_populated": true, "manufacturer": "Intel(R) Corporation", "version": "13th Gen Intel(R) Core(TM) i5-1334U", "part": "To Be Filled By O.E.M.", "processor_type": { "hex": "0003", "name": "CPU", "value": 3 }, "processor_family": { "hex": "00cd", "name": "Other", "value": 205 }, "processor_status": { "hex": "0001", "name": "Enabled", "value": 1 }, "clock_ext": 100, "clock_max": 4600, "cache_handle_l1": 10, "cache_handle_l2": 11, "cache_handle_l3": 12 } ], "slot": [ { "handle": 17, "designation": "JWLAN", "slot_type": { "hex": "0015", "name": "Other", "value": 21 }, "bus_width": { "hex": "0008", "name": "Other", "value": 8 }, "usage": { "hex": "0003", "name": "Available", "value": 3 }, "length": { "hex": "0001", "name": "Other", "value": 1 }, "id": 1, "features": [ "PME#" ] }, { "handle": 18, "designation": "JSSD", "slot_type": { "hex": "0016", "name": "Other", "value": 22 }, "bus_width": { "hex": "000a", "name": "Other", "value": 10 }, "usage": { "hex": "0004", "name": "In Use", "value": 4 }, "length": { "hex": "0001", "name": "Other", "value": 1 }, "id": 2, "features": [ "PME#" ] } ], "system": { "handle": 1, "manufacturer": "Framework", "product": "Laptop 12 (13th Gen Intel Core)", "version": "A5", "wake_up": { "hex": "0006", "name": "Power Switch", "value": 6 } } } } ================================================ FILE: configurations/nixos/work/default.nix ================================================ # NixOS configuration for work { flake, pkgs, ... }: let inherit (flake) self; in { imports = [ # Internal modules via flake outputs self.nixosModules.default self.nixosModules.users-bbigras self.nixosModules.pam-limits self.nixosModules.hardware-nonsecureboot self.nixosModules.services-podman self.nixosModules.services-virt-manager # Host-specific files # ./state.nix { config.facter.reportPath = ./facter.json; } ]; # Host-specific home-manager user config home-manager.users.bbigras.imports = [ self.homeModules.trusted ]; # SSH target for remote activation # Platform nixpkgs.hostPlatform = "x86_64-linux"; # Host-specific configuration boot = { initrd = { systemd.enable = true; }; plymouth.enable = true; }; environment.systemPackages = with pkgs; [ cntr wireguard-tools ]; fileSystems."/" = { device = "/dev/disk/by-uuid/ccb4db0b-1cb8-4d5f-be9a-8b20a5c63982"; fsType = "btrfs"; options = [ "subvol=nixos" "compress=zstd" ]; }; # agenix-rekey host pubkey age.rekey.hostPubkey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKEfhY66gBDU0xgjaQgm9V991wuxI/R3bm3Yt6Kdv9Au"; networking = { # hostId = ""; hostName = "bbigras-work"; wireguard.enable = true; }; # nix.settings.max-substitution-jobs = 32; security.sudo.wheelNeedsPassword = true; services = { fwupd.enable = true; udisks2.enable = true; tuned = { enable = true; ppdSupport = false; recommend = { balanced = { }; }; }; }; } ================================================ FILE: configurations/nixos/work/facter.json ================================================ { "version": 1, "system": "x86_64-linux", "virtualisation": "none", "hardware": { "bios": { "apm_info": { "supported": false, "enabled": false, "version": 0, "sub_version": 0, "bios_flags": 0 }, "vbe_info": { "version": 0, "video_memory": 0 }, "pnp": true, "pnp_id": 0, "lba_support": false, "low_memory_size": 645120, "smbios_version": 520 }, "bridge": [ { "index": 9, "attached_to": 0, "class_list": [ "pci", "bridge" ], "bus_type": { "hex": "0004", "name": "PCI", "value": 4 }, "slot": { "bus": 0, "number": 28 }, "base_class": { "hex": "0006", "name": "Bridge", "value": 6 }, "sub_class": { "hex": "0004", "name": "PCI bridge", "value": 4 }, "pci_interface": { "hex": "0000", "name": "Normal decode", "value": 0 }, "vendor": { "hex": "8086", "name": "Intel Corporation", "value": 32902 }, "sub_vendor": { "hex": "17aa", "value": 6058 }, "device": { "hex": "8c10", "value": 35856 }, "sub_device": { "hex": "30a3", "value": 12451 }, "revision": { "hex": "00d4", "value": 212 }, "model": "Intel PCI bridge", "sysfs_id": "/devices/pci0000:00/0000:00:1c.0", "sysfs_bus_id": "0000:00:1c.0", "resources": [ { "type": "irq", "base": 24, "triggered": 0, "enabled": true } ], "detail": { "function": 0, "command": 1031, "header_type": 1, "secondary_bus": 1, "irq": 24, "prog_if": 0 }, "driver": "pcieport", "drivers": [ "pcieport" ], "module_alias": "pci:v00008086d00008C10sv000017AAsd000030A3bc06sc04i00" }, { "index": 10, "attached_to": 0, "class_list": [ "pci", "bridge" ], "bus_type": { "hex": "0004", "name": "PCI", "value": 4 }, "slot": { "bus": 0, "number": 31 }, "base_class": { "hex": "0006", "name": "Bridge", "value": 6 }, "sub_class": { "hex": "0001", "name": "ISA bridge", "value": 1 }, "vendor": { "hex": "8086", "name": "Intel Corporation", "value": 32902 }, "sub_vendor": { "hex": "17aa", "value": 6058 }, "device": { "hex": "8c4e", "value": 35918 }, "sub_device": { "hex": "30a3", "value": 12451 }, "revision": { "hex": "0004", "value": 4 }, "model": "Intel ISA bridge", "sysfs_id": "/devices/pci0000:00/0000:00:1f.0", "sysfs_bus_id": "0000:00:1f.0", "detail": { "function": 0, "command": 7, "header_type": 0, "secondary_bus": 0, "irq": 0, "prog_if": 0 }, "driver": "lpc_ich", "driver_module": "lpc_ich", "drivers": [ "lpc_ich" ], "driver_modules": [ "lpc_ich" ], "module_alias": "pci:v00008086d00008C4Esv000017AAsd000030A3bc06sc01i00" }, { "index": 15, "attached_to": 0, "class_list": [ "pci", "bridge" ], "bus_type": { "hex": "0004", "name": "PCI", "value": 4 }, "slot": { "bus": 0, "number": 0 }, "base_class": { "hex": "0006", "name": "Bridge", "value": 6 }, "sub_class": { "hex": "0000", "name": "Host bridge", "value": 0 }, "vendor": { "hex": "8086", "name": "Intel Corporation", "value": 32902 }, "sub_vendor": { "hex": "17aa", "value": 6058 }, "device": { "hex": "0c00", "value": 3072 }, "sub_device": { "hex": "30a3", "value": 12451 }, "revision": { "hex": "0006", "value": 6 }, "model": "Intel Host bridge", "sysfs_id": "/devices/pci0000:00/0000:00:00.0", "sysfs_bus_id": "0000:00:00.0", "detail": { "function": 0, "command": 6, "header_type": 0, "secondary_bus": 0, "irq": 0, "prog_if": 0 }, "driver": "hsw_uncore", "driver_module": "intel_uncore", "drivers": [ "hsw_uncore" ], "driver_modules": [ "intel_uncore" ], "module_alias": "pci:v00008086d00000C00sv000017AAsd000030A3bc06sc00i00" } ], "cpu": [ { "architecture": "x86_64", "vendor_name": "GenuineIntel", "model_name": "Intel(R) Core(TM) i5-4570T CPU @ 2.90GHz", "family": 6, "model": 60, "stepping": 3, "features": [ "fpu", "vme", "de", "pse", "tsc", "msr", "pae", "mce", "cx8", "apic", "sep", "mtrr", "pge", "mca", "cmov", "pat", "pse36", "clflush", "dts", "acpi", "mmx", "fxsr", "sse", "sse2", "ss", "ht", "tm", "pbe", "syscall", "nx", "pdpe1gb", "rdtscp", "lm", "constant_tsc", "arch_perfmon", "pebs", "bts", "rep_good", "nopl", "xtopology", "nonstop_tsc", "cpuid", "aperfmperf", "pni", "pclmulqdq", "dtes64", "monitor", "ds_cpl", "vmx", "smx", "est", "tm2", "ssse3", "sdbg", "fma", "cx16", "xtpr", "pdcm", "pcid", "sse4_1", "sse4_2", "x2apic", "movbe", "popcnt", "tsc_deadline_timer", "aes", "xsave", "avx", "f16c", "rdrand", "lahf_lm", "abm", "cpuid_fault", "epb", "pti", "ssbd", "ibrs", "ibpb", "stibp", "tpr_shadow", "flexpriority", "ept", "vpid", "ept_ad", "fsgsbase", "tsc_adjust", "bmi1", "avx2", "smep", "bmi2", "erms", "invpcid", "xsaveopt", "dtherm", "ida", "arat", "pln", "pts", "vnmi", "md_clear", "flush_l1d" ], "bugs": [ "cpu_meltdown", "spectre_v1", "spectre_v2", "spec_store_bypass", "l1tf", "mds", "swapgs", "itlb_multihit", "srbds", "mmio_unknown" ], "power_management": [ "" ], "bogo": 5787.12, "cache": 4096, "units": 16, "physical_id": 0, "siblings": 4, "cores": 2, "fpu": false, "fpu_exception": false, "cpuid_level": 13, "write_protect": false, "clflush_size": 64, "cache_alignment": 64, "address_sizes": { "physical": "0x27", "virtual": "0x30" } } ], "disk": [ { "index": 23, "attached_to": 8, "class_list": [ "disk", "ide", "block_device" ], "bus_type": { "hex": "0085", "name": "IDE", "value": 133 }, "slot": { "bus": 0, "number": 0 }, "base_class": { "hex": "0106", "name": "Mass Storage Device", "value": 262 }, "sub_class": { "hex": "0000", "name": "Disk", "value": 0 }, "device": { "hex": "0000", "name": "HFS500G32TND-N1A", "value": 0 }, "revision": { "hex": "0000", "name": "0P10", "value": 0 }, "serial": "FJ71N506410501D45", "model": "HFS500G32TND-N1A", "sysfs_id": "/class/block/sda", "sysfs_bus_id": "0:0:0:0", "sysfs_device_link": "/devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0/0:0:0:0", "unix_device_name": "/dev/sda", "unix_device_number": { "type": 98, "major": 8, "minor": 0, "range": 16 }, "unix_device_names": [ "/dev/disk/by-id/ata-HFS500G32TND-N1A2A_FJ71N506410501D45", "/dev/disk/by-path/pci-0000:00:1f.2-ata-1", "/dev/disk/by-path/pci-0000:00:1f.2-ata-1.0", "/dev/sda" ], "rom_id": "0x80", "resources": [ { "type": "disk_geo", "cylinders": 60801, "heads": 255, "sectors": 63, "size": "0x0", "geo_type": "logical" }, { "type": "size", "unit": "sectors", "value_1": 976773168, "value_2": 512 } ], "driver": "ahci", "driver_module": "ahci", "drivers": [ "ahci", "sd" ], "driver_modules": [ "ahci", "sd_mod" ] } ], "graphics_card": [ { "index": 20, "attached_to": 0, "class_list": [ "graphics_card", "pci" ], "bus_type": { "hex": "0004", "name": "PCI", "value": 4 }, "slot": { "bus": 0, "number": 2 }, "base_class": { "hex": "0003", "name": "Display controller", "value": 3 }, "sub_class": { "hex": "0000", "name": "VGA compatible controller", "value": 0 }, "pci_interface": { "hex": "0000", "name": "VGA", "value": 0 }, "vendor": { "hex": "8086", "name": "Intel Corporation", "value": 32902 }, "sub_vendor": { "hex": "17aa", "value": 6058 }, "device": { "hex": "0412", "value": 1042 }, "sub_device": { "hex": "30a3", "value": 12451 }, "revision": { "hex": "0006", "value": 6 }, "model": "Intel VGA compatible controller", "sysfs_id": "/devices/pci0000:00/0000:00:02.0", "sysfs_bus_id": "0000:00:02.0", "resources": [ { "type": "io", "base": 61440, "range": 64, "enabled": true, "access": "read_write" }, { "type": "irq", "base": 30, "triggered": 0, "enabled": true }, { "type": "mem", "base": 3758096384, "range": 268435456, "enabled": true, "access": "read_only", "prefetch": "no" }, { "type": "mem", "base": 4152360960, "range": 4194304, "enabled": true, "access": "read_write", "prefetch": "no" }, { "type": "mem", "base": 786432, "range": 131072, "enabled": false, "access": "read_write", "prefetch": "no" } ], "detail": { "function": 0, "command": 1031, "header_type": 0, "secondary_bus": 0, "irq": 30, "prog_if": 0 }, "driver": "i915", "driver_module": "i915", "drivers": [ "i915" ], "driver_modules": [ "i915" ], "module_alias": "pci:v00008086d00000412sv000017AAsd000030A3bc03sc00i00", "label": "Onboard IGD" } ], "hub": [ { "index": 24, "attached_to": 31, "class_list": [ "usb", "hub" ], "bus_type": { "hex": "0086", "name": "USB", "value": 134 }, "slot": { "bus": 0, "number": 0 }, "base_class": { "hex": "010a", "name": "Hub", "value": 266 }, "vendor": { "hex": "8087", "value": 32903 }, "device": { "hex": "8000", "value": 32768 }, "revision": { "hex": "0000", "name": "0.04", "value": 0 }, "model": "Hub", "sysfs_id": "/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1:1.0", "sysfs_bus_id": "2-1:1.0", "resources": [ { "type": "baud", "speed": 480000000, "bits": 0, "stop_bits": 0, "parity": 0, "handshake": 0 } ], "detail": { "device_class": { "hex": "0009", "name": "hub", "value": 9 }, "device_subclass": { "hex": "0000", "name": "per_interface", "value": 0 }, "device_protocol": 1, "interface_class": { "hex": "0009", "name": "hub", "value": 9 }, "interface_subclass": { "hex": "0000", "name": "per_interface", "value": 0 }, "interface_protocol": 0, "interface_number": 0, "interface_alternate_setting": 0 }, "hotplug": "usb", "driver": "hub", "drivers": [ "hub" ], "module_alias": "usb:v8087p8000d0004dc09dsc00dp01ic09isc00ip00in00" }, { "index": 25, "attached_to": 21, "class_list": [ "usb", "hub" ], "bus_type": { "hex": "0086", "name": "USB", "value": 134 }, "slot": { "bus": 0, "number": 0 }, "base_class": { "hex": "010a", "name": "Hub", "value": 266 }, "vendor": { "hex": "1d6b", "name": "Linux 6.13.3 xhci-hcd", "value": 7531 }, "device": { "hex": "0002", "name": "xHCI Host Controller", "value": 2 }, "revision": { "hex": "0000", "name": "6.13", "value": 0 }, "serial": "0000:00:14.0", "model": "Linux 6.13.3 xhci-hcd xHCI Host Controller", "sysfs_id": "/devices/pci0000:00/0000:00:14.0/usb3/3-0:1.0", "sysfs_bus_id": "3-0:1.0", "resources": [ { "type": "baud", "speed": 480000000, "bits": 0, "stop_bits": 0, "parity": 0, "handshake": 0 } ], "detail": { "device_class": { "hex": "0009", "name": "hub", "value": 9 }, "device_subclass": { "hex": "0000", "name": "per_interface", "value": 0 }, "device_protocol": 1, "interface_class": { "hex": "0009", "name": "hub", "value": 9 }, "interface_subclass": { "hex": "0000", "name": "per_interface", "value": 0 }, "interface_protocol": 0, "interface_number": 0, "interface_alternate_setting": 0 }, "hotplug": "usb", "driver": "hub", "drivers": [ "hub" ], "module_alias": "usb:v1D6Bp0002d0613dc09dsc00dp01ic09isc00ip00in00" }, { "index": 27, "attached_to": 21, "class_list": [ "usb", "hub" ], "bus_type": { "hex": "0086", "name": "USB", "value": 134 }, "slot": { "bus": 0, "number": 0 }, "base_class": { "hex": "010a", "name": "Hub", "value": 266 }, "vendor": { "hex": "1d6b", "name": "Linux 6.13.3 xhci-hcd", "value": 7531 }, "device": { "hex": "0003", "name": "xHCI Host Controller", "value": 3 }, "revision": { "hex": "0000", "name": "6.13", "value": 0 }, "serial": "0000:00:14.0", "model": "Linux 6.13.3 xhci-hcd xHCI Host Controller", "sysfs_id": "/devices/pci0000:00/0000:00:14.0/usb4/4-0:1.0", "sysfs_bus_id": "4-0:1.0", "detail": { "device_class": { "hex": "0009", "name": "hub", "value": 9 }, "device_subclass": { "hex": "0000", "name": "per_interface", "value": 0 }, "device_protocol": 3, "interface_class": { "hex": "0009", "name": "hub", "value": 9 }, "interface_subclass": { "hex": "0000", "name": "per_interface", "value": 0 }, "interface_protocol": 0, "interface_number": 0, "interface_alternate_setting": 0 }, "hotplug": "usb", "driver": "hub", "drivers": [ "hub" ], "module_alias": "usb:v1D6Bp0003d0613dc09dsc00dp03ic09isc00ip00in00" }, { "index": 28, "attached_to": 17, "class_list": [ "usb", "hub" ], "bus_type": { "hex": "0086", "name": "USB", "value": 134 }, "slot": { "bus": 0, "number": 0 }, "base_class": { "hex": "010a", "name": "Hub", "value": 266 }, "vendor": { "hex": "1d6b", "name": "Linux 6.13.3 ehci_hcd", "value": 7531 }, "device": { "hex": "0002", "name": "EHCI Host Controller", "value": 2 }, "revision": { "hex": "0000", "name": "6.13", "value": 0 }, "serial": "0000:00:1a.0", "model": "Linux 6.13.3 ehci_hcd EHCI Host Controller", "sysfs_id": "/devices/pci0000:00/0000:00:1a.0/usb1/1-0:1.0", "sysfs_bus_id": "1-0:1.0", "resources": [ { "type": "baud", "speed": 480000000, "bits": 0, "stop_bits": 0, "parity": 0, "handshake": 0 } ], "detail": { "device_class": { "hex": "0009", "name": "hub", "value": 9 }, "device_subclass": { "hex": "0000", "name": "per_interface", "value": 0 }, "device_protocol": 0, "interface_class": { "hex": "0009", "name": "hub", "value": 9 }, "interface_subclass": { "hex": "0000", "name": "per_interface", "value": 0 }, "interface_protocol": 0, "interface_number": 0, "interface_alternate_setting": 0 }, "hotplug": "usb", "driver": "hub", "drivers": [ "hub" ], "module_alias": "usb:v1D6Bp0002d0613dc09dsc00dp00ic09isc00ip00in00" }, { "index": 29, "attached_to": 28, "class_list": [ "usb", "hub" ], "bus_type": { "hex": "0086", "name": "USB", "value": 134 }, "slot": { "bus": 0, "number": 0 }, "base_class": { "hex": "010a", "name": "Hub", "value": 266 }, "vendor": { "hex": "8087", "value": 32903 }, "device": { "hex": "8008", "value": 32776 }, "revision": { "hex": "0000", "name": "0.04", "value": 0 }, "model": "Hub", "sysfs_id": "/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1:1.0", "sysfs_bus_id": "1-1:1.0", "resources": [ { "type": "baud", "speed": 480000000, "bits": 0, "stop_bits": 0, "parity": 0, "handshake": 0 } ], "detail": { "device_class": { "hex": "0009", "name": "hub", "value": 9 }, "device_subclass": { "hex": "0000", "name": "per_interface", "value": 0 }, "device_protocol": 1, "interface_class": { "hex": "0009", "name": "hub", "value": 9 }, "interface_subclass": { "hex": "0000", "name": "per_interface", "value": 0 }, "interface_protocol": 0, "interface_number": 0, "interface_alternate_setting": 0 }, "hotplug": "usb", "driver": "hub", "drivers": [ "hub" ], "module_alias": "usb:v8087p8008d0004dc09dsc00dp01ic09isc00ip00in00" }, { "index": 31, "attached_to": 19, "class_list": [ "usb", "hub" ], "bus_type": { "hex": "0086", "name": "USB", "value": 134 }, "slot": { "bus": 0, "number": 0 }, "base_class": { "hex": "010a", "name": "Hub", "value": 266 }, "vendor": { "hex": "1d6b", "name": "Linux 6.13.3 ehci_hcd", "value": 7531 }, "device": { "hex": "0002", "name": "EHCI Host Controller", "value": 2 }, "revision": { "hex": "0000", "name": "6.13", "value": 0 }, "serial": "0000:00:1d.0", "model": "Linux 6.13.3 ehci_hcd EHCI Host Controller", "sysfs_id": "/devices/pci0000:00/0000:00:1d.0/usb2/2-0:1.0", "sysfs_bus_id": "2-0:1.0", "resources": [ { "type": "baud", "speed": 480000000, "bits": 0, "stop_bits": 0, "parity": 0, "handshake": 0 } ], "detail": { "device_class": { "hex": "0009", "name": "hub", "value": 9 }, "device_subclass": { "hex": "0000", "name": "per_interface", "value": 0 }, "device_protocol": 0, "interface_class": { "hex": "0009", "name": "hub", "value": 9 }, "interface_subclass": { "hex": "0000", "name": "per_interface", "value": 0 }, "interface_protocol": 0, "interface_number": 0, "interface_alternate_setting": 0 }, "hotplug": "usb", "driver": "hub", "drivers": [ "hub" ], "module_alias": "usb:v1D6Bp0002d0613dc09dsc00dp00ic09isc00ip00in00" } ], "keyboard": [ { "index": 26, "attached_to": 25, "class_list": [ "keyboard", "usb" ], "bus_type": { "hex": "0086", "name": "USB", "value": 134 }, "slot": { "bus": 0, "number": 0 }, "base_class": { "hex": "0108", "name": "Keyboard", "value": 264 }, "sub_class": { "hex": "0000", "name": "Keyboard", "value": 0 }, "vendor": { "hex": "04f2", "name": "Chicony Electronics Co., Ltd.", "value": 1266 }, "device": { "hex": "0841", "name": "HP USB Multimedia Keyboard", "value": 2113 }, "revision": { "hex": "0000", "name": "1.00", "value": 0 }, "model": "Chicony Electronics HP USB Multimedia Keyboard", "sysfs_id": "/devices/pci0000:00/0000:00:14.0/usb3/3-1/3-1:1.0", "sysfs_bus_id": "3-1:1.0", "unix_device_name": "/dev/input/event1", "unix_device_number": { "type": 99, "major": 13, "minor": 65, "range": 1 }, "unix_device_names": [ "/dev/input/by-id/usb-CHICONY_HP_USB_Multimedia_Keyboard-event-kbd", "/dev/input/by-path/pci-0000:00:14.0-usb-0:1:1.0-event-kbd", "/dev/input/by-path/pci-0000:00:14.0-usbv2-0:1:1.0-event-kbd", "/dev/input/event1" ], "resources": [ { "type": "baud", "speed": 1500000, "bits": 0, "stop_bits": 0, "parity": 0, "handshake": 0 } ], "detail": { "device_class": { "hex": "0000", "name": "per_interface", "value": 0 }, "device_subclass": { "hex": "0000", "name": "per_interface", "value": 0 }, "device_protocol": 0, "interface_class": { "hex": "0003", "name": "hid", "value": 3 }, "interface_subclass": { "hex": "0001", "name": "audio", "value": 1 }, "interface_protocol": 1, "interface_number": 0, "interface_alternate_setting": 0 }, "hotplug": "usb", "driver": "usbhid", "driver_module": "usbhid", "drivers": [ "usbhid" ], "driver_modules": [ "usbhid" ], "driver_info": { "type": "keyboard", "xkb_rules": "xfree86", "xkb_model": "pc104" }, "module_alias": "usb:v04F2p0841d0100dc00dsc00dp00ic03isc01ip01in00" }, { "index": 30, "attached_to": 25, "class_list": [ "keyboard", "usb" ], "bus_type": { "hex": "0086", "name": "USB", "value": 134 }, "slot": { "bus": 0, "number": 0 }, "base_class": { "hex": "0108", "name": "Keyboard", "value": 264 }, "sub_class": { "hex": "0000", "name": "Keyboard", "value": 0 }, "vendor": { "hex": "04f2", "name": "Chicony Electronics Co., Ltd.", "value": 1266 }, "device": { "hex": "0841", "name": "HP USB Multimedia Keyboard", "value": 2113 }, "revision": { "hex": "0000", "name": "1.00", "value": 0 }, "model": "Chicony Electronics HP USB Multimedia Keyboard", "sysfs_id": "/devices/pci0000:00/0000:00:14.0/usb3/3-1/3-1:1.1", "sysfs_bus_id": "3-1:1.1", "unix_device_name": "/dev/input/event3", "unix_device_number": { "type": 99, "major": 13, "minor": 67, "range": 1 }, "unix_device_names": [ "/dev/input/by-id/usb-CHICONY_HP_USB_Multimedia_Keyboard-event-if01", "/dev/input/by-path/pci-0000:00:14.0-usb-0:1:1.1-event", "/dev/input/by-path/pci-0000:00:14.0-usbv2-0:1:1.1-event", "/dev/input/event3" ], "resources": [ { "type": "baud", "speed": 1500000, "bits": 0, "stop_bits": 0, "parity": 0, "handshake": 0 } ], "detail": { "device_class": { "hex": "0000", "name": "per_interface", "value": 0 }, "device_subclass": { "hex": "0000", "name": "per_interface", "value": 0 }, "device_protocol": 0, "interface_class": { "hex": "0003", "name": "hid", "value": 3 }, "interface_subclass": { "hex": "0001", "name": "audio", "value": 1 }, "interface_protocol": 1, "interface_number": 1, "interface_alternate_setting": 0 }, "hotplug": "usb", "driver": "usbhid", "driver_module": "usbhid", "drivers": [ "usbhid" ], "driver_modules": [ "usbhid" ], "driver_info": { "type": "keyboard", "xkb_rules": "xfree86", "xkb_model": "pc104" }, "module_alias": "usb:v04F2p0841d0100dc00dsc00dp00ic03isc01ip01in01" } ], "memory": [ { "index": 7, "attached_to": 0, "class_list": [ "memory" ], "base_class": { "hex": "0101", "name": "Internally Used Class", "value": 257 }, "sub_class": { "hex": "0002", "name": "Main Memory", "value": 2 }, "model": "Main Memory", "resources": [ { "type": "mem", "base": 0, "range": 12354994176, "enabled": true, "access": "read_write", "prefetch": "unknown" }, { "type": "phys_mem", "range": 12884901888 } ] } ], "network_controller": [ { "index": 13, "attached_to": 0, "class_list": [ "network_controller", "pci" ], "bus_type": { "hex": "0004", "name": "PCI", "value": 4 }, "slot": { "bus": 0, "number": 25 }, "base_class": { "hex": "0002", "name": "Network controller", "value": 2 }, "sub_class": { "hex": "0000", "name": "Ethernet controller", "value": 0 }, "vendor": { "hex": "8086", "name": "Intel Corporation", "value": 32902 }, "sub_vendor": { "hex": "17aa", "value": 6058 }, "device": { "hex": "153a", "value": 5434 }, "sub_device": { "hex": "30a3", "value": 12451 }, "revision": { "hex": "0004", "value": 4 }, "model": "Intel Ethernet controller", "sysfs_id": "/devices/pci0000:00/0000:00:19.0", "sysfs_bus_id": "0000:00:19.0", "unix_device_name": "eno1", "unix_device_names": [ "eno1" ], "resources": [ { "type": "hwaddr", "address": 48 }, { "type": "io", "base": 61568, "range": 32, "enabled": true, "access": "read_write" }, { "type": "irq", "base": 33, "triggered": 0, "enabled": true }, { "type": "mem", "base": 4157603840, "range": 131072, "enabled": true, "access": "read_write", "prefetch": "no" }, { "type": "mem", "base": 4157853696, "range": 4096, "enabled": true, "access": "read_write", "prefetch": "no" }, { "type": "phwaddr", "address": 48 } ], "detail": { "function": 0, "command": 1031, "header_type": 0, "secondary_bus": 0, "irq": 33, "prog_if": 0 }, "driver": "e1000e", "driver_module": "e1000e", "drivers": [ "e1000e" ], "driver_modules": [ "e1000e" ], "module_alias": "pci:v00008086d0000153Asv000017AAsd000030A3bc02sc00i00", "label": "Onboard LAN" } ], "network_interface": [ { "index": 32, "attached_to": 13, "class_list": [ "network_interface" ], "base_class": { "hex": "0107", "name": "Network Interface", "value": 263 }, "sub_class": { "hex": "0001", "name": "Ethernet", "value": 1 }, "model": "Ethernet network interface", "sysfs_id": "/class/net/eno1", "sysfs_device_link": "/devices/pci0000:00/0000:00:19.0", "unix_device_name": "eno1", "unix_device_names": [ "eno1" ], "resources": [ { "type": "hwaddr", "address": 48 }, { "type": "phwaddr", "address": 48 } ], "driver": "e1000e", "driver_module": "e1000e", "drivers": [ "e1000e" ], "driver_modules": [ "e1000e" ] }, { "index": 34, "attached_to": 0, "class_list": [ "network_interface" ], "base_class": { "hex": "0107", "name": "Network Interface", "value": 263 }, "sub_class": { "hex": "0000", "name": "Loopback", "value": 0 }, "model": "Loopback network interface", "sysfs_id": "/class/net/lo", "unix_device_name": "lo", "unix_device_names": [ "lo" ] } ], "pci": [ { "index": 11, "attached_to": 0, "class_list": [ "pci", "unknown" ], "bus_type": { "hex": "0004", "name": "PCI", "value": 4 }, "slot": { "bus": 0, "number": 22 }, "base_class": { "hex": "0007", "name": "Communication controller", "value": 7 }, "sub_class": { "hex": "0080", "name": "Communication controller", "value": 128 }, "vendor": { "hex": "8086", "name": "Intel Corporation", "value": 32902 }, "sub_vendor": { "hex": "17aa", "value": 6058 }, "device": { "hex": "8c3a", "value": 35898 }, "sub_device": { "hex": "30a3", "value": 12451 }, "revision": { "hex": "0004", "value": 4 }, "model": "Intel Communication controller", "sysfs_id": "/devices/pci0000:00/0000:00:16.0", "sysfs_bus_id": "0000:00:16.0", "resources": [ { "type": "irq", "base": 32, "triggered": 0, "enabled": true }, { "type": "mem", "base": 4157865984, "range": 16, "enabled": true, "access": "read_write", "prefetch": "no" } ], "detail": { "function": 0, "command": 1030, "header_type": 0, "secondary_bus": 0, "irq": 32, "prog_if": 0 }, "driver": "mei_me", "driver_module": "mei_me", "drivers": [ "mei_me" ], "driver_modules": [ "mei_me" ], "module_alias": "pci:v00008086d00008C3Asv000017AAsd000030A3bc07sc80i00" }, { "index": 14, "attached_to": 0, "class_list": [ "pci", "unknown" ], "bus_type": { "hex": "0004", "name": "PCI", "value": 4 }, "slot": { "bus": 0, "number": 31 }, "base_class": { "hex": "000c", "name": "Serial bus controller", "value": 12 }, "sub_class": { "hex": "0005", "name": "SMBus", "value": 5 }, "vendor": { "hex": "8086", "name": "Intel Corporation", "value": 32902 }, "sub_vendor": { "hex": "17aa", "value": 6058 }, "device": { "hex": "8c22", "value": 35874 }, "sub_device": { "hex": "30a3", "value": 12451 }, "revision": { "hex": "0004", "value": 4 }, "model": "Intel SMBus", "sysfs_id": "/devices/pci0000:00/0000:00:1f.3", "sysfs_bus_id": "0000:00:1f.3", "resources": [ { "type": "io", "base": 1408, "range": 32, "enabled": true, "access": "read_write" }, { "type": "irq", "base": 18, "triggered": 0, "enabled": true }, { "type": "mem", "base": 4157837312, "range": 256, "enabled": true, "access": "read_write", "prefetch": "no" } ], "detail": { "function": 3, "command": 3, "header_type": 0, "secondary_bus": 0, "irq": 18, "prog_if": 0 }, "driver": "i801_smbus", "driver_module": "i2c_i801", "drivers": [ "i801_smbus" ], "driver_modules": [ "i2c_i801" ], "module_alias": "pci:v00008086d00008C22sv000017AAsd000030A3bc0Csc05i00" }, { "index": 18, "attached_to": 0, "class_list": [ "pci", "unknown" ], "bus_type": { "hex": "0004", "name": "PCI", "value": 4 }, "slot": { "bus": 0, "number": 22 }, "base_class": { "hex": "0007", "name": "Communication controller", "value": 7 }, "sub_class": { "hex": "0000", "name": "Serial controller", "value": 0 }, "pci_interface": { "hex": "0002", "name": "16550", "value": 2 }, "vendor": { "hex": "8086", "name": "Intel Corporation", "value": 32902 }, "sub_vendor": { "hex": "17aa", "value": 6058 }, "device": { "hex": "8c3d", "value": 35901 }, "sub_device": { "hex": "30a3", "value": 12451 }, "revision": { "hex": "0004", "value": 4 }, "model": "Intel Serial controller", "sysfs_id": "/devices/pci0000:00/0000:00:16.3", "sysfs_bus_id": "0000:00:16.3", "resources": [ { "type": "io", "base": 61664, "range": 8, "enabled": true, "access": "read_write" }, { "type": "irq", "base": 19, "triggered": 0, "enabled": true }, { "type": "mem", "base": 4157857792, "range": 4096, "enabled": true, "access": "read_write", "prefetch": "no" } ], "detail": { "function": 3, "command": 7, "header_type": 0, "secondary_bus": 0, "irq": 19, "prog_if": 2 }, "driver": "serial", "driver_module": "8250_pci", "drivers": [ "serial" ], "driver_modules": [ "8250_pci" ], "module_alias": "pci:v00008086d00008C3Dsv000017AAsd000030A3bc07sc00i02" } ], "sound": [ { "index": 12, "attached_to": 0, "class_list": [ "sound", "pci" ], "bus_type": { "hex": "0004", "name": "PCI", "value": 4 }, "slot": { "bus": 0, "number": 27 }, "base_class": { "hex": "0004", "name": "Multimedia controller", "value": 4 }, "sub_class": { "hex": "0003", "value": 3 }, "vendor": { "hex": "8086", "name": "Intel Corporation", "value": 32902 }, "sub_vendor": { "hex": "17aa", "value": 6058 }, "device": { "hex": "8c20", "value": 35872 }, "sub_device": { "hex": "30a3", "value": 12451 }, "revision": { "hex": "0004", "value": 4 }, "model": "Intel Multimedia controller", "sysfs_id": "/devices/pci0000:00/0000:00:1b.0", "sysfs_bus_id": "0000:00:1b.0", "resources": [ { "type": "irq", "base": 35, "triggered": 0, "enabled": true }, { "type": "mem", "base": 4157800448, "range": 16384, "enabled": true, "access": "read_write", "prefetch": "no" } ], "detail": { "function": 0, "command": 1030, "header_type": 0, "secondary_bus": 0, "irq": 35, "prog_if": 0 }, "driver": "snd_hda_intel", "driver_module": "snd_hda_intel", "drivers": [ "snd_hda_intel" ], "driver_modules": [ "snd_hda_intel" ], "module_alias": "pci:v00008086d00008C20sv000017AAsd000030A3bc04sc03i00" }, { "index": 16, "attached_to": 0, "class_list": [ "sound", "pci" ], "bus_type": { "hex": "0004", "name": "PCI", "value": 4 }, "slot": { "bus": 0, "number": 3 }, "base_class": { "hex": "0004", "name": "Multimedia controller", "value": 4 }, "sub_class": { "hex": "0003", "value": 3 }, "vendor": { "hex": "8086", "name": "Intel Corporation", "value": 32902 }, "sub_vendor": { "hex": "17aa", "value": 6058 }, "device": { "hex": "0c0c", "value": 3084 }, "sub_device": { "hex": "30a3", "value": 12451 }, "revision": { "hex": "0006", "value": 6 }, "model": "Intel Multimedia controller", "sysfs_id": "/devices/pci0000:00/0000:00:03.0", "sysfs_bus_id": "0000:00:03.0", "resources": [ { "type": "irq", "base": 34, "triggered": 0, "enabled": true }, { "type": "mem", "base": 4157816832, "range": 16384, "enabled": true, "access": "read_write", "prefetch": "no" } ], "detail": { "function": 0, "command": 1030, "header_type": 0, "secondary_bus": 0, "irq": 34, "prog_if": 0 }, "driver": "snd_hda_intel", "driver_module": "snd_hda_intel", "drivers": [ "snd_hda_intel" ], "driver_modules": [ "snd_hda_intel" ], "module_alias": "pci:v00008086d00000C0Csv000017AAsd000030A3bc04sc03i00" } ], "storage_controller": [ { "index": 8, "attached_to": 0, "class_list": [ "storage_controller", "pci" ], "bus_type": { "hex": "0004", "name": "PCI", "value": 4 }, "slot": { "bus": 0, "number": 31 }, "base_class": { "hex": "0001", "name": "Mass storage controller", "value": 1 }, "sub_class": { "hex": "0006", "value": 6 }, "pci_interface": { "hex": "0001", "value": 1 }, "vendor": { "hex": "8086", "name": "Intel Corporation", "value": 32902 }, "sub_vendor": { "hex": "17aa", "value": 6058 }, "device": { "hex": "8c02", "value": 35842 }, "sub_device": { "hex": "30a3", "value": 12451 }, "revision": { "hex": "0004", "value": 4 }, "model": "Intel Mass storage controller", "sysfs_id": "/devices/pci0000:00/0000:00:1f.2", "sysfs_bus_id": "0000:00:1f.2", "resources": [ { "type": "io", "base": 61536, "range": 32, "enabled": true, "access": "read_write" }, { "type": "io", "base": 61600, "range": 4, "enabled": true, "access": "read_write" }, { "type": "io", "base": 61616, "range": 8, "enabled": true, "access": "read_write" }, { "type": "io", "base": 61632, "range": 4, "enabled": true, "access": "read_write" }, { "type": "io", "base": 61648, "range": 8, "enabled": true, "access": "read_write" }, { "type": "irq", "base": 31, "triggered": 0, "enabled": true }, { "type": "mem", "base": 4157841408, "range": 2048, "enabled": true, "access": "read_write", "prefetch": "no" } ], "detail": { "function": 2, "command": 1031, "header_type": 0, "secondary_bus": 0, "irq": 31, "prog_if": 1 }, "driver": "ahci", "driver_module": "ahci", "drivers": [ "ahci" ], "driver_modules": [ "ahci" ], "module_alias": "pci:v00008086d00008C02sv000017AAsd000030A3bc01sc06i01" } ], "system": { "form_factor": "desktop" }, "unknown": [ { "index": 22, "attached_to": 0, "class_list": [ "unknown" ], "base_class": { "hex": "0007", "name": "Communication controller", "value": 7 }, "sub_class": { "hex": "0000", "name": "Serial controller", "value": 0 }, "pci_interface": { "hex": "0002", "name": "16550", "value": 2 }, "device": { "hex": "0000", "name": "16550A", "value": 0 }, "model": "16550A", "unix_device_name": "/dev/ttyS0", "unix_device_names": [ "/dev/ttyS0" ], "resources": [ { "type": "io", "base": 61664, "range": 0, "enabled": true, "access": "read_write" }, { "type": "irq", "base": 19, "triggered": 0, "enabled": true } ] } ], "usb_controller": [ { "index": 17, "attached_to": 0, "class_list": [ "usb_controller", "pci" ], "bus_type": { "hex": "0004", "name": "PCI", "value": 4 }, "slot": { "bus": 0, "number": 26 }, "base_class": { "hex": "000c", "name": "Serial bus controller", "value": 12 }, "sub_class": { "hex": "0003", "name": "USB Controller", "value": 3 }, "pci_interface": { "hex": "0020", "name": "EHCI", "value": 32 }, "vendor": { "hex": "8086", "name": "Intel Corporation", "value": 32902 }, "sub_vendor": { "hex": "17aa", "value": 6058 }, "device": { "hex": "8c2d", "value": 35885 }, "sub_device": { "hex": "30a3", "value": 12451 }, "revision": { "hex": "0004", "value": 4 }, "model": "Intel USB Controller", "sysfs_id": "/devices/pci0000:00/0000:00:1a.0", "sysfs_bus_id": "0000:00:1a.0", "resources": [ { "type": "irq", "base": 17, "triggered": 0, "enabled": true }, { "type": "mem", "base": 4157849600, "range": 1024, "enabled": true, "access": "read_write", "prefetch": "no" } ], "detail": { "function": 0, "command": 6, "header_type": 0, "secondary_bus": 0, "irq": 17, "prog_if": 32 }, "driver": "ehci-pci", "driver_module": "ehci_pci", "drivers": [ "ehci-pci" ], "driver_modules": [ "ehci_pci" ], "driver_info": { "type": "module", "db_entry_0": [ "ehci-hcd" ], "active": true, "modprobe": true, "names": [ "ehci-hcd" ], "module_args": [ "" ], "conf": "" }, "module_alias": "pci:v00008086d00008C2Dsv000017AAsd000030A3bc0Csc03i20" }, { "index": 19, "attached_to": 0, "class_list": [ "usb_controller", "pci" ], "bus_type": { "hex": "0004", "name": "PCI", "value": 4 }, "slot": { "bus": 0, "number": 29 }, "base_class": { "hex": "000c", "name": "Serial bus controller", "value": 12 }, "sub_class": { "hex": "0003", "name": "USB Controller", "value": 3 }, "pci_interface": { "hex": "0020", "name": "EHCI", "value": 32 }, "vendor": { "hex": "8086", "name": "Intel Corporation", "value": 32902 }, "sub_vendor": { "hex": "17aa", "value": 6058 }, "device": { "hex": "8c26", "value": 35878 }, "sub_device": { "hex": "30a3", "value": 12451 }, "revision": { "hex": "0004", "value": 4 }, "model": "Intel USB Controller", "sysfs_id": "/devices/pci0000:00/0000:00:1d.0", "sysfs_bus_id": "0000:00:1d.0", "resources": [ { "type": "irq", "base": 23, "triggered": 0, "enabled": true }, { "type": "mem", "base": 4157845504, "range": 1024, "enabled": true, "access": "read_write", "prefetch": "no" } ], "detail": { "function": 0, "command": 6, "header_type": 0, "secondary_bus": 0, "irq": 23, "prog_if": 32 }, "driver": "ehci-pci", "driver_module": "ehci_pci", "drivers": [ "ehci-pci" ], "driver_modules": [ "ehci_pci" ], "driver_info": { "type": "module", "db_entry_0": [ "ehci-hcd" ], "active": true, "modprobe": true, "names": [ "ehci-hcd" ], "module_args": [ "" ], "conf": "" }, "module_alias": "pci:v00008086d00008C26sv000017AAsd000030A3bc0Csc03i20" }, { "index": 21, "attached_to": 0, "class_list": [ "usb_controller", "pci" ], "bus_type": { "hex": "0004", "name": "PCI", "value": 4 }, "slot": { "bus": 0, "number": 20 }, "base_class": { "hex": "000c", "name": "Serial bus controller", "value": 12 }, "sub_class": { "hex": "0003", "name": "USB Controller", "value": 3 }, "pci_interface": { "hex": "0030", "value": 48 }, "vendor": { "hex": "8086", "name": "Intel Corporation", "value": 32902 }, "sub_vendor": { "hex": "17aa", "value": 6058 }, "device": { "hex": "8c31", "value": 35889 }, "sub_device": { "hex": "30a3", "value": 12451 }, "revision": { "hex": "0004", "value": 4 }, "model": "Intel USB Controller", "sysfs_id": "/devices/pci0000:00/0000:00:14.0", "sysfs_bus_id": "0000:00:14.0", "resources": [ { "type": "irq", "base": 25, "triggered": 0, "enabled": true }, { "type": "mem", "base": 4157734912, "range": 65536, "enabled": true, "access": "read_write", "prefetch": "no" } ], "detail": { "function": 0, "command": 1030, "header_type": 0, "secondary_bus": 0, "irq": 25, "prog_if": 48 }, "driver": "xhci_hcd", "driver_module": "xhci_pci", "drivers": [ "xhci_hcd" ], "driver_modules": [ "xhci_pci" ], "module_alias": "pci:v00008086d00008C31sv000017AAsd000030A3bc0Csc03i30" } ] }, "smbios": { "bios": { "handle": 0, "vendor": "LENOVO", "version": "FBKTD8AUS", "date": "09/17/2019", "features": [ "PCI supported", "BIOS flashable", "BIOS shadowing allowed", "CD boot supported", "Selectable boot supported", "BIOS ROM socketed", "EDD spec supported", "1.2MB Floppy supported", "720kB Floppy supported", "2.88MB Floppy supported", "Print Screen supported", "8042 Keyboard Services supported", "Serial Services supported", "Printer Services supported", "ACPI supported", "USB Legacy supported", "BIOS Boot Spec supported" ], "start_address": "0xf0000", "rom_size": 6815744 }, "board": { "handle": 2, "manufacturer": "LENOVO", "product": "SHARKBAY", "version": "0B98401 PRO", "board_type": { "hex": "000a", "name": "Motherboard", "value": 10 }, "features": [ "Hosting Board", "Replaceable" ], "location": "To be filled by O.E.M.", "chassis": 3 }, "cache": [ { "handle": 62, "socket": "CPU Internal L2", "size_max": 512, "size_current": 512, "speed": 0, "mode": { "hex": "0001", "name": "Write Back", "value": 1 }, "enabled": true, "location": { "hex": "0000", "name": "Internal", "value": 0 }, "socketed": false, "level": 1, "ecc": { "hex": "0005", "name": "Single-bit", "value": 5 }, "cache_type": { "hex": "0005", "name": "Unified", "value": 5 }, "associativity": { "hex": "0007", "name": "8-way Set-Associative", "value": 7 }, "sram_type_current": [ "Unknown" ], "sram_type_supported": [ "Unknown" ] }, { "handle": 63, "socket": "CPU Internal L1", "size_max": 128, "size_current": 128, "speed": 0, "mode": { "hex": "0001", "name": "Write Back", "value": 1 }, "enabled": true, "location": { "hex": "0000", "name": "Internal", "value": 0 }, "socketed": false, "level": 0, "ecc": { "hex": "0005", "name": "Single-bit", "value": 5 }, "cache_type": { "hex": "0001", "name": "Other", "value": 1 }, "associativity": { "hex": "0007", "name": "8-way Set-Associative", "value": 7 }, "sram_type_current": [ "Unknown" ], "sram_type_supported": [ "Unknown" ] }, { "handle": 64, "socket": "CPU Internal L3", "size_max": 4096, "size_current": 4096, "speed": 0, "mode": { "hex": "0001", "name": "Write Back", "value": 1 }, "enabled": true, "location": { "hex": "0000", "name": "Internal", "value": 0 }, "socketed": false, "level": 2, "ecc": { "hex": "0005", "name": "Single-bit", "value": 5 }, "cache_type": { "hex": "0005", "name": "Unified", "value": 5 }, "associativity": { "hex": "0008", "name": "16-way Set-Associative", "value": 8 }, "sram_type_current": [ "Unknown" ], "sram_type_supported": [ "Unknown" ] } ], "chassis": [ { "handle": 3, "manufacturer": "To Be Filled By O.E.M.", "version": "To Be Filled By O.E.M.", "chassis_type": { "hex": "0003", "name": "Desktop", "value": 3 }, "lock_present": false, "bootup_state": { "hex": "0003", "name": "Safe", "value": 3 }, "power_state": { "hex": "0003", "name": "Safe", "value": 3 }, "thermal_state": { "hex": "0003", "name": "Safe", "value": 3 }, "security_state": { "hex": "0003", "name": "None", "value": 3 }, "oem": "0x0" } ], "config": { "handle": 34, "options": [ "scre++" ] }, "group_associations": [ { "handle": 35, "power": { "hex": "0000", "name": "Disabled", "value": 0 }, "keyboard": { "hex": "0001", "name": "Enabled", "value": 1 }, "admin": { "hex": "0000", "name": "Disabled", "value": 0 }, "reset": { "hex": "0002", "name": "Not Implemented", "value": 2 } } ], "language": [ { "handle": 89, "languages": [ "en|US|iso8859-1", "fr|FR|iso8859-1", "zh|CN|unicode" ] } ], "memory_array": [ { "handle": 65, "location": { "hex": "0003", "name": "Motherboard", "value": 3 }, "usage": { "hex": "0003", "name": "System memory", "value": 3 }, "ecc": { "hex": "0003", "name": "None", "value": 3 }, "max_size": "0x1000000", "error_handle": 65534, "slots": 2 } ], "memory_array_mapped_address": [ { "handle": 71, "array_handle": 65, "start_address": "0x0", "end_address": "0x300000000", "part_width": 2 } ], "memory_device": [ { "handle": 66, "location": "ChannelA-DIMM0", "bank_location": "BANK 0", "manufacturer": "0420", "part_number": "F3-1600C9-8GRSL", "array_handle": 65, "error_handle": 65534, "width": 64, "ecc_bits": 0, "size": 8388608, "form_factor": { "hex": "000d", "name": "SODIMM", "value": 13 }, "set": 0, "memory_type": { "hex": "0018", "name": "Other", "value": 24 }, "memory_type_details": [ "Synchronous" ], "speed": 1600 }, { "handle": 69, "location": "ChannelB-DIMM0", "bank_location": "BANK 2", "manufacturer": "Samsung", "part_number": "M471B5173QH0-YK0", "array_handle": 65, "error_handle": 65534, "width": 64, "ecc_bits": 0, "size": 4194304, "form_factor": { "hex": "000d", "name": "SODIMM", "value": 13 }, "set": 0, "memory_type": { "hex": "0018", "name": "Other", "value": 24 }, "memory_type_details": [ "Synchronous" ], "speed": 1600 } ], "memory_device_mapped_address": [ { "handle": 68, "memory_device_handle": 66, "array_map_handle": 71, "start_address": "0x0", "end_address": "0x200000000", "row_position": 255, "interleave_position": 1, "interleave_depth": 1 }, { "handle": 70, "memory_device_handle": 69, "array_map_handle": 71, "start_address": "0x200000000", "end_address": "0x300000000", "row_position": 255, "interleave_position": 2, "interleave_depth": 1 } ], "onboard": [ { "handle": 32, "devices": [ { "name": "Onboard Video", "type": { "hex": "0003", "name": "Video", "value": 3 }, "enabled": true }, { "name": "Onboard LAN", "type": { "hex": "0005", "name": "Ethernet", "value": 5 }, "enabled": true }, { "name": "Onboard Audio", "type": { "hex": "0007", "name": "Sound", "value": 7 }, "enabled": true }, { "name": "Sata Controller", "type": { "hex": "0009", "name": "Other", "value": 9 }, "enabled": true } ] }, { "handle": 84, "devices": [ { "name": "IBM Embedded Security Hardware Type 3", "type": { "hex": "0001", "name": "Other", "value": 1 }, "enabled": false } ] } ], "port_connector": [ { "handle": 4, "port_type": { "hex": "000e", "name": "Mouse Port", "value": 14 }, "internal_reference_designator": "J1A1", "external_connector_type": { "hex": "000f", "name": "PS/2", "value": 15 }, "external_reference_designator": "PS2Mouse" }, { "handle": 5, "port_type": { "hex": "000d", "name": "Keyboard Port", "value": 13 }, "internal_reference_designator": "J1A1", "external_connector_type": { "hex": "000f", "name": "PS/2", "value": 15 }, "external_reference_designator": "Keyboard" }, { "handle": 6, "port_type": { "hex": "00ff", "name": "Other", "value": 255 }, "internal_reference_designator": "J2A1", "external_connector_type": { "hex": "001d", "name": "Mini-Centronics Type-14", "value": 29 }, "external_reference_designator": "TV Out" }, { "handle": 7, "port_type": { "hex": "0009", "name": "Serial Port 16550A Compatible", "value": 9 }, "internal_reference_designator": "J2A2A", "external_connector_type": { "hex": "0008", "name": "DB-9 pin male", "value": 8 }, "external_reference_designator": "COM A" }, { "handle": 8, "port_type": { "hex": "001c", "name": "Video Port", "value": 28 }, "internal_reference_designator": "J2A2B", "external_connector_type": { "hex": "0007", "name": "DB-15 pin female", "value": 7 }, "external_reference_designator": "Video" }, { "handle": 9, "port_type": { "hex": "0010", "name": "USB", "value": 16 }, "internal_reference_designator": "J3A1", "external_connector_type": { "hex": "0012", "name": "Access Bus [USB]", "value": 18 }, "external_reference_designator": "USB1" }, { "handle": 10, "port_type": { "hex": "0010", "name": "USB", "value": 16 }, "internal_reference_designator": "J3A1", "external_connector_type": { "hex": "0012", "name": "Access Bus [USB]", "value": 18 }, "external_reference_designator": "USB2" }, { "handle": 11, "port_type": { "hex": "0010", "name": "USB", "value": 16 }, "internal_reference_designator": "J3A1", "external_connector_type": { "hex": "0012", "name": "Access Bus [USB]", "value": 18 }, "external_reference_designator": "USB3" }, { "handle": 12, "port_type": { "hex": "00ff", "name": "Other", "value": 255 }, "internal_connector_type": { "hex": "00ff", "name": "Other", "value": 255 }, "internal_reference_designator": "J9A1 - TPM HDR" }, { "handle": 13, "port_type": { "hex": "00ff", "name": "Other", "value": 255 }, "internal_connector_type": { "hex": "00ff", "name": "Other", "value": 255 }, "internal_reference_designator": "J9C1 - PCIE DOCKING CONN" }, { "handle": 14, "port_type": { "hex": "00ff", "name": "Other", "value": 255 }, "internal_connector_type": { "hex": "00ff", "name": "Other", "value": 255 }, "internal_reference_designator": "J2B3 - CPU FAN" }, { "handle": 15, "port_type": { "hex": "00ff", "name": "Other", "value": 255 }, "internal_connector_type": { "hex": "00ff", "name": "Other", "value": 255 }, "internal_reference_designator": "J6C2 - EXT HDMI" }, { "handle": 16, "port_type": { "hex": "00ff", "name": "Other", "value": 255 }, "internal_connector_type": { "hex": "00ff", "name": "Other", "value": 255 }, "internal_reference_designator": "J3C1 - GMCH FAN" }, { "handle": 17, "port_type": { "hex": "00ff", "name": "Other", "value": 255 }, "internal_connector_type": { "hex": "00ff", "name": "Other", "value": 255 }, "internal_reference_designator": "J1D1 - ITP" }, { "handle": 18, "port_type": { "hex": "00ff", "name": "Other", "value": 255 }, "internal_connector_type": { "hex": "00ff", "name": "Other", "value": 255 }, "internal_reference_designator": "J9E2 - MDC INTPSR" }, { "handle": 19, "port_type": { "hex": "00ff", "name": "Other", "value": 255 }, "internal_connector_type": { "hex": "00ff", "name": "Other", "value": 255 }, "internal_reference_designator": "J9E4 - MDC INTPSR" }, { "handle": 20, "port_type": { "hex": "00ff", "name": "Other", "value": 255 }, "internal_connector_type": { "hex": "00ff", "name": "Other", "value": 255 }, "internal_reference_designator": "J9E3 - LPC HOT DOCKING" }, { "handle": 21, "port_type": { "hex": "00ff", "name": "Other", "value": 255 }, "internal_connector_type": { "hex": "00ff", "name": "Other", "value": 255 }, "internal_reference_designator": "J9E1 - SCAN MATRIX" }, { "handle": 22, "port_type": { "hex": "00ff", "name": "Other", "value": 255 }, "internal_connector_type": { "hex": "00ff", "name": "Other", "value": 255 }, "internal_reference_designator": "J9G1 - LPC SIDE BAND" }, { "handle": 23, "port_type": { "hex": "00ff", "name": "Other", "value": 255 }, "internal_connector_type": { "hex": "00ff", "name": "Other", "value": 255 }, "internal_reference_designator": "J8F1 - UNIFIED" }, { "handle": 24, "port_type": { "hex": "00ff", "name": "Other", "value": 255 }, "internal_connector_type": { "hex": "00ff", "name": "Other", "value": 255 }, "internal_reference_designator": "J6F1 - LVDS" }, { "handle": 25, "port_type": { "hex": "00ff", "name": "Other", "value": 255 }, "internal_connector_type": { "hex": "00ff", "name": "Other", "value": 255 }, "internal_reference_designator": "J2F1 - LAI FAN" }, { "handle": 26, "port_type": { "hex": "00ff", "name": "Other", "value": 255 }, "internal_connector_type": { "hex": "00ff", "name": "Other", "value": 255 }, "internal_reference_designator": "J2G1 - GFX VID" }, { "handle": 27, "port_type": { "hex": "00ff", "name": "Other", "value": 255 }, "internal_connector_type": { "hex": "00ff", "name": "Other", "value": 255 }, "internal_reference_designator": "J1G6 - AC JACK" } ], "processor": [ { "handle": 61, "socket": "SOCKET 0", "socket_type": { "hex": "0024", "name": "Other", "value": 36 }, "socket_populated": true, "manufacturer": "Intel", "version": "Intel(R) Core(TM) i5-4570T CPU @ 2.90GHz", "part": "Fill By OEM", "processor_type": { "hex": "0003", "name": "CPU", "value": 3 }, "processor_family": { "hex": "00cd", "name": "Other", "value": 205 }, "processor_status": { "hex": "0001", "name": "Enabled", "value": 1 }, "clock_ext": 100, "clock_max": 3800, "cache_handle_l1": 63, "cache_handle_l2": 62, "cache_handle_l3": 64 } ], "slot": [ { "handle": 28, "designation": "J6B2", "slot_type": { "hex": "00a5", "name": "Other", "value": 165 }, "bus_width": { "hex": "000d", "name": "Other", "value": 13 }, "usage": { "hex": "0004", "name": "In Use", "value": 4 }, "length": { "hex": "0004", "name": "Long", "value": 4 }, "id": 0, "features": [ "3.3 V", "Shared", "PME#" ] }, { "handle": 29, "designation": "J6B1", "slot_type": { "hex": "00a5", "name": "Other", "value": 165 }, "bus_width": { "hex": "0008", "name": "Other", "value": 8 }, "usage": { "hex": "0004", "name": "In Use", "value": 4 }, "length": { "hex": "0003", "name": "Short", "value": 3 }, "id": 1, "features": [ "3.3 V", "Shared", "PME#" ] }, { "handle": 30, "designation": "J6D1", "slot_type": { "hex": "00a5", "name": "Other", "value": 165 }, "bus_width": { "hex": "0008", "name": "Other", "value": 8 }, "usage": { "hex": "0004", "name": "In Use", "value": 4 }, "length": { "hex": "0003", "name": "Short", "value": 3 }, "id": 2, "features": [ "3.3 V", "Shared", "PME#" ] }, { "handle": 31, "designation": "J7B1", "slot_type": { "hex": "00a5", "name": "Other", "value": 165 }, "bus_width": { "hex": "0008", "name": "Other", "value": 8 }, "usage": { "hex": "0004", "name": "In Use", "value": 4 }, "length": { "hex": "0003", "name": "Short", "value": 3 }, "id": 3, "features": [ "3.3 V", "Shared", "PME#" ] } ], "system": { "handle": 1, "manufacturer": "LENOVO", "product": "10AB0010CA", "version": "ThinkCentre M93p", "wake_up": { "hex": "0008", "name": "AC Power Restored", "value": 8 } } } } ================================================ FILE: default.nix ================================================ (import ( let lock = builtins.fromJSON (builtins.readFile ./flake.lock); in fetchTarball { url = "https://github.com/edolstra/flake-compat/archive/${lock.nodes.flake-compat.locked.rev}.tar.gz"; sha256 = lock.nodes.flake-compat.locked.narHash; } ) { src = ./.; } ).defaultNix ================================================ FILE: flake.nix ================================================ { description = "bbigras's NixOS config"; nixConfig = rec { extra-substituters = [ "https://bbigras-nix-config.cachix.org?priority=1" "https://nix-community.cachix.org?priority=2" ]; extra-trusted-substituters = extra-substituters; extra-trusted-public-keys = [ "bbigras-nix-config.cachix.org-1:aXL6Q9Oi0jyF79YAKRu17iVNk9HY0p23OZX7FA8ulhU=" "nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=" ]; }; inputs = { # Core infrastructure nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; nixpkgs_resticprofile.url = "github:bbigras/nixpkgs/push-zswsmktvsmpo"; flake-parts = { url = "github:hercules-ci/flake-parts"; inputs.nixpkgs-lib.follows = "nixpkgs"; }; # CI workflow generation actions-nix = { url = "github:nialov/actions.nix"; inputs = { nixpkgs.follows = "nixpkgs"; flake-parts.follows = "flake-parts"; git-hooks.follows = "git-hooks"; }; }; # nixos-unified for unified configuration management nixos-unified.url = "github:srid/nixos-unified"; # System modules home-manager = { url = "github:nix-community/home-manager"; inputs.nixpkgs.follows = "nixpkgs"; }; # Security and secrets agenix = { url = "github:ryantm/agenix"; inputs = { home-manager.follows = "home-manager"; nixpkgs.follows = "nixpkgs"; systems.follows = "systems"; }; }; agenix-rekey = { url = "github:oddlama/agenix-rekey"; inputs = { flake-parts.follows = "flake-parts"; nixpkgs.follows = "nixpkgs"; pre-commit-hooks.follows = "git-hooks"; treefmt-nix.follows = "treefmt-nix"; }; }; # Disk management disko = { url = "github:nix-community/disko"; inputs.nixpkgs.follows = "nixpkgs"; }; peerix.url = "github:sophronesis/peerix"; # Persistence impermanence.url = "github:nix-community/impermanence"; # Secure boot lanzaboote = { url = "github:nix-community/lanzaboote"; inputs = { nixpkgs.follows = "nixpkgs"; pre-commit.follows = "git-hooks"; }; }; # Build tools nix-fast-build = { url = "github:Mic92/nix-fast-build"; inputs = { flake-parts.follows = "flake-parts"; nixpkgs.follows = "nixpkgs"; treefmt-nix.follows = "treefmt-nix"; }; }; # Package index nix-index-database = { url = "github:Mic92/nix-index-database"; inputs.nixpkgs.follows = "nixpkgs"; }; # Hardware support nixos-hardware.url = "github:NixOS/nixos-hardware"; nixos-facter-modules.url = "github:nix-community/nixos-facter-modules"; # Development tools git-hooks = { url = "github:cachix/git-hooks.nix"; inputs = { flake-compat.follows = "flake-compat"; nixpkgs.follows = "nixpkgs"; }; }; treefmt-nix = { url = "github:numtide/treefmt-nix"; inputs.nixpkgs.follows = "nixpkgs"; }; # Utility inputs flake-compat = { url = "github:edolstra/flake-compat"; flake = false; }; systems.url = "github:nix-systems/default"; # Theming catppuccin = { url = "github:catppuccin/nix"; inputs.nixpkgs.follows = "nixpkgs"; }; nur = { url = "github:nix-community/NUR"; inputs.nixpkgs.follows = "nixpkgs"; inputs.flake-parts.follows = "flake-parts"; }; emacs-overlay = { url = "github:nix-community/emacs-overlay"; inputs.nixpkgs.follows = "nixpkgs"; }; minimal-emacs-d = { url = "github:jamescherti/minimal-emacs.d"; flake = false; }; # emacs packages batppuccin-emacs = { url = "github:bbatsov/batppuccin-emacs"; flake = false; }; eglot-multi-preset = { url = "github:kn66/eglot-multi-preset"; flake = false; }; eglot-x = { url = "github:nemethf/eglot-x"; flake = false; }; treesit-sexp = { url = "github:alexispurslane/treesit-sexp"; flake = false; }; majutsu = { url = "github:0WD0/majutsu"; flake = false; }; }; outputs = inputs: inputs.nixos-unified.lib.mkFlake { inherit inputs; root = ./.; systems = [ "aarch64-linux" "x86_64-linux" ]; }; } ================================================ FILE: modules/flake-parts/actions.nix ================================================ # CI workflow definition using actions.nix { inputs, self, lib, ... }: let # Platform mappings: Nix system -> GitHub runner platforms = { x86_64-linux.os = "ubuntu-24.04"; aarch64-linux.os = "ubuntu-22.04-arm"; }; # Build matrix entry from configuration (autodiscovery) # Returns data in the exact shape needed for GitHub Actions matrix mkHostInfo = kind: name: cfg: let platform = cfg.pkgs.stdenv.hostPlatform.system; platformInfo = platforms.${platform} or null; in lib.optionalAttrs (platformInfo != null) { inherit name; hostPlatform = platform; runsOn = platformInfo.os; attr = if kind == "nixos" then "nixosConfigurations.${name}.config.system.build.toplevel" else "homeConfigurations.${name}.activationPackage"; }; # Autodiscover all hosts and filter out unsupported platforms nixosHosts = lib.filter (h: h != { }) ( lib.mapAttrsToList (mkHostInfo "nixos") (self.nixosConfigurations or { }) ); homeHosts = lib.filter (h: h != { }) ( lib.mapAttrsToList (mkHostInfo "home") (self.homeConfigurations or { }) ); # GitHub Actions references - all versions consolidated here for Renovate actions = { alls-green = "re-actors/alls-green@05ac9388f0aebcb5727afa17fcccfecd6f8ec5fe"; # v1.2.2 cache = "actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae"; # v5.0.5 automerge = "peter-evans/enable-pull-request-automerge@a660677d5469627102a1c1e11409dd063606628d"; # v3.0.0 cachix = "cachix/cachix-action@1eb2ef646ac0255473d23a5907ad7b04ce94065c"; # v17 checkout = "actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd"; # v6.0.2 nothing-but-nix = "wimpysworld/nothing-but-nix@687c797a730352432950c707ab493fcc951818d7"; # v10 install-nix-action = "cachix/install-nix-action@ab739621df7a23f52766f9ccc97f38da6b7af14f"; # v31.10.5 }; # Reusable step definitions steps = { nothing-but-nix = { uses = actions.nothing-but-nix; }; checkout = { uses = actions.checkout; "with".persist-credentials = false; }; nixInstaller = { uses = actions.install-nix-action; }; nixCache = { uses = actions.cache; "with" = { path = "~/.cache/nix"; key = "nix-eval-\${{ runner.os }}-\${{ runner.arch }}-\${{ hashFiles('flake.lock') }}"; restore-keys = "nix-eval-\${{ runner.os }}-\${{ runner.arch }}-"; }; }; cachix = { uses = actions.cachix; "with" = { name = "bbigras-nix-config"; authToken = "\${{ secrets.CACHIX_AUTH_TOKEN }}"; extraPullNames = "nix-community"; }; }; # Helper to create nix-fast-build step for a given attribute expression nix-fast-build = flakeAttr: { name = "nix-fast-build"; run = "nix run '${flakeRef}#nix-fast-build' -- --no-nom --skip-cached --retries=3 --option accept-flake-config true --flake='${flakeRef}#${flakeAttr}'"; }; }; # Common setup steps for build jobs setupSteps = [ steps.nothing-but-nix steps.checkout steps.nixInstaller steps.nixCache steps.cachix ]; # Platforms to run flake check/show on (derived from all hosts) checkPlatforms = let allHosts = nixosHosts ++ homeHosts; hostPlatforms = lib.unique (map (h: h.hostPlatform) allHosts); in map (p: { platform = p; inherit (platforms.${p}) os; }) hostPlatforms; flakeRef = "git+file:."; in { imports = [ inputs.actions-nix.flakeModules.default ]; flake.actions-nix = { pre-commit.enable = true; defaultValues.jobs = { timeout-minutes = 60; runs-on = "ubuntu-24.04"; }; workflows = { ".github/workflows/ci.yaml" = { name = "ci"; on = { push.branches = [ "master" "try" ]; pull_request = { }; workflow_dispatch = { }; }; concurrency = { group = "ci-\${{ github.head_ref || github.ref_name }}"; cancel-in-progress = "\${{ github.event_name == 'pull_request' }}"; }; # Minimal permissions for security - this workflow only needs to read code permissions = { }; jobs = { # Flake check on all platforms flake-check = { name = "flake check (\${{ matrix.systems.platform }})"; environment = "ci"; strategy.matrix.systems = checkPlatforms; runs-on = "\${{ matrix.systems.os }}"; steps = setupSteps ++ [ { name = "nix flake check"; run = "nix flake check '${flakeRef}'"; } { name = "nix flake show"; run = "nix flake show '${flakeRef}'"; } ]; }; # Build hosts directly (NixOS + home-manager on any platform) build = { name = "\${{ matrix.attrs.name }} (\${{ matrix.attrs.hostPlatform }})"; environment = "ci"; strategy = { fail-fast = false; matrix.attrs = nixosHosts ++ homeHosts; }; runs-on = "\${{ matrix.attrs.runsOn }}"; steps = setupSteps ++ [ (steps.nix-fast-build "\${{ matrix.attrs.attr }}") ]; }; # Final check job - aggregates all results check = { runs-on = "ubuntu-24.04"; needs = [ "flake-check" "build" ]; "if" = "always()"; steps = [ { uses = actions.alls-green; "with" = { jobs = "\${{ toJSON(needs) }}"; }; } ]; }; }; }; # Regenerate workflows for Renovate PRs or manual trigger ".github/workflows/regenerate-workflows.yaml" = { name = "regenerate-workflows"; on = { pull_request.paths = [ "modules/flake-parts/actions.nix" "flake.lock" ]; workflow_dispatch = { }; }; permissions = { contents = "write"; pull-requests = "write"; }; jobs.regenerate = { runs-on = "ubuntu-24.04"; environment = "renovate"; # Only run for Renovate PRs or manual dispatch "if" = "github.actor == 'renovate[bot]' || github.event_name == 'workflow_dispatch'"; steps = [ ( steps.checkout // { "with" = { ref = "\${{ github.head_ref || github.ref_name }}"; token = "\${{ secrets.PAT }}"; fetch-depth = 2; }; } ) steps.nixInstaller steps.nixCache steps.cachix { name = "Regenerate workflows"; run = "nix run .#render-workflows"; } { name = "Amend commit with regenerated workflows"; run = '' git config user.name "github[bot]" git config user.email "noreply@github.com" git add .github/workflows/ git diff --staged --quiet || git commit --amend --no-edit git push --force-with-lease ''; } { uses = actions.automerge; "with" = { token = "\${{ secrets.PAT }}"; pull-request-number = "\${{ github.event.pull_request.number }}"; merge-method = "rebase"; }; } ]; }; }; }; }; } ================================================ FILE: modules/flake-parts/agenix-rekey.nix ================================================ # agenix-rekey flake-parts integration { inputs, self, ... }: { imports = [ inputs.agenix-rekey.flakeModule ]; perSystem = _: { # Configure agenix-rekey with our NixOS configurations agenix-rekey.nixosConfigurations = self.nixosConfigurations; }; } ================================================ FILE: modules/flake-parts/configurations.nix ================================================ # Configuration wiring using nixos-unified helpers # Uses mkLinuxSystem/mkMacosSystem/mkHomeConfiguration for standardized setup { self, ... }: let inherit (self.nixos-unified.lib) mkLinuxSystem; # We use home-manager = false because we have our own customized home-manager setup # in modules/nixos/default.nix and modules/darwin/default.nix mkNixos = mkLinuxSystem { home-manager = false; }; in { flake = { nixosConfigurations = { desktop = mkNixos (self + "/configurations/nixos/desktop"); laptop = mkNixos (self + "/configurations/nixos/laptop"); work = mkNixos (self + "/configurations/nixos/work"); }; homeConfigurations = { }; }; } ================================================ FILE: modules/flake-parts/default.nix ================================================ # Flake-parts module aggregator # Note: These must be path imports because self.flakeModules isn't available # during flake module evaluation (would cause infinite recursion) { inputs, ... }: { imports = [ # nixos-unified's flake module (provides activate, update packages) inputs.nixos-unified.flakeModules.default # Our modules ./actions.nix ./agenix-rekey.nix ./configurations.nix ./dev-shell.nix ./modules.nix ./overlays.nix ./packages.nix ./pre-commit.nix ./treefmt.nix ]; } ================================================ FILE: modules/flake-parts/dev-shell.nix ================================================ { inputs, ... }: { imports = [ inputs.git-hooks.flakeModule inputs.treefmt-nix.flakeModule ]; perSystem = { config, pkgs, ... }: { devShells.default = pkgs.mkShell { name = "nix-config"; nativeBuildInputs = with pkgs; [ # Nix config.agenix-rekey.package config.treefmt.build.wrapper cachix nil nix-fast-build nix-output-monitor nix-tree nixd # GitHub Actions act python3 python3Packages.pyflakes # Misc jq pre-commit rage ] ++ (builtins.attrValues config.treefmt.build.programs) ++ config.pre-commit.settings.enabledPackages; shellHook = '' ${config.pre-commit.installationScript} ''; }; }; } ================================================ FILE: modules/flake-parts/modules.nix ================================================ # Auto-discovered module exports # Modules are discovered recursively from modules/{nixos,darwin,home,shared,flake-parts}/ # Naming convention: # - top-level files: foo.nix -> foo # - subdirectory files: subdir/foo.nix -> subdir-foo # - directories with default.nix: subdir/ -> subdir (imports default.nix) # Shared modules are exposed under all outputs (nixos, darwin, home) { inputs, moduleLocation, ... }: let inherit (inputs.nixpkgs) lib; inherit (lib) mapAttrs mkOption types; # Recursively discover modules in a directory # Returns an attrset of { name = path; } discoverModules = baseDir: prefix: let contents = builtins.readDir baseDir; # Process a single entry (file or directory) processEntry = name: type: let path = baseDir + "/${name}"; nameWithoutNix = lib.removeSuffix ".nix" name; fullName = if prefix == "" then nameWithoutNix else "${prefix}-${nameWithoutNix}"; in if type == "regular" && lib.hasSuffix ".nix" name && !(prefix != "" && name == "default.nix") then # .nix file -> export as module (skip default.nix in subdirs; directory branch handles it) { ${fullName} = path; } else if type == "directory" then let subContents = builtins.readDir path; hasDefault = subContents ? "default.nix"; subPrefix = if prefix == "" then name else "${prefix}-${name}"; in # Directory with default.nix -> export as # Also recursively discover non-default.nix files in subdirectory (lib.optionalAttrs hasDefault { ${subPrefix} = path; }) // (discoverModules path subPrefix) else { }; # Process all entries and merge results modules = lib.foldlAttrs ( acc: name: type: acc // processEntry name type ) { } contents; in modules; # Discover modules for each category nixosModulesDiscovered = discoverModules ../../modules/nixos ""; homeModulesDiscovered = discoverModules ../../modules/home ""; sharedModulesDiscovered = discoverModules ../../modules/shared ""; flakeModulesDiscovered = discoverModules ../../modules/flake-parts ""; in { # flake-parts only defines `flake.nixosModules` with a `deferredModule` type # that wraps paths into attrsets. Define matching options for darwin/home so # the raw paths we discover get the same treatment (fixes Determinate Nix's # `isFunctionOrAttrs` schema check in `nix flake check`). options.flake = { homeModules = mkOption { type = types.lazyAttrsOf types.deferredModule; default = { }; apply = mapAttrs ( k: v: { _class = "homeManager"; _file = "${toString moduleLocation}#homeModules.${k}"; imports = [ v ]; } ); description = "Home Manager modules."; }; }; config.flake = { flakeModules = flakeModulesDiscovered; nixosModules = sharedModulesDiscovered // nixosModulesDiscovered; homeModules = sharedModulesDiscovered // homeModulesDiscovered; }; } ================================================ FILE: modules/flake-parts/overlays.nix ================================================ # Overlay configuration { inputs, ... }: let inherit (inputs.nixpkgs) lib; localOverlays = lib.mapAttrs' ( f: _: lib.nameValuePair (lib.removeSuffix ".nix" f) (import (../../overlays + "/${f}")) ) (builtins.readDir ../../overlays); in { flake.overlays = localOverlays // { default = lib.composeManyExtensions ( [ inputs.agenix.overlays.default inputs.emacs-overlay.overlay inputs.nur.overlays.default (final: _: { inherit (inputs.nix-fast-build.packages.${final.stdenv.hostPlatform.system}) nix-fast-build; }) (final: super: { emacs-lsp-booster = final.callPackage "${inputs.nixpkgs}/pkgs/by-name/em/emacs-lsp-booster/package.nix" { inherit (super) emacs; }; }) (final: _super: { resticprofile = final.callPackage "${inputs.nixpkgs_resticprofile}/pkgs/by-name/re/resticprofile/package.nix" { }; }) (_self: super: { emacs.pkgs = super.emacs.pkgs // { batppuccin-emacs = super.emacs.pkgs.trivialBuild { pname = "batppuccin-emacs"; version = "git"; src = inputs.batppuccin-emacs; }; eglot-multi-preset = super.emacs.pkgs.trivialBuild { pname = "eglot-multi-preset"; version = "git"; src = inputs.eglot-multi-preset; }; eglot-x = super.emacs.pkgs.trivialBuild { pname = "eglot-x"; version = "git"; src = inputs.eglot-x; }; treesit-sexp = super.emacs.pkgs.trivialBuild { pname = "treesit-sexp"; version = "git"; src = inputs.treesit-sexp; }; majutsu = super.emacs.pkgs.trivialBuild { pname = "majutsu"; version = "git"; src = inputs.majutsu; packageRequires = [ super.emacs.pkgs.magit ]; }; }; }) ] ++ (lib.attrValues localOverlays) ); }; perSystem = { system, ... }: { _module.args.pkgs = import inputs.nixpkgs { inherit system; overlays = [ inputs.self.overlays.default ]; config = { allowUnfree = true; allowAliases = true; }; }; }; } ================================================ FILE: modules/flake-parts/packages.nix ================================================ # Package definitions - exports host configurations for CI builds # Merges with nixos-unified's packages (activate, update) via config.packages { self, ... }: { perSystem = { pkgs, lib, system, ... }: let # Get derivations from all configuration types nixosDrvs = lib.mapAttrs (_: nixos: nixos.config.system.build.toplevel) ( self.nixosConfigurations or { } ); homeDrvs = lib.mapAttrs (_: home: home.activationPackage) (self.homeConfigurations or { }); hostDrvs = nixosDrvs // homeDrvs; # Filter to hosts compatible with current system compatHostDrvs = lib.filterAttrs ( name: _: let isNixos = (self.nixosConfigurations or { }) ? ${name}; isHome = (self.homeConfigurations or { }) ? ${name}; hostSystem = if isNixos then self.nixosConfigurations.${name}.pkgs.stdenv.hostPlatform.system else if isHome then self.homeConfigurations.${name}.pkgs.stdenv.hostPlatform.system else null; in hostSystem == system ) hostDrvs; # Create a linkFarm containing all compatible hosts compatHostsFarm = pkgs.linkFarm "hosts-${system}" ( lib.mapAttrsToList (name: path: { inherit name path; }) compatHostDrvs ); in { # Host configurations as packages (for CI) packages = compatHostDrvs // (lib.optionalAttrs (compatHostDrvs != { }) { default = compatHostsFarm; }) // { inherit (pkgs) nix-fast-build; }; }; } ================================================ FILE: modules/flake-parts/pre-commit.nix ================================================ # Pre-commit hooks configuration { perSystem.pre-commit = { check.enable = true; settings.hooks = { # actionlint.enable = true; check-added-large-files.enable = true; check-merge-conflicts.enable = true; check-symlinks.enable = true; convco.enable = true; deadnix.enable = true; # end-of-file-fixer.enable = true; nil.enable = true; ripsecrets.enable = true; # shellcheck.enable = true; statix.enable = true; # treefmt.enable = true; # trim-trailing-whitespace.enable = true; zizmor.enable = true; }; }; } ================================================ FILE: modules/flake-parts/treefmt.nix ================================================ # Treefmt configuration for code formatting { perSystem.treefmt = { projectRootFile = "flake.nix"; flakeCheck = false; # Covered by git-hooks check programs = { nixfmt.enable = true; shfmt = { enable = true; indent_size = 0; }; }; }; } ================================================ FILE: modules/home/asciinema.nix ================================================ { programs.asciinema = { enable = true; settings = { notifications = { command = "tmux display-message \"$TEXT\""; enable = false; }; playback = { next_marker_key = "m"; pause_key = "^p"; speed = 2; step_key = "s"; }; server = { url = "https://asciinema.example.com"; }; session = { add_marker_key = "^x"; capture_env = "SHELL,TERM,USER"; capture_input = true; command = "/run/current-system/sw/bin/bash -l"; idle_time_limit = 2; pause_key = "^p"; prefix_key = "^a"; }; }; }; } ================================================ FILE: modules/home/bash.nix ================================================ { config, ... }: { programs.bash = { enable = true; historyControl = [ "erasedups" "ignorespace" ]; historyFile = "${config.xdg.dataHome}/bash/history"; historyFileSize = 30000; historySize = 10000; bashrcExtra = '' CONST_SSH_SOCK="$HOME/.ssh/ssh-auth-sock" if [ ! -z ''${SSH_AUTH_SOCK+x} ] && [ "$SSH_AUTH_SOCK" != "$CONST_SSH_SOCK" ]; then rm -f "$CONST_SSH_SOCK" ln -sf "$SSH_AUTH_SOCK" "$CONST_SSH_SOCK" export SSH_AUTH_SOCK="$CONST_SSH_SOCK" fi ''; }; } ================================================ FILE: modules/home/btop.nix ================================================ { programs.btop = { enable = true; settings = { # If the theme set background should be shown, set to false if you want terminal background transparency. theme_background = true; # Sets if 24-bit truecolor should be used, will convert 24-bit colors to 256 color (6x6x6 color cube) if false. truecolor = true; # Set to true to force tty mode regardless if a real tty has been detected or not. # Will force 16-color mode and TTY theme, set all graph symbols to "tty" and swap out other non tty friendly symbols. force_tty = false; # Define presets for the layout of the boxes. Preset 0 is always all boxes shown with default settings. Max 9 presets. # Format: "box_name:P:G,box_name:P:G" P=(0 or 1) for alternate positons, G=graph symbol to use for box. # Use withespace " " as seprator between different presets. # Example: "cpu:0:default,mem:0:tty,proc:1:default cpu:0:braille,proc:0:tty" presets = "cpu:-6:default,proc:0:default cpu:0:default,mem:0:default,net:0:default cpu:0:block,net:0:tty"; # Set to true to enable "h,j,k,l" keys for directional control in lists. # Conflicting keys for h:"help" and k:"kill" is accessible while holding shift. vim_keys = true; # Rounded corners on boxes, is ignored if TTY mode is ON. rounded_corners = true; # Default symbols to use for graph creation, "braille", "block" or "tty". # "braille" offers the highest resolution but might not be included in all fonts. # "block" has half the resolution of braille but uses more common characters. # "tty" uses only 3 different symbols but will work with most fonts and should work in a real TTY. # Note that "tty" only has half the horizontal resolution of the other two, so will show a shorter historical view. graph_symbol = "braille"; # Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty". graph_symbol_cpu = "default"; # Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty". graph_symbol_mem = "default"; # Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty". graph_symbol_net = "default"; # Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty". graph_symbol_proc = "default"; # Manually set which boxes to show. Available values are "cpu mem net proc", separate values with whitespace. shown_boxes = "cpu mem net proc"; # Update time in milliseconds, recommended 2000 ms or above for better sample times for graphs. update_ms = 1000; # Processes sorting, "pid" "program" "arguments" "threads" "user" "memory" "cpu lazy" "cpu responsive", # "cpu lazy" sorts top process over time (easier to follow), "cpu responsive" updates top process directly. proc_sorting = "cpu lazy"; # Reverse sorting order, true or false. proc_reversed = false; # Show processes as a tree. proc_tree = false; # Use the cpu graph colors in the process list. proc_colors = true; # Use a darkening gradient in the process list. proc_gradient = true; # If process cpu usage should be of the core it's running on or usage of the total available cpu power. proc_per_core = true; # Show process memory as bytes instead of percent. proc_mem_bytes = true; # Use /proc/[pid]/smaps for memory information in the process info box (very slow but more accurate) proc_info_smaps = false; # Show proc box on left side of screen instead of right. proc_left = false; # Sets the CPU stat shown in upper half of the CPU graph, "total" is always available. # Select from a list of detected attributes from the options menu. cpu_graph_upper = "total"; # Sets the CPU stat shown in lower half of the CPU graph, "total" is always available. # Select from a list of detected attributes from the options menu. cpu_graph_lower = "total"; # Toggles if the lower CPU graph should be inverted. cpu_invert_lower = true; # Set to true to completely disable the lower CPU graph. cpu_single_graph = false; # Show cpu box at bottom of screen instead of top. cpu_bottom = false; # Shows the system uptime in the CPU box. show_uptime = true; # Show cpu temperature. check_temp = true; # Which sensor to use for cpu temperature, use options menu to select from list of available sensors. cpu_sensor = "Auto"; # Show temperatures for cpu cores also if check_temp is true and sensors has been found. show_coretemp = true; # Set a custom mapping between core and coretemp, can be needed on certain cpus to get correct temperature for correct core. # Use lm-sensors or similar to see which cores are reporting temperatures on your machine. # Format "x:y" x=core with wrong temp, y=core with correct temp, use space as separator between multiple entries. # Example: "4:0 5:1 6:3" cpu_core_map = ""; # Which temperature scale to use, available values: "celsius", "fahrenheit", "kelvin" and "rankine". temp_scale = "celsius"; # Show CPU frequency. show_cpu_freq = true; # Draw a clock at top of screen, formatting according to strftime, empty string to disable. # Special formatting: /host = hostname | /user = username | /uptime = system uptime clock_format = "%X"; # Update main ui in background when menus are showing, set this to false if the menus is flickering too much for comfort. background_update = true; # Custom cpu model name, empty string to disable. custom_cpu_name = ""; # Optional filter for shown disks, should be full path of a mountpoint, separate multiple values with whitespace " ". # Begin line with "exclude=" to change to exclude filter, otherwise defaults to "most include" filter. Example: disks_filter="exclude=/boot /home/user". disks_filter = "/ /nix /nix/state /nix/store /mnt/emp /mnt/movies /mnt/music /mnt/redacted /mnt/shows"; # Show graphs instead of meters for memory values. mem_graphs = false; # Show mem box below net box instead of above. mem_below_net = false; # If swap memory should be shown in memory box. show_swap = true; # Show swap as a disk, ignores show_swap value above, inserts itself after first disk. swap_disk = true; # If mem box should be split to also show disks info. show_disks = true; # Filter out non physical disks. Set this to false to include network disks, RAM disks and similar. only_physical = false; # Read disks list from /etc/fstab. This also disables only_physical. use_fstab = false; # Toggles if io activity % (disk busy time) should be shown in regular disk usage view. show_io_stat = true; # Toggles io mode for disks, showing big graphs for disk read/write speeds. io_mode = false; # Set to true to show combined read/write io graphs in io mode. io_graph_combined = false; # Set the top speed for the io graphs in MiB/s (100 by default), use format "mountpoint:speed" separate disks with whitespace " ". # Example: "/mnt/media:100 /:20 /boot:1". io_graph_speeds = ""; # Set fixed values for network graphs in Mebibits. Is only used if net_auto is also set to false. net_download = 1024; net_upload = 1024; # Use network graphs auto rescaling mode, ignores any values set above and rescales down to 10 Kibibytes at the lowest. net_auto = false; # Sync the auto scaling for download and upload to whichever currently has the highest scale. net_sync = false; # Starts with the Network Interface specified here. net_iface = ""; # Show battery stats in top right if battery is present. show_battery = true; # Which battery to use if multiple are present. "Auto" for auto detection. selected_battery = "Auto"; # Set loglevel for "~/.config/btop/btop.log" levels are: "ERROR" "WARNING" "INFO" "DEBUG". # The level set includes all lower levels, i.e. "DEBUG" will show all logging info. log_level = "WARNING"; }; }; } ================================================ FILE: modules/home/default.nix ================================================ # Shared home-manager configuration for all platforms # External modules (impermanence, nix-index-database, nixvim, stylix) are imported in configurations/ { flake, lib, # osConfig ? null, pkgs, ... }: let inherit (flake) self; # When integrated with NixOS/Darwin, osConfig is the parent system config # When standalone, osConfig is null # isIntegrated = osConfig != null; in { imports = with self.homeModules; [ asciinema bash btop delta dev fish git htop jujutsu jjui ssh starship syncthing television tmux xdg zsh ]; # XXX: Manually enabled in the graphic module dconf.enable = false; catppuccin = { enable = true; flavor = "mocha"; accent = "blue"; cursors.enable = true; }; gtk.enable = true; home.pointerCursor = { x11.enable = true; gtk.enable = true; }; home = { stateVersion = lib.mkDefault "26.05"; packages = lib.filter (lib.meta.availableOn pkgs.stdenv.hostPlatform) ( with pkgs; [ attic-client ccinit fd git-annex git-remote-gcrypt incus.client mosh nix-closure-size nix-output-monitor pwgen-secure rsync truecolor-check viddy xh zrok xournalpp dbeaver-bin nix-closure-size mosh # dev colordiff # net dumbpipe rclone sendme tailscale tcpdump xh # nix cachix comma manix nix-update nixpkgs-fmt # cool cli tools fd hexyl pwgen sd # find & replace doggo # Android # android-studio # scrcpy # backup restic # utils file strace pv docker-compose prettyping # a nicer ping killall unar # kubernetes kubectl kubectx kubelogin-oidc # istioctl kubernetes-helm kind docker-credential-helpers viddy natscli just # media mediainfo kooha zrok devpod altair broot distrobox incus.client srgn attic-client # aider-chat git-annex git-remote-gcrypt spacer faketty tkey-ssh-agent jan hl-log-viewer android-tools resticprofile openbao ] ++ (with pkgs.hunspellDicts; [ fr-moderne en_CA ]) ); shellAliases = { cat = "bat"; cls = "clear"; j = "${pkgs.just}/bin/just"; l = "ls"; la = "ls --all"; ls = "eza --binary --header --long"; man = "batman"; }; }; programs = { alacritty.enable = true; atool = { enable = true; extraPackages = with pkgs; [ bzip2 gnutar gzip lhasa lzop p7zip unzip xz zip ]; }; atuin = { enable = true; settings.auto_sync = true; flags = [ "--disable-up-arrow" ]; }; bat = { enable = true; extraPackages = with pkgs.bat-extras; [ batman ]; }; carapace.enable = true; difftastic.enable = true; eza.enable = true; fastfetch.enable = true; fd.enable = true; fzf = { enable = true; tmux.enableShellIntegration = true; }; gcc = { enable = true; colors = { error = "01;31"; }; }; gpg.enable = true; grype = { enable = true; settings = { check-for-app-update = false; }; }; jq.enable = true; k9s = { enable = true; aliases = { # Use pp as an alias for Pod pp = "v1/pods"; }; hotKeys = { shift-0 = { shortCut = "Shift-0"; description = "Viewing pods"; command = "pods"; }; }; plugins = { # Defines a plugin to provide a `ctrl-l` shortcut to # tail the logs while in pod view. fred = { shortCut = "Ctrl-L"; description = "Pod logs"; scopes = [ "po" ]; command = "kubectl"; background = false; args = [ "logs" "-f" "$NAME" "-n" "$NAMESPACE" "--context" "$CLUSTER" ]; }; jsonLogs = { shortCut = "Shift-L"; description = "Prettified json logs"; scopes = [ "daemonset" "deploy" "job" "pod" "replicaset" "service" "statefulset" ]; command = "sh"; args = [ "-c" '' kubectl logs --follow --context="$CONTEXT" --namespace="$NAMESPACE" "$RESOURCE_NAME/$NAME" | ${lib.getExe pkgs.hl-log-viewer} --paging=never '' ]; }; }; settings = { k9s = { refreshRate = 2; }; }; views = { "v1/pods" = { columns = [ "AGE" "NAMESPACE" "NAME" "IP" "NODE" "STATUS" "READY" ]; }; }; }; qalculate = { enable = true; package = pkgs.qalculate-gtk; settings = { General = { precision = 10; colorize = 1; save_mode_on_exit = 1; save_definitions_on_exit = 0; }; Mode = { angle_unit = 1; number_base = 10; min_deci = 0; max_deci = -1; }; }; }; kubecolor = { enable = true; enableAlias = true; settings = { preset = "dark"; paging = "auto"; }; }; kubeswitch = { enable = true; }; mangohud.enable = true; nh = { enable = true; flake = "git+https://github.com/bbigras/nix-config"; }; mcp = { enable = true; servers = { context7 = { url = "https://mcp.context7.com/mcp"; headers = { CONTEXT7_API_KEY = "{env:CONTEXT7_API_KEY}"; }; }; }; }; pay-respects.enable = true; ripgrep.enable = true; sesh.enable = true; streamlink = { enable = true; settings = { player = "${pkgs.mpv}/bin/mpv"; player-args = "--cache 2048"; player-no-close = true; twitch-disable-ads = true; twitch-low-latency = true; }; }; swappy = { enable = true; settings = { Default = { auto_save = false; custom_color = "rgba(193,125,17,1)"; early_exit = false; fill_shape = false; line_size = 5; paint_mode = "brush"; save_dir = "$HOME/Desktop"; save_filename_format = "swappy-%Y%m%d-%H%M%S.png"; show_panel = false; text_font = "sans-serif"; text_size = 20; transparency = 50; transparent = false; }; }; }; tirith = { enable = false; policy = { version = 1; fail_mode = "open"; allow_bypass = true; severity_overrides = { docker_untrusted_registry = "CRITICAL"; }; }; }; trippy.enable = true; vesktop = { enable = false; settings = { appBadge = false; arRPC = true; checkUpdates = false; customTitleBar = false; disableMinSize = true; minimizeToTray = false; tray = false; splashBackground = "#000000"; splashColor = "#ffffff"; splashTheming = true; staticTitle = true; hardwareAcceleration = true; discordBranch = "stable"; }; vencord.settings = { autoUpdate = false; autoUpdateNotification = false; notifyAboutUpdates = false; useQuickCss = true; disableMinSize = true; plugins = { # MessageLogger = { # enabled = true; # ignoreSelf = true; # }; FakeNitro.enabled = true; }; }; }; vivid.enable = true; tealdeer.enable = true; zoxide.enable = true; }; systemd.user.startServices = "sd-switch"; services.tailscale-systray.enable = true; xdg.configFile."nixpkgs/config.nix".text = "{ allowUnfree = true; }"; } ================================================ FILE: modules/home/delta.nix ================================================ { programs = { delta = { enable = true; enableGitIntegration = true; enableJujutsuIntegration = true; }; jjui = { settings = { preview = { file_command = [ "diff" "--color" "always" "--config" "ui.diff-formatter=delta" "-r" "$change_id" "$file" ]; revision_command = [ "show" "--color" "always" "-r" "$change_id" "--config" "ui.diff-formatter=delta" ]; }; }; }; }; } ================================================ FILE: modules/home/dev/default.nix ================================================ { lib, pkgs, ... }: { home = { extraOutputsToInstall = [ "doc" "devdoc" ]; file.gdbinit = { target = ".gdbinit"; text = '' set auto-load safe-path / ''; }; packages = with pkgs; [ git-lfs (lib.hiPrio nixpkgs-review) nix-update upterm ]; }; programs = { direnv = { enable = true; silent = true; nix-direnv.enable = true; stdlib = '' : ''${XDG_CACHE_HOME:=$HOME/.cache} declare -A direnv_layout_dirs direnv_layout_dir() { echo "''${direnv_layout_dirs[$PWD]:=$( echo -n "$XDG_CACHE_HOME"/direnv/layouts/ echo -n "$PWD" | shasum | cut -d ' ' -f 1 )}" } ''; }; gh = { enable = true; settings.git_protocol = "ssh"; }; }; } ================================================ FILE: modules/home/emacs/android.nix ================================================ { programs.emacs = { init = { usePackage = { kotlin-ts-mode = { enable = true; defer = true; }; lsp-dart = { enable = true; defer = true; command = [ "lsp-dart-setup" ]; }; flutter = { enable = true; defer = true; command = [ "flutter-run" "flutter-hot-reload" ]; }; }; }; }; } ================================================ FILE: modules/home/emacs/consult.nix ================================================ { programs.emacs = { init = { usePackage = { consult = { enable = true; after = [ "org" ]; # preview is now enabled automatically in recent consult versions bind = { "C-c M-x" = "consult-mode-command"; "C-c h" = "consult-history"; "C-c k" = "consult-kmacro"; "C-c i" = "consult-info"; # ([remap Info-search] = "consult-info"; # C-x bindings (ctl-x-map) "C-x M-:" = "consult-complex-command"; # orig. repeat-complex-command "C-x b" = "consult-buffer"; # orig. switch-to-buffer "C-x 4 b" = "consult-buffer-other-window"; # orig. switch-to-buffer-other-window "C-x 5 b" = "consult-buffer-other-frame"; # orig. switch-to-buffer-other-frame "C-x r b" = "consult-bookmark"; # orig. bookmark-jump # "C-x p b" = "consult-project-buffer"; # orig. project-switch-to-buffer # Custom M-# bindings for fast register access "M-#" = "consult-register-load"; "M-'" = "consult-register-store"; # orig. abbrev-prefix-mark (unrelated) "C-M-#" = "consult-register"; # Other custom bindings "M-y" = "consult-yank-pop"; # orig. yank-pop # M-g bindings (goto-map) "M-g e" = "consult-compile-error"; "M-g f" = "consult-flymake"; # Alternative: consult-flycheck "M-g g" = "consult-goto-line"; # orig. goto-line "M-g M-g" = "consult-goto-line"; # orig. goto-line "M-g o" = "consult-outline"; # Alternative: consult-org-heading "M-g m" = "consult-mark"; "M-g k" = "consult-global-mark"; "M-g i" = "consult-imenu"; "M-g I" = "consult-imenu-multi"; # M-s bindings (search-map) "M-s d" = "consult-find"; "M-s D" = "consult-locate"; "M-s g" = "consult-grep"; "M-s G" = "consult-git-grep"; "M-s r" = "consult-ripgrep"; "M-s l" = "consult-line"; "M-s L" = "consult-line-multi"; "M-s k" = "consult-keep-lines"; "M-s u" = "consult-focus-lines"; # Isearch integration "M-s e" = "consult-isearch-history"; }; bindLocal = { isearch-mode-map = { "M-e" = "consult-isearch-history"; # orig. isearch-edit-string "M-s e" = "consult-isearch-history"; # orig. isearch-edit-string "M-s l" = "consult-line"; # needed by consult-line to detect isearch "M-s L" = "consult-line-multi"; # needed by consult-line to detect isearch }; # Minibuffer history minibuffer-local-map = { "M-s" = "consult-history"; # orig. next-matching-history-element "M-r" = "consult-history"; # orig. previous-matching-history-element }; }; init = '' ;; These settings can be applied before consult loads since they ;; configure built-in Emacs variables, not consult functions. (setq register-preview-delay 0.5 register-preview-function #'consult-register-format) ;; Optionally tweak the register preview window. (advice-add #'register-preview :override #'consult-register-window) ;; Use Consult to select xref locations with preview (setq xref-show-xrefs-function #'consult-xref xref-show-definitions-function #'consult-xref) ;; org clock (can be set before consult loads) (setq org-clock-persist t) (with-eval-after-load 'org (org-clock-persistence-insinuate)) ''; config = '' (require 'consult-xref) (require 'consult-org) ;; Configure preview keys per-command (consult-customize consult-theme :preview-key '(:debounce 0.2 any) consult-ripgrep consult-git-grep consult-grep consult-bookmark consult-recent-file consult-xref :preview-key '(:debounce 0.4 any)) ;; Configure the narrowing key. (setq consult-narrow-key "<") (defvar consult--previous-point nil "Location of point before entering minibuffer. Used to preselect nearest headings and imenu items.") (defun consult--set-previous-point () "Save location of point. Used before entering the minibuffer." (setq consult--previous-point (point))) (advice-add #'consult-org-heading :before #'consult--set-previous-point) (advice-add #'consult-outline :before #'consult--set-previous-point) (advice-add #'vertico--update :after #'consult-vertico--update-choose) (defun consult-vertico--update-choose (&rest _) "Pick the nearest candidate rather than the first after updating candidates." (when (and consult--previous-point (memq current-minibuffer-command '(consult-org-heading consult-outline))) (setq vertico--index (max 0 ; if none above, choose the first below (1- (or (seq-position vertico--candidates consult--previous-point (lambda (cand point-pos) ; counts on candidate list being sorted (> (cl-case current-minibuffer-command (consult-outline (car (consult--get-location cand))) (consult-org-heading (get-text-property 0 'consult--candidate cand))) point-pos))) (length vertico--candidates)))))) (setq consult--previous-point nil)) (defun consult-clock-in (&optional match scope resolve) "Clock into an Org heading." (interactive (list nil nil current-prefix-arg)) (require 'org-clock) (org-clock-load) (save-window-excursion (consult-org-heading match (or scope (thread-last org-clock-history (mapcar 'marker-buffer) (mapcar 'buffer-file-name) (delete-dups) (delq nil)) (user-error "No recent clocked tasks"))) (org-clock-in nil (when resolve (org-resolve-clocks) (org-read-date t t))))) (consult-customize consult-clock-in :prompt "Clock in: " :preview-key "M-." :group (lambda (cand transform) (let* ((marker (get-text-property 0 'consult--candidate cand)) (name (if (member marker org-clock-history) "*Recent*" (buffer-name (marker-buffer marker))))) (if transform (substring cand (1+ (length name))) name)))) ''; }; # consult-imenu = { # enable = true; # }; # consult-dir = { # enable = true; # bind = { # "C-x C-d" = "consult-dir"; # }; # config = '' # (define-key minibuffer-local-completion-map (kbd "C-x C-d") #'consult-dir) # (define-key minibuffer-local-completion-map (kbd "C-x C-j") #'consult-dir-jump-file) # ''; # }; # consult-flycheck = { # enable = true; # bindLocal = { # flycheck-command-map = { # "!" = "consult-flycheck"; # }; # }; # }; embark-consult = { enable = true; after = [ "embark" "consult" ]; # consult-preview-at-point-mode is obsolete; preview is now automatic }; }; }; }; } ================================================ FILE: modules/home/emacs/default.nix ================================================ { pkgs, lib, config, osConfig, flake, ... }: let inherit (flake) inputs; inherit (inputs) minimal-emacs-d; in { imports = [ ./consult.nix ./denote.nix ./rust.nix ./typescript.nix ./org-mode.nix ./tree-sitter.nix ]; home.packages = with pkgs; lib.optionals (stdenv.hostPlatform.system == "x86_64-linux") [ samba # for tramp mermaid-cli ] ++ [ pkgs.rassumfrassum ]; programs.emacs = { enable = true; package = pkgs.emacs-nox; init = { enable = true; checkGeneratedConfig = true; recommendedGcSettings = false; prelude = builtins.readFile "${minimal-emacs-d}/init.el"; earlyInit = (builtins.readFile "${minimal-emacs-d}/early-init.el") + "\n" + '' (defconst dw/is-termux (getenv "ANDROID_ROOT")) ;; list font families with `fc-list : family` (set-face-attribute 'default nil :family "NotoSansM Nerd Font Mono" :height 130) ;; Add to your init.el before loading nix-ts-mode (setq treesit-font-lock-level 4) ;; When Delete Selection mode is enabled, typed text replaces the selection ;; if the selection is active. (delete-selection-mode 1) ;; Paren match highlighting (add-hook 'after-init-hook #'show-paren-mode) ;; Track changes in the window configuration, allowing undoing actions such as ;; closing windows. (add-hook 'after-init-hook #'winner-mode) ;; Window dividers separate windows visually. Window dividers are bars that can ;; be dragged with the mouse, thus allowing you to easily resize adjacent ;; windows. ;; https://www.gnu.org/software/emacs/manual/html_node/emacs/Window-Dividers.html (add-hook 'after-init-hook #'window-divider-mode) ;; Constrain vertical cursor movement to lines within the buffer (setq dired-movement-style 'bounded-files) ;; Dired buffers: Automatically hide file details (permissions, size, ;; modification date, etc.) and all the files in the `dired-omit-files' regular ;; expression for a cleaner display. (add-hook 'dired-mode-hook #'dired-hide-details-mode) ;; Hide files from dired (setq dired-omit-files (concat "\\`[.]\\'" "\\|\\(?:\\.js\\)?\\.meta\\'" "\\|\\.\\(?:elc|a\\|o\\|pyc\\|pyo\\|swp\\|class\\)\\'" "\\|^\\.DS_Store\\'" "\\|^\\.\\(?:svn\\|git\\)\\'" "\\|^\\.ccls-cache\\'" "\\|^__pycache__\\'" "\\|^\\.project\\(?:ile\\)?\\'" "\\|^flycheck_.*" "\\|^flymake_.*")) (add-hook 'dired-mode-hook #'dired-omit-mode) ;; dired: Group directories first (with-eval-after-load 'dired (let ((args "--group-directories-first -ahlv")) (when (or (eq system-type 'darwin) (eq system-type 'berkeley-unix)) (if-let* ((gls (executable-find "gls"))) (setq insert-directory-program gls) (setq args nil))) (when args (setq dired-listing-switches args)))) ;; Enables visual indication of minibuffer recursion depth after initialization. (add-hook 'after-init-hook #'minibuffer-depth-indicate-mode) ;; Configure Emacs to ask for confirmation before exiting (setq confirm-kill-emacs 'y-or-n-p) ''; usePackage = { # logview.enable = true; benchmark-init = { enable = false; earlyInit = '' (require 'benchmark-init) (benchmark-init/activate) ''; }; journalctl-mode = { enable = true; defer = true; command = [ "journalctl-mode" ]; }; project = { enable = true; defer = 1; command = [ "project-find-file" "project-switch-to-buffer" "project-switch-project" ]; custom = { "project-mode-line" = "t"; "project-kill-buffers-display-buffer-list" = "t"; }; config = lib.optionalString config.programs.jujutsu.enable '' (add-to-list 'project-vc-extra-root-markers ".jj") ''; }; consult-project-extra = { enable = true; custom = { "consult-project-function" = "#'consult-project-extra-project-fn"; }; bind = { "C-c p f" = "consult-project-extra-find"; "C-c p o" = "consult-project-extra-find-other-window"; }; }; jinx = { enable = true; hook = [ "(emacs-startup . global-jinx-mode)" ]; bind = { "M-$" = "jinx-correct"; "C-M-$" = "jinx-languages"; }; custom = { "jinx-languages" = ''"fr_CA en_CA"''; }; }; p-search = { enable = true; defer = true; command = [ "p-search" ]; config = '' (require 'p-search-x-denote) ''; }; agent-shell = { enable = true; extraPackages = [ pkgs.claude-agent-acp ]; config = '' (setopt agent-shell-file-completion-enabled t) ''; }; gleam-ts-mode = { enable = true; extraPackages = [ pkgs.glas ]; hook = [ "(gleam-ts-mode . eglot-ensure)" ]; config = '' (with-eval-after-load 'eglot (setq eglot-server-programs (cons '(gleam-ts-mode . ("rass" "--" "glas")) (assoc-delete-all 'gleam-ts-mode eglot-server-programs)))) (add-hook 'gleam-ts-mode-hook (lambda () (add-hook 'after-save-hook #'eglot-format nil t))) ''; extraConfig = '' :mode (rx ".gleam" eos) ''; }; dock = { enable = true; defer = true; command = [ "dock-set-needs-attention" ]; init = '' (add-hook 'compilation-finish-functions (lambda (_buf _msg) (dock-set-needs-attention))) ''; }; dired = { enable = true; earlyInit = '' (require 'dired-x) (require 'wdired) (require 'hl-line) (require 'mouse) (require 'image-dired) (require 'image-dired-dired) ''; extraPackages = [ pkgs.imagemagick ]; bindLocal = { dired-mode-map = { "M-o" = "dired-omit-mode"; "E" = "wdired-change-to-wdired-mode"; "M-n" = "dired-next-dirline"; "M-p" = "dired-prev-dirline"; "]" = "dired-next-subdir"; "[" = "dired-prev-subdir"; "A-M-" = "browse-url-of-dired-file"; "" = "dired-prev-subdir"; "TAB" = "dired-next-subdir"; "M-j" = "dired-goto-subdir"; ";" = "image-dired-dired-toggle-marked-thumbs"; }; image-dired-thumbnail-mode-map = { "n" = "image-dired-display-next"; "p" = "image-dired-display-previous"; }; }; config = '' (add-hook 'dired-mode-hook 'hl-line-mode) (add-hook 'dired-mode-hook 'context-menu-mode) (add-hook 'dired-mode-hook 'dired-async-mode) (add-hook 'dired-mode-hook (lambda () (setq-local mouse-1-click-follows-link 'double))) ''; }; casual-suite = { enable = true; after = [ "org-agenda" ]; bind = { "C-o" = "casual-editkit-main-tmenu"; "M-g" = "casual-avy-tmenu"; "C-c w" = "casual-editkit-windows-tmenu"; "C-c r" = "casual-editkit-rectangle-tmenu"; "C-c g" = "casual-editkit-registers-tmenu"; "C-c p" = "casual-editkit-project-tmenu"; }; bindLocal = { bookmark-bmenu-mode-map = { "C-o" = "casual-bookmarks-tmenu"; "J" = "bookmark-jump"; }; calc-mode-map."C-o" = "casual-calc-tmenu"; css-mode-map."M-m" = "casual-css-tmenu"; csv-mode-map."M-m" = "casual-csv-tmenu"; dired-mode-map = { "C-o" = "casual-dired-tmenu"; "s" = "casual-dired-sort-by-tmenu"; "/" = "casual-dired-search-replace-tmenu"; }; ediff-mode-map."C-o" = "casual-ediff-tmenu"; isearch-mode-map."C-o" = "casual-isearch-tmenu"; org-agenda-mode-map = { "C-o" = "casual-agenda-tmenu"; "M-j" = "org-agenda-clock-goto"; "J" = "bookmark-jump"; }; org-mode-map."M-m" = "casual-org-tmenu"; org-table-fedit-map."M-m" = "casual-org-table-fedit-tmenu"; reb-lisp-mode-map."C-o" = "casual-re-builder-tmenu"; reb-mode-map."C-o" = "casual-re-builder-tmenu"; symbol-overlay-map."C-o" = "casual-symbol-overlay-tmenu"; compilation-mode-map."C-o" = "casual-compile-tmenu"; grep-mode-map."C-o" = "casual-compile-tmenu"; compilation-mode-map = { "k" = "compilation-previous-error"; "j" = "compilation-next-error"; "o" = "compilation-display-error"; "[" = "compilation-previous-file"; "]" = "compilation-next-file"; }; grep-mode-map = { "k" = "compilation-previous-error"; "j" = "compilation-next-error"; "o" = "compilation-display-error"; "[" = "compilation-previous-file"; "]" = "compilation-next-file"; }; html-ts-mode-map."M-m" = "casual-html-tmenu"; html-ts-mode-map."C-c m" = "casual-html-tags-tmenu"; image-mode-map."C-o" = "casual-image-tmenu"; ibuffer-mode-map = { "C-o" = "casual-ibuffer-tmenu"; "F" = "casual-ibuffer-filter-tmenu"; "s" = "casual-ibuffer-sortby-tmenu"; "{" = "ibuffer-backwards-next-marked"; "}" = "ibuffer-forward-next-marked"; "[" = "ibuffer-backward-filter-group"; "]" = "ibuffer-forward-filter-group"; "$" = "ibuffer-toggle-filter-group"; "" = "ibuffer-visit-buffer"; "M-" = "ibuffer-visit-buffer-other-window"; }; }; # https://kickingvegas.github.io/casual/Ediff-Install.html config = '' (casual-ediff-install) (setq ediff-keep-variants nil ediff-window-setup-function 'ediff-setup-windows-plain ediff-split-window-function 'split-window-horizontally) (require 'hl-line) (add-hook 'bookmark-bmenu-mode-hook #'hl-line-mode) (add-hook 'ibuffer-mode-hook #'hl-line-mode) (add-hook 'ibuffer-mode-hook #'ibuffer-auto-mode) ;; disable line wrap (add-hook 'csv-mode-hook (lambda () (visual-line-mode -1) (toggle-truncate-lines 1))) ;; auto detect separator (add-hook 'csv-mode-hook #'csv-guess-set-separator) ;; turn on field alignment (add-hook 'csv-mode-hook #'csv-align-mode) ''; }; # inter-present-mode = { # enable = true; # package = _epkgs: pkgs.emacsPackages.inter-present-mode; # command = [ # "inter-present-mode" # ]; # # bindLocal = { # # emo-map."C-s" = "(lambda () (interactive) (inter-present-mode 'toggle))"; # # }; # config = '' # (keymap-local-unset "C-z") # (setopt inter-present-mode-keymap-prefix "C-z" # inter-present-mode-face-height 280 # inter-present-mode-start-heading t) # ''; # }; kele = { enable = true; defer = true; command = [ "kele-mode" "kele-get" ]; }; eglot-multi-preset = { enable = true; package = _epkgs: pkgs.emacs.pkgs.eglot-multi-preset; extraPackages = with pkgs; [ tailwindcss-language-server vscode-langservers-extracted ]; config = '' (eglot-multi-preset-mode 1) ''; }; treesit-sexp = { enable = true; package = _epkgs: pkgs.emacs.pkgs.treesit-sexp; config = '' (global-treesit-sexp-mode 1) ''; }; majutsu = { enable = false; package = _epkgs: pkgs.emacs.pkgs.majutsu; }; # combobulate = { # enable = true; # package = _epkgs: pkgs.emacsPackages.combobulate; # config = '' # ;; You can customize Combobulate's key prefix here. # ;; Note that you may have to restart Emacs for this to take effect! # (setq combobulate-key-prefix "C-c o") # ;; Optional, but recommended. # ;; # ;; You can manually enable Combobulate with `M-x # ;; combobulate-mode'. # :hook ((python-ts-mode . combobulate-mode) # (js-ts-mode . combobulate-mode) # (css-ts-mode . combobulate-mode) # (rust-ts-mode . combobulate-mode) # (yaml-ts-mode . combobulate-mode) # (typescript-ts-mode . combobulate-mode) # (tsx-ts-mode . combobulate-mode)) # ''; # }; disproject = { enable = true; bindLocal = { ctl-x-map."p" = "disproject-dispatch"; }; }; pulsar = { enable = true; hook = [ "(after-init . pulsar-global-mode)" ]; config = '' (add-hook 'next-error-hook #'pulsar-pulse-line) (add-hook 'minibuffer-setup-hook #'pulsar-pulse-line-blue) ;; integration with the `consult' package: (add-hook 'consult-after-jump-hook #'pulsar-recenter-top) (add-hook 'consult-after-jump-hook #'pulsar-reveal-entry) ''; }; dashboard = { enable = true; config = '' (setq dashboard-projects-backend 'project-el) (setq dashboard-items '((recents . 5) (bookmarks . 5) (projects . 5) (agenda . 5) (registers . 5))) (setq dashboard-week-agenda t) (dashboard-setup-startup-hook) ''; }; # sqlformat = { # enable = true; # config = '' # (setq sqlformat-command 'pgformatter) # ''; # }; # activities = { # enable = true; # bind = { # # "M-g d" = "dogears-go"; # "C-x C-a C-n" = "activities-new"; # "C-x C-a C-a" = "activities-resume"; # "C-x C-a C-s" = "activities-suspend"; # "C-x C-a C-k" = "activities-kill"; # "C-x C-a RET" = "activities-switch"; # "C-x C-a g" = "activities-revert"; # "C-x C-a l" = "activities-list"; # }; # init = '' # ;; Prevent `edebug' default bindings from interfering. # (setq edebug-inhibit-emacs-lisp-mode-bindings t) # ''; # }; batppuccin-mocha-theme = { enable = true; package = _epkgs: pkgs.emacs.pkgs.batppuccin-emacs; config = '' (load-theme 'batppuccin-mocha t) ''; }; dwim-shell-command = { enable = true; defer = true; command = [ "dwim-shell-command" "dwim-shell-command-on-marked-files" ]; extraPackages = [ pkgs.curl pkgs.sendme pkgs.zrok ]; config = '' (require 'dwim-shell-commands) (defun my/dwim-shell-commands-zrok-serve-dir () "HTTP serve current directory." (interactive) (cond ((executable-find "zrok") (dwim-shell-command-on-marked-files "zrok serve current dir" "zrok share public --backend-mode web --headless ." :utils "zrok" :focus-now t :no-progress t)) (t (error "zrok not found")))) (defun my/dwim-shell-commands-sendme-send () "Send current file or dir with sendme." (interactive) (cond ((executable-find "sendme") (dwim-shell-command-on-marked-files "sendme send file or dir" "sendme send --clipboard '<>'" :utils "sendme" )) (t (error "sendme not found")))) (defun my/syncthing-get-api-key () "Get Syncthing API key from ~/.local/state/syncthing/config.xml." (let ((config-file (expand-file-name "~/.local/state/syncthing/config.xml"))) (unless (file-exists-p config-file) (error "Syncthing config not found: %s" config-file)) (with-temp-buffer (insert-file-contents config-file) (goto-char (point-min)) (if (re-search-forward "\\([^<]+\\)" nil t) (match-string 1) (error "No found in %s" config-file))))) (defun my/syncthing-get-folders () "Fetch Syncthing folders via REST API." (require 'json) (let ((api-key (my/syncthing-get-api-key))) (unless api-key (error "No Syncthing API key found")) (with-temp-buffer (insert (format "header \"X-API-Key: %s\"\n" api-key)) (let ((exit-code (call-process-region (point-min) (point-max) "curl" t t nil "-s" "--config" "-" "http://localhost:8384/rest/config/folders"))) (unless (eq exit-code 0) (error "curl failed with exit code %d: %s" exit-code (buffer-string))) (goto-char (point-min)) (json-parse-buffer :object-type 'alist))))) (defun my/dwim-shell-commands-syncthing-copy () "Copy file(s) to a Syncthing folder." (interactive) (let* ((folders (my/syncthing-get-folders)) (folder-alist (mapcar (lambda (f) (cons (or (alist-get 'label f) (alist-get 'id f)) (alist-get 'path f))) folders)) (name (completing-read "Syncthing folder: " (mapcar #'car folder-alist) nil t)) (dest (expand-file-name (cdr (assoc name folder-alist))))) (dwim-shell-command-on-marked-files (format "Copy to Syncthing folder '%s'" name) (format "cp -r '<>' '%s/'" dest) :utils "cp" :silent-success t))) ''; }; # consult-recoll.enable = true; tramp = { enable = false; custom = { "tramp-default-method" = ''"rsync"''; }; config = '' (setq vc-ignore-dir-regexp (format "\\(%s\\)\\|\\(%s\\)" vc-ignore-dir-regexp tramp-file-name-regexp)) (setq remote-file-name-inhibit-locks t remote-file-name-inhibit-auto-save-visited t) (setq tramp-copy-size-limit (* 1024 1024) ;; 1MB tramp-verbose 2) ''; }; # ultra-scroll = { # enable = true; # package = _epkgs: pkgs.emacs.pkgs.ultra-scroll; # init = '' # (setq scroll-conservatively 101 ; important! # scroll-margin 0) # ''; # config = '' # (ultra-scroll-mode 1) # ''; # }; # gptel = { # enable = true; # package = _epkgs: pkgs.emacs.pkgs.gptel; # init = '' # (setq gptel-model "gpt-4o") # ''; # config = '' # (require 'gptel-curl) # (require 'auth-source) # (require 'gptel-kagi) # (defvar my-kagi-service "kagi-service-name") ;; Replace with your service name as in the auth-info file # (defvar my-kagi-user "bigras.bruno@gmail.com") ;; Replace with your user name as in the auth-info file # (let ((credential (auth-source-user-and-password my-kagi-service my-kagi-user))) # (defvar gptel--kagi # (gptel-make-kagi "Kagi" :key (if credential (cadr credential) "")))) # ;; Function that requests kagi for a url summary and shows it in a side-window # (defun my/kagi-summarize (url) # (let ((gptel-backend gptel--kagi) # (gptel-model "summarize:agnes")) ;or summarize:cecil, summarize:daphne, summarize:muriel # (gptel-request # url # :callback # (lambda (response info) # (if response # (with-current-buffer (get-buffer-create "*Kagi Summary*") # (let ((inhibit-read-only t)) # (erase-buffer) # (visual-line-mode 1) # (insert response) # (display-buffer # (current-buffer) # '((display-buffer-in-side-window # display-buffer-at-bottom) # (side . bottom)))) # (special-mode 1)) # (message "gptel-request failed with message: %s" # (plist-get info :status))))))) # ;; Make this function available to Embark # ;;(keymap-set embark-url-map "=" #'my/kagi-summarize) # (cl-defun my/clean-up-gptel-refactored-code (beg end) # "Clean up the code responses for refactored code in the current buffer. # The response is placed between BEG and END. The current buffer is # guaranteed to be the response buffer." # (when gptel-mode ; Don't want this to happen in the dedicated buffer. # (cl-return-from my/clean-up-gptel-refactored-code)) # (when (and beg end) # (save-excursion # (let ((contents # (replace-regexp-in-string # "\n*``.*\n*" "" # (buffer-substring-no-properties beg end)))) # (delete-region beg end) # (goto-char beg) # (insert contents)) # ;; Indent the code to match the buffer indentation if it's messed up. # (indent-region beg end) # (pulse-momentary-highlight-region beg end)))) # (add-hook 'gptel-post-response-functions #'my/clean-up-gptel-refactored-code) # ''; # }; # # Save and restore frames and windows with their buffers in Emacs # burly.enable = true; # autorevert = { # enable = true; # command = [ "auto-revert-mode" ]; # }; # dogears = { # enable = true; # bind = { # "M-g d" = "dogears-go"; # "M-g M-b" = "dogears-back"; # "M-g M-f" = "dogears-forward"; # "M-g M-d" = "dogears-list"; # "M-g M-D" = "dogears-sidebar"; # }; # config = '' # (dogears-mode) # ''; # }; # copy-as-format = { # enable = true; # command = [ # "copy-as-format" # "copy-as-format-asciidoc" # "copy-as-format-bitbucket" # "copy-as-format-disqus" # "copy-as-format-github" # "copy-as-format-gitlab" # "copy-as-format-hipchat" # "copy-as-format-html" # "copy-as-format-jira" # "copy-as-format-markdown" # "copy-as-format-mediawiki" # "copy-as-format-org-mode" # "copy-as-format-pod" # "copy-as-format-rst" # "copy-as-format-slack" # ]; # }; # https://github.com/bbatsov/crux crux = { enable = true; bind = { "C-c o" = "crux-open-with"; "S-" = "crux-smart-open-line"; "s-r" = "crux-recentf-find-file"; "C-" = "crux-kill-line-backwards"; }; config = '' (global-set-key [remap move-beginning-of-line] #'crux-move-beginning-of-line) (global-set-key [remap kill-whole-line] #'crux-kill-whole-line) (global-set-key [remap keyboard-quit] #'crux-keyboard-quit-dwim) (setq save-abbrevs 'silently) (setq-default abbrev-mode t) ''; }; # ws-butler = { # enable = true; # hook = [ # "(text-mode . ws-butler-mode)" # "(prog-mode . ws-butler-mode)" # ]; # }; deadgrep = { enable = true; bind = { "C-x f" = "deadgrep"; }; }; copilot = { enable = true; hook = [ "(prog-mode . copilot-mode)" ]; bindLocal = { copilot-completion-map = { "" = "copilot-accept-completion"; "TAB" = "copilot-accept-completion"; "C-" = "copilot-accept-completion-by-word"; "C-TAB" = "copilot-accept-completion-by-word"; "C-n" = "copilot-next-completion"; "C-p" = "copilot-previous-completion"; }; }; }; envrc = { enable = true; defer = 1; # package = _epkgs: pkgs.emacs.pkgs.envrc; command = [ "envrc-global-mode" ]; config = '' (setq envrc-remote t) ''; hook = [ "(after-init . envrc-global-mode)" ]; }; # dockerfile-mode.enable = true; # eat = { # enable = true; # extraConfig = '' # :hook ('eshell-load-hook #'eat-eshell-mode) # ''; # }; doom-modeline = { enable = true; hook = [ "(after-init . doom-modeline-mode)" ]; }; drag-stuff = { enable = true; config = '' (drag-stuff-global-mode 1) (drag-stuff-define-keys) ''; }; # diff-hl = { # enable = true; # config = "(global-diff-hl-mode)"; # }; # eldoc = { # enable = true; # command = [ "eldoc-mode" ]; # }; # eldoc-box = { # enable = true; # }; # hcl-mode.enable = true; # graphql-mode.enable = true; # hydra = { # enable = true; # # after = [ "org-tempo" ]; # after = [ # "org" # "org-tempo" # ]; # config = '' # (progn # (defhydra hydra-org-template (:color blue :hint nil) # " # _c_enter _q_uote _e_macs-lisp _L_aTeX: # _l_atex _E_xample _p_erl _i_ndex: # _a_scii _v_erse _P_erl tangled _I_NCLUDE: # _s_rc _n_ote plant_u_ml _H_TML: # _h_tml ^ ^ ^ ^ _A_SCII: # " # ("s" (hot-expand "") 'abort-recursive-edit) map)) (advice-add 'embark-completing-read-prompter :around (with-minibuffer-keymap embark-completing-read-prompter-map)) (define-key vertico-map (kbd "") 'embark-act-with-completing-read) (defun embark-act-with-completing-read (&optional arg) (interactive "P") (let* ((embark-prompter 'embark-completing-read-prompter) (_act (propertize "Act" 'face 'highlight)) (embark-indicator (lambda (_keymap _targets) nil))) (embark-act arg))) ; Show the current Embark target types in the modeline (defvar embark--target-mode-timer nil) (defvar embark--target-mode-string "") (defun embark--target-mode-update () (setq embark--target-mode-string (if-let (targets (embark--targets)) (format "[%s%s] " (propertize (symbol-name (plist-get (car targets) :type)) 'face 'bold) (mapconcat (lambda (x) (format ", %s" (plist-get x :type))) (cdr targets) "")) ""))) (define-minor-mode embark-target-mode "Shows the current targets in the modeline." :global t :group 'embark (setq mode-line-misc-info (assq-delete-all 'embark-target-mode mode-line-misc-info)) (when embark--target-mode-timer (cancel-timer embark--target-mode-timer) (setq embark--target-mode-timer nil)) (when embark-target-mode (push '(embark-target-mode (:eval embark--target-mode-string)) mode-line-misc-info) (setq embark--target-mode-timer (run-with-idle-timer 0.1 t #'embark--target-mode-update)))) ''; bindLocal = { minibuffer-local-completion-map = { "M-o" = "embark-act"; }; embark-file-map = { "s" = "sudo-edit"; "l" = "vlf"; }; }; }; # string-inflection = { # enable = true; # bind = { # "C-c C-u" = "string-inflection-all-cycle"; # }; # }; secrets = { enable = true; defer = 1; config = '' (setq auth-sources '( "secrets:Mots de passe" )) ''; }; multiple-cursors = { enable = true; bind = { "C-S-c C-S-c" = "mc/edit-lines"; "C-c m" = "mc/mark-all-like-this"; "C->" = "mc/mark-next-like-this"; "C-<" = "mc/mark-previous-like-this"; }; }; # avy = { # enable = true; # # avy-org-goto-heading-timer # # avy-goto-char-timer # # avy-org-refile-as-child # # avy-goto-word-or-subword-1 # bind = { # "C-:" = "avy-goto-char"; # "C-'" = "avy-goto-char-2"; # "M-g f" = "avy-goto-line"; # "M-g w" = "avy-goto-word-1"; # "M-g e" = "avy-goto-word-0"; # "C-c C-j" = "avy-resume"; # }; # command = [ "avy-process" ]; # config = '' # (setq avy-all-windows t) # ''; # }; vundo = { enable = true; defer = 1; config = '' (setq vundo-glyph-alist vundo-unicode-symbols) (vundo-popup-mode 1) ''; }; # hammy = { # enable = true; # config = '' # (hammy-mode 1) # ''; # }; expreg = { enable = true; bind = { # "C-c e" = "expreg-query-replace"; "C-=" = "expreg-expand"; "C--" = "expreg-contract"; }; }; markdown-mode = { enable = true; # extraPackages = [ pkgs.marksman ]; config = '' (setq markdown-command "marked") (dolist (face '((markdown-header-face-1 . 1.2) (markdown-header-face-2 . 1.1) (markdown-header-face-3 . 1.0) (markdown-header-face-4 . 1.0) (markdown-header-face-5 . 1.0))) (set-face-attribute (car face) nil :weight 'normal :height (cdr face))) ''; }; # pandoc-mode = { # enable = true; # after = [ "markdown-mode" ]; # hook = [ "markdown-mode" ]; # bindLocal = { # markdown-mode-map = { # "C-c C-c" = "pandoc-run-pandoc"; # }; # }; # }; # easysession = { # enable = true; # command = [ # "easysession-switch-to" # "easysession-save-as" # "easysession-save-mode" # "easysession-load-including-geometry" # ]; # custom = { # easysession-mode-line-misc-info = "t"; # easysession-save-interval = "(* 10 60)"; # }; # init = '' # (global-set-key (kbd "C-c l") 'easysession-switch-to) # (global-set-key (kbd "C-c s") 'easysession-save-as) # (add-hook 'emacs-startup-hook #'easysession-load-including-geometry 102) # (add-hook 'emacs-startup-hook #'easysession-save-mode 103) # ''; # }; eglot = { enable = true; command = [ "eglot-ensure" "eglot-format-buffer" "eglot-rename" ]; # :hook ((svelte-ts-mode . eglot-ensure) # (typescript-mode . eglot-ensure) # (json-mode . eglot-ensure) # (rustic-mode . eglot-ensure)) config = '' (add-to-list 'eglot-server-programs '(json-mode . ("vscode-json-languageserver" "--stdio"))) (add-to-list 'eglot-server-programs '((rust-ts-mode rust-mode) . ("rust-analyzer" :initializationOptions (:check (:command "clippy"))))) (add-to-list 'eglot-server-programs '(svelte-ts-mode . ("svelteserver" "--stdio"))) (add-to-list 'eglot-server-programs '(typescript-mode . ("typescript-language-server" "--stdio"))) ;; Customize symbol highlight face for stronger background highlight (set-face-attribute 'eglot-highlight-symbol-face nil :background (face-background 'region) :weight 'bold) (set-face-attribute 'eglot-diagnostic-tag-unnecessary-face nil :inherit 'flymake-warning) ''; }; eglot-x = { enable = true; package = _epkgs: pkgs.emacs.pkgs.eglot-x; after = [ "eglot" "rust-ts-mode" ]; bindLocal = { eglot-mode-map = { "s-." = "eglot-x-find-refs"; }; }; config = '' (eglot-x-setup) ''; }; yaml-ts-mode = let my_helm_ls = pkgs.symlinkJoin { name = "wrapped-hello"; paths = [ pkgs.helm-ls ]; buildInputs = [ pkgs.makeWrapper ]; postBuild = '' wrapProgram $out/bin/helm_ls \ --set YAMLLS_PATH "/nix/store/04jik4sing6sdixchim52hn1yijzp22m-yaml-schema-router-0.2.0/bin/yaml-schema-router" ''; }; in { enable = true; extraPackages = [ pkgs.helm-ls pkgs.yaml-language-server ]; mode = lib.mkForce [ ]; hook = [ "(yaml-ts-mode . eglot-ensure)" "(helm-ts-mode . eglot-ensure)" ]; config = '' (add-to-list 'eglot-server-programs '(yaml-ts-mode . ("/nix/store/04jik4sing6sdixchim52hn1yijzp22m-yaml-schema-router-0.2.0/bin/yaml-schema-router" "--stdio"))) (add-to-list 'eglot-server-programs '(helm-ts-mode "${my_helm_ls}/bin/helm_ls" "serve")) ''; init = '' (define-derived-mode helm-ts-mode yaml-ts-mode "helm" "Major mode for editing kubernetes helm templates") (add-to-list 'auto-mode-alist '("\\.yml\\'" . yaml-ts-mode)) (add-to-list 'auto-mode-alist '("\\.yaml\\'" . yaml-ts-mode)) (add-to-list 'auto-mode-alist '("values\\.yaml\\'" . helm-ts-mode)) ''; }; toml-ts-mode = { enable = true; hook = [ "(toml-ts-mode . eglot-ensure)" ]; config = '' (with-eval-after-load 'eglot (setq eglot-server-programs (cons '(toml-ts-mode . ("rass" "--" "crates-lsp")) (assoc-delete-all 'toml-ts-mode eglot-server-programs)))) (add-hook 'toml-ts-mode-hook (lambda () (add-hook 'after-save-hook #'eglot-format nil t))) ''; }; nix-ts-mode = { enable = true; mode = [ ''"\\.nix\\'"'' ]; hook = [ "(nix-ts-mode . eglot-ensure)" ]; config = '' (with-eval-after-load 'eglot (setq eglot-server-programs (cons '(nix-mode . ("rass" "--" "nixd" "--" "nil" "--stdio")) (assoc-delete-all 'nix-mode eglot-server-programs)))) ''; }; # wgrep.enable = true; topsy = { enable = true; hook = [ "(prog-mode . topsy-mode)" "(magit-section-mode . topsy-mode)" ]; }; # nginx-mode.enable = true; # flycheck = { # enable = true; # command = [ "global-flycheck-mode" ]; # defer = 1; # bind = { # "M-n" = "flycheck-next-error"; # "M-p" = "flycheck-previous-error"; # }; # config = '' # ;; Only check buffer when mode is enabled or buffer is saved. # (setq flycheck-check-syntax-automatically '(mode-enabled save) # flycheck-markdown-mdl-executable "${pkgs.mdl}/bin/mdl") # ;; Enable flycheck in all eligible buffers. # (global-flycheck-mode) # ''; # }; savehist = { enable = true; init = '' (savehist-mode) ''; }; vertico = { enable = true; command = [ "vertico-mode" ]; init = "(vertico-mode)"; extraConfig = '' :bind (:map vertico-map ;; M-v is taken by vertico ("M-g M-c" . switch-to-completions) ;; Original tab binding, which we want sometimes when ;; using orderless completion. ("M-TAB" . vertico-insert)) ''; }; vertico-directory = { enable = true; after = [ "vertico" ]; hook = [ "(rfn-eshadow-update-overlay . vertico-directory-tidy)" ]; bindLocal = { vertico-map = { # "RET" = "vertico-directory-enter"; # "DEL" = "vertico-directory-delete-char"; "M-DEL" = "vertico-directory-delete-word"; }; }; }; orderless = { enable = true; init = '' (setq completion-styles '(orderless partial-completion basic) completion-category-defaults nil) (setq completion-category-overrides '((eglot (styles orderless)) (eglot-capf (styles orderless)))) ;; Enable cache busting, depending on if your server returns ;; sufficiently many candidates in the first place. (advice-add 'eglot-completion-at-point :around #'cape-wrap-buster) ''; }; # plantuml-mode.enable = true; # company = { # enable = true; # defer = 1; # config = '' # (global-company-mode t) # (setq-default # company-idle-delay 0.2 # ;;company-require-match nil # ;;company-minimum-prefix-length 0 # ;; get only preview # company-frontends '(company-preview-frontend) # ;; also get a drop down # company-frontends '(company-pseudo-tooltip-frontend company-preview-frontend) # ) # ''; # }; # protobuf-mode = { # enable = true; # mode = [ ''"'\\.proto\\'"'' ]; # }; # yaml-mode.enable = true; # devdocs = { # enable = true; # bind = { # "C-c D" = "devdocs-lookup"; # }; # }; # dirvish = { # enable = true; # config = '' # (require 'dirvish-quick-access) # (require 'dirvish-history) # (require 'dirvish-ls) # (require 'dirvish-extras) # (require 'dirvish-emerge) # (require 'dirvish-subtree) # (require 'dirvish-vc) # (require 'dirvish-yank) # (require 'dirvish-fd) # (require 'dirvish-narrow) # (dirvish-override-dired-mode) # (setq dirvish-emerge-groups '(("Recent" (predicate . ‘recent-files-2h’)) # ("README" (regex . "README")) # ("PDF" (extensions "pdf")) # ("Documents" (extensions "pdf" "tex" "bib" "epub")) # ("Video" (extensions "mp4" "mkv" "webm")) # ("Pictures" (extensions "jpg" "png" "svg" "gif")) # ("Audio" (extensions "mp3" "flac" "wav" "ape" "aac")) # ("Archives" (extensions "gz" "rar" "zip")) # ("LaTeX" (extensions "tex" "bib")))) # ''; # }; # recentf = { # enable = true; # command = [ "recentf-mode" ]; # config = '' # (setq recentf-save-file (locate-user-emacs-file "recentf") # recentf-max-menu-items 20 # recentf-max-saved-items 500 # recentf-exclude '("COMMIT_MSG" "COMMIT_EDITMSG")) # ;; Save the file list every 10 minutes. # (run-at-time nil (* 10 60) 'recentf-save-list) # (recentf-mode) # ''; # }; # nxml-mode = { # enable = true; # mode = [ ''"\\.xml\\'"'' ]; # config = '' # (setq nxml-child-indent 4 # nxml-attribute-indent 4 # nxml-slash-auto-complete-flag t) # (add-to-list 'rng-schema-locating-files # "~/.emacs.d/nxml-schemas/schemas.xml") # ''; # }; # systemd = { # enable = true; # defer = true; # }; # terraform-mode.enable = true; # visual-fill-column = { # enable = true; # command = [ "visual-fill-column-mode" ]; # }; }; }; } // lib.optionalAttrs (osConfig.services.desktopManager.cosmic.enable or false) { package = pkgs.emacs-pgtk; }; } ================================================ FILE: modules/home/emacs/denote.nix ================================================ { programs.emacs.init = { usePackage = { denote = { enable = true; bind = { "C-c n l" = "denote-link-or-create"; "C-c n o" = "denote-open-or-create"; "C-c n r" = "denote-rename-file-using-front-matter"; }; custom = { "denote-directory" = ''"~/Documents/notes"''; "denote-rename-buffer-format" = ''"Denote: %t (%k)"''; # "denote-infer-keywords" = "nil"; # "denote-known-keywords" = '' # '("pra" "prb" "prc" # "ply" "plm" "plw" # "kt" "ke" "kp" "kl" "ka" "kap" # "kcp" "kca" "kcc" # "kra" "krb" "krv" # "rn") # ''; }; config = '' ;; Rename buffers with the note name (denote-rename-buffer-mode 1) ;; Buttonize all denote links in text buffers (add-hook 'text-mode-hook #'denote-fontify-links-mode-maybe) ''; # ;; Automatically rename Denote buffers when opening them so that # ;; instead of their long file name they have, for example, a literal # ;; "[D]" followed by the file's title. Read the doc string of # ;; `denote-rename-buffer-format' for how to modify this. # (denote-rename-buffer-mode 1) }; denote-journal = { enable = true; after = [ "denote" ]; defer = true; command = [ "denote-journal-new-entry" ]; }; denote-journal-capture = { enable = true; after = [ "denote-journal" ]; config = '' (setq org-capture-templates '(("a" "Appointment" entry (file+olp denote-journal-capture-entry-for-date "Appointments") "* %(denote-journal-capture-timestamp) %^{Subject?}"))) ''; }; denote-project-notes = { enable = true; after = [ "denote" ]; defer = true; command = [ "denote-project-notes" ]; }; # denote-agenda = { # enable = true; # config = '' # (denote-agenda-insinuate) # ''; # }; denote-explore = { enable = true; after = [ "denote" ]; defer = true; command = [ "denote-explore-network" "denote-explore-random-note" ]; }; consult-denote = { enable = true; after = [ "consult" "denote" ]; config = '' (consult-denote-mode 1) ''; }; denote-search = { enable = true; bind = { "C-c s s" = "denote-search"; "C-c s d" = "denote-search-marked-dired-files"; "C-c s r" = "denote-search-files-referenced-in-region"; }; custom = { "denote-search-format-heading-function" = "#'denote-search-format-heading-with-keywords"; }; }; }; }; } ================================================ FILE: modules/home/emacs/go.nix ================================================ { programs.emacs = { init = { usePackage = { go-ts-mode = { enable = true; hook = [ "(go-ts-mode . eglot-ensure)" ]; }; }; }; }; } ================================================ FILE: modules/home/emacs/latex.nix ================================================ { pkgs, ... }: let myLatex = with pkgs; (texlive.combine { inherit (texlive) scheme-small wrapfig ulem capt-of ; }); in { home.packages = with pkgs; lib.optionals (stdenv.hostPlatform.system == "x86_64-linux") [ myLatex ]; } ================================================ FILE: modules/home/emacs/org-mode.nix ================================================ { pkgs, ... }: { programs.emacs = { init = { prelude = '' (setq org-directory "~/dev/org-mode") ''; usePackage = { # org-transclusion = { # enable = true; # # init = '' # # (define-key global-map (kbd "") #'org-transclusion-add) # # (define-key global-map (kbd "C-n t") #'org-transclusion-mode) # # ''; # }; # org-rich-yank = { # enable = true; # bindLocal = { # org-mode-map = { # "C-M-y" = "org-rich-yank"; # }; # }; # config = '' # (defun my-org-rich-yank-format-paste (language contents link) # "Based on `org-rich-yank--format-paste-default'." # (format "#+BEGIN_SRC %s\n%s\n#+END_SRC\n#+comment: %s" # language # (org-rich-yank--trim-nl contents) # link)) # (customize-set-variable 'org-rich-yank-format-paste #'my-org-rich-yank-format-paste) # ''; # }; org-download = { enable = true; after = [ "org" ]; defer = true; command = [ "org-download-clipboard" "org-download-yank" "org-download-screenshot" ]; extraPackages = [ pkgs.wl-clipboard ]; }; # Highlight and annotate text file and websites # org-remark.enable = true; org-ql = { enable = true; after = [ "org" ]; defer = true; command = [ "org-ql-search" "org-ql-view" ]; }; consult-notes = { enable = true; bind = { "C-c n f" = "consult-notes"; }; custom = { # "org-default-notes-file" = ''"~/dev/org-mode/inbox.org"''; "consult-notes-denote-display-id" = "nil"; }; config = '' (consult-notes-denote-mode) ''; }; org-tempo = { enable = true; after = [ "org" ]; package = "org"; config = '' (dolist (item '(("sh" . "src sh") ("el" . "src emacs-lisp") ("li" . "src lisp") ("sc" . "src scheme") ("ts" . "src typescript") ("py" . "src python") ("yaml" . "src yaml") ("json" . "src json") ("einit" . "src emacs-lisp :tangle emacs/init.el") ("emodule" . "src emacs-lisp :tangle emacs/modules/dw-MODULE.el"))) (add-to-list 'org-structure-template-alist item)) ''; }; org-mime = { enable = true; after = [ "org" ]; defer = true; command = [ "org-mime-htmlize" "org-mime-org-buffer-htmlize" "org-mime-org-subtree-htmlize" ]; }; org-web-tools = { enable = true; after = [ "org" ]; defer = true; command = [ "org-web-tools-insert-link-for-url" "org-web-tools-read-url-as-org" ]; }; # ox-clip.enable = true; # ox-tufte.enable = true; # ox-hugo = { # enable = true; # after = [ "ox" ]; # }; org-modern = { enable = true; after = [ "org" ]; hook = [ "(org-mode . org-modern-mode)" "(org-agenda-finalize . org-modern-agenda)" ]; }; # org-hyperscheduler = { # enable = true; # }; # # for org-mode # htmlize.enable = true; org-sticky-header = { enable = true; hook = [ "(org-mode . org-sticky-header-mode)" ]; }; edraw-org = { enable = true; package = _epkgs: pkgs.emacs.pkgs.el-easydraw; after = [ "org" ]; defer = true; }; org = { enable = true; command = [ "org-mode" "org-version" ]; bind = { "C-c c" = "org-capture"; "C-c a" = "org-agenda"; "C-c l" = "org-store-link"; "C-c b" = "org-switchb"; }; custom = { "org-default-notes-file" = ''"~/dev/org-mode/inbox.org"''; "org-directory" = ''"~/dev/org-mode"''; # "org-log-done" = "time"; # "org-agenda-start-with-log-mode" = true; # (setq org-extend-today-until 4) "org-extend-today-until" = 4; org-hide-leading-stars = "t"; org-startup-indented = "t"; org-adapt-indentation = "nil"; org-edit-src-content-indentation = 0; org-startup-truncated = "t"; }; hook = [ "(org-mode . dw/org-mode-setup)" ]; config = '' ;; Turn on indentation and auto-fill mode for Org files (defun dw/org-mode-setup () ;; (variable-pitch-mode 1) (org-indent-mode 1) (auto-fill-mode 0) (visual-line-mode 1) (setq corfu-auto nil)) (defun dw/org-move-done-tasks-to-bottom () "Sort all tasks in the topmost heading by TODO state." (interactive) (save-excursion (while (org-up-heading-safe)) (org-sort-entries nil ?o)) ;; Reset the view of TODO items (org-overview) (org-fold-show-entry) (org-fold-show-children)) (defun dw/org-todo-state-change-hook () (when (string= org-state "DONE") (dw/org-move-done-tasks-to-bottom))) (setq org-ellipsis " ▾" org-hide-emphasis-markers t org-src-fontify-natively t org-fontify-quote-and-verse-blocks t org-src-tab-acts-natively t org-hide-block-startup nil org-src-preserve-indentation nil org-startup-folded 'content org-cycle-separator-lines 2 org-bookmark-names-plist nil) (setq org-refile-targets '((nil :maxlevel . 1) (org-agenda-files :maxlevel . 1)) ;; Refile items to the top of parent heading org-reverse-note-order t) (setq org-outline-path-complete-in-steps nil) (setq org-refile-use-outline-path t) (setq org-log-done 'time) (setq org-agenda-start-with-log-mode t) (setq org-priority-highest ?A org-priority-lowest ?D org-priority-default ?C) (setq org-todo-keywords '((sequence "TODO(t)" "NEXT(n)" "STRT(s)" "WAIT(w@/!)" "|" "DONE(d!)" "CANX(c!)") (sequence "GOAL(G)" "PROJ(P)" "|" "DONE(d!)") (sequence "PLAN(p)" "REVIEW(r)" "|" "WAIT(w)" "BACK(b)"))) ;; TODO: org-todo-keyword-faces (setq org-todo-keyword-faces '(("GOAL" . (:foreground "orange red" :weight bold)) ("WAIT" . (:foreground "HotPink2" :weight bold)) ("BACK" . (:foreground "MediumPurple3" :weight bold)))) (setq org-modern-todo-faces '(("GOAL" :background "orange red" :foreground "white") ("PROJ" :background "gold" :foreground "black"))) (setq org-log-into-drawer t) (setq-default org-tag-alist '((:startgroup) ("Areas") (:grouptags) ("@home" . ?H) ("@work" . ?W) (:endgroup) (:startgrouptag . nil) ("Contexts") (:grouptags) ("@computer" . ?C) ("@mobile" . ?M) ("@calls" . ?A) ("@errands" . ?E) (:endgrouptag) ;; Task Types (:startgrouptag . nil) ("Types") (:grouptags) ("@easy" . ?e) ("@hacking" . ?h) ("@writing" . ?w) ("@creative" . ?v) ("@accounting" . ?a) ("@email" . ?m) ("@system" . ?s) (:endgrouptag) ;; Workflow states (:startgroup . nil) ("States") (:grouptags) ("@plan" . ?p) ("@review" . ?r) ("@followup" . ?f) (:endgroup))) ;; Active Org-babel languages (org-babel-do-load-languages 'org-babel-load-languages '((plantuml . t) (dot . t) (mermaid . t) (sql . t) (shell . t))) ''; # bindLocal = { # org-mode-map = { # "C-x n s" = "org-toggle-narrow-to-subtree"; # }; # }; # hook = [ # '' # (org-mode # . (lambda () # (add-hook 'completion-at-point-functions # 'pcomplete-completions-at-point nil t))) # '' # ]; # config = '' # ;; Some general stuff. # (setq org-reverse-note-order t # org-use-fast-todo-selection t # org-adapt-indentation nil # org-hide-emphasis-markers t) # ;;(setq org-tag-alist rah-org-tag-alist) # ;; Add some todo keywords. # ;; Setup org capture. # ;; (setq org-default-notes-file (rah-org-file "capture")) # (setq org-default-notes-file (concat org-directory "/inbox.org")) # ;; Unfortunately org-mode tends to take over keybindings that # ;; start with C-c. # (unbind-key "C-c SPC" org-mode-map) # (unbind-key "C-c w" org-mode-map) # (setq org-image-actual-width 400) # (setq org-extend-today-until 4) # (setq org-export-backends (quote (ascii html icalendar latex md odt))) # (defun add-newline-at-end-if-none () # "Add a newline at the end of the buffer if there isn't any." # (save-excursion # (save-restriction # (goto-char (1- (point-max))) # (if (not (looking-at "\n")) # (progn # (goto-char (point-max)) # (insert "\n")))))) # ;; https://old.reddit.com/r/orgmode/comments/hg8qik/weird_joined_lines_bug/fw73kml/ # (add-hook 'org-capture-prepare-finalize-hook 'add-newline-at-end-if-none) # ''; }; org-super-agenda = { enable = true; after = [ "org" ]; config = '' (org-super-agenda-mode t) (setq org-super-agenda-groups '((:auto-parent t))) ''; }; # org-habit = { # enable = true; # after = [ "org" ]; # # defer = true; # config = '' # ;; for using with Orgzly # (setq org-log-into-drawer "LOGBOOK") # ''; # }; org-agenda = { enable = true; after = [ "org" ]; defer = true; custom = { "org-agenda-files" = '' '( "gtd.org" "inbox.org" "schedule.org" ) ''; "org-agenda-show-all-dates" = "t"; "org-agenda-skip-deadline-if-done" = "t"; "org-agenda-skip-scheduled-if-done" = "t"; "org-agenda-span" = 5; "org-agenda-start-on-weekday" = "nil"; "org-agenda-todo-ignore-deadlines" = 7; "org-agenda-todo-ignore-scheduled" = "'future"; "org-deadline-warning-days" = 14; "org-stuck-projects" = '' '( "+PROJECT-MAYBE-DONE/-DONE-CANCELED" ("NEXT" "STARTED") nil "\\" ) ''; }; config = '' (setq org-agenda-custom-commands `(("d" "Dashboard" ((agenda "" ((org-deadline-warning-days 7))) (tags-todo "+PRIORITY=\"A\"" ((org-agenda-overriding-header "High Priority"))) (todo "*" ((org-agenda-files '("~/dev/org-mode/inbox.org")) (org-agenda-overriding-header "Unfiled Inbox Tasks"))) (tags-todo "+@followup" ((org-agenda-overriding-header "Needs Follow Up"))))) ("u" tags-todo "+ALLTAGS=\"\"" ((org-agenda-overriding-header "Untagged Tasks"))) ("n" "Next Tasks" ((agenda "" ((org-deadline-warning-days 7))) (todo "NEXT" ((org-agenda-overriding-header "Next Tasks"))))) ;; Low-effort next actions ("e" tags-todo "+TODO=\"NEXT\"+Effort<15&+Effort>0" ((org-agenda-overriding-header "Low Effort Tasks") (org-agenda-max-todos 20) (org-agenda-files org-agenda-files))))) (setq org-agenda-window-setup 'current-window) (setq org-agenda-span 'day) (setq org-agenda-start-with-log-mode t) ''; }; # ol-notmuch = { # enable = pcfg.org.enable && pcfg.notmuch.enable; # after = [ # "notmuch" # "org" # ]; # }; ob-plantuml = { enable = true; after = [ "org" ]; defer = true; }; ob-mermaid = { enable = true; after = [ "org" ]; defer = true; }; # (setq ob-mermaid-cli-path "mmdc") # org-table = { # enable = true; # after = [ "org" ]; # command = [ "orgtbl-to-generic" ]; # hook = [ # # For orgtbl mode, add a radio table translator function for # # taking a table to a psql internal variable. # '' # (orgtbl-mode # . (lambda () # (defun rah-orgtbl-to-psqlvar (table params) # "Converts an org table to an SQL list inside a psql internal variable" # (let* ((params2 # (list # :tstart (concat "\\set " (plist-get params :var-name) " '(") # :tend ")'" # :lstart "(" # :lend ")," # :sep "," # :hline "")) # (res (orgtbl-to-generic table (org-combine-plists params2 params)))) # (replace-regexp-in-string ",)'$" # ")'" # (replace-regexp-in-string "\n" "" res)))))) # '' # ]; # config = '' # (unbind-key "C-c SPC" orgtbl-mode-map) # (unbind-key "C-c w" orgtbl-mode-map) # ''; # extraConfig = '' # :functions org-combine-plists # ''; # }; org-capture = { enable = true; after = [ "org" ]; config = '' (defun dw/org-path (path) (expand-file-name path org-directory)) (setq org-capture-templates `(("t" "Tasks") ("tt" "Task" entry (file ,(dw/org-path "inbox.org")) "* TODO %?\n %U\n %a\n %i" :empty-lines 1) ("ts" "Clocked Entry Subtask" entry (clock) "* TODO %?\n %U\n %a\n %i" :empty-lines 1) ("j" "Journal Entries") ("je" "General Entry" entry (file+olp+datetree ,(dw/org-path "journal.org")) "\n* %<%I:%M %p> - %^{Title} \n\n%?\n\n" :tree-type week :clock-in :clock-resume :empty-lines 1) ("jt" "Task Entry" entry (file+olp+datetree ,(dw/org-path "journal.org")) "\n* %<%I:%M %p> - Task Notes: %a\n\n%?\n\n" :tree-type week :clock-in :clock-resume :empty-lines 1) ("jj" "Journal" entry (file+olp+datetree ,(dw/org-path "journal.org")) "\n* %<%I:%M %p> - Journal :journal:\n\n%?\n\n" :tree-type week :clock-in :clock-resume :empty-lines 1) ("m" "Metrics Capture") ("mw" "Weight" table-line (file+headline "~/Notes/Metrics.org" "Weight") "| %U | %^{Weight} | %^{Notes} |" :immediate-finish t :jump-to-captured t) ("mp" "Blood Pressure" table-line (file+headline "~/Notes/Metrics.org" "Blood Pressure") "| %U | %^{Systolic} | %^{Diastolic} | %^{BPM} | %^{Stress 1-5}" :immediate-finish t :jump-to-captured t))) ''; }; # org-clock = { # enable = true; # after = [ "org" ]; # config = '' # (setq org-clock-rounding-minutes 5 # org-clock-out-remove-zero-time-clocks t) # ''; # }; # org-duration = { # enable = true; # after = [ "org" ]; # config = '' # ;; I always want clock tables and such to be in hours, not days. # (setq org-duration-format (quote h:mm)) # ''; # }; org-refile = { enable = true; after = [ "org" ]; config = '' ;; Refiling should include not only the current org buffer but ;; also the standard org files. Further, set up the refiling to ;; be convenient with IDO. Follows norang's setup quite closely. (setq org-refile-targets '((nil :maxlevel . 2) (org-agenda-files :maxlevel . 2)) org-refile-use-outline-path t org-outline-path-complete-in-steps nil org-refile-allow-creating-parent-nodes 'confirm) ''; }; # org-superstar = { # enable = true; # hook = [ "(org-mode . org-superstar-mode)" ]; # }; # org-edna = { # enable = true; # defer = 1; # config = "(org-edna-mode)"; # }; # # custom # # (org-image-actual-width nil) org-tree-slide = { enable = true; command = [ "org-tree-slide-mode" "org-tree-slide-skip-done-toggle" ]; bind = { "" = "org-tree-slide-mode"; "S-" = "org-tree-slide-skip-done-toggle"; }; bindLocal = { org-tree-slide-mode-map = { "" = "org-tree-slide-move-previous-tree"; "" = "org-tree-slide-move-next-tree"; }; }; }; }; }; }; } ================================================ FILE: modules/home/emacs/rust.nix ================================================ { programs.emacs = { init = { usePackage = { cargo-mode = { enable = true; hook = [ "(rust-ts-mode . cargo-minor-mode)" ]; config = '' (setq compilation-scroll-output t) ''; }; rust-ts-mode = { enable = true; hook = [ "(rust-ts-mode . eglot-ensure)" ]; # config = '' # (add-hook 'after-save-hook 'eglot-format) # ''; }; }; }; }; } ================================================ FILE: modules/home/emacs/tree-sitter.nix ================================================ { pkgs, ... }: let grammarsLibPath = pkgs.emacsPackages.treesit-grammars.with-grammars ( p: with p; [ tree-sitter-bash tree-sitter-css tree-sitter-gleam tree-sitter-hcl tree-sitter-html tree-sitter-javascript tree-sitter-jsdoc tree-sitter-json tree-sitter-nix tree-sitter-prisma tree-sitter-python tree-sitter-rust tree-sitter-toml tree-sitter-tsx tree-sitter-typescript tree-sitter-yaml ] ); in { programs.emacs = { init = { usePackage = { treesit = { enable = true; config = '' (setq treesit-extra-load-path '("${pkgs.lib.makeLibraryPath [ grammarsLibPath ]}")) ;; Optional, but recommended. Tree-sitter enabled major modes are ;; distinct from their ordinary counterparts. ;; ;; You can remap major modes with `major-mode-remap-alist'. Note ;; that this does *not* extend to hooks! Make sure you migrate them ;; also (dolist (mapping '((python-mode . python-ts-mode) (css-mode . css-ts-mode) (typescript-mode . tsx-ts-mode) (js-mode . js-ts-mode) (css-mode . css-ts-mode) (rust-mode . rust-ts-mode) (conf-toml-mode . toml-ts-mode) (yaml-mode . yaml-ts-mode))) (add-to-list 'major-mode-remap-alist mapping)) (add-to-list 'auto-mode-alist '("\\.tsx\\'" . tsx-ts-mode)) (add-to-list 'auto-mode-alist '("\\.json\\'" . json-ts-mode)) ''; }; }; }; }; } ================================================ FILE: modules/home/emacs/typescript.nix ================================================ { programs.emacs = { init = { usePackage = { eglot = { hook = [ "(typescript-ts-mode . eglot-ensure)" ]; }; # flymake-eslint = { # enable = false; # config = '' # (setq flymake-eslint-executable-name "${pkgs.nodePackages.eslint}/bin/eslint") # (add-hook 'typescript-ts-mode-hook (lambda () # (remove-hook 'flymake-diagnostic-functions 'eglot-flymake-backend) # (setq-local flymake-eslint-project-root (locate-dominating-file buffer-file-name ".eslintrc.js")) # (flymake-eslint-enable))) # (add-hook 'js-ts-mode-hook (lambda () # (remove-hook 'flymake-diagnostic-functions 'eglot-flymake-backend) # (setq-local flymake-eslint-project-root (locate-dominating-file buffer-file-name ".eslintrc.js")) # (flymake-eslint-enable))) # ''; # }; }; }; }; } ================================================ FILE: modules/home/fish.nix ================================================ { lib, pkgs, ... }: { programs.fish = { enable = true; interactiveShellInit = lib.mkMerge [ (lib.mkBefore '' set -g fish_escape_delay_ms 300 set -g fish_greeting '') (lib.mkAfter '' ${pkgs.nix-your-shell}/bin/nix-your-shell --nom fish | source fish_default_key_bindings '') ]; plugins = [ { name = "autopair"; inherit (pkgs.fishPlugins.autopair) src; } ]; }; } ================================================ FILE: modules/home/git.nix ================================================ { pkgs, ... }: { programs = { delta = { enable = true; enableGitIntegration = true; options = { navigate = true; syntax-theme = "Nord"; }; }; git = { enable = true; lfs.enable = true; settings = { user = { email = "bigras.bruno@gmail.com"; name = "Bruno Bigras"; }; credential.helper = "${pkgs.gitFull}/bin/git-credential-libsecret"; diff.colorMoved = "default"; difftool.prompt = true; github.user = "bbigras"; init.defaultBranch = "main"; merge.conflictstyle = "diff3"; mergetool.prompt = true; }; }; }; home.shellAliases = rec { g = "git"; ga = "git add"; gaa = "${ga} -A"; gaap = "${gaa} --patch"; gap = "${ga} --patch"; gb = "git branch"; gch = "git checkout"; gcl = "git clone"; gco = "git commit"; gcom = "${gco} --message"; gcoa = "${gco} --amend"; gcoan = "${gcoa} --no-edit"; gdf = "git diff"; gdfs = "${gdf} --staged"; gdt = "git difftool"; gdts = "${gdt} --staged"; gf = "git fetch --all --prune --tags"; gfpl = "${gf} && ${gpl}"; gff = "${gf} --force"; 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'"; gm = "git merge"; gma = "${gm} --abort"; gmc = "${gm} --continue"; gpl = "git pull --rebase"; gps = "git push"; gpsf = "git push --force-with-lease"; grb = "git rebase"; grba = "${grb} --abort"; grbc = "${grb} --continue"; grbsn = "${grb} --exec 'git commit --amend --no-edit -n -S'"; grs = "git restore"; grss = "${grs} --staged"; # TODO: deprecate gs = "git status"; gst = "git status"; gsw = "git switch"; gswc = "${gsw} -c"; gswcf = "${gsw} -C"; gwt = "git worktree"; gwta = "${gwt} add"; gwtl = "${gwt} list"; gwtr = "${gwt} remove"; }; } ================================================ FILE: modules/home/graphical/chromium.nix ================================================ { programs.chromium = { enable = true; }; } ================================================ FILE: modules/home/graphical/default.nix ================================================ { flake, lib, pkgs, ... }: let inherit (flake) self; inherit (pkgs.stdenv) isDarwin isLinux; in { imports = [ self.homeModules.graphical-linux ]; # ++ lib.optionals isLinux [ self.homeModules.graphical-linux ]; home.packages = with pkgs; lib.filter (lib.meta.availableOn stdenv.hostPlatform) [ libnotify qbittorrent ] ++ lib.optionals (stdenv.hostPlatform.system == "x86_64-linux") [ # spotify ] ++ lib.optionals isLinux [ xdg-utils ]; programs = { ghostty = { enable = true; enableBashIntegration = true; enableFishIntegration = true; enableZshIntegration = true; installBatSyntax = isLinux; package = if isDarwin then null else pkgs.ghostty; settings = { clipboard-read = "ask"; quit-after-last-window-closed = true; }; }; }; services = { remmina.enable = true; }; systemd.user.services = { remmina = { Unit = { After = [ "app-org.keepassxc.KeePassXC@autostart.service" ]; Requires = lib.mkForce [ "app-org.keepassxc.KeePassXC@autostart.service" ]; PartOf = [ "graphical-session.target" ]; }; Install.WantedBy = lib.mkForce [ "xdg-desktop-autostart.target" ]; }; }; } ================================================ FILE: modules/home/graphical/firefox.nix ================================================ { lib, pkgs, ... }: { programs.firefox = { enable = true; package = let ff = if lib.meta.availableOn pkgs.stdenv.hostPlatform pkgs.firefox-bin then pkgs.firefox-bin else pkgs.firefox; in ff.override { }; }; xdg.mimeApps.defaultApplications = { "application/x-extension-htm" = "firefox.desktop"; "application/x-extension-html" = "firefox.desktop"; "application/x-extension-shtml" = "firefox.desktop"; "application/x-extension-xht" = "firefox.desktop"; "application/x-extension-xhtml" = "firefox.desktop"; "application/xhtml+xml" = "firefox.desktop"; "text/html" = "firefox.desktop"; "x-scheme-handler/chrome" = "firefox.desktop"; "x-scheme-handler/http" = "firefox.desktop"; "x-scheme-handler/https" = "firefox.desktop"; }; } ================================================ FILE: modules/home/graphical/heroic.nix ================================================ { pkgs, ... }: { home.packages = with pkgs; [ (heroic.override { extraPkgs = pkgs: [ pkgs.gamescope pkgs.gdk-pixbuf pkgs.gtk3 pkgs.adwaita-icon-theme ]; }) ]; } ================================================ FILE: modules/home/graphical/keepassxc.nix ================================================ { programs.keepassxc = { enable = true; settings = { Browser.Enabled = true; # Browser.UpdateBinaryPath = false; General = { MinimizeAfterUnlock = true; }; FdoSecrets.Enabled = true; GUI = { AdvancedSettings = true; ApplicationTheme = "dark"; CompactMode = true; HidePasswords = true; LaunchAtStartup = true; MinimizeOnClose = true; MinimizeToTray = true; ShowTrayIcon = true; }; SSHAgent.Enabled = false; Security = { LockDatabaseIdleSeconds = 18000; }; }; }; } ================================================ FILE: modules/home/graphical/linux.nix ================================================ { flake, lib, pkgs, ... }: let inherit (flake) self; in { imports = with self.homeModules; [ graphical-chromium # graphical-common graphical-firefox graphical-keepassxc graphical-psd graphical-vicinae graphical-zed-editor graphical-mime graphical-mpv ]; dconf.enable = lib.mkForce true; home = { packages = with pkgs; [ # adwaita-icon-theme # evince # gammastep # hicolor-icon-theme pavucontrol # pinentry-gnome3 # qgnomeplatform # qt5.qtwayland # qt6.qtwayland # spawn ]; sessionVariables = { MOZ_DBUS_REMOTE = 1; MOZ_USE_XINPUT2 = 1; QT_AUTO_SCREEN_SCALE_FACTOR = 1; _JAVA_OPTIONS = "-Dawt.useSystemAAFontSettings=on -Dswing.aatext=true -Dsun.java2d.xrender=true"; }; }; gtk = { enable = true; gtk2.extraConfig = "gtk-application-prefer-dark-theme = true"; gtk3.extraConfig.gtk-application-prefer-dark-theme = true; }; qt = { enable = true; style.name = "kvantum"; }; services = { gpg-agent.pinentry.package = pkgs.pinentry-qt; }; } ================================================ FILE: modules/home/graphical/lutris.nix ================================================ { pkgs, osConfig, ... }: { programs.lutris = { enable = false; defaultWinePackage = pkgs.proton-ge-bin; extraPackages = with pkgs; [ mangohud winetricks gamescope gamemode umu-launcher ]; protonPackages = [ pkgs.proton-ge-bin ]; steamPackage = osConfig.programs.steam.package; winePackages = [ # pkgs.wineWow64Packages.full pkgs.proton-ge-bin ]; }; } ================================================ FILE: modules/home/graphical/mime.nix ================================================ let documentDefaults = { "application/vnd.comicbook-rar" = "org.gnome.Evince.desktop"; "application/vnd.comicbook+zip" = "org.gnome.Evince.desktop"; "application/x-cb7" = "org.gnome.Evince.desktop"; "application/x-cbr" = "org.gnome.Evince.desktop"; "application/x-cbt" = "org.gnome.Evince.desktop"; "application/x-cbz" = "org.gnome.Evince.desktop"; "application/x-ext-cb7" = "org.gnome.Evince.desktop"; "application/x-ext-cbr" = "org.gnome.Evince.desktop"; "application/x-ext-cbt" = "org.gnome.Evince.desktop"; "application/x-ext-cbz" = "org.gnome.Evince.desktop"; "application/x-ext-djv" = "org.gnome.Evince.desktop"; "application/x-ext-djvu" = "org.gnome.Evince.desktop"; "image/vnd.djvu+multipage" = "org.gnome.Evince.desktop"; "application/x-bzdvi" = "org.gnome.Evince.desktop"; "application/x-dvi" = "org.gnome.Evince.desktop"; "application/x-ext-dvi" = "org.gnome.Evince.desktop"; "application/x-gzdvi" = "org.gnome.Evince.desktop"; "application/pdf" = "org.gnome.Evince.desktop"; "application/x-bzpdf" = "org.gnome.Evince.desktop"; "application/x-ext-pdf" = "org.gnome.Evince.desktop"; "application/x-gzpdf" = "org.gnome.Evince.desktop"; "application/x-xzpdf" = "org.gnome.Evince.desktop"; "application/postscript" = "org.gnome.Evince.desktop"; "application/x-bzpostscript" = "org.gnome.Evince.desktop"; "application/x-gzpostscript" = "org.gnome.Evince.desktop"; "application/x-ext-eps" = "org.gnome.Evince.desktop"; "application/x-ext-ps" = "org.gnome.Evince.desktop"; "image/x-bzeps" = "org.gnome.Evince.desktop"; "image/x-eps" = "org.gnome.Evince.desktop"; "image/x-gzeps" = "org.gnome.Evince.desktop"; "image/tiff" = "org.gnome.Evince.desktop"; "application/oxps" = "org.gnome.Evince.desktop"; "application/vnd.ms-xpsdocument" = "org.gnome.Evince.desktop"; "application/illustrator" = "org.gnome.Evince.desktop"; }; in { xdg.mimeApps.defaultApplications = documentDefaults; } ================================================ FILE: modules/home/graphical/mpv.nix ================================================ { programs.mpv.enable = true; xdg.configFile."mpv/mpv.conf".text = '' vo=gpu hwdec=auto profile=gpu-hq scale=ewa_lanczossharp cscale=ewa_lanczossharp video-sync=display-resample interpolation tscale=oversample ''; xdg.mimeApps.defaultApplications = { "application/mxf" = "mpv.desktop"; "application/sdp" = "mpv.desktop"; "application/smil" = "mpv.desktop"; "application/streamingmedia" = "mpv.desktop"; "application/vnd.apple.mpegurl" = "mpv.desktop"; "application/vnd.ms-asf" = "mpv.desktop"; "application/vnd.rn-realmedia" = "mpv.desktop"; "application/vnd.rn-realmedia-vbr" = "mpv.desktop"; "application/x-cue" = "mpv.desktop"; "application/x-extension-m4a" = "mpv.desktop"; "application/x-extension-mp4" = "mpv.desktop"; "application/x-matroska" = "mpv.desktop"; "application/x-mpegurl" = "mpv.desktop"; "application/x-ogm" = "mpv.desktop"; "application/x-ogm-video" = "mpv.desktop"; "application/x-shorten" = "mpv.desktop"; "application/x-smil" = "mpv.desktop"; "application/x-streamingmedia" = "mpv.desktop"; "video/3gp" = "mpv.desktop"; "video/3gpp" = "mpv.desktop"; "video/3gpp2" = "mpv.desktop"; "video/avi" = "mpv.desktop"; "video/divx" = "mpv.desktop"; "video/dv" = "mpv.desktop"; "video/fli" = "mpv.desktop"; "video/flv" = "mpv.desktop"; "video/mkv" = "mpv.desktop"; "video/mp2t" = "mpv.desktop"; "video/mp4" = "mpv.desktop"; "video/mp4v-es" = "mpv.desktop"; "video/mpeg" = "mpv.desktop"; "video/msvideo" = "mpv.desktop"; "video/ogg" = "mpv.desktop"; "video/quicktime" = "mpv.desktop"; "video/vnd.divx" = "mpv.desktop"; "video/vnd.mpegurl" = "mpv.desktop"; "video/vnd.rn-realvideo" = "mpv.desktop"; "video/webm" = "mpv.desktop"; "video/x-avi" = "mpv.desktop"; "video/x-flc" = "mpv.desktop"; "video/x-flic" = "mpv.desktop"; "video/x-flv" = "mpv.desktop"; "video/x-m4v" = "mpv.desktop"; "video/x-matroska" = "mpv.desktop"; "video/x-mpeg2" = "mpv.desktop"; "video/x-mpeg3" = "mpv.desktop"; "video/x-ms-afs" = "mpv.desktop"; "video/x-ms-asf" = "mpv.desktop"; "video/x-ms-wmv" = "mpv.desktop"; "video/x-ms-wmx" = "mpv.desktop"; "video/x-ms-wvxvideo" = "mpv.desktop"; "video/x-msvideo" = "mpv.desktop"; "video/x-ogm" = "mpv.desktop"; "video/x-ogm+ogg" = "mpv.desktop"; "video/x-theora" = "mpv.desktop"; "video/x-theora+ogg" = "mpv.desktop"; }; } ================================================ FILE: modules/home/graphical/psd.nix ================================================ { services = { psd = { enable = true; browsers = [ "firefox" ]; }; }; } ================================================ FILE: modules/home/graphical/vicinae.nix ================================================ { programs.vicinae = { enable = true; systemd.enable = true; # https://docs.vicinae.com/quickstart/cosmic#layer-shell settings.launcher_window.layer_shell.enabled = false; }; systemd.user.services.vicinae.Service.Environment = [ "PATH=/etc/profiles/per-user/bbigras/bin:/run/current-system/sw/bin" ]; } ================================================ FILE: modules/home/graphical/zed-editor.nix ================================================ { lib, pkgs, ... }: { home.packages = with pkgs; [ nil nixd ]; programs.zed-editor = { enable = true; # https://github.com/zed-industries/extensions/tree/main/extensions extensions = [ "env" "gleam" "graphql" "helm" "just" "nix" "rust" "sql" "toml" ]; userSettings = { features = { edit_prediction_provider = "copilot"; }; node = { path = lib.getExe pkgs.nodejs; npm_path = lib.getExe' pkgs.nodejs "npm"; }; hour_format = "hour24"; auto_update = false; lsp = { rust-analyzer = { initialization_options = { check = { command = "clippy"; # rust-analyzer.check.command (default: "check") }; inlayHints = { maxLength = null; lifetimeElisionHints = { enable = "skip_trivial"; useParameterNames = true; }; closureReturnTypeHints = { enable = "always"; }; }; }; }; }; }; }; } ================================================ FILE: modules/home/htop.nix ================================================ { config, ... }: { programs.htop = { enable = true; settings = { delay = 10; show_program_path = false; show_cpu_frequency = true; show_cpu_temperature = true; hide_kernel_threads = true; } // ( with config.lib.htop; leftMeters [ (bar "AllCPUs2") (bar "Memory") (bar "Swap") ] ) // ( with config.lib.htop; rightMeters [ (text "Hostname") (text "Tasks") (text "LoadAverage") (text "Uptime") (text "Systemd") ] ); }; } ================================================ FILE: modules/home/jjui.nix ================================================ { programs.jjui = { enable = true; }; } ================================================ FILE: modules/home/jujutsu.nix ================================================ { pkgs, ... }: { home = { packages = with pkgs; [ kdiff3 meld # watchman ]; }; # environment.systemPackages = with pkgs; [ # watchman # ]; programs = { mergiraf = { enable = true; enableJujutsuIntegration = true; }; jujutsu = { enable = true; settings = { user = { name = "Bruno Bigras"; email = "bigras.bruno@gmail.com"; }; ui.revsets-use-glob-by-default = true; }; }; }; } ================================================ FILE: modules/home/music.nix ================================================ { pkgs, ... }: { home.packages = with pkgs; [ beets checkart fixart mediainfo ]; } ================================================ FILE: modules/home/radicle.nix ================================================ { pkgs, ... }: { home = { packages = with pkgs; [ radicle-tui ]; }; programs = { radicle = { enable = true; settings = { node = { listen = [ "0.0.0.0:8776" ]; }; }; }; }; services = { radicle.node = { enable = true; lazy.enable = true; }; }; } ================================================ FILE: modules/home/ssh.nix ================================================ { home.file.".ssh/config".text = '' Include ~/.ssh/config.host Host * CanonicalizeHostname yes PermitLocalCommand yes CanonicalDomains tamarin-macaroni.ts.net Match canonical Host *.tamarin-macaroni.ts.net ForwardAgent yes Match canonical Host * ChallengeResponseAuthentication no ControlMaster auto ControlPath ~/.ssh/ssh-%r@%h:%p ControlPersist 30m ForwardAgent no ForwardX11 no ForwardX11Trusted no HashKnownHosts yes ServerAliveCountMax 5 ServerAliveInterval 60 StrictHostKeyChecking ask VerifyHostKeyDNS yes ''; } ================================================ FILE: modules/home/standalone.nix ================================================ # Shared configuration for standalone home-manager hosts # This module is imported by configurations/home/*/default.nix { config, flake, pkgs, ... }: let inherit (flake) inputs self; in { imports = [ inputs.nix-index-database.homeModules.nix-index ] ++ (with self.homeModules; [ nixpkgs theme ]); home.sessionVariables.NIX_PATH = "nixpkgs=${config.xdg.dataHome}/nixpkgs"; programs = { home-manager.enable = true; fish.plugins = [ { name = "nix-env"; src = pkgs.fetchFromGitHub { owner = "lilyball"; repo = "nix-env.fish"; rev = "7b65bd228429e852c8fdfa07601159130a818cfa"; hash = "sha256-RG/0rfhgq6aEKNZ0XwIqOaZ6K5S4+/Y5EEMnIdtfPhk"; }; } ]; }; xdg = { dataFile.nixpkgs.source = inputs.nixpkgs; # configFile."nix/nix.conf".text = '' # flake-registry = ${config.xdg.configHome}/nix/registry.json # ''; }; } ================================================ FILE: modules/home/starship.nix ================================================ { lib, pkgs, ... }: { programs.starship = { enable = true; settings = { custom = { jj = { when = "${lib.getExe pkgs.jj-starship} detect"; shell = [ "${lib.getExe pkgs.jj-starship}" ]; format = "$output "; }; }; git_branch.disabled = true; git_status.disabled = true; }; presets = [ "nerd-font-symbols" "pure-preset" ]; }; } ================================================ FILE: modules/home/syncthing.nix ================================================ { # networking = { # firewall = { # allowedUDPPorts = [ # 22000 # syncthing # 21027 # syncthing discovery # ]; # allowedTCPPorts = [ # 22000 # syncthing # ]; # }; # }; services.syncthing = { enable = true; tray.enable = true; }; systemd.user.services = { syncthing = { Service = { StandardOutput = "null"; }; }; }; } ================================================ FILE: modules/home/television.nix ================================================ { config, lib, ... }: { programs = { nix-search-tv = { enable = true; enableTelevisionIntegration = false; }; television = { enable = true; settings = { tick_rate = 50; default_channel = "files"; shell_integration = { channel_triggers = { files = [ "bat" "cat" "chmod" "chown" "cp" "gunzip" "gzip" "head" "less" "ln" "mv" "nano" "rm" "tail" "tar" "touch" "unzip" "vim" "xz" "zip" ]; git-diff = [ "git add" "git restore" ]; git-log = [ "git log" "git show" ]; man = [ "man" ]; nixpkgs = [ "nix shell" ]; }; keybindings = { smart_autocomplete = "ctrl-o"; command_history = "ctrl-t"; }; }; }; channels = { files = { metadata = { name = "files"; description = "A channel to select files and directories"; requirements = [ "fd" "bat" ]; }; source = { command = [ "fd -t f" "fd -t f -H" ]; }; preview = { command = "bat -n --color=always '{}'"; env = { BAT_THEME = "ansi"; }; }; keybindings = { shortcut = "f1"; f12 = "actions:edit"; ctrl-up = "actions:goto_parent_dir"; }; actions.edit = { description = "Opens the selected entries with the default editor (falls back to vim)"; command = "$${EDITOR:-vim} '{}'"; # use `mode = "fork"` if you want to return to tv afterwards mode = "execute"; }; actions.goto_parent_dir = { description = "Re-opens tv in the parent directory"; command = "tv files .."; mode = "execute"; }; }; git-diff = { metadata = { name = "git-diff"; description = "A channel to select files from git diff commands"; requirements = [ "git" ]; }; source = { command = "git diff --name-only HEAD"; }; preview = { command = "git diff HEAD --color=always -- '{}'"; }; }; git-log = { metadata = { name = "git-log"; description = "A channel to select from git log entries"; requirements = [ "git" ]; }; source = { 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"; output = "{strip_ansi|split: :1}"; ansi = true; }; preview = { command = "git show -p --stat --pretty=fuller --color=always '{strip_ansi|split: :1}' | head -n 1000"; }; }; man-pages = { metadata = { name = "man-pages"; description = "Browse and preview system manual pages"; requirements = [ "apropos" "man" "col" ]; }; source = { # List all man pages using apropos command = "apropos ."; }; preview = { # Show the man page for the selected entry command = "man '{0}' | col -bx"; env = { "MANWIDTH" = "80"; }; }; keybindings = { enter = "actions:open"; }; actions.open = { description = "Open the selected man page in the system pager"; command = "man '{0}'"; mode = "execute"; }; ui.preview_panel = { header = "{0}"; }; }; nixpkgs = { metadata = { description = "Search nixpkgs"; name = "nixpkgs"; requirements = [ "nix-search-tv" "sed" ]; }; preview = { command = "${lib.getExe config.programs.nix-search-tv.package} preview \"{}\""; }; source = { command = "${lib.getExe config.programs.nix-search-tv.package} print nixpkgs"; }; }; }; }; }; } ================================================ FILE: modules/home/terminfo-hack.nix ================================================ { pkgs, ... }: { home.file.".terminfo".source = pkgs.symlinkJoin { name = "terminfo-dirs"; paths = with pkgs; [ (ncurses + "/share/terminfo") (ghostty + "/share/terminfo") ]; }; } ================================================ FILE: modules/home/tkey-ssh-agent.nix ================================================ { pkgs, ... }: { home.sessionVariablesExtra = '' if [ -z "$SSH_AUTH_SOCK" ]; then export SSH_AUTH_SOCK=$XDG_RUNTIME_DIR/tkey-ssh-agent fi ''; systemd.user.services = { tkey-ssh-agent = { Unit = { Description = "tkey-ssh-agent"; After = [ "graphical-session.target" ]; PartOf = [ "graphical-session.target" ]; }; Service = { ExecStart = "${pkgs.tkey-ssh-agent}/bin/tkey-ssh-agent -a %t/tkey-ssh-agent --uss"; }; Install.WantedBy = [ "graphical-session.target" ]; }; }; } ================================================ FILE: modules/home/tmux.nix ================================================ { pkgs, ... }: { programs.tmux = { enable = true; sensibleOnTop = true; aggressiveResize = true; clock24 = true; escapeTime = 0; # Use idempotent new-session to avoid creating duplicate sessions when both # NixOS (/etc/tmux.conf) and home-manager configs are loaded. The -A flag # attaches if the session exists, otherwise creates it. newSession = false; plugins = with pkgs.tmuxPlugins; [ fingers lazy-restore ]; mouse = true; secureSocket = false; terminal = "tmux-256color"; historyLimit = 30000; # keyMode = "vi"; # prefix = "C-a"; extraConfig = '' new-session -A -s 0 # update the env when attaching to an existing session set -g update-environment -r set -g set-clipboard on set -ag terminal-overrides ",alacritty*:Tc,foot*:Tc,xterm*:Tc" set -as terminal-features ",alacritty*:RGB,foot*:RGB,xterm*:RGB" set -as terminal-features ",alacritty*:hyperlinks,foot*:hyperlinks,xterm*:hyperlinks" set -as terminal-features ",alacritty*:usstyle,foot*:usstyle,xterm*:usstyle" set -as terminal-features ",alacritty*:extkeys,foot*:extkeys,xterm*:extkeys" set -as terminal-features ",alacritty*:clipboard,foot*:clipboard,xterm*:clipboard" # recommended by vim.health set-option -g focus-events on # automatically renumber windows set -g renumber-windows on bind C-a last-window bind a send-prefix bind R source-file ~/.config/tmux/tmux.conf \; display-message "Config reloaded..." bind : command-prompt bind r refresh-client bind L clear-history bind space next-window bind bspace previous-window bind enter next-layout bind v split-window -h -c "#{pane_current_path}" bind s split-window -v -c "#{pane_current_path}" bind h select-pane -L bind j select-pane -D bind k select-pane -U bind l select-pane -R bind \\ split-window -h -c "#{pane_current_path}" bind - split-window -v -c "#{pane_current_path}" bind C-o rotate-window bind + select-layout main-horizontal bind = select-layout main-vertical bind a last-pane bind q display-panes bind c new-window bind t next-window bind T previous-window bind [ copy-mode bind ] paste-buffer set -g base-index 0 set-window-option -g automatic-rename setw -g monitor-activity on set -g visual-activity off set -g status-right '%a | %Y-%m-%d | %H:%M' # for t-smart-tmux-session-manager bind-key x kill-pane # skip "kill-pane 1? (y/n)" prompt set -g detach-on-destroy off # don't exit from tmux when closing a session set -g @t-fzf-find-binding 'ctrl-f:change-prompt( )+reload(fd -H -d 2 -t d . ~)' set -g @t-fzf-prompt ' ' ''; }; } ================================================ FILE: modules/home/trusted/default.nix ================================================ { flake, ... }: { imports = with flake.self.homeModules; [ trusted-gpg ]; # programs.git.settings = { # commit.gpgsign = true; # gpg.format = "ssh"; # gpg.ssh.allowedSignersFile = "~/.ssh/allowed_signers"; # user.signingkey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEKJvfEJv2UsKPnfP9fHIwTuGsMWXc4wHYMf7HZlq2vY"; # }; } ================================================ FILE: modules/home/trusted/gpg.nix ================================================ { config, lib, pkgs, ... }: { services.gpg-agent = lib.mkIf pkgs.stdenv.isLinux { enable = true; enableExtraSocket = true; enableScDaemon = false; enableSshSupport = false; defaultCacheTtl = 34560000; maxCacheTtl = 34560000; extraConfig = '' extra-socket /run/user/${toString config.home.uid}/gnupg/S.gpg-agent.extra ''; }; programs.gpg.settings = { # Default/trusted key ID to use (helpful with throw-keyids) # default-key = ""; # trusted-key = ""; # https://github.com/drduh/config/blob/master/gpg.conf # https://www.gnupg.org/documentation/manuals/gnupg/GPG-Configuration-Options.html # https://www.gnupg.org/documentation/manuals/gnupg/GPG-Esoteric-Options.html # Use AES256, 192, or 128 as cipher personal-cipher-preferences = "AES256 AES192 AES"; # Use SHA512, 384, or 256 as digest personal-digest-preferences = "SHA512 SHA384 SHA256"; # Use ZLIB, BZIP2, ZIP, or no compression personal-compress-preferences = "ZLIB BZIP2 ZIP Uncompressed"; # Default preferences for new keys default-preference-list = "SHA512 SHA384 SHA256 AES256 AES192 AES ZLIB BZIP2 ZIP Uncompressed"; # SHA512 as digest to sign keys cert-digest-algo = "SHA512"; # SHA512 as digest for symmetric ops s2k-digest-algo = "SHA512"; # AES256 as cipher for symmetric ops s2k-cipher-algo = "AES256"; # UTF-8 support for compatibility charset = "utf-8"; # Show Unix timestamps fixed-list-mode = ""; # No comments in signature no-comments = ""; # No version in signature no-emit-version = ""; # Disable banner no-greeting = ""; # Long hexidecimal key format keyid-format = "0xlong"; # Display UID validity list-options = "show-uid-validity"; verify-options = "show-uid-validity"; # Display all keys and their fingerprints with-fingerprint = ""; # Cross-certify subkeys are present and valid require-cross-certification = ""; # Disable caching of passphrase for symmetrical ops no-symkey-cache = ""; # Enable smartcard # use-agent = ""; }; } ================================================ FILE: modules/home/xdg.nix ================================================ { pkgs, ... }: { xdg = { enable = true; mimeApps.enable = pkgs.stdenv.isLinux; userDirs = { enable = pkgs.stdenv.isLinux; desktop = "$HOME/Bureau"; documents = "$HOME/Documents"; download = "$HOME/Téléchargements"; music = "$HOME/Musique"; pictures = "$HOME/Photos"; publicShare = "$HOME/Public"; templates = "$HOME/Templates"; videos = "$HOME/Vidéos"; }; }; } ================================================ FILE: modules/home/zsh.nix ================================================ { config, lib, pkgs, ... }: { programs.zsh = { enable = true; enableCompletion = true; enableVteIntegration = pkgs.stdenv.isLinux; autocd = true; autosuggestion.enable = true; dotDir = "${config.xdg.configHome}/zsh"; history = { expireDuplicatesFirst = true; extended = true; ignoreDups = true; ignoreSpace = true; path = "${config.xdg.dataHome}/zsh/history"; save = 10000; share = true; }; plugins = [ { name = "nix-zsh-completions"; src = pkgs.nix-zsh-completions; file = "share/zsh/plugins/nix/nix-zsh-completions.plugin.zsh"; completions = [ "share/zsh/site-functions" ]; } { name = "vi-mode"; src = pkgs.zsh-vi-mode; file = "share/zsh/zsh-vi-mode/zsh-vi-mode.plugin.zsh"; } { name = "fast-syntax-highlighting"; src = pkgs.zsh-fast-syntax-highlighting; file = "share/zsh/plugins/fast-syntax-highlighting/fast-syntax-highlighting.plugin.zsh"; } { name = "autopair"; inherit (pkgs.zsh-autopair) src; file = "zsh-autopair.plugin.zsh"; } { name = "history-substring-search"; src = pkgs.zsh-history-substring-search; file = "share/zsh-history-substring-search/zsh-history-substring-search.zsh"; } ]; envExtra = '' export LESSHISTFILE="${config.xdg.dataHome}/less_history" export CARGO_HOME="${config.xdg.cacheHome}/cargo" ''; initContent = lib.mkMerge [ # Workaround for home-manager#2562: completions from home.packages aren't in fpath (lib.mkOrder 561 '' fpath+=("${config.home.profileDirectory}"/share/zsh/site-functions \ "${config.home.profileDirectory}"/share/zsh/$ZSH_VERSION/functions \ "${config.home.profileDirectory}"/share/zsh/vendor-completions) '') '' bindkey "''${terminfo[kcuu1]}" history-substring-search-up bindkey '^[[A' history-substring-search-up bindkey "''${terminfo[kcud1]}" history-substring-search-down bindkey '^[[B' history-substring-search-down ${pkgs.nix-your-shell}/bin/nix-your-shell --nom zsh | source /dev/stdin bindkey "''${terminfo[khome]}" beginning-of-line bindkey "''${terminfo[kend]}" end-of-line bindkey "''${terminfo[kdch1]}" delete-char bindkey "^[[1;5C" forward-word bindkey "^[[1;3C" forward-word bindkey "^[[1;5D" backward-word bindkey "^[[1;3D" backward-word local CONST_SSH_SOCK="$HOME/.ssh/ssh-auth-sock" if [ ! -z ''${SSH_AUTH_SOCK+x} ] && [ "$SSH_AUTH_SOCK" != "$CONST_SSH_SOCK" ]; then rm -f "$CONST_SSH_SOCK" ln -sf "$SSH_AUTH_SOCK" "$CONST_SSH_SOCK" export SSH_AUTH_SOCK="$CONST_SSH_SOCK" fi '' ]; sessionVariables = { RPROMPT = ""; }; }; } ================================================ FILE: modules/nixos/agenix-rekey.nix ================================================ # agenix-rekey configuration for automatic secret rekeying { config, flake, lib, ... }: let inherit (flake) inputs self; in { imports = [ inputs.agenix-rekey.nixosModules.default ]; age.rekey = { # Master identity - private key used for decryption (must exist on machine running rekey) masterIdentities = [ "/home/bbigras/.ssh/bbigras" ]; # Store rekeyed secrets locally per-host storageMode = "local"; localStorageDir = lib.mkDefault (self + "/secrets/rekeyed/${config.networking.hostName}"); # Host pubkey must be set per-host in configurations/nixos//default.nix: # age.rekey.hostPubkey = "ssh-ed25519 AAAA..."; }; } ================================================ FILE: modules/nixos/core.nix ================================================ { config, flake, lib, pkgs, ... }: let inherit (flake) self; in { imports = with self.nixosModules; [ aspell common nix nixpkgs resolved services-veilid tmux ]; environment.systemPackages = with pkgs; [ man-pages ghostty.terminfo ]; boot.kernelParams = [ "log_buf_len=10M" ]; i18n.defaultLocale = "fr_CA.UTF-8"; networking = { firewall = { trustedInterfaces = [ "tailscale0" ]; allowedUDPPorts = [ ]; }; useDHCP = false; useNetworkd = true; wireguard.enable = true; }; security = { # pam.services.sudo.u2fAuth = true; polkit.enable = true; sudo-rs = { enable = true; wheelNeedsPassword = lib.mkDefault false; }; }; services = { dbus.implementation = "broker"; openssh = { enable = true; settings.PermitRootLogin = lib.mkDefault "no"; }; smartd = { enable = true; notifications = { systembus-notify.enable = true; }; }; tailscale = { enable = true; openFirewall = true; useRoutingFeatures = "client"; disableUpstreamLogging = true; }; fwupd.daemonSettings.EspLocation = config.boot.loader.efi.efiSysMountPoint; }; system = { stateVersion = lib.mkDefault "26.05"; }; systemd = { network.wait-online.anyInterface = true; services.tailscaled = { after = [ "network-online.target" "systemd-resolved.service" ]; wants = [ "network-online.target" "systemd-resolved.service" ]; }; }; time.timeZone = "America/Montreal"; users.mutableUsers = false; } ================================================ FILE: modules/nixos/default.nix ================================================ # NixOS modules aggregator # This is the main entry point for NixOS configurations { flake, pkgs, ... }: let inherit (flake) inputs self; nurNoPkgs = import inputs.nur { pkgs = null; nurpkgs = pkgs; }; in { imports = [ # External input modules (shared across all NixOS hosts) inputs.agenix.nixosModules.default inputs.catppuccin.nixosModules.catppuccin inputs.disko.nixosModules.default inputs.home-manager.nixosModules.home-manager inputs.impermanence.nixosModules.impermanence inputs.lanzaboote.nixosModules.lanzaboote inputs.nix-index-database.nixosModules.nix-index inputs.nixos-facter-modules.nixosModules.facter inputs.peerix.nixosModules.peerix ] ++ (with self.nixosModules; [ agenix-rekey core # tailscale-address ]); catppuccin = { enable = true; flavor = "mocha"; accent = "blue"; cursors.enable = true; }; programs.nix-ld.enable = true; # Home-manager integration # Note: stylix.homeModules.stylix is auto-imported via stylix.homeManagerIntegration home-manager = { useGlobalPkgs = true; useUserPackages = true; extraSpecialArgs = { inherit flake; }; sharedModules = [ inputs.nix-index-database.homeModules.nix-index inputs.catppuccin.homeModules.catppuccin nurNoPkgs.repos.rycee.hmModules.emacs-init self.homeModules.default ]; }; } ================================================ FILE: modules/nixos/graphical/cosmic.nix ================================================ { pkgs, ... }: { environment = { cosmic.excludePackages = with pkgs; [ cosmic-edit cosmic-ext-calculator cosmic-player cosmic-reader cosmic-store cosmic-term ]; sessionVariables.COSMIC_DATA_CONTROL_ENABLED = 1; systemPackages = with pkgs; [ cosmic-ext-applet-caffeine ]; }; services = { desktopManager.cosmic.enable = true; displayManager.cosmic-greeter.enable = true; }; } ================================================ FILE: modules/nixos/graphical/default.nix ================================================ { # silent boot for plymouth boot = { consoleLogLevel = 0; kernelParams = [ "quiet" "udev.log_level=3" ]; }; # programs.dconf.enable = true; programs.wireshark.enable = true; services = { # dbus.packages = with pkgs; [ dconf ]; # displayManager.gdm = { # enable = true; # autoSuspend = true; # wayland = true; # }; # gnome.at-spi2-core.enable = true; orca.enable = false; speechd.enable = false; # xserver.enable = true; }; # xdg.portal = { # enable = true; # wlr.enable = true; # extraPortals = with pkgs; [ xdg-desktop-portal-gtk ]; # }; } ================================================ FILE: modules/nixos/graphical/fonts.nix ================================================ { pkgs, ... }: { fonts = { packages = with pkgs; [ dejavu_fonts noto-fonts noto-fonts-cjk-sans noto-fonts-cjk-serif unifont nerd-fonts.noto nerd-fonts.symbols-only ]; }; } ================================================ FILE: modules/nixos/graphical/steam.nix ================================================ { pkgs, ... }: { programs = { steam = { enable = true; extraCompatPackages = [ pkgs.proton-ge-bin ]; localNetworkGameTransfers.openFirewall = true; protontricks.enable = true; remotePlay.openFirewall = true; }; gamemode.enable = true; gamescope.enable = true; }; } ================================================ FILE: modules/nixos/graphical/trusted.nix ================================================ { pkgs, ... }: { programs = { }; security.pam.services.login.enableGnomeKeyring = false; services = { dbus.packages = with pkgs; [ gcr ]; gnome.gnome-keyring.enable = false; }; } ================================================ FILE: modules/nixos/hardware/bluetooth.nix ================================================ { hardware.bluetooth = { enable = true; powerOnBoot = true; disabledPlugins = [ "sap" ]; settings = { General = { JustWorksRepairing = "always"; MultiProfile = "multiple"; Experimental = true; KernelExperimental = true; }; }; }; } ================================================ FILE: modules/nixos/hardware/efi.nix ================================================ { lib, ... }: { boot.loader = { efi.canTouchEfiVariables = true; systemd-boot = { enable = true; configurationLimit = 15; }; timeout = lib.mkDefault 2; }; console.earlySetup = true; } ================================================ FILE: modules/nixos/hardware/fast-networking.nix ================================================ { boot = { kernel.sysctl = { "net.core.default_qdisc" = "cake"; "net.core.optmem_max" = 65536; "net.core.rmem_default" = 1048576; "net.core.rmem_max" = 16777216; "net.core.somaxconn" = 8192; "net.core.wmem_default" = 1048576; "net.core.wmem_max" = 16777216; "net.ipv4.conf.all.log_martians" = 1; "net.ipv4.conf.all.rp_filter" = 1; "net.ipv4.conf.default.log_martians" = 1; "net.ipv4.conf.default.rp_filter" = 1; "net.ipv4.ip_local_port_range" = "16384 65535"; "net.ipv4.tcp_congestion_control" = "bbr"; "net.ipv4.tcp_fastopen" = 3; "net.ipv4.tcp_max_syn_backlog" = 8192; "net.ipv4.tcp_max_tw_buckets" = 2000000; "net.ipv4.tcp_mtu_probing" = 1; "net.ipv4.tcp_rfc1337" = 1; "net.ipv4.tcp_rmem" = "4096 1048576 2097152"; "net.ipv4.tcp_slow_start_after_idle" = 0; "net.ipv4.tcp_syncookies" = 1; "net.ipv4.tcp_tw_reuse" = 1; "net.ipv4.tcp_wmem" = "4096 65536 16777216"; "net.ipv4.udp_rmem_min" = 8192; "net.ipv4.udp_wmem_min" = 8192; "net.netfilter.nf_conntrack_generic_timeout" = 60; "net.netfilter.nf_conntrack_max" = 1048576; "net.netfilter.nf_conntrack_tcp_timeout_established" = 600; "net.netfilter.nf_conntrack_tcp_timeout_time_wait" = 1; }; kernelModules = [ "tls" "tcp_bbr" ]; }; } ================================================ FILE: modules/nixos/hardware/no-mitigations.nix ================================================ { boot.kernelParams = [ "l1tf=off" "mds=off" "mitigations=off" "no_stf_barrier" "noibpb" "noibrs" "nopti" "nospec_store_bypass_disable" "nospectre_v1" "nospectre_v2" "tsx=on" "tsx_async_abort=off" ]; } ================================================ FILE: modules/nixos/hardware/nonsecureboot.nix ================================================ { boot = { loader.systemd-boot.enable = true; loader.grub.enable = false; }; } ================================================ FILE: modules/nixos/hardware/nvidia.nix ================================================ { config, ... }: { boot = { kernelModules = [ "nvidia" "nvidia_modeset" "nvidia-uvm" "nvidia_drm" ]; blacklistedKernelModules = [ "nouveau" ]; extraModulePackages = [ config.boot.kernelPackages.nvidia_x11 ]; }; services.xserver.videoDrivers = [ "nvidia" ]; hardware = { graphics.enable = true; nvidia-container-toolkit.enable = true; nvidia = { package = config.boot.kernelPackages.nvidia_x11; modesetting.enable = true; nvidiaPersistenced = true; nvidiaSettings = false; open = true; }; }; virtualisation.docker.enableNvidia = true; } ================================================ FILE: modules/nixos/hardware/printer.nix ================================================ { pkgs, ... }: { programs.system-config-printer.enable = true; services.printing = { enable = true; drivers = with pkgs; [ gutenprint gutenprintBin brlaser cups-brother-mfcl2750dw ]; }; } ================================================ FILE: modules/nixos/hardware/secureboot.nix ================================================ { lib, pkgs, ... }: { boot = { bootspec.enable = true; lanzaboote = { enable = true; autoGenerateKeys.enable = true; autoEnrollKeys = { enable = true; # Automatically reboot to enroll the keys in the firmware autoReboot = true; }; pkiBundle = "/etc/secureboot"; }; loader.systemd-boot.enable = lib.mkForce false; loader.grub.enable = lib.mkForce false; }; environment.systemPackages = with pkgs; [ sbctl ]; # environment.persistence."/nix/state".directories = [ config.boot.lanzaboote.pkiBundle ]; } ================================================ FILE: modules/nixos/hardware/sound.nix ================================================ { config, ... }: { environment.systemPackages = [ config.services.pipewire.package ]; security.rtkit.enable = true; services.pipewire = { enable = true; alsa.enable = true; jack.enable = true; pulse.enable = true; wireplumber.enable = true; extraConfig = { client."99-resample"."stream.properties"."resample.quality" = 15; pipewire-pulse."99-resample"."stream.properties"."resample.quality" = 15; pipewire."99-allowed-rates"."context.properties"."default.clock.allowed-rates" = [ 44100 48000 88200 96000 176400 192000 358000 384000 716000 768000 ]; }; }; } ================================================ FILE: modules/nixos/hardware/vial.nix ================================================ { services.udev.extraRules = '' KERNEL=="hidraw*", SUBSYSTEM=="hidraw", MODE="0666", TAG+="uaccess", TAG+="udev-acl" ''; } ================================================ FILE: modules/nixos/hardware/yubikey.nix ================================================ { pkgs, ... }: { services.udev.packages = with pkgs; [ yubikey-personalization libu2f-host ]; services.pcscd.enable = true; } ================================================ FILE: modules/nixos/pam-limits.nix ================================================ # PAM login limits for workstation/server hosts # Provides generous limits for memory locking, file descriptors, and processes. # Platform: NixOS only { security.pam.loginLimits = [ { domain = "*"; type = "-"; item = "memlock"; value = "unlimited"; } { domain = "*"; type = "-"; item = "nofile"; value = "1048576"; } { domain = "*"; type = "-"; item = "nproc"; value = "unlimited"; } ]; } ================================================ FILE: modules/nixos/printing.nix ================================================ { pkgs, ... }: { services.printing = { enable = true; drivers = with pkgs; [ gutenprint gutenprintBin ]; }; } ================================================ FILE: modules/nixos/resolved.nix ================================================ # systemd-resolved configuration - NixOS only { lib, ... }: { networking = { firewall = { allowedTCPPorts = [ 5355 ]; allowedUDPPorts = [ 5353 5355 ]; }; networkmanager.dns = "systemd-resolved"; }; services.resolved = { enable = true; settings.Resolve = { FallbackDNS = [ "1.1.1.1" # "2606:4700:4700::1111" "8.8.8.8" # "2001:4860:4860::8844" ]; DNSSEC = "allow-downgrade"; LLMNR = "true"; Domains = "~."; MulticastDNS = true; }; }; system.nssDatabases.hosts = lib.mkMerge [ (lib.mkBefore [ "mdns_minimal [NOTFOUND=return]" ]) (lib.mkAfter [ "mdns" ]) ]; } ================================================ FILE: modules/nixos/services/blocky.nix ================================================ { config, flake, lib, pkgs, ... }: let inherit (flake) self; inherit (config.networking) hostName tailscaleAddress; in { imports = with self.nixosModules; [ services-mysql services-unbound ]; networking.firewall = { allowedTCPPorts = [ 53 5335 ]; allowedUDPPorts = [ 53 5335 ]; }; environment.systemPackages = with pkgs; [ blocky ]; services = { blocky = { enable = true; settings = { upstreams.groups.default = [ "127.0.0.1:5335" ]; blocking = { denylists.default = [ # Hagezi Pro++ - Comprehensive protection against ads, tracking, malware, phishing, scam, crypto-mining "https://raw.githubusercontent.com/hagezi/dns-blocklists/main/hosts/pro.plus.txt" # OISD Big - Well-maintained, broad coverage blocklist "https://raw.githubusercontent.com/sjhgvr/oisd/main/domainswild2_big.txt" # StevenBlack Unified Hosts - Consolidates multiple reputable sources "https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts" ]; allowlists.default = [ (pkgs.writeText "default.txt" '' www.t.co t.co '') ]; clientGroupsBlock.default = [ "default" ]; }; caching.maxTime = -1; prometheus.enable = true; queryLog = { type = "mysql"; target = "blocky@unix(/run/mysqld/mysqld.sock)/blocky?charset=utf8mb4&parseTime=True&loc=Local"; logRetentionDays = 90; }; ports = { dns = [ "0.0.0.0:53" ]; http = [ "4000" ]; }; bootstrapDns = [ "tcp+udp:1.1.1.1" ]; ede.enable = true; }; }; mysql = { ensureDatabases = [ "blocky" ]; ensureUsers = [ { name = "blocky"; ensurePermissions = { "blocky.*" = "ALL PRIVILEGES"; }; } { name = "grafana"; ensurePermissions = { "blocky.*" = "SELECT"; }; } ]; }; prometheus.scrapeConfigs = [ { job_name = "blocky"; scrape_interval = "15s"; static_configs = [ { targets = [ "127.0.0.1:4000" ]; } ]; } ]; grafana = { declarativePlugins = with pkgs.grafanaPlugins; [ grafana-piechart-panel ]; settings.panels.disable_sanitize_html = true; provision.datasources.settings = { apiVersion = 1; datasources = [ { name = "Blocky Query Log"; type = "mysql"; url = "/run/mysqld/mysqld.sock"; user = "grafana"; orgId = 1; jsonData.database = "blocky"; } ]; deleteDatasources = [ { name = "Blocky Query Log"; orgId = 1; } ]; }; }; nginx.virtualHosts."grafana.${hostName}.meurer.org".locations."/".extraConfig = '' ${lib.optionalString ( tailscaleAddress != null ) ''add_header Access-Control-Allow-Origin "http://${tailscaleAddress}";''} add_header Access-Control-Allow-Origin "http://127.0.0.1"; add_header Access-Control-Allow-Origin "http://localhost"; ''; unbound.settings.server.port = "5335"; }; systemd.services = { blocky = { after = [ "unbound.service" "mysql.service" ]; requires = [ "unbound.service" ]; serviceConfig = { DynamicUser = lib.mkForce false; User = "blocky"; Group = "blocky"; Restart = "on-failure"; RestartSec = "1"; # Allow Unix socket connections to MySQL RestrictAddressFamilies = [ "AF_UNIX" "AF_INET" "AF_INET6" ]; }; }; }; users.users.blocky = { group = "blocky"; isSystemUser = true; }; users.groups.blocky = { }; } ================================================ FILE: modules/nixos/services/github-runner.nix ================================================ { config, pkgs, ... }: { age.secrets.github-runner-token.rekeyFile = ../../../secrets/github-runner.age; services.github-runners.${config.networking.hostName} = { enable = true; ephemeral = true; replace = true; tokenFile = config.age.secrets.github-runner-token.path; url = "https://github.com/bbigras/nix-config"; extraLabels = [ pkgs.stdenv.hostPlatform.system ]; extraPackages = with pkgs; [ cachix ]; }; } ================================================ FILE: modules/nixos/services/grafana.nix ================================================ { config, ... }: with config.networking; { environment.persistence."/nix/state".directories = [ { directory = "/var/lib/grafana"; user = "grafana"; group = "grafana"; } ]; security.acme.certs."grafana.${hostName}.meurer.org" = { }; services = { grafana = { enable = true; provision.enable = true; settings = { server = { http_addr = "127.0.0.1"; domain = "grafana.${hostName}.meurer.org"; }; auth = { disable_login_form = true; login_cookie_name = "_oauth2_proxy"; oauth_auto_login = true; signout_redirect_url = "https://grafana.${hostName}.meurer.org/oauth2/sign_out?rd=https%3A%2F%2Fgrafana.${hostName}.meurer.org"; }; "auth.basic".enabled = false; "auth.proxy" = { enabled = true; auto_sign_up = true; enable_login_token = false; header_name = "X-Email"; header_property = "email"; }; users = { allow_signup = false; auto_assign_org = true; auto_assign_org_role = "Viewer"; }; }; }; nginx.virtualHosts."grafana.${hostName}.meurer.org" = { useACMEHost = "grafana.${hostName}.meurer.org"; forceSSL = true; kTLS = true; locations."/" = { proxyPass = "http://127.0.0.1:3000"; proxyWebsockets = true; }; }; oauth2-proxy.nginx.virtualHosts."grafana.${hostName}.meurer.org" = { }; }; } ================================================ FILE: modules/nixos/services/jellyfin.nix ================================================ { config, ... }: with config.networking; { environment.persistence."/nix/state".directories = with config.services.jellyfin; [ { directory = cacheDir; inherit user group; } { directory = dataDir; inherit user group; } ]; security.acme.certs."jellyfin.${hostName}.meurer.org" = { }; services = { jellyfin.enable = true; nginx.virtualHosts."jellyfin.${hostName}.meurer.org" = { useACMEHost = "jellyfin.${hostName}.meurer.org"; forceSSL = true; kTLS = true; locations."/" = { proxyPass = "http://127.0.0.1:8096"; proxyWebsockets = true; }; }; }; } ================================================ FILE: modules/nixos/services/mysql.nix ================================================ { config, pkgs, ... }: { environment.persistence."/nix/state".directories = [ { directory = config.services.mysql.dataDir; inherit (config.services.mysql) group user; } ]; services.mysql = { enable = true; package = pkgs.mariadb; }; } ================================================ FILE: modules/nixos/services/nginx.nix ================================================ { config, pkgs, ... }: { age.secrets.acme.rekeyFile = ../../../secrets/acme.age; environment.persistence."/nix/state".directories = [ { directory = "/var/lib/acme"; user = "acme"; group = "acme"; } ]; security.acme = { acceptTerms = true; defaults = { email = "bernardo@meurer.org"; credentialsFile = config.age.secrets.acme.path; dnsProvider = "cloudflare"; }; }; services.nginx = { enable = true; recommendedOptimisation = true; recommendedProxySettings = true; recommendedTlsSettings = true; recommendedGzipSettings = true; package = pkgs.nginxMainline; }; users.groups.acme.members = [ "nginx" ]; } ================================================ FILE: modules/nixos/services/oauth2.nix ================================================ { config, ... }: let inherit (config.networking) hostName; in { age.secrets.oauth2.rekeyFile = ../../../secrets/oauth2.age; security.acme.certs."auth.${hostName}.meurer.org" = { }; services = { oauth2-proxy = { enable = true; nginx.domain = "auth.${hostName}.meurer.org"; cookie.domain = ".${hostName}.meurer.org"; email.domains = [ "meurer.org" ]; keyFile = config.age.secrets.oauth2.path; reverseProxy = true; passBasicAuth = true; setXauthrequest = true; extraConfig = { skip-provider-button = true; whitelist-domain = "*.${hostName}.meurer.org"; cookie-samesite = "lax"; }; }; nginx.virtualHosts."auth.${hostName}.meurer.org" = { useACMEHost = "auth.${hostName}.meurer.org"; forceSSL = true; kTLS = true; }; }; } ================================================ FILE: modules/nixos/services/peerix.nix ================================================ { services.peerix.enable = true; } ================================================ FILE: modules/nixos/services/podman.nix ================================================ { # environment.persistence."/nix/state".directories = [ # "/var/lib/containers" # ]; virtualisation.podman = { enable = true; autoPrune.enable = true; dockerCompat = true; dockerSocket.enable = true; }; } ================================================ FILE: modules/nixos/services/postgresql.nix ================================================ { environment.persistence."/nix/state".directories = [ { directory = "/var/lib/postgresql"; user = "postgres"; group = "postgres"; } ]; services.postgresql = { enable = true; enableJIT = true; }; } ================================================ FILE: modules/nixos/services/prometheus.nix ================================================ { environment.persistence."/nix/state".directories = [ { directory = "/var/lib/prometheus2"; user = "prometheus"; group = "prometheus"; } ]; services.prometheus = { enable = true; extraFlags = [ "--storage.tsdb.retention.time=90d" ]; scrapeConfigs = [ { job_name = "node"; scrape_interval = "1m"; static_configs = [ { targets = [ "127.0.0.1:9100" ]; } ]; } { job_name = "prometheus"; scrape_interval = "1m"; static_configs = [ { targets = [ "127.0.0.1:9090" ]; } ]; } ]; exporters = { node = { enable = true; enabledCollectors = [ "systemd" "pressure" ]; }; }; }; services.grafana.provision.datasources.settings = { apiVersion = 1; datasources = [ { name = "Prometheus"; type = "prometheus"; url = "http://127.0.0.1:9090"; orgId = 1; } ]; deleteDatasources = [ { name = "Prometheus"; orgId = 1; } ]; }; } ================================================ FILE: modules/nixos/services/syncthing.nix ================================================ { config, ... }: with config.networking; { } ================================================ FILE: modules/nixos/services/unbound.nix ================================================ { config, lib, pkgs, ... }: { environment.persistence."/nix/state".directories = [ { directory = "/var/lib/unbound"; inherit (config.services.unbound) user group; } ]; services = { resolved.enable = lib.mkForce false; prometheus = { scrapeConfigs = [ { job_name = "unbound"; scrape_interval = "30s"; static_configs = [ { targets = [ "127.0.0.1:9167" ]; } ]; } ]; exporters.unbound = { enable = true; unbound.host = "unix:///run/unbound/unbound.ctl"; user = "unbound"; }; }; unbound = { enable = true; enableRootTrustAnchor = true; localControlSocketPath = "/run/unbound/unbound.ctl"; resolveLocalQueries = true; package = pkgs.unbound-full; settings = { server = { aggressive-nsec = true; cache-max-ttl = 86400; cache-min-ttl = 300; delay-close = 10000; deny-any = true; do-ip4 = true; do-ip6 = true; do-tcp = true; do-udp = true; edns-buffer-size = "1472"; extended-statistics = true; harden-algo-downgrade = true; harden-below-nxdomain = true; harden-dnssec-stripped = true; harden-glue = true; harden-large-queries = true; harden-short-bufsize = true; infra-cache-slabs = 8; interface = [ "0.0.0.0" "::" ]; key-cache-slabs = 8; msg-cache-size = "256m"; msg-cache-slabs = 8; neg-cache-size = "256m"; num-queries-per-thread = 4096; num-threads = 8; outgoing-range = 8192; prefetch = true; prefetch-key = true; qname-minimisation = true; rrset-cache-size = "256m"; rrset-cache-slabs = 8; rrset-roundrobin = true; serve-expired = true; so-rcvbuf = "4m"; so-reuseport = true; so-sndbuf = "4m"; statistics-cumulative = true; statistics-interval = 0; tls-cert-bundle = "/etc/ssl/certs/ca-certificates.crt"; unwanted-reply-threshold = 100000; use-caps-for-id = "no"; verbosity = 1; private-address = [ "10.0.0.0/8" "169.254.0.0/16" "172.16.0.0/12" "192.168.0.0/16" "fd00::/8" "fe80::/10" ]; private-domain = [ "local" ]; domain-insecure = [ "local" ]; }; }; }; }; } ================================================ FILE: modules/nixos/services/veilid.nix ================================================ { services.veilid = { enable = true; openFirewall = true; }; } ================================================ FILE: modules/nixos/services/virt-manager.nix ================================================ { pkgs, ... }: { environment.systemPackages = with pkgs; [ virt-manager spice-gtk swtpm ]; security.polkit.enable = true; virtualisation = { libvirtd = { enable = true; qemu = { package = pkgs.qemu_kvm; swtpm.enable = true; }; }; spiceUSBRedirection.enable = true; }; } ================================================ FILE: modules/nixos/services/wivrn.nix ================================================ { pkgs, ... }: { environment.systemPackages = with pkgs; [ wayvr ]; services.wivrn = { enable = true; openFirewall = true; autoStart = false; }; } ================================================ FILE: modules/nixos/tailscale-address.nix ================================================ # Custom option for Tailscale address used by various services { lib, ... }: { options.networking.tailscaleAddress = lib.mkOption { type = lib.types.nullOr lib.types.str; default = null; description = "Tailscale IP address for this host, used for CORS and service bindings"; }; } ================================================ FILE: modules/nixos/tmux.nix ================================================ # System-level tmux configuration - NixOS only { pkgs, ... }: { programs.tmux = { enable = true; aggressiveResize = true; clock24 = true; escapeTime = 0; historyLimit = 30000; # Use idempotent new-session to avoid creating duplicate sessions when both # NixOS and home-manager configs are loaded. The -A flag attaches if the # session exists, otherwise creates it. newSession = false; extraConfigBeforePlugins = '' new-session -A -s 0 ''; secureSocket = false; plugins = with pkgs.tmuxPlugins; [ extrakto fuzzback tmux-fzf tmux-thumbs lazy-restore ]; # shortcut = "a"; # keyMode = "vi"; terminal = "tmux-256color"; extraConfig = '' # update the env when attaching to an existing session set -g update-environment -r set -ag terminal-overrides ",alacritty*:Tc,foot*:Tc,xterm-kitty*:Tc,xterm-256color:Tc" set -as terminal-features ",alacritty*:RGB,foot*:RGB,xterm-kitty*:RGB" set -as terminal-features ",alacritty*:hyperlinks,foot*:hyperlinks,xterm-kitty*:hyperlinks" set -as terminal-features ",alacritty*:usstyle,foot*:usstyle,xterm-kitty*:usstyle" # automatically renumber windows set -g renumber-windows on bind C-a last-window bind a send-prefix bind R source-file ~/.config/tmux/tmux.conf \; display-message "Config reloaded..." bind : command-prompt bind r refresh-client bind L clear-history bind space next-window bind bspace previous-window bind enter next-layout bind v split-window -h -c "#{pane_current_path}" bind s split-window -v -c "#{pane_current_path}" bind h select-pane -L bind j select-pane -D bind k select-pane -U bind l select-pane -R bind \\ split-window -h -c "#{pane_current_path}" bind - split-window -v -c "#{pane_current_path}" bind C-o rotate-window bind + select-layout main-horizontal bind = select-layout main-vertical bind a last-pane bind q display-panes bind c new-window bind t next-window bind T previous-window bind [ copy-mode bind ] paste-buffer set -g base-index 0 set-window-option -g automatic-rename setw -g monitor-activity on set -g visual-activity off set -g status-right '%a | %Y-%m-%d | %H:%M' ''; }; } ================================================ FILE: modules/nixos/users/bbigras.nix ================================================ # NixOS system user configuration for bbigras { config, lib, pkgs, ... }: { # Link home-manager user to NixOS user home-manager.users.bbigras.home = { username = config.users.users.bbigras.name; # inherit (config.users.users.bbigras) uid; }; age.secrets.bbigrasPassword.rekeyFile = ../../../secrets/bbigras-password.age; # users.groups.bbigras.gid = config.users.users.bbigras.uid; users.groups.bbigras = { }; users.users.bbigras = { createHome = true; description = "Bruno Bigras"; group = "bbigras"; extraGroups = [ "wheel" "dialout" "audio" ] ++ lib.optionals config.hardware.i2c.enable [ "i2c" ] ++ lib.optionals config.networking.networkmanager.enable [ "networkmanager" ] ++ lib.optionals config.programs.sway.enable [ "input" "video" ] ++ lib.optionals config.services.unbound.enable [ "unbound" ] ++ lib.optionals config.services.transmission.enable [ "transmission" ] ++ lib.optionals config.virtualisation.docker.enable [ "docker" ] ++ lib.optionals config.virtualisation.libvirtd.enable [ "libvirtd" ] ++ lib.optionals config.virtualisation.kvmgt.enable [ "kvm" ] ++ lib.optionals config.virtualisation.podman.enable [ "podman" ]; isNormalUser = true; openssh.authorizedKeys.keys = [ "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGPpDAsQDRslxy69ylheWAtg2synerGqkCeCw6F4ISXp TKey" "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIP2Eo0xWZ1VPs5iHlDd3j+O+3I1qx4VqDaXpkL6phB6Z bbigras@desktop" "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICaqQycIPmT5lvdqdIQwcy+pitleXZtK0j8RsphADcfa bbigras@laptop" "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGZqHDSyyXc5Zs5XzXveQaOzNoSMPLtY686W5/eVISuQ bbigras@pixel6" "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCQErMfuhLr14DAHaUSgTLArydzPoLzeOzkYAzf/ye3qvP/vVXeGe4ruWWxvro0yS3DUlfUpmWUU3KRyv3ZN9z6Q9FnDsKKv+GXTrZq4owymd6NWKOLl2F6LGwUGgnkwvit5TDUVolCvIQTT7F/qLgYvmr0q1nTunrl+uPVNXFiAyalhIPMVU+atw/pNmp3JfIqBRefVlrxeoCQ81/nRhQJcNNXjRxSzIeKu80wwCxODYOBtHdIP/NJEzhAMOq/HLabC7ehZtNohweEAlK71HycqwWSNNonEBU0g9R0r/VfXiENa4x+IY5fvMjsdOj53dZuXCDV0AjOmd8sJoepjF7l pubkeygenerator@mobiledevice" "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIL+uP/uqqMvdcLF2j4Zz09NNDFO7DOHkpIqxI1XpYo2c bbigras@nixos" ]; shell = pkgs.fish; # uid = 8888; hashedPasswordFile = config.age.secrets.bbigrasPassword.path; }; } ================================================ FILE: modules/shared/aspell.nix ================================================ # Aspell dictionaries - shared between NixOS and Darwin { pkgs, ... }: { environment.systemPackages = with pkgs; [ (aspellWithDicts ( ds: with ds; [ en en-computers en-science fr ] )) ]; } ================================================ FILE: modules/shared/common.nix ================================================ # Common system configuration for NixOS and Darwin # Note: Shared module imports (aspell, nix, nixpkgs, registry, theme) must be # done in platform cores due to module class restrictions. { config, lib, pkgs, ... }: let inherit (config.nixpkgs.hostPlatform) isDarwin; in { documentation = lib.mkMerge [ { enable = true; doc.enable = true; info.enable = true; man.enable = true; } (lib.optionalAttrs (!isDarwin) { dev.enable = true; man.cache.enable = true; }) ]; environment = { pathsToLink = [ "/share/fish" "/share/zsh" ]; systemPackages = with pkgs; [ molly-guard rsync ]; }; programs = lib.mkMerge [ { fish.enable = true; nix-index.enable = true; zsh.enable = true; } (lib.optionalAttrs (!isDarwin) { command-not-found.enable = false; mosh.enable = true; zsh.enableGlobalCompInit = false; }) ]; } ================================================ FILE: modules/shared/nix.nix ================================================ # Shared nix settings for NixOS and Darwin { lib, pkgs, ... }: let inherit (pkgs.stdenv) isDarwin; in { nix = lib.mkMerge [ { package = pkgs.nixVersions.latest; settings = { accept-flake-config = true; allowed-users = [ "@wheel" ]; build-users-group = "nixbld"; builders-use-substitutes = true; trusted-users = [ "root" "@wheel" ]; substituters = [ "http://192.168.0.201:8501?priority=1" "https://bbigras-nix-config.cachix.org" "https://nix-community.cachix.org" ]; trusted-public-keys = [ "192.168.0.201:zSAiwQJTX02yGP2NSof1Pin339R5YP+91Y5xdaqFsnU=" "bbigras-nix-config.cachix.org-1:aXL6Q9Oi0jyF79YAKRu17iVNk9HY0p23OZX7FA8ulhU=" "nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=" ]; cores = 0; max-jobs = "auto"; experimental-features = [ "auto-allocate-uids" "configurable-impure-env" "flakes" "nix-command" ]; http-connections = 0; # flake-registry = "/etc/nix/registry.json"; always-allow-substitutes = true; }; distributedBuilds = true; extraOptions = '' !include tokens.conf ''; } # NixOS-specific (use optionalAttrs to avoid defining non-existent options) (lib.optionalAttrs (!isDarwin) { settings = { auto-optimise-store = true; sandbox = true; }; channel.enable = false; daemonCPUSchedPolicy = "batch"; daemonIOSchedPriority = 5; optimise = { automatic = true; dates = [ "03:00" ]; }; }) # Darwin-specific (use optionalAttrs to avoid defining non-existent options) (lib.optionalAttrs isDarwin { settings = { # Causes annoying "cannot link ... to ...: File exists" errors on Darwin auto-optimise-store = false; sandbox = false; }; daemonIOLowPriority = false; }) ]; } ================================================ FILE: modules/shared/nixpkgs.nix ================================================ # Shared nixpkgs configuration # Works for NixOS, Darwin, and home-manager (all have nixpkgs.config option) { flake, ... }: let inherit (flake) self; in { nixpkgs = { overlays = [ self.overlays.default ]; config.allowUnfree = true; }; } ================================================ FILE: overlays/nix-latest.nix ================================================ final: prev: let useLatestNixFor = name: { inherit name; value = prev.${name}.override { nix = final.nixVersions.latest; }; }; useLatestNix = names: builtins.listToAttrs (map useLatestNixFor names); in useLatestNix [ "agenix" "nix-direnv" "nix-update" "nixpkgs-review" ] ================================================ FILE: overlays/nom-latest.nix ================================================ final: prev: { # FIXME: using my patch for now nix-output-monitor = prev.nix-output-monitor.overrideAttrs (_: { src = final.fetchFromGitHub { owner = "lovesegfault"; repo = "nix-output-monitor"; rev = "c9ce708f72b95d92f52b77e04d51dd214cc58592"; hash = "sha256-dTL3f1zx2PNqmemvWhmuwdXdI1F3FcrkHC86F1Y78qQ="; postFetch = '' rm -f $out/log.json ''; }; }); } ================================================ FILE: overlays/scripts/ccinit.sh ================================================ #!/usr/bin/env bash set -euo pipefail WORKSPACE_CLAUDE_MD="$HOME/src/CLAUDE.md" BEGIN_MARKER="" END_MARKER="" # Handle CLAUDE.md if [[ -L ./CLAUDE.md ]]; then echo "CLAUDE.md symlink already exists" elif [[ -e ./CLAUDE.md ]]; then echo "CLAUDE.md exists but is not a symlink - skipping" elif [[ -e ../CLAUDE.md ]]; then ln -s ../CLAUDE.md ./CLAUDE.md echo "Created symlink: ./CLAUDE.md -> ../CLAUDE.md" else echo "No ../CLAUDE.md found, running claude /init..." claude /init if [[ -e ./CLAUDE.md ]]; then mv ./CLAUDE.md ../CLAUDE.md ln -s ../CLAUDE.md ./CLAUDE.md echo "Moved CLAUDE.md to parent and created symlink" else echo "claude /init did not create CLAUDE.md" exit 1 fi fi # Insert/update ~/src/CLAUDE.md section if it exists if [[ -f $WORKSPACE_CLAUDE_MD && -f ../CLAUDE.md ]]; then workspace_content=$(cat "$WORKSPACE_CLAUDE_MD") new_section="${BEGIN_MARKER} ${workspace_content} ${END_MARKER}" # Remove existing section if present (wherever it may be) # Ensures exactly one blank line remains between preceding and succeeding content if grep -qF "$BEGIN_MARKER" ../CLAUDE.md; then gawk -i inplace -v begin="$BEGIN_MARKER" -v end="$END_MARKER" ' $0 == begin { blanks=0; skip=1; next } $0 == end { skip=0; need_blank=1; next } need_blank { if ($0 == "") next print "" need_blank=0 print next } skip { next } $0 == "" { blanks++; next } { for (i=0; i>../CLAUDE.md echo "Appended ~/src/CLAUDE.md section to ../CLAUDE.md" fi elif [[ ! -f $WORKSPACE_CLAUDE_MD ]]; then echo "No ~/src/CLAUDE.md found, skipping section insertion" fi # Handle .claude directory if [[ -L ./.claude ]]; then echo ".claude symlink already exists" elif [[ -e ./.claude ]]; then echo ".claude exists but is not a symlink - skipping" elif [[ -e ../.claude ]]; then ln -s ../.claude ./.claude echo "Created symlink: ./.claude -> ../.claude" else mkdir -p ../.claude ln -s ../.claude ./.claude echo "Created ../.claude and symlink" fi # Add to .git/info/exclude if in a git repo if [[ -d .git/info ]]; then exclude_file=".git/info/exclude" for entry in CLAUDE.md .claude; do if ! grep -qxF "$entry" "$exclude_file" 2>/dev/null; then echo "$entry" >>"$exclude_file" echo "Added $entry to $exclude_file" fi done fi ================================================ FILE: overlays/scripts/checkart.sh ================================================ #!/usr/bin/env bash set -euo pipefail sort <<<"$(find "$1" -mindepth 2 -type d -print0 | while read -r -d $'\0' album; do [ -f "$album/cover.jpg" ] || echo "$album"; done)" ================================================ FILE: overlays/scripts/default.nix ================================================ final: _: let emoji_json = final.fetchurl { url = "https://raw.githubusercontent.com/github/gemoji/0eca75db9301421efc8710baf7a7576793ae452a/db/emoji.json"; hash = "sha256-sXSuKusyG1L2Stuf9BL5ZqfzOIOdeAeE3RXcrXAsLdY="; }; emoji_list = final.runCommand "emoji_list.txt" { nativeBuildInputs = with final; [ jq gnused ]; } '' jq -r '.[] | "\(.emoji) \t \(.description)"' '${emoji_json}' | sed -e 's,\\t,\t,g' > $out ''; writeShellApp = args: let pname = args.name; src = args.src or (./. + "/${args.name}.sh"); solutions = final.lib.filterAttrs (n: _: n != "name" && n != "src") args; in final.resholve.mkDerivation { inherit pname src; version = "0.0.0"; dontUnpack = true; dontConfigure = true; dontBuild = true; installPhase = '' runHook preInstall mkdir -p $out/bin cp $src $out/bin/${args.name} runHook postInstall ''; doInstallCheck = true; installCheckPhase = '' runHook preInstallCheck ${final.stdenv.shellDryRun} "$out/bin/${args.name}" ${final.shellcheck}/bin/shellcheck "$out/bin/${args.name}" ${final.shfmt}/bin/shfmt --diff -s -ln bash -i 0 -ci "$out/bin/${args.name}" runHook postInstallCheck ''; solutions.default = { interpreter = "${final.bash}/bin/bash"; scripts = [ "bin/${args.name}" ]; } // solutions; }; in { checkart = writeShellApp { name = "checkart"; inputs = with final; [ coreutils findutils ]; }; drunmenu-wayland = writeShellApp { name = "drunmenu"; src = ./drunmenu-wayland.sh; inputs = with final; [ gnused spawn wofi ]; execer = [ "cannot:${final.wofi}/bin/wofi" "cannot:${final.spawn}/bin/spawn" ]; }; drunmenu-x11 = writeShellApp { name = "drunmenu"; src = ./drunmenu-x11.sh; inputs = with final; [ rofi spawn ]; execer = [ "cannot:${final.rofi}/bin/rofi" "cannot:${final.spawn}/bin/spawn" ]; }; emojimenu-wayland = writeShellApp { name = "emojimenu"; src = ./emojimenu-wayland.sh; inputs = with final; [ coreutils wl-clipboard wofi ]; execer = [ "cannot:${final.wofi}/bin/wofi" "cannot:${final.wl-clipboard}/bin/wl-copy" ]; prologue = (final.writeText "export-emoji-list" '' export emoji_list="${emoji_list}" '').outPath; }; emojimenu-x11 = writeShellApp { name = "emojimenu"; src = ./emojimenu-x11.sh; inputs = with final; [ coreutils rofi xclip ]; execer = [ "cannot:${final.rofi}/bin/rofi" "cannot:${final.xclip}/bin/xclip" ]; prologue = (final.writeText "export-emoji-list" '' export emoji_list="${emoji_list}" '').outPath; }; fixart = writeShellApp { name = "fixart"; inputs = with final; [ coreutils findutils ]; fake.external = [ "beet" ]; }; nix-closure-size = writeShellApp { name = "nix-closure-size"; inputs = with final; [ coreutils gawk ]; fake.external = [ "nix-store" ]; }; screenshot = writeShellApp { name = "screenshot"; inputs = with final; [ grim slurp swappy ]; execer = [ "cannot:${final.swappy}/bin/swappy" ]; }; spawn = writeShellApp { name = "spawn"; inputs = with final; [ coreutils systemd util-linux ]; execer = [ "cannot:${final.systemd}/bin/systemd-run" ]; }; ccinit = writeShellApp { name = "ccinit"; inputs = with final; [ coreutils gawk gnugrep ]; fake.external = [ "claude" ]; }; } ================================================ FILE: overlays/scripts/drunmenu-wayland.sh ================================================ #!/usr/bin/env bash set -euo pipefail program="$( wofi \ --insensitive \ --define "drun-print_command=true" \ --cache-file="${XDG_CACHE_HOME:-$HOME/.cache}/wofi/drunmenu" \ --show=drun | sed "s/%[a-zA-Z]//g" )" # shellcheck disable=SC2086 exec spawn $program ================================================ FILE: overlays/scripts/drunmenu-x11.sh ================================================ #!/usr/bin/env bash set -euo pipefail program="$( rofi \ -cache-dir "${XDG_CACHE_HOME:-$HOME/.cache}/rofi/drunmenu" \ -run-command "echo {cmd}" \ -show drun )" # shellcheck disable=SC2086 exec spawn $program ================================================ FILE: overlays/scripts/emojimenu-wayland.sh ================================================ #!/usr/bin/env/bash set -euo pipefail # XXX: We patch-in the emoji-list path in Nix # shellcheck disable=SC2154 emoji="$( wofi \ --cache-file="$XDG_CACHE_HOME/wofi/emojimenu" \ -p emoji \ --show dmenu <"${emoji_list}" | cut -f1 -d" " )" wl-copy --trim-newline <<<"$emoji" ================================================ FILE: overlays/scripts/emojimenu-x11.sh ================================================ #!/usr/bin/env/bash set -euo pipefail # XXX: We patch-in the emoji-list path in Nix # shellcheck disable=SC2154 emoji="$( rofi \ -cache-dir "$XDG_CACHE_HOME/rofi/emojimenu" \ -p emoji \ -dmenu <"${emoji_list}" | cut -f1 -d" " )" xclip -in -rmlastnl -selection clipboard <<<"$emoji" ================================================ FILE: overlays/scripts/fixart.sh ================================================ #!/usr/bin/env bash set -euo pipefail function ctrl_c() { exit 1 } trap ctrl_c INT function die() { echo "$@" exit 1 } newart=$1 [ $# -gt 1 ] || die "Invalid usage" beet clearart "${@:2}" beet embedart -f "$newart" "${@:2}" beet extractart -a "${@:2}" outpath="$(beet ls -a -p "${@:2}")" original="$(sha256sum "$newart" | cut -f 1 -d " ")" updated="$(sha256sum "$outpath/cover.jpg" | cut -f 1 -d " ")" [ "$original" == "$updated" ] || exit 1 echo "OK: SHA" jpgs="$(find "$outpath" -type f -name "*.jpg" | wc -l)" [ "$jpgs" -eq 1 ] || die "Too many .jpg in album path" lingering="$(find "$outpath" -type f -iname "cover.*" -not -iname "cover.jpg")" [ -z "$lingering" ] || die "Lingering cover files: $lingering" echo "OK: cover count" ================================================ FILE: overlays/scripts/nix-closure-size.sh ================================================ #!/usr/bin/env bash set -euo pipefail # shellcheck disable=SC2046 nix-store -q --size $(nix-store -qR "$(readlink -e "$1")") | gawk '{ a+=$1 } END { print a }' | numfmt --to=iec-i ================================================ FILE: overlays/scripts/screenshot.sh ================================================ #!/usr/bin/env bash grim -t png -g "$(slurp)" - | swappy -f - ================================================ FILE: overlays/scripts/spawn.sh ================================================ #!/usr/bin/env bash set -euo pipefail [ "$#" -ge 1 ] || exit 1 pname="$(basename "$1")" uuid="$(uuidgen)" exec systemd-run --user --scope --unit "spawn-$pname-$uuid" "$@" ================================================ FILE: overlays/transmission-unstable.nix ================================================ final: prev: { transmission_4 = prev.transmission_4.overrideAttrs (old: { version = "unstable-2025-11-02"; src = final.fetchFromGitHub { owner = "transmission"; repo = "transmission"; rev = "90b52bc65cbe0e406642937f6c7a5b84acd95030"; hash = "sha256-gBwdQl1zw1ncCgFW5IQmYGcdts9i5EZ6nCWvyyTjvzk="; fetchSubmodules = true; }; patches = [ ]; buildInputs = (old.buildInputs or [ ]) ++ [ final.rapidjson final.crc32c ]; postPatch = '' # Clean third-party libraries to ensure system ones are used. # Excluding gtest since it is hardcoded to vendored version. The rest of the listed libraries are not packaged. pushd third-party for f in *; do if [[ ! $f =~ googletest|wildmat|fast_float|wide-integer|jsonsl|small|crc32c ]]; then rm -r "$f" fi done popd rm \ cmake/FindFmt.cmake \ cmake/FindUtfCpp.cmake \ cmake/FindRapidJSON.cmake # Upstream uses different config file name. substituteInPlace CMakeLists.txt --replace 'find_package(UtfCpp)' 'find_package(utf8cpp)' ''; postInstall = let apparmorRules = with final; apparmorRulesFromClosure { name = "transmission-daemon"; } ( [ curl libdeflate libevent libnatpmp libpsl miniupnpc openssl pcre zlib ] ++ lib.optionals true [ systemd ] ++ lib.optionals stdenv.hostPlatform.isLinux [ inotify-tools ] ); in '' mkdir $apparmor cat >$apparmor/bin.transmission-daemon < $out/bin/transmission-daemon { include include include include "${apparmorRules}" r @{PROC}/sys/kernel/random/uuid, r @{PROC}/sys/vm/overcommit_memory, r @{PROC}/@{pid}/environ, r @{PROC}/@{pid}/mounts, rwk /tmp/tr_session_id_*, r $out/share/transmission/public_html/**, include } EOF install -Dm0444 -t $out/share/icons ../icons/transmission.ico ''; }); } ================================================ FILE: overlays/truecolor-check.nix ================================================ final: _: { truecolor-check = final.callPackage ( { writers }: writers.writePython3Bin "truecolor-check" { flakeIgnore = [ "E111" "E114" "E225" "E226" "E261" "E265" "E302" "E305" "E501" ]; } ( builtins.readFile ( builtins.fetchurl { url = "https://gist.githubusercontent.com/raw/fdeaf79e921c2f413f44b6f613f6ad53/94d8b2be62657e96488038b0e547e3009ed87d40/colors.py"; sha256 = "143ljymnx30axz26gg8x3q6d77g5fa8lylgjglwbdgvnk8ym7x4p"; } ) ) ) { }; } ================================================ FILE: secrets/bbigras-password.age ================================================ age-encryption.org/v1 -> ssh-ed25519 rRe3bA ND+VTgHubga3t9koEOXR6zPJJIGrn68dKsKaNjxDwEA StLi5lIrbxFPj6j7cinKhGc0Kll3sQKyfjBVyUJ1w/8 -> ]^-grease Y:}iGOL P3z2I0IB0211Aw --- EB2YGFTPaJBoQn4zBOBKX+eddZjBulLzbHsDNf1VNlQ Wp-e [~D4MYE6LX'FAhb#}j9L"87V,BD}Ц>`).J&ɲ'erY `}5 z^U)i.eh9$bT>Q? ================================================ FILE: secrets/rekeyed/laptop/358bfc03128d18174ab84822482bf279-bbigrasPassword.age ================================================ age-encryption.org/v1 -> ssh-ed25519 Jta5Xg PTP8OqhQxgGf48PGTJCKHHUUAP+x9Sto8MaVTjAwPGI TP35KkULQGvsGVEHplk9WcGXzLb1nMUzMBNs26oiNhY -> U_N-grease ;T5 Z. q,\Y- XT8kPChUMzvGlHKLulZj5WIJmBxDzBNFw5+0FSOQc19P5pu6/wwxW+7DCVzN8BoH oTkC0ir7aUSZXeZL --- txajrLfPYACrI75IoOxMEbLyMh0PtqAIG2nprMDhqh4 ݊ ξS.n~شݪƋMbK^kEku 䰅TX~'rBuQwf6'PqSt'ch-G@Ccb=CGpx/U9w0S