diff --git a/configuration.nix b/configuration.nix index e4974ee..d17fb2c 100644 --- a/configuration.nix +++ b/configuration.nix @@ -1,5 +1,95 @@ { config, pkgs, ... }: +let + displayBrightness = pkgs.writeShellApplication { + name = "display-brightness"; + runtimeInputs = with pkgs; [ + brightnessctl + ddcutil + gawk + ]; + text = '' + set -euo pipefail + + direction="''${1:-}" + step="''${DISPLAY_BRIGHTNESS_STEP:-1}" + minimum="''${DISPLAY_BRIGHTNESS_MIN:-1}" + + is_uint() { + case "$1" in + "" | *[!0-9]*) + return 1 + ;; + *) + return 0 + ;; + esac + } + + if ! is_uint "$step" || [ "$step" -lt 1 ]; then + step=1 + fi + if ! is_uint "$minimum"; then + minimum=1 + fi + + case "$direction" in + down) + backlight_delta="''${step}%-" + ;; + up) + backlight_delta="''${step}%+" + ;; + *) + printf 'usage: display-brightness up|down\n' >&2 + exit 64 + ;; + esac + + brightnessctl --class=backlight --min-value set "$backlight_delta" >/dev/null 2>&1 || true + + ddc_displays="$( + ddcutil --brief detect 2>/dev/null \ + | awk '/^Display[[:space:]]+[0-9]+/ { print $2 }' \ + || true + )" + + for display in $ddc_displays; do + parsed="$( + ddcutil --brief --display "$display" getvcp 10 2>/dev/null \ + | awk '$1 == "VCP" && $2 == "10" && NF >= 5 { print $(NF - 1), $NF; exit }' \ + || true + )" + if [ -z "$parsed" ]; then + continue + fi + + read -r current maximum _ </dev/null 2>&1 || true + done + ''; + }; +in + { boot.loader.systemd-boot.enable = true; boot.loader.systemd-boot.configurationLimit = 3; @@ -109,6 +199,7 @@ enable = true; enable32Bit = true; }; + hardware.i2c.enable = true; # Enable keyd for key remapping services.keyd = { @@ -131,8 +222,8 @@ brightnessdown = "noop"; # ← Key 7: disabled brightnessup = "noop"; # ← Key 8: disabled # Key 9: display toggle (leftmeta+p) - disabled below - rfkill = "brightnessdown"; # ← Key 10: brightness down - sysrq = "brightnessup"; # ← Key 11: brightness up + rfkill = "command(${displayBrightness}/bin/display-brightness down)"; # ← Key 10: brightness down + sysrq = "command(${displayBrightness}/bin/display-brightness up)"; # ← Key 11: brightness up media = "sysrq"; # ← Key 12: screenshot }; }; @@ -143,7 +234,7 @@ main = { brightnessdown = "noop"; # ← Key 7: disabled brightnessup = "noop"; # ← Key 8: disabled - rfkill = "brightnessdown"; # ← Key 10: brightness down + rfkill = "command(${displayBrightness}/bin/display-brightness down)"; # ← Key 10: brightness down }; }; }; @@ -327,6 +418,7 @@ "wheel" "video" "render" + "i2c" "docker" "camera" "scanner" @@ -408,18 +500,21 @@ "net.ipv4.tcp_congestion_control" = "bbr"; }; - environment.systemPackages = with pkgs; [ - bubblewrap - docker - docker-compose - exfatprogs - flatpak - nh - sane-airscan - sane-backends - simple-scan - wget - ]; + environment.systemPackages = + (with pkgs; [ + bubblewrap + ddcutil + docker + docker-compose + exfatprogs + flatpak + nh + sane-airscan + sane-backends + simple-scan + wget + ]) + ++ [ displayBrightness ]; programs.steam.enable = true; programs.nix-index-database.comma.enable = true; diff --git a/flake.lock b/flake.lock index f880af6..74626eb 100644 --- a/flake.lock +++ b/flake.lock @@ -107,11 +107,11 @@ "zon2nix": "zon2nix" }, "locked": { - "lastModified": 1779573072, - "narHash": "sha256-DgdXilZcUCEQdOcgt2+Aj77+up2OkdBFg5Q6En5PUB0=", + "lastModified": 1779812402, + "narHash": "sha256-gozJEyJHbaAyrbzODKeWJhxpUrGK6m4DIPDogfjz2BU=", "owner": "ghostty-org", "repo": "ghostty", - "rev": "d5d8cef4d3834cc8999eb9344066b0960b033f2d", + "rev": "2e5ad917eb4e325a3dbb161c3f41208a8cd35e44", "type": "github" }, "original": { @@ -362,11 +362,11 @@ "nixpkgs": "nixpkgs_4" }, "locked": { - "lastModified": 1779580088, - "narHash": "sha256-oYEtJtyKegw8CO+OistcabbKDmhrRDrVmSbLcXT9mkw=", + "lastModified": 1779821945, + "narHash": "sha256-6NHOS9mQiUMEDqgnuQXhqgckQ9ZR03PPW3b6P7XdUYQ=", "owner": "anomalyco", "repo": "opencode", - "rev": "0b3a1c2fdf8032d7168d1a5103c460c84dfee882", + "rev": "fdfd0afed7fddbe852ea53b5a75ce1ea8ad725a2", "type": "github" }, "original": { @@ -470,11 +470,11 @@ ] }, "locked": { - "lastModified": 1779455631, - "narHash": "sha256-svU6Ro4xiMxMA1KJGwQ/nfKwz3yXE/SONCw2Z1qTXHA=", + "lastModified": 1779781734, + "narHash": "sha256-c2FZ7S/rhnCHcwPkc82GOxlCw88HKYBaJkLtMgi72p8=", "owner": "0xc000022070", "repo": "zen-browser-flake", - "rev": "5bcdfcef664bf62831dcb4b947004d9c5fbf7201", + "rev": "ef7c137fea3d0d0624864db7aa1f068eed79b0fb", "type": "github" }, "original": {